@secondlayer/cli 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +15705 -458
- package/dist/cli.js.map +167 -9
- package/dist/index.js +17 -17
- package/dist/index.js.map +3 -3
- package/dist/plugin-manager.js +25 -7
- package/dist/plugin-manager.js.map +3 -3
- package/package.json +9 -10
package/dist/cli.js.map
CHANGED
|
@@ -1,17 +1,175 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["
|
|
3
|
+
"sources": ["../../../node_modules/commander/lib/error.js", "../../../node_modules/commander/lib/argument.js", "../../../node_modules/commander/lib/help.js", "../../../node_modules/commander/lib/option.js", "../../../node_modules/commander/lib/suggestSimilar.js", "../../../node_modules/commander/lib/command.js", "../../../node_modules/commander/index.js", "../../../node_modules/chalk/source/vendor/ansi-styles/index.js", "../../../node_modules/chalk/source/vendor/supports-color/index.js", "../../../node_modules/chalk/source/utilities.js", "../../../node_modules/chalk/source/index.js", "../../../node_modules/fast-glob/out/utils/array.js", "../../../node_modules/fast-glob/out/utils/errno.js", "../../../node_modules/fast-glob/out/utils/fs.js", "../../../node_modules/fast-glob/out/utils/path.js", "../../../node_modules/is-extglob/index.js", "../../../node_modules/is-glob/index.js", "../../../node_modules/glob-parent/index.js", "../../../node_modules/braces/lib/utils.js", "../../../node_modules/braces/lib/stringify.js", "../../../node_modules/is-number/index.js", "../../../node_modules/to-regex-range/index.js", "../../../node_modules/fill-range/index.js", "../../../node_modules/braces/lib/compile.js", "../../../node_modules/braces/lib/expand.js", "../../../node_modules/braces/lib/constants.js", "../../../node_modules/braces/lib/parse.js", "../../../node_modules/braces/index.js", "../../../node_modules/picomatch/lib/constants.js", "../../../node_modules/picomatch/lib/utils.js", "../../../node_modules/picomatch/lib/scan.js", "../../../node_modules/picomatch/lib/parse.js", "../../../node_modules/picomatch/lib/picomatch.js", "../../../node_modules/micromatch/index.js", "../../../node_modules/fast-glob/out/utils/pattern.js", "../../../node_modules/merge2/index.js", "../../../node_modules/fast-glob/out/utils/stream.js", "../../../node_modules/fast-glob/out/utils/string.js", "../../../node_modules/fast-glob/out/utils/index.js", "../../../node_modules/fast-glob/out/managers/tasks.js", "../../../node_modules/@nodelib/fs.stat/out/providers/async.js", "../../../node_modules/@nodelib/fs.stat/out/providers/sync.js", "../../../node_modules/@nodelib/fs.stat/out/adapters/fs.js", "../../../node_modules/@nodelib/fs.stat/out/settings.js", "../../../node_modules/@nodelib/fs.stat/out/index.js", "../../../node_modules/queue-microtask/index.js", "../../../node_modules/run-parallel/index.js", "../../../node_modules/@nodelib/fs.scandir/out/constants.js", "../../../node_modules/@nodelib/fs.scandir/out/utils/fs.js", "../../../node_modules/@nodelib/fs.scandir/out/utils/index.js", "../../../node_modules/@nodelib/fs.scandir/out/providers/common.js", "../../../node_modules/@nodelib/fs.scandir/out/providers/async.js", "../../../node_modules/@nodelib/fs.scandir/out/providers/sync.js", "../../../node_modules/@nodelib/fs.scandir/out/adapters/fs.js", "../../../node_modules/@nodelib/fs.scandir/out/settings.js", "../../../node_modules/@nodelib/fs.scandir/out/index.js", "../../../node_modules/reusify/reusify.js", "../../../node_modules/fastq/queue.js", "../../../node_modules/@nodelib/fs.walk/out/readers/common.js", "../../../node_modules/@nodelib/fs.walk/out/readers/reader.js", "../../../node_modules/@nodelib/fs.walk/out/readers/async.js", "../../../node_modules/@nodelib/fs.walk/out/providers/async.js", "../../../node_modules/@nodelib/fs.walk/out/providers/stream.js", "../../../node_modules/@nodelib/fs.walk/out/readers/sync.js", "../../../node_modules/@nodelib/fs.walk/out/providers/sync.js", "../../../node_modules/@nodelib/fs.walk/out/settings.js", "../../../node_modules/@nodelib/fs.walk/out/index.js", "../../../node_modules/fast-glob/out/readers/reader.js", "../../../node_modules/fast-glob/out/readers/stream.js", "../../../node_modules/fast-glob/out/readers/async.js", "../../../node_modules/fast-glob/out/providers/matchers/matcher.js", "../../../node_modules/fast-glob/out/providers/matchers/partial.js", "../../../node_modules/fast-glob/out/providers/filters/deep.js", "../../../node_modules/fast-glob/out/providers/filters/entry.js", "../../../node_modules/fast-glob/out/providers/filters/error.js", "../../../node_modules/fast-glob/out/providers/transformers/entry.js", "../../../node_modules/fast-glob/out/providers/provider.js", "../../../node_modules/fast-glob/out/providers/async.js", "../../../node_modules/fast-glob/out/providers/stream.js", "../../../node_modules/fast-glob/out/readers/sync.js", "../../../node_modules/fast-glob/out/providers/sync.js", "../../../node_modules/fast-glob/out/settings.js", "../../../node_modules/fast-glob/out/index.js", "../src/core/plugin-manager.ts", "../src/utils/config.ts", "../../../node_modules/@sindresorhus/is/dist/index.js", "../../../node_modules/p-cancelable/index.js", "../../../node_modules/got/dist/source/core/errors.js", "../../../node_modules/defer-to-connect/dist/source/index.js", "../../../node_modules/@szmarczak/http-timer/dist/source/index.js", "../../../node_modules/normalize-url/index.js", "../../../node_modules/cacheable-request/node_modules/get-stream/buffer-stream.js", "../../../node_modules/cacheable-request/node_modules/get-stream/index.js", "../../../node_modules/http-cache-semantics/index.js", "../../../node_modules/lowercase-keys/index.js", "../../../node_modules/responselike/index.js", "../../../node_modules/json-buffer/index.js", "../../../node_modules/keyv/src/index.js", "../../../node_modules/mimic-response/index.js", "../../../node_modules/cacheable-request/dist/types.js", "../../../node_modules/cacheable-request/dist/index.js", "../../../node_modules/decompress-response/node_modules/mimic-response/index.js", "../../../node_modules/decompress-response/index.js", "../../../node_modules/got/node_modules/get-stream/buffer-stream.js", "../../../node_modules/got/node_modules/get-stream/index.js", "../../../node_modules/form-data-encoder/lib/util/isFunction.js", "../../../node_modules/form-data-encoder/lib/util/getStreamIterator.js", "../../../node_modules/form-data-encoder/lib/util/createBoundary.js", "../../../node_modules/form-data-encoder/lib/util/normalizeValue.js", "../../../node_modules/form-data-encoder/lib/util/isPlainObject.js", "../../../node_modules/form-data-encoder/lib/util/proxyHeaders.js", "../../../node_modules/form-data-encoder/lib/util/isFormData.js", "../../../node_modules/form-data-encoder/lib/util/escapeName.js", "../../../node_modules/form-data-encoder/lib/util/isFile.js", "../../../node_modules/form-data-encoder/lib/FormDataEncoder.js", "../../../node_modules/form-data-encoder/lib/index.js", "../../../node_modules/got/dist/source/core/utils/is-form-data.js", "../../../node_modules/got/dist/source/core/utils/get-body-size.js", "../../../node_modules/got/dist/source/core/utils/proxy-events.js", "../../../node_modules/got/dist/source/core/utils/unhandle.js", "../../../node_modules/got/dist/source/core/timed-out.js", "../../../node_modules/got/dist/source/core/utils/url-to-options.js", "../../../node_modules/got/dist/source/core/utils/weakable-map.js", "../../../node_modules/got/dist/source/core/calculate-retry-delay.js", "../../../node_modules/cacheable-lookup/source/index.js", "../../../node_modules/quick-lru/index.js", "../../../node_modules/http2-wrapper/source/utils/delay-async-destroy.js", "../../../node_modules/http2-wrapper/source/agent.js", "../../../node_modules/http2-wrapper/source/incoming-message.js", "../../../node_modules/http2-wrapper/source/utils/proxy-events.js", "../../../node_modules/http2-wrapper/source/utils/errors.js", "../../../node_modules/http2-wrapper/source/utils/is-request-pseudo-header.js", "../../../node_modules/http2-wrapper/source/utils/validate-header-name.js", "../../../node_modules/http2-wrapper/source/utils/validate-header-value.js", "../../../node_modules/http2-wrapper/source/utils/proxy-socket-handler.js", "../../../node_modules/http2-wrapper/source/client-request.js", "../../../node_modules/resolve-alpn/index.js", "../../../node_modules/http2-wrapper/source/utils/calculate-server-name.js", "../../../node_modules/http2-wrapper/source/auto.js", "../../../node_modules/http2-wrapper/source/utils/js-stream-socket.js", "../../../node_modules/http2-wrapper/source/proxies/unexpected-status-code-error.js", "../../../node_modules/http2-wrapper/source/utils/check-type.js", "../../../node_modules/http2-wrapper/source/proxies/initialize.js", "../../../node_modules/http2-wrapper/source/proxies/get-auth-headers.js", "../../../node_modules/http2-wrapper/source/proxies/h1-over-h2.js", "../../../node_modules/http2-wrapper/source/proxies/h2-over-hx.js", "../../../node_modules/http2-wrapper/source/proxies/h2-over-h2.js", "../../../node_modules/http2-wrapper/source/proxies/h2-over-h1.js", "../../../node_modules/http2-wrapper/source/index.js", "../../../node_modules/got/dist/source/core/parse-link-header.js", "../../../node_modules/got/dist/source/core/options.js", "../../../node_modules/got/dist/source/core/response.js", "../../../node_modules/got/dist/source/core/utils/is-client-request.js", "../../../node_modules/got/dist/source/core/utils/is-unix-socket-url.js", "../../../node_modules/got/dist/source/core/index.js", "../../../node_modules/got/dist/source/as-promise/types.js", "../../../node_modules/got/dist/source/as-promise/index.js", "../../../node_modules/got/dist/source/create.js", "../../../node_modules/got/dist/source/index.js", "../src/utils/api.ts", "../src/parsers/clarity.ts", "../src/generators/contract.ts", "../src/commands/generate.ts", "../src/commands/init.ts", "../../../node_modules/commander/esm.mjs", "../src/cli.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"import path from \"path\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport fg from \"fast-glob\";\nimport { loadConfig } from \"../utils/config\";\nimport { StacksApiClient } from \"../utils/api\";\nimport { parseClarityFile, parseApiResponse } from \"../parsers/clarity\";\nimport { generateContractInterface } from \"../generators/contract\";\nimport { PluginManager } from \"../core/plugin-manager\";\nimport type {\n ResolvedContract,\n NetworkName,\n ContractSource,\n StacksConfig,\n} from \"../types/config\";\nimport type { ContractConfig, ResolvedConfig } from \"../types/plugin\";\n\n/**\n * Generate command implementation\n */\n\nexport interface GenerateOptions {\n config?: string;\n out?: string;\n apiKey?: string;\n watch?: boolean;\n}\n\n/**\n * Check if a string looks like a deployed contract address (ADDRESS.contract-name)\n */\nfunction isContractAddress(input: string): boolean {\n // Contract addresses are in format: SP/ST/SM/SN...ADDRESS.contract-name\n // SP = mainnet standard, ST = testnet standard\n // SM = mainnet multisig, SN = testnet multisig\n const contractIdPattern = /^(SP|ST|SM|SN)[A-Z0-9]{38,}\\.[a-zA-Z][a-zA-Z0-9-]*$/;\n return contractIdPattern.test(input);\n}\n\n/**\n * Infer network from contract address prefix\n */\nfunction inferNetwork(address: string): NetworkName {\n // SP = mainnet standard, SM = mainnet multisig\n if (address.startsWith(\"SP\") || address.startsWith(\"SM\")) {\n return \"mainnet\";\n }\n // ST = testnet standard, SN = testnet multisig\n return \"testnet\";\n}\n\n/**\n * Parse inputs and separate into local files and deployed contract addresses\n */\ninterface ParsedInputs {\n files: string[];\n contractIds: string[];\n}\n\nasync function parseInputs(inputs: string[]): Promise<ParsedInputs> {\n const files: string[] = [];\n const contractIds: string[] = [];\n\n for (const input of inputs) {\n // Check if it's a deployed contract address\n if (isContractAddress(input)) {\n contractIds.push(input);\n continue;\n }\n\n // Check if it's a glob pattern\n if (input.includes(\"*\") || input.includes(\"?\")) {\n const matches = await fg(input, { cwd: process.cwd(), absolute: true });\n for (const file of matches) {\n if (file.endsWith(\".clar\")) {\n files.push(file);\n }\n }\n continue;\n }\n\n // Direct file path\n if (input.endsWith(\".clar\")) {\n const absolutePath = path.resolve(process.cwd(), input);\n files.push(absolutePath);\n }\n }\n\n return {\n files: [...new Set(files)],\n contractIds: [...new Set(contractIds)],\n };\n}\n\n/**\n * Convert filename to camelCase contract name\n */\nfunction deriveContractName(filePath: string): string {\n const basename = path.basename(filePath, \".clar\");\n // Convert kebab-case or snake_case to camelCase\n return basename\n .replace(/[-_](.)/g, (_, char) => char.toUpperCase())\n .replace(/^(.)/, (_, char) => char.toLowerCase())\n .replace(/^\\d/, \"_$&\"); // Prefix with underscore if starts with digit\n}\n\n/**\n * Convert contract name from kebab-case to camelCase\n */\nfunction toCamelCase(str: string): string {\n return str\n .replace(/[-_](.)/g, (_, char) => char.toUpperCase())\n .replace(/^(.)/, (_, char) => char.toLowerCase())\n .replace(/^\\d/, \"_$&\");\n}\n\n/**\n * Build config from direct inputs (local files and/or deployed contract addresses)\n */\nasync function buildConfigFromInputs(\n parsedInputs: ParsedInputs,\n outPath: string,\n apiKey: string | undefined,\n spinner: ReturnType<typeof ora>\n): Promise<StacksConfig> {\n const contracts = [];\n\n // Process local .clar files\n for (const file of parsedInputs.files) {\n const abi = await parseClarityFile(file);\n const name = deriveContractName(file);\n\n contracts.push({\n name,\n address: `ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.${name}`,\n abi,\n _directFile: true,\n });\n }\n\n // Process deployed contract addresses (fetch from API)\n for (const contractId of parsedInputs.contractIds) {\n const [address, contractName] = contractId.split(\".\");\n const network = inferNetwork(address);\n\n spinner.text = `Fetching ${contractName} from ${network}...`;\n\n try {\n const apiClient = new StacksApiClient(network, apiKey);\n const contractInfo = await apiClient.getContractInfo(contractId);\n const abi = parseApiResponse(contractInfo);\n const name = toCamelCase(contractName);\n\n contracts.push({\n name,\n address: contractId,\n abi,\n _directFile: true,\n });\n } catch (error: any) {\n throw new Error(`Failed to fetch contract ${contractId}: ${error.message}`);\n }\n }\n\n return {\n out: outPath,\n contracts,\n plugins: [],\n };\n}\n\nexport async function generate(files: string[], options: GenerateOptions) {\n const spinner = ora(\"Processing contracts\").start();\n\n try {\n let config: StacksConfig;\n\n // Check if direct inputs were provided (files or contract addresses)\n if (files && files.length > 0) {\n // Require -o/--out when using direct inputs\n if (!options.out) {\n spinner.fail(\"Output path required\");\n console.error(\n chalk.red(\"\\nWhen using direct inputs, you must specify an output path with -o/--out\")\n );\n console.log(chalk.gray(\"\\nExamples:\"));\n console.log(chalk.gray(\" secondlayer generate ./contracts/*.clar -o ./src/generated.ts\"));\n console.log(chalk.gray(\" secondlayer generate SP2C2YFP12AJZB1M6DY7SF9A3PRHWKGYGVWQKW3.my-token -o ./src/generated.ts\"));\n process.exit(1);\n }\n\n // Parse inputs to separate files from contract addresses\n const parsedInputs = await parseInputs(files);\n const totalInputs = parsedInputs.files.length + parsedInputs.contractIds.length;\n\n if (totalInputs === 0) {\n spinner.fail(\"No valid inputs found\");\n console.error(chalk.red(\"\\nNo .clar files or contract addresses matched the provided inputs\"));\n process.exit(1);\n }\n\n spinner.text = `Processing ${totalInputs} contract(s)...`;\n\n // Get API key from option or environment variable\n const apiKey = options.apiKey || process.env.HIRO_API_KEY;\n\n config = await buildConfigFromInputs(parsedInputs, options.out, apiKey, spinner);\n } else {\n // Use config file (existing behavior)\n config = await loadConfig(options.config);\n }\n\n // Get plugin manager from config loading\n const pluginManager = new PluginManager();\n\n // Register plugins from config\n if (config.plugins) {\n for (const plugin of config.plugins) {\n pluginManager.register(plugin);\n }\n }\n\n // Create resolved config with typed plugins\n const resolvedConfig: ResolvedConfig = {\n ...config,\n plugins: pluginManager.getPlugins(),\n };\n\n // Execute configResolved hooks\n await pluginManager.executeHook(\"configResolved\", resolvedConfig);\n\n // Convert existing contracts to ContractConfig format (if any)\n // Use the resolved config which includes contracts added by plugins\n const contractConfigs: ContractConfig[] = (config.contracts || []).map(\n (contract) => ({\n name: contract.name,\n address: contract.address,\n source: contract.source,\n abi: (contract as any).abi, // Include ABI if it exists (from plugins)\n _clarinetSource: (contract as any)._clarinetSource, // Include plugin flags\n })\n );\n\n // Transform contracts through plugins (plugins can add more contracts)\n const processedContracts = await pluginManager.transformContracts(\n contractConfigs,\n resolvedConfig\n );\n\n if (processedContracts.length === 0) {\n spinner.warn(\"No contracts found to generate\");\n console.log(\"\\nTo get started:\");\n console.log(\" • Add contracts to your config file, or\");\n console.log(\" • Use plugins like clarinet() for local contracts\");\n return;\n }\n\n // Execute generation through plugin system\n const outputs = await pluginManager.executeGeneration(\n processedContracts,\n resolvedConfig\n );\n\n // If no plugins generated the main contracts output, generate it using the existing generator\n if (!outputs.has(\"contracts\") && processedContracts.length > 0) {\n const contractsCode = await generateContractInterface(processedContracts);\n outputs.set(\"contracts\", {\n path: config.out,\n content: contractsCode,\n type: \"contracts\",\n });\n }\n\n // Transform outputs through plugins\n const transformedOutputs = await pluginManager.transformOutputs(outputs);\n\n // Write all outputs to disk\n await pluginManager.writeOutputs(transformedOutputs);\n\n const contractCount = processedContracts.length;\n const contractWord = contractCount === 1 ? \"contract\" : \"contracts\";\n spinner.succeed(`Generation complete for ${contractCount} ${contractWord}`);\n\n console.log(`\\n📄 ${config.out}`);\n console.log(`\\n💡 Import your contracts:`);\n\n // Show import examples based on actual contract names\n if (processedContracts.length > 0) {\n const exampleContract = processedContracts[0];\n console.log(\n chalk.gray(\n ` import { ${exampleContract.name} } from '${config.out.replace(/\\.ts$/, \"\")}'`\n )\n );\n\n if (processedContracts.length > 1) {\n console.log(\n chalk.gray(\n ` // Also available: ${processedContracts\n .slice(1)\n .map((c) => c.name)\n .join(\", \")}`\n )\n );\n }\n }\n } catch (error: any) {\n spinner.fail(\"Generation failed\");\n console.error(chalk.red(`\\n${error.message}`));\n if (process.env.DEBUG) {\n console.error(error.stack);\n }\n process.exit(1);\n }\n}\n\n// Keep existing contract resolution functions for backward compatibility and plugin use\nexport async function resolveContract(\n source: ContractSource,\n network: NetworkName,\n apiKey?: string,\n apiUrl?: string\n): Promise<ResolvedContract> {\n // Handle local source files\n if (source.source) {\n const filePath = path.resolve(process.cwd(), source.source);\n const abi = await parseClarityFile(filePath);\n\n const name =\n source.name ||\n path\n .basename(source.source, \".clar\")\n .replace(/-/g, \"_\")\n .replace(/^\\d/, \"_$&\");\n\n // For local files, we need to construct the address\n const address =\n typeof source.address === \"string\"\n ? source.address\n : source.address?.[network] ||\n \"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM\";\n\n const [contractAddress, contractName] = address.includes(\".\")\n ? address.split(\".\")\n : [address, name];\n\n return {\n name,\n address: contractAddress,\n contractName: contractName || name,\n abi,\n source: \"local\",\n };\n }\n\n // Handle deployed contracts\n if (source.address) {\n const contractId =\n typeof source.address === \"string\"\n ? source.address\n : source.address[network];\n\n if (!contractId) {\n throw new Error(`No contract address for network ${network}`);\n }\n\n const contractInfo = await new StacksApiClient(\n network,\n apiKey,\n apiUrl\n ).getContractInfo(contractId);\n const abi = parseApiResponse(contractInfo);\n\n const [contractAddress, contractName] = contractId.split(\".\");\n const name =\n source.name || contractName.replace(/-/g, \"_\").replace(/^\\d/, \"_$&\");\n\n return {\n name,\n address: contractAddress,\n contractName,\n abi,\n source: \"api\",\n };\n }\n\n throw new Error(\"Contract must have either address or source\");\n}\n\nexport async function resolveContracts(\n source: ContractSource,\n defaultNetwork: NetworkName | undefined,\n apiKey?: string,\n apiUrl?: string\n): Promise<ResolvedContract[]> {\n // Handle single network contracts (existing behavior)\n if (typeof source.address === \"string\" || source.source) {\n const resolved = await resolveContract(\n source,\n defaultNetwork || \"testnet\", // Use testnet as fallback for single contracts\n apiKey,\n apiUrl\n );\n return [resolved];\n }\n\n // Handle multi-network contracts\n if (source.address && typeof source.address === \"object\") {\n const resolvedContracts: ResolvedContract[] = [];\n\n // If defaultNetwork is specified, only generate that network\n // If no network specified, generate all networks defined in the address object\n const networksToGenerate = defaultNetwork\n ? [defaultNetwork].filter(\n (net) => (source.address as Partial<Record<NetworkName, string>>)[net]\n ) // Only if address exists for that network\n : (Object.keys(source.address) as NetworkName[]);\n\n for (const network of networksToGenerate) {\n const contractId = source.address[network];\n if (!contractId) continue;\n\n try {\n const networkApiClient = new StacksApiClient(network, apiKey, apiUrl);\n\n const contractInfo = await networkApiClient.getContractInfo(contractId);\n const abi = parseApiResponse(contractInfo);\n\n const [contractAddress, contractName] = contractId.split(\".\");\n const baseName =\n source.name || contractName.replace(/-/g, \"_\").replace(/^\\d/, \"_$&\");\n\n // Generate network-specific names\n const name =\n network === \"mainnet\"\n ? baseName\n : `${network}${baseName.charAt(0).toUpperCase() + baseName.slice(1)}`;\n\n resolvedContracts.push({\n name,\n address: contractAddress,\n contractName,\n abi,\n source: \"api\",\n });\n } catch (error: any) {\n console.warn(\n `Warning: Failed to resolve contract for ${network}: ${error.message}`\n );\n }\n }\n\n return resolvedContracts;\n }\n\n throw new Error(\"Contract must have either address or source\");\n}\n",
|
|
8
|
-
"
|
|
9
|
-
"/**\n * Plugin Manager for @secondlayer/cli\n * Handles plugin registration, lifecycle execution, and output management\n */\n\nimport { format } from \"prettier\";\nimport { promises as fs } from \"fs\";\nimport path from \"path\";\nimport { validateStacksAddress } from \"@stacks/transactions\";\nimport type {\n StacksCodegenPlugin,\n UserConfig,\n ResolvedConfig,\n GenerateContext,\n Logger,\n PluginUtils,\n GeneratedOutput,\n ProcessedContract,\n ContractConfig,\n HookResult,\n PluginExecutionContext,\n} from \"../types/plugin\";\n\n/**\n * Core plugin manager that orchestrates plugin execution\n */\nexport class PluginManager {\n private plugins: StacksCodegenPlugin[] = [];\n private logger: Logger;\n private utils: PluginUtils;\n private executionContext: PluginExecutionContext;\n\n constructor() {\n this.logger = this.createLogger();\n this.utils = this.createUtils();\n this.executionContext = {\n phase: \"config\",\n startTime: Date.now(),\n results: new Map(),\n };\n }\n\n /**\n * Register a plugin\n */\n register(plugin: StacksCodegenPlugin): void {\n // Validate plugin\n if (!plugin.name || !plugin.version) {\n throw new Error(\"Plugin must have a name and version\");\n }\n\n // Check for duplicate plugin names\n const existing = this.plugins.find((p) => p.name === plugin.name);\n if (existing) {\n throw new Error(\n `Plugin \"${plugin.name}\" is already registered (version ${existing.version})`\n );\n }\n\n this.plugins.push(plugin);\n this.logger.debug(`Registered plugin: ${plugin.name}@${plugin.version}`);\n }\n\n /**\n * Get all registered plugins\n */\n getPlugins(): StacksCodegenPlugin[] {\n return [...this.plugins];\n }\n\n /**\n * Transform user config through all plugins\n */\n async transformConfig(config: UserConfig): Promise<ResolvedConfig> {\n this.executionContext.phase = \"config\";\n let transformedConfig = { ...config };\n\n for (const plugin of this.plugins) {\n if (plugin.transformConfig) {\n this.executionContext.currentPlugin = plugin;\n try {\n const result = await plugin.transformConfig(transformedConfig);\n transformedConfig = result;\n this.recordHookResult(plugin.name, \"transformConfig\", {\n success: true,\n });\n } catch (error) {\n const err = error as Error;\n this.recordHookResult(plugin.name, \"transformConfig\", {\n success: false,\n error: err,\n });\n throw new Error(\n `Plugin \"${plugin.name}\" failed during config transformation: ${err.message}`\n );\n }\n }\n }\n\n // Add plugins array to resolved config\n const resolvedConfig: ResolvedConfig = {\n ...transformedConfig,\n plugins: this.plugins,\n };\n\n return resolvedConfig;\n }\n\n /**\n * Transform contracts through all plugins\n */\n async transformContracts(\n contracts: ContractConfig[],\n _config: ResolvedConfig\n ): Promise<ProcessedContract[]> {\n const processedContracts: ProcessedContract[] = [];\n\n for (let contract of contracts) {\n // Handle special case for Clarinet plugin contracts\n if ((contract as any)._clarinetSource && contract.abi) {\n // Convert Clarinet contracts directly to ProcessedContract format\n const address =\n typeof contract.address === \"string\" ? contract.address : \"\";\n const [contractAddress, contractName] = address.split(\".\");\n const processed: ProcessedContract = {\n name: contract.name || contractName,\n address: contractAddress,\n contractName: contractName,\n abi: contract.abi,\n source: \"local\" as const,\n metadata: { source: \"clarinet\" },\n };\n processedContracts.push(processed);\n continue;\n }\n\n // Handle direct file mode contracts (already have ABIs parsed)\n if ((contract as any)._directFile && contract.abi) {\n const address =\n typeof contract.address === \"string\" ? contract.address : \"\";\n const [contractAddress, contractName] = address.split(\".\");\n const processed: ProcessedContract = {\n name: contract.name || contractName,\n address: contractAddress,\n contractName: contractName,\n abi: contract.abi,\n source: \"local\" as const,\n metadata: { source: \"direct\" },\n };\n processedContracts.push(processed);\n continue;\n }\n\n // Transform through each plugin\n for (const plugin of this.plugins) {\n if (plugin.transformContract) {\n this.executionContext.currentPlugin = plugin;\n try {\n contract = await plugin.transformContract(contract);\n this.recordHookResult(plugin.name, \"transformContract\", {\n success: true,\n });\n } catch (error) {\n const err = error as Error;\n this.recordHookResult(plugin.name, \"transformContract\", {\n success: false,\n error: err,\n });\n this.logger.warn(\n `Plugin \"${plugin.name}\" failed to transform contract: ${err.message}`\n );\n }\n }\n }\n\n // Convert to ProcessedContract\n if (contract.abi) {\n const processed: ProcessedContract = {\n name: contract.name || \"unknown\",\n address:\n typeof contract.address === \"string\"\n ? contract.address.split(\".\")[0]\n : \"unknown\",\n contractName: contract.name || \"unknown\",\n abi: contract.abi,\n source: \"api\" as const, // Use \"api\" as default for plugin-processed contracts\n metadata: contract.metadata,\n };\n processedContracts.push(processed);\n }\n }\n\n return processedContracts;\n }\n\n /**\n * Execute lifecycle hooks\n */\n async executeHook(\n hookName: keyof StacksCodegenPlugin,\n context: any\n ): Promise<void> {\n for (const plugin of this.plugins) {\n const hook = plugin[hookName];\n if (typeof hook === \"function\") {\n this.executionContext.currentPlugin = plugin;\n try {\n await (hook as any).call(plugin, context);\n this.recordHookResult(plugin.name, hookName as string, {\n success: true,\n });\n } catch (error) {\n const err = error as Error;\n this.recordHookResult(plugin.name, hookName as string, {\n success: false,\n error: err,\n });\n this.logger.error(\n `Plugin \"${plugin.name}\" failed during ${hookName as string}: ${err.message}`\n );\n // Don't throw - allow other plugins to continue\n }\n }\n }\n }\n\n /**\n * Execute generation phase with full context\n */\n async executeGeneration(\n contracts: ProcessedContract[],\n config: ResolvedConfig\n ): Promise<Map<string, GeneratedOutput>> {\n this.executionContext.phase = \"generate\";\n const outputs = new Map<string, GeneratedOutput>();\n\n // Create generation context\n const context: GenerateContext = {\n config,\n logger: this.logger,\n utils: this.utils,\n contracts,\n outputs,\n augment: (outputKey: string, contractName: string, content: any) => {\n this.augmentOutput(outputs, outputKey, contractName, content);\n },\n addOutput: (key: string, output: GeneratedOutput) => {\n outputs.set(key, output);\n },\n };\n\n // Execute beforeGenerate hooks\n await this.executeHook(\"beforeGenerate\", context);\n\n // Execute generate hooks\n await this.executeHook(\"generate\", context);\n\n // Execute afterGenerate hooks\n await this.executeHook(\"afterGenerate\", context);\n\n return outputs;\n }\n\n /**\n * Transform outputs through plugins\n */\n async transformOutputs(\n outputs: Map<string, GeneratedOutput>\n ): Promise<Map<string, GeneratedOutput>> {\n this.executionContext.phase = \"output\";\n const transformedOutputs = new Map<string, GeneratedOutput>();\n\n for (const [key, output] of outputs) {\n let transformedContent = output.content;\n\n for (const plugin of this.plugins) {\n if (plugin.transformOutput) {\n this.executionContext.currentPlugin = plugin;\n try {\n transformedContent = await plugin.transformOutput(\n transformedContent,\n output.type || \"other\"\n );\n this.recordHookResult(plugin.name, \"transformOutput\", {\n success: true,\n });\n } catch (error) {\n const err = error as Error;\n this.recordHookResult(plugin.name, \"transformOutput\", {\n success: false,\n error: err,\n });\n this.logger.warn(\n `Plugin \"${plugin.name}\" failed to transform output: ${err.message}`\n );\n }\n }\n }\n\n transformedOutputs.set(key, {\n ...output,\n content: transformedContent,\n });\n }\n\n return transformedOutputs;\n }\n\n /**\n * Write outputs to disk\n */\n async writeOutputs(outputs: Map<string, GeneratedOutput>): Promise<void> {\n for (const [, output] of outputs) {\n try {\n const resolvedPath = path.resolve(process.cwd(), output.path);\n await this.utils.ensureDir(path.dirname(resolvedPath));\n await this.utils.writeFile(resolvedPath, output.content);\n // Don't log here - let the main command handle success messaging\n } catch (error) {\n const err = error as Error;\n this.logger.error(`Failed to write ${output.path}: ${err.message}`);\n throw err;\n }\n }\n }\n\n /**\n * Get execution results for debugging\n */\n getExecutionResults(): Map<string, HookResult[]> {\n return new Map(this.executionContext.results);\n }\n\n /**\n * Augment existing output with additional content\n */\n private augmentOutput(\n outputs: Map<string, GeneratedOutput>,\n outputKey: string,\n contractName: string,\n content: any\n ): void {\n const existing = outputs.get(outputKey);\n if (!existing) {\n this.logger.warn(`Cannot augment non-existent output: ${outputKey}`);\n return;\n }\n\n // Simple augmentation - append content\n // In a real implementation, this would be more sophisticated\n const augmentedContent = `${existing.content}\\n\\n// Augmented by plugin for ${contractName}\\n${JSON.stringify(content, null, 2)}`;\n\n outputs.set(outputKey, {\n ...existing,\n content: augmentedContent,\n });\n }\n\n /**\n * Record hook execution result\n */\n private recordHookResult(\n pluginName: string,\n hookName: string,\n result: Omit<HookResult, \"plugin\">\n ): void {\n const key = `${pluginName}:${hookName}`;\n const existing = this.executionContext.results.get(key) || [];\n existing.push({ ...result, plugin: pluginName });\n this.executionContext.results.set(key, existing);\n }\n\n /**\n * Create logger instance\n */\n private createLogger(): Logger {\n return {\n info: (message: string) => console.log(`ℹ️ ${message}`),\n warn: (message: string) => console.warn(`⚠️ ${message}`),\n error: (message: string) => console.error(`❌ ${message}`),\n debug: (message: string) => {\n if (process.env.DEBUG) {\n console.log(`🐛 ${message}`);\n }\n },\n success: (message: string) => console.log(`✅ ${message}`),\n };\n }\n\n /**\n * Create utils instance\n */\n private createUtils(): PluginUtils {\n return {\n toCamelCase: (str: string) => {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n },\n\n toKebabCase: (str: string) => {\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n },\n\n validateAddress: (address: string) => {\n return validateStacksAddress(address.split(\".\")[0]);\n },\n\n parseContractId: (contractId: string) => {\n const [address, contractName] = contractId.split(\".\");\n return { address, contractName };\n },\n\n formatCode: async (code: string) => {\n return format(code, {\n parser: \"typescript\",\n singleQuote: true,\n semi: true,\n printWidth: 100,\n trailingComma: \"es5\",\n });\n },\n\n resolvePath: (relativePath: string) => {\n return path.resolve(process.cwd(), relativePath);\n },\n\n fileExists: async (filePath: string) => {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n },\n\n readFile: async (filePath: string) => {\n return fs.readFile(filePath, \"utf-8\");\n },\n\n writeFile: async (filePath: string, content: string) => {\n await fs.writeFile(filePath, content, \"utf-8\");\n },\n\n ensureDir: async (dirPath: string) => {\n await fs.mkdir(dirPath, { recursive: true });\n },\n };\n }\n}\n",
|
|
5
|
+
"/**\n * CommanderError class\n * @class\n */\nclass CommanderError extends Error {\n /**\n * Constructs the CommanderError class\n * @param {number} exitCode suggested exit code which could be used with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n * @constructor\n */\n constructor(exitCode, code, message) {\n super(message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n this.code = code;\n this.exitCode = exitCode;\n this.nestedError = undefined;\n }\n}\n\n/**\n * InvalidArgumentError class\n * @class\n */\nclass InvalidArgumentError extends CommanderError {\n /**\n * Constructs the InvalidArgumentError class\n * @param {string} [message] explanation of why argument is invalid\n * @constructor\n */\n constructor(message) {\n super(1, 'commander.invalidArgument', message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n }\n}\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\n",
|
|
6
|
+
"const { InvalidArgumentError } = require('./error.js');\n\nclass Argument {\n /**\n * Initialize a new command argument with the given name and description.\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @param {string} name\n * @param {string} [description]\n */\n\n constructor(name, description) {\n this.description = description || '';\n this.variadic = false;\n this.parseArg = undefined;\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.argChoices = undefined;\n\n switch (name[0]) {\n case '<': // e.g. <required>\n this.required = true;\n this._name = name.slice(1, -1);\n break;\n case '[': // e.g. [optional]\n this.required = false;\n this._name = name.slice(1, -1);\n break;\n default:\n this.required = true;\n this._name = name;\n break;\n }\n\n if (this._name.length > 3 && this._name.slice(-3) === '...') {\n this.variadic = true;\n this._name = this._name.slice(0, -3);\n }\n }\n\n /**\n * Return argument name.\n *\n * @return {string}\n */\n\n name() {\n return this._name;\n }\n\n /**\n * @api private\n */\n\n _concatValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n return previous.concat(value);\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {*} value\n * @param {string} [description]\n * @return {Argument}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n }\n\n /**\n * Set the custom handler for processing CLI command arguments into argument values.\n *\n * @param {Function} [fn]\n * @return {Argument}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n }\n\n /**\n * Only allow argument value to be one of choices.\n *\n * @param {string[]} values\n * @return {Argument}\n */\n\n choices(values) {\n this.argChoices = values.slice();\n this.parseArg = (arg, previous) => {\n if (!this.argChoices.includes(arg)) {\n throw new InvalidArgumentError(`Allowed choices are ${this.argChoices.join(', ')}.`);\n }\n if (this.variadic) {\n return this._concatValue(arg, previous);\n }\n return arg;\n };\n return this;\n }\n\n /**\n * Make argument required.\n */\n argRequired() {\n this.required = true;\n return this;\n }\n\n /**\n * Make argument optional.\n */\n argOptional() {\n this.required = false;\n return this;\n }\n}\n\n/**\n * Takes an argument and returns its human readable equivalent for help usage.\n *\n * @param {Argument} arg\n * @return {string}\n * @api private\n */\n\nfunction humanReadableArgName(arg) {\n const nameOutput = arg.name() + (arg.variadic === true ? '...' : '');\n\n return arg.required\n ? '<' + nameOutput + '>'\n : '[' + nameOutput + ']';\n}\n\nexports.Argument = Argument;\nexports.humanReadableArgName = humanReadableArgName;\n",
|
|
7
|
+
"const { humanReadableArgName } = require('./argument.js');\n\n/**\n * TypeScript import types for JSDoc, used by Visual Studio Code IntelliSense and `npm run typescript-checkJS`\n * https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#import-types\n * @typedef { import(\"./argument.js\").Argument } Argument\n * @typedef { import(\"./command.js\").Command } Command\n * @typedef { import(\"./option.js\").Option } Option\n */\n\n// Although this is a class, methods are static in style to allow override using subclass or just functions.\nclass Help {\n constructor() {\n this.helpWidth = undefined;\n this.sortSubcommands = false;\n this.sortOptions = false;\n this.showGlobalOptions = false;\n }\n\n /**\n * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n *\n * @param {Command} cmd\n * @returns {Command[]}\n */\n\n visibleCommands(cmd) {\n const visibleCommands = cmd.commands.filter(cmd => !cmd._hidden);\n if (cmd._hasImplicitHelpCommand()) {\n // Create a command matching the implicit help command.\n const [, helpName, helpArgs] = cmd._helpCommandnameAndArgs.match(/([^ ]+) *(.*)/);\n const helpCommand = cmd.createCommand(helpName)\n .helpOption(false);\n helpCommand.description(cmd._helpCommandDescription);\n if (helpArgs) helpCommand.arguments(helpArgs);\n visibleCommands.push(helpCommand);\n }\n if (this.sortSubcommands) {\n visibleCommands.sort((a, b) => {\n // @ts-ignore: overloaded return type\n return a.name().localeCompare(b.name());\n });\n }\n return visibleCommands;\n }\n\n /**\n * Compare options for sort.\n *\n * @param {Option} a\n * @param {Option} b\n * @returns number\n */\n compareOptions(a, b) {\n const getSortKey = (option) => {\n // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n return option.short ? option.short.replace(/^-/, '') : option.long.replace(/^--/, '');\n };\n return getSortKey(a).localeCompare(getSortKey(b));\n }\n\n /**\n * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n *\n * @param {Command} cmd\n * @returns {Option[]}\n */\n\n visibleOptions(cmd) {\n const visibleOptions = cmd.options.filter((option) => !option.hidden);\n // Implicit help\n const showShortHelpFlag = cmd._hasHelpOption && cmd._helpShortFlag && !cmd._findOption(cmd._helpShortFlag);\n const showLongHelpFlag = cmd._hasHelpOption && !cmd._findOption(cmd._helpLongFlag);\n if (showShortHelpFlag || showLongHelpFlag) {\n let helpOption;\n if (!showShortHelpFlag) {\n helpOption = cmd.createOption(cmd._helpLongFlag, cmd._helpDescription);\n } else if (!showLongHelpFlag) {\n helpOption = cmd.createOption(cmd._helpShortFlag, cmd._helpDescription);\n } else {\n helpOption = cmd.createOption(cmd._helpFlags, cmd._helpDescription);\n }\n visibleOptions.push(helpOption);\n }\n if (this.sortOptions) {\n visibleOptions.sort(this.compareOptions);\n }\n return visibleOptions;\n }\n\n /**\n * Get an array of the visible global options. (Not including help.)\n *\n * @param {Command} cmd\n * @returns {Option[]}\n */\n\n visibleGlobalOptions(cmd) {\n if (!this.showGlobalOptions) return [];\n\n const globalOptions = [];\n for (let ancestorCmd = cmd.parent; ancestorCmd; ancestorCmd = ancestorCmd.parent) {\n const visibleOptions = ancestorCmd.options.filter((option) => !option.hidden);\n globalOptions.push(...visibleOptions);\n }\n if (this.sortOptions) {\n globalOptions.sort(this.compareOptions);\n }\n return globalOptions;\n }\n\n /**\n * Get an array of the arguments if any have a description.\n *\n * @param {Command} cmd\n * @returns {Argument[]}\n */\n\n visibleArguments(cmd) {\n // Side effect! Apply the legacy descriptions before the arguments are displayed.\n if (cmd._argsDescription) {\n cmd.registeredArguments.forEach(argument => {\n argument.description = argument.description || cmd._argsDescription[argument.name()] || '';\n });\n }\n\n // If there are any arguments with a description then return all the arguments.\n if (cmd.registeredArguments.find(argument => argument.description)) {\n return cmd.registeredArguments;\n }\n return [];\n }\n\n /**\n * Get the command term to show in the list of subcommands.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandTerm(cmd) {\n // Legacy. Ignores custom usage string, and nested commands.\n const args = cmd.registeredArguments.map(arg => humanReadableArgName(arg)).join(' ');\n return cmd._name +\n (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +\n (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option\n (args ? ' ' + args : '');\n }\n\n /**\n * Get the option term to show in the list of options.\n *\n * @param {Option} option\n * @returns {string}\n */\n\n optionTerm(option) {\n return option.flags;\n }\n\n /**\n * Get the argument term to show in the list of arguments.\n *\n * @param {Argument} argument\n * @returns {string}\n */\n\n argumentTerm(argument) {\n return argument.name();\n }\n\n /**\n * Get the longest command term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestSubcommandTermLength(cmd, helper) {\n return helper.visibleCommands(cmd).reduce((max, command) => {\n return Math.max(max, helper.subcommandTerm(command).length);\n }, 0);\n }\n\n /**\n * Get the longest option term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestOptionTermLength(cmd, helper) {\n return helper.visibleOptions(cmd).reduce((max, option) => {\n return Math.max(max, helper.optionTerm(option).length);\n }, 0);\n }\n\n /**\n * Get the longest global option term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestGlobalOptionTermLength(cmd, helper) {\n return helper.visibleGlobalOptions(cmd).reduce((max, option) => {\n return Math.max(max, helper.optionTerm(option).length);\n }, 0);\n }\n\n /**\n * Get the longest argument term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestArgumentTermLength(cmd, helper) {\n return helper.visibleArguments(cmd).reduce((max, argument) => {\n return Math.max(max, helper.argumentTerm(argument).length);\n }, 0);\n }\n\n /**\n * Get the command usage to be displayed at the top of the built-in help.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandUsage(cmd) {\n // Usage\n let cmdName = cmd._name;\n if (cmd._aliases[0]) {\n cmdName = cmdName + '|' + cmd._aliases[0];\n }\n let ancestorCmdNames = '';\n for (let ancestorCmd = cmd.parent; ancestorCmd; ancestorCmd = ancestorCmd.parent) {\n ancestorCmdNames = ancestorCmd.name() + ' ' + ancestorCmdNames;\n }\n return ancestorCmdNames + cmdName + ' ' + cmd.usage();\n }\n\n /**\n * Get the description for the command.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandDescription(cmd) {\n // @ts-ignore: overloaded return type\n return cmd.description();\n }\n\n /**\n * Get the subcommand summary to show in the list of subcommands.\n * (Fallback to description for backwards compatibility.)\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandDescription(cmd) {\n // @ts-ignore: overloaded return type\n return cmd.summary() || cmd.description();\n }\n\n /**\n * Get the option description to show in the list of options.\n *\n * @param {Option} option\n * @return {string}\n */\n\n optionDescription(option) {\n const extraInfo = [];\n\n if (option.argChoices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`);\n }\n if (option.defaultValue !== undefined) {\n // default for boolean and negated more for programmer than end user,\n // but show true/false for boolean option as may be for hand-rolled env or config processing.\n const showDefault = option.required || option.optional ||\n (option.isBoolean() && typeof option.defaultValue === 'boolean');\n if (showDefault) {\n extraInfo.push(`default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`);\n }\n }\n // preset for boolean and negated are more for programmer than end user\n if (option.presetArg !== undefined && option.optional) {\n extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`);\n }\n if (option.envVar !== undefined) {\n extraInfo.push(`env: ${option.envVar}`);\n }\n if (extraInfo.length > 0) {\n return `${option.description} (${extraInfo.join(', ')})`;\n }\n\n return option.description;\n }\n\n /**\n * Get the argument description to show in the list of arguments.\n *\n * @param {Argument} argument\n * @return {string}\n */\n\n argumentDescription(argument) {\n const extraInfo = [];\n if (argument.argChoices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`);\n }\n if (argument.defaultValue !== undefined) {\n extraInfo.push(`default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`);\n }\n if (extraInfo.length > 0) {\n const extraDescripton = `(${extraInfo.join(', ')})`;\n if (argument.description) {\n return `${argument.description} ${extraDescripton}`;\n }\n return extraDescripton;\n }\n return argument.description;\n }\n\n /**\n * Generate the built-in help text.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {string}\n */\n\n formatHelp(cmd, helper) {\n const termWidth = helper.padWidth(cmd, helper);\n const helpWidth = helper.helpWidth || 80;\n const itemIndentWidth = 2;\n const itemSeparatorWidth = 2; // between term and description\n function formatItem(term, description) {\n if (description) {\n const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`;\n return helper.wrap(fullText, helpWidth - itemIndentWidth, termWidth + itemSeparatorWidth);\n }\n return term;\n }\n function formatList(textArray) {\n return textArray.join('\\n').replace(/^/gm, ' '.repeat(itemIndentWidth));\n }\n\n // Usage\n let output = [`Usage: ${helper.commandUsage(cmd)}`, ''];\n\n // Description\n const commandDescription = helper.commandDescription(cmd);\n if (commandDescription.length > 0) {\n output = output.concat([helper.wrap(commandDescription, helpWidth, 0), '']);\n }\n\n // Arguments\n const argumentList = helper.visibleArguments(cmd).map((argument) => {\n return formatItem(helper.argumentTerm(argument), helper.argumentDescription(argument));\n });\n if (argumentList.length > 0) {\n output = output.concat(['Arguments:', formatList(argumentList), '']);\n }\n\n // Options\n const optionList = helper.visibleOptions(cmd).map((option) => {\n return formatItem(helper.optionTerm(option), helper.optionDescription(option));\n });\n if (optionList.length > 0) {\n output = output.concat(['Options:', formatList(optionList), '']);\n }\n\n if (this.showGlobalOptions) {\n const globalOptionList = helper.visibleGlobalOptions(cmd).map((option) => {\n return formatItem(helper.optionTerm(option), helper.optionDescription(option));\n });\n if (globalOptionList.length > 0) {\n output = output.concat(['Global Options:', formatList(globalOptionList), '']);\n }\n }\n\n // Commands\n const commandList = helper.visibleCommands(cmd).map((cmd) => {\n return formatItem(helper.subcommandTerm(cmd), helper.subcommandDescription(cmd));\n });\n if (commandList.length > 0) {\n output = output.concat(['Commands:', formatList(commandList), '']);\n }\n\n return output.join('\\n');\n }\n\n /**\n * Calculate the pad width from the maximum term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n padWidth(cmd, helper) {\n return Math.max(\n helper.longestOptionTermLength(cmd, helper),\n helper.longestGlobalOptionTermLength(cmd, helper),\n helper.longestSubcommandTermLength(cmd, helper),\n helper.longestArgumentTermLength(cmd, helper)\n );\n }\n\n /**\n * Wrap the given string to width characters per line, with lines after the first indented.\n * Do not wrap if insufficient room for wrapping (minColumnWidth), or string is manually formatted.\n *\n * @param {string} str\n * @param {number} width\n * @param {number} indent\n * @param {number} [minColumnWidth=40]\n * @return {string}\n *\n */\n\n wrap(str, width, indent, minColumnWidth = 40) {\n // Full \\s characters, minus the linefeeds.\n const indents = ' \\\\f\\\\t\\\\v\\u00a0\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff';\n // Detect manually wrapped and indented strings by searching for line break followed by spaces.\n const manualIndent = new RegExp(`[\\\\n][${indents}]+`);\n if (str.match(manualIndent)) return str;\n // Do not wrap if not enough room for a wrapped column of text (as could end up with a word per line).\n const columnWidth = width - indent;\n if (columnWidth < minColumnWidth) return str;\n\n const leadingStr = str.slice(0, indent);\n const columnText = str.slice(indent).replace('\\r\\n', '\\n');\n const indentString = ' '.repeat(indent);\n const zeroWidthSpace = '\\u200B';\n const breaks = `\\\\s${zeroWidthSpace}`;\n // Match line end (so empty lines don't collapse),\n // or as much text as will fit in column, or excess text up to first break.\n const regex = new RegExp(`\\n|.{1,${columnWidth - 1}}([${breaks}]|$)|[^${breaks}]+?([${breaks}]|$)`, 'g');\n const lines = columnText.match(regex) || [];\n return leadingStr + lines.map((line, i) => {\n if (line === '\\n') return ''; // preserve empty lines\n return ((i > 0) ? indentString : '') + line.trimEnd();\n }).join('\\n');\n }\n}\n\nexports.Help = Help;\n",
|
|
8
|
+
"const { InvalidArgumentError } = require('./error.js');\n\nclass Option {\n /**\n * Initialize a new `Option` with the given `flags` and `description`.\n *\n * @param {string} flags\n * @param {string} [description]\n */\n\n constructor(flags, description) {\n this.flags = flags;\n this.description = description || '';\n\n this.required = flags.includes('<'); // A value must be supplied when the option is specified.\n this.optional = flags.includes('['); // A value is optional when the option is specified.\n // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument\n this.variadic = /\\w\\.\\.\\.[>\\]]$/.test(flags); // The option can take multiple values.\n this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.\n const optionFlags = splitOptionFlags(flags);\n this.short = optionFlags.shortFlag;\n this.long = optionFlags.longFlag;\n this.negate = false;\n if (this.long) {\n this.negate = this.long.startsWith('--no-');\n }\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.presetArg = undefined;\n this.envVar = undefined;\n this.parseArg = undefined;\n this.hidden = false;\n this.argChoices = undefined;\n this.conflictsWith = [];\n this.implied = undefined;\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {*} value\n * @param {string} [description]\n * @return {Option}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n }\n\n /**\n * Preset to use when option used without option-argument, especially optional but also boolean and negated.\n * The custom processing (parseArg) is called.\n *\n * @example\n * new Option('--color').default('GREYSCALE').preset('RGB');\n * new Option('--donate [amount]').preset('20').argParser(parseFloat);\n *\n * @param {*} arg\n * @return {Option}\n */\n\n preset(arg) {\n this.presetArg = arg;\n return this;\n }\n\n /**\n * Add option name(s) that conflict with this option.\n * An error will be displayed if conflicting options are found during parsing.\n *\n * @example\n * new Option('--rgb').conflicts('cmyk');\n * new Option('--js').conflicts(['ts', 'jsx']);\n *\n * @param {string | string[]} names\n * @return {Option}\n */\n\n conflicts(names) {\n this.conflictsWith = this.conflictsWith.concat(names);\n return this;\n }\n\n /**\n * Specify implied option values for when this option is set and the implied options are not.\n *\n * The custom processing (parseArg) is not called on the implied values.\n *\n * @example\n * program\n * .addOption(new Option('--log', 'write logging information to file'))\n * .addOption(new Option('--trace', 'log extra details').implies({ log: 'trace.txt' }));\n *\n * @param {Object} impliedOptionValues\n * @return {Option}\n */\n implies(impliedOptionValues) {\n let newImplied = impliedOptionValues;\n if (typeof impliedOptionValues === 'string') {\n // string is not documented, but easy mistake and we can do what user probably intended.\n newImplied = { [impliedOptionValues]: true };\n }\n this.implied = Object.assign(this.implied || {}, newImplied);\n return this;\n }\n\n /**\n * Set environment variable to check for option value.\n *\n * An environment variable is only used if when processed the current option value is\n * undefined, or the source of the current value is 'default' or 'config' or 'env'.\n *\n * @param {string} name\n * @return {Option}\n */\n\n env(name) {\n this.envVar = name;\n return this;\n }\n\n /**\n * Set the custom handler for processing CLI option arguments into option values.\n *\n * @param {Function} [fn]\n * @return {Option}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n }\n\n /**\n * Whether the option is mandatory and must have a value after parsing.\n *\n * @param {boolean} [mandatory=true]\n * @return {Option}\n */\n\n makeOptionMandatory(mandatory = true) {\n this.mandatory = !!mandatory;\n return this;\n }\n\n /**\n * Hide option in help.\n *\n * @param {boolean} [hide=true]\n * @return {Option}\n */\n\n hideHelp(hide = true) {\n this.hidden = !!hide;\n return this;\n }\n\n /**\n * @api private\n */\n\n _concatValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n return previous.concat(value);\n }\n\n /**\n * Only allow option value to be one of choices.\n *\n * @param {string[]} values\n * @return {Option}\n */\n\n choices(values) {\n this.argChoices = values.slice();\n this.parseArg = (arg, previous) => {\n if (!this.argChoices.includes(arg)) {\n throw new InvalidArgumentError(`Allowed choices are ${this.argChoices.join(', ')}.`);\n }\n if (this.variadic) {\n return this._concatValue(arg, previous);\n }\n return arg;\n };\n return this;\n }\n\n /**\n * Return option name.\n *\n * @return {string}\n */\n\n name() {\n if (this.long) {\n return this.long.replace(/^--/, '');\n }\n return this.short.replace(/^-/, '');\n }\n\n /**\n * Return option name, in a camelcase format that can be used\n * as a object attribute key.\n *\n * @return {string}\n * @api private\n */\n\n attributeName() {\n return camelcase(this.name().replace(/^no-/, ''));\n }\n\n /**\n * Check if `arg` matches the short or long flag.\n *\n * @param {string} arg\n * @return {boolean}\n * @api private\n */\n\n is(arg) {\n return this.short === arg || this.long === arg;\n }\n\n /**\n * Return whether a boolean option.\n *\n * Options are one of boolean, negated, required argument, or optional argument.\n *\n * @return {boolean}\n * @api private\n */\n\n isBoolean() {\n return !this.required && !this.optional && !this.negate;\n }\n}\n\n/**\n * This class is to make it easier to work with dual options, without changing the existing\n * implementation. We support separate dual options for separate positive and negative options,\n * like `--build` and `--no-build`, which share a single option value. This works nicely for some\n * use cases, but is tricky for others where we want separate behaviours despite\n * the single shared option value.\n */\nclass DualOptions {\n /**\n * @param {Option[]} options\n */\n constructor(options) {\n this.positiveOptions = new Map();\n this.negativeOptions = new Map();\n this.dualOptions = new Set();\n options.forEach(option => {\n if (option.negate) {\n this.negativeOptions.set(option.attributeName(), option);\n } else {\n this.positiveOptions.set(option.attributeName(), option);\n }\n });\n this.negativeOptions.forEach((value, key) => {\n if (this.positiveOptions.has(key)) {\n this.dualOptions.add(key);\n }\n });\n }\n\n /**\n * Did the value come from the option, and not from possible matching dual option?\n *\n * @param {*} value\n * @param {Option} option\n * @returns {boolean}\n */\n valueFromOption(value, option) {\n const optionKey = option.attributeName();\n if (!this.dualOptions.has(optionKey)) return true;\n\n // Use the value to deduce if (probably) came from the option.\n const preset = this.negativeOptions.get(optionKey).presetArg;\n const negativeValue = (preset !== undefined) ? preset : false;\n return option.negate === (negativeValue === value);\n }\n}\n\n/**\n * Convert string from kebab-case to camelCase.\n *\n * @param {string} str\n * @return {string}\n * @api private\n */\n\nfunction camelcase(str) {\n return str.split('-').reduce((str, word) => {\n return str + word[0].toUpperCase() + word.slice(1);\n });\n}\n\n/**\n * Split the short and long flag out of something like '-m,--mixed <value>'\n *\n * @api private\n */\n\nfunction splitOptionFlags(flags) {\n let shortFlag;\n let longFlag;\n // Use original very loose parsing to maintain backwards compatibility for now,\n // which allowed for example unintended `-sw, --short-word` [sic].\n const flagParts = flags.split(/[ |,]+/);\n if (flagParts.length > 1 && !/^[[<]/.test(flagParts[1])) shortFlag = flagParts.shift();\n longFlag = flagParts.shift();\n // Add support for lone short flag without significantly changing parsing!\n if (!shortFlag && /^-[^-]$/.test(longFlag)) {\n shortFlag = longFlag;\n longFlag = undefined;\n }\n return { shortFlag, longFlag };\n}\n\nexports.Option = Option;\nexports.splitOptionFlags = splitOptionFlags;\nexports.DualOptions = DualOptions;\n",
|
|
9
|
+
"const maxDistance = 3;\n\nfunction editDistance(a, b) {\n // https://en.wikipedia.org/wiki/Damerau–Levenshtein_distance\n // Calculating optimal string alignment distance, no substring is edited more than once.\n // (Simple implementation.)\n\n // Quick early exit, return worst case.\n if (Math.abs(a.length - b.length) > maxDistance) return Math.max(a.length, b.length);\n\n // distance between prefix substrings of a and b\n const d = [];\n\n // pure deletions turn a into empty string\n for (let i = 0; i <= a.length; i++) {\n d[i] = [i];\n }\n // pure insertions turn empty string into b\n for (let j = 0; j <= b.length; j++) {\n d[0][j] = j;\n }\n\n // fill matrix\n for (let j = 1; j <= b.length; j++) {\n for (let i = 1; i <= a.length; i++) {\n let cost = 1;\n if (a[i - 1] === b[j - 1]) {\n cost = 0;\n } else {\n cost = 1;\n }\n d[i][j] = Math.min(\n d[i - 1][j] + 1, // deletion\n d[i][j - 1] + 1, // insertion\n d[i - 1][j - 1] + cost // substitution\n );\n // transposition\n if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);\n }\n }\n }\n\n return d[a.length][b.length];\n}\n\n/**\n * Find close matches, restricted to same number of edits.\n *\n * @param {string} word\n * @param {string[]} candidates\n * @returns {string}\n */\n\nfunction suggestSimilar(word, candidates) {\n if (!candidates || candidates.length === 0) return '';\n // remove possible duplicates\n candidates = Array.from(new Set(candidates));\n\n const searchingOptions = word.startsWith('--');\n if (searchingOptions) {\n word = word.slice(2);\n candidates = candidates.map(candidate => candidate.slice(2));\n }\n\n let similar = [];\n let bestDistance = maxDistance;\n const minSimilarity = 0.4;\n candidates.forEach((candidate) => {\n if (candidate.length <= 1) return; // no one character guesses\n\n const distance = editDistance(word, candidate);\n const length = Math.max(word.length, candidate.length);\n const similarity = (length - distance) / length;\n if (similarity > minSimilarity) {\n if (distance < bestDistance) {\n // better edit distance, throw away previous worse matches\n bestDistance = distance;\n similar = [candidate];\n } else if (distance === bestDistance) {\n similar.push(candidate);\n }\n }\n });\n\n similar.sort((a, b) => a.localeCompare(b));\n if (searchingOptions) {\n similar = similar.map(candidate => `--${candidate}`);\n }\n\n if (similar.length > 1) {\n return `\\n(Did you mean one of ${similar.join(', ')}?)`;\n }\n if (similar.length === 1) {\n return `\\n(Did you mean ${similar[0]}?)`;\n }\n return '';\n}\n\nexports.suggestSimilar = suggestSimilar;\n",
|
|
10
|
+
"const EventEmitter = require('events').EventEmitter;\nconst childProcess = require('child_process');\nconst path = require('path');\nconst fs = require('fs');\nconst process = require('process');\n\nconst { Argument, humanReadableArgName } = require('./argument.js');\nconst { CommanderError } = require('./error.js');\nconst { Help } = require('./help.js');\nconst { Option, splitOptionFlags, DualOptions } = require('./option.js');\nconst { suggestSimilar } = require('./suggestSimilar');\n\nclass Command extends EventEmitter {\n /**\n * Initialize a new `Command`.\n *\n * @param {string} [name]\n */\n\n constructor(name) {\n super();\n /** @type {Command[]} */\n this.commands = [];\n /** @type {Option[]} */\n this.options = [];\n this.parent = null;\n this._allowUnknownOption = false;\n this._allowExcessArguments = true;\n /** @type {Argument[]} */\n this.registeredArguments = [];\n this._args = this.registeredArguments; // deprecated old name\n /** @type {string[]} */\n this.args = []; // cli args with options removed\n this.rawArgs = [];\n this.processedArgs = []; // like .args but after custom processing and collecting variadic\n this._scriptPath = null;\n this._name = name || '';\n this._optionValues = {};\n this._optionValueSources = {}; // default, env, cli etc\n this._storeOptionsAsProperties = false;\n this._actionHandler = null;\n this._executableHandler = false;\n this._executableFile = null; // custom name for executable\n this._executableDir = null; // custom search directory for subcommands\n this._defaultCommandName = null;\n this._exitCallback = null;\n this._aliases = [];\n this._combineFlagAndOptionalValue = true;\n this._description = '';\n this._summary = '';\n this._argsDescription = undefined; // legacy\n this._enablePositionalOptions = false;\n this._passThroughOptions = false;\n this._lifeCycleHooks = {}; // a hash of arrays\n /** @type {boolean | string} */\n this._showHelpAfterError = false;\n this._showSuggestionAfterError = true;\n\n // see .configureOutput() for docs\n this._outputConfiguration = {\n writeOut: (str) => process.stdout.write(str),\n writeErr: (str) => process.stderr.write(str),\n getOutHelpWidth: () => process.stdout.isTTY ? process.stdout.columns : undefined,\n getErrHelpWidth: () => process.stderr.isTTY ? process.stderr.columns : undefined,\n outputError: (str, write) => write(str)\n };\n\n this._hidden = false;\n this._hasHelpOption = true;\n this._helpFlags = '-h, --help';\n this._helpDescription = 'display help for command';\n this._helpShortFlag = '-h';\n this._helpLongFlag = '--help';\n this._addImplicitHelpCommand = undefined; // Deliberately undefined, not decided whether true or false\n this._helpCommandName = 'help';\n this._helpCommandnameAndArgs = 'help [command]';\n this._helpCommandDescription = 'display help for command';\n this._helpConfiguration = {};\n }\n\n /**\n * Copy settings that are useful to have in common across root command and subcommands.\n *\n * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.)\n *\n * @param {Command} sourceCommand\n * @return {Command} `this` command for chaining\n */\n copyInheritedSettings(sourceCommand) {\n this._outputConfiguration = sourceCommand._outputConfiguration;\n this._hasHelpOption = sourceCommand._hasHelpOption;\n this._helpFlags = sourceCommand._helpFlags;\n this._helpDescription = sourceCommand._helpDescription;\n this._helpShortFlag = sourceCommand._helpShortFlag;\n this._helpLongFlag = sourceCommand._helpLongFlag;\n this._helpCommandName = sourceCommand._helpCommandName;\n this._helpCommandnameAndArgs = sourceCommand._helpCommandnameAndArgs;\n this._helpCommandDescription = sourceCommand._helpCommandDescription;\n this._helpConfiguration = sourceCommand._helpConfiguration;\n this._exitCallback = sourceCommand._exitCallback;\n this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties;\n this._combineFlagAndOptionalValue = sourceCommand._combineFlagAndOptionalValue;\n this._allowExcessArguments = sourceCommand._allowExcessArguments;\n this._enablePositionalOptions = sourceCommand._enablePositionalOptions;\n this._showHelpAfterError = sourceCommand._showHelpAfterError;\n this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError;\n\n return this;\n }\n\n /**\n * @returns {Command[]}\n * @api private\n */\n\n _getCommandAndAncestors() {\n const result = [];\n for (let command = this; command; command = command.parent) {\n result.push(command);\n }\n return result;\n }\n\n /**\n * Define a command.\n *\n * There are two styles of command: pay attention to where to put the description.\n *\n * @example\n * // Command implemented using action handler (description is supplied separately to `.command`)\n * program\n * .command('clone <source> [destination]')\n * .description('clone a repository into a newly created directory')\n * .action((source, destination) => {\n * console.log('clone command called');\n * });\n *\n * // Command implemented using separate executable file (description is second parameter to `.command`)\n * program\n * .command('start <service>', 'start named service')\n * .command('stop [service]', 'stop named service, or all if no name supplied');\n *\n * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`\n * @param {Object|string} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)\n * @param {Object} [execOpts] - configuration options (for executable)\n * @return {Command} returns new command for action handler, or `this` for executable command\n */\n\n command(nameAndArgs, actionOptsOrExecDesc, execOpts) {\n let desc = actionOptsOrExecDesc;\n let opts = execOpts;\n if (typeof desc === 'object' && desc !== null) {\n opts = desc;\n desc = null;\n }\n opts = opts || {};\n const [, name, args] = nameAndArgs.match(/([^ ]+) *(.*)/);\n\n const cmd = this.createCommand(name);\n if (desc) {\n cmd.description(desc);\n cmd._executableHandler = true;\n }\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden\n cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor\n if (args) cmd.arguments(args);\n this.commands.push(cmd);\n cmd.parent = this;\n cmd.copyInheritedSettings(this);\n\n if (desc) return this;\n return cmd;\n }\n\n /**\n * Factory routine to create a new unattached command.\n *\n * See .command() for creating an attached subcommand, which uses this routine to\n * create the command. You can override createCommand to customise subcommands.\n *\n * @param {string} [name]\n * @return {Command} new command\n */\n\n createCommand(name) {\n return new Command(name);\n }\n\n /**\n * You can customise the help with a subclass of Help by overriding createHelp,\n * or by overriding Help properties using configureHelp().\n *\n * @return {Help}\n */\n\n createHelp() {\n return Object.assign(new Help(), this.configureHelp());\n }\n\n /**\n * You can customise the help by overriding Help properties using configureHelp(),\n * or with a subclass of Help by overriding createHelp().\n *\n * @param {Object} [configuration] - configuration options\n * @return {Command|Object} `this` command for chaining, or stored configuration\n */\n\n configureHelp(configuration) {\n if (configuration === undefined) return this._helpConfiguration;\n\n this._helpConfiguration = configuration;\n return this;\n }\n\n /**\n * The default output goes to stdout and stderr. You can customise this for special\n * applications. You can also customise the display of errors by overriding outputError.\n *\n * The configuration properties are all functions:\n *\n * // functions to change where being written, stdout and stderr\n * writeOut(str)\n * writeErr(str)\n * // matching functions to specify width for wrapping help\n * getOutHelpWidth()\n * getErrHelpWidth()\n * // functions based on what is being written out\n * outputError(str, write) // used for displaying errors, and not used for displaying help\n *\n * @param {Object} [configuration] - configuration options\n * @return {Command|Object} `this` command for chaining, or stored configuration\n */\n\n configureOutput(configuration) {\n if (configuration === undefined) return this._outputConfiguration;\n\n Object.assign(this._outputConfiguration, configuration);\n return this;\n }\n\n /**\n * Display the help or a custom message after an error occurs.\n *\n * @param {boolean|string} [displayHelp]\n * @return {Command} `this` command for chaining\n */\n showHelpAfterError(displayHelp = true) {\n if (typeof displayHelp !== 'string') displayHelp = !!displayHelp;\n this._showHelpAfterError = displayHelp;\n return this;\n }\n\n /**\n * Display suggestion of similar commands for unknown commands, or options for unknown options.\n *\n * @param {boolean} [displaySuggestion]\n * @return {Command} `this` command for chaining\n */\n showSuggestionAfterError(displaySuggestion = true) {\n this._showSuggestionAfterError = !!displaySuggestion;\n return this;\n }\n\n /**\n * Add a prepared subcommand.\n *\n * See .command() for creating an attached subcommand which inherits settings from its parent.\n *\n * @param {Command} cmd - new subcommand\n * @param {Object} [opts] - configuration options\n * @return {Command} `this` command for chaining\n */\n\n addCommand(cmd, opts) {\n if (!cmd._name) {\n throw new Error(`Command passed to .addCommand() must have a name\n- specify the name in Command constructor or using .name()`);\n }\n\n opts = opts || {};\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation\n\n this.commands.push(cmd);\n cmd.parent = this;\n return this;\n }\n\n /**\n * Factory routine to create a new unattached argument.\n *\n * See .argument() for creating an attached argument, which uses this routine to\n * create the argument. You can override createArgument to return a custom argument.\n *\n * @param {string} name\n * @param {string} [description]\n * @return {Argument} new argument\n */\n\n createArgument(name, description) {\n return new Argument(name, description);\n }\n\n /**\n * Define argument syntax for command.\n *\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @example\n * program.argument('<input-file>');\n * program.argument('[output-file]');\n *\n * @param {string} name\n * @param {string} [description]\n * @param {Function|*} [fn] - custom argument processing function\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n argument(name, description, fn, defaultValue) {\n const argument = this.createArgument(name, description);\n if (typeof fn === 'function') {\n argument.default(defaultValue).argParser(fn);\n } else {\n argument.default(fn);\n }\n this.addArgument(argument);\n return this;\n }\n\n /**\n * Define argument syntax for command, adding multiple at once (without descriptions).\n *\n * See also .argument().\n *\n * @example\n * program.arguments('<cmd> [env]');\n *\n * @param {string} names\n * @return {Command} `this` command for chaining\n */\n\n arguments(names) {\n names.trim().split(/ +/).forEach((detail) => {\n this.argument(detail);\n });\n return this;\n }\n\n /**\n * Define argument syntax for command, adding a prepared argument.\n *\n * @param {Argument} argument\n * @return {Command} `this` command for chaining\n */\n addArgument(argument) {\n const previousArgument = this.registeredArguments.slice(-1)[0];\n if (previousArgument && previousArgument.variadic) {\n throw new Error(`only the last argument can be variadic '${previousArgument.name()}'`);\n }\n if (argument.required && argument.defaultValue !== undefined && argument.parseArg === undefined) {\n throw new Error(`a default value for a required argument is never used: '${argument.name()}'`);\n }\n this.registeredArguments.push(argument);\n return this;\n }\n\n /**\n * Override default decision whether to add implicit help command.\n *\n * addHelpCommand() // force on\n * addHelpCommand(false); // force off\n * addHelpCommand('help [cmd]', 'display help for [cmd]'); // force on with custom details\n *\n * @return {Command} `this` command for chaining\n */\n\n addHelpCommand(enableOrNameAndArgs, description) {\n if (enableOrNameAndArgs === false) {\n this._addImplicitHelpCommand = false;\n } else {\n this._addImplicitHelpCommand = true;\n if (typeof enableOrNameAndArgs === 'string') {\n this._helpCommandName = enableOrNameAndArgs.split(' ')[0];\n this._helpCommandnameAndArgs = enableOrNameAndArgs;\n }\n this._helpCommandDescription = description || this._helpCommandDescription;\n }\n return this;\n }\n\n /**\n * @return {boolean}\n * @api private\n */\n\n _hasImplicitHelpCommand() {\n if (this._addImplicitHelpCommand === undefined) {\n return this.commands.length && !this._actionHandler && !this._findCommand('help');\n }\n return this._addImplicitHelpCommand;\n }\n\n /**\n * Add hook for life cycle event.\n *\n * @param {string} event\n * @param {Function} listener\n * @return {Command} `this` command for chaining\n */\n\n hook(event, listener) {\n const allowedValues = ['preSubcommand', 'preAction', 'postAction'];\n if (!allowedValues.includes(event)) {\n throw new Error(`Unexpected value for event passed to hook : '${event}'.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n if (this._lifeCycleHooks[event]) {\n this._lifeCycleHooks[event].push(listener);\n } else {\n this._lifeCycleHooks[event] = [listener];\n }\n return this;\n }\n\n /**\n * Register callback to use as replacement for calling process.exit.\n *\n * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing\n * @return {Command} `this` command for chaining\n */\n\n exitOverride(fn) {\n if (fn) {\n this._exitCallback = fn;\n } else {\n this._exitCallback = (err) => {\n if (err.code !== 'commander.executeSubCommandAsync') {\n throw err;\n } else {\n // Async callback from spawn events, not useful to throw.\n }\n };\n }\n return this;\n }\n\n /**\n * Call process.exit, and _exitCallback if defined.\n *\n * @param {number} exitCode exit code for using with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n * @return never\n * @api private\n */\n\n _exit(exitCode, code, message) {\n if (this._exitCallback) {\n this._exitCallback(new CommanderError(exitCode, code, message));\n // Expecting this line is not reached.\n }\n process.exit(exitCode);\n }\n\n /**\n * Register callback `fn` for the command.\n *\n * @example\n * program\n * .command('serve')\n * .description('start service')\n * .action(function() {\n * // do work here\n * });\n *\n * @param {Function} fn\n * @return {Command} `this` command for chaining\n */\n\n action(fn) {\n const listener = (args) => {\n // The .action callback takes an extra parameter which is the command or options.\n const expectedArgsCount = this.registeredArguments.length;\n const actionArgs = args.slice(0, expectedArgsCount);\n if (this._storeOptionsAsProperties) {\n actionArgs[expectedArgsCount] = this; // backwards compatible \"options\"\n } else {\n actionArgs[expectedArgsCount] = this.opts();\n }\n actionArgs.push(this);\n\n return fn.apply(this, actionArgs);\n };\n this._actionHandler = listener;\n return this;\n }\n\n /**\n * Factory routine to create a new unattached option.\n *\n * See .option() for creating an attached option, which uses this routine to\n * create the option. You can override createOption to return a custom option.\n *\n * @param {string} flags\n * @param {string} [description]\n * @return {Option} new option\n */\n\n createOption(flags, description) {\n return new Option(flags, description);\n }\n\n /**\n * Wrap parseArgs to catch 'commander.invalidArgument'.\n *\n * @param {Option | Argument} target\n * @param {string} value\n * @param {*} previous\n * @param {string} invalidArgumentMessage\n * @api private\n */\n\n _callParseArg(target, value, previous, invalidArgumentMessage) {\n try {\n return target.parseArg(value, previous);\n } catch (err) {\n if (err.code === 'commander.invalidArgument') {\n const message = `${invalidArgumentMessage} ${err.message}`;\n this.error(message, { exitCode: err.exitCode, code: err.code });\n }\n throw err;\n }\n }\n\n /**\n * Add an option.\n *\n * @param {Option} option\n * @return {Command} `this` command for chaining\n */\n addOption(option) {\n const oname = option.name();\n const name = option.attributeName();\n\n // store default value\n if (option.negate) {\n // --no-foo is special and defaults foo to true, unless a --foo option is already defined\n const positiveLongFlag = option.long.replace(/^--no-/, '--');\n if (!this._findOption(positiveLongFlag)) {\n this.setOptionValueWithSource(name, option.defaultValue === undefined ? true : option.defaultValue, 'default');\n }\n } else if (option.defaultValue !== undefined) {\n this.setOptionValueWithSource(name, option.defaultValue, 'default');\n }\n\n // register the option\n this.options.push(option);\n\n // handler for cli and env supplied values\n const handleOptionValue = (val, invalidValueMessage, valueSource) => {\n // val is null for optional option used without an optional-argument.\n // val is undefined for boolean and negated option.\n if (val == null && option.presetArg !== undefined) {\n val = option.presetArg;\n }\n\n // custom processing\n const oldValue = this.getOptionValue(name);\n if (val !== null && option.parseArg) {\n val = this._callParseArg(option, val, oldValue, invalidValueMessage);\n } else if (val !== null && option.variadic) {\n val = option._concatValue(val, oldValue);\n }\n\n // Fill-in appropriate missing values. Long winded but easy to follow.\n if (val == null) {\n if (option.negate) {\n val = false;\n } else if (option.isBoolean() || option.optional) {\n val = true;\n } else {\n val = ''; // not normal, parseArg might have failed or be a mock function for testing\n }\n }\n this.setOptionValueWithSource(name, val, valueSource);\n };\n\n this.on('option:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'cli');\n });\n\n if (option.envVar) {\n this.on('optionEnv:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'env');\n });\n }\n\n return this;\n }\n\n /**\n * Internal implementation shared by .option() and .requiredOption()\n *\n * @api private\n */\n _optionEx(config, flags, description, fn, defaultValue) {\n if (typeof flags === 'object' && flags instanceof Option) {\n throw new Error('To add an Option object use addOption() instead of option() or requiredOption()');\n }\n const option = this.createOption(flags, description);\n option.makeOptionMandatory(!!config.mandatory);\n if (typeof fn === 'function') {\n option.default(defaultValue).argParser(fn);\n } else if (fn instanceof RegExp) {\n // deprecated\n const regex = fn;\n fn = (val, def) => {\n const m = regex.exec(val);\n return m ? m[0] : def;\n };\n option.default(defaultValue).argParser(fn);\n } else {\n option.default(fn);\n }\n\n return this.addOption(option);\n }\n\n /**\n * Define option with `flags`, `description`, and optional argument parsing function or `defaultValue` or both.\n *\n * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space. A required\n * option-argument is indicated by `<>` and an optional option-argument by `[]`.\n *\n * See the README for more details, and see also addOption() and requiredOption().\n *\n * @example\n * program\n * .option('-p, --pepper', 'add pepper')\n * .option('-p, --pizza-type <TYPE>', 'type of pizza') // required option-argument\n * .option('-c, --cheese [CHEESE]', 'add extra cheese', 'mozzarella') // optional option-argument with default\n * .option('-t, --tip <VALUE>', 'add tip to purchase cost', parseFloat) // custom parse function\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {Function|*} [parseArg] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n option(flags, description, parseArg, defaultValue) {\n return this._optionEx({}, flags, description, parseArg, defaultValue);\n }\n\n /**\n * Add a required option which must have a value after parsing. This usually means\n * the option must be specified on the command line. (Otherwise the same as .option().)\n *\n * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {Function|*} [parseArg] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n requiredOption(flags, description, parseArg, defaultValue) {\n return this._optionEx({ mandatory: true }, flags, description, parseArg, defaultValue);\n }\n\n /**\n * Alter parsing of short flags with optional values.\n *\n * @example\n * // for `.option('-f,--flag [value]'):\n * program.combineFlagAndOptionalValue(true); // `-f80` is treated like `--flag=80`, this is the default behaviour\n * program.combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`\n *\n * @param {Boolean} [combine=true] - if `true` or omitted, an optional value can be specified directly after the flag.\n */\n combineFlagAndOptionalValue(combine = true) {\n this._combineFlagAndOptionalValue = !!combine;\n return this;\n }\n\n /**\n * Allow unknown options on the command line.\n *\n * @param {Boolean} [allowUnknown=true] - if `true` or omitted, no error will be thrown\n * for unknown options.\n */\n allowUnknownOption(allowUnknown = true) {\n this._allowUnknownOption = !!allowUnknown;\n return this;\n }\n\n /**\n * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.\n *\n * @param {Boolean} [allowExcess=true] - if `true` or omitted, no error will be thrown\n * for excess arguments.\n */\n allowExcessArguments(allowExcess = true) {\n this._allowExcessArguments = !!allowExcess;\n return this;\n }\n\n /**\n * Enable positional options. Positional means global options are specified before subcommands which lets\n * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.\n * The default behaviour is non-positional and global options may appear anywhere on the command line.\n *\n * @param {Boolean} [positional=true]\n */\n enablePositionalOptions(positional = true) {\n this._enablePositionalOptions = !!positional;\n return this;\n }\n\n /**\n * Pass through options that come after command-arguments rather than treat them as command-options,\n * so actual command-options come before command-arguments. Turning this on for a subcommand requires\n * positional options to have been enabled on the program (parent commands).\n * The default behaviour is non-positional and options may appear before or after command-arguments.\n *\n * @param {Boolean} [passThrough=true]\n * for unknown options.\n */\n passThroughOptions(passThrough = true) {\n this._passThroughOptions = !!passThrough;\n if (!!this.parent && passThrough && !this.parent._enablePositionalOptions) {\n throw new Error('passThroughOptions can not be used without turning on enablePositionalOptions for parent command(s)');\n }\n return this;\n }\n\n /**\n * Whether to store option values as properties on command object,\n * or store separately (specify false). In both cases the option values can be accessed using .opts().\n *\n * @param {boolean} [storeAsProperties=true]\n * @return {Command} `this` command for chaining\n */\n\n storeOptionsAsProperties(storeAsProperties = true) {\n if (this.options.length) {\n throw new Error('call .storeOptionsAsProperties() before adding options');\n }\n // if (Object.keys(this._optionValues).length) {\n // throw new Error('call .storeOptionsAsProperties() before setting option values');\n // }\n this._storeOptionsAsProperties = !!storeAsProperties;\n return this;\n }\n\n /**\n * Retrieve option value.\n *\n * @param {string} key\n * @return {Object} value\n */\n\n getOptionValue(key) {\n if (this._storeOptionsAsProperties) {\n return this[key];\n }\n return this._optionValues[key];\n }\n\n /**\n * Store option value.\n *\n * @param {string} key\n * @param {Object} value\n * @return {Command} `this` command for chaining\n */\n\n setOptionValue(key, value) {\n return this.setOptionValueWithSource(key, value, undefined);\n }\n\n /**\n * Store option value and where the value came from.\n *\n * @param {string} key\n * @param {Object} value\n * @param {string} source - expected values are default/config/env/cli/implied\n * @return {Command} `this` command for chaining\n */\n\n setOptionValueWithSource(key, value, source) {\n if (this._storeOptionsAsProperties) {\n this[key] = value;\n } else {\n this._optionValues[key] = value;\n }\n this._optionValueSources[key] = source;\n return this;\n }\n\n /**\n * Get source of option value.\n * Expected values are default | config | env | cli | implied\n *\n * @param {string} key\n * @return {string}\n */\n\n getOptionValueSource(key) {\n return this._optionValueSources[key];\n }\n\n /**\n * Get source of option value. See also .optsWithGlobals().\n * Expected values are default | config | env | cli | implied\n *\n * @param {string} key\n * @return {string}\n */\n\n getOptionValueSourceWithGlobals(key) {\n // global overwrites local, like optsWithGlobals\n let source;\n this._getCommandAndAncestors().forEach((cmd) => {\n if (cmd.getOptionValueSource(key) !== undefined) {\n source = cmd.getOptionValueSource(key);\n }\n });\n return source;\n }\n\n /**\n * Get user arguments from implied or explicit arguments.\n * Side-effects: set _scriptPath if args included script. Used for default program name, and subcommand searches.\n *\n * @api private\n */\n\n _prepareUserArgs(argv, parseOptions) {\n if (argv !== undefined && !Array.isArray(argv)) {\n throw new Error('first parameter to parse must be array or undefined');\n }\n parseOptions = parseOptions || {};\n\n // Default to using process.argv\n if (argv === undefined) {\n argv = process.argv;\n // @ts-ignore: unknown property\n if (process.versions && process.versions.electron) {\n parseOptions.from = 'electron';\n }\n }\n this.rawArgs = argv.slice();\n\n // make it a little easier for callers by supporting various argv conventions\n let userArgs;\n switch (parseOptions.from) {\n case undefined:\n case 'node':\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n break;\n case 'electron':\n // @ts-ignore: unknown property\n if (process.defaultApp) {\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n } else {\n userArgs = argv.slice(1);\n }\n break;\n case 'user':\n userArgs = argv.slice(0);\n break;\n default:\n throw new Error(`unexpected parse option { from: '${parseOptions.from}' }`);\n }\n\n // Find default name for program from arguments.\n if (!this._name && this._scriptPath) this.nameFromFilename(this._scriptPath);\n this._name = this._name || 'program';\n\n return userArgs;\n }\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * The default expectation is that the arguments are from node and have the application as argv[0]\n * and the script being run in argv[1], with user parameters after that.\n *\n * @example\n * program.parse(process.argv);\n * program.parse(); // implicitly use process.argv and auto-detect node vs electron conventions\n * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv] - optional, defaults to process.argv\n * @param {Object} [parseOptions] - optionally specify style of options with from: node/user/electron\n * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'\n * @return {Command} `this` command for chaining\n */\n\n parse(argv, parseOptions) {\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n this._parseCommand([], userArgs);\n\n return this;\n }\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise.\n *\n * The default expectation is that the arguments are from node and have the application as argv[0]\n * and the script being run in argv[1], with user parameters after that.\n *\n * @example\n * await program.parseAsync(process.argv);\n * await program.parseAsync(); // implicitly use process.argv and auto-detect node vs electron conventions\n * await program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv]\n * @param {Object} [parseOptions]\n * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'\n * @return {Promise}\n */\n\n async parseAsync(argv, parseOptions) {\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n await this._parseCommand([], userArgs);\n\n return this;\n }\n\n /**\n * Execute a sub-command executable.\n *\n * @api private\n */\n\n _executeSubCommand(subcommand, args) {\n args = args.slice();\n let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows.\n const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];\n\n function findFile(baseDir, baseName) {\n // Look for specified file\n const localBin = path.resolve(baseDir, baseName);\n if (fs.existsSync(localBin)) return localBin;\n\n // Stop looking if candidate already has an expected extension.\n if (sourceExt.includes(path.extname(baseName))) return undefined;\n\n // Try all the extensions.\n const foundExt = sourceExt.find(ext => fs.existsSync(`${localBin}${ext}`));\n if (foundExt) return `${localBin}${foundExt}`;\n\n return undefined;\n }\n\n // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.\n this._checkForMissingMandatoryOptions();\n this._checkForConflictingOptions();\n\n // executableFile and executableDir might be full path, or just a name\n let executableFile = subcommand._executableFile || `${this._name}-${subcommand._name}`;\n let executableDir = this._executableDir || '';\n if (this._scriptPath) {\n let resolvedScriptPath; // resolve possible symlink for installed npm binary\n try {\n resolvedScriptPath = fs.realpathSync(this._scriptPath);\n } catch (err) {\n resolvedScriptPath = this._scriptPath;\n }\n executableDir = path.resolve(path.dirname(resolvedScriptPath), executableDir);\n }\n\n // Look for a local file in preference to a command in PATH.\n if (executableDir) {\n let localFile = findFile(executableDir, executableFile);\n\n // Legacy search using prefix of script name instead of command name\n if (!localFile && !subcommand._executableFile && this._scriptPath) {\n const legacyName = path.basename(this._scriptPath, path.extname(this._scriptPath));\n if (legacyName !== this._name) {\n localFile = findFile(executableDir, `${legacyName}-${subcommand._name}`);\n }\n }\n executableFile = localFile || executableFile;\n }\n\n launchWithNode = sourceExt.includes(path.extname(executableFile));\n\n let proc;\n if (process.platform !== 'win32') {\n if (launchWithNode) {\n args.unshift(executableFile);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n\n proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });\n } else {\n proc = childProcess.spawn(executableFile, args, { stdio: 'inherit' });\n }\n } else {\n args.unshift(executableFile);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });\n }\n\n if (!proc.killed) { // testing mainly to avoid leak warnings during unit tests with mocked spawn\n const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n signals.forEach((signal) => {\n // @ts-ignore\n process.on(signal, () => {\n if (proc.killed === false && proc.exitCode === null) {\n proc.kill(signal);\n }\n });\n });\n }\n\n // By default terminate process when spawned process terminates.\n // Suppressing the exit if exitCallback defined is a bit messy and of limited use, but does allow process to stay running!\n const exitCallback = this._exitCallback;\n if (!exitCallback) {\n proc.on('close', process.exit.bind(process));\n } else {\n proc.on('close', () => {\n exitCallback(new CommanderError(process.exitCode || 0, 'commander.executeSubCommandAsync', '(close)'));\n });\n }\n proc.on('error', (err) => {\n // @ts-ignore\n if (err.code === 'ENOENT') {\n const executableDirMessage = executableDir\n ? `searched for local subcommand relative to directory '${executableDir}'`\n : 'no directory for search for local subcommand, use .executableDir() to supply a custom directory';\n const executableMissing = `'${executableFile}' does not exist\n - if '${subcommand._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name or path\n - ${executableDirMessage}`;\n throw new Error(executableMissing);\n // @ts-ignore\n } else if (err.code === 'EACCES') {\n throw new Error(`'${executableFile}' not executable`);\n }\n if (!exitCallback) {\n process.exit(1);\n } else {\n const wrappedError = new CommanderError(1, 'commander.executeSubCommandAsync', '(error)');\n wrappedError.nestedError = err;\n exitCallback(wrappedError);\n }\n });\n\n // Store the reference to the child process\n this.runningCommand = proc;\n }\n\n /**\n * @api private\n */\n\n _dispatchSubcommand(commandName, operands, unknown) {\n const subCommand = this._findCommand(commandName);\n if (!subCommand) this.help({ error: true });\n\n let promiseChain;\n promiseChain = this._chainOrCallSubCommandHook(promiseChain, subCommand, 'preSubcommand');\n promiseChain = this._chainOrCall(promiseChain, () => {\n if (subCommand._executableHandler) {\n this._executeSubCommand(subCommand, operands.concat(unknown));\n } else {\n return subCommand._parseCommand(operands, unknown);\n }\n });\n return promiseChain;\n }\n\n /**\n * Invoke help directly if possible, or dispatch if necessary.\n * e.g. help foo\n *\n * @api private\n */\n\n _dispatchHelpCommand(subcommandName) {\n if (!subcommandName) {\n this.help();\n }\n const subCommand = this._findCommand(subcommandName);\n if (subCommand && !subCommand._executableHandler) {\n subCommand.help();\n }\n\n // Fallback to parsing the help flag to invoke the help.\n return this._dispatchSubcommand(subcommandName, [], [\n this._helpLongFlag || this._helpShortFlag\n ]);\n }\n\n /**\n * Check this.args against expected this.registeredArguments.\n *\n * @api private\n */\n\n _checkNumberOfArguments() {\n // too few\n this.registeredArguments.forEach((arg, i) => {\n if (arg.required && this.args[i] == null) {\n this.missingArgument(arg.name());\n }\n });\n // too many\n if (this.registeredArguments.length > 0 && this.registeredArguments[this.registeredArguments.length - 1].variadic) {\n return;\n }\n if (this.args.length > this.registeredArguments.length) {\n this._excessArguments(this.args);\n }\n }\n\n /**\n * Process this.args using this.registeredArguments and save as this.processedArgs!\n *\n * @api private\n */\n\n _processArguments() {\n const myParseArg = (argument, value, previous) => {\n // Extra processing for nice error message on parsing failure.\n let parsedValue = value;\n if (value !== null && argument.parseArg) {\n const invalidValueMessage = `error: command-argument value '${value}' is invalid for argument '${argument.name()}'.`;\n parsedValue = this._callParseArg(argument, value, previous, invalidValueMessage);\n }\n return parsedValue;\n };\n\n this._checkNumberOfArguments();\n\n const processedArgs = [];\n this.registeredArguments.forEach((declaredArg, index) => {\n let value = declaredArg.defaultValue;\n if (declaredArg.variadic) {\n // Collect together remaining arguments for passing together as an array.\n if (index < this.args.length) {\n value = this.args.slice(index);\n if (declaredArg.parseArg) {\n value = value.reduce((processed, v) => {\n return myParseArg(declaredArg, v, processed);\n }, declaredArg.defaultValue);\n }\n } else if (value === undefined) {\n value = [];\n }\n } else if (index < this.args.length) {\n value = this.args[index];\n if (declaredArg.parseArg) {\n value = myParseArg(declaredArg, value, declaredArg.defaultValue);\n }\n }\n processedArgs[index] = value;\n });\n this.processedArgs = processedArgs;\n }\n\n /**\n * Once we have a promise we chain, but call synchronously until then.\n *\n * @param {Promise|undefined} promise\n * @param {Function} fn\n * @return {Promise|undefined}\n * @api private\n */\n\n _chainOrCall(promise, fn) {\n // thenable\n if (promise && promise.then && typeof promise.then === 'function') {\n // already have a promise, chain callback\n return promise.then(() => fn());\n }\n // callback might return a promise\n return fn();\n }\n\n /**\n *\n * @param {Promise|undefined} promise\n * @param {string} event\n * @return {Promise|undefined}\n * @api private\n */\n\n _chainOrCallHooks(promise, event) {\n let result = promise;\n const hooks = [];\n this._getCommandAndAncestors()\n .reverse()\n .filter(cmd => cmd._lifeCycleHooks[event] !== undefined)\n .forEach(hookedCommand => {\n hookedCommand._lifeCycleHooks[event].forEach((callback) => {\n hooks.push({ hookedCommand, callback });\n });\n });\n if (event === 'postAction') {\n hooks.reverse();\n }\n\n hooks.forEach((hookDetail) => {\n result = this._chainOrCall(result, () => {\n return hookDetail.callback(hookDetail.hookedCommand, this);\n });\n });\n return result;\n }\n\n /**\n *\n * @param {Promise|undefined} promise\n * @param {Command} subCommand\n * @param {string} event\n * @return {Promise|undefined}\n * @api private\n */\n\n _chainOrCallSubCommandHook(promise, subCommand, event) {\n let result = promise;\n if (this._lifeCycleHooks[event] !== undefined) {\n this._lifeCycleHooks[event].forEach((hook) => {\n result = this._chainOrCall(result, () => {\n return hook(this, subCommand);\n });\n });\n }\n return result;\n }\n\n /**\n * Process arguments in context of this command.\n * Returns action result, in case it is a promise.\n *\n * @api private\n */\n\n _parseCommand(operands, unknown) {\n const parsed = this.parseOptions(unknown);\n this._parseOptionsEnv(); // after cli, so parseArg not called on both cli and env\n this._parseOptionsImplied();\n operands = operands.concat(parsed.operands);\n unknown = parsed.unknown;\n this.args = operands.concat(unknown);\n\n if (operands && this._findCommand(operands[0])) {\n return this._dispatchSubcommand(operands[0], operands.slice(1), unknown);\n }\n if (this._hasImplicitHelpCommand() && operands[0] === this._helpCommandName) {\n return this._dispatchHelpCommand(operands[1]);\n }\n if (this._defaultCommandName) {\n outputHelpIfRequested(this, unknown); // Run the help for default command from parent rather than passing to default command\n return this._dispatchSubcommand(this._defaultCommandName, operands, unknown);\n }\n if (this.commands.length && this.args.length === 0 && !this._actionHandler && !this._defaultCommandName) {\n // probably missing subcommand and no handler, user needs help (and exit)\n this.help({ error: true });\n }\n\n outputHelpIfRequested(this, parsed.unknown);\n this._checkForMissingMandatoryOptions();\n this._checkForConflictingOptions();\n\n // We do not always call this check to avoid masking a \"better\" error, like unknown command.\n const checkForUnknownOptions = () => {\n if (parsed.unknown.length > 0) {\n this.unknownOption(parsed.unknown[0]);\n }\n };\n\n const commandEvent = `command:${this.name()}`;\n if (this._actionHandler) {\n checkForUnknownOptions();\n this._processArguments();\n\n let promiseChain;\n promiseChain = this._chainOrCallHooks(promiseChain, 'preAction');\n promiseChain = this._chainOrCall(promiseChain, () => this._actionHandler(this.processedArgs));\n if (this.parent) {\n promiseChain = this._chainOrCall(promiseChain, () => {\n this.parent.emit(commandEvent, operands, unknown); // legacy\n });\n }\n promiseChain = this._chainOrCallHooks(promiseChain, 'postAction');\n return promiseChain;\n }\n if (this.parent && this.parent.listenerCount(commandEvent)) {\n checkForUnknownOptions();\n this._processArguments();\n this.parent.emit(commandEvent, operands, unknown); // legacy\n } else if (operands.length) {\n if (this._findCommand('*')) { // legacy default command\n return this._dispatchSubcommand('*', operands, unknown);\n }\n if (this.listenerCount('command:*')) {\n // skip option check, emit event for possible misspelling suggestion\n this.emit('command:*', operands, unknown);\n } else if (this.commands.length) {\n this.unknownCommand();\n } else {\n checkForUnknownOptions();\n this._processArguments();\n }\n } else if (this.commands.length) {\n checkForUnknownOptions();\n // This command has subcommands and nothing hooked up at this level, so display help (and exit).\n this.help({ error: true });\n } else {\n checkForUnknownOptions();\n this._processArguments();\n // fall through for caller to handle after calling .parse()\n }\n }\n\n /**\n * Find matching command.\n *\n * @api private\n */\n _findCommand(name) {\n if (!name) return undefined;\n return this.commands.find(cmd => cmd._name === name || cmd._aliases.includes(name));\n }\n\n /**\n * Return an option matching `arg` if any.\n *\n * @param {string} arg\n * @return {Option}\n * @api private\n */\n\n _findOption(arg) {\n return this.options.find(option => option.is(arg));\n }\n\n /**\n * Display an error message if a mandatory option does not have a value.\n * Called after checking for help flags in leaf subcommand.\n *\n * @api private\n */\n\n _checkForMissingMandatoryOptions() {\n // Walk up hierarchy so can call in subcommand after checking for displaying help.\n this._getCommandAndAncestors().forEach((cmd) => {\n cmd.options.forEach((anOption) => {\n if (anOption.mandatory && (cmd.getOptionValue(anOption.attributeName()) === undefined)) {\n cmd.missingMandatoryOptionValue(anOption);\n }\n });\n });\n }\n\n /**\n * Display an error message if conflicting options are used together in this.\n *\n * @api private\n */\n _checkForConflictingLocalOptions() {\n const definedNonDefaultOptions = this.options.filter(\n (option) => {\n const optionKey = option.attributeName();\n if (this.getOptionValue(optionKey) === undefined) {\n return false;\n }\n return this.getOptionValueSource(optionKey) !== 'default';\n }\n );\n\n const optionsWithConflicting = definedNonDefaultOptions.filter(\n (option) => option.conflictsWith.length > 0\n );\n\n optionsWithConflicting.forEach((option) => {\n const conflictingAndDefined = definedNonDefaultOptions.find((defined) =>\n option.conflictsWith.includes(defined.attributeName())\n );\n if (conflictingAndDefined) {\n this._conflictingOption(option, conflictingAndDefined);\n }\n });\n }\n\n /**\n * Display an error message if conflicting options are used together.\n * Called after checking for help flags in leaf subcommand.\n *\n * @api private\n */\n _checkForConflictingOptions() {\n // Walk up hierarchy so can call in subcommand after checking for displaying help.\n this._getCommandAndAncestors().forEach((cmd) => {\n cmd._checkForConflictingLocalOptions();\n });\n }\n\n /**\n * Parse options from `argv` removing known options,\n * and return argv split into operands and unknown arguments.\n *\n * Examples:\n *\n * argv => operands, unknown\n * --known kkk op => [op], []\n * op --known kkk => [op], []\n * sub --unknown uuu op => [sub], [--unknown uuu op]\n * sub -- --unknown uuu op => [sub --unknown uuu op], []\n *\n * @param {String[]} argv\n * @return {{operands: String[], unknown: String[]}}\n */\n\n parseOptions(argv) {\n const operands = []; // operands, not options or values\n const unknown = []; // first unknown option and remaining unknown args\n let dest = operands;\n const args = argv.slice();\n\n function maybeOption(arg) {\n return arg.length > 1 && arg[0] === '-';\n }\n\n // parse options\n let activeVariadicOption = null;\n while (args.length) {\n const arg = args.shift();\n\n // literal\n if (arg === '--') {\n if (dest === unknown) dest.push(arg);\n dest.push(...args);\n break;\n }\n\n if (activeVariadicOption && !maybeOption(arg)) {\n this.emit(`option:${activeVariadicOption.name()}`, arg);\n continue;\n }\n activeVariadicOption = null;\n\n if (maybeOption(arg)) {\n const option = this._findOption(arg);\n // recognised option, call listener to assign value with possible custom processing\n if (option) {\n if (option.required) {\n const value = args.shift();\n if (value === undefined) this.optionMissingArgument(option);\n this.emit(`option:${option.name()}`, value);\n } else if (option.optional) {\n let value = null;\n // historical behaviour is optional value is following arg unless an option\n if (args.length > 0 && !maybeOption(args[0])) {\n value = args.shift();\n }\n this.emit(`option:${option.name()}`, value);\n } else { // boolean flag\n this.emit(`option:${option.name()}`);\n }\n activeVariadicOption = option.variadic ? option : null;\n continue;\n }\n }\n\n // Look for combo options following single dash, eat first one if known.\n if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {\n const option = this._findOption(`-${arg[1]}`);\n if (option) {\n if (option.required || (option.optional && this._combineFlagAndOptionalValue)) {\n // option with value following in same argument\n this.emit(`option:${option.name()}`, arg.slice(2));\n } else {\n // boolean option, emit and put back remainder of arg for further processing\n this.emit(`option:${option.name()}`);\n args.unshift(`-${arg.slice(2)}`);\n }\n continue;\n }\n }\n\n // Look for known long flag with value, like --foo=bar\n if (/^--[^=]+=/.test(arg)) {\n const index = arg.indexOf('=');\n const option = this._findOption(arg.slice(0, index));\n if (option && (option.required || option.optional)) {\n this.emit(`option:${option.name()}`, arg.slice(index + 1));\n continue;\n }\n }\n\n // Not a recognised option by this command.\n // Might be a command-argument, or subcommand option, or unknown option, or help command or option.\n\n // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.\n if (maybeOption(arg)) {\n dest = unknown;\n }\n\n // If using positionalOptions, stop processing our options at subcommand.\n if ((this._enablePositionalOptions || this._passThroughOptions) && operands.length === 0 && unknown.length === 0) {\n if (this._findCommand(arg)) {\n operands.push(arg);\n if (args.length > 0) unknown.push(...args);\n break;\n } else if (arg === this._helpCommandName && this._hasImplicitHelpCommand()) {\n operands.push(arg);\n if (args.length > 0) operands.push(...args);\n break;\n } else if (this._defaultCommandName) {\n unknown.push(arg);\n if (args.length > 0) unknown.push(...args);\n break;\n }\n }\n\n // If using passThroughOptions, stop processing options at first command-argument.\n if (this._passThroughOptions) {\n dest.push(arg);\n if (args.length > 0) dest.push(...args);\n break;\n }\n\n // add arg\n dest.push(arg);\n }\n\n return { operands, unknown };\n }\n\n /**\n * Return an object containing local option values as key-value pairs.\n *\n * @return {Object}\n */\n opts() {\n if (this._storeOptionsAsProperties) {\n // Preserve original behaviour so backwards compatible when still using properties\n const result = {};\n const len = this.options.length;\n\n for (let i = 0; i < len; i++) {\n const key = this.options[i].attributeName();\n result[key] = key === this._versionOptionName ? this._version : this[key];\n }\n return result;\n }\n\n return this._optionValues;\n }\n\n /**\n * Return an object containing merged local and global option values as key-value pairs.\n *\n * @return {Object}\n */\n optsWithGlobals() {\n // globals overwrite locals\n return this._getCommandAndAncestors().reduce(\n (combinedOptions, cmd) => Object.assign(combinedOptions, cmd.opts()),\n {}\n );\n }\n\n /**\n * Display error message and exit (or call exitOverride).\n *\n * @param {string} message\n * @param {Object} [errorOptions]\n * @param {string} [errorOptions.code] - an id string representing the error\n * @param {number} [errorOptions.exitCode] - used with process.exit\n */\n error(message, errorOptions) {\n // output handling\n this._outputConfiguration.outputError(`${message}\\n`, this._outputConfiguration.writeErr);\n if (typeof this._showHelpAfterError === 'string') {\n this._outputConfiguration.writeErr(`${this._showHelpAfterError}\\n`);\n } else if (this._showHelpAfterError) {\n this._outputConfiguration.writeErr('\\n');\n this.outputHelp({ error: true });\n }\n\n // exit handling\n const config = errorOptions || {};\n const exitCode = config.exitCode || 1;\n const code = config.code || 'commander.error';\n this._exit(exitCode, code, message);\n }\n\n /**\n * Apply any option related environment variables, if option does\n * not have a value from cli or client code.\n *\n * @api private\n */\n _parseOptionsEnv() {\n this.options.forEach((option) => {\n if (option.envVar && option.envVar in process.env) {\n const optionKey = option.attributeName();\n // Priority check. Do not overwrite cli or options from unknown source (client-code).\n if (this.getOptionValue(optionKey) === undefined || ['default', 'config', 'env'].includes(this.getOptionValueSource(optionKey))) {\n if (option.required || option.optional) { // option can take a value\n // keep very simple, optional always takes value\n this.emit(`optionEnv:${option.name()}`, process.env[option.envVar]);\n } else { // boolean\n // keep very simple, only care that envVar defined and not the value\n this.emit(`optionEnv:${option.name()}`);\n }\n }\n }\n });\n }\n\n /**\n * Apply any implied option values, if option is undefined or default value.\n *\n * @api private\n */\n _parseOptionsImplied() {\n const dualHelper = new DualOptions(this.options);\n const hasCustomOptionValue = (optionKey) => {\n return this.getOptionValue(optionKey) !== undefined && !['default', 'implied'].includes(this.getOptionValueSource(optionKey));\n };\n this.options\n .filter(option => (option.implied !== undefined) &&\n hasCustomOptionValue(option.attributeName()) &&\n dualHelper.valueFromOption(this.getOptionValue(option.attributeName()), option))\n .forEach((option) => {\n Object.keys(option.implied)\n .filter(impliedKey => !hasCustomOptionValue(impliedKey))\n .forEach(impliedKey => {\n this.setOptionValueWithSource(impliedKey, option.implied[impliedKey], 'implied');\n });\n });\n }\n\n /**\n * Argument `name` is missing.\n *\n * @param {string} name\n * @api private\n */\n\n missingArgument(name) {\n const message = `error: missing required argument '${name}'`;\n this.error(message, { code: 'commander.missingArgument' });\n }\n\n /**\n * `Option` is missing an argument.\n *\n * @param {Option} option\n * @api private\n */\n\n optionMissingArgument(option) {\n const message = `error: option '${option.flags}' argument missing`;\n this.error(message, { code: 'commander.optionMissingArgument' });\n }\n\n /**\n * `Option` does not have a value, and is a mandatory option.\n *\n * @param {Option} option\n * @api private\n */\n\n missingMandatoryOptionValue(option) {\n const message = `error: required option '${option.flags}' not specified`;\n this.error(message, { code: 'commander.missingMandatoryOptionValue' });\n }\n\n /**\n * `Option` conflicts with another option.\n *\n * @param {Option} option\n * @param {Option} conflictingOption\n * @api private\n */\n _conflictingOption(option, conflictingOption) {\n // The calling code does not know whether a negated option is the source of the\n // value, so do some work to take an educated guess.\n const findBestOptionFromValue = (option) => {\n const optionKey = option.attributeName();\n const optionValue = this.getOptionValue(optionKey);\n const negativeOption = this.options.find(target => target.negate && optionKey === target.attributeName());\n const positiveOption = this.options.find(target => !target.negate && optionKey === target.attributeName());\n if (negativeOption && (\n (negativeOption.presetArg === undefined && optionValue === false) ||\n (negativeOption.presetArg !== undefined && optionValue === negativeOption.presetArg)\n )) {\n return negativeOption;\n }\n return positiveOption || option;\n };\n\n const getErrorMessage = (option) => {\n const bestOption = findBestOptionFromValue(option);\n const optionKey = bestOption.attributeName();\n const source = this.getOptionValueSource(optionKey);\n if (source === 'env') {\n return `environment variable '${bestOption.envVar}'`;\n }\n return `option '${bestOption.flags}'`;\n };\n\n const message = `error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;\n this.error(message, { code: 'commander.conflictingOption' });\n }\n\n /**\n * Unknown option `flag`.\n *\n * @param {string} flag\n * @api private\n */\n\n unknownOption(flag) {\n if (this._allowUnknownOption) return;\n let suggestion = '';\n\n if (flag.startsWith('--') && this._showSuggestionAfterError) {\n // Looping to pick up the global options too\n let candidateFlags = [];\n let command = this;\n do {\n const moreFlags = command.createHelp().visibleOptions(command)\n .filter(option => option.long)\n .map(option => option.long);\n candidateFlags = candidateFlags.concat(moreFlags);\n command = command.parent;\n } while (command && !command._enablePositionalOptions);\n suggestion = suggestSimilar(flag, candidateFlags);\n }\n\n const message = `error: unknown option '${flag}'${suggestion}`;\n this.error(message, { code: 'commander.unknownOption' });\n }\n\n /**\n * Excess arguments, more than expected.\n *\n * @param {string[]} receivedArgs\n * @api private\n */\n\n _excessArguments(receivedArgs) {\n if (this._allowExcessArguments) return;\n\n const expected = this.registeredArguments.length;\n const s = (expected === 1) ? '' : 's';\n const forSubcommand = this.parent ? ` for '${this.name()}'` : '';\n const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${receivedArgs.length}.`;\n this.error(message, { code: 'commander.excessArguments' });\n }\n\n /**\n * Unknown command.\n *\n * @api private\n */\n\n unknownCommand() {\n const unknownName = this.args[0];\n let suggestion = '';\n\n if (this._showSuggestionAfterError) {\n const candidateNames = [];\n this.createHelp().visibleCommands(this).forEach((command) => {\n candidateNames.push(command.name());\n // just visible alias\n if (command.alias()) candidateNames.push(command.alias());\n });\n suggestion = suggestSimilar(unknownName, candidateNames);\n }\n\n const message = `error: unknown command '${unknownName}'${suggestion}`;\n this.error(message, { code: 'commander.unknownCommand' });\n }\n\n /**\n * Get or set the program version.\n *\n * This method auto-registers the \"-V, --version\" option which will print the version number.\n *\n * You can optionally supply the flags and description to override the defaults.\n *\n * @param {string} [str]\n * @param {string} [flags]\n * @param {string} [description]\n * @return {this | string | undefined} `this` command for chaining, or version string if no arguments\n */\n\n version(str, flags, description) {\n if (str === undefined) return this._version;\n this._version = str;\n flags = flags || '-V, --version';\n description = description || 'output the version number';\n const versionOption = this.createOption(flags, description);\n this._versionOptionName = versionOption.attributeName(); // [sic] not defined in constructor, partly legacy, partly only needed at root\n this.options.push(versionOption);\n this.on('option:' + versionOption.name(), () => {\n this._outputConfiguration.writeOut(`${str}\\n`);\n this._exit(0, 'commander.version', str);\n });\n return this;\n }\n\n /**\n * Set the description.\n *\n * @param {string} [str]\n * @param {Object} [argsDescription]\n * @return {string|Command}\n */\n description(str, argsDescription) {\n if (str === undefined && argsDescription === undefined) return this._description;\n this._description = str;\n if (argsDescription) {\n this._argsDescription = argsDescription;\n }\n return this;\n }\n\n /**\n * Set the summary. Used when listed as subcommand of parent.\n *\n * @param {string} [str]\n * @return {string|Command}\n */\n summary(str) {\n if (str === undefined) return this._summary;\n this._summary = str;\n return this;\n }\n\n /**\n * Set an alias for the command.\n *\n * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.\n *\n * @param {string} [alias]\n * @return {string|Command}\n */\n\n alias(alias) {\n if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility\n\n /** @type {Command} */\n let command = this;\n if (this.commands.length !== 0 && this.commands[this.commands.length - 1]._executableHandler) {\n // assume adding alias for last added executable subcommand, rather than this\n command = this.commands[this.commands.length - 1];\n }\n\n if (alias === command._name) throw new Error('Command alias can\\'t be the same as its name');\n\n command._aliases.push(alias);\n return this;\n }\n\n /**\n * Set aliases for the command.\n *\n * Only the first alias is shown in the auto-generated help.\n *\n * @param {string[]} [aliases]\n * @return {string[]|Command}\n */\n\n aliases(aliases) {\n // Getter for the array of aliases is the main reason for having aliases() in addition to alias().\n if (aliases === undefined) return this._aliases;\n\n aliases.forEach((alias) => this.alias(alias));\n return this;\n }\n\n /**\n * Set / get the command usage `str`.\n *\n * @param {string} [str]\n * @return {String|Command}\n */\n\n usage(str) {\n if (str === undefined) {\n if (this._usage) return this._usage;\n\n const args = this.registeredArguments.map((arg) => {\n return humanReadableArgName(arg);\n });\n return [].concat(\n (this.options.length || this._hasHelpOption ? '[options]' : []),\n (this.commands.length ? '[command]' : []),\n (this.registeredArguments.length ? args : [])\n ).join(' ');\n }\n\n this._usage = str;\n return this;\n }\n\n /**\n * Get or set the name of the command.\n *\n * @param {string} [str]\n * @return {string|Command}\n */\n\n name(str) {\n if (str === undefined) return this._name;\n this._name = str;\n return this;\n }\n\n /**\n * Set the name of the command from script filename, such as process.argv[1],\n * or require.main.filename, or __filename.\n *\n * (Used internally and public although not documented in README.)\n *\n * @example\n * program.nameFromFilename(require.main.filename);\n *\n * @param {string} filename\n * @return {Command}\n */\n\n nameFromFilename(filename) {\n this._name = path.basename(filename, path.extname(filename));\n\n return this;\n }\n\n /**\n * Get or set the directory for searching for executable subcommands of this command.\n *\n * @example\n * program.executableDir(__dirname);\n * // or\n * program.executableDir('subcommands');\n *\n * @param {string} [path]\n * @return {string|null|Command}\n */\n\n executableDir(path) {\n if (path === undefined) return this._executableDir;\n this._executableDir = path;\n return this;\n }\n\n /**\n * Return program help documentation.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout\n * @return {string}\n */\n\n helpInformation(contextOptions) {\n const helper = this.createHelp();\n if (helper.helpWidth === undefined) {\n helper.helpWidth = (contextOptions && contextOptions.error) ? this._outputConfiguration.getErrHelpWidth() : this._outputConfiguration.getOutHelpWidth();\n }\n return helper.formatHelp(this, helper);\n }\n\n /**\n * @api private\n */\n\n _getHelpContext(contextOptions) {\n contextOptions = contextOptions || {};\n const context = { error: !!contextOptions.error };\n let write;\n if (context.error) {\n write = (arg) => this._outputConfiguration.writeErr(arg);\n } else {\n write = (arg) => this._outputConfiguration.writeOut(arg);\n }\n context.write = contextOptions.write || write;\n context.command = this;\n return context;\n }\n\n /**\n * Output help information for this command.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n outputHelp(contextOptions) {\n let deprecatedCallback;\n if (typeof contextOptions === 'function') {\n deprecatedCallback = contextOptions;\n contextOptions = undefined;\n }\n const context = this._getHelpContext(contextOptions);\n\n this._getCommandAndAncestors().reverse().forEach(command => command.emit('beforeAllHelp', context));\n this.emit('beforeHelp', context);\n\n let helpInformation = this.helpInformation(context);\n if (deprecatedCallback) {\n helpInformation = deprecatedCallback(helpInformation);\n if (typeof helpInformation !== 'string' && !Buffer.isBuffer(helpInformation)) {\n throw new Error('outputHelp callback must return a string or a Buffer');\n }\n }\n context.write(helpInformation);\n\n if (this._helpLongFlag) {\n this.emit(this._helpLongFlag); // deprecated\n }\n this.emit('afterHelp', context);\n this._getCommandAndAncestors().forEach(command => command.emit('afterAllHelp', context));\n }\n\n /**\n * You can pass in flags and a description to override the help\n * flags and help description for your command. Pass in false to\n * disable the built-in help option.\n *\n * @param {string | boolean} [flags]\n * @param {string} [description]\n * @return {Command} `this` command for chaining\n */\n\n helpOption(flags, description) {\n if (typeof flags === 'boolean') {\n this._hasHelpOption = flags;\n return this;\n }\n this._helpFlags = flags || this._helpFlags;\n this._helpDescription = description || this._helpDescription;\n\n const helpFlags = splitOptionFlags(this._helpFlags);\n this._helpShortFlag = helpFlags.shortFlag;\n this._helpLongFlag = helpFlags.longFlag;\n\n return this;\n }\n\n /**\n * Output help information and exit.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n help(contextOptions) {\n this.outputHelp(contextOptions);\n let exitCode = process.exitCode || 0;\n if (exitCode === 0 && contextOptions && typeof contextOptions !== 'function' && contextOptions.error) {\n exitCode = 1;\n }\n // message: do not have all displayed text available so only passing placeholder.\n this._exit(exitCode, 'commander.help', '(outputHelp)');\n }\n\n /**\n * Add additional text to be displayed with the built-in help.\n *\n * Position is 'before' or 'after' to affect just this command,\n * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.\n *\n * @param {string} position - before or after built-in help\n * @param {string | Function} text - string to add, or a function returning a string\n * @return {Command} `this` command for chaining\n */\n addHelpText(position, text) {\n const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];\n if (!allowedValues.includes(position)) {\n throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n const helpEvent = `${position}Help`;\n this.on(helpEvent, (context) => {\n let helpStr;\n if (typeof text === 'function') {\n helpStr = text({ error: context.error, command: context.command });\n } else {\n helpStr = text;\n }\n // Ignore falsy value when nothing to output.\n if (helpStr) {\n context.write(`${helpStr}\\n`);\n }\n });\n return this;\n }\n}\n\n/**\n * Output help information if help flags specified\n *\n * @param {Command} cmd - command to output help for\n * @param {Array} args - array of options to search for help flags\n * @api private\n */\n\nfunction outputHelpIfRequested(cmd, args) {\n const helpOption = cmd._hasHelpOption && args.find(arg => arg === cmd._helpLongFlag || arg === cmd._helpShortFlag);\n if (helpOption) {\n cmd.outputHelp();\n // (Do not have all displayed text available so only passing placeholder.)\n cmd._exit(0, 'commander.helpDisplayed', '(outputHelp)');\n }\n}\n\n/**\n * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).\n *\n * @param {string[]} args - array of arguments from node.execArgv\n * @returns {string[]}\n * @api private\n */\n\nfunction incrementNodeInspectorPort(args) {\n // Testing for these options:\n // --inspect[=[host:]port]\n // --inspect-brk[=[host:]port]\n // --inspect-port=[host:]port\n return args.map((arg) => {\n if (!arg.startsWith('--inspect')) {\n return arg;\n }\n let debugOption;\n let debugHost = '127.0.0.1';\n let debugPort = '9229';\n let match;\n if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {\n // e.g. --inspect\n debugOption = match[1];\n } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null) {\n debugOption = match[1];\n if (/^\\d+$/.test(match[3])) {\n // e.g. --inspect=1234\n debugPort = match[3];\n } else {\n // e.g. --inspect=localhost\n debugHost = match[3];\n }\n } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null) {\n // e.g. --inspect=localhost:1234\n debugOption = match[1];\n debugHost = match[3];\n debugPort = match[4];\n }\n\n if (debugOption && debugPort !== '0') {\n return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;\n }\n return arg;\n });\n}\n\nexports.Command = Command;\n",
|
|
11
|
+
"const { Argument } = require('./lib/argument.js');\nconst { Command } = require('./lib/command.js');\nconst { CommanderError, InvalidArgumentError } = require('./lib/error.js');\nconst { Help } = require('./lib/help.js');\nconst { Option } = require('./lib/option.js');\n\n/**\n * Expose the root command.\n */\n\nexports = module.exports = new Command();\nexports.program = exports; // More explicit access to global command.\n// createArgument, createCommand, and createOption are implicitly available as they are methods on program.\n\n/**\n * Expose classes\n */\n\nexports.Command = Command;\nexports.Option = Option;\nexports.Argument = Argument;\nexports.Help = Help;\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\nexports.InvalidOptionArgumentError = InvalidArgumentError; // Deprecated\n",
|
|
12
|
+
"const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n",
|
|
13
|
+
"import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n",
|
|
14
|
+
"// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n",
|
|
15
|
+
"import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n",
|
|
16
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitWhen = exports.flatten = void 0;\nfunction flatten(items) {\n return items.reduce((collection, item) => [].concat(collection, item), []);\n}\nexports.flatten = flatten;\nfunction splitWhen(items, predicate) {\n const result = [[]];\n let groupIndex = 0;\n for (const item of items) {\n if (predicate(item)) {\n groupIndex++;\n result[groupIndex] = [];\n }\n else {\n result[groupIndex].push(item);\n }\n }\n return result;\n}\nexports.splitWhen = splitWhen;\n",
|
|
17
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEnoentCodeError = void 0;\nfunction isEnoentCodeError(error) {\n return error.code === 'ENOENT';\n}\nexports.isEnoentCodeError = isEnoentCodeError;\n",
|
|
18
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n constructor(name, stats) {\n this.name = name;\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n this.isDirectory = stats.isDirectory.bind(stats);\n this.isFIFO = stats.isFIFO.bind(stats);\n this.isFile = stats.isFile.bind(stats);\n this.isSocket = stats.isSocket.bind(stats);\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n }\n}\nfunction createDirentFromStats(name, stats) {\n return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n",
|
|
19
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0;\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst IS_WINDOWS_PLATFORM = os.platform() === 'win32';\nconst LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\\\\n/**\n * All non-escaped special characters.\n * Posix: ()*?[]{|}, !+@ before (, ! at the beginning, \\\\ before non-special characters.\n * Windows: (){}[], !+@ before (, ! at the beginning.\n */\nconst POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\()|\\\\(?![!()*+?@[\\]{|}]))/g;\nconst WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()[\\]{}]|^!|[!+@](?=\\())/g;\n/**\n * The device path (\\\\.\\ or \\\\?\\).\n * https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths\n */\nconst DOS_DEVICE_PATH_RE = /^\\\\\\\\([.?])/;\n/**\n * All backslashes except those escaping special characters.\n * Windows: !()+@{}\n * https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions\n */\nconst WINDOWS_BACKSLASHES_RE = /\\\\(?![!()+@[\\]{}])/g;\n/**\n * Designed to work only with simple paths: `dir\\\\file`.\n */\nfunction unixify(filepath) {\n return filepath.replace(/\\\\/g, '/');\n}\nexports.unixify = unixify;\nfunction makeAbsolute(cwd, filepath) {\n return path.resolve(cwd, filepath);\n}\nexports.makeAbsolute = makeAbsolute;\nfunction removeLeadingDotSegment(entry) {\n // We do not use `startsWith` because this is 10x slower than current implementation for some cases.\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n if (entry.charAt(0) === '.') {\n const secondCharactery = entry.charAt(1);\n if (secondCharactery === '/' || secondCharactery === '\\\\') {\n return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);\n }\n }\n return entry;\n}\nexports.removeLeadingDotSegment = removeLeadingDotSegment;\nexports.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath;\nfunction escapeWindowsPath(pattern) {\n return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapeWindowsPath = escapeWindowsPath;\nfunction escapePosixPath(pattern) {\n return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapePosixPath = escapePosixPath;\nexports.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern;\nfunction convertWindowsPathToPattern(filepath) {\n return escapeWindowsPath(filepath)\n .replace(DOS_DEVICE_PATH_RE, '//$1')\n .replace(WINDOWS_BACKSLASHES_RE, '/');\n}\nexports.convertWindowsPathToPattern = convertWindowsPathToPattern;\nfunction convertPosixPathToPattern(filepath) {\n return escapePosixPath(filepath);\n}\nexports.convertPosixPathToPattern = convertPosixPathToPattern;\n",
|
|
20
|
+
"/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n var match;\n while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n if (match[2]) return true;\n str = str.slice(match.index + match[0].length);\n }\n\n return false;\n};\n",
|
|
21
|
+
"/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n var pipeIndex = -2;\n var closeSquareIndex = -2;\n var closeCurlyIndex = -2;\n var closeParenIndex = -2;\n var backSlashIndex = -2;\n while (index < str.length) {\n if (str[index] === '*') {\n return true;\n }\n\n if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n return true;\n }\n\n if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n if (closeSquareIndex < index) {\n closeSquareIndex = str.indexOf(']', index);\n }\n if (closeSquareIndex > index) {\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n }\n }\n\n if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n closeCurlyIndex = str.indexOf('}', index);\n if (closeCurlyIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n return true;\n }\n }\n }\n\n if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n closeParenIndex = str.indexOf(')', index);\n if (closeParenIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n\n if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n if (pipeIndex < index) {\n pipeIndex = str.indexOf('|', index);\n }\n if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n closeParenIndex = str.indexOf(')', pipeIndex);\n if (closeParenIndex > pipeIndex) {\n backSlashIndex = str.indexOf('\\\\', pipeIndex);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nvar relaxedCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n while (index < str.length) {\n if (/[*?{}()[\\]]/.test(str[index])) {\n return true;\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n if (isExtglob(str)) {\n return true;\n }\n\n var check = strictCheck;\n\n // optionally relax check\n if (options && options.strict === false) {\n check = relaxedCheck;\n }\n\n return check(str);\n};\n",
|
|
22
|
+
"'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n var options = Object.assign({ flipBackslashes: true }, opts);\n\n // flip windows path separators\n if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n str = str.replace(backslash, slash);\n }\n\n // special case for strings ending in enclosure containing path separator\n if (enclosure.test(str)) {\n str += slash;\n }\n\n // preserves full path in case of trailing path separator\n str += 'a';\n\n // remove path parts that are globby\n do {\n str = pathPosixDirname(str);\n } while (isGlob(str) || globby.test(str));\n\n // remove escape chars and return result\n return str.replace(escaped, '$1');\n};\n",
|
|
23
|
+
"'use strict';\n\nexports.isInteger = num => {\n if (typeof num === 'number') {\n return Number.isInteger(num);\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isInteger(Number(num));\n }\n return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n if (limit === false) return false;\n if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n const node = block.nodes[n];\n if (!node) return;\n\n if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n if (node.escaped !== true) {\n node.value = '\\\\' + node.value;\n node.escaped = true;\n }\n }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n if (node.type !== 'brace') return false;\n if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n node.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n if (block.type !== 'brace') return false;\n if (block.invalid === true || block.dollar) return true;\n if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n block.invalid = true;\n return true;\n }\n if (block.open !== true || block.close !== true) {\n block.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n if (node.type === 'open' || node.type === 'close') {\n return true;\n }\n return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n if (node.type === 'text') acc.push(node.value);\n if (node.type === 'range') node.type = 'text';\n return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n const result = [];\n\n const flat = arr => {\n for (let i = 0; i < arr.length; i++) {\n const ele = arr[i];\n\n if (Array.isArray(ele)) {\n flat(ele);\n continue;\n }\n\n if (ele !== undefined) {\n result.push(ele);\n }\n }\n return result;\n };\n\n flat(args);\n return result;\n};\n",
|
|
24
|
+
"'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n const stringify = (node, parent = {}) => {\n const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n let output = '';\n\n if (node.value) {\n if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n return '\\\\' + node.value;\n }\n return node.value;\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += stringify(child);\n }\n }\n return output;\n };\n\n return stringify(ast);\n};\n\n",
|
|
25
|
+
"/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n if (typeof num === 'number') {\n return num - num === 0;\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n }\n return false;\n};\n",
|
|
26
|
+
"/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n if (isNumber(min) === false) {\n throw new TypeError('toRegexRange: expected the first argument to be a number');\n }\n\n if (max === void 0 || min === max) {\n return String(min);\n }\n\n if (isNumber(max) === false) {\n throw new TypeError('toRegexRange: expected the second argument to be a number.');\n }\n\n let opts = { relaxZeros: true, ...options };\n if (typeof opts.strictZeros === 'boolean') {\n opts.relaxZeros = opts.strictZeros === false;\n }\n\n let relax = String(opts.relaxZeros);\n let shorthand = String(opts.shorthand);\n let capture = String(opts.capture);\n let wrap = String(opts.wrap);\n let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n return toRegexRange.cache[cacheKey].result;\n }\n\n let a = Math.min(min, max);\n let b = Math.max(min, max);\n\n if (Math.abs(a - b) === 1) {\n let result = min + '|' + max;\n if (opts.capture) {\n return `(${result})`;\n }\n if (opts.wrap === false) {\n return result;\n }\n return `(?:${result})`;\n }\n\n let isPadded = hasPadding(min) || hasPadding(max);\n let state = { min, max, a, b };\n let positives = [];\n let negatives = [];\n\n if (isPadded) {\n state.isPadded = isPadded;\n state.maxLen = String(state.max).length;\n }\n\n if (a < 0) {\n let newMin = b < 0 ? Math.abs(b) : 1;\n negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n a = state.a = 0;\n }\n\n if (b >= 0) {\n positives = splitToPatterns(a, b, state, opts);\n }\n\n state.negatives = negatives;\n state.positives = positives;\n state.result = collatePatterns(negatives, positives, opts);\n\n if (opts.capture === true) {\n state.result = `(${state.result})`;\n } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n state.result = `(?:${state.result})`;\n }\n\n toRegexRange.cache[cacheKey] = state;\n return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n let nines = 1;\n let zeros = 1;\n\n let stop = countNines(min, nines);\n let stops = new Set([max]);\n\n while (min <= stop && stop <= max) {\n stops.add(stop);\n nines += 1;\n stop = countNines(min, nines);\n }\n\n stop = countZeros(max + 1, zeros) - 1;\n\n while (min < stop && stop <= max) {\n stops.add(stop);\n zeros += 1;\n stop = countZeros(max + 1, zeros) - 1;\n }\n\n stops = [...stops];\n stops.sort(compare);\n return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n if (start === stop) {\n return { pattern: start, count: [], digits: 0 };\n }\n\n let zipped = zip(start, stop);\n let digits = zipped.length;\n let pattern = '';\n let count = 0;\n\n for (let i = 0; i < digits; i++) {\n let [startDigit, stopDigit] = zipped[i];\n\n if (startDigit === stopDigit) {\n pattern += startDigit;\n\n } else if (startDigit !== '0' || stopDigit !== '9') {\n pattern += toCharacterClass(startDigit, stopDigit, options);\n\n } else {\n count++;\n }\n }\n\n if (count) {\n pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n }\n\n return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n let ranges = splitToRanges(min, max);\n let tokens = [];\n let start = min;\n let prev;\n\n for (let i = 0; i < ranges.length; i++) {\n let max = ranges[i];\n let obj = rangeToPattern(String(start), String(max), options);\n let zeros = '';\n\n if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n if (prev.count.length > 1) {\n prev.count.pop();\n }\n\n prev.count.push(obj.count[0]);\n prev.string = prev.pattern + toQuantifier(prev.count);\n start = max + 1;\n continue;\n }\n\n if (tok.isPadded) {\n zeros = padZeros(max, tok, options);\n }\n\n obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n tokens.push(obj);\n start = max + 1;\n prev = obj;\n }\n\n return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n let result = [];\n\n for (let ele of arr) {\n let { string } = ele;\n\n // only push if _both_ are negative...\n if (!intersection && !contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n\n // or _both_ are positive\n if (intersection && contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n }\n return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n let arr = [];\n for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n return arr;\n}\n\nfunction compare(a, b) {\n return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n let [start = 0, stop = ''] = digits;\n if (stop || start > 1) {\n return `{${start + (stop ? ',' + stop : '')}}`;\n }\n return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n if (!tok.isPadded) {\n return value;\n }\n\n let diff = Math.abs(tok.maxLen - String(value).length);\n let relax = options.relaxZeros !== false;\n\n switch (diff) {\n case 0:\n return '';\n case 1:\n return relax ? '0?' : '0';\n case 2:\n return relax ? '0{0,2}' : '00';\n default: {\n return relax ? `0{0,${diff}}` : `0{${diff}}`;\n }\n }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n",
|
|
27
|
+
"/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n let value = `${input}`;\n let index = -1;\n if (value[0] === '-') value = value.slice(1);\n if (value === '0') return false;\n while (value[++index] === '0');\n return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n if (typeof start === 'string' || typeof end === 'string') {\n return true;\n }\n return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n if (maxLength > 0) {\n let dash = input[0] === '-' ? '-' : '';\n if (dash) input = input.slice(1);\n input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n }\n if (toNumber === false) {\n return String(input);\n }\n return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n let negative = input[0] === '-' ? '-' : '';\n if (negative) {\n input = input.slice(1);\n maxLength--;\n }\n while (input.length < maxLength) input = '0' + input;\n return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n let prefix = options.capture ? '' : '?:';\n let positives = '';\n let negatives = '';\n let result;\n\n if (parts.positives.length) {\n positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n }\n\n if (parts.negatives.length) {\n negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n }\n\n if (positives && negatives) {\n result = `${positives}|${negatives}`;\n } else {\n result = positives || negatives;\n }\n\n if (options.wrap) {\n return `(${prefix}${result})`;\n }\n\n return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n if (isNumbers) {\n return toRegexRange(a, b, { wrap: false, ...options });\n }\n\n let start = String.fromCharCode(a);\n if (a === b) return start;\n\n let stop = String.fromCharCode(b);\n return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n if (Array.isArray(start)) {\n let wrap = options.wrap === true;\n let prefix = options.capture ? '' : '?:';\n return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n }\n return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n};\n\nconst invalidStep = (step, options) => {\n if (options.strictRanges === true) {\n throw new TypeError(`Expected step \"${step}\" to be a number`);\n }\n return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n let a = Number(start);\n let b = Number(end);\n\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n }\n\n // fix negative zero\n if (a === 0) a = 0;\n if (b === 0) b = 0;\n\n let descending = a > b;\n let startString = String(start);\n let endString = String(end);\n let stepString = String(step);\n step = Math.max(Math.abs(step), 1);\n\n let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n let toNumber = padded === false && stringify(start, end, options) === false;\n let format = options.transform || transform(toNumber);\n\n if (options.toRegex && step === 1) {\n return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n }\n\n let parts = { negatives: [], positives: [] };\n let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n if (options.toRegex === true && step > 1) {\n push(a);\n } else {\n range.push(pad(format(a, index), maxLen, toNumber));\n }\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return step > 1\n ? toSequence(parts, options, maxLen)\n : toRegex(range, null, { wrap: false, ...options });\n }\n\n return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n return invalidRange(start, end, options);\n }\n\n let format = options.transform || (val => String.fromCharCode(val));\n let a = `${start}`.charCodeAt(0);\n let b = `${end}`.charCodeAt(0);\n\n let descending = a > b;\n let min = Math.min(a, b);\n let max = Math.max(a, b);\n\n if (options.toRegex && step === 1) {\n return toRange(min, max, false, options);\n }\n\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n range.push(format(a, index));\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return toRegex(range, null, { wrap: false, options });\n }\n\n return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n if (end == null && isValidValue(start)) {\n return [start];\n }\n\n if (!isValidValue(start) || !isValidValue(end)) {\n return invalidRange(start, end, options);\n }\n\n if (typeof step === 'function') {\n return fill(start, end, 1, { transform: step });\n }\n\n if (isObject(step)) {\n return fill(start, end, 0, step);\n }\n\n let opts = { ...options };\n if (opts.capture === true) opts.wrap = true;\n step = step || opts.step || 1;\n\n if (!isNumber(step)) {\n if (step != null && !isObject(step)) return invalidStep(step, opts);\n return fill(start, end, 1, step);\n }\n\n if (isNumber(start) && isNumber(end)) {\n return fillNumbers(start, end, step, opts);\n }\n\n return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n",
|
|
28
|
+
"'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n const walk = (node, parent = {}) => {\n const invalidBlock = utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n const invalid = invalidBlock === true || invalidNode === true;\n const prefix = options.escapeInvalid === true ? '\\\\' : '';\n let output = '';\n\n if (node.isOpen === true) {\n return prefix + node.value;\n }\n\n if (node.isClose === true) {\n console.log('node.isClose', prefix, node.value);\n return prefix + node.value;\n }\n\n if (node.type === 'open') {\n return invalid ? prefix + node.value : '(';\n }\n\n if (node.type === 'close') {\n return invalid ? prefix + node.value : ')';\n }\n\n if (node.type === 'comma') {\n return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n if (range.length !== 0) {\n return args.length > 1 && range.length > 1 ? `(${range})` : range;\n }\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += walk(child, node);\n }\n }\n\n return output;\n };\n\n return walk(ast);\n};\n\nmodule.exports = compile;\n",
|
|
29
|
+
"'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n const result = [];\n\n queue = [].concat(queue);\n stash = [].concat(stash);\n\n if (!stash.length) return queue;\n if (!queue.length) {\n return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n }\n\n for (const item of queue) {\n if (Array.isArray(item)) {\n for (const value of item) {\n result.push(append(value, stash, enclose));\n }\n } else {\n for (let ele of stash) {\n if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n }\n }\n }\n return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n const walk = (node, parent = {}) => {\n node.queue = [];\n\n let p = parent;\n let q = parent.queue;\n\n while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n p = p.parent;\n q = p.queue;\n }\n\n if (node.invalid || node.dollar) {\n q.push(append(q.pop(), stringify(node, options)));\n return;\n }\n\n if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n q.push(append(q.pop(), ['{}']));\n return;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n\n if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n }\n\n let range = fill(...args, options);\n if (range.length === 0) {\n range = stringify(node, options);\n }\n\n q.push(append(q.pop(), range));\n node.nodes = [];\n return;\n }\n\n const enclose = utils.encloseBrace(node);\n let queue = node.queue;\n let block = node;\n\n while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n block = block.parent;\n queue = block.queue;\n }\n\n for (let i = 0; i < node.nodes.length; i++) {\n const child = node.nodes[i];\n\n if (child.type === 'comma' && node.type === 'brace') {\n if (i === 1) queue.push('');\n queue.push('');\n continue;\n }\n\n if (child.type === 'close') {\n q.push(append(q.pop(), queue, enclose));\n continue;\n }\n\n if (child.value && child.type !== 'open') {\n queue.push(append(queue.pop(), child.value));\n continue;\n }\n\n if (child.nodes) {\n walk(child, node);\n }\n }\n\n return queue;\n };\n\n return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n",
|
|
30
|
+
"'use strict';\n\nmodule.exports = {\n MAX_LENGTH: 10000,\n\n // Digits\n CHAR_0: '0', /* 0 */\n CHAR_9: '9', /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 'A', /* A */\n CHAR_LOWERCASE_A: 'a', /* a */\n CHAR_UPPERCASE_Z: 'Z', /* Z */\n CHAR_LOWERCASE_Z: 'z', /* z */\n\n CHAR_LEFT_PARENTHESES: '(', /* ( */\n CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n CHAR_ASTERISK: '*', /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: '&', /* & */\n CHAR_AT: '@', /* @ */\n CHAR_BACKSLASH: '\\\\', /* \\ */\n CHAR_BACKTICK: '`', /* ` */\n CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n CHAR_COLON: ':', /* : */\n CHAR_COMMA: ',', /* , */\n CHAR_DOLLAR: '$', /* . */\n CHAR_DOT: '.', /* . */\n CHAR_DOUBLE_QUOTE: '\"', /* \" */\n CHAR_EQUAL: '=', /* = */\n CHAR_EXCLAMATION_MARK: '!', /* ! */\n CHAR_FORM_FEED: '\\f', /* \\f */\n CHAR_FORWARD_SLASH: '/', /* / */\n CHAR_HASH: '#', /* # */\n CHAR_HYPHEN_MINUS: '-', /* - */\n CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n CHAR_LEFT_CURLY_BRACE: '{', /* { */\n CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n CHAR_LINE_FEED: '\\n', /* \\n */\n CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n CHAR_PERCENT: '%', /* % */\n CHAR_PLUS: '+', /* + */\n CHAR_QUESTION_MARK: '?', /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n CHAR_SEMICOLON: ';', /* ; */\n CHAR_SINGLE_QUOTE: '\\'', /* ' */\n CHAR_SPACE: ' ', /* */\n CHAR_TAB: '\\t', /* \\t */\n CHAR_UNDERSCORE: '_', /* _ */\n CHAR_VERTICAL_LINE: '|', /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n",
|
|
31
|
+
"'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n CHAR_BACKSLASH, /* \\ */\n CHAR_BACKTICK, /* ` */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n CHAR_DOUBLE_QUOTE, /* \" */\n CHAR_SINGLE_QUOTE, /* ' */\n CHAR_NO_BREAK_SPACE,\n CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n const opts = options || {};\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n if (input.length > max) {\n throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n }\n\n const ast = { type: 'root', input, nodes: [] };\n const stack = [ast];\n let block = ast;\n let prev = ast;\n let brackets = 0;\n const length = input.length;\n let index = 0;\n let depth = 0;\n let value;\n\n /**\n * Helpers\n */\n\n const advance = () => input[index++];\n const push = node => {\n if (node.type === 'text' && prev.type === 'dot') {\n prev.type = 'text';\n }\n\n if (prev && prev.type === 'text' && node.type === 'text') {\n prev.value += node.value;\n return;\n }\n\n block.nodes.push(node);\n node.parent = block;\n node.prev = prev;\n prev = node;\n return node;\n };\n\n push({ type: 'bos' });\n\n while (index < length) {\n block = stack[stack.length - 1];\n value = advance();\n\n /**\n * Invalid chars\n */\n\n if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n continue;\n }\n\n /**\n * Escaped chars\n */\n\n if (value === CHAR_BACKSLASH) {\n push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n continue;\n }\n\n /**\n * Right square bracket (literal): ']'\n */\n\n if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n push({ type: 'text', value: '\\\\' + value });\n continue;\n }\n\n /**\n * Left square bracket: '['\n */\n\n if (value === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n\n let next;\n\n while (index < length && (next = advance())) {\n value += next;\n\n if (next === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n continue;\n }\n\n if (next === CHAR_BACKSLASH) {\n value += advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n brackets--;\n\n if (brackets === 0) {\n break;\n }\n }\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === CHAR_LEFT_PARENTHESES) {\n block = push({ type: 'paren', nodes: [] });\n stack.push(block);\n push({ type: 'text', value });\n continue;\n }\n\n if (value === CHAR_RIGHT_PARENTHESES) {\n if (block.type !== 'paren') {\n push({ type: 'text', value });\n continue;\n }\n block = stack.pop();\n push({ type: 'text', value });\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Quotes: '|\"|`\n */\n\n if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n const open = value;\n let next;\n\n if (options.keepQuotes !== true) {\n value = '';\n }\n\n while (index < length && (next = advance())) {\n if (next === CHAR_BACKSLASH) {\n value += next + advance();\n continue;\n }\n\n if (next === open) {\n if (options.keepQuotes === true) value += next;\n break;\n }\n\n value += next;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Left curly brace: '{'\n */\n\n if (value === CHAR_LEFT_CURLY_BRACE) {\n depth++;\n\n const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n const brace = {\n type: 'brace',\n open: true,\n close: false,\n dollar,\n depth,\n commas: 0,\n ranges: 0,\n nodes: []\n };\n\n block = push(brace);\n stack.push(block);\n push({ type: 'open', value });\n continue;\n }\n\n /**\n * Right curly brace: '}'\n */\n\n if (value === CHAR_RIGHT_CURLY_BRACE) {\n if (block.type !== 'brace') {\n push({ type: 'text', value });\n continue;\n }\n\n const type = 'close';\n block = stack.pop();\n block.close = true;\n\n push({ type, value });\n depth--;\n\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Comma: ','\n */\n\n if (value === CHAR_COMMA && depth > 0) {\n if (block.ranges > 0) {\n block.ranges = 0;\n const open = block.nodes.shift();\n block.nodes = [open, { type: 'text', value: stringify(block) }];\n }\n\n push({ type: 'comma', value });\n block.commas++;\n continue;\n }\n\n /**\n * Dot: '.'\n */\n\n if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n const siblings = block.nodes;\n\n if (depth === 0 || siblings.length === 0) {\n push({ type: 'text', value });\n continue;\n }\n\n if (prev.type === 'dot') {\n block.range = [];\n prev.value += value;\n prev.type = 'range';\n\n if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n block.invalid = true;\n block.ranges = 0;\n prev.type = 'text';\n continue;\n }\n\n block.ranges++;\n block.args = [];\n continue;\n }\n\n if (prev.type === 'range') {\n siblings.pop();\n\n const before = siblings[siblings.length - 1];\n before.value += prev.value + value;\n prev = before;\n block.ranges--;\n continue;\n }\n\n push({ type: 'dot', value });\n continue;\n }\n\n /**\n * Text\n */\n\n push({ type: 'text', value });\n }\n\n // Mark imbalanced braces and brackets as invalid\n do {\n block = stack.pop();\n\n if (block.type !== 'root') {\n block.nodes.forEach(node => {\n if (!node.nodes) {\n if (node.type === 'open') node.isOpen = true;\n if (node.type === 'close') node.isClose = true;\n if (!node.nodes) node.type = 'text';\n node.invalid = true;\n }\n });\n\n // get the location of the block on parent.nodes (block's siblings)\n const parent = stack[stack.length - 1];\n const index = parent.nodes.indexOf(block);\n // replace the (invalid) block with it's nodes\n parent.nodes.splice(index, 1, ...block.nodes);\n }\n } while (stack.length > 0);\n\n push({ type: 'eos' });\n return ast;\n};\n\nmodule.exports = parse;\n",
|
|
32
|
+
"'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n let output = [];\n\n if (Array.isArray(input)) {\n for (const pattern of input) {\n const result = braces.create(pattern, options);\n if (Array.isArray(result)) {\n output.push(...result);\n } else {\n output.push(result);\n }\n }\n } else {\n output = [].concat(braces.create(input, options));\n }\n\n if (options && options.expand === true && options.nodupes === true) {\n output = [...new Set(output)];\n }\n return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n if (typeof input === 'string') {\n return stringify(braces.parse(input, options), options);\n }\n return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n\n let result = expand(input, options);\n\n // filter out empty strings if specified\n if (options.noempty === true) {\n result = result.filter(Boolean);\n }\n\n // filter out duplicates if specified\n if (options.nodupes === true) {\n result = [...new Set(result)];\n }\n\n return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n if (input === '' || input.length < 3) {\n return [input];\n }\n\n return options.expand !== true\n ? braces.compile(input, options)\n : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n",
|
|
33
|
+
"'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n SEP: path.sep,\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n",
|
|
34
|
+
"'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.supportsLookbehinds = () => {\n const segs = process.version.slice(1).split('.').map(Number);\n if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n return true;\n }\n return false;\n};\n\nexports.isWindows = options => {\n if (options && typeof options.windows === 'boolean') {\n return options.windows;\n }\n return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n",
|
|
35
|
+
"'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n",
|
|
36
|
+
"'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(win32);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.value += tok.value;\n prev.output = (prev.output || '') + tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if (next === '<' && !utils.supportsLookbehinds()) {\n throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n }\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(win32);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n",
|
|
37
|
+
"'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = utils.isWindows(options);\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n",
|
|
38
|
+
"'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n const index = v.indexOf('{');\n return index > -1 && v.indexOf('}', index) > -1;\n};\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n patterns = [].concat(patterns);\n list = [].concat(list);\n\n let omit = new Set();\n let keep = new Set();\n let items = new Set();\n let negatives = 0;\n\n let onResult = state => {\n items.add(state.output);\n if (options && options.onResult) {\n options.onResult(state);\n }\n };\n\n for (let i = 0; i < patterns.length; i++) {\n let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n if (negated) negatives++;\n\n for (let item of list) {\n let matched = isMatch(item, true);\n\n let match = negated ? !matched.isMatch : matched.isMatch;\n if (!match) continue;\n\n if (negated) {\n omit.add(matched.output);\n } else {\n omit.delete(matched.output);\n keep.add(matched.output);\n }\n }\n }\n\n let result = negatives === patterns.length ? [...items] : [...keep];\n let matches = result.filter(item => !omit.has(item));\n\n if (options && matches.length === 0) {\n if (options.failglob === true) {\n throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n }\n\n if (options.nonull === true || options.nullglob === true) {\n return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n }\n }\n\n return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n patterns = [].concat(patterns).map(String);\n let result = new Set();\n let items = [];\n\n let onResult = state => {\n if (options.onResult) options.onResult(state);\n items.push(state.output);\n };\n\n let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n for (let item of items) {\n if (!matches.has(item)) {\n result.add(item);\n }\n }\n return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n if (Array.isArray(pattern)) {\n return pattern.some(p => micromatch.contains(str, p, options));\n }\n\n if (typeof pattern === 'string') {\n if (isEmptyString(str) || isEmptyString(pattern)) {\n return false;\n }\n\n if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n return true;\n }\n }\n\n return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n if (!utils.isObject(obj)) {\n throw new TypeError('Expected the first argument to be an object');\n }\n let keys = micromatch(Object.keys(obj), patterns, options);\n let res = {};\n for (let key of keys) res[key] = obj[key];\n return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (items.some(item => isMatch(item))) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (!items.every(item => isMatch(item))) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n let posix = utils.isWindows(options);\n let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n if (match) {\n return match.slice(1).map(v => v === void 0 ? '' : v);\n }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n let res = [];\n for (let pattern of [].concat(patterns || [])) {\n for (let str of braces(String(pattern), options)) {\n res.push(picomatch.parse(str, options));\n }\n }\n return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n if ((options && options.nobrace === true) || !hasBraces(pattern)) {\n return [pattern];\n }\n return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n",
|
|
39
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAbsolute = exports.partitionAbsoluteAndRelative = exports.removeDuplicateSlashes = exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;\nconst path = require(\"path\");\nconst globParent = require(\"glob-parent\");\nconst micromatch = require(\"micromatch\");\nconst GLOBSTAR = '**';\nconst ESCAPE_SYMBOL = '\\\\';\nconst COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;\nconst REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\\[[^[]*]/;\nconst REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\\([^(]*\\|[^|]*\\)/;\nconst GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\\([^(]*\\)/;\nconst BRACE_EXPANSION_SEPARATORS_RE = /,|\\.\\./;\n/**\n * Matches a sequence of two or more consecutive slashes, excluding the first two slashes at the beginning of the string.\n * The latter is due to the presence of the device path at the beginning of the UNC path.\n */\nconst DOUBLE_SLASH_RE = /(?!^)\\/{2,}/g;\nfunction isStaticPattern(pattern, options = {}) {\n return !isDynamicPattern(pattern, options);\n}\nexports.isStaticPattern = isStaticPattern;\nfunction isDynamicPattern(pattern, options = {}) {\n /**\n * A special case with an empty string is necessary for matching patterns that start with a forward slash.\n * An empty string cannot be a dynamic pattern.\n * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.\n */\n if (pattern === '') {\n return false;\n }\n /**\n * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check\n * filepath directly (without read directory).\n */\n if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {\n return true;\n }\n if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {\n return true;\n }\n if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {\n return true;\n }\n if (options.braceExpansion !== false && hasBraceExpansion(pattern)) {\n return true;\n }\n return false;\n}\nexports.isDynamicPattern = isDynamicPattern;\nfunction hasBraceExpansion(pattern) {\n const openingBraceIndex = pattern.indexOf('{');\n if (openingBraceIndex === -1) {\n return false;\n }\n const closingBraceIndex = pattern.indexOf('}', openingBraceIndex + 1);\n if (closingBraceIndex === -1) {\n return false;\n }\n const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex);\n return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent);\n}\nfunction convertToPositivePattern(pattern) {\n return isNegativePattern(pattern) ? pattern.slice(1) : pattern;\n}\nexports.convertToPositivePattern = convertToPositivePattern;\nfunction convertToNegativePattern(pattern) {\n return '!' + pattern;\n}\nexports.convertToNegativePattern = convertToNegativePattern;\nfunction isNegativePattern(pattern) {\n return pattern.startsWith('!') && pattern[1] !== '(';\n}\nexports.isNegativePattern = isNegativePattern;\nfunction isPositivePattern(pattern) {\n return !isNegativePattern(pattern);\n}\nexports.isPositivePattern = isPositivePattern;\nfunction getNegativePatterns(patterns) {\n return patterns.filter(isNegativePattern);\n}\nexports.getNegativePatterns = getNegativePatterns;\nfunction getPositivePatterns(patterns) {\n return patterns.filter(isPositivePattern);\n}\nexports.getPositivePatterns = getPositivePatterns;\n/**\n * Returns patterns that can be applied inside the current directory.\n *\n * @example\n * // ['./*', '*', 'a/*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsInsideCurrentDirectory(patterns) {\n return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));\n}\nexports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;\n/**\n * Returns patterns to be expanded relative to (outside) the current directory.\n *\n * @example\n * // ['../*', './../*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsOutsideCurrentDirectory(patterns) {\n return patterns.filter(isPatternRelatedToParentDirectory);\n}\nexports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;\nfunction isPatternRelatedToParentDirectory(pattern) {\n return pattern.startsWith('..') || pattern.startsWith('./..');\n}\nexports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;\nfunction getBaseDirectory(pattern) {\n return globParent(pattern, { flipBackslashes: false });\n}\nexports.getBaseDirectory = getBaseDirectory;\nfunction hasGlobStar(pattern) {\n return pattern.includes(GLOBSTAR);\n}\nexports.hasGlobStar = hasGlobStar;\nfunction endsWithSlashGlobStar(pattern) {\n return pattern.endsWith('/' + GLOBSTAR);\n}\nexports.endsWithSlashGlobStar = endsWithSlashGlobStar;\nfunction isAffectDepthOfReadingPattern(pattern) {\n const basename = path.basename(pattern);\n return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);\n}\nexports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;\nfunction expandPatternsWithBraceExpansion(patterns) {\n return patterns.reduce((collection, pattern) => {\n return collection.concat(expandBraceExpansion(pattern));\n }, []);\n}\nexports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;\nfunction expandBraceExpansion(pattern) {\n const patterns = micromatch.braces(pattern, { expand: true, nodupes: true, keepEscaping: true });\n /**\n * Sort the patterns by length so that the same depth patterns are processed side by side.\n * `a/{b,}/{c,}/*` – `['a///*', 'a/b//*', 'a//c/*', 'a/b/c/*']`\n */\n patterns.sort((a, b) => a.length - b.length);\n /**\n * Micromatch can return an empty string in the case of patterns like `{a,}`.\n */\n return patterns.filter((pattern) => pattern !== '');\n}\nexports.expandBraceExpansion = expandBraceExpansion;\nfunction getPatternParts(pattern, options) {\n let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));\n /**\n * The scan method returns an empty array in some cases.\n * See micromatch/picomatch#58 for more details.\n */\n if (parts.length === 0) {\n parts = [pattern];\n }\n /**\n * The scan method does not return an empty part for the pattern with a forward slash.\n * This is another part of micromatch/picomatch#58.\n */\n if (parts[0].startsWith('/')) {\n parts[0] = parts[0].slice(1);\n parts.unshift('');\n }\n return parts;\n}\nexports.getPatternParts = getPatternParts;\nfunction makeRe(pattern, options) {\n return micromatch.makeRe(pattern, options);\n}\nexports.makeRe = makeRe;\nfunction convertPatternsToRe(patterns, options) {\n return patterns.map((pattern) => makeRe(pattern, options));\n}\nexports.convertPatternsToRe = convertPatternsToRe;\nfunction matchAny(entry, patternsRe) {\n return patternsRe.some((patternRe) => patternRe.test(entry));\n}\nexports.matchAny = matchAny;\n/**\n * This package only works with forward slashes as a path separator.\n * Because of this, we cannot use the standard `path.normalize` method, because on Windows platform it will use of backslashes.\n */\nfunction removeDuplicateSlashes(pattern) {\n return pattern.replace(DOUBLE_SLASH_RE, '/');\n}\nexports.removeDuplicateSlashes = removeDuplicateSlashes;\nfunction partitionAbsoluteAndRelative(patterns) {\n const absolute = [];\n const relative = [];\n for (const pattern of patterns) {\n if (isAbsolute(pattern)) {\n absolute.push(pattern);\n }\n else {\n relative.push(pattern);\n }\n }\n return [absolute, relative];\n}\nexports.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative;\nfunction isAbsolute(pattern) {\n return path.isAbsolute(pattern);\n}\nexports.isAbsolute = isAbsolute;\n",
|
|
40
|
+
"'use strict'\n/*\n * merge2\n * https://github.com/teambition/merge2\n *\n * Copyright (c) 2014-2020 Teambition\n * Licensed under the MIT license.\n */\nconst Stream = require('stream')\nconst PassThrough = Stream.PassThrough\nconst slice = Array.prototype.slice\n\nmodule.exports = merge2\n\nfunction merge2 () {\n const streamsQueue = []\n const args = slice.call(arguments)\n let merging = false\n let options = args[args.length - 1]\n\n if (options && !Array.isArray(options) && options.pipe == null) {\n args.pop()\n } else {\n options = {}\n }\n\n const doEnd = options.end !== false\n const doPipeError = options.pipeError === true\n if (options.objectMode == null) {\n options.objectMode = true\n }\n if (options.highWaterMark == null) {\n options.highWaterMark = 64 * 1024\n }\n const mergedStream = PassThrough(options)\n\n function addStream () {\n for (let i = 0, len = arguments.length; i < len; i++) {\n streamsQueue.push(pauseStreams(arguments[i], options))\n }\n mergeStream()\n return this\n }\n\n function mergeStream () {\n if (merging) {\n return\n }\n merging = true\n\n let streams = streamsQueue.shift()\n if (!streams) {\n process.nextTick(endStream)\n return\n }\n if (!Array.isArray(streams)) {\n streams = [streams]\n }\n\n let pipesCount = streams.length + 1\n\n function next () {\n if (--pipesCount > 0) {\n return\n }\n merging = false\n mergeStream()\n }\n\n function pipe (stream) {\n function onend () {\n stream.removeListener('merge2UnpipeEnd', onend)\n stream.removeListener('end', onend)\n if (doPipeError) {\n stream.removeListener('error', onerror)\n }\n next()\n }\n function onerror (err) {\n mergedStream.emit('error', err)\n }\n // skip ended stream\n if (stream._readableState.endEmitted) {\n return next()\n }\n\n stream.on('merge2UnpipeEnd', onend)\n stream.on('end', onend)\n\n if (doPipeError) {\n stream.on('error', onerror)\n }\n\n stream.pipe(mergedStream, { end: false })\n // compatible for old stream\n stream.resume()\n }\n\n for (let i = 0; i < streams.length; i++) {\n pipe(streams[i])\n }\n\n next()\n }\n\n function endStream () {\n merging = false\n // emit 'queueDrain' when all streams merged.\n mergedStream.emit('queueDrain')\n if (doEnd) {\n mergedStream.end()\n }\n }\n\n mergedStream.setMaxListeners(0)\n mergedStream.add = addStream\n mergedStream.on('unpipe', function (stream) {\n stream.emit('merge2UnpipeEnd')\n })\n\n if (args.length) {\n addStream.apply(null, args)\n }\n return mergedStream\n}\n\n// check and pause streams for pipe.\nfunction pauseStreams (streams, options) {\n if (!Array.isArray(streams)) {\n // Backwards-compat with old-style streams\n if (!streams._readableState && streams.pipe) {\n streams = streams.pipe(PassThrough(options))\n }\n if (!streams._readableState || !streams.pause || !streams.pipe) {\n throw new Error('Only readable stream can be merged.')\n }\n streams.pause()\n } else {\n for (let i = 0, len = streams.length; i < len; i++) {\n streams[i] = pauseStreams(streams[i], options)\n }\n }\n return streams\n}\n",
|
|
41
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = void 0;\nconst merge2 = require(\"merge2\");\nfunction merge(streams) {\n const mergedStream = merge2(streams);\n streams.forEach((stream) => {\n stream.once('error', (error) => mergedStream.emit('error', error));\n });\n mergedStream.once('close', () => propagateCloseEventToSources(streams));\n mergedStream.once('end', () => propagateCloseEventToSources(streams));\n return mergedStream;\n}\nexports.merge = merge;\nfunction propagateCloseEventToSources(streams) {\n streams.forEach((stream) => stream.emit('close'));\n}\n",
|
|
42
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmpty = exports.isString = void 0;\nfunction isString(input) {\n return typeof input === 'string';\n}\nexports.isString = isString;\nfunction isEmpty(input) {\n return input === '';\n}\nexports.isEmpty = isEmpty;\n",
|
|
43
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;\nconst array = require(\"./array\");\nexports.array = array;\nconst errno = require(\"./errno\");\nexports.errno = errno;\nconst fs = require(\"./fs\");\nexports.fs = fs;\nconst path = require(\"./path\");\nexports.path = path;\nconst pattern = require(\"./pattern\");\nexports.pattern = pattern;\nconst stream = require(\"./stream\");\nexports.stream = stream;\nconst string = require(\"./string\");\nexports.string = string;\n",
|
|
44
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;\nconst utils = require(\"../utils\");\nfunction generate(input, settings) {\n const patterns = processPatterns(input, settings);\n const ignore = processPatterns(settings.ignore, settings);\n const positivePatterns = getPositivePatterns(patterns);\n const negativePatterns = getNegativePatternsAsPositive(patterns, ignore);\n const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));\n const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));\n const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);\n const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);\n return staticTasks.concat(dynamicTasks);\n}\nexports.generate = generate;\nfunction processPatterns(input, settings) {\n let patterns = input;\n /**\n * The original pattern like `{,*,**,a/*}` can lead to problems checking the depth when matching entry\n * and some problems with the micromatch package (see fast-glob issues: #365, #394).\n *\n * To solve this problem, we expand all patterns containing brace expansion. This can lead to a slight slowdown\n * in matching in the case of a large set of patterns after expansion.\n */\n if (settings.braceExpansion) {\n patterns = utils.pattern.expandPatternsWithBraceExpansion(patterns);\n }\n /**\n * If the `baseNameMatch` option is enabled, we must add globstar to patterns, so that they can be used\n * at any nesting level.\n *\n * We do this here, because otherwise we have to complicate the filtering logic. For example, we need to change\n * the pattern in the filter before creating a regular expression. There is no need to change the patterns\n * in the application. Only on the input.\n */\n if (settings.baseNameMatch) {\n patterns = patterns.map((pattern) => pattern.includes('/') ? pattern : `**/${pattern}`);\n }\n /**\n * This method also removes duplicate slashes that may have been in the pattern or formed as a result of expansion.\n */\n return patterns.map((pattern) => utils.pattern.removeDuplicateSlashes(pattern));\n}\n/**\n * Returns tasks grouped by basic pattern directories.\n *\n * Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately.\n * This is necessary because directory traversal starts at the base directory and goes deeper.\n */\nfunction convertPatternsToTasks(positive, negative, dynamic) {\n const tasks = [];\n const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive);\n const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive);\n const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);\n const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);\n tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));\n /*\n * For the sake of reducing future accesses to the file system, we merge all tasks within the current directory\n * into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest.\n */\n if ('.' in insideCurrentDirectoryGroup) {\n tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic));\n }\n else {\n tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));\n }\n return tasks;\n}\nexports.convertPatternsToTasks = convertPatternsToTasks;\nfunction getPositivePatterns(patterns) {\n return utils.pattern.getPositivePatterns(patterns);\n}\nexports.getPositivePatterns = getPositivePatterns;\nfunction getNegativePatternsAsPositive(patterns, ignore) {\n const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);\n const positive = negative.map(utils.pattern.convertToPositivePattern);\n return positive;\n}\nexports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;\nfunction groupPatternsByBaseDirectory(patterns) {\n const group = {};\n return patterns.reduce((collection, pattern) => {\n const base = utils.pattern.getBaseDirectory(pattern);\n if (base in collection) {\n collection[base].push(pattern);\n }\n else {\n collection[base] = [pattern];\n }\n return collection;\n }, group);\n}\nexports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;\nfunction convertPatternGroupsToTasks(positive, negative, dynamic) {\n return Object.keys(positive).map((base) => {\n return convertPatternGroupToTask(base, positive[base], negative, dynamic);\n });\n}\nexports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;\nfunction convertPatternGroupToTask(base, positive, negative, dynamic) {\n return {\n dynamic,\n positive,\n negative,\n base,\n patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))\n };\n}\nexports.convertPatternGroupToTask = convertPatternGroupToTask;\n",
|
|
45
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings, callback) {\n settings.fs.lstat(path, (lstatError, lstat) => {\n if (lstatError !== null) {\n callFailureCallback(callback, lstatError);\n return;\n }\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n callSuccessCallback(callback, lstat);\n return;\n }\n settings.fs.stat(path, (statError, stat) => {\n if (statError !== null) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n callFailureCallback(callback, statError);\n return;\n }\n callSuccessCallback(callback, lstat);\n return;\n }\n if (settings.markSymbolicLink) {\n stat.isSymbolicLink = () => true;\n }\n callSuccessCallback(callback, stat);\n });\n });\n}\nexports.read = read;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n callback(null, result);\n}\n",
|
|
46
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings) {\n const lstat = settings.fs.lstatSync(path);\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n return lstat;\n }\n try {\n const stat = settings.fs.statSync(path);\n if (settings.markSymbolicLink) {\n stat.isSymbolicLink = () => true;\n }\n return stat;\n }\n catch (error) {\n if (!settings.throwErrorOnBrokenSymbolicLink) {\n return lstat;\n }\n throw error;\n }\n}\nexports.read = read;\n",
|
|
47
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n stat: fs.stat,\n lstatSync: fs.lstatSync,\n statSync: fs.statSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n if (fsMethods === undefined) {\n return exports.FILE_SYSTEM_ADAPTER;\n }\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n",
|
|
48
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);\n this.fs = fs.createFileSystemAdapter(this._options.fs);\n this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n",
|
|
49
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.statSync = exports.stat = exports.Settings = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction stat(path, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n async.read(path, getSettings(), optionsOrSettingsOrCallback);\n return;\n }\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.stat = stat;\nfunction statSync(path, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n return sync.read(path, settings);\n}\nexports.statSync = statSync;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n",
|
|
50
|
+
"/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n // reuse resolved promise, and allocate it lazily\n : cb => (promise || (promise = Promise.resolve()))\n .then(cb)\n .catch(err => setTimeout(() => { throw err }, 0))\n",
|
|
51
|
+
"/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallel\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallel (tasks, cb) {\n let results, pending, keys\n let isSync = true\n\n if (Array.isArray(tasks)) {\n results = []\n pending = tasks.length\n } else {\n keys = Object.keys(tasks)\n results = {}\n pending = keys.length\n }\n\n function done (err) {\n function end () {\n if (cb) cb(err, results)\n cb = null\n }\n if (isSync) queueMicrotask(end)\n else end()\n }\n\n function each (i, err, result) {\n results[i] = result\n if (--pending === 0 || err) {\n done(err)\n }\n }\n\n if (!pending) {\n // empty\n done(null)\n } else if (keys) {\n // object\n keys.forEach(function (key) {\n tasks[key](function (err, result) { each(key, err, result) })\n })\n } else {\n // array\n tasks.forEach(function (task, i) {\n task(function (err, result) { each(i, err, result) })\n })\n }\n\n isSync = false\n}\n",
|
|
52
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;\nconst NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');\nif (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) {\n throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);\n}\nconst MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);\nconst MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);\nconst SUPPORTED_MAJOR_VERSION = 10;\nconst SUPPORTED_MINOR_VERSION = 10;\nconst IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;\nconst IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;\n/**\n * IS `true` for Node.js 10.10 and greater.\n */\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;\n",
|
|
53
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n constructor(name, stats) {\n this.name = name;\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n this.isDirectory = stats.isDirectory.bind(stats);\n this.isFIFO = stats.isFIFO.bind(stats);\n this.isFile = stats.isFile.bind(stats);\n this.isSocket = stats.isSocket.bind(stats);\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n }\n}\nfunction createDirentFromStats(name, stats) {\n return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n",
|
|
54
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fs = void 0;\nconst fs = require(\"./fs\");\nexports.fs = fs;\n",
|
|
55
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = void 0;\nfunction joinPathSegments(a, b, separator) {\n /**\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n */\n if (a.endsWith(separator)) {\n return a + b;\n }\n return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n",
|
|
56
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst rpl = require(\"run-parallel\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings, callback) {\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n readdirWithFileTypes(directory, settings, callback);\n return;\n }\n readdir(directory, settings, callback);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings, callback) {\n settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {\n if (readdirError !== null) {\n callFailureCallback(callback, readdirError);\n return;\n }\n const entries = dirents.map((dirent) => ({\n dirent,\n name: dirent.name,\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n }));\n if (!settings.followSymbolicLinks) {\n callSuccessCallback(callback, entries);\n return;\n }\n const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));\n rpl(tasks, (rplError, rplEntries) => {\n if (rplError !== null) {\n callFailureCallback(callback, rplError);\n return;\n }\n callSuccessCallback(callback, rplEntries);\n });\n });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction makeRplTaskEntry(entry, settings) {\n return (done) => {\n if (!entry.dirent.isSymbolicLink()) {\n done(null, entry);\n return;\n }\n settings.fs.stat(entry.path, (statError, stats) => {\n if (statError !== null) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n done(statError);\n return;\n }\n done(null, entry);\n return;\n }\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n done(null, entry);\n });\n };\n}\nfunction readdir(directory, settings, callback) {\n settings.fs.readdir(directory, (readdirError, names) => {\n if (readdirError !== null) {\n callFailureCallback(callback, readdirError);\n return;\n }\n const tasks = names.map((name) => {\n const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n return (done) => {\n fsStat.stat(path, settings.fsStatSettings, (error, stats) => {\n if (error !== null) {\n done(error);\n return;\n }\n const entry = {\n name,\n path,\n dirent: utils.fs.createDirentFromStats(name, stats)\n };\n if (settings.stats) {\n entry.stats = stats;\n }\n done(null, entry);\n });\n };\n });\n rpl(tasks, (rplError, entries) => {\n if (rplError !== null) {\n callFailureCallback(callback, rplError);\n return;\n }\n callSuccessCallback(callback, entries);\n });\n });\n}\nexports.readdir = readdir;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n callback(null, result);\n}\n",
|
|
57
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings) {\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n return readdirWithFileTypes(directory, settings);\n }\n return readdir(directory, settings);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings) {\n const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });\n return dirents.map((dirent) => {\n const entry = {\n dirent,\n name: dirent.name,\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n };\n if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {\n try {\n const stats = settings.fs.statSync(entry.path);\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n }\n catch (error) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n throw error;\n }\n }\n }\n return entry;\n });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction readdir(directory, settings) {\n const names = settings.fs.readdirSync(directory);\n return names.map((name) => {\n const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n const stats = fsStat.statSync(entryPath, settings.fsStatSettings);\n const entry = {\n name,\n path: entryPath,\n dirent: utils.fs.createDirentFromStats(name, stats)\n };\n if (settings.stats) {\n entry.stats = stats;\n }\n return entry;\n });\n}\nexports.readdir = readdir;\n",
|
|
58
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n stat: fs.stat,\n lstatSync: fs.lstatSync,\n statSync: fs.statSync,\n readdir: fs.readdir,\n readdirSync: fs.readdirSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n if (fsMethods === undefined) {\n return exports.FILE_SYSTEM_ADAPTER;\n }\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n",
|
|
59
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);\n this.fs = fs.createFileSystemAdapter(this._options.fs);\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n this.stats = this._getValue(this._options.stats, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n this.fsStatSettings = new fsStat.Settings({\n followSymbolicLink: this.followSymbolicLinks,\n fs: this.fs,\n throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink\n });\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n",
|
|
60
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.scandirSync = exports.scandir = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction scandir(path, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n async.read(path, getSettings(), optionsOrSettingsOrCallback);\n return;\n }\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.scandir = scandir;\nfunction scandirSync(path, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n return sync.read(path, settings);\n}\nexports.scandirSync = scandirSync;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n",
|
|
61
|
+
"'use strict'\n\nfunction reusify (Constructor) {\n var head = new Constructor()\n var tail = head\n\n function get () {\n var current = head\n\n if (current.next) {\n head = current.next\n } else {\n head = new Constructor()\n tail = head\n }\n\n current.next = null\n\n return current\n }\n\n function release (obj) {\n tail.next = obj\n tail = obj\n }\n\n return {\n get: get,\n release: release\n }\n}\n\nmodule.exports = reusify\n",
|
|
62
|
+
"'use strict'\n\n/* eslint-disable no-var */\n\nvar reusify = require('reusify')\n\nfunction fastqueue (context, worker, _concurrency) {\n if (typeof context === 'function') {\n _concurrency = worker\n worker = context\n context = null\n }\n\n if (!(_concurrency >= 1)) {\n throw new Error('fastqueue concurrency must be equal to or greater than 1')\n }\n\n var cache = reusify(Task)\n var queueHead = null\n var queueTail = null\n var _running = 0\n var errorHandler = null\n\n var self = {\n push: push,\n drain: noop,\n saturated: noop,\n pause: pause,\n paused: false,\n\n get concurrency () {\n return _concurrency\n },\n set concurrency (value) {\n if (!(value >= 1)) {\n throw new Error('fastqueue concurrency must be equal to or greater than 1')\n }\n _concurrency = value\n\n if (self.paused) return\n for (; queueHead && _running < _concurrency;) {\n _running++\n release()\n }\n },\n\n running: running,\n resume: resume,\n idle: idle,\n length: length,\n getQueue: getQueue,\n unshift: unshift,\n empty: noop,\n kill: kill,\n killAndDrain: killAndDrain,\n error: error\n }\n\n return self\n\n function running () {\n return _running\n }\n\n function pause () {\n self.paused = true\n }\n\n function length () {\n var current = queueHead\n var counter = 0\n\n while (current) {\n current = current.next\n counter++\n }\n\n return counter\n }\n\n function getQueue () {\n var current = queueHead\n var tasks = []\n\n while (current) {\n tasks.push(current.value)\n current = current.next\n }\n\n return tasks\n }\n\n function resume () {\n if (!self.paused) return\n self.paused = false\n if (queueHead === null) {\n _running++\n release()\n return\n }\n for (; queueHead && _running < _concurrency;) {\n _running++\n release()\n }\n }\n\n function idle () {\n return _running === 0 && self.length() === 0\n }\n\n function push (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n current.errorHandler = errorHandler\n\n if (_running >= _concurrency || self.paused) {\n if (queueTail) {\n queueTail.next = current\n queueTail = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function unshift (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n current.errorHandler = errorHandler\n\n if (_running >= _concurrency || self.paused) {\n if (queueHead) {\n current.next = queueHead\n queueHead = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function release (holder) {\n if (holder) {\n cache.release(holder)\n }\n var next = queueHead\n if (next && _running <= _concurrency) {\n if (!self.paused) {\n if (queueTail === queueHead) {\n queueTail = null\n }\n queueHead = next.next\n next.next = null\n worker.call(context, next.value, next.worked)\n if (queueTail === null) {\n self.empty()\n }\n } else {\n _running--\n }\n } else if (--_running === 0) {\n self.drain()\n }\n }\n\n function kill () {\n queueHead = null\n queueTail = null\n self.drain = noop\n }\n\n function killAndDrain () {\n queueHead = null\n queueTail = null\n self.drain()\n self.drain = noop\n }\n\n function error (handler) {\n errorHandler = handler\n }\n}\n\nfunction noop () {}\n\nfunction Task () {\n this.value = null\n this.callback = noop\n this.next = null\n this.release = noop\n this.context = null\n this.errorHandler = null\n\n var self = this\n\n this.worked = function worked (err, result) {\n var callback = self.callback\n var errorHandler = self.errorHandler\n var val = self.value\n self.value = null\n self.callback = noop\n if (self.errorHandler) {\n errorHandler(err, val)\n }\n callback.call(self.context, err, result)\n self.release(self)\n }\n}\n\nfunction queueAsPromised (context, worker, _concurrency) {\n if (typeof context === 'function') {\n _concurrency = worker\n worker = context\n context = null\n }\n\n function asyncWrapper (arg, cb) {\n worker.call(this, arg)\n .then(function (res) {\n cb(null, res)\n }, cb)\n }\n\n var queue = fastqueue(context, asyncWrapper, _concurrency)\n\n var pushCb = queue.push\n var unshiftCb = queue.unshift\n\n queue.push = push\n queue.unshift = unshift\n queue.drained = drained\n\n return queue\n\n function push (value) {\n var p = new Promise(function (resolve, reject) {\n pushCb(value, function (err, result) {\n if (err) {\n reject(err)\n return\n }\n resolve(result)\n })\n })\n\n // Let's fork the promise chain to\n // make the error bubble up to the user but\n // not lead to a unhandledRejection\n p.catch(noop)\n\n return p\n }\n\n function unshift (value) {\n var p = new Promise(function (resolve, reject) {\n unshiftCb(value, function (err, result) {\n if (err) {\n reject(err)\n return\n }\n resolve(result)\n })\n })\n\n // Let's fork the promise chain to\n // make the error bubble up to the user but\n // not lead to a unhandledRejection\n p.catch(noop)\n\n return p\n }\n\n function drained () {\n var p = new Promise(function (resolve) {\n process.nextTick(function () {\n if (queue.idle()) {\n resolve()\n } else {\n var previousDrain = queue.drain\n queue.drain = function () {\n if (typeof previousDrain === 'function') previousDrain()\n resolve()\n queue.drain = previousDrain\n }\n }\n })\n })\n\n return p\n }\n}\n\nmodule.exports = fastqueue\nmodule.exports.promise = queueAsPromised\n",
|
|
63
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0;\nfunction isFatalError(settings, error) {\n if (settings.errorFilter === null) {\n return true;\n }\n return !settings.errorFilter(error);\n}\nexports.isFatalError = isFatalError;\nfunction isAppliedFilter(filter, value) {\n return filter === null || filter(value);\n}\nexports.isAppliedFilter = isAppliedFilter;\nfunction replacePathSegmentSeparator(filepath, separator) {\n return filepath.split(/[/\\\\]/).join(separator);\n}\nexports.replacePathSegmentSeparator = replacePathSegmentSeparator;\nfunction joinPathSegments(a, b, separator) {\n if (a === '') {\n return b;\n }\n /**\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n */\n if (a.endsWith(separator)) {\n return a + b;\n }\n return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n",
|
|
64
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst common = require(\"./common\");\nclass Reader {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);\n }\n}\nexports.default = Reader;\n",
|
|
65
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst fastq = require(\"fastq\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass AsyncReader extends reader_1.default {\n constructor(_root, _settings) {\n super(_root, _settings);\n this._settings = _settings;\n this._scandir = fsScandir.scandir;\n this._emitter = new events_1.EventEmitter();\n this._queue = fastq(this._worker.bind(this), this._settings.concurrency);\n this._isFatalError = false;\n this._isDestroyed = false;\n this._queue.drain = () => {\n if (!this._isFatalError) {\n this._emitter.emit('end');\n }\n };\n }\n read() {\n this._isFatalError = false;\n this._isDestroyed = false;\n setImmediate(() => {\n this._pushToQueue(this._root, this._settings.basePath);\n });\n return this._emitter;\n }\n get isDestroyed() {\n return this._isDestroyed;\n }\n destroy() {\n if (this._isDestroyed) {\n throw new Error('The reader is already destroyed');\n }\n this._isDestroyed = true;\n this._queue.killAndDrain();\n }\n onEntry(callback) {\n this._emitter.on('entry', callback);\n }\n onError(callback) {\n this._emitter.once('error', callback);\n }\n onEnd(callback) {\n this._emitter.once('end', callback);\n }\n _pushToQueue(directory, base) {\n const queueItem = { directory, base };\n this._queue.push(queueItem, (error) => {\n if (error !== null) {\n this._handleError(error);\n }\n });\n }\n _worker(item, done) {\n this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {\n if (error !== null) {\n done(error, undefined);\n return;\n }\n for (const entry of entries) {\n this._handleEntry(entry, item.base);\n }\n done(null, undefined);\n });\n }\n _handleError(error) {\n if (this._isDestroyed || !common.isFatalError(this._settings, error)) {\n return;\n }\n this._isFatalError = true;\n this._isDestroyed = true;\n this._emitter.emit('error', error);\n }\n _handleEntry(entry, base) {\n if (this._isDestroyed || this._isFatalError) {\n return;\n }\n const fullpath = entry.path;\n if (base !== undefined) {\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n }\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n this._emitEntry(entry);\n }\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n }\n }\n _emitEntry(entry) {\n this._emitter.emit('entry', entry);\n }\n}\nexports.default = AsyncReader;\n",
|
|
66
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nclass AsyncProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new async_1.default(this._root, this._settings);\n this._storage = [];\n }\n read(callback) {\n this._reader.onError((error) => {\n callFailureCallback(callback, error);\n });\n this._reader.onEntry((entry) => {\n this._storage.push(entry);\n });\n this._reader.onEnd(() => {\n callSuccessCallback(callback, this._storage);\n });\n this._reader.read();\n }\n}\nexports.default = AsyncProvider;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, entries) {\n callback(null, entries);\n}\n",
|
|
67
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst async_1 = require(\"../readers/async\");\nclass StreamProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new async_1.default(this._root, this._settings);\n this._stream = new stream_1.Readable({\n objectMode: true,\n read: () => { },\n destroy: () => {\n if (!this._reader.isDestroyed) {\n this._reader.destroy();\n }\n }\n });\n }\n read() {\n this._reader.onError((error) => {\n this._stream.emit('error', error);\n });\n this._reader.onEntry((entry) => {\n this._stream.push(entry);\n });\n this._reader.onEnd(() => {\n this._stream.push(null);\n });\n this._reader.read();\n return this._stream;\n }\n}\nexports.default = StreamProvider;\n",
|
|
68
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass SyncReader extends reader_1.default {\n constructor() {\n super(...arguments);\n this._scandir = fsScandir.scandirSync;\n this._storage = [];\n this._queue = new Set();\n }\n read() {\n this._pushToQueue(this._root, this._settings.basePath);\n this._handleQueue();\n return this._storage;\n }\n _pushToQueue(directory, base) {\n this._queue.add({ directory, base });\n }\n _handleQueue() {\n for (const item of this._queue.values()) {\n this._handleDirectory(item.directory, item.base);\n }\n }\n _handleDirectory(directory, base) {\n try {\n const entries = this._scandir(directory, this._settings.fsScandirSettings);\n for (const entry of entries) {\n this._handleEntry(entry, base);\n }\n }\n catch (error) {\n this._handleError(error);\n }\n }\n _handleError(error) {\n if (!common.isFatalError(this._settings, error)) {\n return;\n }\n throw error;\n }\n _handleEntry(entry, base) {\n const fullpath = entry.path;\n if (base !== undefined) {\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n }\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n this._pushToStorage(entry);\n }\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n }\n }\n _pushToStorage(entry) {\n this._storage.push(entry);\n }\n}\nexports.default = SyncReader;\n",
|
|
69
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nclass SyncProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new sync_1.default(this._root, this._settings);\n }\n read() {\n return this._reader.read();\n }\n}\nexports.default = SyncProvider;\n",
|
|
70
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.basePath = this._getValue(this._options.basePath, undefined);\n this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);\n this.deepFilter = this._getValue(this._options.deepFilter, null);\n this.entryFilter = this._getValue(this._options.entryFilter, null);\n this.errorFilter = this._getValue(this._options.errorFilter, null);\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n this.fsScandirSettings = new fsScandir.Settings({\n followSymbolicLinks: this._options.followSymbolicLinks,\n fs: this._options.fs,\n pathSegmentSeparator: this._options.pathSegmentSeparator,\n stats: this._options.stats,\n throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink\n });\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n",
|
|
71
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0;\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction walk(directory, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);\n return;\n }\n new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);\n}\nexports.walk = walk;\nfunction walkSync(directory, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n const provider = new sync_1.default(directory, settings);\n return provider.read();\n}\nexports.walkSync = walkSync;\nfunction walkStream(directory, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n const provider = new stream_1.default(directory, settings);\n return provider.read();\n}\nexports.walkStream = walkStream;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n",
|
|
72
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst utils = require(\"../utils\");\nclass Reader {\n constructor(_settings) {\n this._settings = _settings;\n this._fsStatSettings = new fsStat.Settings({\n followSymbolicLink: this._settings.followSymbolicLinks,\n fs: this._settings.fs,\n throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks\n });\n }\n _getFullEntryPath(filepath) {\n return path.resolve(this._settings.cwd, filepath);\n }\n _makeEntry(stats, pattern) {\n const entry = {\n name: pattern,\n path: pattern,\n dirent: utils.fs.createDirentFromStats(pattern, stats)\n };\n if (this._settings.stats) {\n entry.stats = stats;\n }\n return entry;\n }\n _isFatalError(error) {\n return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;\n }\n}\nexports.default = Reader;\n",
|
|
73
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderStream extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkStream = fsWalk.walkStream;\n this._stat = fsStat.stat;\n }\n dynamic(root, options) {\n return this._walkStream(root, options);\n }\n static(patterns, options) {\n const filepaths = patterns.map(this._getFullEntryPath, this);\n const stream = new stream_1.PassThrough({ objectMode: true });\n stream._write = (index, _enc, done) => {\n return this._getEntry(filepaths[index], patterns[index], options)\n .then((entry) => {\n if (entry !== null && options.entryFilter(entry)) {\n stream.push(entry);\n }\n if (index === filepaths.length - 1) {\n stream.end();\n }\n done();\n })\n .catch(done);\n };\n for (let i = 0; i < filepaths.length; i++) {\n stream.write(i);\n }\n return stream;\n }\n _getEntry(filepath, pattern, options) {\n return this._getStat(filepath)\n .then((stats) => this._makeEntry(stats, pattern))\n .catch((error) => {\n if (options.errorFilter(error)) {\n return null;\n }\n throw error;\n });\n }\n _getStat(filepath) {\n return new Promise((resolve, reject) => {\n this._stat(filepath, this._fsStatSettings, (error, stats) => {\n return error === null ? resolve(stats) : reject(error);\n });\n });\n }\n}\nexports.default = ReaderStream;\n",
|
|
74
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nconst stream_1 = require(\"./stream\");\nclass ReaderAsync extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkAsync = fsWalk.walk;\n this._readerStream = new stream_1.default(this._settings);\n }\n dynamic(root, options) {\n return new Promise((resolve, reject) => {\n this._walkAsync(root, options, (error, entries) => {\n if (error === null) {\n resolve(entries);\n }\n else {\n reject(error);\n }\n });\n });\n }\n async static(patterns, options) {\n const entries = [];\n const stream = this._readerStream.static(patterns, options);\n // After #235, replace it with an asynchronous iterator.\n return new Promise((resolve, reject) => {\n stream.once('error', reject);\n stream.on('data', (entry) => entries.push(entry));\n stream.once('end', () => resolve(entries));\n });\n }\n}\nexports.default = ReaderAsync;\n",
|
|
75
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass Matcher {\n constructor(_patterns, _settings, _micromatchOptions) {\n this._patterns = _patterns;\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n this._storage = [];\n this._fillStorage();\n }\n _fillStorage() {\n for (const pattern of this._patterns) {\n const segments = this._getPatternSegments(pattern);\n const sections = this._splitSegmentsIntoSections(segments);\n this._storage.push({\n complete: sections.length <= 1,\n pattern,\n segments,\n sections\n });\n }\n }\n _getPatternSegments(pattern) {\n const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);\n return parts.map((part) => {\n const dynamic = utils.pattern.isDynamicPattern(part, this._settings);\n if (!dynamic) {\n return {\n dynamic: false,\n pattern: part\n };\n }\n return {\n dynamic: true,\n pattern: part,\n patternRe: utils.pattern.makeRe(part, this._micromatchOptions)\n };\n });\n }\n _splitSegmentsIntoSections(segments) {\n return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));\n }\n}\nexports.default = Matcher;\n",
|
|
76
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst matcher_1 = require(\"./matcher\");\nclass PartialMatcher extends matcher_1.default {\n match(filepath) {\n const parts = filepath.split('/');\n const levels = parts.length;\n const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);\n for (const pattern of patterns) {\n const section = pattern.sections[0];\n /**\n * In this case, the pattern has a globstar and we must read all directories unconditionally,\n * but only if the level has reached the end of the first group.\n *\n * fixtures/{a,b}/**\n * ^ true/false ^ always true\n */\n if (!pattern.complete && levels > section.length) {\n return true;\n }\n const match = parts.every((part, index) => {\n const segment = pattern.segments[index];\n if (segment.dynamic && segment.patternRe.test(part)) {\n return true;\n }\n if (!segment.dynamic && segment.pattern === part) {\n return true;\n }\n return false;\n });\n if (match) {\n return true;\n }\n }\n return false;\n }\n}\nexports.default = PartialMatcher;\n",
|
|
77
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nconst partial_1 = require(\"../matchers/partial\");\nclass DeepFilter {\n constructor(_settings, _micromatchOptions) {\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n }\n getFilter(basePath, positive, negative) {\n const matcher = this._getMatcher(positive);\n const negativeRe = this._getNegativePatternsRe(negative);\n return (entry) => this._filter(basePath, entry, matcher, negativeRe);\n }\n _getMatcher(patterns) {\n return new partial_1.default(patterns, this._settings, this._micromatchOptions);\n }\n _getNegativePatternsRe(patterns) {\n const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);\n return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);\n }\n _filter(basePath, entry, matcher, negativeRe) {\n if (this._isSkippedByDeep(basePath, entry.path)) {\n return false;\n }\n if (this._isSkippedSymbolicLink(entry)) {\n return false;\n }\n const filepath = utils.path.removeLeadingDotSegment(entry.path);\n if (this._isSkippedByPositivePatterns(filepath, matcher)) {\n return false;\n }\n return this._isSkippedByNegativePatterns(filepath, negativeRe);\n }\n _isSkippedByDeep(basePath, entryPath) {\n /**\n * Avoid unnecessary depth calculations when it doesn't matter.\n */\n if (this._settings.deep === Infinity) {\n return false;\n }\n return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;\n }\n _getEntryLevel(basePath, entryPath) {\n const entryPathDepth = entryPath.split('/').length;\n if (basePath === '') {\n return entryPathDepth;\n }\n const basePathDepth = basePath.split('/').length;\n return entryPathDepth - basePathDepth;\n }\n _isSkippedSymbolicLink(entry) {\n return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();\n }\n _isSkippedByPositivePatterns(entryPath, matcher) {\n return !this._settings.baseNameMatch && !matcher.match(entryPath);\n }\n _isSkippedByNegativePatterns(entryPath, patternsRe) {\n return !utils.pattern.matchAny(entryPath, patternsRe);\n }\n}\nexports.default = DeepFilter;\n",
|
|
78
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryFilter {\n constructor(_settings, _micromatchOptions) {\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n this.index = new Map();\n }\n getFilter(positive, negative) {\n const [absoluteNegative, relativeNegative] = utils.pattern.partitionAbsoluteAndRelative(negative);\n const patterns = {\n positive: {\n all: utils.pattern.convertPatternsToRe(positive, this._micromatchOptions)\n },\n negative: {\n absolute: utils.pattern.convertPatternsToRe(absoluteNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })),\n relative: utils.pattern.convertPatternsToRe(relativeNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true }))\n }\n };\n return (entry) => this._filter(entry, patterns);\n }\n _filter(entry, patterns) {\n const filepath = utils.path.removeLeadingDotSegment(entry.path);\n if (this._settings.unique && this._isDuplicateEntry(filepath)) {\n return false;\n }\n if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {\n return false;\n }\n const isMatched = this._isMatchToPatternsSet(filepath, patterns, entry.dirent.isDirectory());\n if (this._settings.unique && isMatched) {\n this._createIndexRecord(filepath);\n }\n return isMatched;\n }\n _isDuplicateEntry(filepath) {\n return this.index.has(filepath);\n }\n _createIndexRecord(filepath) {\n this.index.set(filepath, undefined);\n }\n _onlyFileFilter(entry) {\n return this._settings.onlyFiles && !entry.dirent.isFile();\n }\n _onlyDirectoryFilter(entry) {\n return this._settings.onlyDirectories && !entry.dirent.isDirectory();\n }\n _isMatchToPatternsSet(filepath, patterns, isDirectory) {\n const isMatched = this._isMatchToPatterns(filepath, patterns.positive.all, isDirectory);\n if (!isMatched) {\n return false;\n }\n const isMatchedByRelativeNegative = this._isMatchToPatterns(filepath, patterns.negative.relative, isDirectory);\n if (isMatchedByRelativeNegative) {\n return false;\n }\n const isMatchedByAbsoluteNegative = this._isMatchToAbsoluteNegative(filepath, patterns.negative.absolute, isDirectory);\n if (isMatchedByAbsoluteNegative) {\n return false;\n }\n return true;\n }\n _isMatchToAbsoluteNegative(filepath, patternsRe, isDirectory) {\n if (patternsRe.length === 0) {\n return false;\n }\n const fullpath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n return this._isMatchToPatterns(fullpath, patternsRe, isDirectory);\n }\n _isMatchToPatterns(filepath, patternsRe, isDirectory) {\n if (patternsRe.length === 0) {\n return false;\n }\n // Trying to match files and directories by patterns.\n const isMatched = utils.pattern.matchAny(filepath, patternsRe);\n // A pattern with a trailling slash can be used for directory matching.\n // To apply such pattern, we need to add a tralling slash to the path.\n if (!isMatched && isDirectory) {\n return utils.pattern.matchAny(filepath + '/', patternsRe);\n }\n return isMatched;\n }\n}\nexports.default = EntryFilter;\n",
|
|
79
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass ErrorFilter {\n constructor(_settings) {\n this._settings = _settings;\n }\n getFilter() {\n return (error) => this._isNonFatalError(error);\n }\n _isNonFatalError(error) {\n return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;\n }\n}\nexports.default = ErrorFilter;\n",
|
|
80
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryTransformer {\n constructor(_settings) {\n this._settings = _settings;\n }\n getTransformer() {\n return (entry) => this._transform(entry);\n }\n _transform(entry) {\n let filepath = entry.path;\n if (this._settings.absolute) {\n filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n filepath = utils.path.unixify(filepath);\n }\n if (this._settings.markDirectories && entry.dirent.isDirectory()) {\n filepath += '/';\n }\n if (!this._settings.objectMode) {\n return filepath;\n }\n return Object.assign(Object.assign({}, entry), { path: filepath });\n }\n}\nexports.default = EntryTransformer;\n",
|
|
81
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst deep_1 = require(\"./filters/deep\");\nconst entry_1 = require(\"./filters/entry\");\nconst error_1 = require(\"./filters/error\");\nconst entry_2 = require(\"./transformers/entry\");\nclass Provider {\n constructor(_settings) {\n this._settings = _settings;\n this.errorFilter = new error_1.default(this._settings);\n this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());\n this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());\n this.entryTransformer = new entry_2.default(this._settings);\n }\n _getRootDirectory(task) {\n return path.resolve(this._settings.cwd, task.base);\n }\n _getReaderOptions(task) {\n const basePath = task.base === '.' ? '' : task.base;\n return {\n basePath,\n pathSegmentSeparator: '/',\n concurrency: this._settings.concurrency,\n deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),\n entryFilter: this.entryFilter.getFilter(task.positive, task.negative),\n errorFilter: this.errorFilter.getFilter(),\n followSymbolicLinks: this._settings.followSymbolicLinks,\n fs: this._settings.fs,\n stats: this._settings.stats,\n throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,\n transform: this.entryTransformer.getTransformer()\n };\n }\n _getMicromatchOptions() {\n return {\n dot: this._settings.dot,\n matchBase: this._settings.baseNameMatch,\n nobrace: !this._settings.braceExpansion,\n nocase: !this._settings.caseSensitiveMatch,\n noext: !this._settings.extglob,\n noglobstar: !this._settings.globstar,\n posix: true,\n strictSlashes: false\n };\n }\n}\nexports.default = Provider;\n",
|
|
82
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nconst provider_1 = require(\"./provider\");\nclass ProviderAsync extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new async_1.default(this._settings);\n }\n async read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const entries = await this.api(root, task, options);\n return entries.map((entry) => options.transform(entry));\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderAsync;\n",
|
|
83
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst stream_2 = require(\"../readers/stream\");\nconst provider_1 = require(\"./provider\");\nclass ProviderStream extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new stream_2.default(this._settings);\n }\n read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const source = this.api(root, task, options);\n const destination = new stream_1.Readable({ objectMode: true, read: () => { } });\n source\n .once('error', (error) => destination.emit('error', error))\n .on('data', (entry) => destination.emit('data', options.transform(entry)))\n .once('end', () => destination.emit('end'));\n destination\n .once('close', () => source.destroy());\n return destination;\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderStream;\n",
|
|
84
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderSync extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkSync = fsWalk.walkSync;\n this._statSync = fsStat.statSync;\n }\n dynamic(root, options) {\n return this._walkSync(root, options);\n }\n static(patterns, options) {\n const entries = [];\n for (const pattern of patterns) {\n const filepath = this._getFullEntryPath(pattern);\n const entry = this._getEntry(filepath, pattern, options);\n if (entry === null || !options.entryFilter(entry)) {\n continue;\n }\n entries.push(entry);\n }\n return entries;\n }\n _getEntry(filepath, pattern, options) {\n try {\n const stats = this._getStat(filepath);\n return this._makeEntry(stats, pattern);\n }\n catch (error) {\n if (options.errorFilter(error)) {\n return null;\n }\n throw error;\n }\n }\n _getStat(filepath) {\n return this._statSync(filepath, this._fsStatSettings);\n }\n}\nexports.default = ReaderSync;\n",
|
|
85
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nconst provider_1 = require(\"./provider\");\nclass ProviderSync extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new sync_1.default(this._settings);\n }\n read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const entries = this.api(root, task, options);\n return entries.map(options.transform);\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderSync;\n",
|
|
86
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nconst os = require(\"os\");\n/**\n * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.\n * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107\n */\nconst CPU_COUNT = Math.max(os.cpus().length, 1);\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n lstatSync: fs.lstatSync,\n stat: fs.stat,\n statSync: fs.statSync,\n readdir: fs.readdir,\n readdirSync: fs.readdirSync\n};\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.absolute = this._getValue(this._options.absolute, false);\n this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);\n this.braceExpansion = this._getValue(this._options.braceExpansion, true);\n this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);\n this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);\n this.cwd = this._getValue(this._options.cwd, process.cwd());\n this.deep = this._getValue(this._options.deep, Infinity);\n this.dot = this._getValue(this._options.dot, false);\n this.extglob = this._getValue(this._options.extglob, true);\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);\n this.fs = this._getFileSystemMethods(this._options.fs);\n this.globstar = this._getValue(this._options.globstar, true);\n this.ignore = this._getValue(this._options.ignore, []);\n this.markDirectories = this._getValue(this._options.markDirectories, false);\n this.objectMode = this._getValue(this._options.objectMode, false);\n this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);\n this.onlyFiles = this._getValue(this._options.onlyFiles, true);\n this.stats = this._getValue(this._options.stats, false);\n this.suppressErrors = this._getValue(this._options.suppressErrors, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);\n this.unique = this._getValue(this._options.unique, true);\n if (this.onlyDirectories) {\n this.onlyFiles = false;\n }\n if (this.stats) {\n this.objectMode = true;\n }\n // Remove the cast to the array in the next major (#404).\n this.ignore = [].concat(this.ignore);\n }\n _getValue(option, value) {\n return option === undefined ? value : option;\n }\n _getFileSystemMethods(methods = {}) {\n return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);\n }\n}\nexports.default = Settings;\n",
|
|
87
|
+
"\"use strict\";\nconst taskManager = require(\"./managers/tasks\");\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nconst utils = require(\"./utils\");\nasync function FastGlob(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, async_1.default, options);\n const result = await Promise.all(works);\n return utils.array.flatten(result);\n}\n// https://github.com/typescript-eslint/typescript-eslint/issues/60\n// eslint-disable-next-line no-redeclare\n(function (FastGlob) {\n FastGlob.glob = FastGlob;\n FastGlob.globSync = sync;\n FastGlob.globStream = stream;\n FastGlob.async = FastGlob;\n function sync(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, sync_1.default, options);\n return utils.array.flatten(works);\n }\n FastGlob.sync = sync;\n function stream(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, stream_1.default, options);\n /**\n * The stream returned by the provider cannot work with an asynchronous iterator.\n * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.\n * This affects performance (+25%). I don't see best solution right now.\n */\n return utils.stream.merge(works);\n }\n FastGlob.stream = stream;\n function generateTasks(source, options) {\n assertPatternsInput(source);\n const patterns = [].concat(source);\n const settings = new settings_1.default(options);\n return taskManager.generate(patterns, settings);\n }\n FastGlob.generateTasks = generateTasks;\n function isDynamicPattern(source, options) {\n assertPatternsInput(source);\n const settings = new settings_1.default(options);\n return utils.pattern.isDynamicPattern(source, settings);\n }\n FastGlob.isDynamicPattern = isDynamicPattern;\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escape(source);\n }\n FastGlob.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertPathToPattern(source);\n }\n FastGlob.convertPathToPattern = convertPathToPattern;\n let posix;\n (function (posix) {\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escapePosixPath(source);\n }\n posix.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertPosixPathToPattern(source);\n }\n posix.convertPathToPattern = convertPathToPattern;\n })(posix = FastGlob.posix || (FastGlob.posix = {}));\n let win32;\n (function (win32) {\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escapeWindowsPath(source);\n }\n win32.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertWindowsPathToPattern(source);\n }\n win32.convertPathToPattern = convertPathToPattern;\n })(win32 = FastGlob.win32 || (FastGlob.win32 = {}));\n})(FastGlob || (FastGlob = {}));\nfunction getWorks(source, _Provider, options) {\n const patterns = [].concat(source);\n const settings = new settings_1.default(options);\n const tasks = taskManager.generate(patterns, settings);\n const provider = new _Provider(settings);\n return tasks.map(provider.read, provider);\n}\nfunction assertPatternsInput(input) {\n const source = [].concat(input);\n const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));\n if (!isValidSource) {\n throw new TypeError('Patterns must be a string (non empty) or an array of strings');\n }\n}\nmodule.exports = FastGlob;\n",
|
|
88
|
+
"/**\n * Plugin Manager for @secondlayer/cli\n * Handles plugin registration, lifecycle execution, and output management\n */\n\nimport { promises as fs } from \"fs\";\nimport path from \"path\";\nimport { validateStacksAddress } from \"@stacks/transactions\";\nimport type {\n StacksCodegenPlugin,\n UserConfig,\n ResolvedConfig,\n GenerateContext,\n Logger,\n PluginUtils,\n GeneratedOutput,\n ProcessedContract,\n ContractConfig,\n HookResult,\n PluginExecutionContext,\n} from \"../types/plugin\";\n\n/**\n * Core plugin manager that orchestrates plugin execution\n */\nexport class PluginManager {\n private plugins: StacksCodegenPlugin[] = [];\n private logger: Logger;\n private utils: PluginUtils;\n private executionContext: PluginExecutionContext;\n\n constructor() {\n this.logger = this.createLogger();\n this.utils = this.createUtils();\n this.executionContext = {\n phase: \"config\",\n startTime: Date.now(),\n results: new Map(),\n };\n }\n\n /**\n * Register a plugin\n */\n register(plugin: StacksCodegenPlugin): void {\n // Validate plugin\n if (!plugin.name || !plugin.version) {\n throw new Error(\"Plugin must have a name and version\");\n }\n\n // Check for duplicate plugin names\n const existing = this.plugins.find((p) => p.name === plugin.name);\n if (existing) {\n throw new Error(\n `Plugin \"${plugin.name}\" is already registered (version ${existing.version})`\n );\n }\n\n this.plugins.push(plugin);\n this.logger.debug(`Registered plugin: ${plugin.name}@${plugin.version}`);\n }\n\n /**\n * Get all registered plugins\n */\n getPlugins(): StacksCodegenPlugin[] {\n return [...this.plugins];\n }\n\n /**\n * Transform user config through all plugins\n */\n async transformConfig(config: UserConfig): Promise<ResolvedConfig> {\n this.executionContext.phase = \"config\";\n let transformedConfig = { ...config };\n\n for (const plugin of this.plugins) {\n if (plugin.transformConfig) {\n this.executionContext.currentPlugin = plugin;\n try {\n const result = await plugin.transformConfig(transformedConfig);\n transformedConfig = result;\n this.recordHookResult(plugin.name, \"transformConfig\", {\n success: true,\n });\n } catch (error) {\n const err = error as Error;\n this.recordHookResult(plugin.name, \"transformConfig\", {\n success: false,\n error: err,\n });\n throw new Error(\n `Plugin \"${plugin.name}\" failed during config transformation: ${err.message}`\n );\n }\n }\n }\n\n // Add plugins array to resolved config\n const resolvedConfig: ResolvedConfig = {\n ...transformedConfig,\n plugins: this.plugins,\n };\n\n return resolvedConfig;\n }\n\n /**\n * Transform contracts through all plugins\n */\n async transformContracts(\n contracts: ContractConfig[],\n _config: ResolvedConfig\n ): Promise<ProcessedContract[]> {\n const processedContracts: ProcessedContract[] = [];\n\n for (let contract of contracts) {\n // Handle special case for Clarinet plugin contracts\n if ((contract as any)._clarinetSource && contract.abi) {\n // Convert Clarinet contracts directly to ProcessedContract format\n const address =\n typeof contract.address === \"string\" ? contract.address : \"\";\n const [contractAddress, contractName] = address.split(\".\");\n const processed: ProcessedContract = {\n name: contract.name || contractName,\n address: contractAddress,\n contractName: contractName,\n abi: contract.abi,\n source: \"local\" as const,\n metadata: { source: \"clarinet\" },\n };\n processedContracts.push(processed);\n continue;\n }\n\n // Handle direct file mode contracts (already have ABIs parsed)\n if ((contract as any)._directFile && contract.abi) {\n const address =\n typeof contract.address === \"string\" ? contract.address : \"\";\n const [contractAddress, contractName] = address.split(\".\");\n const processed: ProcessedContract = {\n name: contract.name || contractName,\n address: contractAddress,\n contractName: contractName,\n abi: contract.abi,\n source: \"local\" as const,\n metadata: { source: \"direct\" },\n };\n processedContracts.push(processed);\n continue;\n }\n\n // Transform through each plugin\n for (const plugin of this.plugins) {\n if (plugin.transformContract) {\n this.executionContext.currentPlugin = plugin;\n try {\n contract = await plugin.transformContract(contract);\n this.recordHookResult(plugin.name, \"transformContract\", {\n success: true,\n });\n } catch (error) {\n const err = error as Error;\n this.recordHookResult(plugin.name, \"transformContract\", {\n success: false,\n error: err,\n });\n this.logger.warn(\n `Plugin \"${plugin.name}\" failed to transform contract: ${err.message}`\n );\n }\n }\n }\n\n // Convert to ProcessedContract\n if (contract.abi) {\n const processed: ProcessedContract = {\n name: contract.name || \"unknown\",\n address:\n typeof contract.address === \"string\"\n ? contract.address.split(\".\")[0]\n : \"unknown\",\n contractName: contract.name || \"unknown\",\n abi: contract.abi,\n source: \"api\" as const, // Use \"api\" as default for plugin-processed contracts\n metadata: contract.metadata,\n };\n processedContracts.push(processed);\n }\n }\n\n return processedContracts;\n }\n\n /**\n * Execute lifecycle hooks\n */\n async executeHook(\n hookName: keyof StacksCodegenPlugin,\n context: any\n ): Promise<void> {\n for (const plugin of this.plugins) {\n const hook = plugin[hookName];\n if (typeof hook === \"function\") {\n this.executionContext.currentPlugin = plugin;\n try {\n await (hook as any).call(plugin, context);\n this.recordHookResult(plugin.name, hookName as string, {\n success: true,\n });\n } catch (error) {\n const err = error as Error;\n this.recordHookResult(plugin.name, hookName as string, {\n success: false,\n error: err,\n });\n this.logger.error(\n `Plugin \"${plugin.name}\" failed during ${hookName as string}: ${err.message}`\n );\n // Don't throw - allow other plugins to continue\n }\n }\n }\n }\n\n /**\n * Execute generation phase with full context\n */\n async executeGeneration(\n contracts: ProcessedContract[],\n config: ResolvedConfig\n ): Promise<Map<string, GeneratedOutput>> {\n this.executionContext.phase = \"generate\";\n const outputs = new Map<string, GeneratedOutput>();\n\n // Create generation context\n const context: GenerateContext = {\n config,\n logger: this.logger,\n utils: this.utils,\n contracts,\n outputs,\n augment: (outputKey: string, contractName: string, content: any) => {\n this.augmentOutput(outputs, outputKey, contractName, content);\n },\n addOutput: (key: string, output: GeneratedOutput) => {\n outputs.set(key, output);\n },\n };\n\n // Execute beforeGenerate hooks\n await this.executeHook(\"beforeGenerate\", context);\n\n // Execute generate hooks\n await this.executeHook(\"generate\", context);\n\n // Execute afterGenerate hooks\n await this.executeHook(\"afterGenerate\", context);\n\n return outputs;\n }\n\n /**\n * Transform outputs through plugins\n */\n async transformOutputs(\n outputs: Map<string, GeneratedOutput>\n ): Promise<Map<string, GeneratedOutput>> {\n this.executionContext.phase = \"output\";\n const transformedOutputs = new Map<string, GeneratedOutput>();\n\n for (const [key, output] of outputs) {\n let transformedContent = output.content;\n\n for (const plugin of this.plugins) {\n if (plugin.transformOutput) {\n this.executionContext.currentPlugin = plugin;\n try {\n transformedContent = await plugin.transformOutput(\n transformedContent,\n output.type || \"other\"\n );\n this.recordHookResult(plugin.name, \"transformOutput\", {\n success: true,\n });\n } catch (error) {\n const err = error as Error;\n this.recordHookResult(plugin.name, \"transformOutput\", {\n success: false,\n error: err,\n });\n this.logger.warn(\n `Plugin \"${plugin.name}\" failed to transform output: ${err.message}`\n );\n }\n }\n }\n\n transformedOutputs.set(key, {\n ...output,\n content: transformedContent,\n });\n }\n\n return transformedOutputs;\n }\n\n /**\n * Write outputs to disk\n */\n async writeOutputs(outputs: Map<string, GeneratedOutput>): Promise<void> {\n for (const [, output] of outputs) {\n try {\n const resolvedPath = path.resolve(process.cwd(), output.path);\n await this.utils.ensureDir(path.dirname(resolvedPath));\n await this.utils.writeFile(resolvedPath, output.content);\n // Don't log here - let the main command handle success messaging\n } catch (error) {\n const err = error as Error;\n this.logger.error(`Failed to write ${output.path}: ${err.message}`);\n throw err;\n }\n }\n }\n\n /**\n * Get execution results for debugging\n */\n getExecutionResults(): Map<string, HookResult[]> {\n return new Map(this.executionContext.results);\n }\n\n /**\n * Augment existing output with additional content\n */\n private augmentOutput(\n outputs: Map<string, GeneratedOutput>,\n outputKey: string,\n contractName: string,\n content: any\n ): void {\n const existing = outputs.get(outputKey);\n if (!existing) {\n this.logger.warn(`Cannot augment non-existent output: ${outputKey}`);\n return;\n }\n\n // Simple augmentation - append content\n // In a real implementation, this would be more sophisticated\n const augmentedContent = `${existing.content}\\n\\n// Augmented by plugin for ${contractName}\\n${JSON.stringify(content, null, 2)}`;\n\n outputs.set(outputKey, {\n ...existing,\n content: augmentedContent,\n });\n }\n\n /**\n * Record hook execution result\n */\n private recordHookResult(\n pluginName: string,\n hookName: string,\n result: Omit<HookResult, \"plugin\">\n ): void {\n const key = `${pluginName}:${hookName}`;\n const existing = this.executionContext.results.get(key) || [];\n existing.push({ ...result, plugin: pluginName });\n this.executionContext.results.set(key, existing);\n }\n\n /**\n * Create logger instance\n */\n private createLogger(): Logger {\n return {\n info: (message: string) => console.log(`ℹ️ ${message}`),\n warn: (message: string) => console.warn(`⚠️ ${message}`),\n error: (message: string) => console.error(`❌ ${message}`),\n debug: (message: string) => {\n if (process.env.DEBUG) {\n console.log(`🐛 ${message}`);\n }\n },\n success: (message: string) => console.log(`✅ ${message}`),\n };\n }\n\n /**\n * Create utils instance\n */\n private createUtils(): PluginUtils {\n return {\n toCamelCase: (str: string) => {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n },\n\n toKebabCase: (str: string) => {\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n },\n\n validateAddress: (address: string) => {\n return validateStacksAddress(address.split(\".\")[0]);\n },\n\n parseContractId: (contractId: string) => {\n const [address, contractName] = contractId.split(\".\");\n return { address, contractName };\n },\n\n formatCode: async (code: string) => {\n const { format } = await import(\"prettier\");\n return format(code, {\n parser: \"typescript\",\n singleQuote: true,\n semi: true,\n printWidth: 100,\n trailingComma: \"es5\",\n });\n },\n\n resolvePath: (relativePath: string) => {\n return path.resolve(process.cwd(), relativePath);\n },\n\n fileExists: async (filePath: string) => {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n },\n\n readFile: async (filePath: string) => {\n return fs.readFile(filePath, \"utf-8\");\n },\n\n writeFile: async (filePath: string, content: string) => {\n await fs.writeFile(filePath, content, \"utf-8\");\n },\n\n ensureDir: async (dirPath: string) => {\n await fs.mkdir(dirPath, { recursive: true });\n },\n };\n }\n}\n",
|
|
89
|
+
"import { promises as fs } from \"fs\";\nimport path from \"path\";\nimport { pathToFileURL } from \"url\";\nimport { createRequire } from \"module\";\nimport type { StacksConfig, ConfigDefiner } from \"../types/config\";\nimport type { ResolvedConfig } from \"../types/plugin\";\nimport { PluginManager } from \"../core/plugin-manager\";\n\n/**\n * Config file utilities\n */\n\nconst CONFIG_FILE_NAMES = [\n \"stacks.config.ts\",\n \"stacks.config\",\n \"stacks.config.mjs\",\n];\n\nexport async function findConfigFile(cwd: string): Promise<string | null> {\n for (const fileName of CONFIG_FILE_NAMES) {\n const filePath = path.join(cwd, fileName);\n try {\n await fs.access(filePath);\n return filePath;\n } catch {\n // File doesn't exist, continue\n }\n }\n return null;\n}\n\nexport async function loadConfig(configPath?: string): Promise<ResolvedConfig> {\n const cwd = process.cwd();\n\n const resolvedPath = configPath\n ? path.resolve(cwd, configPath)\n : await findConfigFile(cwd);\n\n if (!resolvedPath) {\n throw new Error(\n \"No config file found. Create a stacks.config.ts file or specify a path with --config\"\n );\n }\n\n let config: any;\n\n if (resolvedPath.endsWith(\".ts\")) {\n const code = await fs.readFile(resolvedPath, \"utf-8\");\n\n // Transform TypeScript to JavaScript, replacing the @secondlayer/cli import\n // For development/linked packages, we need to resolve to the actual package location\n // This will work both for published packages and local development\n let replacementPath: string;\n\n try {\n // Try to resolve @secondlayer/cli as if it were a normal package\n const require = createRequire(import.meta.url);\n const packagePath = require.resolve(\"@secondlayer/cli\");\n replacementPath = pathToFileURL(packagePath).href;\n } catch {\n // Fallback: resolve relative to current module (for development)\n const currentModuleDir = path.dirname(new URL(import.meta.url).pathname);\n const indexPath = path.resolve(currentModuleDir, \"../index\");\n replacementPath = pathToFileURL(indexPath).href;\n }\n\n const transformedCode = code.replace(\n /from\\s+[\"']@stacks\\/cli[\"']/g,\n `from '${replacementPath}'`\n );\n\n const { transformSync } = await import(\"esbuild\");\n const result = transformSync(transformedCode, {\n format: \"esm\",\n target: \"node18\",\n loader: \"ts\",\n });\n\n const tempPath = resolvedPath.replace(/\\.ts$/, \".mjs\");\n await fs.writeFile(tempPath, result.code);\n\n try {\n const fileUrl = pathToFileURL(tempPath).href;\n const module = await import(fileUrl);\n config = module.default;\n } finally {\n await fs.unlink(tempPath).catch(() => {});\n }\n } else {\n const fileUrl = pathToFileURL(resolvedPath).href;\n const module = await import(fileUrl);\n config = module.default;\n }\n\n if (!config) {\n throw new Error(\"Config file must export a default configuration\");\n }\n\n if (typeof config === \"function\") {\n config = config({} as StacksConfig);\n }\n\n validateConfig(config);\n\n // Process plugins if they exist\n const pluginManager = new PluginManager();\n\n if (config.plugins && Array.isArray(config.plugins)) {\n for (const plugin of config.plugins) {\n pluginManager.register(plugin);\n }\n }\n\n // Transform config through plugins\n const resolvedConfig = await pluginManager.transformConfig(config);\n\n return resolvedConfig;\n}\n\nexport function validateConfig(\n config: unknown\n): asserts config is StacksConfig {\n if (!config || typeof config !== \"object\") {\n throw new Error(\"Config must be an object\");\n }\n\n const c = config as any;\n\n // Contracts are optional now since plugins can provide them\n if (c.contracts && !Array.isArray(c.contracts)) {\n throw new Error(\"Config contracts must be an array\");\n }\n\n if (!c.out || typeof c.out !== \"string\") {\n throw new Error(\"Config out must be a string path\");\n }\n\n // Validate contracts if they exist\n if (c.contracts) {\n for (const contract of c.contracts) {\n if (!contract.address && !contract.source) {\n throw new Error(\"Each contract must have either an address or source\");\n }\n }\n }\n\n // Validate plugins if they exist\n if (c.plugins && !Array.isArray(c.plugins)) {\n throw new Error(\"Config plugins must be an array\");\n }\n}\n\nexport function defineConfig(config: StacksConfig): StacksConfig;\nexport function defineConfig(definer: ConfigDefiner): ConfigDefiner;\nexport function defineConfig(configOrDefiner: StacksConfig | ConfigDefiner) {\n return configOrDefiner;\n}\n",
|
|
90
|
+
"const typedArrayTypeNames = [\n 'Int8Array',\n 'Uint8Array',\n 'Uint8ClampedArray',\n 'Int16Array',\n 'Uint16Array',\n 'Int32Array',\n 'Uint32Array',\n 'Float32Array',\n 'Float64Array',\n 'BigInt64Array',\n 'BigUint64Array',\n];\nfunction isTypedArrayName(name) {\n return typedArrayTypeNames.includes(name);\n}\nconst objectTypeNames = [\n 'Function',\n 'Generator',\n 'AsyncGenerator',\n 'GeneratorFunction',\n 'AsyncGeneratorFunction',\n 'AsyncFunction',\n 'Observable',\n 'Array',\n 'Buffer',\n 'Blob',\n 'Object',\n 'RegExp',\n 'Date',\n 'Error',\n 'Map',\n 'Set',\n 'WeakMap',\n 'WeakSet',\n 'WeakRef',\n 'ArrayBuffer',\n 'SharedArrayBuffer',\n 'DataView',\n 'Promise',\n 'URL',\n 'FormData',\n 'URLSearchParams',\n 'HTMLElement',\n 'NaN',\n ...typedArrayTypeNames,\n];\nfunction isObjectTypeName(name) {\n return objectTypeNames.includes(name);\n}\nconst primitiveTypeNames = [\n 'null',\n 'undefined',\n 'string',\n 'number',\n 'bigint',\n 'boolean',\n 'symbol',\n];\nfunction isPrimitiveTypeName(name) {\n return primitiveTypeNames.includes(name);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isOfType(type) {\n return (value) => typeof value === type;\n}\nconst { toString } = Object.prototype;\nconst getObjectType = (value) => {\n const objectTypeName = toString.call(value).slice(8, -1);\n if (/HTML\\w+Element/.test(objectTypeName) && is.domElement(value)) {\n return 'HTMLElement';\n }\n if (isObjectTypeName(objectTypeName)) {\n return objectTypeName;\n }\n return undefined;\n};\nconst isObjectOfType = (type) => (value) => getObjectType(value) === type;\nfunction is(value) {\n if (value === null) {\n return 'null';\n }\n switch (typeof value) {\n case 'undefined': {\n return 'undefined';\n }\n case 'string': {\n return 'string';\n }\n case 'number': {\n return Number.isNaN(value) ? 'NaN' : 'number';\n }\n case 'boolean': {\n return 'boolean';\n }\n case 'function': {\n return 'Function';\n }\n case 'bigint': {\n return 'bigint';\n }\n case 'symbol': {\n return 'symbol';\n }\n default:\n }\n if (is.observable(value)) {\n return 'Observable';\n }\n if (is.array(value)) {\n return 'Array';\n }\n if (is.buffer(value)) {\n return 'Buffer';\n }\n const tagType = getObjectType(value);\n if (tagType) {\n return tagType;\n }\n if (value instanceof String || value instanceof Boolean || value instanceof Number) {\n throw new TypeError('Please don\\'t use object wrappers for primitive types');\n }\n return 'Object';\n}\nis.undefined = isOfType('undefined');\nis.string = isOfType('string');\nconst isNumberType = isOfType('number');\nis.number = (value) => isNumberType(value) && !is.nan(value);\nis.positiveNumber = (value) => is.number(value) && value > 0;\nis.negativeNumber = (value) => is.number(value) && value < 0;\nis.bigint = isOfType('bigint');\n// eslint-disable-next-line @typescript-eslint/ban-types\nis.function_ = isOfType('function');\n// eslint-disable-next-line @typescript-eslint/ban-types\nis.null_ = (value) => value === null;\nis.class_ = (value) => is.function_(value) && value.toString().startsWith('class ');\nis.boolean = (value) => value === true || value === false;\nis.symbol = isOfType('symbol');\nis.numericString = (value) => is.string(value) && !is.emptyStringOrWhitespace(value) && !Number.isNaN(Number(value));\nis.array = (value, assertion) => {\n if (!Array.isArray(value)) {\n return false;\n }\n if (!is.function_(assertion)) {\n return true;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return value.every(element => assertion(element));\n};\n// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\nis.buffer = (value) => value?.constructor?.isBuffer?.(value) ?? false;\nis.blob = (value) => isObjectOfType('Blob')(value);\nis.nullOrUndefined = (value) => is.null_(value) || is.undefined(value); // eslint-disable-line @typescript-eslint/ban-types\nis.object = (value) => !is.null_(value) && (typeof value === 'object' || is.function_(value)); // eslint-disable-line @typescript-eslint/ban-types\nis.iterable = (value) => is.function_(value?.[Symbol.iterator]);\nis.asyncIterable = (value) => is.function_(value?.[Symbol.asyncIterator]);\nis.generator = (value) => is.iterable(value) && is.function_(value?.next) && is.function_(value?.throw);\nis.asyncGenerator = (value) => is.asyncIterable(value) && is.function_(value.next) && is.function_(value.throw);\nis.nativePromise = (value) => isObjectOfType('Promise')(value);\nconst hasPromiseApi = (value) => is.function_(value?.then)\n && is.function_(value?.catch);\nis.promise = (value) => is.nativePromise(value) || hasPromiseApi(value);\nis.generatorFunction = isObjectOfType('GeneratorFunction');\nis.asyncGeneratorFunction = (value) => getObjectType(value) === 'AsyncGeneratorFunction';\nis.asyncFunction = (value) => getObjectType(value) === 'AsyncFunction';\n// eslint-disable-next-line no-prototype-builtins, @typescript-eslint/ban-types\nis.boundFunction = (value) => is.function_(value) && !value.hasOwnProperty('prototype');\nis.regExp = isObjectOfType('RegExp');\nis.date = isObjectOfType('Date');\nis.error = isObjectOfType('Error');\nis.map = (value) => isObjectOfType('Map')(value);\nis.set = (value) => isObjectOfType('Set')(value);\nis.weakMap = (value) => isObjectOfType('WeakMap')(value); // eslint-disable-line @typescript-eslint/ban-types\nis.weakSet = (value) => isObjectOfType('WeakSet')(value); // eslint-disable-line @typescript-eslint/ban-types\nis.weakRef = (value) => isObjectOfType('WeakRef')(value); // eslint-disable-line @typescript-eslint/ban-types\nis.int8Array = isObjectOfType('Int8Array');\nis.uint8Array = isObjectOfType('Uint8Array');\nis.uint8ClampedArray = isObjectOfType('Uint8ClampedArray');\nis.int16Array = isObjectOfType('Int16Array');\nis.uint16Array = isObjectOfType('Uint16Array');\nis.int32Array = isObjectOfType('Int32Array');\nis.uint32Array = isObjectOfType('Uint32Array');\nis.float32Array = isObjectOfType('Float32Array');\nis.float64Array = isObjectOfType('Float64Array');\nis.bigInt64Array = isObjectOfType('BigInt64Array');\nis.bigUint64Array = isObjectOfType('BigUint64Array');\nis.arrayBuffer = isObjectOfType('ArrayBuffer');\nis.sharedArrayBuffer = isObjectOfType('SharedArrayBuffer');\nis.dataView = isObjectOfType('DataView');\n// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\nis.enumCase = (value, targetEnum) => Object.values(targetEnum).includes(value);\nis.directInstanceOf = (instance, class_) => Object.getPrototypeOf(instance) === class_.prototype;\nis.urlInstance = (value) => isObjectOfType('URL')(value);\nis.urlString = (value) => {\n if (!is.string(value)) {\n return false;\n }\n try {\n new URL(value); // eslint-disable-line no-new\n return true;\n }\n catch {\n return false;\n }\n};\n// Example: `is.truthy = (value: unknown): value is (not false | not 0 | not '' | not undefined | not null) => Boolean(value);`\nis.truthy = (value) => Boolean(value); // eslint-disable-line unicorn/prefer-native-coercion-functions\n// Example: `is.falsy = (value: unknown): value is (not true | 0 | '' | undefined | null) => Boolean(value);`\nis.falsy = (value) => !value;\nis.nan = (value) => Number.isNaN(value);\nis.primitive = (value) => is.null_(value) || isPrimitiveTypeName(typeof value);\nis.integer = (value) => Number.isInteger(value);\nis.safeInteger = (value) => Number.isSafeInteger(value);\nis.plainObject = (value) => {\n // From: https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const prototype = Object.getPrototypeOf(value);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n};\nis.typedArray = (value) => isTypedArrayName(getObjectType(value));\nconst isValidLength = (value) => is.safeInteger(value) && value >= 0;\nis.arrayLike = (value) => !is.nullOrUndefined(value) && !is.function_(value) && isValidLength(value.length);\nis.tupleLike = (value, guards) => {\n if (is.array(guards) && is.array(value) && guards.length === value.length) {\n return guards.every((guard, index) => guard(value[index]));\n }\n return false;\n};\nis.inRange = (value, range) => {\n if (is.number(range)) {\n return value >= Math.min(0, range) && value <= Math.max(range, 0);\n }\n if (is.array(range) && range.length === 2) {\n return value >= Math.min(...range) && value <= Math.max(...range);\n }\n throw new TypeError(`Invalid range: ${JSON.stringify(range)}`);\n};\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst NODE_TYPE_ELEMENT = 1;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst DOM_PROPERTIES_TO_CHECK = [\n 'innerHTML',\n 'ownerDocument',\n 'style',\n 'attributes',\n 'nodeValue',\n];\nis.domElement = (value) => is.object(value)\n && value.nodeType === NODE_TYPE_ELEMENT\n && is.string(value.nodeName)\n && !is.plainObject(value)\n && DOM_PROPERTIES_TO_CHECK.every(property => property in value);\nis.observable = (value) => {\n if (!value) {\n return false;\n }\n // eslint-disable-next-line no-use-extend-native/no-use-extend-native, @typescript-eslint/no-unsafe-call\n if (value === value[Symbol.observable]?.()) {\n return true;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (value === value['@@observable']?.()) {\n return true;\n }\n return false;\n};\nis.nodeStream = (value) => is.object(value) && is.function_(value.pipe) && !is.observable(value);\nis.infinite = (value) => value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY;\nconst isAbsoluteMod2 = (remainder) => (value) => is.integer(value) && Math.abs(value % 2) === remainder;\nis.evenInteger = isAbsoluteMod2(0);\nis.oddInteger = isAbsoluteMod2(1);\nis.emptyArray = (value) => is.array(value) && value.length === 0;\nis.nonEmptyArray = (value) => is.array(value) && value.length > 0;\nis.emptyString = (value) => is.string(value) && value.length === 0;\nconst isWhiteSpaceString = (value) => is.string(value) && !/\\S/.test(value);\nis.emptyStringOrWhitespace = (value) => is.emptyString(value) || isWhiteSpaceString(value);\n// TODO: Use `not ''` when the `not` operator is available.\nis.nonEmptyString = (value) => is.string(value) && value.length > 0;\n// TODO: Use `not ''` when the `not` operator is available.\nis.nonEmptyStringAndNotWhitespace = (value) => is.string(value) && !is.emptyStringOrWhitespace(value);\n// eslint-disable-next-line unicorn/no-array-callback-reference\nis.emptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length === 0;\n// TODO: Use `not` operator here to remove `Map` and `Set` from type guard:\n// - https://github.com/Microsoft/TypeScript/pull/29317\n// eslint-disable-next-line unicorn/no-array-callback-reference\nis.nonEmptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length > 0;\nis.emptySet = (value) => is.set(value) && value.size === 0;\nis.nonEmptySet = (value) => is.set(value) && value.size > 0;\n// eslint-disable-next-line unicorn/no-array-callback-reference\nis.emptyMap = (value) => is.map(value) && value.size === 0;\n// eslint-disable-next-line unicorn/no-array-callback-reference\nis.nonEmptyMap = (value) => is.map(value) && value.size > 0;\n// `PropertyKey` is any value that can be used as an object key (string, number, or symbol)\nis.propertyKey = (value) => is.any([is.string, is.number, is.symbol], value);\nis.formData = (value) => isObjectOfType('FormData')(value);\nis.urlSearchParams = (value) => isObjectOfType('URLSearchParams')(value);\nconst predicateOnArray = (method, predicate, values) => {\n if (!is.function_(predicate)) {\n throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`);\n }\n if (values.length === 0) {\n throw new TypeError('Invalid number of values');\n }\n return method.call(values, predicate);\n};\nis.any = (predicate, ...values) => {\n const predicates = is.array(predicate) ? predicate : [predicate];\n return predicates.some(singlePredicate => predicateOnArray(Array.prototype.some, singlePredicate, values));\n};\nis.all = (predicate, ...values) => predicateOnArray(Array.prototype.every, predicate, values);\nconst assertType = (condition, description, value, options = {}) => {\n if (!condition) {\n const { multipleValues } = options;\n const valuesMessage = multipleValues\n ? `received values of types ${[\n ...new Set(value.map(singleValue => `\\`${is(singleValue)}\\``)),\n ].join(', ')}`\n : `received value of type \\`${is(value)}\\``;\n throw new TypeError(`Expected value which is \\`${description}\\`, ${valuesMessage}.`);\n }\n};\n/* eslint-disable @typescript-eslint/no-confusing-void-expression */\nexport const assert = {\n // Unknowns.\n undefined: (value) => assertType(is.undefined(value), 'undefined', value),\n string: (value) => assertType(is.string(value), 'string', value),\n number: (value) => assertType(is.number(value), 'number', value),\n positiveNumber: (value) => assertType(is.positiveNumber(value), \"positive number\" /* AssertionTypeDescription.positiveNumber */, value),\n negativeNumber: (value) => assertType(is.negativeNumber(value), \"negative number\" /* AssertionTypeDescription.negativeNumber */, value),\n bigint: (value) => assertType(is.bigint(value), 'bigint', value),\n // eslint-disable-next-line @typescript-eslint/ban-types\n function_: (value) => assertType(is.function_(value), 'Function', value),\n null_: (value) => assertType(is.null_(value), 'null', value),\n class_: (value) => assertType(is.class_(value), \"Class\" /* AssertionTypeDescription.class_ */, value),\n boolean: (value) => assertType(is.boolean(value), 'boolean', value),\n symbol: (value) => assertType(is.symbol(value), 'symbol', value),\n numericString: (value) => assertType(is.numericString(value), \"string with a number\" /* AssertionTypeDescription.numericString */, value),\n array: (value, assertion) => {\n const assert = assertType;\n assert(is.array(value), 'Array', value);\n if (assertion) {\n // eslint-disable-next-line unicorn/no-array-for-each, unicorn/no-array-callback-reference\n value.forEach(assertion);\n }\n },\n buffer: (value) => assertType(is.buffer(value), 'Buffer', value),\n blob: (value) => assertType(is.blob(value), 'Blob', value),\n nullOrUndefined: (value) => assertType(is.nullOrUndefined(value), \"null or undefined\" /* AssertionTypeDescription.nullOrUndefined */, value),\n object: (value) => assertType(is.object(value), 'Object', value),\n iterable: (value) => assertType(is.iterable(value), \"Iterable\" /* AssertionTypeDescription.iterable */, value),\n asyncIterable: (value) => assertType(is.asyncIterable(value), \"AsyncIterable\" /* AssertionTypeDescription.asyncIterable */, value),\n generator: (value) => assertType(is.generator(value), 'Generator', value),\n asyncGenerator: (value) => assertType(is.asyncGenerator(value), 'AsyncGenerator', value),\n nativePromise: (value) => assertType(is.nativePromise(value), \"native Promise\" /* AssertionTypeDescription.nativePromise */, value),\n promise: (value) => assertType(is.promise(value), 'Promise', value),\n generatorFunction: (value) => assertType(is.generatorFunction(value), 'GeneratorFunction', value),\n asyncGeneratorFunction: (value) => assertType(is.asyncGeneratorFunction(value), 'AsyncGeneratorFunction', value),\n // eslint-disable-next-line @typescript-eslint/ban-types\n asyncFunction: (value) => assertType(is.asyncFunction(value), 'AsyncFunction', value),\n // eslint-disable-next-line @typescript-eslint/ban-types\n boundFunction: (value) => assertType(is.boundFunction(value), 'Function', value),\n regExp: (value) => assertType(is.regExp(value), 'RegExp', value),\n date: (value) => assertType(is.date(value), 'Date', value),\n error: (value) => assertType(is.error(value), 'Error', value),\n map: (value) => assertType(is.map(value), 'Map', value),\n set: (value) => assertType(is.set(value), 'Set', value),\n weakMap: (value) => assertType(is.weakMap(value), 'WeakMap', value),\n weakSet: (value) => assertType(is.weakSet(value), 'WeakSet', value),\n weakRef: (value) => assertType(is.weakRef(value), 'WeakRef', value),\n int8Array: (value) => assertType(is.int8Array(value), 'Int8Array', value),\n uint8Array: (value) => assertType(is.uint8Array(value), 'Uint8Array', value),\n uint8ClampedArray: (value) => assertType(is.uint8ClampedArray(value), 'Uint8ClampedArray', value),\n int16Array: (value) => assertType(is.int16Array(value), 'Int16Array', value),\n uint16Array: (value) => assertType(is.uint16Array(value), 'Uint16Array', value),\n int32Array: (value) => assertType(is.int32Array(value), 'Int32Array', value),\n uint32Array: (value) => assertType(is.uint32Array(value), 'Uint32Array', value),\n float32Array: (value) => assertType(is.float32Array(value), 'Float32Array', value),\n float64Array: (value) => assertType(is.float64Array(value), 'Float64Array', value),\n bigInt64Array: (value) => assertType(is.bigInt64Array(value), 'BigInt64Array', value),\n bigUint64Array: (value) => assertType(is.bigUint64Array(value), 'BigUint64Array', value),\n arrayBuffer: (value) => assertType(is.arrayBuffer(value), 'ArrayBuffer', value),\n sharedArrayBuffer: (value) => assertType(is.sharedArrayBuffer(value), 'SharedArrayBuffer', value),\n dataView: (value) => assertType(is.dataView(value), 'DataView', value),\n enumCase: (value, targetEnum) => assertType(is.enumCase(value, targetEnum), 'EnumCase', value),\n urlInstance: (value) => assertType(is.urlInstance(value), 'URL', value),\n urlString: (value) => assertType(is.urlString(value), \"string with a URL\" /* AssertionTypeDescription.urlString */, value),\n truthy: (value) => assertType(is.truthy(value), \"truthy\" /* AssertionTypeDescription.truthy */, value),\n falsy: (value) => assertType(is.falsy(value), \"falsy\" /* AssertionTypeDescription.falsy */, value),\n nan: (value) => assertType(is.nan(value), \"NaN\" /* AssertionTypeDescription.nan */, value),\n primitive: (value) => assertType(is.primitive(value), \"primitive\" /* AssertionTypeDescription.primitive */, value),\n integer: (value) => assertType(is.integer(value), \"integer\" /* AssertionTypeDescription.integer */, value),\n safeInteger: (value) => assertType(is.safeInteger(value), \"integer\" /* AssertionTypeDescription.safeInteger */, value),\n plainObject: (value) => assertType(is.plainObject(value), \"plain object\" /* AssertionTypeDescription.plainObject */, value),\n typedArray: (value) => assertType(is.typedArray(value), \"TypedArray\" /* AssertionTypeDescription.typedArray */, value),\n arrayLike: (value) => assertType(is.arrayLike(value), \"array-like\" /* AssertionTypeDescription.arrayLike */, value),\n tupleLike: (value, guards) => assertType(is.tupleLike(value, guards), \"tuple-like\" /* AssertionTypeDescription.tupleLike */, value),\n domElement: (value) => assertType(is.domElement(value), \"HTMLElement\" /* AssertionTypeDescription.domElement */, value),\n observable: (value) => assertType(is.observable(value), 'Observable', value),\n nodeStream: (value) => assertType(is.nodeStream(value), \"Node.js Stream\" /* AssertionTypeDescription.nodeStream */, value),\n infinite: (value) => assertType(is.infinite(value), \"infinite number\" /* AssertionTypeDescription.infinite */, value),\n emptyArray: (value) => assertType(is.emptyArray(value), \"empty array\" /* AssertionTypeDescription.emptyArray */, value),\n nonEmptyArray: (value) => assertType(is.nonEmptyArray(value), \"non-empty array\" /* AssertionTypeDescription.nonEmptyArray */, value),\n emptyString: (value) => assertType(is.emptyString(value), \"empty string\" /* AssertionTypeDescription.emptyString */, value),\n emptyStringOrWhitespace: (value) => assertType(is.emptyStringOrWhitespace(value), \"empty string or whitespace\" /* AssertionTypeDescription.emptyStringOrWhitespace */, value),\n nonEmptyString: (value) => assertType(is.nonEmptyString(value), \"non-empty string\" /* AssertionTypeDescription.nonEmptyString */, value),\n nonEmptyStringAndNotWhitespace: (value) => assertType(is.nonEmptyStringAndNotWhitespace(value), \"non-empty string and not whitespace\" /* AssertionTypeDescription.nonEmptyStringAndNotWhitespace */, value),\n emptyObject: (value) => assertType(is.emptyObject(value), \"empty object\" /* AssertionTypeDescription.emptyObject */, value),\n nonEmptyObject: (value) => assertType(is.nonEmptyObject(value), \"non-empty object\" /* AssertionTypeDescription.nonEmptyObject */, value),\n emptySet: (value) => assertType(is.emptySet(value), \"empty set\" /* AssertionTypeDescription.emptySet */, value),\n nonEmptySet: (value) => assertType(is.nonEmptySet(value), \"non-empty set\" /* AssertionTypeDescription.nonEmptySet */, value),\n emptyMap: (value) => assertType(is.emptyMap(value), \"empty map\" /* AssertionTypeDescription.emptyMap */, value),\n nonEmptyMap: (value) => assertType(is.nonEmptyMap(value), \"non-empty map\" /* AssertionTypeDescription.nonEmptyMap */, value),\n propertyKey: (value) => assertType(is.propertyKey(value), 'PropertyKey', value),\n formData: (value) => assertType(is.formData(value), 'FormData', value),\n urlSearchParams: (value) => assertType(is.urlSearchParams(value), 'URLSearchParams', value),\n // Numbers.\n evenInteger: (value) => assertType(is.evenInteger(value), \"even integer\" /* AssertionTypeDescription.evenInteger */, value),\n oddInteger: (value) => assertType(is.oddInteger(value), \"odd integer\" /* AssertionTypeDescription.oddInteger */, value),\n // Two arguments.\n directInstanceOf: (instance, class_) => assertType(is.directInstanceOf(instance, class_), \"T\" /* AssertionTypeDescription.directInstanceOf */, instance),\n inRange: (value, range) => assertType(is.inRange(value, range), \"in range\" /* AssertionTypeDescription.inRange */, value),\n // Variadic functions.\n any: (predicate, ...values) => assertType(is.any(predicate, ...values), \"predicate returns truthy for any value\" /* AssertionTypeDescription.any */, values, { multipleValues: true }),\n all: (predicate, ...values) => assertType(is.all(predicate, ...values), \"predicate returns truthy for all values\" /* AssertionTypeDescription.all */, values, { multipleValues: true }),\n};\n/* eslint-enable @typescript-eslint/no-confusing-void-expression */\n// Some few keywords are reserved, but we'll populate them for Node.js users\n// See https://github.com/Microsoft/TypeScript/issues/2536\nObject.defineProperties(is, {\n class: {\n value: is.class_,\n },\n function: {\n value: is.function_,\n },\n null: {\n value: is.null_,\n },\n});\nObject.defineProperties(assert, {\n class: {\n value: assert.class_,\n },\n function: {\n value: assert.function_,\n },\n null: {\n value: assert.null_,\n },\n});\nexport default is;\n",
|
|
91
|
+
"export class CancelError extends Error {\n\tconstructor(reason) {\n\t\tsuper(reason || 'Promise was canceled');\n\t\tthis.name = 'CancelError';\n\t}\n\n\tget isCanceled() {\n\t\treturn true;\n\t}\n}\n\n// TODO: Use private class fields when ESLint 8 is out.\n\nexport default class PCancelable {\n\tstatic fn(userFunction) {\n\t\treturn (...arguments_) => {\n\t\t\treturn new PCancelable((resolve, reject, onCancel) => {\n\t\t\t\targuments_.push(onCancel);\n\t\t\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\t\t\tuserFunction(...arguments_).then(resolve, reject);\n\t\t\t});\n\t\t};\n\t}\n\n\tconstructor(executor) {\n\t\tthis._cancelHandlers = [];\n\t\tthis._isPending = true;\n\t\tthis._isCanceled = false;\n\t\tthis._rejectOnCancel = true;\n\n\t\tthis._promise = new Promise((resolve, reject) => {\n\t\t\tthis._reject = reject;\n\n\t\t\tconst onResolve = value => {\n\t\t\t\tif (!this._isCanceled || !onCancel.shouldReject) {\n\t\t\t\t\tthis._isPending = false;\n\t\t\t\t\tresolve(value);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst onReject = error => {\n\t\t\t\tthis._isPending = false;\n\t\t\t\treject(error);\n\t\t\t};\n\n\t\t\tconst onCancel = handler => {\n\t\t\t\tif (!this._isPending) {\n\t\t\t\t\tthrow new Error('The `onCancel` handler was attached after the promise settled.');\n\t\t\t\t}\n\n\t\t\t\tthis._cancelHandlers.push(handler);\n\t\t\t};\n\n\t\t\tObject.defineProperties(onCancel, {\n\t\t\t\tshouldReject: {\n\t\t\t\t\tget: () => this._rejectOnCancel,\n\t\t\t\t\tset: boolean => {\n\t\t\t\t\t\tthis._rejectOnCancel = boolean;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\texecutor(onResolve, onReject, onCancel);\n\t\t});\n\t}\n\n\tthen(onFulfilled, onRejected) {\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\treturn this._promise.then(onFulfilled, onRejected);\n\t}\n\n\tcatch(onRejected) {\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\treturn this._promise.catch(onRejected);\n\t}\n\n\tfinally(onFinally) {\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\treturn this._promise.finally(onFinally);\n\t}\n\n\tcancel(reason) {\n\t\tif (!this._isPending || this._isCanceled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isCanceled = true;\n\n\t\tif (this._cancelHandlers.length > 0) {\n\t\t\ttry {\n\t\t\t\tfor (const handler of this._cancelHandlers) {\n\t\t\t\t\thandler();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis._reject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (this._rejectOnCancel) {\n\t\t\tthis._reject(new CancelError(reason));\n\t\t}\n\t}\n\n\tget isCanceled() {\n\t\treturn this._isCanceled;\n\t}\n}\n\nObject.setPrototypeOf(PCancelable.prototype, Promise.prototype);\n",
|
|
92
|
+
"import is from '@sindresorhus/is';\n// A hacky check to prevent circular references.\nfunction isRequest(x) {\n return is.object(x) && '_onResponse' in x;\n}\n/**\nAn error to be thrown when a request fails.\nContains a `code` property with error class code, like `ECONNREFUSED`.\n*/\nexport class RequestError extends Error {\n constructor(message, error, self) {\n super(message);\n Object.defineProperty(this, \"input\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"stack\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"response\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"request\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"timings\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Error.captureStackTrace(this, this.constructor);\n this.name = 'RequestError';\n this.code = error.code ?? 'ERR_GOT_REQUEST_ERROR';\n this.input = error.input;\n if (isRequest(self)) {\n Object.defineProperty(this, 'request', {\n enumerable: false,\n value: self,\n });\n Object.defineProperty(this, 'response', {\n enumerable: false,\n value: self.response,\n });\n this.options = self.options;\n }\n else {\n this.options = self;\n }\n this.timings = this.request?.timings;\n // Recover the original stacktrace\n if (is.string(error.stack) && is.string(this.stack)) {\n const indexOfMessage = this.stack.indexOf(this.message) + this.message.length;\n const thisStackTrace = this.stack.slice(indexOfMessage).split('\\n').reverse();\n const errorStackTrace = error.stack.slice(error.stack.indexOf(error.message) + error.message.length).split('\\n').reverse();\n // Remove duplicated traces\n while (errorStackTrace.length > 0 && errorStackTrace[0] === thisStackTrace[0]) {\n thisStackTrace.shift();\n }\n this.stack = `${this.stack.slice(0, indexOfMessage)}${thisStackTrace.reverse().join('\\n')}${errorStackTrace.reverse().join('\\n')}`;\n }\n }\n}\n/**\nAn error to be thrown when the server redirects you more than ten times.\nIncludes a `response` property.\n*/\nexport class MaxRedirectsError extends RequestError {\n constructor(request) {\n super(`Redirected ${request.options.maxRedirects} times. Aborting.`, {}, request);\n this.name = 'MaxRedirectsError';\n this.code = 'ERR_TOO_MANY_REDIRECTS';\n }\n}\n/**\nAn error to be thrown when the server response code is not 2xx nor 3xx if `options.followRedirect` is `true`, but always except for 304.\nIncludes a `response` property.\n*/\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class HTTPError extends RequestError {\n constructor(response) {\n super(`Response code ${response.statusCode} (${response.statusMessage})`, {}, response.request);\n this.name = 'HTTPError';\n this.code = 'ERR_NON_2XX_3XX_RESPONSE';\n }\n}\n/**\nAn error to be thrown when a cache method fails.\nFor example, if the database goes down or there's a filesystem error.\n*/\nexport class CacheError extends RequestError {\n constructor(error, request) {\n super(error.message, error, request);\n this.name = 'CacheError';\n this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_CACHE_ACCESS' : this.code;\n }\n}\n/**\nAn error to be thrown when the request body is a stream and an error occurs while reading from that stream.\n*/\nexport class UploadError extends RequestError {\n constructor(error, request) {\n super(error.message, error, request);\n this.name = 'UploadError';\n this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_UPLOAD' : this.code;\n }\n}\n/**\nAn error to be thrown when the request is aborted due to a timeout.\nIncludes an `event` and `timings` property.\n*/\nexport class TimeoutError extends RequestError {\n constructor(error, timings, request) {\n super(error.message, error, request);\n Object.defineProperty(this, \"timings\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"event\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.name = 'TimeoutError';\n this.event = error.event;\n this.timings = timings;\n }\n}\n/**\nAn error to be thrown when reading from response stream fails.\n*/\nexport class ReadError extends RequestError {\n constructor(error, request) {\n super(error.message, error, request);\n this.name = 'ReadError';\n this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_READING_RESPONSE_STREAM' : this.code;\n }\n}\n/**\nAn error which always triggers a new retry when thrown.\n*/\nexport class RetryError extends RequestError {\n constructor(request) {\n super('Retrying', {}, request);\n this.name = 'RetryError';\n this.code = 'ERR_RETRYING';\n }\n}\n/**\nAn error to be thrown when the request is aborted by AbortController.\n*/\nexport class AbortError extends RequestError {\n constructor(request) {\n super('This operation was aborted.', {}, request);\n this.code = 'ERR_ABORTED';\n this.name = 'AbortError';\n }\n}\n",
|
|
93
|
+
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction isTLSSocket(socket) {\n return socket.encrypted;\n}\nconst deferToConnect = (socket, fn) => {\n let listeners;\n if (typeof fn === 'function') {\n const connect = fn;\n listeners = { connect };\n }\n else {\n listeners = fn;\n }\n const hasConnectListener = typeof listeners.connect === 'function';\n const hasSecureConnectListener = typeof listeners.secureConnect === 'function';\n const hasCloseListener = typeof listeners.close === 'function';\n const onConnect = () => {\n if (hasConnectListener) {\n listeners.connect();\n }\n if (isTLSSocket(socket) && hasSecureConnectListener) {\n if (socket.authorized) {\n listeners.secureConnect();\n }\n else if (!socket.authorizationError) {\n socket.once('secureConnect', listeners.secureConnect);\n }\n }\n if (hasCloseListener) {\n socket.once('close', listeners.close);\n }\n };\n if (socket.writable && !socket.connecting) {\n onConnect();\n }\n else if (socket.connecting) {\n socket.once('connect', onConnect);\n }\n else if (socket.destroyed && hasCloseListener) {\n listeners.close(socket._hadError);\n }\n};\nexports.default = deferToConnect;\n// For CommonJS default export support\nmodule.exports = deferToConnect;\nmodule.exports.default = deferToConnect;\n",
|
|
94
|
+
"import { errorMonitor } from 'events';\nimport { types } from 'util';\nimport deferToConnect from 'defer-to-connect';\nconst timer = (request) => {\n if (request.timings) {\n return request.timings;\n }\n const timings = {\n start: Date.now(),\n socket: undefined,\n lookup: undefined,\n connect: undefined,\n secureConnect: undefined,\n upload: undefined,\n response: undefined,\n end: undefined,\n error: undefined,\n abort: undefined,\n phases: {\n wait: undefined,\n dns: undefined,\n tcp: undefined,\n tls: undefined,\n request: undefined,\n firstByte: undefined,\n download: undefined,\n total: undefined,\n },\n };\n request.timings = timings;\n const handleError = (origin) => {\n origin.once(errorMonitor, () => {\n timings.error = Date.now();\n timings.phases.total = timings.error - timings.start;\n });\n };\n handleError(request);\n const onAbort = () => {\n timings.abort = Date.now();\n timings.phases.total = timings.abort - timings.start;\n };\n request.prependOnceListener('abort', onAbort);\n const onSocket = (socket) => {\n timings.socket = Date.now();\n timings.phases.wait = timings.socket - timings.start;\n if (types.isProxy(socket)) {\n return;\n }\n const lookupListener = () => {\n timings.lookup = Date.now();\n timings.phases.dns = timings.lookup - timings.socket;\n };\n socket.prependOnceListener('lookup', lookupListener);\n deferToConnect(socket, {\n connect: () => {\n timings.connect = Date.now();\n if (timings.lookup === undefined) {\n socket.removeListener('lookup', lookupListener);\n timings.lookup = timings.connect;\n timings.phases.dns = timings.lookup - timings.socket;\n }\n timings.phases.tcp = timings.connect - timings.lookup;\n },\n secureConnect: () => {\n timings.secureConnect = Date.now();\n timings.phases.tls = timings.secureConnect - timings.connect;\n },\n });\n };\n if (request.socket) {\n onSocket(request.socket);\n }\n else {\n request.prependOnceListener('socket', onSocket);\n }\n const onUpload = () => {\n timings.upload = Date.now();\n timings.phases.request = timings.upload - (timings.secureConnect ?? timings.connect);\n };\n if (request.writableFinished) {\n onUpload();\n }\n else {\n request.prependOnceListener('finish', onUpload);\n }\n request.prependOnceListener('response', (response) => {\n timings.response = Date.now();\n timings.phases.firstByte = timings.response - timings.upload;\n response.timings = timings;\n handleError(response);\n response.prependOnceListener('end', () => {\n request.off('abort', onAbort);\n response.off('aborted', onAbort);\n if (timings.phases.total) {\n // Aborted or errored\n return;\n }\n timings.end = Date.now();\n timings.phases.download = timings.end - timings.response;\n timings.phases.total = timings.end - timings.start;\n });\n response.prependOnceListener('aborted', onAbort);\n });\n return timings;\n};\nexport default timer;\n",
|
|
95
|
+
"// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\nconst DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';\nconst DATA_URL_DEFAULT_CHARSET = 'us-ascii';\n\nconst testParameter = (name, filters) => filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name);\n\nconst supportedProtocols = new Set([\n\t'https:',\n\t'http:',\n\t'file:',\n]);\n\nconst hasCustomProtocol = urlString => {\n\ttry {\n\t\tconst {protocol} = new URL(urlString);\n\n\t\treturn protocol.endsWith(':')\n\t\t\t&& !protocol.includes('.')\n\t\t\t&& !supportedProtocols.has(protocol);\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nconst normalizeDataURL = (urlString, {stripHash}) => {\n\tconst match = /^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(urlString);\n\n\tif (!match) {\n\t\tthrow new Error(`Invalid URL: ${urlString}`);\n\t}\n\n\tlet {type, data, hash} = match.groups;\n\tconst mediaType = type.split(';');\n\thash = stripHash ? '' : hash;\n\n\tlet isBase64 = false;\n\tif (mediaType[mediaType.length - 1] === 'base64') {\n\t\tmediaType.pop();\n\t\tisBase64 = true;\n\t}\n\n\t// Lowercase MIME type\n\tconst mimeType = mediaType.shift()?.toLowerCase() ?? '';\n\tconst attributes = mediaType\n\t\t.map(attribute => {\n\t\t\tlet [key, value = ''] = attribute.split('=').map(string => string.trim());\n\n\t\t\t// Lowercase `charset`\n\t\t\tif (key === 'charset') {\n\t\t\t\tvalue = value.toLowerCase();\n\n\t\t\t\tif (value === DATA_URL_DEFAULT_CHARSET) {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn `${key}${value ? `=${value}` : ''}`;\n\t\t})\n\t\t.filter(Boolean);\n\n\tconst normalizedMediaType = [\n\t\t...attributes,\n\t];\n\n\tif (isBase64) {\n\t\tnormalizedMediaType.push('base64');\n\t}\n\n\tif (normalizedMediaType.length > 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {\n\t\tnormalizedMediaType.unshift(mimeType);\n\t}\n\n\treturn `data:${normalizedMediaType.join(';')},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ''}`;\n};\n\nexport default function normalizeUrl(urlString, options) {\n\toptions = {\n\t\tdefaultProtocol: 'http',\n\t\tnormalizeProtocol: true,\n\t\tforceHttp: false,\n\t\tforceHttps: false,\n\t\tstripAuthentication: true,\n\t\tstripHash: false,\n\t\tstripTextFragment: true,\n\t\tstripWWW: true,\n\t\tremoveQueryParameters: [/^utm_\\w+/i],\n\t\tremoveTrailingSlash: true,\n\t\tremoveSingleSlash: true,\n\t\tremoveDirectoryIndex: false,\n\t\tremoveExplicitPort: false,\n\t\tsortQueryParameters: true,\n\t\tremovePath: false,\n\t\ttransformPath: false,\n\t\t...options,\n\t};\n\n\t// Legacy: Append `:` to the protocol if missing.\n\tif (typeof options.defaultProtocol === 'string' && !options.defaultProtocol.endsWith(':')) {\n\t\toptions.defaultProtocol = `${options.defaultProtocol}:`;\n\t}\n\n\turlString = urlString.trim();\n\n\t// Data URL\n\tif (/^data:/i.test(urlString)) {\n\t\treturn normalizeDataURL(urlString, options);\n\t}\n\n\tif (hasCustomProtocol(urlString)) {\n\t\treturn urlString;\n\t}\n\n\tconst hasRelativeProtocol = urlString.startsWith('//');\n\tconst isRelativeUrl = !hasRelativeProtocol && /^\\.*\\//.test(urlString);\n\n\t// Prepend protocol\n\tif (!isRelativeUrl) {\n\t\turlString = urlString.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//, options.defaultProtocol);\n\t}\n\n\tconst urlObject = new URL(urlString);\n\n\tif (options.forceHttp && options.forceHttps) {\n\t\tthrow new Error('The `forceHttp` and `forceHttps` options cannot be used together');\n\t}\n\n\tif (options.forceHttp && urlObject.protocol === 'https:') {\n\t\turlObject.protocol = 'http:';\n\t}\n\n\tif (options.forceHttps && urlObject.protocol === 'http:') {\n\t\turlObject.protocol = 'https:';\n\t}\n\n\t// Remove auth\n\tif (options.stripAuthentication) {\n\t\turlObject.username = '';\n\t\turlObject.password = '';\n\t}\n\n\t// Remove hash\n\tif (options.stripHash) {\n\t\turlObject.hash = '';\n\t} else if (options.stripTextFragment) {\n\t\turlObject.hash = urlObject.hash.replace(/#?:~:text.*?$/i, '');\n\t}\n\n\t// Remove duplicate slashes if not preceded by a protocol\n\t// NOTE: This could be implemented using a single negative lookbehind\n\t// regex, but we avoid that to maintain compatibility with older js engines\n\t// which do not have support for that feature.\n\tif (urlObject.pathname) {\n\t\t// TODO: Replace everything below with `urlObject.pathname = urlObject.pathname.replace(/(?<!\\b[a-z][a-z\\d+\\-.]{1,50}:)\\/{2,}/g, '/');` when Safari supports negative lookbehind.\n\n\t\t// Split the string by occurrences of this protocol regex, and perform\n\t\t// duplicate-slash replacement on the strings between those occurrences\n\t\t// (if any).\n\t\tconst protocolRegex = /\\b[a-z][a-z\\d+\\-.]{1,50}:\\/\\//g;\n\n\t\tlet lastIndex = 0;\n\t\tlet result = '';\n\t\tfor (;;) {\n\t\t\tconst match = protocolRegex.exec(urlObject.pathname);\n\t\t\tif (!match) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst protocol = match[0];\n\t\t\tconst protocolAtIndex = match.index;\n\t\t\tconst intermediate = urlObject.pathname.slice(lastIndex, protocolAtIndex);\n\n\t\t\tresult += intermediate.replace(/\\/{2,}/g, '/');\n\t\t\tresult += protocol;\n\t\t\tlastIndex = protocolAtIndex + protocol.length;\n\t\t}\n\n\t\tconst remnant = urlObject.pathname.slice(lastIndex, urlObject.pathname.length);\n\t\tresult += remnant.replace(/\\/{2,}/g, '/');\n\n\t\turlObject.pathname = result;\n\t}\n\n\t// Decode URI octets\n\tif (urlObject.pathname) {\n\t\ttry {\n\t\t\turlObject.pathname = decodeURI(urlObject.pathname).replace(/\\\\/g, '%5C');\n\t\t} catch {}\n\t}\n\n\t// Remove directory index\n\tif (options.removeDirectoryIndex === true) {\n\t\toptions.removeDirectoryIndex = [/^index\\.[a-z]+$/];\n\t}\n\n\tif (Array.isArray(options.removeDirectoryIndex) && options.removeDirectoryIndex.length > 0) {\n\t\tlet pathComponents = urlObject.pathname.split('/');\n\t\tconst lastComponent = pathComponents[pathComponents.length - 1];\n\n\t\tif (testParameter(lastComponent, options.removeDirectoryIndex)) {\n\t\t\tpathComponents = pathComponents.slice(0, -1);\n\t\t\turlObject.pathname = pathComponents.slice(1).join('/') + '/';\n\t\t}\n\t}\n\n\t// Remove path\n\tif (options.removePath) {\n\t\turlObject.pathname = '/';\n\t}\n\n\t// Transform path components\n\tif (options.transformPath && typeof options.transformPath === 'function') {\n\t\tconst pathComponents = urlObject.pathname.split('/').filter(Boolean);\n\t\tconst newComponents = options.transformPath(pathComponents);\n\t\turlObject.pathname = newComponents?.length > 0 ? `/${newComponents.join('/')}` : '/';\n\t}\n\n\tif (urlObject.hostname) {\n\t\t// Remove trailing dot\n\t\turlObject.hostname = urlObject.hostname.replace(/\\.$/, '');\n\n\t\t// Remove `www.`\n\t\tif (options.stripWWW && /^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(urlObject.hostname)) {\n\t\t\t// Each label should be max 63 at length (min: 1).\n\t\t\t// Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names\n\t\t\t// Each TLD should be up to 63 characters long (min: 2).\n\t\t\t// It is technically possible to have a single character TLD, but none currently exist.\n\t\t\turlObject.hostname = urlObject.hostname.replace(/^www\\./, '');\n\t\t}\n\t}\n\n\t// Remove query unwanted parameters\n\tif (Array.isArray(options.removeQueryParameters)) {\n\t\t// eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy.\n\t\tfor (const key of [...urlObject.searchParams.keys()]) {\n\t\t\tif (testParameter(key, options.removeQueryParameters)) {\n\t\t\t\turlObject.searchParams.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!Array.isArray(options.keepQueryParameters) && options.removeQueryParameters === true) {\n\t\turlObject.search = '';\n\t}\n\n\t// Keep wanted query parameters\n\tif (Array.isArray(options.keepQueryParameters) && options.keepQueryParameters.length > 0) {\n\t\t// eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy.\n\t\tfor (const key of [...urlObject.searchParams.keys()]) {\n\t\t\tif (!testParameter(key, options.keepQueryParameters)) {\n\t\t\t\turlObject.searchParams.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Sort query parameters\n\tif (options.sortQueryParameters) {\n\t\tconst originalSearch = urlObject.search;\n\t\turlObject.searchParams.sort();\n\n\t\t// Calling `.sort()` encodes the search parameters, so we need to decode them again.\n\t\ttry {\n\t\t\turlObject.search = decodeURIComponent(urlObject.search);\n\t\t} catch {}\n\n\t\t// Fix parameters that originally had no equals sign but got one added by URLSearchParams\n\t\tconst partsWithoutEquals = originalSearch.slice(1).split('&').filter(p => p && !p.includes('='));\n\t\tfor (const part of partsWithoutEquals) {\n\t\t\tconst decoded = decodeURIComponent(part);\n\t\t\t// Only replace at word boundaries to avoid partial matches\n\t\t\turlObject.search = urlObject.search.replace(`?${decoded}=`, `?${decoded}`).replace(`&${decoded}=`, `&${decoded}`);\n\t\t}\n\t}\n\n\tif (options.removeTrailingSlash) {\n\t\turlObject.pathname = urlObject.pathname.replace(/\\/$/, '');\n\t}\n\n\t// Remove an explicit port number, excluding a default port number, if applicable\n\tif (options.removeExplicitPort && urlObject.port) {\n\t\turlObject.port = '';\n\t}\n\n\tconst oldUrlString = urlString;\n\n\t// Take advantage of many of the Node `url` normalizations\n\turlString = urlObject.toString();\n\n\tif (!options.removeSingleSlash && urlObject.pathname === '/' && !oldUrlString.endsWith('/') && urlObject.hash === '') {\n\t\turlString = urlString.replace(/\\/$/, '');\n\t}\n\n\t// Remove ending `/` unless removeSingleSlash is false\n\tif ((options.removeTrailingSlash || urlObject.pathname === '/') && urlObject.hash === '' && options.removeSingleSlash) {\n\t\turlString = urlString.replace(/\\/$/, '');\n\t}\n\n\t// Restore relative protocol, if applicable\n\tif (hasRelativeProtocol && !options.normalizeProtocol) {\n\t\turlString = urlString.replace(/^http:\\/\\//, '//');\n\t}\n\n\t// Remove http/https\n\tif (options.stripProtocol) {\n\t\turlString = urlString.replace(/^(?:https?:)?\\/\\//, '');\n\t}\n\n\treturn urlString;\n}\n",
|
|
96
|
+
"'use strict';\nconst {PassThrough: PassThroughStream} = require('stream');\n\nmodule.exports = options => {\n\toptions = {...options};\n\n\tconst {array} = options;\n\tlet {encoding} = options;\n\tconst isBuffer = encoding === 'buffer';\n\tlet objectMode = false;\n\n\tif (array) {\n\t\tobjectMode = !(encoding || isBuffer);\n\t} else {\n\t\tencoding = encoding || 'utf8';\n\t}\n\n\tif (isBuffer) {\n\t\tencoding = null;\n\t}\n\n\tconst stream = new PassThroughStream({objectMode});\n\n\tif (encoding) {\n\t\tstream.setEncoding(encoding);\n\t}\n\n\tlet length = 0;\n\tconst chunks = [];\n\n\tstream.on('data', chunk => {\n\t\tchunks.push(chunk);\n\n\t\tif (objectMode) {\n\t\t\tlength = chunks.length;\n\t\t} else {\n\t\t\tlength += chunk.length;\n\t\t}\n\t});\n\n\tstream.getBufferedValue = () => {\n\t\tif (array) {\n\t\t\treturn chunks;\n\t\t}\n\n\t\treturn isBuffer ? Buffer.concat(chunks, length) : chunks.join('');\n\t};\n\n\tstream.getBufferedLength = () => length;\n\n\treturn stream;\n};\n",
|
|
97
|
+
"'use strict';\nconst {constants: BufferConstants} = require('buffer');\nconst stream = require('stream');\nconst {promisify} = require('util');\nconst bufferStream = require('./buffer-stream');\n\nconst streamPipelinePromisified = promisify(stream.pipeline);\n\nclass MaxBufferError extends Error {\n\tconstructor() {\n\t\tsuper('maxBuffer exceeded');\n\t\tthis.name = 'MaxBufferError';\n\t}\n}\n\nasync function getStream(inputStream, options) {\n\tif (!inputStream) {\n\t\tthrow new Error('Expected a stream');\n\t}\n\n\toptions = {\n\t\tmaxBuffer: Infinity,\n\t\t...options\n\t};\n\n\tconst {maxBuffer} = options;\n\tconst stream = bufferStream(options);\n\n\tawait new Promise((resolve, reject) => {\n\t\tconst rejectPromise = error => {\n\t\t\t// Don't retrieve an oversized buffer.\n\t\t\tif (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {\n\t\t\t\terror.bufferedData = stream.getBufferedValue();\n\t\t\t}\n\n\t\t\treject(error);\n\t\t};\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tawait streamPipelinePromisified(inputStream, stream);\n\t\t\t\tresolve();\n\t\t\t} catch (error) {\n\t\t\t\trejectPromise(error);\n\t\t\t}\n\t\t})();\n\n\t\tstream.on('data', () => {\n\t\t\tif (stream.getBufferedLength() > maxBuffer) {\n\t\t\t\trejectPromise(new MaxBufferError());\n\t\t\t}\n\t\t});\n\t});\n\n\treturn stream.getBufferedValue();\n}\n\nmodule.exports = getStream;\nmodule.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});\nmodule.exports.array = (stream, options) => getStream(stream, {...options, array: true});\nmodule.exports.MaxBufferError = MaxBufferError;\n",
|
|
98
|
+
"'use strict';\n\n/**\n * @typedef {Object} HttpRequest\n * @property {Record<string, string>} headers - Request headers\n * @property {string} [method] - HTTP method\n * @property {string} [url] - Request URL\n */\n\n/**\n * @typedef {Object} HttpResponse\n * @property {Record<string, string>} headers - Response headers\n * @property {number} [status] - HTTP status code\n */\n\n/**\n * Set of default cacheable status codes per RFC 7231 section 6.1.\n * @type {Set<number>}\n */\nconst statusCodeCacheableByDefault = new Set([\n 200,\n 203,\n 204,\n 206,\n 300,\n 301,\n 308,\n 404,\n 405,\n 410,\n 414,\n 501,\n]);\n\n/**\n * Set of HTTP status codes that the cache implementation understands.\n * Note: This implementation does not understand partial responses (206).\n * @type {Set<number>}\n */\nconst understoodStatuses = new Set([\n 200,\n 203,\n 204,\n 300,\n 301,\n 302,\n 303,\n 307,\n 308,\n 404,\n 405,\n 410,\n 414,\n 501,\n]);\n\n/**\n * Set of HTTP error status codes.\n * @type {Set<number>}\n */\nconst errorStatusCodes = new Set([\n 500,\n 502,\n 503,\n 504,\n]);\n\n/**\n * Object representing hop-by-hop headers that should be removed.\n * @type {Record<string, boolean>}\n */\nconst hopByHopHeaders = {\n date: true, // included, because we add Age update Date\n connection: true,\n 'keep-alive': true,\n 'proxy-authenticate': true,\n 'proxy-authorization': true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n};\n\n/**\n * Headers that are excluded from revalidation update.\n * @type {Record<string, boolean>}\n */\nconst excludedFromRevalidationUpdate = {\n // Since the old body is reused, it doesn't make sense to change properties of the body\n 'content-length': true,\n 'content-encoding': true,\n 'transfer-encoding': true,\n 'content-range': true,\n};\n\n/**\n * Converts a string to a number or returns zero if the conversion fails.\n * @param {string} s - The string to convert.\n * @returns {number} The parsed number or 0.\n */\nfunction toNumberOrZero(s) {\n const n = parseInt(s, 10);\n return isFinite(n) ? n : 0;\n}\n\n/**\n * Determines if the given response is an error response.\n * Implements RFC 5861 behavior.\n * @param {HttpResponse|undefined} response - The HTTP response object.\n * @returns {boolean} true if the response is an error or undefined, false otherwise.\n */\nfunction isErrorResponse(response) {\n // consider undefined response as faulty\n if (!response) {\n return true;\n }\n return errorStatusCodes.has(response.status);\n}\n\n/**\n * Parses a Cache-Control header string into an object.\n * @param {string} [header] - The Cache-Control header value.\n * @returns {Record<string, string|boolean>} An object representing Cache-Control directives.\n */\nfunction parseCacheControl(header) {\n /** @type {Record<string, string|boolean>} */\n const cc = {};\n if (!header) return cc;\n\n // TODO: When there is more than one value present for a given directive (e.g., two Expires header fields, multiple Cache-Control: max-age directives),\n // the directive's value is considered invalid. Caches are encouraged to consider responses that have invalid freshness information to be stale\n const parts = header.trim().split(/,/);\n for (const part of parts) {\n const [k, v] = part.split(/=/, 2);\n cc[k.trim()] = v === undefined ? true : v.trim().replace(/^\"|\"$/g, '');\n }\n\n return cc;\n}\n\n/**\n * Formats a Cache-Control directives object into a header string.\n * @param {Record<string, string|boolean>} cc - The Cache-Control directives.\n * @returns {string|undefined} A formatted Cache-Control header string or undefined if empty.\n */\nfunction formatCacheControl(cc) {\n let parts = [];\n for (const k in cc) {\n const v = cc[k];\n parts.push(v === true ? k : k + '=' + v);\n }\n if (!parts.length) {\n return undefined;\n }\n return parts.join(', ');\n}\n\nmodule.exports = class CachePolicy {\n /**\n * Creates a new CachePolicy instance.\n * @param {HttpRequest} req - Incoming client request.\n * @param {HttpResponse} res - Received server response.\n * @param {Object} [options={}] - Configuration options.\n * @param {boolean} [options.shared=true] - Is the cache shared (a public proxy)? `false` for personal browser caches.\n * @param {number} [options.cacheHeuristic=0.1] - Fallback heuristic (age fraction) for cache duration.\n * @param {number} [options.immutableMinTimeToLive=86400000] - Minimum TTL for immutable responses in milliseconds.\n * @param {boolean} [options.ignoreCargoCult=false] - Detect nonsense cache headers, and override them.\n * @param {any} [options._fromObject] - Internal parameter for deserialization. Do not use.\n */\n constructor(\n req,\n res,\n {\n shared,\n cacheHeuristic,\n immutableMinTimeToLive,\n ignoreCargoCult,\n _fromObject,\n } = {}\n ) {\n if (_fromObject) {\n this._fromObject(_fromObject);\n return;\n }\n\n if (!res || !res.headers) {\n throw Error('Response headers missing');\n }\n this._assertRequestHasHeaders(req);\n\n /** @type {number} Timestamp when the response was received */\n this._responseTime = this.now();\n /** @type {boolean} Indicates if the cache is shared */\n this._isShared = shared !== false;\n /** @type {boolean} Indicates if legacy cargo cult directives should be ignored */\n this._ignoreCargoCult = !!ignoreCargoCult;\n /** @type {number} Heuristic cache fraction */\n this._cacheHeuristic =\n undefined !== cacheHeuristic ? cacheHeuristic : 0.1; // 10% matches IE\n /** @type {number} Minimum TTL for immutable responses in ms */\n this._immutableMinTtl =\n undefined !== immutableMinTimeToLive\n ? immutableMinTimeToLive\n : 24 * 3600 * 1000;\n\n /** @type {number} HTTP status code */\n this._status = 'status' in res ? res.status : 200;\n /** @type {Record<string, string>} Response headers */\n this._resHeaders = res.headers;\n /** @type {Record<string, string|boolean>} Parsed Cache-Control directives from response */\n this._rescc = parseCacheControl(res.headers['cache-control']);\n /** @type {string} HTTP method (e.g., GET, POST) */\n this._method = 'method' in req ? req.method : 'GET';\n /** @type {string} Request URL */\n this._url = req.url;\n /** @type {string} Host header from the request */\n this._host = req.headers.host;\n /** @type {boolean} Whether the request does not include an Authorization header */\n this._noAuthorization = !req.headers.authorization;\n /** @type {Record<string, string>|null} Request headers used for Vary matching */\n this._reqHeaders = res.headers.vary ? req.headers : null; // Don't keep all request headers if they won't be used\n /** @type {Record<string, string|boolean>} Parsed Cache-Control directives from request */\n this._reqcc = parseCacheControl(req.headers['cache-control']);\n\n // Assume that if someone uses legacy, non-standard uncecessary options they don't understand caching,\n // so there's no point stricly adhering to the blindly copy&pasted directives.\n if (\n this._ignoreCargoCult &&\n 'pre-check' in this._rescc &&\n 'post-check' in this._rescc\n ) {\n delete this._rescc['pre-check'];\n delete this._rescc['post-check'];\n delete this._rescc['no-cache'];\n delete this._rescc['no-store'];\n delete this._rescc['must-revalidate'];\n this._resHeaders = Object.assign({}, this._resHeaders, {\n 'cache-control': formatCacheControl(this._rescc),\n });\n delete this._resHeaders.expires;\n delete this._resHeaders.pragma;\n }\n\n // When the Cache-Control header field is not present in a request, caches MUST consider the no-cache request pragma-directive\n // as having the same effect as if \"Cache-Control: no-cache\" were present (see Section 5.2.1).\n if (\n res.headers['cache-control'] == null &&\n /no-cache/.test(res.headers.pragma)\n ) {\n this._rescc['no-cache'] = true;\n }\n }\n\n /**\n * You can monkey-patch it for testing.\n * @returns {number} Current time in milliseconds.\n */\n now() {\n return Date.now();\n }\n\n /**\n * Determines if the response is storable in a cache.\n * @returns {boolean} `false` if can never be cached.\n */\n storable() {\n // The \"no-store\" request directive indicates that a cache MUST NOT store any part of either this request or any response to it.\n return !!(\n !this._reqcc['no-store'] &&\n // A cache MUST NOT store a response to any request, unless:\n // The request method is understood by the cache and defined as being cacheable, and\n ('GET' === this._method ||\n 'HEAD' === this._method ||\n ('POST' === this._method && this._hasExplicitExpiration())) &&\n // the response status code is understood by the cache, and\n understoodStatuses.has(this._status) &&\n // the \"no-store\" cache directive does not appear in request or response header fields, and\n !this._rescc['no-store'] &&\n // the \"private\" response directive does not appear in the response, if the cache is shared, and\n (!this._isShared || !this._rescc.private) &&\n // the Authorization header field does not appear in the request, if the cache is shared,\n (!this._isShared ||\n this._noAuthorization ||\n this._allowsStoringAuthenticated()) &&\n // the response either:\n // contains an Expires header field, or\n (this._resHeaders.expires ||\n // contains a max-age response directive, or\n // contains a s-maxage response directive and the cache is shared, or\n // contains a public response directive.\n this._rescc['max-age'] ||\n (this._isShared && this._rescc['s-maxage']) ||\n this._rescc.public ||\n // has a status code that is defined as cacheable by default\n statusCodeCacheableByDefault.has(this._status))\n );\n }\n\n /**\n * @returns {boolean} true if expiration is explicitly defined.\n */\n _hasExplicitExpiration() {\n // 4.2.1 Calculating Freshness Lifetime\n return !!(\n (this._isShared && this._rescc['s-maxage']) ||\n this._rescc['max-age'] ||\n this._resHeaders.expires\n );\n }\n\n /**\n * @param {HttpRequest} req - a request\n * @throws {Error} if the headers are missing.\n */\n _assertRequestHasHeaders(req) {\n if (!req || !req.headers) {\n throw Error('Request headers missing');\n }\n }\n\n /**\n * Checks if the request matches the cache and can be satisfied from the cache immediately,\n * without having to make a request to the server.\n *\n * This doesn't support `stale-while-revalidate`. See `evaluateRequest()` for a more complete solution.\n *\n * @param {HttpRequest} req - The new incoming HTTP request.\n * @returns {boolean} `true`` if the cached response used to construct this cache policy satisfies the request without revalidation.\n */\n satisfiesWithoutRevalidation(req) {\n const result = this.evaluateRequest(req);\n return !result.revalidation;\n }\n\n /**\n * @param {{headers: Record<string, string>, synchronous: boolean}|undefined} revalidation - Revalidation information, if any.\n * @returns {{response: {headers: Record<string, string>}, revalidation: {headers: Record<string, string>, synchronous: boolean}|undefined}} An object with a cached response headers and revalidation info.\n */\n _evaluateRequestHitResult(revalidation) {\n return {\n response: {\n headers: this.responseHeaders(),\n },\n revalidation,\n };\n }\n\n /**\n * @param {HttpRequest} request - new incoming\n * @param {boolean} synchronous - whether revalidation must be synchronous (not s-w-r).\n * @returns {{headers: Record<string, string>, synchronous: boolean}} An object with revalidation headers and a synchronous flag.\n */\n _evaluateRequestRevalidation(request, synchronous) {\n return {\n synchronous,\n headers: this.revalidationHeaders(request),\n };\n }\n\n /**\n * @param {HttpRequest} request - new incoming\n * @returns {{response: undefined, revalidation: {headers: Record<string, string>, synchronous: boolean}}} An object indicating no cached response and revalidation details.\n */\n _evaluateRequestMissResult(request) {\n return {\n response: undefined,\n revalidation: this._evaluateRequestRevalidation(request, true),\n };\n }\n\n /**\n * Checks if the given request matches this cache entry, and how the cache can be used to satisfy it. Returns an object with:\n *\n * ```\n * {\n * // If defined, you must send a request to the server.\n * revalidation: {\n * headers: {}, // HTTP headers to use when sending the revalidation response\n * // If true, you MUST wait for a response from the server before using the cache\n * // If false, this is stale-while-revalidate. The cache is stale, but you can use it while you update it asynchronously.\n * synchronous: bool,\n * },\n * // If defined, you can use this cached response.\n * response: {\n * headers: {}, // Updated cached HTTP headers you must use when responding to the client\n * },\n * }\n * ```\n * @param {HttpRequest} req - new incoming HTTP request\n * @returns {{response: {headers: Record<string, string>}|undefined, revalidation: {headers: Record<string, string>, synchronous: boolean}|undefined}} An object containing keys:\n * - revalidation: { headers: Record<string, string>, synchronous: boolean } Set if you should send this to the origin server\n * - response: { headers: Record<string, string> } Set if you can respond to the client with these cached headers\n */\n evaluateRequest(req) {\n this._assertRequestHasHeaders(req);\n\n // In all circumstances, a cache MUST NOT ignore the must-revalidate directive\n if (this._rescc['must-revalidate']) {\n return this._evaluateRequestMissResult(req);\n }\n\n if (!this._requestMatches(req, false)) {\n return this._evaluateRequestMissResult(req);\n }\n\n // When presented with a request, a cache MUST NOT reuse a stored response, unless:\n // the presented request does not contain the no-cache pragma (Section 5.4), nor the no-cache cache directive,\n // unless the stored response is successfully validated (Section 4.3), and\n const requestCC = parseCacheControl(req.headers['cache-control']);\n\n if (requestCC['no-cache'] || /no-cache/.test(req.headers.pragma)) {\n return this._evaluateRequestMissResult(req);\n }\n\n if (requestCC['max-age'] && this.age() > toNumberOrZero(requestCC['max-age'])) {\n return this._evaluateRequestMissResult(req);\n }\n\n if (requestCC['min-fresh'] && this.maxAge() - this.age() < toNumberOrZero(requestCC['min-fresh'])) {\n return this._evaluateRequestMissResult(req);\n }\n\n // the stored response is either:\n // fresh, or allowed to be served stale\n if (this.stale()) {\n // If a value is present, then the client is willing to accept a response that has\n // exceeded its freshness lifetime by no more than the specified number of seconds\n const allowsStaleWithoutRevalidation = 'max-stale' in requestCC &&\n (true === requestCC['max-stale'] || requestCC['max-stale'] > this.age() - this.maxAge());\n\n if (allowsStaleWithoutRevalidation) {\n return this._evaluateRequestHitResult(undefined);\n }\n\n if (this.useStaleWhileRevalidate()) {\n return this._evaluateRequestHitResult(this._evaluateRequestRevalidation(req, false));\n }\n\n return this._evaluateRequestMissResult(req);\n }\n\n return this._evaluateRequestHitResult(undefined);\n }\n\n /**\n * @param {HttpRequest} req - check if this is for the same cache entry\n * @param {boolean} allowHeadMethod - allow a HEAD method to match.\n * @returns {boolean} `true` if the request matches.\n */\n _requestMatches(req, allowHeadMethod) {\n // The presented effective request URI and that of the stored response match, and\n return !!(\n (!this._url || this._url === req.url) &&\n this._host === req.headers.host &&\n // the request method associated with the stored response allows it to be used for the presented request, and\n (!req.method ||\n this._method === req.method ||\n (allowHeadMethod && 'HEAD' === req.method)) &&\n // selecting header fields nominated by the stored response (if any) match those presented, and\n this._varyMatches(req)\n );\n }\n\n /**\n * Determines whether storing authenticated responses is allowed.\n * @returns {boolean} `true` if allowed.\n */\n _allowsStoringAuthenticated() {\n // following Cache-Control response directives (Section 5.2.2) have such an effect: must-revalidate, public, and s-maxage.\n return !!(\n this._rescc['must-revalidate'] ||\n this._rescc.public ||\n this._rescc['s-maxage']\n );\n }\n\n /**\n * Checks whether the Vary header in the response matches the new request.\n * @param {HttpRequest} req - incoming HTTP request\n * @returns {boolean} `true` if the vary headers match.\n */\n _varyMatches(req) {\n if (!this._resHeaders.vary) {\n return true;\n }\n\n // A Vary header field-value of \"*\" always fails to match\n if (this._resHeaders.vary === '*') {\n return false;\n }\n\n const fields = this._resHeaders.vary\n .trim()\n .toLowerCase()\n .split(/\\s*,\\s*/);\n for (const name of fields) {\n if (req.headers[name] !== this._reqHeaders[name]) return false;\n }\n return true;\n }\n\n /**\n * Creates a copy of the given headers without any hop-by-hop headers.\n * @param {Record<string, string>} inHeaders - old headers from the cached response\n * @returns {Record<string, string>} A new headers object without hop-by-hop headers.\n */\n _copyWithoutHopByHopHeaders(inHeaders) {\n /** @type {Record<string, string>} */\n const headers = {};\n for (const name in inHeaders) {\n if (hopByHopHeaders[name]) continue;\n headers[name] = inHeaders[name];\n }\n // 9.1. Connection\n if (inHeaders.connection) {\n const tokens = inHeaders.connection.trim().split(/\\s*,\\s*/);\n for (const name of tokens) {\n delete headers[name];\n }\n }\n if (headers.warning) {\n const warnings = headers.warning.split(/,/).filter(warning => {\n return !/^\\s*1[0-9][0-9]/.test(warning);\n });\n if (!warnings.length) {\n delete headers.warning;\n } else {\n headers.warning = warnings.join(',').trim();\n }\n }\n return headers;\n }\n\n /**\n * Returns the response headers adjusted for serving the cached response.\n * Removes hop-by-hop headers and updates the Age and Date headers.\n * @returns {Record<string, string>} The adjusted response headers.\n */\n responseHeaders() {\n const headers = this._copyWithoutHopByHopHeaders(this._resHeaders);\n const age = this.age();\n\n // A cache SHOULD generate 113 warning if it heuristically chose a freshness\n // lifetime greater than 24 hours and the response's age is greater than 24 hours.\n if (\n age > 3600 * 24 &&\n !this._hasExplicitExpiration() &&\n this.maxAge() > 3600 * 24\n ) {\n headers.warning =\n (headers.warning ? `${headers.warning}, ` : '') +\n '113 - \"rfc7234 5.5.4\"';\n }\n headers.age = `${Math.round(age)}`;\n headers.date = new Date(this.now()).toUTCString();\n return headers;\n }\n\n /**\n * Returns the Date header value from the response or the current time if invalid.\n * @returns {number} Timestamp (in milliseconds) representing the Date header or response time.\n */\n date() {\n const serverDate = Date.parse(this._resHeaders.date);\n if (isFinite(serverDate)) {\n return serverDate;\n }\n return this._responseTime;\n }\n\n /**\n * Value of the Age header, in seconds, updated for the current time.\n * May be fractional.\n * @returns {number} The age in seconds.\n */\n age() {\n let age = this._ageValue();\n\n const residentTime = (this.now() - this._responseTime) / 1000;\n return age + residentTime;\n }\n\n /**\n * @returns {number} The Age header value as a number.\n */\n _ageValue() {\n return toNumberOrZero(this._resHeaders.age);\n }\n\n /**\n * Possibly outdated value of applicable max-age (or heuristic equivalent) in seconds.\n * This counts since response's `Date`.\n *\n * For an up-to-date value, see `timeToLive()`.\n *\n * Returns the maximum age (freshness lifetime) of the response in seconds.\n * @returns {number} The max-age value in seconds.\n */\n maxAge() {\n if (!this.storable() || this._rescc['no-cache']) {\n return 0;\n }\n\n // Shared responses with cookies are cacheable according to the RFC, but IMHO it'd be unwise to do so by default\n // so this implementation requires explicit opt-in via public header\n if (\n this._isShared &&\n (this._resHeaders['set-cookie'] &&\n !this._rescc.public &&\n !this._rescc.immutable)\n ) {\n return 0;\n }\n\n if (this._resHeaders.vary === '*') {\n return 0;\n }\n\n if (this._isShared) {\n if (this._rescc['proxy-revalidate']) {\n return 0;\n }\n // if a response includes the s-maxage directive, a shared cache recipient MUST ignore the Expires field.\n if (this._rescc['s-maxage']) {\n return toNumberOrZero(this._rescc['s-maxage']);\n }\n }\n\n // If a response includes a Cache-Control field with the max-age directive, a recipient MUST ignore the Expires field.\n if (this._rescc['max-age']) {\n return toNumberOrZero(this._rescc['max-age']);\n }\n\n const defaultMinTtl = this._rescc.immutable ? this._immutableMinTtl : 0;\n\n const serverDate = this.date();\n if (this._resHeaders.expires) {\n const expires = Date.parse(this._resHeaders.expires);\n // A cache recipient MUST interpret invalid date formats, especially the value \"0\", as representing a time in the past (i.e., \"already expired\").\n if (Number.isNaN(expires) || expires < serverDate) {\n return 0;\n }\n return Math.max(defaultMinTtl, (expires - serverDate) / 1000);\n }\n\n if (this._resHeaders['last-modified']) {\n const lastModified = Date.parse(this._resHeaders['last-modified']);\n if (isFinite(lastModified) && serverDate > lastModified) {\n return Math.max(\n defaultMinTtl,\n ((serverDate - lastModified) / 1000) * this._cacheHeuristic\n );\n }\n }\n\n return defaultMinTtl;\n }\n\n /**\n * Remaining time this cache entry may be useful for, in *milliseconds*.\n * You can use this as an expiration time for your cache storage.\n *\n * Prefer this method over `maxAge()`, because it includes other factors like `age` and `stale-while-revalidate`.\n * @returns {number} Time-to-live in milliseconds.\n */\n timeToLive() {\n const age = this.maxAge() - this.age();\n const staleIfErrorAge = age + toNumberOrZero(this._rescc['stale-if-error']);\n const staleWhileRevalidateAge = age + toNumberOrZero(this._rescc['stale-while-revalidate']);\n return Math.round(Math.max(0, age, staleIfErrorAge, staleWhileRevalidateAge) * 1000);\n }\n\n /**\n * If true, this cache entry is past its expiration date.\n * Note that stale cache may be useful sometimes, see `evaluateRequest()`.\n * @returns {boolean} `false` doesn't mean it's fresh nor usable\n */\n stale() {\n return this.maxAge() <= this.age();\n }\n\n /**\n * @returns {boolean} `true` if `stale-if-error` condition allows use of a stale response.\n */\n _useStaleIfError() {\n return this.maxAge() + toNumberOrZero(this._rescc['stale-if-error']) > this.age();\n }\n\n /** See `evaluateRequest()` for a more complete solution\n * @returns {boolean} `true` if `stale-while-revalidate` is currently allowed.\n */\n useStaleWhileRevalidate() {\n const swr = toNumberOrZero(this._rescc['stale-while-revalidate']);\n return swr > 0 && this.maxAge() + swr > this.age();\n }\n\n /**\n * Creates a `CachePolicy` instance from a serialized object.\n * @param {Object} obj - The serialized object.\n * @returns {CachePolicy} A new CachePolicy instance.\n */\n static fromObject(obj) {\n return new this(undefined, undefined, { _fromObject: obj });\n }\n\n /**\n * @param {any} obj - The serialized object.\n * @throws {Error} If already initialized or if the object is invalid.\n */\n _fromObject(obj) {\n if (this._responseTime) throw Error('Reinitialized');\n if (!obj || obj.v !== 1) throw Error('Invalid serialization');\n\n this._responseTime = obj.t;\n this._isShared = obj.sh;\n this._cacheHeuristic = obj.ch;\n this._immutableMinTtl =\n obj.imm !== undefined ? obj.imm : 24 * 3600 * 1000;\n this._ignoreCargoCult = !!obj.icc;\n this._status = obj.st;\n this._resHeaders = obj.resh;\n this._rescc = obj.rescc;\n this._method = obj.m;\n this._url = obj.u;\n this._host = obj.h;\n this._noAuthorization = obj.a;\n this._reqHeaders = obj.reqh;\n this._reqcc = obj.reqcc;\n }\n\n /**\n * Serializes the `CachePolicy` instance into a JSON-serializable object.\n * @returns {Object} The serialized object.\n */\n toObject() {\n return {\n v: 1,\n t: this._responseTime,\n sh: this._isShared,\n ch: this._cacheHeuristic,\n imm: this._immutableMinTtl,\n icc: this._ignoreCargoCult,\n st: this._status,\n resh: this._resHeaders,\n rescc: this._rescc,\n m: this._method,\n u: this._url,\n h: this._host,\n a: this._noAuthorization,\n reqh: this._reqHeaders,\n reqcc: this._reqcc,\n };\n }\n\n /**\n * Headers for sending to the origin server to revalidate stale response.\n * Allows server to return 304 to allow reuse of the previous response.\n *\n * Hop by hop headers are always stripped.\n * Revalidation headers may be added or removed, depending on request.\n * @param {HttpRequest} incomingReq - The incoming HTTP request.\n * @returns {Record<string, string>} The headers for the revalidation request.\n */\n revalidationHeaders(incomingReq) {\n this._assertRequestHasHeaders(incomingReq);\n const headers = this._copyWithoutHopByHopHeaders(incomingReq.headers);\n\n // This implementation does not understand range requests\n delete headers['if-range'];\n\n if (!this._requestMatches(incomingReq, true) || !this.storable()) {\n // revalidation allowed via HEAD\n // not for the same resource, or wasn't allowed to be cached anyway\n delete headers['if-none-match'];\n delete headers['if-modified-since'];\n return headers;\n }\n\n /* MUST send that entity-tag in any cache validation request (using If-Match or If-None-Match) if an entity-tag has been provided by the origin server. */\n if (this._resHeaders.etag) {\n headers['if-none-match'] = headers['if-none-match']\n ? `${headers['if-none-match']}, ${this._resHeaders.etag}`\n : this._resHeaders.etag;\n }\n\n // Clients MAY issue simple (non-subrange) GET requests with either weak validators or strong validators. Clients MUST NOT use weak validators in other forms of request.\n const forbidsWeakValidators =\n headers['accept-ranges'] ||\n headers['if-match'] ||\n headers['if-unmodified-since'] ||\n (this._method && this._method != 'GET');\n\n /* SHOULD send the Last-Modified value in non-subrange cache validation requests (using If-Modified-Since) if only a Last-Modified value has been provided by the origin server.\n Note: This implementation does not understand partial responses (206) */\n if (forbidsWeakValidators) {\n delete headers['if-modified-since'];\n\n if (headers['if-none-match']) {\n const etags = headers['if-none-match']\n .split(/,/)\n .filter(etag => {\n return !/^\\s*W\\//.test(etag);\n });\n if (!etags.length) {\n delete headers['if-none-match'];\n } else {\n headers['if-none-match'] = etags.join(',').trim();\n }\n }\n } else if (\n this._resHeaders['last-modified'] &&\n !headers['if-modified-since']\n ) {\n headers['if-modified-since'] = this._resHeaders['last-modified'];\n }\n\n return headers;\n }\n\n /**\n * Creates new CachePolicy with information combined from the previews response,\n * and the new revalidation response.\n *\n * Returns {policy, modified} where modified is a boolean indicating\n * whether the response body has been modified, and old cached body can't be used.\n *\n * @param {HttpRequest} request - The latest HTTP request asking for the cached entry.\n * @param {HttpResponse} response - The latest revalidation HTTP response from the origin server.\n * @returns {{policy: CachePolicy, modified: boolean, matches: boolean}} The updated policy and modification status.\n * @throws {Error} If the response headers are missing.\n */\n revalidatedPolicy(request, response) {\n this._assertRequestHasHeaders(request);\n\n if (this._useStaleIfError() && isErrorResponse(response)) {\n return {\n policy: this,\n modified: false,\n matches: true,\n };\n }\n\n if (!response || !response.headers) {\n throw Error('Response headers missing');\n }\n\n // These aren't going to be supported exactly, since one CachePolicy object\n // doesn't know about all the other cached objects.\n let matches = false;\n if (response.status !== undefined && response.status != 304) {\n matches = false;\n } else if (\n response.headers.etag &&\n !/^\\s*W\\//.test(response.headers.etag)\n ) {\n // \"All of the stored responses with the same strong validator are selected.\n // If none of the stored responses contain the same strong validator,\n // then the cache MUST NOT use the new response to update any stored responses.\"\n matches =\n this._resHeaders.etag &&\n this._resHeaders.etag.replace(/^\\s*W\\//, '') ===\n response.headers.etag;\n } else if (this._resHeaders.etag && response.headers.etag) {\n // \"If the new response contains a weak validator and that validator corresponds\n // to one of the cache's stored responses,\n // then the most recent of those matching stored responses is selected for update.\"\n matches =\n this._resHeaders.etag.replace(/^\\s*W\\//, '') ===\n response.headers.etag.replace(/^\\s*W\\//, '');\n } else if (this._resHeaders['last-modified']) {\n matches =\n this._resHeaders['last-modified'] ===\n response.headers['last-modified'];\n } else {\n // If the new response does not include any form of validator (such as in the case where\n // a client generates an If-Modified-Since request from a source other than the Last-Modified\n // response header field), and there is only one stored response, and that stored response also\n // lacks a validator, then that stored response is selected for update.\n if (\n !this._resHeaders.etag &&\n !this._resHeaders['last-modified'] &&\n !response.headers.etag &&\n !response.headers['last-modified']\n ) {\n matches = true;\n }\n }\n\n const optionsCopy = {\n shared: this._isShared,\n cacheHeuristic: this._cacheHeuristic,\n immutableMinTimeToLive: this._immutableMinTtl,\n ignoreCargoCult: this._ignoreCargoCult,\n };\n\n if (!matches) {\n return {\n policy: new this.constructor(request, response, optionsCopy),\n // Client receiving 304 without body, even if it's invalid/mismatched has no option\n // but to reuse a cached body. We don't have a good way to tell clients to do\n // error recovery in such case.\n modified: response.status != 304,\n matches: false,\n };\n }\n\n // use other header fields provided in the 304 (Not Modified) response to replace all instances\n // of the corresponding header fields in the stored response.\n const headers = {};\n for (const k in this._resHeaders) {\n headers[k] =\n k in response.headers && !excludedFromRevalidationUpdate[k]\n ? response.headers[k]\n : this._resHeaders[k];\n }\n\n const newResponse = Object.assign({}, response, {\n status: this._status,\n method: this._method,\n headers,\n });\n return {\n policy: new this.constructor(request, newResponse, optionsCopy),\n modified: false,\n matches: true,\n };\n }\n};\n",
|
|
99
|
+
"export default function lowercaseKeys(object) {\n\treturn Object.fromEntries(Object.entries(object).map(([key, value]) => [key.toLowerCase(), value]));\n}\n",
|
|
100
|
+
"import {Readable as ReadableStream} from 'node:stream';\nimport lowercaseKeys from 'lowercase-keys';\n\nexport default class Response extends ReadableStream {\n\tstatusCode;\n\theaders;\n\tbody;\n\turl;\n\n\tconstructor({statusCode, headers, body, url}) {\n\t\tif (typeof statusCode !== 'number') {\n\t\t\tthrow new TypeError('Argument `statusCode` should be a number');\n\t\t}\n\n\t\tif (typeof headers !== 'object') {\n\t\t\tthrow new TypeError('Argument `headers` should be an object');\n\t\t}\n\n\t\tif (!(body instanceof Uint8Array)) {\n\t\t\tthrow new TypeError('Argument `body` should be a buffer');\n\t\t}\n\n\t\tif (typeof url !== 'string') {\n\t\t\tthrow new TypeError('Argument `url` should be a string');\n\t\t}\n\n\t\tsuper({\n\t\t\tread() {\n\t\t\t\tthis.push(body);\n\t\t\t\tthis.push(null);\n\t\t\t},\n\t\t});\n\n\t\tthis.statusCode = statusCode;\n\t\tthis.headers = lowercaseKeys(headers);\n\t\tthis.body = body;\n\t\tthis.url = url;\n\t}\n}\n",
|
|
101
|
+
"//TODO: handle reviver/dehydrate function like normal\n//and handle indentation, like normal.\n//if anyone needs this... please send pull request.\n\nexports.stringify = function stringify (o) {\n if('undefined' == typeof o) return o\n\n if(o && Buffer.isBuffer(o))\n return JSON.stringify(':base64:' + o.toString('base64'))\n\n if(o && o.toJSON)\n o = o.toJSON()\n\n if(o && 'object' === typeof o) {\n var s = ''\n var array = Array.isArray(o)\n s = array ? '[' : '{'\n var first = true\n\n for(var k in o) {\n var ignore = 'function' == typeof o[k] || (!array && 'undefined' === typeof o[k])\n if(Object.hasOwnProperty.call(o, k) && !ignore) {\n if(!first)\n s += ','\n first = false\n if (array) {\n if(o[k] == undefined)\n s += 'null'\n else\n s += stringify(o[k])\n } else if (o[k] !== void(0)) {\n s += stringify(k) + ':' + stringify(o[k])\n }\n }\n }\n\n s += array ? ']' : '}'\n\n return s\n } else if ('string' === typeof o) {\n return JSON.stringify(/^:/.test(o) ? ':' + o : o)\n } else if ('undefined' === typeof o) {\n return 'null';\n } else\n return JSON.stringify(o)\n}\n\nexports.parse = function (s) {\n return JSON.parse(s, function (key, value) {\n if('string' === typeof value) {\n if(/^:base64:/.test(value))\n return Buffer.from(value.substring(8), 'base64')\n else\n return /^:/.test(value) ? value.substring(1) : value \n }\n return value\n })\n}\n",
|
|
102
|
+
"'use strict';\n\nconst EventEmitter = require('events');\nconst JSONB = require('json-buffer');\n\nconst loadStore = options => {\n\tconst adapters = {\n\t\tredis: '@keyv/redis',\n\t\trediss: '@keyv/redis',\n\t\tmongodb: '@keyv/mongo',\n\t\tmongo: '@keyv/mongo',\n\t\tsqlite: '@keyv/sqlite',\n\t\tpostgresql: '@keyv/postgres',\n\t\tpostgres: '@keyv/postgres',\n\t\tmysql: '@keyv/mysql',\n\t\tetcd: '@keyv/etcd',\n\t\toffline: '@keyv/offline',\n\t\ttiered: '@keyv/tiered',\n\t};\n\tif (options.adapter || options.uri) {\n\t\tconst adapter = options.adapter || /^[^:+]*/.exec(options.uri)[0];\n\t\treturn new (require(adapters[adapter]))(options);\n\t}\n\n\treturn new Map();\n};\n\nconst iterableAdapters = [\n\t'sqlite',\n\t'postgres',\n\t'mysql',\n\t'mongo',\n\t'redis',\n\t'tiered',\n];\n\nclass Keyv extends EventEmitter {\n\tconstructor(uri, {emitErrors = true, ...options} = {}) {\n\t\tsuper();\n\t\tthis.opts = {\n\t\t\tnamespace: 'keyv',\n\t\t\tserialize: JSONB.stringify,\n\t\t\tdeserialize: JSONB.parse,\n\t\t\t...((typeof uri === 'string') ? {uri} : uri),\n\t\t\t...options,\n\t\t};\n\n\t\tif (!this.opts.store) {\n\t\t\tconst adapterOptions = {...this.opts};\n\t\t\tthis.opts.store = loadStore(adapterOptions);\n\t\t}\n\n\t\tif (this.opts.compression) {\n\t\t\tconst compression = this.opts.compression;\n\t\t\tthis.opts.serialize = compression.serialize.bind(compression);\n\t\t\tthis.opts.deserialize = compression.deserialize.bind(compression);\n\t\t}\n\n\t\tif (typeof this.opts.store.on === 'function' && emitErrors) {\n\t\t\tthis.opts.store.on('error', error => this.emit('error', error));\n\t\t}\n\n\t\tthis.opts.store.namespace = this.opts.namespace;\n\n\t\tconst generateIterator = iterator => async function * () {\n\t\t\tfor await (const [key, raw] of typeof iterator === 'function'\n\t\t\t\t? iterator(this.opts.store.namespace)\n\t\t\t\t: iterator) {\n\t\t\t\tconst data = await this.opts.deserialize(raw);\n\t\t\t\tif (this.opts.store.namespace && !key.includes(this.opts.store.namespace)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (typeof data.expires === 'number' && Date.now() > data.expires) {\n\t\t\t\t\tthis.delete(key);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tyield [this._getKeyUnprefix(key), data.value];\n\t\t\t}\n\t\t};\n\n\t\t// Attach iterators\n\t\tif (typeof this.opts.store[Symbol.iterator] === 'function' && this.opts.store instanceof Map) {\n\t\t\tthis.iterator = generateIterator(this.opts.store);\n\t\t} else if (typeof this.opts.store.iterator === 'function' && this.opts.store.opts\n\t\t\t&& this._checkIterableAdaptar()) {\n\t\t\tthis.iterator = generateIterator(this.opts.store.iterator.bind(this.opts.store));\n\t\t}\n\t}\n\n\t_checkIterableAdaptar() {\n\t\treturn iterableAdapters.includes(this.opts.store.opts.dialect)\n\t\t\t|| iterableAdapters.findIndex(element => this.opts.store.opts.url.includes(element)) >= 0;\n\t}\n\n\t_getKeyPrefix(key) {\n\t\treturn `${this.opts.namespace}:${key}`;\n\t}\n\n\t_getKeyPrefixArray(keys) {\n\t\treturn keys.map(key => `${this.opts.namespace}:${key}`);\n\t}\n\n\t_getKeyUnprefix(key) {\n\t\treturn key\n\t\t\t.split(':')\n\t\t\t.splice(1)\n\t\t\t.join(':');\n\t}\n\n\tget(key, options) {\n\t\tconst {store} = this.opts;\n\t\tconst isArray = Array.isArray(key);\n\t\tconst keyPrefixed = isArray ? this._getKeyPrefixArray(key) : this._getKeyPrefix(key);\n\t\tif (isArray && store.getMany === undefined) {\n\t\t\tconst promises = [];\n\t\t\tfor (const key of keyPrefixed) {\n\t\t\t\tpromises.push(Promise.resolve()\n\t\t\t\t\t.then(() => store.get(key))\n\t\t\t\t\t.then(data => (typeof data === 'string') ? this.opts.deserialize(data) : (this.opts.compression ? this.opts.deserialize(data) : data))\n\t\t\t\t\t.then(data => {\n\t\t\t\t\t\tif (data === undefined || data === null) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof data.expires === 'number' && Date.now() > data.expires) {\n\t\t\t\t\t\t\treturn this.delete(key).then(() => undefined);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (options && options.raw) ? data : data.value;\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn Promise.allSettled(promises)\n\t\t\t\t.then(values => {\n\t\t\t\t\tconst data = [];\n\t\t\t\t\tfor (const value of values) {\n\t\t\t\t\t\tdata.push(value.value);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn data;\n\t\t\t\t});\n\t\t}\n\n\t\treturn Promise.resolve()\n\t\t\t.then(() => isArray ? store.getMany(keyPrefixed) : store.get(keyPrefixed))\n\t\t\t.then(data => (typeof data === 'string') ? this.opts.deserialize(data) : (this.opts.compression ? this.opts.deserialize(data) : data))\n\t\t\t.then(data => {\n\t\t\t\tif (data === undefined || data === null) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tif (isArray) {\n\t\t\t\t\treturn data.map((row, index) => {\n\t\t\t\t\t\tif ((typeof row === 'string')) {\n\t\t\t\t\t\t\trow = this.opts.deserialize(row);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (row === undefined || row === null) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof row.expires === 'number' && Date.now() > row.expires) {\n\t\t\t\t\t\t\tthis.delete(key[index]).then(() => undefined);\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (options && options.raw) ? row : row.value;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (typeof data.expires === 'number' && Date.now() > data.expires) {\n\t\t\t\t\treturn this.delete(key).then(() => undefined);\n\t\t\t\t}\n\n\t\t\t\treturn (options && options.raw) ? data : data.value;\n\t\t\t});\n\t}\n\n\tset(key, value, ttl) {\n\t\tconst keyPrefixed = this._getKeyPrefix(key);\n\t\tif (typeof ttl === 'undefined') {\n\t\t\tttl = this.opts.ttl;\n\t\t}\n\n\t\tif (ttl === 0) {\n\t\t\tttl = undefined;\n\t\t}\n\n\t\tconst {store} = this.opts;\n\n\t\treturn Promise.resolve()\n\t\t\t.then(() => {\n\t\t\t\tconst expires = (typeof ttl === 'number') ? (Date.now() + ttl) : null;\n\t\t\t\tif (typeof value === 'symbol') {\n\t\t\t\t\tthis.emit('error', 'symbol cannot be serialized');\n\t\t\t\t}\n\n\t\t\t\tvalue = {value, expires};\n\t\t\t\treturn this.opts.serialize(value);\n\t\t\t})\n\t\t\t.then(value => store.set(keyPrefixed, value, ttl))\n\t\t\t.then(() => true);\n\t}\n\n\tdelete(key) {\n\t\tconst {store} = this.opts;\n\t\tif (Array.isArray(key)) {\n\t\t\tconst keyPrefixed = this._getKeyPrefixArray(key);\n\t\t\tif (store.deleteMany === undefined) {\n\t\t\t\tconst promises = [];\n\t\t\t\tfor (const key of keyPrefixed) {\n\t\t\t\t\tpromises.push(store.delete(key));\n\t\t\t\t}\n\n\t\t\t\treturn Promise.allSettled(promises)\n\t\t\t\t\t.then(values => values.every(x => x.value === true));\n\t\t\t}\n\n\t\t\treturn Promise.resolve()\n\t\t\t\t.then(() => store.deleteMany(keyPrefixed));\n\t\t}\n\n\t\tconst keyPrefixed = this._getKeyPrefix(key);\n\t\treturn Promise.resolve()\n\t\t\t.then(() => store.delete(keyPrefixed));\n\t}\n\n\tclear() {\n\t\tconst {store} = this.opts;\n\t\treturn Promise.resolve()\n\t\t\t.then(() => store.clear());\n\t}\n\n\thas(key) {\n\t\tconst keyPrefixed = this._getKeyPrefix(key);\n\t\tconst {store} = this.opts;\n\t\treturn Promise.resolve()\n\t\t\t.then(async () => {\n\t\t\t\tif (typeof store.has === 'function') {\n\t\t\t\t\treturn store.has(keyPrefixed);\n\t\t\t\t}\n\n\t\t\t\tconst value = await store.get(keyPrefixed);\n\t\t\t\treturn value !== undefined;\n\t\t\t});\n\t}\n\n\tdisconnect() {\n\t\tconst {store} = this.opts;\n\t\tif (typeof store.disconnect === 'function') {\n\t\t\treturn store.disconnect();\n\t\t}\n\t}\n}\n\nmodule.exports = Keyv;\n",
|
|
103
|
+
"// We define these manually to ensure they're always copied\n// even if they would move up the prototype chain\n// https://nodejs.org/api/http.html#http_class_http_incomingmessage\nconst knownProperties = [\n\t'aborted',\n\t'complete',\n\t'headers',\n\t'httpVersion',\n\t'httpVersionMinor',\n\t'httpVersionMajor',\n\t'method',\n\t'rawHeaders',\n\t'rawTrailers',\n\t'setTimeout',\n\t'socket',\n\t'statusCode',\n\t'statusMessage',\n\t'trailers',\n\t'url',\n];\n\nexport default function mimicResponse(fromStream, toStream) {\n\tif (toStream._readableState.autoDestroy) {\n\t\tthrow new Error('The second stream must have the `autoDestroy` option set to `false`');\n\t}\n\n\tconst fromProperties = new Set([...Object.keys(fromStream), ...knownProperties]);\n\n\tconst properties = {};\n\n\tfor (const property of fromProperties) {\n\t\t// Don't overwrite existing properties.\n\t\tif (property in toStream) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tproperties[property] = {\n\t\t\tget() {\n\t\t\t\tconst value = fromStream[property];\n\t\t\t\tconst isFunction = typeof value === 'function';\n\n\t\t\t\treturn isFunction ? value.bind(fromStream) : value;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tfromStream[property] = value;\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t};\n\t}\n\n\tObject.defineProperties(toStream, properties);\n\n\tfromStream.once('aborted', () => {\n\t\ttoStream.destroy();\n\n\t\ttoStream.emit('aborted');\n\t});\n\n\tfromStream.once('close', () => {\n\t\tif (fromStream.complete) {\n\t\t\tif (toStream.readable) {\n\t\t\t\ttoStream.once('end', () => {\n\t\t\t\t\ttoStream.emit('close');\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttoStream.emit('close');\n\t\t\t}\n\t\t} else {\n\t\t\ttoStream.emit('close');\n\t\t}\n\t});\n\n\treturn toStream;\n}\n",
|
|
104
|
+
"// Type definitions for cacheable-request 6.0\n// Project: https://github.com/lukechilds/cacheable-request#readme\n// Definitions by: BendingBender <https://github.com/BendingBender>\n// Paul Melnikow <https://github.com/paulmelnikow>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\nexport class RequestError extends Error {\n constructor(error) {\n super(error.message);\n Object.assign(this, error);\n }\n}\nexport class CacheError extends Error {\n constructor(error) {\n super(error.message);\n Object.assign(this, error);\n }\n}\n//# sourceMappingURL=types.js.map",
|
|
105
|
+
"import EventEmitter from 'node:events';\nimport urlLib from 'node:url';\nimport crypto from 'node:crypto';\nimport stream, { PassThrough as PassThroughStream } from 'node:stream';\nimport normalizeUrl from 'normalize-url';\nimport getStream from 'get-stream';\nimport CachePolicy from 'http-cache-semantics';\nimport Response from 'responselike';\nimport Keyv from 'keyv';\nimport mimicResponse from 'mimic-response';\nimport { CacheError, RequestError } from './types.js';\nclass CacheableRequest {\n constructor(cacheRequest, cacheAdapter) {\n this.hooks = new Map();\n this.request = () => (options, cb) => {\n let url;\n if (typeof options === 'string') {\n url = normalizeUrlObject(urlLib.parse(options));\n options = {};\n }\n else if (options instanceof urlLib.URL) {\n url = normalizeUrlObject(urlLib.parse(options.toString()));\n options = {};\n }\n else {\n const [pathname, ...searchParts] = (options.path ?? '').split('?');\n const search = searchParts.length > 0\n ? `?${searchParts.join('?')}`\n : '';\n url = normalizeUrlObject({ ...options, pathname, search });\n }\n options = {\n headers: {},\n method: 'GET',\n cache: true,\n strictTtl: false,\n automaticFailover: false,\n ...options,\n ...urlObjectToRequestOptions(url),\n };\n options.headers = Object.fromEntries(entries(options.headers).map(([key, value]) => [key.toLowerCase(), value]));\n const ee = new EventEmitter();\n const normalizedUrlString = normalizeUrl(urlLib.format(url), {\n stripWWW: false,\n removeTrailingSlash: false,\n stripAuthentication: false,\n });\n let key = `${options.method}:${normalizedUrlString}`;\n // POST, PATCH, and PUT requests may be cached, depending on the response\n // cache-control headers. As a result, the body of the request should be\n // added to the cache key in order to avoid collisions.\n if (options.body && options.method !== undefined && ['POST', 'PATCH', 'PUT'].includes(options.method)) {\n if (options.body instanceof stream.Readable) {\n // Streamed bodies should completely skip the cache because they may\n // or may not be hashable and in either case the stream would need to\n // close before the cache key could be generated.\n options.cache = false;\n }\n else {\n key += `:${crypto.createHash('md5').update(options.body).digest('hex')}`;\n }\n }\n let revalidate = false;\n let madeRequest = false;\n const makeRequest = (options_) => {\n madeRequest = true;\n let requestErrored = false;\n let requestErrorCallback = () => { };\n const requestErrorPromise = new Promise(resolve => {\n requestErrorCallback = () => {\n if (!requestErrored) {\n requestErrored = true;\n resolve();\n }\n };\n });\n const handler = async (response) => {\n if (revalidate) {\n response.status = response.statusCode;\n const revalidatedPolicy = CachePolicy.fromObject(revalidate.cachePolicy).revalidatedPolicy(options_, response);\n if (!revalidatedPolicy.modified) {\n response.resume();\n await new Promise(resolve => {\n // Skipping 'error' handler cause 'error' event should't be emitted for 304 response\n response\n .once('end', resolve);\n });\n const headers = convertHeaders(revalidatedPolicy.policy.responseHeaders());\n response = new Response({ statusCode: revalidate.statusCode, headers, body: revalidate.body, url: revalidate.url });\n response.cachePolicy = revalidatedPolicy.policy;\n response.fromCache = true;\n }\n }\n if (!response.fromCache) {\n response.cachePolicy = new CachePolicy(options_, response, options_);\n response.fromCache = false;\n }\n let clonedResponse;\n if (options_.cache && response.cachePolicy.storable()) {\n clonedResponse = cloneResponse(response);\n (async () => {\n try {\n const bodyPromise = getStream.buffer(response);\n await Promise.race([\n requestErrorPromise,\n new Promise(resolve => response.once('end', resolve)),\n new Promise(resolve => response.once('close', resolve)), // eslint-disable-line no-promise-executor-return\n ]);\n const body = await bodyPromise;\n let value = {\n url: response.url,\n statusCode: response.fromCache ? revalidate.statusCode : response.statusCode,\n body,\n cachePolicy: response.cachePolicy.toObject(),\n };\n let ttl = options_.strictTtl ? response.cachePolicy.timeToLive() : undefined;\n if (options_.maxTtl) {\n ttl = ttl ? Math.min(ttl, options_.maxTtl) : options_.maxTtl;\n }\n if (this.hooks.size > 0) {\n /* eslint-disable no-await-in-loop */\n for (const key_ of this.hooks.keys()) {\n value = await this.runHook(key_, value, response);\n }\n /* eslint-enable no-await-in-loop */\n }\n await this.cache.set(key, value, ttl);\n }\n catch (error) {\n ee.emit('error', new CacheError(error));\n }\n })();\n }\n else if (options_.cache && revalidate) {\n (async () => {\n try {\n await this.cache.delete(key);\n }\n catch (error) {\n ee.emit('error', new CacheError(error));\n }\n })();\n }\n ee.emit('response', clonedResponse ?? response);\n if (typeof cb === 'function') {\n cb(clonedResponse ?? response);\n }\n };\n try {\n const request_ = this.cacheRequest(options_, handler);\n request_.once('error', requestErrorCallback);\n request_.once('abort', requestErrorCallback);\n request_.once('destroy', requestErrorCallback);\n ee.emit('request', request_);\n }\n catch (error) {\n ee.emit('error', new RequestError(error));\n }\n };\n (async () => {\n const get = async (options_) => {\n await Promise.resolve();\n const cacheEntry = options_.cache ? await this.cache.get(key) : undefined;\n if (cacheEntry === undefined && !options_.forceRefresh) {\n makeRequest(options_);\n return;\n }\n const policy = CachePolicy.fromObject(cacheEntry.cachePolicy);\n if (policy.satisfiesWithoutRevalidation(options_) && !options_.forceRefresh) {\n const headers = convertHeaders(policy.responseHeaders());\n const response = new Response({ statusCode: cacheEntry.statusCode, headers, body: cacheEntry.body, url: cacheEntry.url });\n response.cachePolicy = policy;\n response.fromCache = true;\n ee.emit('response', response);\n if (typeof cb === 'function') {\n cb(response);\n }\n }\n else if (policy.satisfiesWithoutRevalidation(options_) && Date.now() >= policy.timeToLive() && options_.forceRefresh) {\n await this.cache.delete(key);\n options_.headers = policy.revalidationHeaders(options_);\n makeRequest(options_);\n }\n else {\n revalidate = cacheEntry;\n options_.headers = policy.revalidationHeaders(options_);\n makeRequest(options_);\n }\n };\n const errorHandler = (error) => ee.emit('error', new CacheError(error));\n if (this.cache instanceof Keyv) {\n const cachek = this.cache;\n cachek.once('error', errorHandler);\n ee.on('error', () => cachek.removeListener('error', errorHandler));\n ee.on('response', () => cachek.removeListener('error', errorHandler));\n }\n try {\n await get(options);\n }\n catch (error) {\n if (options.automaticFailover && !madeRequest) {\n makeRequest(options);\n }\n ee.emit('error', new CacheError(error));\n }\n })();\n return ee;\n };\n this.addHook = (name, fn) => {\n if (!this.hooks.has(name)) {\n this.hooks.set(name, fn);\n }\n };\n this.removeHook = (name) => this.hooks.delete(name);\n this.getHook = (name) => this.hooks.get(name);\n this.runHook = async (name, ...args) => this.hooks.get(name)?.(...args);\n if (cacheAdapter instanceof Keyv) {\n this.cache = cacheAdapter;\n }\n else if (typeof cacheAdapter === 'string') {\n this.cache = new Keyv({\n uri: cacheAdapter,\n namespace: 'cacheable-request',\n });\n }\n else {\n this.cache = new Keyv({\n store: cacheAdapter,\n namespace: 'cacheable-request',\n });\n }\n this.request = this.request.bind(this);\n this.cacheRequest = cacheRequest;\n }\n}\nconst entries = Object.entries;\nconst cloneResponse = (response) => {\n const clone = new PassThroughStream({ autoDestroy: false });\n mimicResponse(response, clone);\n return response.pipe(clone);\n};\nconst urlObjectToRequestOptions = (url) => {\n const options = { ...url };\n options.path = `${url.pathname || '/'}${url.search || ''}`;\n delete options.pathname;\n delete options.search;\n return options;\n};\nconst normalizeUrlObject = (url) => \n// If url was parsed by url.parse or new URL:\n// - hostname will be set\n// - host will be hostname[:port]\n// - port will be set if it was explicit in the parsed string\n// Otherwise, url was from request options:\n// - hostname or host may be set\n// - host shall not have port encoded\n({\n protocol: url.protocol,\n auth: url.auth,\n hostname: url.hostname || url.host || 'localhost',\n port: url.port,\n pathname: url.pathname,\n search: url.search,\n});\nconst convertHeaders = (headers) => {\n const result = [];\n for (const name of Object.keys(headers)) {\n result[name.toLowerCase()] = headers[name];\n }\n return result;\n};\nexport default CacheableRequest;\nexport * from './types.js';\nexport const onResponse = 'onResponse';\n//# sourceMappingURL=index.js.map",
|
|
106
|
+
"'use strict';\n\n// We define these manually to ensure they're always copied\n// even if they would move up the prototype chain\n// https://nodejs.org/api/http.html#http_class_http_incomingmessage\nconst knownProperties = [\n\t'aborted',\n\t'complete',\n\t'headers',\n\t'httpVersion',\n\t'httpVersionMinor',\n\t'httpVersionMajor',\n\t'method',\n\t'rawHeaders',\n\t'rawTrailers',\n\t'setTimeout',\n\t'socket',\n\t'statusCode',\n\t'statusMessage',\n\t'trailers',\n\t'url'\n];\n\nmodule.exports = (fromStream, toStream) => {\n\tif (toStream._readableState.autoDestroy) {\n\t\tthrow new Error('The second stream must have the `autoDestroy` option set to `false`');\n\t}\n\n\tconst fromProperties = new Set(Object.keys(fromStream).concat(knownProperties));\n\n\tconst properties = {};\n\n\tfor (const property of fromProperties) {\n\t\t// Don't overwrite existing properties.\n\t\tif (property in toStream) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tproperties[property] = {\n\t\t\tget() {\n\t\t\t\tconst value = fromStream[property];\n\t\t\t\tconst isFunction = typeof value === 'function';\n\n\t\t\t\treturn isFunction ? value.bind(fromStream) : value;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tfromStream[property] = value;\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false\n\t\t};\n\t}\n\n\tObject.defineProperties(toStream, properties);\n\n\tfromStream.once('aborted', () => {\n\t\ttoStream.destroy();\n\n\t\ttoStream.emit('aborted');\n\t});\n\n\tfromStream.once('close', () => {\n\t\tif (fromStream.complete) {\n\t\t\tif (toStream.readable) {\n\t\t\t\ttoStream.once('end', () => {\n\t\t\t\t\ttoStream.emit('close');\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttoStream.emit('close');\n\t\t\t}\n\t\t} else {\n\t\t\ttoStream.emit('close');\n\t\t}\n\t});\n\n\treturn toStream;\n};\n",
|
|
107
|
+
"'use strict';\nconst {Transform, PassThrough} = require('stream');\nconst zlib = require('zlib');\nconst mimicResponse = require('mimic-response');\n\nmodule.exports = response => {\n\tconst contentEncoding = (response.headers['content-encoding'] || '').toLowerCase();\n\n\tif (!['gzip', 'deflate', 'br'].includes(contentEncoding)) {\n\t\treturn response;\n\t}\n\n\t// TODO: Remove this when targeting Node.js 12.\n\tconst isBrotli = contentEncoding === 'br';\n\tif (isBrotli && typeof zlib.createBrotliDecompress !== 'function') {\n\t\tresponse.destroy(new Error('Brotli is not supported on Node.js < 12'));\n\t\treturn response;\n\t}\n\n\tlet isEmpty = true;\n\n\tconst checker = new Transform({\n\t\ttransform(data, _encoding, callback) {\n\t\t\tisEmpty = false;\n\n\t\t\tcallback(null, data);\n\t\t},\n\n\t\tflush(callback) {\n\t\t\tcallback();\n\t\t}\n\t});\n\n\tconst finalStream = new PassThrough({\n\t\tautoDestroy: false,\n\t\tdestroy(error, callback) {\n\t\t\tresponse.destroy();\n\n\t\t\tcallback(error);\n\t\t}\n\t});\n\n\tconst decompressStream = isBrotli ? zlib.createBrotliDecompress() : zlib.createUnzip();\n\n\tdecompressStream.once('error', error => {\n\t\tif (isEmpty && !response.readable) {\n\t\t\tfinalStream.end();\n\t\t\treturn;\n\t\t}\n\n\t\tfinalStream.destroy(error);\n\t});\n\n\tmimicResponse(response, finalStream);\n\tresponse.pipe(checker).pipe(decompressStream).pipe(finalStream);\n\n\treturn finalStream;\n};\n",
|
|
108
|
+
"'use strict';\nconst {PassThrough: PassThroughStream} = require('stream');\n\nmodule.exports = options => {\n\toptions = {...options};\n\n\tconst {array} = options;\n\tlet {encoding} = options;\n\tconst isBuffer = encoding === 'buffer';\n\tlet objectMode = false;\n\n\tif (array) {\n\t\tobjectMode = !(encoding || isBuffer);\n\t} else {\n\t\tencoding = encoding || 'utf8';\n\t}\n\n\tif (isBuffer) {\n\t\tencoding = null;\n\t}\n\n\tconst stream = new PassThroughStream({objectMode});\n\n\tif (encoding) {\n\t\tstream.setEncoding(encoding);\n\t}\n\n\tlet length = 0;\n\tconst chunks = [];\n\n\tstream.on('data', chunk => {\n\t\tchunks.push(chunk);\n\n\t\tif (objectMode) {\n\t\t\tlength = chunks.length;\n\t\t} else {\n\t\t\tlength += chunk.length;\n\t\t}\n\t});\n\n\tstream.getBufferedValue = () => {\n\t\tif (array) {\n\t\t\treturn chunks;\n\t\t}\n\n\t\treturn isBuffer ? Buffer.concat(chunks, length) : chunks.join('');\n\t};\n\n\tstream.getBufferedLength = () => length;\n\n\treturn stream;\n};\n",
|
|
109
|
+
"'use strict';\nconst {constants: BufferConstants} = require('buffer');\nconst stream = require('stream');\nconst {promisify} = require('util');\nconst bufferStream = require('./buffer-stream');\n\nconst streamPipelinePromisified = promisify(stream.pipeline);\n\nclass MaxBufferError extends Error {\n\tconstructor() {\n\t\tsuper('maxBuffer exceeded');\n\t\tthis.name = 'MaxBufferError';\n\t}\n}\n\nasync function getStream(inputStream, options) {\n\tif (!inputStream) {\n\t\tthrow new Error('Expected a stream');\n\t}\n\n\toptions = {\n\t\tmaxBuffer: Infinity,\n\t\t...options\n\t};\n\n\tconst {maxBuffer} = options;\n\tconst stream = bufferStream(options);\n\n\tawait new Promise((resolve, reject) => {\n\t\tconst rejectPromise = error => {\n\t\t\t// Don't retrieve an oversized buffer.\n\t\t\tif (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {\n\t\t\t\terror.bufferedData = stream.getBufferedValue();\n\t\t\t}\n\n\t\t\treject(error);\n\t\t};\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tawait streamPipelinePromisified(inputStream, stream);\n\t\t\t\tresolve();\n\t\t\t} catch (error) {\n\t\t\t\trejectPromise(error);\n\t\t\t}\n\t\t})();\n\n\t\tstream.on('data', () => {\n\t\t\tif (stream.getBufferedLength() > maxBuffer) {\n\t\t\t\trejectPromise(new MaxBufferError());\n\t\t\t}\n\t\t});\n\t});\n\n\treturn stream.getBufferedValue();\n}\n\nmodule.exports = getStream;\nmodule.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});\nmodule.exports.array = (stream, options) => getStream(stream, {...options, array: true});\nmodule.exports.MaxBufferError = MaxBufferError;\n",
|
|
110
|
+
"export const isFunction = (value) => (typeof value === \"function\");\n",
|
|
111
|
+
"import { isFunction } from \"./isFunction.js\";\nconst isAsyncIterable = (value) => (isFunction(value[Symbol.asyncIterator]));\nasync function* readStream(readable) {\n const reader = readable.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n}\nexport const getStreamIterator = (source) => {\n if (isAsyncIterable(source)) {\n return source;\n }\n if (isFunction(source.getReader)) {\n return readStream(source);\n }\n throw new TypeError(\"Unsupported data source: Expected either ReadableStream or async iterable.\");\n};\n",
|
|
112
|
+
"const alphabet = \"abcdefghijklmnopqrstuvwxyz0123456789\";\nexport function createBoundary() {\n let size = 16;\n let res = \"\";\n while (size--) {\n res += alphabet[(Math.random() * alphabet.length) << 0];\n }\n return res;\n}\n",
|
|
113
|
+
"export const normalizeValue = (value) => String(value)\n .replace(/\\r|\\n/g, (match, i, str) => {\n if ((match === \"\\r\" && str[i + 1] !== \"\\n\")\n || (match === \"\\n\" && str[i - 1] !== \"\\r\")) {\n return \"\\r\\n\";\n }\n return match;\n});\n",
|
|
114
|
+
"const getType = (value) => (Object.prototype.toString.call(value).slice(8, -1).toLowerCase());\nexport function isPlainObject(value) {\n if (getType(value) !== \"object\") {\n return false;\n }\n const pp = Object.getPrototypeOf(value);\n if (pp === null || pp === undefined) {\n return true;\n }\n const Ctor = pp.constructor && pp.constructor.toString();\n return Ctor === Object.toString();\n}\n",
|
|
115
|
+
"function getProperty(target, prop) {\n if (typeof prop === \"string\") {\n for (const [name, value] of Object.entries(target)) {\n if (prop.toLowerCase() === name.toLowerCase()) {\n return value;\n }\n }\n }\n return undefined;\n}\nexport const proxyHeaders = (object) => new Proxy(object, {\n get: (target, prop) => getProperty(target, prop),\n has: (target, prop) => getProperty(target, prop) !== undefined\n});\n",
|
|
116
|
+
"import { isFunction } from \"./isFunction.js\";\nexport const isFormData = (value) => Boolean(value\n && isFunction(value.constructor)\n && value[Symbol.toStringTag] === \"FormData\"\n && isFunction(value.append)\n && isFunction(value.getAll)\n && isFunction(value.entries)\n && isFunction(value[Symbol.iterator]));\n",
|
|
117
|
+
"export const escapeName = (name) => String(name)\n .replace(/\\r/g, \"%0D\")\n .replace(/\\n/g, \"%0A\")\n .replace(/\"/g, \"%22\");\n",
|
|
118
|
+
"import { isFunction } from \"./isFunction.js\";\nexport const isFile = (value) => Boolean(value\n && typeof value === \"object\"\n && isFunction(value.constructor)\n && value[Symbol.toStringTag] === \"File\"\n && isFunction(value.stream)\n && value.name != null);\nexport const isFileLike = isFile;\n",
|
|
119
|
+
"var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _FormDataEncoder_instances, _FormDataEncoder_CRLF, _FormDataEncoder_CRLF_BYTES, _FormDataEncoder_CRLF_BYTES_LENGTH, _FormDataEncoder_DASHES, _FormDataEncoder_encoder, _FormDataEncoder_footer, _FormDataEncoder_form, _FormDataEncoder_options, _FormDataEncoder_getFieldHeader, _FormDataEncoder_getContentLength;\nimport { getStreamIterator } from \"./util/getStreamIterator.js\";\nimport { createBoundary } from \"./util/createBoundary.js\";\nimport { normalizeValue } from \"./util/normalizeValue.js\";\nimport { isPlainObject } from \"./util/isPlainObject.js\";\nimport { proxyHeaders } from \"./util/proxyHeaders.js\";\nimport { isFormData } from \"./util/isFormData.js\";\nimport { escapeName } from \"./util/escapeName.js\";\nimport { isFile } from \"./util/isFile.js\";\nconst defaultOptions = {\n enableAdditionalHeaders: false\n};\nconst readonlyProp = { writable: false, configurable: false };\nexport class FormDataEncoder {\n constructor(form, boundaryOrOptions, options) {\n _FormDataEncoder_instances.add(this);\n _FormDataEncoder_CRLF.set(this, \"\\r\\n\");\n _FormDataEncoder_CRLF_BYTES.set(this, void 0);\n _FormDataEncoder_CRLF_BYTES_LENGTH.set(this, void 0);\n _FormDataEncoder_DASHES.set(this, \"-\".repeat(2));\n _FormDataEncoder_encoder.set(this, new TextEncoder());\n _FormDataEncoder_footer.set(this, void 0);\n _FormDataEncoder_form.set(this, void 0);\n _FormDataEncoder_options.set(this, void 0);\n if (!isFormData(form)) {\n throw new TypeError(\"Expected first argument to be a FormData instance.\");\n }\n let boundary;\n if (isPlainObject(boundaryOrOptions)) {\n options = boundaryOrOptions;\n }\n else {\n boundary = boundaryOrOptions;\n }\n if (!boundary) {\n boundary = createBoundary();\n }\n if (typeof boundary !== \"string\") {\n throw new TypeError(\"Expected boundary argument to be a string.\");\n }\n if (options && !isPlainObject(options)) {\n throw new TypeError(\"Expected options argument to be an object.\");\n }\n __classPrivateFieldSet(this, _FormDataEncoder_form, Array.from(form.entries()), \"f\");\n __classPrivateFieldSet(this, _FormDataEncoder_options, { ...defaultOptions, ...options }, \"f\");\n __classPrivateFieldSet(this, _FormDataEncoder_CRLF_BYTES, __classPrivateFieldGet(this, _FormDataEncoder_encoder, \"f\").encode(__classPrivateFieldGet(this, _FormDataEncoder_CRLF, \"f\")), \"f\");\n __classPrivateFieldSet(this, _FormDataEncoder_CRLF_BYTES_LENGTH, __classPrivateFieldGet(this, _FormDataEncoder_CRLF_BYTES, \"f\").byteLength, \"f\");\n this.boundary = `form-data-boundary-${boundary}`;\n this.contentType = `multipart/form-data; boundary=${this.boundary}`;\n __classPrivateFieldSet(this, _FormDataEncoder_footer, __classPrivateFieldGet(this, _FormDataEncoder_encoder, \"f\").encode(`${__classPrivateFieldGet(this, _FormDataEncoder_DASHES, \"f\")}${this.boundary}${__classPrivateFieldGet(this, _FormDataEncoder_DASHES, \"f\")}${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, \"f\").repeat(2)}`), \"f\");\n const headers = {\n \"Content-Type\": this.contentType\n };\n const contentLength = __classPrivateFieldGet(this, _FormDataEncoder_instances, \"m\", _FormDataEncoder_getContentLength).call(this);\n if (contentLength) {\n this.contentLength = contentLength;\n headers[\"Content-Length\"] = contentLength;\n }\n this.headers = proxyHeaders(Object.freeze(headers));\n Object.defineProperties(this, {\n boundary: readonlyProp,\n contentType: readonlyProp,\n contentLength: readonlyProp,\n headers: readonlyProp\n });\n }\n getContentLength() {\n return this.contentLength == null ? undefined : Number(this.contentLength);\n }\n *values() {\n for (const [name, raw] of __classPrivateFieldGet(this, _FormDataEncoder_form, \"f\")) {\n const value = isFile(raw) ? raw : __classPrivateFieldGet(this, _FormDataEncoder_encoder, \"f\").encode(normalizeValue(raw));\n yield __classPrivateFieldGet(this, _FormDataEncoder_instances, \"m\", _FormDataEncoder_getFieldHeader).call(this, name, value);\n yield value;\n yield __classPrivateFieldGet(this, _FormDataEncoder_CRLF_BYTES, \"f\");\n }\n yield __classPrivateFieldGet(this, _FormDataEncoder_footer, \"f\");\n }\n async *encode() {\n for (const part of this.values()) {\n if (isFile(part)) {\n yield* getStreamIterator(part.stream());\n }\n else {\n yield part;\n }\n }\n }\n [(_FormDataEncoder_CRLF = new WeakMap(), _FormDataEncoder_CRLF_BYTES = new WeakMap(), _FormDataEncoder_CRLF_BYTES_LENGTH = new WeakMap(), _FormDataEncoder_DASHES = new WeakMap(), _FormDataEncoder_encoder = new WeakMap(), _FormDataEncoder_footer = new WeakMap(), _FormDataEncoder_form = new WeakMap(), _FormDataEncoder_options = new WeakMap(), _FormDataEncoder_instances = new WeakSet(), _FormDataEncoder_getFieldHeader = function _FormDataEncoder_getFieldHeader(name, value) {\n let header = \"\";\n header += `${__classPrivateFieldGet(this, _FormDataEncoder_DASHES, \"f\")}${this.boundary}${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, \"f\")}`;\n header += `Content-Disposition: form-data; name=\"${escapeName(name)}\"`;\n if (isFile(value)) {\n header += `; filename=\"${escapeName(value.name)}\"${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, \"f\")}`;\n header += `Content-Type: ${value.type || \"application/octet-stream\"}`;\n }\n const size = isFile(value) ? value.size : value.byteLength;\n if (__classPrivateFieldGet(this, _FormDataEncoder_options, \"f\").enableAdditionalHeaders === true\n && size != null\n && !isNaN(size)) {\n header += `${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, \"f\")}Content-Length: ${isFile(value) ? value.size : value.byteLength}`;\n }\n return __classPrivateFieldGet(this, _FormDataEncoder_encoder, \"f\").encode(`${header}${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, \"f\").repeat(2)}`);\n }, _FormDataEncoder_getContentLength = function _FormDataEncoder_getContentLength() {\n let length = 0;\n for (const [name, raw] of __classPrivateFieldGet(this, _FormDataEncoder_form, \"f\")) {\n const value = isFile(raw) ? raw : __classPrivateFieldGet(this, _FormDataEncoder_encoder, \"f\").encode(normalizeValue(raw));\n const size = isFile(value) ? value.size : value.byteLength;\n if (size == null || isNaN(size)) {\n return undefined;\n }\n length += __classPrivateFieldGet(this, _FormDataEncoder_instances, \"m\", _FormDataEncoder_getFieldHeader).call(this, name, value).byteLength;\n length += size;\n length += __classPrivateFieldGet(this, _FormDataEncoder_CRLF_BYTES_LENGTH, \"f\");\n }\n return String(length + __classPrivateFieldGet(this, _FormDataEncoder_footer, \"f\").byteLength);\n }, Symbol.iterator)]() {\n return this.values();\n }\n [Symbol.asyncIterator]() {\n return this.encode();\n }\n}\n",
|
|
120
|
+
"export * from \"./FormDataEncoder.js\";\nexport * from \"./FileLike.js\";\nexport * from \"./FormDataLike.js\";\nexport * from \"./util/isFile.js\";\nexport * from \"./util/isFormData.js\";\n",
|
|
121
|
+
"import is from '@sindresorhus/is';\nexport default function isFormData(body) {\n return is.nodeStream(body) && is.function_(body.getBoundary);\n}\n",
|
|
122
|
+
"import { Buffer } from 'node:buffer';\nimport { promisify } from 'node:util';\nimport is from '@sindresorhus/is';\nimport isFormData from './is-form-data.js';\nexport default async function getBodySize(body, headers) {\n if (headers && 'content-length' in headers) {\n return Number(headers['content-length']);\n }\n if (!body) {\n return 0;\n }\n if (is.string(body)) {\n return Buffer.byteLength(body);\n }\n if (is.buffer(body)) {\n return body.length;\n }\n if (isFormData(body)) {\n return promisify(body.getLength.bind(body))();\n }\n return undefined;\n}\n",
|
|
123
|
+
"export default function proxyEvents(from, to, events) {\n const eventFunctions = {};\n for (const event of events) {\n const eventFunction = (...args) => {\n to.emit(event, ...args);\n };\n eventFunctions[event] = eventFunction;\n from.on(event, eventFunction);\n }\n return () => {\n for (const [event, eventFunction] of Object.entries(eventFunctions)) {\n from.off(event, eventFunction);\n }\n };\n}\n",
|
|
124
|
+
"// When attaching listeners, it's very easy to forget about them.\n// Especially if you do error handling and set timeouts.\n// So instead of checking if it's proper to throw an error on every timeout ever,\n// use this simple tool which will remove all listeners you have attached.\nexport default function unhandle() {\n const handlers = [];\n return {\n once(origin, event, fn) {\n origin.once(event, fn);\n handlers.push({ origin, event, fn });\n },\n unhandleAll() {\n for (const handler of handlers) {\n const { origin, event, fn } = handler;\n origin.removeListener(event, fn);\n }\n handlers.length = 0;\n },\n };\n}\n",
|
|
125
|
+
"import net from 'node:net';\nimport unhandler from './utils/unhandle.js';\nconst reentry = Symbol('reentry');\nconst noop = () => { };\nexport class TimeoutError extends Error {\n constructor(threshold, event) {\n super(`Timeout awaiting '${event}' for ${threshold}ms`);\n Object.defineProperty(this, \"event\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: event\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.name = 'TimeoutError';\n this.code = 'ETIMEDOUT';\n }\n}\nexport default function timedOut(request, delays, options) {\n if (reentry in request) {\n return noop;\n }\n request[reentry] = true;\n const cancelers = [];\n const { once, unhandleAll } = unhandler();\n const addTimeout = (delay, callback, event) => {\n const timeout = setTimeout(callback, delay, delay, event);\n timeout.unref?.();\n const cancel = () => {\n clearTimeout(timeout);\n };\n cancelers.push(cancel);\n return cancel;\n };\n const { host, hostname } = options;\n const timeoutHandler = (delay, event) => {\n request.destroy(new TimeoutError(delay, event));\n };\n const cancelTimeouts = () => {\n for (const cancel of cancelers) {\n cancel();\n }\n unhandleAll();\n };\n request.once('error', error => {\n cancelTimeouts();\n // Save original behavior\n /* istanbul ignore next */\n if (request.listenerCount('error') === 0) {\n throw error;\n }\n });\n if (delays.request !== undefined) {\n const cancelTimeout = addTimeout(delays.request, timeoutHandler, 'request');\n once(request, 'response', (response) => {\n once(response, 'end', cancelTimeout);\n });\n }\n if (delays.socket !== undefined) {\n const { socket } = delays;\n const socketTimeoutHandler = () => {\n timeoutHandler(socket, 'socket');\n };\n request.setTimeout(socket, socketTimeoutHandler);\n // `request.setTimeout(0)` causes a memory leak.\n // We can just remove the listener and forget about the timer - it's unreffed.\n // See https://github.com/sindresorhus/got/issues/690\n cancelers.push(() => {\n request.removeListener('timeout', socketTimeoutHandler);\n });\n }\n const hasLookup = delays.lookup !== undefined;\n const hasConnect = delays.connect !== undefined;\n const hasSecureConnect = delays.secureConnect !== undefined;\n const hasSend = delays.send !== undefined;\n if (hasLookup || hasConnect || hasSecureConnect || hasSend) {\n once(request, 'socket', (socket) => {\n const { socketPath } = request;\n /* istanbul ignore next: hard to test */\n if (socket.connecting) {\n const hasPath = Boolean(socketPath ?? net.isIP(hostname ?? host ?? '') !== 0);\n if (hasLookup && !hasPath && socket.address().address === undefined) {\n const cancelTimeout = addTimeout(delays.lookup, timeoutHandler, 'lookup');\n once(socket, 'lookup', cancelTimeout);\n }\n if (hasConnect) {\n const timeConnect = () => addTimeout(delays.connect, timeoutHandler, 'connect');\n if (hasPath) {\n once(socket, 'connect', timeConnect());\n }\n else {\n once(socket, 'lookup', (error) => {\n if (error === null) {\n once(socket, 'connect', timeConnect());\n }\n });\n }\n }\n if (hasSecureConnect && options.protocol === 'https:') {\n once(socket, 'connect', () => {\n const cancelTimeout = addTimeout(delays.secureConnect, timeoutHandler, 'secureConnect');\n once(socket, 'secureConnect', cancelTimeout);\n });\n }\n }\n if (hasSend) {\n const timeRequest = () => addTimeout(delays.send, timeoutHandler, 'send');\n /* istanbul ignore next: hard to test */\n if (socket.connecting) {\n once(socket, 'connect', () => {\n once(request, 'upload-complete', timeRequest());\n });\n }\n else {\n once(request, 'upload-complete', timeRequest());\n }\n }\n });\n }\n if (delays.response !== undefined) {\n once(request, 'upload-complete', () => {\n const cancelTimeout = addTimeout(delays.response, timeoutHandler, 'response');\n once(request, 'response', cancelTimeout);\n });\n }\n if (delays.read !== undefined) {\n once(request, 'response', (response) => {\n const cancelTimeout = addTimeout(delays.read, timeoutHandler, 'read');\n once(response, 'end', cancelTimeout);\n });\n }\n return cancelTimeouts;\n}\n",
|
|
126
|
+
"import is from '@sindresorhus/is';\nexport default function urlToOptions(url) {\n // Cast to URL\n url = url;\n const options = {\n protocol: url.protocol,\n hostname: is.string(url.hostname) && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname,\n host: url.host,\n hash: url.hash,\n search: url.search,\n pathname: url.pathname,\n href: url.href,\n path: `${url.pathname || ''}${url.search || ''}`,\n };\n if (is.string(url.port) && url.port.length > 0) {\n options.port = Number(url.port);\n }\n if (url.username || url.password) {\n options.auth = `${url.username || ''}:${url.password || ''}`;\n }\n return options;\n}\n",
|
|
127
|
+
"export default class WeakableMap {\n constructor() {\n Object.defineProperty(this, \"weakMap\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"map\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.weakMap = new WeakMap();\n this.map = new Map();\n }\n set(key, value) {\n if (typeof key === 'object') {\n this.weakMap.set(key, value);\n }\n else {\n this.map.set(key, value);\n }\n }\n get(key) {\n if (typeof key === 'object') {\n return this.weakMap.get(key);\n }\n return this.map.get(key);\n }\n has(key) {\n if (typeof key === 'object') {\n return this.weakMap.has(key);\n }\n return this.map.has(key);\n }\n}\n",
|
|
128
|
+
"const calculateRetryDelay = ({ attemptCount, retryOptions, error, retryAfter, computedValue, }) => {\n if (error.name === 'RetryError') {\n return 1;\n }\n if (attemptCount > retryOptions.limit) {\n return 0;\n }\n const hasMethod = retryOptions.methods.includes(error.options.method);\n const hasErrorCode = retryOptions.errorCodes.includes(error.code);\n const hasStatusCode = error.response && retryOptions.statusCodes.includes(error.response.statusCode);\n if (!hasMethod || (!hasErrorCode && !hasStatusCode)) {\n return 0;\n }\n if (error.response) {\n if (retryAfter) {\n // In this case `computedValue` is `options.request.timeout`\n if (retryAfter > computedValue) {\n return 0;\n }\n return retryAfter;\n }\n if (error.response.statusCode === 413) {\n return 0;\n }\n }\n const noise = Math.random() * retryOptions.noise;\n return Math.min(((2 ** (attemptCount - 1)) * 1000), retryOptions.backoffLimit) + noise;\n};\nexport default calculateRetryDelay;\n",
|
|
129
|
+
"import {\n\tV4MAPPED,\n\tADDRCONFIG,\n\tALL,\n\tpromises as dnsPromises,\n\tlookup as dnsLookup\n} from 'node:dns';\nimport {promisify} from 'node:util';\nimport os from 'node:os';\n\nconst {Resolver: AsyncResolver} = dnsPromises;\n\nconst kCacheableLookupCreateConnection = Symbol('cacheableLookupCreateConnection');\nconst kCacheableLookupInstance = Symbol('cacheableLookupInstance');\nconst kExpires = Symbol('expires');\n\nconst supportsALL = typeof ALL === 'number';\n\nconst verifyAgent = agent => {\n\tif (!(agent && typeof agent.createConnection === 'function')) {\n\t\tthrow new Error('Expected an Agent instance as the first argument');\n\t}\n};\n\nconst map4to6 = entries => {\n\tfor (const entry of entries) {\n\t\tif (entry.family === 6) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tentry.address = `::ffff:${entry.address}`;\n\t\tentry.family = 6;\n\t}\n};\n\nconst getIfaceInfo = () => {\n\tlet has4 = false;\n\tlet has6 = false;\n\n\tfor (const device of Object.values(os.networkInterfaces())) {\n\t\tfor (const iface of device) {\n\t\t\tif (iface.internal) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (iface.family === 'IPv6') {\n\t\t\t\thas6 = true;\n\t\t\t} else {\n\t\t\t\thas4 = true;\n\t\t\t}\n\n\t\t\tif (has4 && has6) {\n\t\t\t\treturn {has4, has6};\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {has4, has6};\n};\n\nconst isIterable = map => {\n\treturn Symbol.iterator in map;\n};\n\nconst ignoreNoResultErrors = dnsPromise => {\n\treturn dnsPromise.catch(error => {\n\t\tif (\n\t\t\terror.code === 'ENODATA' ||\n\t\t\terror.code === 'ENOTFOUND' ||\n\t\t\terror.code === 'ENOENT' // Windows: name exists, but not this record type\n\t\t) {\n\t\t\treturn [];\n\t\t}\n\n\t\tthrow error;\n\t});\n};\n\nconst ttl = {ttl: true};\nconst all = {all: true};\nconst all4 = {all: true, family: 4};\nconst all6 = {all: true, family: 6};\n\nexport default class CacheableLookup {\n\tconstructor({\n\t\tcache = new Map(),\n\t\tmaxTtl = Infinity,\n\t\tfallbackDuration = 3600,\n\t\terrorTtl = 0.15,\n\t\tresolver = new AsyncResolver(),\n\t\tlookup = dnsLookup\n\t} = {}) {\n\t\tthis.maxTtl = maxTtl;\n\t\tthis.errorTtl = errorTtl;\n\n\t\tthis._cache = cache;\n\t\tthis._resolver = resolver;\n\t\tthis._dnsLookup = lookup && promisify(lookup);\n\t\tthis.stats = {\n\t\t\tcache: 0,\n\t\t\tquery: 0\n\t\t};\n\n\t\tif (this._resolver instanceof AsyncResolver) {\n\t\t\tthis._resolve4 = this._resolver.resolve4.bind(this._resolver);\n\t\t\tthis._resolve6 = this._resolver.resolve6.bind(this._resolver);\n\t\t} else {\n\t\t\tthis._resolve4 = promisify(this._resolver.resolve4.bind(this._resolver));\n\t\t\tthis._resolve6 = promisify(this._resolver.resolve6.bind(this._resolver));\n\t\t}\n\n\t\tthis._iface = getIfaceInfo();\n\n\t\tthis._pending = {};\n\t\tthis._nextRemovalTime = false;\n\t\tthis._hostnamesToFallback = new Set();\n\n\t\tthis.fallbackDuration = fallbackDuration;\n\n\t\tif (fallbackDuration > 0) {\n\t\t\tconst interval = setInterval(() => {\n\t\t\t\tthis._hostnamesToFallback.clear();\n\t\t\t}, fallbackDuration * 1000);\n\n\t\t\t/* istanbul ignore next: There is no `interval.unref()` when running inside an Electron renderer */\n\t\t\tif (interval.unref) {\n\t\t\t\tinterval.unref();\n\t\t\t}\n\n\t\t\tthis._fallbackInterval = interval;\n\t\t}\n\n\t\tthis.lookup = this.lookup.bind(this);\n\t\tthis.lookupAsync = this.lookupAsync.bind(this);\n\t}\n\n\tset servers(servers) {\n\t\tthis.clear();\n\n\t\tthis._resolver.setServers(servers);\n\t}\n\n\tget servers() {\n\t\treturn this._resolver.getServers();\n\t}\n\n\tlookup(hostname, options, callback) {\n\t\tif (typeof options === 'function') {\n\t\t\tcallback = options;\n\t\t\toptions = {};\n\t\t} else if (typeof options === 'number') {\n\t\t\toptions = {\n\t\t\t\tfamily: options\n\t\t\t};\n\t\t}\n\n\t\tif (!callback) {\n\t\t\tthrow new Error('Callback must be a function.');\n\t\t}\n\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\tthis.lookupAsync(hostname, options).then(result => {\n\t\t\tif (options.all) {\n\t\t\t\tcallback(null, result);\n\t\t\t} else {\n\t\t\t\tcallback(null, result.address, result.family, result.expires, result.ttl, result.source);\n\t\t\t}\n\t\t}, callback);\n\t}\n\n\tasync lookupAsync(hostname, options = {}) {\n\t\tif (typeof options === 'number') {\n\t\t\toptions = {\n\t\t\t\tfamily: options\n\t\t\t};\n\t\t}\n\n\t\tlet cached = await this.query(hostname);\n\n\t\tif (options.family === 6) {\n\t\t\tconst filtered = cached.filter(entry => entry.family === 6);\n\n\t\t\tif (options.hints & V4MAPPED) {\n\t\t\t\tif ((supportsALL && options.hints & ALL) || filtered.length === 0) {\n\t\t\t\t\tmap4to6(cached);\n\t\t\t\t} else {\n\t\t\t\t\tcached = filtered;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcached = filtered;\n\t\t\t}\n\t\t} else if (options.family === 4) {\n\t\t\tcached = cached.filter(entry => entry.family === 4);\n\t\t}\n\n\t\tif (options.hints & ADDRCONFIG) {\n\t\t\tconst {_iface} = this;\n\t\t\tcached = cached.filter(entry => entry.family === 6 ? _iface.has6 : _iface.has4);\n\t\t}\n\n\t\tif (cached.length === 0) {\n\t\t\tconst error = new Error(`cacheableLookup ENOTFOUND ${hostname}`);\n\t\t\terror.code = 'ENOTFOUND';\n\t\t\terror.hostname = hostname;\n\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (options.all) {\n\t\t\treturn cached;\n\t\t}\n\n\t\treturn cached[0];\n\t}\n\n\tasync query(hostname) {\n\t\tlet source = 'cache';\n\t\tlet cached = await this._cache.get(hostname);\n\n\t\tif (cached) {\n\t\t\tthis.stats.cache++;\n\t\t}\n\n\t\tif (!cached) {\n\t\t\tconst pending = this._pending[hostname];\n\t\t\tif (pending) {\n\t\t\t\tthis.stats.cache++;\n\t\t\t\tcached = await pending;\n\t\t\t} else {\n\t\t\t\tsource = 'query';\n\t\t\t\tconst newPromise = this.queryAndCache(hostname);\n\t\t\t\tthis._pending[hostname] = newPromise;\n\t\t\t\tthis.stats.query++;\n\t\t\t\ttry {\n\t\t\t\t\tcached = await newPromise;\n\t\t\t\t} finally {\n\t\t\t\t\tdelete this._pending[hostname];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tcached = cached.map(entry => {\n\t\t\treturn {...entry, source};\n\t\t});\n\n\t\treturn cached;\n\t}\n\n\tasync _resolve(hostname) {\n\t\t// ANY is unsafe as it doesn't trigger new queries in the underlying server.\n\t\tconst [A, AAAA] = await Promise.all([\n\t\t\tignoreNoResultErrors(this._resolve4(hostname, ttl)),\n\t\t\tignoreNoResultErrors(this._resolve6(hostname, ttl))\n\t\t]);\n\n\t\tlet aTtl = 0;\n\t\tlet aaaaTtl = 0;\n\t\tlet cacheTtl = 0;\n\n\t\tconst now = Date.now();\n\n\t\tfor (const entry of A) {\n\t\t\tentry.family = 4;\n\t\t\tentry.expires = now + (entry.ttl * 1000);\n\n\t\t\taTtl = Math.max(aTtl, entry.ttl);\n\t\t}\n\n\t\tfor (const entry of AAAA) {\n\t\t\tentry.family = 6;\n\t\t\tentry.expires = now + (entry.ttl * 1000);\n\n\t\t\taaaaTtl = Math.max(aaaaTtl, entry.ttl);\n\t\t}\n\n\t\tif (A.length > 0) {\n\t\t\tif (AAAA.length > 0) {\n\t\t\t\tcacheTtl = Math.min(aTtl, aaaaTtl);\n\t\t\t} else {\n\t\t\t\tcacheTtl = aTtl;\n\t\t\t}\n\t\t} else {\n\t\t\tcacheTtl = aaaaTtl;\n\t\t}\n\n\t\treturn {\n\t\t\tentries: [\n\t\t\t\t...A,\n\t\t\t\t...AAAA\n\t\t\t],\n\t\t\tcacheTtl\n\t\t};\n\t}\n\n\tasync _lookup(hostname) {\n\t\ttry {\n\t\t\tconst [A, AAAA] = await Promise.all([\n\t\t\t\t// Passing {all: true} doesn't return all IPv4 and IPv6 entries.\n\t\t\t\t// See https://github.com/szmarczak/cacheable-lookup/issues/42\n\t\t\t\tignoreNoResultErrors(this._dnsLookup(hostname, all4)),\n\t\t\t\tignoreNoResultErrors(this._dnsLookup(hostname, all6))\n\t\t\t]);\n\n\t\t\treturn {\n\t\t\t\tentries: [\n\t\t\t\t\t...A,\n\t\t\t\t\t...AAAA\n\t\t\t\t],\n\t\t\t\tcacheTtl: 0\n\t\t\t};\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tentries: [],\n\t\t\t\tcacheTtl: 0\n\t\t\t};\n\t\t}\n\t}\n\n\tasync _set(hostname, data, cacheTtl) {\n\t\tif (this.maxTtl > 0 && cacheTtl > 0) {\n\t\t\tcacheTtl = Math.min(cacheTtl, this.maxTtl) * 1000;\n\t\t\tdata[kExpires] = Date.now() + cacheTtl;\n\n\t\t\ttry {\n\t\t\t\tawait this._cache.set(hostname, data, cacheTtl);\n\t\t\t} catch (error) {\n\t\t\t\tthis.lookupAsync = async () => {\n\t\t\t\t\tconst cacheError = new Error('Cache Error. Please recreate the CacheableLookup instance.');\n\t\t\t\t\tcacheError.cause = error;\n\n\t\t\t\t\tthrow cacheError;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (isIterable(this._cache)) {\n\t\t\t\tthis._tick(cacheTtl);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync queryAndCache(hostname) {\n\t\tif (this._hostnamesToFallback.has(hostname)) {\n\t\t\treturn this._dnsLookup(hostname, all);\n\t\t}\n\n\t\tlet query = await this._resolve(hostname);\n\n\t\tif (query.entries.length === 0 && this._dnsLookup) {\n\t\t\tquery = await this._lookup(hostname);\n\n\t\t\tif (query.entries.length !== 0 && this.fallbackDuration > 0) {\n\t\t\t\t// Use `dns.lookup(...)` for that particular hostname\n\t\t\t\tthis._hostnamesToFallback.add(hostname);\n\t\t\t}\n\t\t}\n\n\t\tconst cacheTtl = query.entries.length === 0 ? this.errorTtl : query.cacheTtl;\n\t\tawait this._set(hostname, query.entries, cacheTtl);\n\n\t\treturn query.entries;\n\t}\n\n\t_tick(ms) {\n\t\tconst nextRemovalTime = this._nextRemovalTime;\n\n\t\tif (!nextRemovalTime || ms < nextRemovalTime) {\n\t\t\tclearTimeout(this._removalTimeout);\n\n\t\t\tthis._nextRemovalTime = ms;\n\n\t\t\tthis._removalTimeout = setTimeout(() => {\n\t\t\t\tthis._nextRemovalTime = false;\n\n\t\t\t\tlet nextExpiry = Infinity;\n\n\t\t\t\tconst now = Date.now();\n\n\t\t\t\tfor (const [hostname, entries] of this._cache) {\n\t\t\t\t\tconst expires = entries[kExpires];\n\n\t\t\t\t\tif (now >= expires) {\n\t\t\t\t\t\tthis._cache.delete(hostname);\n\t\t\t\t\t} else if (expires < nextExpiry) {\n\t\t\t\t\t\tnextExpiry = expires;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (nextExpiry !== Infinity) {\n\t\t\t\t\tthis._tick(nextExpiry - now);\n\t\t\t\t}\n\t\t\t}, ms);\n\n\t\t\t/* istanbul ignore next: There is no `timeout.unref()` when running inside an Electron renderer */\n\t\t\tif (this._removalTimeout.unref) {\n\t\t\t\tthis._removalTimeout.unref();\n\t\t\t}\n\t\t}\n\t}\n\n\tinstall(agent) {\n\t\tverifyAgent(agent);\n\n\t\tif (kCacheableLookupCreateConnection in agent) {\n\t\t\tthrow new Error('CacheableLookup has been already installed');\n\t\t}\n\n\t\tagent[kCacheableLookupCreateConnection] = agent.createConnection;\n\t\tagent[kCacheableLookupInstance] = this;\n\n\t\tagent.createConnection = (options, callback) => {\n\t\t\tif (!('lookup' in options)) {\n\t\t\t\toptions.lookup = this.lookup;\n\t\t\t}\n\n\t\t\treturn agent[kCacheableLookupCreateConnection](options, callback);\n\t\t};\n\t}\n\n\tuninstall(agent) {\n\t\tverifyAgent(agent);\n\n\t\tif (agent[kCacheableLookupCreateConnection]) {\n\t\t\tif (agent[kCacheableLookupInstance] !== this) {\n\t\t\t\tthrow new Error('The agent is not owned by this CacheableLookup instance');\n\t\t\t}\n\n\t\t\tagent.createConnection = agent[kCacheableLookupCreateConnection];\n\n\t\t\tdelete agent[kCacheableLookupCreateConnection];\n\t\t\tdelete agent[kCacheableLookupInstance];\n\t\t}\n\t}\n\n\tupdateInterfaceInfo() {\n\t\tconst {_iface} = this;\n\n\t\tthis._iface = getIfaceInfo();\n\n\t\tif ((_iface.has4 && !this._iface.has4) || (_iface.has6 && !this._iface.has6)) {\n\t\t\tthis._cache.clear();\n\t\t}\n\t}\n\n\tclear(hostname) {\n\t\tif (hostname) {\n\t\t\tthis._cache.delete(hostname);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._cache.clear();\n\t}\n}\n",
|
|
130
|
+
"'use strict';\n\nclass QuickLRU {\n\tconstructor(options = {}) {\n\t\tif (!(options.maxSize && options.maxSize > 0)) {\n\t\t\tthrow new TypeError('`maxSize` must be a number greater than 0');\n\t\t}\n\n\t\tthis.maxSize = options.maxSize;\n\t\tthis.onEviction = options.onEviction;\n\t\tthis.cache = new Map();\n\t\tthis.oldCache = new Map();\n\t\tthis._size = 0;\n\t}\n\n\t_set(key, value) {\n\t\tthis.cache.set(key, value);\n\t\tthis._size++;\n\n\t\tif (this._size >= this.maxSize) {\n\t\t\tthis._size = 0;\n\n\t\t\tif (typeof this.onEviction === 'function') {\n\t\t\t\tfor (const [key, value] of this.oldCache.entries()) {\n\t\t\t\t\tthis.onEviction(key, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.oldCache = this.cache;\n\t\t\tthis.cache = new Map();\n\t\t}\n\t}\n\n\tget(key) {\n\t\tif (this.cache.has(key)) {\n\t\t\treturn this.cache.get(key);\n\t\t}\n\n\t\tif (this.oldCache.has(key)) {\n\t\t\tconst value = this.oldCache.get(key);\n\t\t\tthis.oldCache.delete(key);\n\t\t\tthis._set(key, value);\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tset(key, value) {\n\t\tif (this.cache.has(key)) {\n\t\t\tthis.cache.set(key, value);\n\t\t} else {\n\t\t\tthis._set(key, value);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\thas(key) {\n\t\treturn this.cache.has(key) || this.oldCache.has(key);\n\t}\n\n\tpeek(key) {\n\t\tif (this.cache.has(key)) {\n\t\t\treturn this.cache.get(key);\n\t\t}\n\n\t\tif (this.oldCache.has(key)) {\n\t\t\treturn this.oldCache.get(key);\n\t\t}\n\t}\n\n\tdelete(key) {\n\t\tconst deleted = this.cache.delete(key);\n\t\tif (deleted) {\n\t\t\tthis._size--;\n\t\t}\n\n\t\treturn this.oldCache.delete(key) || deleted;\n\t}\n\n\tclear() {\n\t\tthis.cache.clear();\n\t\tthis.oldCache.clear();\n\t\tthis._size = 0;\n\t}\n\n\t* keys() {\n\t\tfor (const [key] of this) {\n\t\t\tyield key;\n\t\t}\n\t}\n\n\t* values() {\n\t\tfor (const [, value] of this) {\n\t\t\tyield value;\n\t\t}\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tfor (const item of this.cache) {\n\t\t\tyield item;\n\t\t}\n\n\t\tfor (const item of this.oldCache) {\n\t\t\tconst [key] = item;\n\t\t\tif (!this.cache.has(key)) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t}\n\t}\n\n\tget size() {\n\t\tlet oldCacheSize = 0;\n\t\tfor (const key of this.oldCache.keys()) {\n\t\t\tif (!this.cache.has(key)) {\n\t\t\t\toldCacheSize++;\n\t\t\t}\n\t\t}\n\n\t\treturn Math.min(this._size + oldCacheSize, this.maxSize);\n\t}\n}\n\nmodule.exports = QuickLRU;\n",
|
|
131
|
+
"'use strict';\n\nmodule.exports = stream => {\n\tif (stream.listenerCount('error') !== 0) {\n\t\treturn stream;\n\t}\n\n\tstream.__destroy = stream._destroy;\n\tstream._destroy = (...args) => {\n\t\tconst callback = args.pop();\n\n\t\tstream.__destroy(...args, async error => {\n\t\t\tawait Promise.resolve();\n\t\t\tcallback(error);\n\t\t});\n\t};\n\n\tconst onError = error => {\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\tPromise.resolve().then(() => {\n\t\t\tstream.emit('error', error);\n\t\t});\n\t};\n\n\tstream.once('error', onError);\n\n\t// eslint-disable-next-line promise/prefer-await-to-then\n\tPromise.resolve().then(() => {\n\t\tstream.off('error', onError);\n\t});\n\n\treturn stream;\n};\n",
|
|
132
|
+
"'use strict';\n// See https://github.com/facebook/jest/issues/2549\n// eslint-disable-next-line node/prefer-global/url\nconst {URL} = require('url');\nconst EventEmitter = require('events');\nconst tls = require('tls');\nconst http2 = require('http2');\nconst QuickLRU = require('quick-lru');\nconst delayAsyncDestroy = require('./utils/delay-async-destroy.js');\n\nconst kCurrentStreamCount = Symbol('currentStreamCount');\nconst kRequest = Symbol('request');\nconst kOriginSet = Symbol('cachedOriginSet');\nconst kGracefullyClosing = Symbol('gracefullyClosing');\nconst kLength = Symbol('length');\n\nconst nameKeys = [\n\t// Not an Agent option actually\n\t'createConnection',\n\n\t// `http2.connect()` options\n\t'maxDeflateDynamicTableSize',\n\t'maxSettings',\n\t'maxSessionMemory',\n\t'maxHeaderListPairs',\n\t'maxOutstandingPings',\n\t'maxReservedRemoteStreams',\n\t'maxSendHeaderBlockLength',\n\t'paddingStrategy',\n\t'peerMaxConcurrentStreams',\n\t'settings',\n\n\t// `tls.connect()` source options\n\t'family',\n\t'localAddress',\n\t'rejectUnauthorized',\n\n\t// `tls.connect()` secure context options\n\t'pskCallback',\n\t'minDHSize',\n\n\t// `tls.connect()` destination options\n\t// - `servername` is automatically validated, skip it\n\t// - `host` and `port` just describe the destination server,\n\t'path',\n\t'socket',\n\n\t// `tls.createSecureContext()` options\n\t'ca',\n\t'cert',\n\t'sigalgs',\n\t'ciphers',\n\t'clientCertEngine',\n\t'crl',\n\t'dhparam',\n\t'ecdhCurve',\n\t'honorCipherOrder',\n\t'key',\n\t'privateKeyEngine',\n\t'privateKeyIdentifier',\n\t'maxVersion',\n\t'minVersion',\n\t'pfx',\n\t'secureOptions',\n\t'secureProtocol',\n\t'sessionIdContext',\n\t'ticketKeys'\n];\n\nconst getSortedIndex = (array, value, compare) => {\n\tlet low = 0;\n\tlet high = array.length;\n\n\twhile (low < high) {\n\t\tconst mid = (low + high) >>> 1;\n\n\t\tif (compare(array[mid], value)) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\thigh = mid;\n\t\t}\n\t}\n\n\treturn low;\n};\n\nconst compareSessions = (a, b) => a.remoteSettings.maxConcurrentStreams > b.remoteSettings.maxConcurrentStreams;\n\n// See https://tools.ietf.org/html/rfc8336\nconst closeCoveredSessions = (where, session) => {\n\t// Clients SHOULD NOT emit new requests on any connection whose Origin\n\t// Set is a proper subset of another connection's Origin Set, and they\n\t// SHOULD close it once all outstanding requests are satisfied.\n\tfor (let index = 0; index < where.length; index++) {\n\t\tconst coveredSession = where[index];\n\n\t\tif (\n\t\t\t// Unfortunately `.every()` returns true for an empty array\n\t\t\tcoveredSession[kOriginSet].length > 0\n\n\t\t\t// The set is a proper subset when its length is less than the other set.\n\t\t\t&& coveredSession[kOriginSet].length < session[kOriginSet].length\n\n\t\t\t// And the other set includes all elements of the subset.\n\t\t\t&& coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin))\n\n\t\t\t// Makes sure that the session can handle all requests from the covered session.\n\t\t\t&& (coveredSession[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams\n\t\t) {\n\t\t\t// This allows pending requests to finish and prevents making new requests.\n\t\t\tgracefullyClose(coveredSession);\n\t\t}\n\t}\n};\n\n// This is basically inverted `closeCoveredSessions(...)`.\nconst closeSessionIfCovered = (where, coveredSession) => {\n\tfor (let index = 0; index < where.length; index++) {\n\t\tconst session = where[index];\n\n\t\tif (\n\t\t\tcoveredSession[kOriginSet].length > 0\n\t\t\t&& coveredSession[kOriginSet].length < session[kOriginSet].length\n\t\t\t&& coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin))\n\t\t\t&& (coveredSession[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams\n\t\t) {\n\t\t\tgracefullyClose(coveredSession);\n\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n\nconst gracefullyClose = session => {\n\tsession[kGracefullyClosing] = true;\n\n\tif (session[kCurrentStreamCount] === 0) {\n\t\tsession.close();\n\t}\n};\n\nclass Agent extends EventEmitter {\n\tconstructor({timeout = 0, maxSessions = Number.POSITIVE_INFINITY, maxEmptySessions = 10, maxCachedTlsSessions = 100} = {}) {\n\t\tsuper();\n\n\t\t// SESSIONS[NORMALIZED_OPTIONS] = [];\n\t\tthis.sessions = {};\n\n\t\t// The queue for creating new sessions. It looks like this:\n\t\t// QUEUE[NORMALIZED_OPTIONS][NORMALIZED_ORIGIN] = ENTRY_FUNCTION\n\t\t//\n\t\t// It's faster when there are many origins. If there's only one, then QUEUE[`${options}:${origin}`] is faster.\n\t\t// I guess object creation / deletion is causing the slowdown.\n\t\t//\n\t\t// The entry function has `listeners`, `completed` and `destroyed` properties.\n\t\t// `listeners` is an array of objects containing `resolve` and `reject` functions.\n\t\t// `completed` is a boolean. It's set to true after ENTRY_FUNCTION is executed.\n\t\t// `destroyed` is a boolean. If it's set to true, the session will be destroyed if hasn't connected yet.\n\t\tthis.queue = {};\n\n\t\t// Each session will use this timeout value.\n\t\tthis.timeout = timeout;\n\n\t\t// Max sessions in total\n\t\tthis.maxSessions = maxSessions;\n\n\t\t// Max empty sessions in total\n\t\tthis.maxEmptySessions = maxEmptySessions;\n\n\t\tthis._emptySessionCount = 0;\n\t\tthis._sessionCount = 0;\n\n\t\t// We don't support push streams by default.\n\t\tthis.settings = {\n\t\t\tenablePush: false,\n\t\t\tinitialWindowSize: 1024 * 1024 * 32 // 32MB, see https://github.com/nodejs/node/issues/38426\n\t\t};\n\n\t\t// Reusing TLS sessions increases performance.\n\t\tthis.tlsSessionCache = new QuickLRU({maxSize: maxCachedTlsSessions});\n\t}\n\n\tget protocol() {\n\t\treturn 'https:';\n\t}\n\n\tnormalizeOptions(options) {\n\t\tlet normalized = '';\n\n\t\tfor (let index = 0; index < nameKeys.length; index++) {\n\t\t\tconst key = nameKeys[index];\n\n\t\t\tnormalized += ':';\n\n\t\t\tif (options && options[key] !== undefined) {\n\t\t\t\tnormalized += options[key];\n\t\t\t}\n\t\t}\n\n\t\treturn normalized;\n\t}\n\n\t_processQueue() {\n\t\tif (this._sessionCount >= this.maxSessions) {\n\t\t\tthis.closeEmptySessions(this.maxSessions - this._sessionCount + 1);\n\t\t\treturn;\n\t\t}\n\n\t\t// eslint-disable-next-line guard-for-in\n\t\tfor (const normalizedOptions in this.queue) {\n\t\t\t// eslint-disable-next-line guard-for-in\n\t\t\tfor (const normalizedOrigin in this.queue[normalizedOptions]) {\n\t\t\t\tconst item = this.queue[normalizedOptions][normalizedOrigin];\n\n\t\t\t\t// The entry function can be run only once.\n\t\t\t\tif (!item.completed) {\n\t\t\t\t\titem.completed = true;\n\n\t\t\t\t\titem();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_isBetterSession(thisStreamCount, thatStreamCount) {\n\t\treturn thisStreamCount > thatStreamCount;\n\t}\n\n\t_accept(session, listeners, normalizedOrigin, options) {\n\t\tlet index = 0;\n\n\t\twhile (index < listeners.length && session[kCurrentStreamCount] < session.remoteSettings.maxConcurrentStreams) {\n\t\t\t// We assume `resolve(...)` calls `request(...)` *directly*,\n\t\t\t// otherwise the session will get overloaded.\n\t\t\tlisteners[index].resolve(session);\n\n\t\t\tindex++;\n\t\t}\n\n\t\tlisteners.splice(0, index);\n\n\t\tif (listeners.length > 0) {\n\t\t\tthis.getSession(normalizedOrigin, options, listeners);\n\t\t\tlisteners.length = 0;\n\t\t}\n\t}\n\n\tgetSession(origin, options, listeners) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (Array.isArray(listeners) && listeners.length > 0) {\n\t\t\t\tlisteners = [...listeners];\n\n\t\t\t\t// Resolve the current promise ASAP, we're just moving the listeners.\n\t\t\t\t// They will be executed at a different time.\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\tlisteners = [{resolve, reject}];\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// Parse origin\n\t\t\t\tif (typeof origin === 'string') {\n\t\t\t\t\torigin = new URL(origin);\n\t\t\t\t} else if (!(origin instanceof URL)) {\n\t\t\t\t\tthrow new TypeError('The `origin` argument needs to be a string or an URL object');\n\t\t\t\t}\n\n\t\t\t\tif (options) {\n\t\t\t\t\t// Validate servername\n\t\t\t\t\tconst {servername} = options;\n\t\t\t\t\tconst {hostname} = origin;\n\t\t\t\t\tif (servername && hostname !== servername) {\n\t\t\t\t\t\tthrow new Error(`Origin ${hostname} differs from servername ${servername}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tfor (let index = 0; index < listeners.length; index++) {\n\t\t\t\t\tlisteners[index].reject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst normalizedOptions = this.normalizeOptions(options);\n\t\t\tconst normalizedOrigin = origin.origin;\n\n\t\t\tif (normalizedOptions in this.sessions) {\n\t\t\t\tconst sessions = this.sessions[normalizedOptions];\n\n\t\t\t\tlet maxConcurrentStreams = -1;\n\t\t\t\tlet currentStreamsCount = -1;\n\t\t\t\tlet optimalSession;\n\n\t\t\t\t// We could just do this.sessions[normalizedOptions].find(...) but that isn't optimal.\n\t\t\t\t// Additionally, we are looking for session which has biggest current pending streams count.\n\t\t\t\t//\n\t\t\t\t// |------------| |------------| |------------| |------------|\n\t\t\t\t// | Session: A | | Session: B | | Session: C | | Session: D |\n\t\t\t\t// | Pending: 5 |-| Pending: 8 |-| Pending: 9 |-| Pending: 4 |\n\t\t\t\t// | Max: 10 | | Max: 10 | | Max: 9 | | Max: 5 |\n\t\t\t\t// |------------| |------------| |------------| |------------|\n\t\t\t\t// ^\n\t\t\t\t// |\n\t\t\t\t// pick this one --\n\t\t\t\t//\n\t\t\t\tfor (let index = 0; index < sessions.length; index++) {\n\t\t\t\t\tconst session = sessions[index];\n\n\t\t\t\t\tconst sessionMaxConcurrentStreams = session.remoteSettings.maxConcurrentStreams;\n\n\t\t\t\t\tif (sessionMaxConcurrentStreams < maxConcurrentStreams) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!session[kOriginSet].includes(normalizedOrigin)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst sessionCurrentStreamsCount = session[kCurrentStreamCount];\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tsessionCurrentStreamsCount >= sessionMaxConcurrentStreams\n\t\t\t\t\t\t|| session[kGracefullyClosing]\n\t\t\t\t\t\t// Unfortunately the `close` event isn't called immediately,\n\t\t\t\t\t\t// so `session.destroyed` is `true`, but `session.closed` is `false`.\n\t\t\t\t\t\t|| session.destroyed\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We only need set this once.\n\t\t\t\t\tif (!optimalSession) {\n\t\t\t\t\t\tmaxConcurrentStreams = sessionMaxConcurrentStreams;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Either get the session which has biggest current stream count or the lowest.\n\t\t\t\t\tif (this._isBetterSession(sessionCurrentStreamsCount, currentStreamsCount)) {\n\t\t\t\t\t\toptimalSession = session;\n\t\t\t\t\t\tcurrentStreamsCount = sessionCurrentStreamsCount;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (optimalSession) {\n\t\t\t\t\tthis._accept(optimalSession, listeners, normalizedOrigin, options);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (normalizedOptions in this.queue) {\n\t\t\t\tif (normalizedOrigin in this.queue[normalizedOptions]) {\n\t\t\t\t\t// There's already an item in the queue, just attach ourselves to it.\n\t\t\t\t\tthis.queue[normalizedOptions][normalizedOrigin].listeners.push(...listeners);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.queue[normalizedOptions] = {\n\t\t\t\t\t[kLength]: 0\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// The entry must be removed from the queue IMMEDIATELY when:\n\t\t\t// 1. the session connects successfully,\n\t\t\t// 2. an error occurs.\n\t\t\tconst removeFromQueue = () => {\n\t\t\t\t// Our entry can be replaced. We cannot remove the new one.\n\t\t\t\tif (normalizedOptions in this.queue && this.queue[normalizedOptions][normalizedOrigin] === entry) {\n\t\t\t\t\tdelete this.queue[normalizedOptions][normalizedOrigin];\n\n\t\t\t\t\tif (--this.queue[normalizedOptions][kLength] === 0) {\n\t\t\t\t\t\tdelete this.queue[normalizedOptions];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// The main logic is here\n\t\t\tconst entry = async () => {\n\t\t\t\tthis._sessionCount++;\n\n\t\t\t\tconst name = `${normalizedOrigin}:${normalizedOptions}`;\n\t\t\t\tlet receivedSettings = false;\n\t\t\t\tlet socket;\n\n\t\t\t\ttry {\n\t\t\t\t\tconst computedOptions = {...options};\n\n\t\t\t\t\tif (computedOptions.settings === undefined) {\n\t\t\t\t\t\tcomputedOptions.settings = this.settings;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (computedOptions.session === undefined) {\n\t\t\t\t\t\tcomputedOptions.session = this.tlsSessionCache.get(name);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst createConnection = computedOptions.createConnection || this.createConnection;\n\n\t\t\t\t\t// A hacky workaround to enable async `createConnection`\n\t\t\t\t\tsocket = await createConnection.call(this, origin, computedOptions);\n\t\t\t\t\tcomputedOptions.createConnection = () => socket;\n\n\t\t\t\t\tconst session = http2.connect(origin, computedOptions);\n\t\t\t\t\tsession[kCurrentStreamCount] = 0;\n\t\t\t\t\tsession[kGracefullyClosing] = false;\n\n\t\t\t\t\t// Node.js return https://false:443 instead of https://1.1.1.1:443\n\t\t\t\t\tconst getOriginSet = () => {\n\t\t\t\t\t\tconst {socket} = session;\n\n\t\t\t\t\t\tlet originSet;\n\t\t\t\t\t\tif (socket.servername === false) {\n\t\t\t\t\t\t\tsocket.servername = socket.remoteAddress;\n\t\t\t\t\t\t\toriginSet = session.originSet;\n\t\t\t\t\t\t\tsocket.servername = false;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\toriginSet = session.originSet;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn originSet;\n\t\t\t\t\t};\n\n\t\t\t\t\tconst isFree = () => session[kCurrentStreamCount] < session.remoteSettings.maxConcurrentStreams;\n\n\t\t\t\t\tsession.socket.once('session', tlsSession => {\n\t\t\t\t\t\tthis.tlsSessionCache.set(name, tlsSession);\n\t\t\t\t\t});\n\n\t\t\t\t\tsession.once('error', error => {\n\t\t\t\t\t\t// Listeners are empty when the session successfully connected.\n\t\t\t\t\t\tfor (let index = 0; index < listeners.length; index++) {\n\t\t\t\t\t\t\tlisteners[index].reject(error);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// The connection got broken, purge the cache.\n\t\t\t\t\t\tthis.tlsSessionCache.delete(name);\n\t\t\t\t\t});\n\n\t\t\t\t\tsession.setTimeout(this.timeout, () => {\n\t\t\t\t\t\t// Terminates all streams owned by this session.\n\t\t\t\t\t\tsession.destroy();\n\t\t\t\t\t});\n\n\t\t\t\t\tsession.once('close', () => {\n\t\t\t\t\t\tthis._sessionCount--;\n\n\t\t\t\t\t\tif (receivedSettings) {\n\t\t\t\t\t\t\t// Assumes session `close` is emitted after request `close`\n\t\t\t\t\t\t\tthis._emptySessionCount--;\n\n\t\t\t\t\t\t\t// This cannot be moved to the stream logic,\n\t\t\t\t\t\t\t// because there may be a session that hadn't made a single request.\n\t\t\t\t\t\t\tconst where = this.sessions[normalizedOptions];\n\n\t\t\t\t\t\t\tif (where.length === 1) {\n\t\t\t\t\t\t\t\tdelete this.sessions[normalizedOptions];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twhere.splice(where.indexOf(session), 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Broken connection\n\t\t\t\t\t\t\tremoveFromQueue();\n\n\t\t\t\t\t\t\tconst error = new Error('Session closed without receiving a SETTINGS frame');\n\t\t\t\t\t\t\terror.code = 'HTTP2WRAPPER_NOSETTINGS';\n\n\t\t\t\t\t\t\tfor (let index = 0; index < listeners.length; index++) {\n\t\t\t\t\t\t\t\tlisteners[index].reject(error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// There may be another session awaiting.\n\t\t\t\t\t\tthis._processQueue();\n\t\t\t\t\t});\n\n\t\t\t\t\t// Iterates over the queue and processes listeners.\n\t\t\t\t\tconst processListeners = () => {\n\t\t\t\t\t\tconst queue = this.queue[normalizedOptions];\n\t\t\t\t\t\tif (!queue) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst originSet = session[kOriginSet];\n\n\t\t\t\t\t\tfor (let index = 0; index < originSet.length; index++) {\n\t\t\t\t\t\t\tconst origin = originSet[index];\n\n\t\t\t\t\t\t\tif (origin in queue) {\n\t\t\t\t\t\t\t\tconst {listeners, completed} = queue[origin];\n\n\t\t\t\t\t\t\t\tlet index = 0;\n\n\t\t\t\t\t\t\t\t// Prevents session overloading.\n\t\t\t\t\t\t\t\twhile (index < listeners.length && isFree()) {\n\t\t\t\t\t\t\t\t\t// We assume `resolve(...)` calls `request(...)` *directly*,\n\t\t\t\t\t\t\t\t\t// otherwise the session will get overloaded.\n\t\t\t\t\t\t\t\t\tlisteners[index].resolve(session);\n\n\t\t\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tqueue[origin].listeners.splice(0, index);\n\n\t\t\t\t\t\t\t\tif (queue[origin].listeners.length === 0 && !completed) {\n\t\t\t\t\t\t\t\t\tdelete queue[origin];\n\n\t\t\t\t\t\t\t\t\tif (--queue[kLength] === 0) {\n\t\t\t\t\t\t\t\t\t\tdelete this.queue[normalizedOptions];\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// We're no longer free, no point in continuing.\n\t\t\t\t\t\t\t\tif (!isFree()) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// The Origin Set cannot shrink. No need to check if it suddenly became covered by another one.\n\t\t\t\t\tsession.on('origin', () => {\n\t\t\t\t\t\tsession[kOriginSet] = getOriginSet() || [];\n\t\t\t\t\t\tsession[kGracefullyClosing] = false;\n\t\t\t\t\t\tcloseSessionIfCovered(this.sessions[normalizedOptions], session);\n\n\t\t\t\t\t\tif (session[kGracefullyClosing] || !isFree()) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tprocessListeners();\n\n\t\t\t\t\t\tif (!isFree()) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Close covered sessions (if possible).\n\t\t\t\t\t\tcloseCoveredSessions(this.sessions[normalizedOptions], session);\n\t\t\t\t\t});\n\n\t\t\t\t\tsession.once('remoteSettings', () => {\n\t\t\t\t\t\t// The Agent could have been destroyed already.\n\t\t\t\t\t\tif (entry.destroyed) {\n\t\t\t\t\t\t\tconst error = new Error('Agent has been destroyed');\n\n\t\t\t\t\t\t\tfor (let index = 0; index < listeners.length; index++) {\n\t\t\t\t\t\t\t\tlisteners[index].reject(error);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsession.destroy();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// See https://github.com/nodejs/node/issues/38426\n\t\t\t\t\t\tif (session.setLocalWindowSize) {\n\t\t\t\t\t\t\tsession.setLocalWindowSize(1024 * 1024 * 4); // 4 MB\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsession[kOriginSet] = getOriginSet() || [];\n\n\t\t\t\t\t\tif (session.socket.encrypted) {\n\t\t\t\t\t\t\tconst mainOrigin = session[kOriginSet][0];\n\t\t\t\t\t\t\tif (mainOrigin !== normalizedOrigin) {\n\t\t\t\t\t\t\t\tconst error = new Error(`Requested origin ${normalizedOrigin} does not match server ${mainOrigin}`);\n\n\t\t\t\t\t\t\t\tfor (let index = 0; index < listeners.length; index++) {\n\t\t\t\t\t\t\t\t\tlisteners[index].reject(error);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsession.destroy();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tremoveFromQueue();\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst where = this.sessions;\n\n\t\t\t\t\t\t\tif (normalizedOptions in where) {\n\t\t\t\t\t\t\t\tconst sessions = where[normalizedOptions];\n\t\t\t\t\t\t\t\tsessions.splice(getSortedIndex(sessions, session, compareSessions), 0, session);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twhere[normalizedOptions] = [session];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treceivedSettings = true;\n\t\t\t\t\t\tthis._emptySessionCount++;\n\n\t\t\t\t\t\tthis.emit('session', session);\n\t\t\t\t\t\tthis._accept(session, listeners, normalizedOrigin, options);\n\n\t\t\t\t\t\tif (session[kCurrentStreamCount] === 0 && this._emptySessionCount > this.maxEmptySessions) {\n\t\t\t\t\t\t\tthis.closeEmptySessions(this._emptySessionCount - this.maxEmptySessions);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// `session.remoteSettings.maxConcurrentStreams` might get increased\n\t\t\t\t\t\tsession.on('remoteSettings', () => {\n\t\t\t\t\t\t\tif (!isFree()) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tprocessListeners();\n\n\t\t\t\t\t\t\tif (!isFree()) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// In case the Origin Set changes\n\t\t\t\t\t\t\tcloseCoveredSessions(this.sessions[normalizedOptions], session);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// Shim `session.request()` in order to catch all streams\n\t\t\t\t\tsession[kRequest] = session.request;\n\t\t\t\t\tsession.request = (headers, streamOptions) => {\n\t\t\t\t\t\tif (session[kGracefullyClosing]) {\n\t\t\t\t\t\t\tthrow new Error('The session is gracefully closing. No new streams are allowed.');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst stream = session[kRequest](headers, streamOptions);\n\n\t\t\t\t\t\t// The process won't exit until the session is closed or all requests are gone.\n\t\t\t\t\t\tsession.ref();\n\n\t\t\t\t\t\tif (session[kCurrentStreamCount]++ === 0) {\n\t\t\t\t\t\t\tthis._emptySessionCount--;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstream.once('close', () => {\n\t\t\t\t\t\t\tif (--session[kCurrentStreamCount] === 0) {\n\t\t\t\t\t\t\t\tthis._emptySessionCount++;\n\t\t\t\t\t\t\t\tsession.unref();\n\n\t\t\t\t\t\t\t\tif (this._emptySessionCount > this.maxEmptySessions || session[kGracefullyClosing]) {\n\t\t\t\t\t\t\t\t\tsession.close();\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (session.destroyed || session.closed) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (isFree() && !closeSessionIfCovered(this.sessions[normalizedOptions], session)) {\n\t\t\t\t\t\t\t\tcloseCoveredSessions(this.sessions[normalizedOptions], session);\n\t\t\t\t\t\t\t\tprocessListeners();\n\n\t\t\t\t\t\t\t\tif (session[kCurrentStreamCount] === 0) {\n\t\t\t\t\t\t\t\t\tthis._processQueue();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn stream;\n\t\t\t\t\t};\n\t\t\t\t} catch (error) {\n\t\t\t\t\tremoveFromQueue();\n\t\t\t\t\tthis._sessionCount--;\n\n\t\t\t\t\tfor (let index = 0; index < listeners.length; index++) {\n\t\t\t\t\t\tlisteners[index].reject(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tentry.listeners = listeners;\n\t\t\tentry.completed = false;\n\t\t\tentry.destroyed = false;\n\n\t\t\tthis.queue[normalizedOptions][normalizedOrigin] = entry;\n\t\t\tthis.queue[normalizedOptions][kLength]++;\n\t\t\tthis._processQueue();\n\t\t});\n\t}\n\n\trequest(origin, options, headers, streamOptions) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.getSession(origin, options, [{\n\t\t\t\treject,\n\t\t\t\tresolve: session => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst stream = session.request(headers, streamOptions);\n\n\t\t\t\t\t\t// Do not throw before `request(...)` has been awaited\n\t\t\t\t\t\tdelayAsyncDestroy(stream);\n\n\t\t\t\t\t\tresolve(stream);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}]);\n\t\t});\n\t}\n\n\tasync createConnection(origin, options) {\n\t\treturn Agent.connect(origin, options);\n\t}\n\n\tstatic connect(origin, options) {\n\t\toptions.ALPNProtocols = ['h2'];\n\n\t\tconst port = origin.port || 443;\n\t\tconst host = origin.hostname;\n\n\t\tif (typeof options.servername === 'undefined') {\n\t\t\toptions.servername = host;\n\t\t}\n\n\t\tconst socket = tls.connect(port, host, options);\n\n\t\tif (options.socket) {\n\t\t\tsocket._peername = {\n\t\t\t\tfamily: undefined,\n\t\t\t\taddress: undefined,\n\t\t\t\tport\n\t\t\t};\n\t\t}\n\n\t\treturn socket;\n\t}\n\n\tcloseEmptySessions(maxCount = Number.POSITIVE_INFINITY) {\n\t\tlet closedCount = 0;\n\n\t\tconst {sessions} = this;\n\n\t\t// eslint-disable-next-line guard-for-in\n\t\tfor (const key in sessions) {\n\t\t\tconst thisSessions = sessions[key];\n\n\t\t\tfor (let index = 0; index < thisSessions.length; index++) {\n\t\t\t\tconst session = thisSessions[index];\n\n\t\t\t\tif (session[kCurrentStreamCount] === 0) {\n\t\t\t\t\tclosedCount++;\n\t\t\t\t\tsession.close();\n\n\t\t\t\t\tif (closedCount >= maxCount) {\n\t\t\t\t\t\treturn closedCount;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn closedCount;\n\t}\n\n\tdestroy(reason) {\n\t\tconst {sessions, queue} = this;\n\n\t\t// eslint-disable-next-line guard-for-in\n\t\tfor (const key in sessions) {\n\t\t\tconst thisSessions = sessions[key];\n\n\t\t\tfor (let index = 0; index < thisSessions.length; index++) {\n\t\t\t\tthisSessions[index].destroy(reason);\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line guard-for-in\n\t\tfor (const normalizedOptions in queue) {\n\t\t\tconst entries = queue[normalizedOptions];\n\n\t\t\t// eslint-disable-next-line guard-for-in\n\t\t\tfor (const normalizedOrigin in entries) {\n\t\t\t\tentries[normalizedOrigin].destroyed = true;\n\t\t\t}\n\t\t}\n\n\t\t// New requests should NOT attach to destroyed sessions\n\t\tthis.queue = {};\n\t\tthis.tlsSessionCache.clear();\n\t}\n\n\tget emptySessionCount() {\n\t\treturn this._emptySessionCount;\n\t}\n\n\tget pendingSessionCount() {\n\t\treturn this._sessionCount - this._emptySessionCount;\n\t}\n\n\tget sessionCount() {\n\t\treturn this._sessionCount;\n\t}\n}\n\nAgent.kCurrentStreamCount = kCurrentStreamCount;\nAgent.kGracefullyClosing = kGracefullyClosing;\n\nmodule.exports = {\n\tAgent,\n\tglobalAgent: new Agent()\n};\n",
|
|
133
|
+
"'use strict';\nconst {Readable} = require('stream');\n\nclass IncomingMessage extends Readable {\n\tconstructor(socket, highWaterMark) {\n\t\tsuper({\n\t\t\temitClose: false,\n\t\t\tautoDestroy: true,\n\t\t\thighWaterMark\n\t\t});\n\n\t\tthis.statusCode = null;\n\t\tthis.statusMessage = '';\n\t\tthis.httpVersion = '2.0';\n\t\tthis.httpVersionMajor = 2;\n\t\tthis.httpVersionMinor = 0;\n\t\tthis.headers = {};\n\t\tthis.trailers = {};\n\t\tthis.req = null;\n\n\t\tthis.aborted = false;\n\t\tthis.complete = false;\n\t\tthis.upgrade = null;\n\n\t\tthis.rawHeaders = [];\n\t\tthis.rawTrailers = [];\n\n\t\tthis.socket = socket;\n\n\t\tthis._dumped = false;\n\t}\n\n\tget connection() {\n\t\treturn this.socket;\n\t}\n\n\tset connection(value) {\n\t\tthis.socket = value;\n\t}\n\n\t_destroy(error, callback) {\n\t\tif (!this.readableEnded) {\n\t\t\tthis.aborted = true;\n\t\t}\n\n\t\t// See https://github.com/nodejs/node/issues/35303\n\t\tcallback();\n\n\t\tthis.req._request.destroy(error);\n\t}\n\n\tsetTimeout(ms, callback) {\n\t\tthis.req.setTimeout(ms, callback);\n\t\treturn this;\n\t}\n\n\t_dump() {\n\t\tif (!this._dumped) {\n\t\t\tthis._dumped = true;\n\n\t\t\tthis.removeAllListeners('data');\n\t\t\tthis.resume();\n\t\t}\n\t}\n\n\t_read() {\n\t\tif (this.req) {\n\t\t\tthis.req._request.resume();\n\t\t}\n\t}\n}\n\nmodule.exports = IncomingMessage;\n",
|
|
134
|
+
"'use strict';\n\nmodule.exports = (from, to, events) => {\n\tfor (const event of events) {\n\t\tfrom.on(event, (...args) => to.emit(event, ...args));\n\t}\n};\n",
|
|
135
|
+
"'use strict';\n/* istanbul ignore file: https://github.com/nodejs/node/blob/master/lib/internal/errors.js */\n\nconst makeError = (Base, key, getMessage) => {\n\tmodule.exports[key] = class NodeError extends Base {\n\t\tconstructor(...args) {\n\t\t\tsuper(typeof getMessage === 'string' ? getMessage : getMessage(args));\n\t\t\tthis.name = `${super.name} [${key}]`;\n\t\t\tthis.code = key;\n\t\t}\n\t};\n};\n\nmakeError(TypeError, 'ERR_INVALID_ARG_TYPE', args => {\n\tconst type = args[0].includes('.') ? 'property' : 'argument';\n\n\tlet valid = args[1];\n\tconst isManyTypes = Array.isArray(valid);\n\n\tif (isManyTypes) {\n\t\tvalid = `${valid.slice(0, -1).join(', ')} or ${valid.slice(-1)}`;\n\t}\n\n\treturn `The \"${args[0]}\" ${type} must be ${isManyTypes ? 'one of' : 'of'} type ${valid}. Received ${typeof args[2]}`;\n});\n\nmakeError(TypeError, 'ERR_INVALID_PROTOCOL', args =>\n\t`Protocol \"${args[0]}\" not supported. Expected \"${args[1]}\"`\n);\n\nmakeError(Error, 'ERR_HTTP_HEADERS_SENT', args =>\n\t`Cannot ${args[0]} headers after they are sent to the client`\n);\n\nmakeError(TypeError, 'ERR_INVALID_HTTP_TOKEN', args =>\n\t`${args[0]} must be a valid HTTP token [${args[1]}]`\n);\n\nmakeError(TypeError, 'ERR_HTTP_INVALID_HEADER_VALUE', args =>\n\t`Invalid value \"${args[0]} for header \"${args[1]}\"`\n);\n\nmakeError(TypeError, 'ERR_INVALID_CHAR', args =>\n\t`Invalid character in ${args[0]} [${args[1]}]`\n);\n\nmakeError(\n\tError,\n\t'ERR_HTTP2_NO_SOCKET_MANIPULATION',\n\t'HTTP/2 sockets should not be directly manipulated (e.g. read and written)'\n);\n",
|
|
136
|
+
"'use strict';\n\nmodule.exports = header => {\n\tswitch (header) {\n\t\tcase ':method':\n\t\tcase ':scheme':\n\t\tcase ':authority':\n\t\tcase ':path':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n};\n",
|
|
137
|
+
"'use strict';\nconst {ERR_INVALID_HTTP_TOKEN} = require('./errors.js');\nconst isRequestPseudoHeader = require('./is-request-pseudo-header.js');\n\nconst isValidHttpToken = /^[\\^`\\-\\w!#$%&*+.|~]+$/;\n\nmodule.exports = name => {\n\tif (typeof name !== 'string' || (!isValidHttpToken.test(name) && !isRequestPseudoHeader(name))) {\n\t\tthrow new ERR_INVALID_HTTP_TOKEN('Header name', name);\n\t}\n};\n",
|
|
138
|
+
"'use strict';\nconst {\n\tERR_HTTP_INVALID_HEADER_VALUE,\n\tERR_INVALID_CHAR\n} = require('./errors.js');\n\nconst isInvalidHeaderValue = /[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/;\n\nmodule.exports = (name, value) => {\n\tif (typeof value === 'undefined') {\n\t\tthrow new ERR_HTTP_INVALID_HEADER_VALUE(value, name);\n\t}\n\n\tif (isInvalidHeaderValue.test(value)) {\n\t\tthrow new ERR_INVALID_CHAR('header content', name);\n\t}\n};\n",
|
|
139
|
+
"'use strict';\nconst {ERR_HTTP2_NO_SOCKET_MANIPULATION} = require('./errors.js');\n\n/* istanbul ignore file */\n/* https://github.com/nodejs/node/blob/6eec858f34a40ffa489c1ec54bb24da72a28c781/lib/internal/http2/compat.js#L195-L272 */\n\nconst proxySocketHandler = {\n\thas(stream, property) {\n\t\t// Replaced [kSocket] with .socket\n\t\tconst reference = stream.session === undefined ? stream : stream.session.socket;\n\t\treturn (property in stream) || (property in reference);\n\t},\n\n\tget(stream, property) {\n\t\tswitch (property) {\n\t\t\tcase 'on':\n\t\t\tcase 'once':\n\t\t\tcase 'end':\n\t\t\tcase 'emit':\n\t\t\tcase 'destroy':\n\t\t\t\treturn stream[property].bind(stream);\n\t\t\tcase 'writable':\n\t\t\tcase 'destroyed':\n\t\t\t\treturn stream[property];\n\t\t\tcase 'readable':\n\t\t\t\tif (stream.destroyed) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn stream.readable;\n\t\t\tcase 'setTimeout': {\n\t\t\t\tconst {session} = stream;\n\t\t\t\tif (session !== undefined) {\n\t\t\t\t\treturn session.setTimeout.bind(session);\n\t\t\t\t}\n\n\t\t\t\treturn stream.setTimeout.bind(stream);\n\t\t\t}\n\n\t\t\tcase 'write':\n\t\t\tcase 'read':\n\t\t\tcase 'pause':\n\t\t\tcase 'resume':\n\t\t\t\tthrow new ERR_HTTP2_NO_SOCKET_MANIPULATION();\n\t\t\tdefault: {\n\t\t\t\t// Replaced [kSocket] with .socket\n\t\t\t\tconst reference = stream.session === undefined ? stream : stream.session.socket;\n\t\t\t\tconst value = reference[property];\n\n\t\t\t\treturn typeof value === 'function' ? value.bind(reference) : value;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetPrototypeOf(stream) {\n\t\tif (stream.session !== undefined) {\n\t\t\t// Replaced [kSocket] with .socket\n\t\t\treturn Reflect.getPrototypeOf(stream.session.socket);\n\t\t}\n\n\t\treturn Reflect.getPrototypeOf(stream);\n\t},\n\n\tset(stream, property, value) {\n\t\tswitch (property) {\n\t\t\tcase 'writable':\n\t\t\tcase 'readable':\n\t\t\tcase 'destroyed':\n\t\t\tcase 'on':\n\t\t\tcase 'once':\n\t\t\tcase 'end':\n\t\t\tcase 'emit':\n\t\t\tcase 'destroy':\n\t\t\t\tstream[property] = value;\n\t\t\t\treturn true;\n\t\t\tcase 'setTimeout': {\n\t\t\t\tconst {session} = stream;\n\t\t\t\tif (session === undefined) {\n\t\t\t\t\tstream.setTimeout = value;\n\t\t\t\t} else {\n\t\t\t\t\tsession.setTimeout = value;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcase 'write':\n\t\t\tcase 'read':\n\t\t\tcase 'pause':\n\t\t\tcase 'resume':\n\t\t\t\tthrow new ERR_HTTP2_NO_SOCKET_MANIPULATION();\n\t\t\tdefault: {\n\t\t\t\t// Replaced [kSocket] with .socket\n\t\t\t\tconst reference = stream.session === undefined ? stream : stream.session.socket;\n\t\t\t\treference[property] = value;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n};\n\nmodule.exports = proxySocketHandler;\n",
|
|
140
|
+
"'use strict';\n// See https://github.com/facebook/jest/issues/2549\n// eslint-disable-next-line node/prefer-global/url\nconst {URL, urlToHttpOptions} = require('url');\nconst http2 = require('http2');\nconst {Writable} = require('stream');\nconst {Agent, globalAgent} = require('./agent.js');\nconst IncomingMessage = require('./incoming-message.js');\nconst proxyEvents = require('./utils/proxy-events.js');\nconst {\n\tERR_INVALID_ARG_TYPE,\n\tERR_INVALID_PROTOCOL,\n\tERR_HTTP_HEADERS_SENT\n} = require('./utils/errors.js');\nconst validateHeaderName = require('./utils/validate-header-name.js');\nconst validateHeaderValue = require('./utils/validate-header-value.js');\nconst proxySocketHandler = require('./utils/proxy-socket-handler.js');\n\nconst {\n\tHTTP2_HEADER_STATUS,\n\tHTTP2_HEADER_METHOD,\n\tHTTP2_HEADER_PATH,\n\tHTTP2_HEADER_AUTHORITY,\n\tHTTP2_METHOD_CONNECT\n} = http2.constants;\n\nconst kHeaders = Symbol('headers');\nconst kOrigin = Symbol('origin');\nconst kSession = Symbol('session');\nconst kOptions = Symbol('options');\nconst kFlushedHeaders = Symbol('flushedHeaders');\nconst kJobs = Symbol('jobs');\nconst kPendingAgentPromise = Symbol('pendingAgentPromise');\n\nclass ClientRequest extends Writable {\n\tconstructor(input, options, callback) {\n\t\tsuper({\n\t\t\tautoDestroy: false,\n\t\t\temitClose: false\n\t\t});\n\n\t\tif (typeof input === 'string') {\n\t\t\tinput = urlToHttpOptions(new URL(input));\n\t\t} else if (input instanceof URL) {\n\t\t\tinput = urlToHttpOptions(input);\n\t\t} else {\n\t\t\tinput = {...input};\n\t\t}\n\n\t\tif (typeof options === 'function' || options === undefined) {\n\t\t\t// (options, callback)\n\t\t\tcallback = options;\n\t\t\toptions = input;\n\t\t} else {\n\t\t\t// (input, options, callback)\n\t\t\toptions = Object.assign(input, options);\n\t\t}\n\n\t\tif (options.h2session) {\n\t\t\tthis[kSession] = options.h2session;\n\n\t\t\tif (this[kSession].destroyed) {\n\t\t\t\tthrow new Error('The session has been closed already');\n\t\t\t}\n\n\t\t\tthis.protocol = this[kSession].socket.encrypted ? 'https:' : 'http:';\n\t\t} else if (options.agent === false) {\n\t\t\tthis.agent = new Agent({maxEmptySessions: 0});\n\t\t} else if (typeof options.agent === 'undefined' || options.agent === null) {\n\t\t\tthis.agent = globalAgent;\n\t\t} else if (typeof options.agent.request === 'function') {\n\t\t\tthis.agent = options.agent;\n\t\t} else {\n\t\t\tthrow new ERR_INVALID_ARG_TYPE('options.agent', ['http2wrapper.Agent-like Object', 'undefined', 'false'], options.agent);\n\t\t}\n\n\t\tif (this.agent) {\n\t\t\tthis.protocol = this.agent.protocol;\n\t\t}\n\n\t\tif (options.protocol && options.protocol !== this.protocol) {\n\t\t\tthrow new ERR_INVALID_PROTOCOL(options.protocol, this.protocol);\n\t\t}\n\n\t\tif (!options.port) {\n\t\t\toptions.port = options.defaultPort || (this.agent && this.agent.defaultPort) || 443;\n\t\t}\n\n\t\toptions.host = options.hostname || options.host || 'localhost';\n\n\t\t// Unused\n\t\tdelete options.hostname;\n\n\t\tconst {timeout} = options;\n\t\toptions.timeout = undefined;\n\n\t\tthis[kHeaders] = Object.create(null);\n\t\tthis[kJobs] = [];\n\n\t\tthis[kPendingAgentPromise] = undefined;\n\n\t\tthis.socket = null;\n\t\tthis.connection = null;\n\n\t\tthis.method = options.method || 'GET';\n\n\t\tif (!(this.method === 'CONNECT' && (options.path === '/' || options.path === undefined))) {\n\t\t\tthis.path = options.path;\n\t\t}\n\n\t\tthis.res = null;\n\t\tthis.aborted = false;\n\t\tthis.reusedSocket = false;\n\n\t\tconst {headers} = options;\n\t\tif (headers) {\n\t\t\t// eslint-disable-next-line guard-for-in\n\t\t\tfor (const header in headers) {\n\t\t\t\tthis.setHeader(header, headers[header]);\n\t\t\t}\n\t\t}\n\n\t\tif (options.auth && !('authorization' in this[kHeaders])) {\n\t\t\tthis[kHeaders].authorization = 'Basic ' + Buffer.from(options.auth).toString('base64');\n\t\t}\n\n\t\toptions.session = options.tlsSession;\n\t\toptions.path = options.socketPath;\n\n\t\tthis[kOptions] = options;\n\n\t\t// Clients that generate HTTP/2 requests directly SHOULD use the :authority pseudo-header field instead of the Host header field.\n\t\tthis[kOrigin] = new URL(`${this.protocol}//${options.servername || options.host}:${options.port}`);\n\n\t\t// A socket is being reused\n\t\tconst reuseSocket = options._reuseSocket;\n\t\tif (reuseSocket) {\n\t\t\toptions.createConnection = (...args) => {\n\t\t\t\tif (reuseSocket.destroyed) {\n\t\t\t\t\treturn this.agent.createConnection(...args);\n\t\t\t\t}\n\n\t\t\t\treturn reuseSocket;\n\t\t\t};\n\n\t\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\t\tthis.agent.getSession(this[kOrigin], this[kOptions]).catch(() => {});\n\t\t}\n\n\t\tif (timeout) {\n\t\t\tthis.setTimeout(timeout);\n\t\t}\n\n\t\tif (callback) {\n\t\t\tthis.once('response', callback);\n\t\t}\n\n\t\tthis[kFlushedHeaders] = false;\n\t}\n\n\tget method() {\n\t\treturn this[kHeaders][HTTP2_HEADER_METHOD];\n\t}\n\n\tset method(value) {\n\t\tif (value) {\n\t\t\tthis[kHeaders][HTTP2_HEADER_METHOD] = value.toUpperCase();\n\t\t}\n\t}\n\n\tget path() {\n\t\tconst header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH;\n\n\t\treturn this[kHeaders][header];\n\t}\n\n\tset path(value) {\n\t\tif (value) {\n\t\t\tconst header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH;\n\n\t\t\tthis[kHeaders][header] = value;\n\t\t}\n\t}\n\n\tget host() {\n\t\treturn this[kOrigin].hostname;\n\t}\n\n\tset host(_value) {\n\t\t// Do nothing as this is read only.\n\t}\n\n\tget _mustNotHaveABody() {\n\t\treturn this.method === 'GET' || this.method === 'HEAD' || this.method === 'DELETE';\n\t}\n\n\t_write(chunk, encoding, callback) {\n\t\t// https://github.com/nodejs/node/blob/654df09ae0c5e17d1b52a900a545f0664d8c7627/lib/internal/http2/util.js#L148-L156\n\t\tif (this._mustNotHaveABody) {\n\t\t\tcallback(new Error('The GET, HEAD and DELETE methods must NOT have a body'));\n\t\t\t/* istanbul ignore next: Node.js 12 throws directly */\n\t\t\treturn;\n\t\t}\n\n\t\tthis.flushHeaders();\n\n\t\tconst callWrite = () => this._request.write(chunk, encoding, callback);\n\t\tif (this._request) {\n\t\t\tcallWrite();\n\t\t} else {\n\t\t\tthis[kJobs].push(callWrite);\n\t\t}\n\t}\n\n\t_final(callback) {\n\t\tthis.flushHeaders();\n\n\t\tconst callEnd = () => {\n\t\t\t// For GET, HEAD and DELETE and CONNECT\n\t\t\tif (this._mustNotHaveABody || this.method === 'CONNECT') {\n\t\t\t\tcallback();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._request.end(callback);\n\t\t};\n\n\t\tif (this._request) {\n\t\t\tcallEnd();\n\t\t} else {\n\t\t\tthis[kJobs].push(callEnd);\n\t\t}\n\t}\n\n\tabort() {\n\t\tif (this.res && this.res.complete) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.aborted) {\n\t\t\tprocess.nextTick(() => this.emit('abort'));\n\t\t}\n\n\t\tthis.aborted = true;\n\n\t\tthis.destroy();\n\t}\n\n\tasync _destroy(error, callback) {\n\t\tif (this.res) {\n\t\t\tthis.res._dump();\n\t\t}\n\n\t\tif (this._request) {\n\t\t\tthis._request.destroy();\n\t\t} else {\n\t\t\tprocess.nextTick(() => {\n\t\t\t\tthis.emit('close');\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tawait this[kPendingAgentPromise];\n\t\t} catch (internalError) {\n\t\t\tif (this.aborted) {\n\t\t\t\terror = internalError;\n\t\t\t}\n\t\t}\n\n\t\tcallback(error);\n\t}\n\n\tasync flushHeaders() {\n\t\tif (this[kFlushedHeaders] || this.destroyed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis[kFlushedHeaders] = true;\n\n\t\tconst isConnectMethod = this.method === HTTP2_METHOD_CONNECT;\n\n\t\t// The real magic is here\n\t\tconst onStream = stream => {\n\t\t\tthis._request = stream;\n\n\t\t\tif (this.destroyed) {\n\t\t\t\tstream.destroy();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Forwards `timeout`, `continue`, `close` and `error` events to this instance.\n\t\t\tif (!isConnectMethod) {\n\t\t\t\t// TODO: Should we proxy `close` here?\n\t\t\t\tproxyEvents(stream, this, ['timeout', 'continue']);\n\t\t\t}\n\n\t\t\tstream.once('error', error => {\n\t\t\t\tthis.destroy(error);\n\t\t\t});\n\n\t\t\tstream.once('aborted', () => {\n\t\t\t\tconst {res} = this;\n\t\t\t\tif (res) {\n\t\t\t\t\tres.aborted = true;\n\t\t\t\t\tres.emit('aborted');\n\t\t\t\t\tres.destroy();\n\t\t\t\t} else {\n\t\t\t\t\tthis.destroy(new Error('The server aborted the HTTP/2 stream'));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst onResponse = (headers, flags, rawHeaders) => {\n\t\t\t\t// If we were to emit raw request stream, it would be as fast as the native approach.\n\t\t\t\t// Note that wrapping the raw stream in a Proxy instance won't improve the performance (already tested it).\n\t\t\t\tconst response = new IncomingMessage(this.socket, stream.readableHighWaterMark);\n\t\t\t\tthis.res = response;\n\n\t\t\t\t// Undocumented, but it is used by `cacheable-request`\n\t\t\t\tresponse.url = `${this[kOrigin].origin}${this.path}`;\n\n\t\t\t\tresponse.req = this;\n\t\t\t\tresponse.statusCode = headers[HTTP2_HEADER_STATUS];\n\t\t\t\tresponse.headers = headers;\n\t\t\t\tresponse.rawHeaders = rawHeaders;\n\n\t\t\t\tresponse.once('end', () => {\n\t\t\t\t\tresponse.complete = true;\n\n\t\t\t\t\t// Has no effect, just be consistent with the Node.js behavior\n\t\t\t\t\tresponse.socket = null;\n\t\t\t\t\tresponse.connection = null;\n\t\t\t\t});\n\n\t\t\t\tif (isConnectMethod) {\n\t\t\t\t\tresponse.upgrade = true;\n\n\t\t\t\t\t// The HTTP1 API says the socket is detached here,\n\t\t\t\t\t// but we can't do that so we pass the original HTTP2 request.\n\t\t\t\t\tif (this.emit('connect', response, stream, Buffer.alloc(0))) {\n\t\t\t\t\t\tthis.emit('close');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No listeners attached, destroy the original request.\n\t\t\t\t\t\tstream.destroy();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Forwards data\n\t\t\t\t\tstream.on('data', chunk => {\n\t\t\t\t\t\tif (!response._dumped && !response.push(chunk)) {\n\t\t\t\t\t\t\tstream.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tstream.once('end', () => {\n\t\t\t\t\t\tif (!this.aborted) {\n\t\t\t\t\t\t\tresponse.push(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!this.emit('response', response)) {\n\t\t\t\t\t\t// No listeners attached, dump the response.\n\t\t\t\t\t\tresponse._dump();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// This event tells we are ready to listen for the data.\n\t\t\tstream.once('response', onResponse);\n\n\t\t\t// Emits `information` event\n\t\t\tstream.once('headers', headers => this.emit('information', {statusCode: headers[HTTP2_HEADER_STATUS]}));\n\n\t\t\tstream.once('trailers', (trailers, flags, rawTrailers) => {\n\t\t\t\tconst {res} = this;\n\n\t\t\t\t// https://github.com/nodejs/node/issues/41251\n\t\t\t\tif (res === null) {\n\t\t\t\t\tonResponse(trailers, flags, rawTrailers);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Assigns trailers to the response object.\n\t\t\t\tres.trailers = trailers;\n\t\t\t\tres.rawTrailers = rawTrailers;\n\t\t\t});\n\n\t\t\tstream.once('close', () => {\n\t\t\t\tconst {aborted, res} = this;\n\t\t\t\tif (res) {\n\t\t\t\t\tif (aborted) {\n\t\t\t\t\t\tres.aborted = true;\n\t\t\t\t\t\tres.emit('aborted');\n\t\t\t\t\t\tres.destroy();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst finish = () => {\n\t\t\t\t\t\tres.emit('close');\n\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t\tthis.emit('close');\n\t\t\t\t\t};\n\n\t\t\t\t\tif (res.readable) {\n\t\t\t\t\t\tres.once('end', finish);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfinish();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!this.destroyed) {\n\t\t\t\t\tthis.destroy(new Error('The HTTP/2 stream has been early terminated'));\n\t\t\t\t\tthis.emit('close');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.destroy();\n\t\t\t\tthis.emit('close');\n\t\t\t});\n\n\t\t\tthis.socket = new Proxy(stream, proxySocketHandler);\n\n\t\t\tfor (const job of this[kJobs]) {\n\t\t\t\tjob();\n\t\t\t}\n\n\t\t\tthis[kJobs].length = 0;\n\n\t\t\tthis.emit('socket', this.socket);\n\t\t};\n\n\t\tif (!(HTTP2_HEADER_AUTHORITY in this[kHeaders]) && !isConnectMethod) {\n\t\t\tthis[kHeaders][HTTP2_HEADER_AUTHORITY] = this[kOrigin].host;\n\t\t}\n\n\t\t// Makes a HTTP2 request\n\t\tif (this[kSession]) {\n\t\t\ttry {\n\t\t\t\tonStream(this[kSession].request(this[kHeaders]));\n\t\t\t} catch (error) {\n\t\t\t\tthis.destroy(error);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.reusedSocket = true;\n\n\t\t\ttry {\n\t\t\t\tconst promise = this.agent.request(this[kOrigin], this[kOptions], this[kHeaders]);\n\t\t\t\tthis[kPendingAgentPromise] = promise;\n\n\t\t\t\tonStream(await promise);\n\n\t\t\t\tthis[kPendingAgentPromise] = false;\n\t\t\t} catch (error) {\n\t\t\t\tthis[kPendingAgentPromise] = false;\n\n\t\t\t\tthis.destroy(error);\n\t\t\t}\n\t\t}\n\t}\n\n\tget connection() {\n\t\treturn this.socket;\n\t}\n\n\tset connection(value) {\n\t\tthis.socket = value;\n\t}\n\n\tgetHeaderNames() {\n\t\treturn Object.keys(this[kHeaders]);\n\t}\n\n\thasHeader(name) {\n\t\tif (typeof name !== 'string') {\n\t\t\tthrow new ERR_INVALID_ARG_TYPE('name', 'string', name);\n\t\t}\n\n\t\treturn Boolean(this[kHeaders][name.toLowerCase()]);\n\t}\n\n\tgetHeader(name) {\n\t\tif (typeof name !== 'string') {\n\t\t\tthrow new ERR_INVALID_ARG_TYPE('name', 'string', name);\n\t\t}\n\n\t\treturn this[kHeaders][name.toLowerCase()];\n\t}\n\n\tget headersSent() {\n\t\treturn this[kFlushedHeaders];\n\t}\n\n\tremoveHeader(name) {\n\t\tif (typeof name !== 'string') {\n\t\t\tthrow new ERR_INVALID_ARG_TYPE('name', 'string', name);\n\t\t}\n\n\t\tif (this.headersSent) {\n\t\t\tthrow new ERR_HTTP_HEADERS_SENT('remove');\n\t\t}\n\n\t\tdelete this[kHeaders][name.toLowerCase()];\n\t}\n\n\tsetHeader(name, value) {\n\t\tif (this.headersSent) {\n\t\t\tthrow new ERR_HTTP_HEADERS_SENT('set');\n\t\t}\n\n\t\tvalidateHeaderName(name);\n\t\tvalidateHeaderValue(name, value);\n\n\t\tconst lowercased = name.toLowerCase();\n\n\t\tif (lowercased === 'connection') {\n\t\t\tif (value.toLowerCase() === 'keep-alive') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrow new Error(`Invalid 'connection' header: ${value}`);\n\t\t}\n\n\t\tif (lowercased === 'host' && this.method === 'CONNECT') {\n\t\t\tthis[kHeaders][HTTP2_HEADER_AUTHORITY] = value;\n\t\t} else {\n\t\t\tthis[kHeaders][lowercased] = value;\n\t\t}\n\t}\n\n\tsetNoDelay() {\n\t\t// HTTP2 sockets cannot be malformed, do nothing.\n\t}\n\n\tsetSocketKeepAlive() {\n\t\t// HTTP2 sockets cannot be malformed, do nothing.\n\t}\n\n\tsetTimeout(ms, callback) {\n\t\tconst applyTimeout = () => this._request.setTimeout(ms, callback);\n\n\t\tif (this._request) {\n\t\t\tapplyTimeout();\n\t\t} else {\n\t\t\tthis[kJobs].push(applyTimeout);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tget maxHeadersCount() {\n\t\tif (!this.destroyed && this._request) {\n\t\t\treturn this._request.session.localSettings.maxHeaderListSize;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tset maxHeadersCount(_value) {\n\t\t// Updating HTTP2 settings would affect all requests, do nothing.\n\t}\n}\n\nmodule.exports = ClientRequest;\n",
|
|
141
|
+
"'use strict';\nconst tls = require('tls');\n\nmodule.exports = (options = {}, connect = tls.connect) => new Promise((resolve, reject) => {\n\tlet timeout = false;\n\n\tlet socket;\n\n\tconst callback = async () => {\n\t\tawait socketPromise;\n\n\t\tsocket.off('timeout', onTimeout);\n\t\tsocket.off('error', reject);\n\n\t\tif (options.resolveSocket) {\n\t\t\tresolve({alpnProtocol: socket.alpnProtocol, socket, timeout});\n\n\t\t\tif (timeout) {\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tsocket.emit('timeout');\n\t\t\t}\n\t\t} else {\n\t\t\tsocket.destroy();\n\t\t\tresolve({alpnProtocol: socket.alpnProtocol, timeout});\n\t\t}\n\t};\n\n\tconst onTimeout = async () => {\n\t\ttimeout = true;\n\t\tcallback();\n\t};\n\n\tconst socketPromise = (async () => {\n\t\ttry {\n\t\t\tsocket = await connect(options, callback);\n\n\t\t\tsocket.on('error', reject);\n\t\t\tsocket.once('timeout', onTimeout);\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\t})();\n});\n",
|
|
142
|
+
"'use strict';\nconst {isIP} = require('net');\nconst assert = require('assert');\n\nconst getHost = host => {\n\tif (host[0] === '[') {\n\t\tconst idx = host.indexOf(']');\n\n\t\tassert(idx !== -1);\n\t\treturn host.slice(1, idx);\n\t}\n\n\tconst idx = host.indexOf(':');\n\tif (idx === -1) {\n\t\treturn host;\n\t}\n\n\treturn host.slice(0, idx);\n};\n\nmodule.exports = host => {\n\tconst servername = getHost(host);\n\n\tif (isIP(servername)) {\n\t\treturn '';\n\t}\n\n\treturn servername;\n};\n",
|
|
143
|
+
"'use strict';\n// See https://github.com/facebook/jest/issues/2549\n// eslint-disable-next-line node/prefer-global/url\nconst {URL, urlToHttpOptions} = require('url');\nconst http = require('http');\nconst https = require('https');\nconst resolveALPN = require('resolve-alpn');\nconst QuickLRU = require('quick-lru');\nconst {Agent, globalAgent} = require('./agent.js');\nconst Http2ClientRequest = require('./client-request.js');\nconst calculateServerName = require('./utils/calculate-server-name.js');\nconst delayAsyncDestroy = require('./utils/delay-async-destroy.js');\n\nconst cache = new QuickLRU({maxSize: 100});\nconst queue = new Map();\n\nconst installSocket = (agent, socket, options) => {\n\tsocket._httpMessage = {shouldKeepAlive: true};\n\n\tconst onFree = () => {\n\t\tagent.emit('free', socket, options);\n\t};\n\n\tsocket.on('free', onFree);\n\n\tconst onClose = () => {\n\t\tagent.removeSocket(socket, options);\n\t};\n\n\tsocket.on('close', onClose);\n\n\tconst onTimeout = () => {\n\t\tconst {freeSockets} = agent;\n\n\t\tfor (const sockets of Object.values(freeSockets)) {\n\t\t\tif (sockets.includes(socket)) {\n\t\t\t\tsocket.destroy();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t};\n\n\tsocket.on('timeout', onTimeout);\n\n\tconst onRemove = () => {\n\t\tagent.removeSocket(socket, options);\n\t\tsocket.off('close', onClose);\n\t\tsocket.off('free', onFree);\n\t\tsocket.off('timeout', onTimeout);\n\t\tsocket.off('agentRemove', onRemove);\n\t};\n\n\tsocket.on('agentRemove', onRemove);\n\n\tagent.emit('free', socket, options);\n};\n\nconst createResolveProtocol = (cache, queue = new Map(), connect = undefined) => {\n\treturn async options => {\n\t\tconst name = `${options.host}:${options.port}:${options.ALPNProtocols.sort()}`;\n\n\t\tif (!cache.has(name)) {\n\t\t\tif (queue.has(name)) {\n\t\t\t\tconst result = await queue.get(name);\n\t\t\t\treturn {alpnProtocol: result.alpnProtocol};\n\t\t\t}\n\n\t\t\tconst {path} = options;\n\t\t\toptions.path = options.socketPath;\n\n\t\t\tconst resultPromise = resolveALPN(options, connect);\n\t\t\tqueue.set(name, resultPromise);\n\n\t\t\ttry {\n\t\t\t\tconst result = await resultPromise;\n\n\t\t\t\tcache.set(name, result.alpnProtocol);\n\t\t\t\tqueue.delete(name);\n\n\t\t\t\toptions.path = path;\n\n\t\t\t\treturn result;\n\t\t\t} catch (error) {\n\t\t\t\tqueue.delete(name);\n\n\t\t\t\toptions.path = path;\n\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\treturn {alpnProtocol: cache.get(name)};\n\t};\n};\n\nconst defaultResolveProtocol = createResolveProtocol(cache, queue);\n\nmodule.exports = async (input, options, callback) => {\n\tif (typeof input === 'string') {\n\t\tinput = urlToHttpOptions(new URL(input));\n\t} else if (input instanceof URL) {\n\t\tinput = urlToHttpOptions(input);\n\t} else {\n\t\tinput = {...input};\n\t}\n\n\tif (typeof options === 'function' || options === undefined) {\n\t\t// (options, callback)\n\t\tcallback = options;\n\t\toptions = input;\n\t} else {\n\t\t// (input, options, callback)\n\t\toptions = Object.assign(input, options);\n\t}\n\n\toptions.ALPNProtocols = options.ALPNProtocols || ['h2', 'http/1.1'];\n\n\tif (!Array.isArray(options.ALPNProtocols) || options.ALPNProtocols.length === 0) {\n\t\tthrow new Error('The `ALPNProtocols` option must be an Array with at least one entry');\n\t}\n\n\toptions.protocol = options.protocol || 'https:';\n\tconst isHttps = options.protocol === 'https:';\n\n\toptions.host = options.hostname || options.host || 'localhost';\n\toptions.session = options.tlsSession;\n\toptions.servername = options.servername || calculateServerName((options.headers && options.headers.host) || options.host);\n\toptions.port = options.port || (isHttps ? 443 : 80);\n\toptions._defaultAgent = isHttps ? https.globalAgent : http.globalAgent;\n\n\tconst resolveProtocol = options.resolveProtocol || defaultResolveProtocol;\n\n\t// Note: We don't support `h2session` here\n\n\tlet {agent} = options;\n\tif (agent !== undefined && agent !== false && agent.constructor.name !== 'Object') {\n\t\tthrow new Error('The `options.agent` can be only an object `http`, `https` or `http2` properties');\n\t}\n\n\tif (isHttps) {\n\t\toptions.resolveSocket = true;\n\n\t\tlet {socket, alpnProtocol, timeout} = await resolveProtocol(options);\n\n\t\tif (timeout) {\n\t\t\tif (socket) {\n\t\t\t\tsocket.destroy();\n\t\t\t}\n\n\t\t\tconst error = new Error(`Timed out resolving ALPN: ${options.timeout} ms`);\n\t\t\terror.code = 'ETIMEDOUT';\n\t\t\terror.ms = options.timeout;\n\n\t\t\tthrow error;\n\t\t}\n\n\t\t// We can't accept custom `createConnection` because the API is different for HTTP/2\n\t\tif (socket && options.createConnection) {\n\t\t\tsocket.destroy();\n\t\t\tsocket = undefined;\n\t\t}\n\n\t\tdelete options.resolveSocket;\n\n\t\tconst isHttp2 = alpnProtocol === 'h2';\n\n\t\tif (agent) {\n\t\t\tagent = isHttp2 ? agent.http2 : agent.https;\n\t\t\toptions.agent = agent;\n\t\t}\n\n\t\tif (agent === undefined) {\n\t\t\tagent = isHttp2 ? globalAgent : https.globalAgent;\n\t\t}\n\n\t\tif (socket) {\n\t\t\tif (agent === false) {\n\t\t\t\tsocket.destroy();\n\t\t\t} else {\n\t\t\t\tconst defaultCreateConnection = (isHttp2 ? Agent : https.Agent).prototype.createConnection;\n\n\t\t\t\tif (agent.createConnection === defaultCreateConnection) {\n\t\t\t\t\tif (isHttp2) {\n\t\t\t\t\t\toptions._reuseSocket = socket;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinstallSocket(agent, socket, options);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tsocket.destroy();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (isHttp2) {\n\t\t\treturn delayAsyncDestroy(new Http2ClientRequest(options, callback));\n\t\t}\n\t} else if (agent) {\n\t\toptions.agent = agent.http;\n\t}\n\n\t// If we're sending HTTP/1.1, handle any explicitly set H2 headers in the options:\n\tif (options.headers) {\n\t\toptions.headers = {...options.headers};\n\n\t\t// :authority is equivalent to the HTTP/1.1 host header\n\t\tif (options.headers[':authority']) {\n\t\t\tif (!options.headers.host) {\n\t\t\t\toptions.headers.host = options.headers[':authority'];\n\t\t\t}\n\n\t\t\tdelete options.headers[':authority'];\n\t\t}\n\n\t\t// Remove other HTTP/2 headers as they have their counterparts in the options\n\t\tdelete options.headers[':method'];\n\t\tdelete options.headers[':scheme'];\n\t\tdelete options.headers[':path'];\n\t}\n\n\treturn delayAsyncDestroy(http.request(options, callback));\n};\n\nmodule.exports.protocolCache = cache;\nmodule.exports.resolveProtocol = defaultResolveProtocol;\nmodule.exports.createResolveProtocol = createResolveProtocol;\n",
|
|
144
|
+
"'use strict';\nconst stream = require('stream');\nconst tls = require('tls');\n\n// Really awesome hack.\nconst JSStreamSocket = (new tls.TLSSocket(new stream.PassThrough()))._handle._parentWrap.constructor;\n\nmodule.exports = JSStreamSocket;\n",
|
|
145
|
+
"'use strict';\n\nclass UnexpectedStatusCodeError extends Error {\n\tconstructor(statusCode, statusMessage = '') {\n\t\tsuper(`The proxy server rejected the request with status code ${statusCode} (${statusMessage || 'empty status message'})`);\n\t\tthis.statusCode = statusCode;\n\t\tthis.statusMessage = statusMessage;\n\t}\n}\n\nmodule.exports = UnexpectedStatusCodeError;\n",
|
|
146
|
+
"'use strict';\n\nconst checkType = (name, value, types) => {\n\tconst valid = types.some(type => {\n\t\tconst typeofType = typeof type;\n\t\tif (typeofType === 'string') {\n\t\t\treturn typeof value === type;\n\t\t}\n\n\t\treturn value instanceof type;\n\t});\n\n\tif (!valid) {\n\t\tconst names = types.map(type => typeof type === 'string' ? type : type.name);\n\n\t\tthrow new TypeError(`Expected '${name}' to be a type of ${names.join(' or ')}, got ${typeof value}`);\n\t}\n};\n\nmodule.exports = checkType;\n",
|
|
147
|
+
"'use strict';\n// See https://github.com/facebook/jest/issues/2549\n// eslint-disable-next-line node/prefer-global/url\nconst {URL} = require('url');\nconst checkType = require('../utils/check-type.js');\n\nmodule.exports = (self, proxyOptions) => {\n\tcheckType('proxyOptions', proxyOptions, ['object']);\n\tcheckType('proxyOptions.headers', proxyOptions.headers, ['object', 'undefined']);\n\tcheckType('proxyOptions.raw', proxyOptions.raw, ['boolean', 'undefined']);\n\tcheckType('proxyOptions.url', proxyOptions.url, [URL, 'string']);\n\n\tconst url = new URL(proxyOptions.url);\n\n\tself.proxyOptions = {\n\t\traw: true,\n\t\t...proxyOptions,\n\t\theaders: {...proxyOptions.headers},\n\t\turl\n\t};\n};\n",
|
|
148
|
+
"'use strict';\n\nmodule.exports = self => {\n\tconst {username, password} = self.proxyOptions.url;\n\n\tif (username || password) {\n\t\tconst data = `${username}:${password}`;\n\t\tconst authorization = `Basic ${Buffer.from(data).toString('base64')}`;\n\n\t\treturn {\n\t\t\t'proxy-authorization': authorization,\n\t\t\tauthorization\n\t\t};\n\t}\n\n\treturn {};\n};\n",
|
|
149
|
+
"'use strict';\nconst tls = require('tls');\nconst http = require('http');\nconst https = require('https');\nconst JSStreamSocket = require('../utils/js-stream-socket.js');\nconst {globalAgent} = require('../agent.js');\nconst UnexpectedStatusCodeError = require('./unexpected-status-code-error.js');\nconst initialize = require('./initialize.js');\nconst getAuthorizationHeaders = require('./get-auth-headers.js');\n\nconst createConnection = (self, options, callback) => {\n\t(async () => {\n\t\ttry {\n\t\t\tconst {proxyOptions} = self;\n\t\t\tconst {url, headers, raw} = proxyOptions;\n\n\t\t\tconst stream = await globalAgent.request(url, proxyOptions, {\n\t\t\t\t...getAuthorizationHeaders(self),\n\t\t\t\t...headers,\n\t\t\t\t':method': 'CONNECT',\n\t\t\t\t':authority': `${options.host}:${options.port}`\n\t\t\t});\n\n\t\t\tstream.once('error', callback);\n\t\t\tstream.once('response', headers => {\n\t\t\t\tconst statusCode = headers[':status'];\n\n\t\t\t\tif (statusCode !== 200) {\n\t\t\t\t\tcallback(new UnexpectedStatusCodeError(statusCode, ''));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst encrypted = self instanceof https.Agent;\n\n\t\t\t\tif (raw && encrypted) {\n\t\t\t\t\toptions.socket = stream;\n\t\t\t\t\tconst secureStream = tls.connect(options);\n\n\t\t\t\t\tsecureStream.once('close', () => {\n\t\t\t\t\t\tstream.destroy();\n\t\t\t\t\t});\n\n\t\t\t\t\tcallback(null, secureStream);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst socket = new JSStreamSocket(stream);\n\t\t\t\tsocket.encrypted = false;\n\t\t\t\tsocket._handle.getpeername = out => {\n\t\t\t\t\tout.family = undefined;\n\t\t\t\t\tout.address = undefined;\n\t\t\t\t\tout.port = undefined;\n\t\t\t\t};\n\n\t\t\t\tcallback(null, socket);\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tcallback(error);\n\t\t}\n\t})();\n};\n\nclass HttpOverHttp2 extends http.Agent {\n\tconstructor(options) {\n\t\tsuper(options);\n\n\t\tinitialize(this, options.proxyOptions);\n\t}\n\n\tcreateConnection(options, callback) {\n\t\tcreateConnection(this, options, callback);\n\t}\n}\n\nclass HttpsOverHttp2 extends https.Agent {\n\tconstructor(options) {\n\t\tsuper(options);\n\n\t\tinitialize(this, options.proxyOptions);\n\t}\n\n\tcreateConnection(options, callback) {\n\t\tcreateConnection(this, options, callback);\n\t}\n}\n\nmodule.exports = {\n\tHttpOverHttp2,\n\tHttpsOverHttp2\n};\n",
|
|
150
|
+
"'use strict';\nconst {Agent} = require('../agent.js');\nconst JSStreamSocket = require('../utils/js-stream-socket.js');\nconst UnexpectedStatusCodeError = require('./unexpected-status-code-error.js');\nconst initialize = require('./initialize.js');\n\nclass Http2OverHttpX extends Agent {\n\tconstructor(options) {\n\t\tsuper(options);\n\n\t\tinitialize(this, options.proxyOptions);\n\t}\n\n\tasync createConnection(origin, options) {\n\t\tconst authority = `${origin.hostname}:${origin.port || 443}`;\n\n\t\tconst [stream, statusCode, statusMessage] = await this._getProxyStream(authority);\n\t\tif (statusCode !== 200) {\n\t\t\tthrow new UnexpectedStatusCodeError(statusCode, statusMessage);\n\t\t}\n\n\t\tif (this.proxyOptions.raw) {\n\t\t\toptions.socket = stream;\n\t\t} else {\n\t\t\tconst socket = new JSStreamSocket(stream);\n\t\t\tsocket.encrypted = false;\n\t\t\tsocket._handle.getpeername = out => {\n\t\t\t\tout.family = undefined;\n\t\t\t\tout.address = undefined;\n\t\t\t\tout.port = undefined;\n\t\t\t};\n\n\t\t\treturn socket;\n\t\t}\n\n\t\treturn super.createConnection(origin, options);\n\t}\n}\n\nmodule.exports = Http2OverHttpX;\n",
|
|
151
|
+
"'use strict';\nconst {globalAgent} = require('../agent.js');\nconst Http2OverHttpX = require('./h2-over-hx.js');\nconst getAuthorizationHeaders = require('./get-auth-headers.js');\n\nconst getStatusCode = stream => new Promise((resolve, reject) => {\n\tstream.once('error', reject);\n\tstream.once('response', headers => {\n\t\tstream.off('error', reject);\n\t\tresolve(headers[':status']);\n\t});\n});\n\nclass Http2OverHttp2 extends Http2OverHttpX {\n\tasync _getProxyStream(authority) {\n\t\tconst {proxyOptions} = this;\n\n\t\tconst headers = {\n\t\t\t...getAuthorizationHeaders(this),\n\t\t\t...proxyOptions.headers,\n\t\t\t':method': 'CONNECT',\n\t\t\t':authority': authority\n\t\t};\n\n\t\tconst stream = await globalAgent.request(proxyOptions.url, proxyOptions, headers);\n\t\tconst statusCode = await getStatusCode(stream);\n\n\t\treturn [stream, statusCode, ''];\n\t}\n}\n\nmodule.exports = Http2OverHttp2;\n",
|
|
152
|
+
"'use strict';\nconst http = require('http');\nconst https = require('https');\nconst Http2OverHttpX = require('./h2-over-hx.js');\nconst getAuthorizationHeaders = require('./get-auth-headers.js');\n\nconst getStream = request => new Promise((resolve, reject) => {\n\tconst onConnect = (response, socket, head) => {\n\t\tsocket.unshift(head);\n\n\t\trequest.off('error', reject);\n\t\tresolve([socket, response.statusCode, response.statusMessage]);\n\t};\n\n\trequest.once('error', reject);\n\trequest.once('connect', onConnect);\n});\n\nclass Http2OverHttp extends Http2OverHttpX {\n\tasync _getProxyStream(authority) {\n\t\tconst {proxyOptions} = this;\n\t\tconst {url, headers} = this.proxyOptions;\n\n\t\tconst network = url.protocol === 'https:' ? https : http;\n\n\t\t// `new URL('https://localhost/httpbin.org:443')` results in\n\t\t// a `/httpbin.org:443` path, which has an invalid leading slash.\n\t\tconst request = network.request({\n\t\t\t...proxyOptions,\n\t\t\thostname: url.hostname,\n\t\t\tport: url.port,\n\t\t\tpath: authority,\n\t\t\theaders: {\n\t\t\t\t...getAuthorizationHeaders(this),\n\t\t\t\t...headers,\n\t\t\t\thost: authority\n\t\t\t},\n\t\t\tmethod: 'CONNECT'\n\t\t}).end();\n\n\t\treturn getStream(request);\n\t}\n}\n\nmodule.exports = {\n\tHttp2OverHttp,\n\tHttp2OverHttps: Http2OverHttp\n};\n",
|
|
153
|
+
"'use strict';\nconst http2 = require('http2');\nconst {\n\tAgent,\n\tglobalAgent\n} = require('./agent.js');\nconst ClientRequest = require('./client-request.js');\nconst IncomingMessage = require('./incoming-message.js');\nconst auto = require('./auto.js');\nconst {\n\tHttpOverHttp2,\n\tHttpsOverHttp2\n} = require('./proxies/h1-over-h2.js');\nconst Http2OverHttp2 = require('./proxies/h2-over-h2.js');\nconst {\n\tHttp2OverHttp,\n\tHttp2OverHttps\n} = require('./proxies/h2-over-h1.js');\nconst validateHeaderName = require('./utils/validate-header-name.js');\nconst validateHeaderValue = require('./utils/validate-header-value.js');\n\nconst request = (url, options, callback) => new ClientRequest(url, options, callback);\n\nconst get = (url, options, callback) => {\n\t// eslint-disable-next-line unicorn/prevent-abbreviations\n\tconst req = new ClientRequest(url, options, callback);\n\treq.end();\n\n\treturn req;\n};\n\nmodule.exports = {\n\t...http2,\n\tClientRequest,\n\tIncomingMessage,\n\tAgent,\n\tglobalAgent,\n\trequest,\n\tget,\n\tauto,\n\tproxies: {\n\t\tHttpOverHttp2,\n\t\tHttpsOverHttp2,\n\t\tHttp2OverHttp2,\n\t\tHttp2OverHttp,\n\t\tHttp2OverHttps\n\t},\n\tvalidateHeaderName,\n\tvalidateHeaderValue\n};\n",
|
|
154
|
+
"export default function parseLinkHeader(link) {\n const parsed = [];\n const items = link.split(',');\n for (const item of items) {\n // https://tools.ietf.org/html/rfc5988#section-5\n const [rawUriReference, ...rawLinkParameters] = item.split(';');\n const trimmedUriReference = rawUriReference.trim();\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n if (trimmedUriReference[0] !== '<' || trimmedUriReference[trimmedUriReference.length - 1] !== '>') {\n throw new Error(`Invalid format of the Link header reference: ${trimmedUriReference}`);\n }\n const reference = trimmedUriReference.slice(1, -1);\n const parameters = {};\n if (rawLinkParameters.length === 0) {\n throw new Error(`Unexpected end of Link header parameters: ${rawLinkParameters.join(';')}`);\n }\n for (const rawParameter of rawLinkParameters) {\n const trimmedRawParameter = rawParameter.trim();\n const center = trimmedRawParameter.indexOf('=');\n if (center === -1) {\n throw new Error(`Failed to parse Link header: ${link}`);\n }\n const name = trimmedRawParameter.slice(0, center).trim();\n const value = trimmedRawParameter.slice(center + 1).trim();\n parameters[name] = value;\n }\n parsed.push({\n reference,\n parameters,\n });\n }\n return parsed;\n}\n",
|
|
155
|
+
"import process from 'node:process';\nimport { promisify, inspect } from 'node:util';\nimport { checkServerIdentity } from 'node:tls';\n// DO NOT use destructuring for `https.request` and `http.request` as it's not compatible with `nock`.\nimport http from 'node:http';\nimport https from 'node:https';\nimport is, { assert } from '@sindresorhus/is';\nimport lowercaseKeys from 'lowercase-keys';\nimport CacheableLookup from 'cacheable-lookup';\nimport http2wrapper from 'http2-wrapper';\nimport { isFormData } from 'form-data-encoder';\nimport parseLinkHeader from './parse-link-header.js';\nconst [major, minor] = process.versions.node.split('.').map(Number);\nfunction validateSearchParameters(searchParameters) {\n // eslint-disable-next-line guard-for-in\n for (const key in searchParameters) {\n const value = searchParameters[key];\n assert.any([is.string, is.number, is.boolean, is.null_, is.undefined], value);\n }\n}\nconst globalCache = new Map();\nlet globalDnsCache;\nconst getGlobalDnsCache = () => {\n if (globalDnsCache) {\n return globalDnsCache;\n }\n globalDnsCache = new CacheableLookup();\n return globalDnsCache;\n};\nconst defaultInternals = {\n request: undefined,\n agent: {\n http: undefined,\n https: undefined,\n http2: undefined,\n },\n h2session: undefined,\n decompress: true,\n timeout: {\n connect: undefined,\n lookup: undefined,\n read: undefined,\n request: undefined,\n response: undefined,\n secureConnect: undefined,\n send: undefined,\n socket: undefined,\n },\n prefixUrl: '',\n body: undefined,\n form: undefined,\n json: undefined,\n cookieJar: undefined,\n ignoreInvalidCookies: false,\n searchParams: undefined,\n dnsLookup: undefined,\n dnsCache: undefined,\n context: {},\n hooks: {\n init: [],\n beforeRequest: [],\n beforeError: [],\n beforeRedirect: [],\n beforeRetry: [],\n afterResponse: [],\n },\n followRedirect: true,\n maxRedirects: 10,\n cache: undefined,\n throwHttpErrors: true,\n username: '',\n password: '',\n http2: false,\n allowGetBody: false,\n headers: {\n 'user-agent': 'got (https://github.com/sindresorhus/got)',\n },\n methodRewriting: false,\n dnsLookupIpVersion: undefined,\n parseJson: JSON.parse,\n stringifyJson: JSON.stringify,\n retry: {\n limit: 2,\n methods: [\n 'GET',\n 'PUT',\n 'HEAD',\n 'DELETE',\n 'OPTIONS',\n 'TRACE',\n ],\n statusCodes: [\n 408,\n 413,\n 429,\n 500,\n 502,\n 503,\n 504,\n 521,\n 522,\n 524,\n ],\n errorCodes: [\n 'ETIMEDOUT',\n 'ECONNRESET',\n 'EADDRINUSE',\n 'ECONNREFUSED',\n 'EPIPE',\n 'ENOTFOUND',\n 'ENETUNREACH',\n 'EAI_AGAIN',\n ],\n maxRetryAfter: undefined,\n calculateDelay: ({ computedValue }) => computedValue,\n backoffLimit: Number.POSITIVE_INFINITY,\n noise: 100,\n },\n localAddress: undefined,\n method: 'GET',\n createConnection: undefined,\n cacheOptions: {\n shared: undefined,\n cacheHeuristic: undefined,\n immutableMinTimeToLive: undefined,\n ignoreCargoCult: undefined,\n },\n https: {\n alpnProtocols: undefined,\n rejectUnauthorized: undefined,\n checkServerIdentity: undefined,\n certificateAuthority: undefined,\n key: undefined,\n certificate: undefined,\n passphrase: undefined,\n pfx: undefined,\n ciphers: undefined,\n honorCipherOrder: undefined,\n minVersion: undefined,\n maxVersion: undefined,\n signatureAlgorithms: undefined,\n tlsSessionLifetime: undefined,\n dhparam: undefined,\n ecdhCurve: undefined,\n certificateRevocationLists: undefined,\n },\n encoding: undefined,\n resolveBodyOnly: false,\n isStream: false,\n responseType: 'text',\n url: undefined,\n pagination: {\n transform(response) {\n if (response.request.options.responseType === 'json') {\n return response.body;\n }\n return JSON.parse(response.body);\n },\n paginate({ response }) {\n const rawLinkHeader = response.headers.link;\n if (typeof rawLinkHeader !== 'string' || rawLinkHeader.trim() === '') {\n return false;\n }\n const parsed = parseLinkHeader(rawLinkHeader);\n const next = parsed.find(entry => entry.parameters.rel === 'next' || entry.parameters.rel === '\"next\"');\n if (next) {\n return {\n url: new URL(next.reference, response.url),\n };\n }\n return false;\n },\n filter: () => true,\n shouldContinue: () => true,\n countLimit: Number.POSITIVE_INFINITY,\n backoff: 0,\n requestLimit: 10000,\n stackAllItems: false,\n },\n setHost: true,\n maxHeaderSize: undefined,\n signal: undefined,\n enableUnixSockets: false,\n};\nconst cloneInternals = (internals) => {\n const { hooks, retry } = internals;\n const result = {\n ...internals,\n context: { ...internals.context },\n cacheOptions: { ...internals.cacheOptions },\n https: { ...internals.https },\n agent: { ...internals.agent },\n headers: { ...internals.headers },\n retry: {\n ...retry,\n errorCodes: [...retry.errorCodes],\n methods: [...retry.methods],\n statusCodes: [...retry.statusCodes],\n },\n timeout: { ...internals.timeout },\n hooks: {\n init: [...hooks.init],\n beforeRequest: [...hooks.beforeRequest],\n beforeError: [...hooks.beforeError],\n beforeRedirect: [...hooks.beforeRedirect],\n beforeRetry: [...hooks.beforeRetry],\n afterResponse: [...hooks.afterResponse],\n },\n searchParams: internals.searchParams ? new URLSearchParams(internals.searchParams) : undefined,\n pagination: { ...internals.pagination },\n };\n if (result.url !== undefined) {\n result.prefixUrl = '';\n }\n return result;\n};\nconst cloneRaw = (raw) => {\n const { hooks, retry } = raw;\n const result = { ...raw };\n if (is.object(raw.context)) {\n result.context = { ...raw.context };\n }\n if (is.object(raw.cacheOptions)) {\n result.cacheOptions = { ...raw.cacheOptions };\n }\n if (is.object(raw.https)) {\n result.https = { ...raw.https };\n }\n if (is.object(raw.cacheOptions)) {\n result.cacheOptions = { ...result.cacheOptions };\n }\n if (is.object(raw.agent)) {\n result.agent = { ...raw.agent };\n }\n if (is.object(raw.headers)) {\n result.headers = { ...raw.headers };\n }\n if (is.object(retry)) {\n result.retry = { ...retry };\n if (is.array(retry.errorCodes)) {\n result.retry.errorCodes = [...retry.errorCodes];\n }\n if (is.array(retry.methods)) {\n result.retry.methods = [...retry.methods];\n }\n if (is.array(retry.statusCodes)) {\n result.retry.statusCodes = [...retry.statusCodes];\n }\n }\n if (is.object(raw.timeout)) {\n result.timeout = { ...raw.timeout };\n }\n if (is.object(hooks)) {\n result.hooks = {\n ...hooks,\n };\n if (is.array(hooks.init)) {\n result.hooks.init = [...hooks.init];\n }\n if (is.array(hooks.beforeRequest)) {\n result.hooks.beforeRequest = [...hooks.beforeRequest];\n }\n if (is.array(hooks.beforeError)) {\n result.hooks.beforeError = [...hooks.beforeError];\n }\n if (is.array(hooks.beforeRedirect)) {\n result.hooks.beforeRedirect = [...hooks.beforeRedirect];\n }\n if (is.array(hooks.beforeRetry)) {\n result.hooks.beforeRetry = [...hooks.beforeRetry];\n }\n if (is.array(hooks.afterResponse)) {\n result.hooks.afterResponse = [...hooks.afterResponse];\n }\n }\n // TODO: raw.searchParams\n if (is.object(raw.pagination)) {\n result.pagination = { ...raw.pagination };\n }\n return result;\n};\nconst getHttp2TimeoutOption = (internals) => {\n const delays = [internals.timeout.socket, internals.timeout.connect, internals.timeout.lookup, internals.timeout.request, internals.timeout.secureConnect].filter(delay => typeof delay === 'number');\n if (delays.length > 0) {\n return Math.min(...delays);\n }\n return undefined;\n};\nconst init = (options, withOptions, self) => {\n const initHooks = options.hooks?.init;\n if (initHooks) {\n for (const hook of initHooks) {\n hook(withOptions, self);\n }\n }\n};\nexport default class Options {\n constructor(input, options, defaults) {\n Object.defineProperty(this, \"_unixOptions\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_internals\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_merging\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_init\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n assert.any([is.string, is.urlInstance, is.object, is.undefined], input);\n assert.any([is.object, is.undefined], options);\n assert.any([is.object, is.undefined], defaults);\n if (input instanceof Options || options instanceof Options) {\n throw new TypeError('The defaults must be passed as the third argument');\n }\n this._internals = cloneInternals(defaults?._internals ?? defaults ?? defaultInternals);\n this._init = [...(defaults?._init ?? [])];\n this._merging = false;\n this._unixOptions = undefined;\n // This rule allows `finally` to be considered more important.\n // Meaning no matter the error thrown in the `try` block,\n // if `finally` throws then the `finally` error will be thrown.\n //\n // Yes, we want this. If we set `url` first, then the `url.searchParams`\n // would get merged. Instead we set the `searchParams` first, then\n // `url.searchParams` is overwritten as expected.\n //\n /* eslint-disable no-unsafe-finally */\n try {\n if (is.plainObject(input)) {\n try {\n this.merge(input);\n this.merge(options);\n }\n finally {\n this.url = input.url;\n }\n }\n else {\n try {\n this.merge(options);\n }\n finally {\n if (options?.url !== undefined) {\n if (input === undefined) {\n this.url = options.url;\n }\n else {\n throw new TypeError('The `url` option is mutually exclusive with the `input` argument');\n }\n }\n else if (input !== undefined) {\n this.url = input;\n }\n }\n }\n }\n catch (error) {\n error.options = this;\n throw error;\n }\n /* eslint-enable no-unsafe-finally */\n }\n merge(options) {\n if (!options) {\n return;\n }\n if (options instanceof Options) {\n for (const init of options._init) {\n this.merge(init);\n }\n return;\n }\n options = cloneRaw(options);\n init(this, options, this);\n init(options, options, this);\n this._merging = true;\n // Always merge `isStream` first\n if ('isStream' in options) {\n this.isStream = options.isStream;\n }\n try {\n let push = false;\n for (const key in options) {\n // `got.extend()` options\n if (key === 'mutableDefaults' || key === 'handlers') {\n continue;\n }\n // Never merge `url`\n if (key === 'url') {\n continue;\n }\n if (!(key in this)) {\n throw new Error(`Unexpected option: ${key}`);\n }\n // @ts-expect-error Type 'unknown' is not assignable to type 'never'.\n const value = options[key];\n if (value === undefined) {\n continue;\n }\n // @ts-expect-error Type 'unknown' is not assignable to type 'never'.\n this[key] = value;\n push = true;\n }\n if (push) {\n this._init.push(options);\n }\n }\n finally {\n this._merging = false;\n }\n }\n /**\n Custom request function.\n The main purpose of this is to [support HTTP2 using a wrapper](https://github.com/szmarczak/http2-wrapper).\n\n @default http.request | https.request\n */\n get request() {\n return this._internals.request;\n }\n set request(value) {\n assert.any([is.function_, is.undefined], value);\n this._internals.request = value;\n }\n /**\n An object representing `http`, `https` and `http2` keys for [`http.Agent`](https://nodejs.org/api/http.html#http_class_http_agent), [`https.Agent`](https://nodejs.org/api/https.html#https_class_https_agent) and [`http2wrapper.Agent`](https://github.com/szmarczak/http2-wrapper#new-http2agentoptions) instance.\n This is necessary because a request to one protocol might redirect to another.\n In such a scenario, Got will switch over to the right protocol agent for you.\n\n If a key is not present, it will default to a global agent.\n\n @example\n ```\n import got from 'got';\n import HttpAgent from 'agentkeepalive';\n\n const {HttpsAgent} = HttpAgent;\n\n await got('https://sindresorhus.com', {\n agent: {\n http: new HttpAgent(),\n https: new HttpsAgent()\n }\n });\n ```\n */\n get agent() {\n return this._internals.agent;\n }\n set agent(value) {\n assert.plainObject(value);\n // eslint-disable-next-line guard-for-in\n for (const key in value) {\n if (!(key in this._internals.agent)) {\n throw new TypeError(`Unexpected agent option: ${key}`);\n }\n // @ts-expect-error - No idea why `value[key]` doesn't work here.\n assert.any([is.object, is.undefined], value[key]);\n }\n if (this._merging) {\n Object.assign(this._internals.agent, value);\n }\n else {\n this._internals.agent = { ...value };\n }\n }\n get h2session() {\n return this._internals.h2session;\n }\n set h2session(value) {\n this._internals.h2session = value;\n }\n /**\n Decompress the response automatically.\n\n This will set the `accept-encoding` header to `gzip, deflate, br` unless you set it yourself.\n\n If this is disabled, a compressed response is returned as a `Buffer`.\n This may be useful if you want to handle decompression yourself or stream the raw compressed data.\n\n @default true\n */\n get decompress() {\n return this._internals.decompress;\n }\n set decompress(value) {\n assert.boolean(value);\n this._internals.decompress = value;\n }\n /**\n Milliseconds to wait for the server to end the response before aborting the request with `got.TimeoutError` error (a.k.a. `request` property).\n By default, there's no timeout.\n\n This also accepts an `object` with the following fields to constrain the duration of each phase of the request lifecycle:\n\n - `lookup` starts when a socket is assigned and ends when the hostname has been resolved.\n Does not apply when using a Unix domain socket.\n - `connect` starts when `lookup` completes (or when the socket is assigned if lookup does not apply to the request) and ends when the socket is connected.\n - `secureConnect` starts when `connect` completes and ends when the handshaking process completes (HTTPS only).\n - `socket` starts when the socket is connected. See [request.setTimeout](https://nodejs.org/api/http.html#http_request_settimeout_timeout_callback).\n - `response` starts when the request has been written to the socket and ends when the response headers are received.\n - `send` starts when the socket is connected and ends with the request has been written to the socket.\n - `request` starts when the request is initiated and ends when the response's end event fires.\n */\n get timeout() {\n // We always return `Delays` here.\n // It has to be `Delays | number`, otherwise TypeScript will error because the getter and the setter have incompatible types.\n return this._internals.timeout;\n }\n set timeout(value) {\n assert.plainObject(value);\n // eslint-disable-next-line guard-for-in\n for (const key in value) {\n if (!(key in this._internals.timeout)) {\n throw new Error(`Unexpected timeout option: ${key}`);\n }\n // @ts-expect-error - No idea why `value[key]` doesn't work here.\n assert.any([is.number, is.undefined], value[key]);\n }\n if (this._merging) {\n Object.assign(this._internals.timeout, value);\n }\n else {\n this._internals.timeout = { ...value };\n }\n }\n /**\n When specified, `prefixUrl` will be prepended to `url`.\n The prefix can be any valid URL, either relative or absolute.\n A trailing slash `/` is optional - one will be added automatically.\n\n __Note__: `prefixUrl` will be ignored if the `url` argument is a URL instance.\n\n __Note__: Leading slashes in `input` are disallowed when using this option to enforce consistency and avoid confusion.\n For example, when the prefix URL is `https://example.com/foo` and the input is `/bar`, there's ambiguity whether the resulting URL would become `https://example.com/foo/bar` or `https://example.com/bar`.\n The latter is used by browsers.\n\n __Tip__: Useful when used with `got.extend()` to create niche-specific Got instances.\n\n __Tip__: You can change `prefixUrl` using hooks as long as the URL still includes the `prefixUrl`.\n If the URL doesn't include it anymore, it will throw.\n\n @example\n ```\n import got from 'got';\n\n await got('unicorn', {prefixUrl: 'https://cats.com'});\n //=> 'https://cats.com/unicorn'\n\n const instance = got.extend({\n prefixUrl: 'https://google.com'\n });\n\n await instance('unicorn', {\n hooks: {\n beforeRequest: [\n options => {\n options.prefixUrl = 'https://cats.com';\n }\n ]\n }\n });\n //=> 'https://cats.com/unicorn'\n ```\n */\n get prefixUrl() {\n // We always return `string` here.\n // It has to be `string | URL`, otherwise TypeScript will error because the getter and the setter have incompatible types.\n return this._internals.prefixUrl;\n }\n set prefixUrl(value) {\n assert.any([is.string, is.urlInstance], value);\n if (value === '') {\n this._internals.prefixUrl = '';\n return;\n }\n value = value.toString();\n if (!value.endsWith('/')) {\n value += '/';\n }\n if (this._internals.prefixUrl && this._internals.url) {\n const { href } = this._internals.url;\n this._internals.url.href = value + href.slice(this._internals.prefixUrl.length);\n }\n this._internals.prefixUrl = value;\n }\n /**\n __Note #1__: The `body` option cannot be used with the `json` or `form` option.\n\n __Note #2__: If you provide this option, `got.stream()` will be read-only.\n\n __Note #3__: If you provide a payload with the `GET` or `HEAD` method, it will throw a `TypeError` unless the method is `GET` and the `allowGetBody` option is set to `true`.\n\n __Note #4__: This option is not enumerable and will not be merged with the instance defaults.\n\n The `content-length` header will be automatically set if `body` is a `string` / `Buffer` / [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) / [`form-data` instance](https://github.com/form-data/form-data), and `content-length` and `transfer-encoding` are not manually set in `options.headers`.\n\n Since Got 12, the `content-length` is not automatically set when `body` is a `fs.createReadStream`.\n */\n get body() {\n return this._internals.body;\n }\n set body(value) {\n assert.any([is.string, is.buffer, is.nodeStream, is.generator, is.asyncGenerator, isFormData, is.undefined], value);\n if (is.nodeStream(value)) {\n assert.truthy(value.readable);\n }\n if (value !== undefined) {\n assert.undefined(this._internals.form);\n assert.undefined(this._internals.json);\n }\n this._internals.body = value;\n }\n /**\n The form body is converted to a query string using [`(new URLSearchParams(object)).toString()`](https://nodejs.org/api/url.html#url_constructor_new_urlsearchparams_obj).\n\n If the `Content-Type` header is not present, it will be set to `application/x-www-form-urlencoded`.\n\n __Note #1__: If you provide this option, `got.stream()` will be read-only.\n\n __Note #2__: This option is not enumerable and will not be merged with the instance defaults.\n */\n get form() {\n return this._internals.form;\n }\n set form(value) {\n assert.any([is.plainObject, is.undefined], value);\n if (value !== undefined) {\n assert.undefined(this._internals.body);\n assert.undefined(this._internals.json);\n }\n this._internals.form = value;\n }\n /**\n JSON body. If the `Content-Type` header is not set, it will be set to `application/json`.\n\n __Note #1__: If you provide this option, `got.stream()` will be read-only.\n\n __Note #2__: This option is not enumerable and will not be merged with the instance defaults.\n */\n get json() {\n return this._internals.json;\n }\n set json(value) {\n if (value !== undefined) {\n assert.undefined(this._internals.body);\n assert.undefined(this._internals.form);\n }\n this._internals.json = value;\n }\n /**\n The URL to request, as a string, a [`https.request` options object](https://nodejs.org/api/https.html#https_https_request_options_callback), or a [WHATWG `URL`](https://nodejs.org/api/url.html#url_class_url).\n\n Properties from `options` will override properties in the parsed `url`.\n\n If no protocol is specified, it will throw a `TypeError`.\n\n __Note__: The query string is **not** parsed as search params.\n\n @example\n ```\n await got('https://example.com/?query=a b'); //=> https://example.com/?query=a%20b\n await got('https://example.com/', {searchParams: {query: 'a b'}}); //=> https://example.com/?query=a+b\n\n // The query string is overridden by `searchParams`\n await got('https://example.com/?query=a b', {searchParams: {query: 'a b'}}); //=> https://example.com/?query=a+b\n ```\n */\n get url() {\n return this._internals.url;\n }\n set url(value) {\n assert.any([is.string, is.urlInstance, is.undefined], value);\n if (value === undefined) {\n this._internals.url = undefined;\n return;\n }\n if (is.string(value) && value.startsWith('/')) {\n throw new Error('`url` must not start with a slash');\n }\n const urlString = `${this.prefixUrl}${value.toString()}`;\n const url = new URL(urlString);\n this._internals.url = url;\n if (url.protocol === 'unix:') {\n url.href = `http://unix${url.pathname}${url.search}`;\n }\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n const error = new Error(`Unsupported protocol: ${url.protocol}`);\n error.code = 'ERR_UNSUPPORTED_PROTOCOL';\n throw error;\n }\n if (this._internals.username) {\n url.username = this._internals.username;\n this._internals.username = '';\n }\n if (this._internals.password) {\n url.password = this._internals.password;\n this._internals.password = '';\n }\n if (this._internals.searchParams) {\n url.search = this._internals.searchParams.toString();\n this._internals.searchParams = undefined;\n }\n if (url.hostname === 'unix') {\n if (!this._internals.enableUnixSockets) {\n throw new Error('Using UNIX domain sockets but option `enableUnixSockets` is not enabled');\n }\n const matches = /(?<socketPath>.+?):(?<path>.+)/.exec(`${url.pathname}${url.search}`);\n if (matches?.groups) {\n const { socketPath, path } = matches.groups;\n this._unixOptions = {\n socketPath,\n path,\n host: '',\n };\n }\n else {\n this._unixOptions = undefined;\n }\n return;\n }\n this._unixOptions = undefined;\n }\n /**\n Cookie support. You don't have to care about parsing or how to store them.\n\n __Note__: If you provide this option, `options.headers.cookie` will be overridden.\n */\n get cookieJar() {\n return this._internals.cookieJar;\n }\n set cookieJar(value) {\n assert.any([is.object, is.undefined], value);\n if (value === undefined) {\n this._internals.cookieJar = undefined;\n return;\n }\n let { setCookie, getCookieString } = value;\n assert.function_(setCookie);\n assert.function_(getCookieString);\n /* istanbul ignore next: Horrible `tough-cookie` v3 check */\n if (setCookie.length === 4 && getCookieString.length === 0) {\n setCookie = promisify(setCookie.bind(value));\n getCookieString = promisify(getCookieString.bind(value));\n this._internals.cookieJar = {\n setCookie,\n getCookieString: getCookieString,\n };\n }\n else {\n this._internals.cookieJar = value;\n }\n }\n /**\n You can abort the `request` using [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).\n\n @example\n ```\n import got from 'got';\n\n const abortController = new AbortController();\n\n const request = got('https://httpbin.org/anything', {\n signal: abortController.signal\n });\n\n setTimeout(() => {\n abortController.abort();\n }, 100);\n ```\n */\n get signal() {\n return this._internals.signal;\n }\n set signal(value) {\n assert.object(value);\n this._internals.signal = value;\n }\n /**\n Ignore invalid cookies instead of throwing an error.\n Only useful when the `cookieJar` option has been set. Not recommended.\n\n @default false\n */\n get ignoreInvalidCookies() {\n return this._internals.ignoreInvalidCookies;\n }\n set ignoreInvalidCookies(value) {\n assert.boolean(value);\n this._internals.ignoreInvalidCookies = value;\n }\n /**\n Query string that will be added to the request URL.\n This will override the query string in `url`.\n\n If you need to pass in an array, you can do it using a `URLSearchParams` instance.\n\n @example\n ```\n import got from 'got';\n\n const searchParams = new URLSearchParams([['key', 'a'], ['key', 'b']]);\n\n await got('https://example.com', {searchParams});\n\n console.log(searchParams.toString());\n //=> 'key=a&key=b'\n ```\n */\n get searchParams() {\n if (this._internals.url) {\n return this._internals.url.searchParams;\n }\n if (this._internals.searchParams === undefined) {\n this._internals.searchParams = new URLSearchParams();\n }\n return this._internals.searchParams;\n }\n set searchParams(value) {\n assert.any([is.string, is.object, is.undefined], value);\n const url = this._internals.url;\n if (value === undefined) {\n this._internals.searchParams = undefined;\n if (url) {\n url.search = '';\n }\n return;\n }\n const searchParameters = this.searchParams;\n let updated;\n if (is.string(value)) {\n updated = new URLSearchParams(value);\n }\n else if (value instanceof URLSearchParams) {\n updated = value;\n }\n else {\n validateSearchParameters(value);\n updated = new URLSearchParams();\n // eslint-disable-next-line guard-for-in\n for (const key in value) {\n const entry = value[key];\n if (entry === null) {\n updated.append(key, '');\n }\n else if (entry === undefined) {\n searchParameters.delete(key);\n }\n else {\n updated.append(key, entry);\n }\n }\n }\n if (this._merging) {\n // These keys will be replaced\n for (const key of updated.keys()) {\n searchParameters.delete(key);\n }\n for (const [key, value] of updated) {\n searchParameters.append(key, value);\n }\n }\n else if (url) {\n url.search = searchParameters.toString();\n }\n else {\n this._internals.searchParams = searchParameters;\n }\n }\n get searchParameters() {\n throw new Error('The `searchParameters` option does not exist. Use `searchParams` instead.');\n }\n set searchParameters(_value) {\n throw new Error('The `searchParameters` option does not exist. Use `searchParams` instead.');\n }\n get dnsLookup() {\n return this._internals.dnsLookup;\n }\n set dnsLookup(value) {\n assert.any([is.function_, is.undefined], value);\n this._internals.dnsLookup = value;\n }\n /**\n An instance of [`CacheableLookup`](https://github.com/szmarczak/cacheable-lookup) used for making DNS lookups.\n Useful when making lots of requests to different *public* hostnames.\n\n `CacheableLookup` uses `dns.resolver4(..)` and `dns.resolver6(...)` under the hood and fall backs to `dns.lookup(...)` when the first two fail, which may lead to additional delay.\n\n __Note__: This should stay disabled when making requests to internal hostnames such as `localhost`, `database.local` etc.\n\n @default false\n */\n get dnsCache() {\n return this._internals.dnsCache;\n }\n set dnsCache(value) {\n assert.any([is.object, is.boolean, is.undefined], value);\n if (value === true) {\n this._internals.dnsCache = getGlobalDnsCache();\n }\n else if (value === false) {\n this._internals.dnsCache = undefined;\n }\n else {\n this._internals.dnsCache = value;\n }\n }\n /**\n User data. `context` is shallow merged and enumerable. If it contains non-enumerable properties they will NOT be merged.\n\n @example\n ```\n import got from 'got';\n\n const instance = got.extend({\n hooks: {\n beforeRequest: [\n options => {\n if (!options.context || !options.context.token) {\n throw new Error('Token required');\n }\n\n options.headers.token = options.context.token;\n }\n ]\n }\n });\n\n const context = {\n token: 'secret'\n };\n\n const response = await instance('https://httpbin.org/headers', {context});\n\n // Let's see the headers\n console.log(response.body);\n ```\n */\n get context() {\n return this._internals.context;\n }\n set context(value) {\n assert.object(value);\n if (this._merging) {\n Object.assign(this._internals.context, value);\n }\n else {\n this._internals.context = { ...value };\n }\n }\n /**\n Hooks allow modifications during the request lifecycle.\n Hook functions may be async and are run serially.\n */\n get hooks() {\n return this._internals.hooks;\n }\n set hooks(value) {\n assert.object(value);\n // eslint-disable-next-line guard-for-in\n for (const knownHookEvent in value) {\n if (!(knownHookEvent in this._internals.hooks)) {\n throw new Error(`Unexpected hook event: ${knownHookEvent}`);\n }\n const typedKnownHookEvent = knownHookEvent;\n const hooks = value[typedKnownHookEvent];\n assert.any([is.array, is.undefined], hooks);\n if (hooks) {\n for (const hook of hooks) {\n assert.function_(hook);\n }\n }\n if (this._merging) {\n if (hooks) {\n // @ts-expect-error FIXME\n this._internals.hooks[typedKnownHookEvent].push(...hooks);\n }\n }\n else {\n if (!hooks) {\n throw new Error(`Missing hook event: ${knownHookEvent}`);\n }\n // @ts-expect-error FIXME\n this._internals.hooks[knownHookEvent] = [...hooks];\n }\n }\n }\n /**\n Defines if redirect responses should be followed automatically.\n\n Note that if a `303` is sent by the server in response to any request type (`POST`, `DELETE`, etc.), Got will automatically request the resource pointed to in the location header via `GET`.\n This is in accordance with [the spec](https://tools.ietf.org/html/rfc7231#section-6.4.4). You can optionally turn on this behavior also for other redirect codes - see `methodRewriting`.\n\n @default true\n */\n get followRedirect() {\n return this._internals.followRedirect;\n }\n set followRedirect(value) {\n assert.boolean(value);\n this._internals.followRedirect = value;\n }\n get followRedirects() {\n throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.');\n }\n set followRedirects(_value) {\n throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.');\n }\n /**\n If exceeded, the request will be aborted and a `MaxRedirectsError` will be thrown.\n\n @default 10\n */\n get maxRedirects() {\n return this._internals.maxRedirects;\n }\n set maxRedirects(value) {\n assert.number(value);\n this._internals.maxRedirects = value;\n }\n /**\n A cache adapter instance for storing cached response data.\n\n @default false\n */\n get cache() {\n return this._internals.cache;\n }\n set cache(value) {\n assert.any([is.object, is.string, is.boolean, is.undefined], value);\n if (value === true) {\n this._internals.cache = globalCache;\n }\n else if (value === false) {\n this._internals.cache = undefined;\n }\n else {\n this._internals.cache = value;\n }\n }\n /**\n Determines if a `got.HTTPError` is thrown for unsuccessful responses.\n\n If this is disabled, requests that encounter an error status code will be resolved with the `response` instead of throwing.\n This may be useful if you are checking for resource availability and are expecting error responses.\n\n @default true\n */\n get throwHttpErrors() {\n return this._internals.throwHttpErrors;\n }\n set throwHttpErrors(value) {\n assert.boolean(value);\n this._internals.throwHttpErrors = value;\n }\n get username() {\n const url = this._internals.url;\n const value = url ? url.username : this._internals.username;\n return decodeURIComponent(value);\n }\n set username(value) {\n assert.string(value);\n const url = this._internals.url;\n const fixedValue = encodeURIComponent(value);\n if (url) {\n url.username = fixedValue;\n }\n else {\n this._internals.username = fixedValue;\n }\n }\n get password() {\n const url = this._internals.url;\n const value = url ? url.password : this._internals.password;\n return decodeURIComponent(value);\n }\n set password(value) {\n assert.string(value);\n const url = this._internals.url;\n const fixedValue = encodeURIComponent(value);\n if (url) {\n url.password = fixedValue;\n }\n else {\n this._internals.password = fixedValue;\n }\n }\n /**\n If set to `true`, Got will additionally accept HTTP2 requests.\n\n It will choose either HTTP/1.1 or HTTP/2 depending on the ALPN protocol.\n\n __Note__: This option requires Node.js 15.10.0 or newer as HTTP/2 support on older Node.js versions is very buggy.\n\n __Note__: Overriding `options.request` will disable HTTP2 support.\n\n @default false\n\n @example\n ```\n import got from 'got';\n\n const {headers} = await got('https://nghttp2.org/httpbin/anything', {http2: true});\n\n console.log(headers.via);\n //=> '2 nghttpx'\n ```\n */\n get http2() {\n return this._internals.http2;\n }\n set http2(value) {\n assert.boolean(value);\n this._internals.http2 = value;\n }\n /**\n Set this to `true` to allow sending body for the `GET` method.\n However, the [HTTP/2 specification](https://tools.ietf.org/html/rfc7540#section-8.1.3) says that `An HTTP GET request includes request header fields and no payload body`, therefore when using the HTTP/2 protocol this option will have no effect.\n This option is only meant to interact with non-compliant servers when you have no other choice.\n\n __Note__: The [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.1) doesn't specify any particular behavior for the GET method having a payload, therefore __it's considered an [anti-pattern](https://en.wikipedia.org/wiki/Anti-pattern)__.\n\n @default false\n */\n get allowGetBody() {\n return this._internals.allowGetBody;\n }\n set allowGetBody(value) {\n assert.boolean(value);\n this._internals.allowGetBody = value;\n }\n /**\n Request headers.\n\n Existing headers will be overwritten. Headers set to `undefined` will be omitted.\n\n @default {}\n */\n get headers() {\n return this._internals.headers;\n }\n set headers(value) {\n assert.plainObject(value);\n if (this._merging) {\n Object.assign(this._internals.headers, lowercaseKeys(value));\n }\n else {\n this._internals.headers = lowercaseKeys(value);\n }\n }\n /**\n Specifies if the HTTP request method should be [rewritten as `GET`](https://tools.ietf.org/html/rfc7231#section-6.4) on redirects.\n\n As the [specification](https://tools.ietf.org/html/rfc7231#section-6.4) prefers to rewrite the HTTP method only on `303` responses, this is Got's default behavior.\n Setting `methodRewriting` to `true` will also rewrite `301` and `302` responses, as allowed by the spec. This is the behavior followed by `curl` and browsers.\n\n __Note__: Got never performs method rewriting on `307` and `308` responses, as this is [explicitly prohibited by the specification](https://www.rfc-editor.org/rfc/rfc7231#section-6.4.7).\n\n @default false\n */\n get methodRewriting() {\n return this._internals.methodRewriting;\n }\n set methodRewriting(value) {\n assert.boolean(value);\n this._internals.methodRewriting = value;\n }\n /**\n Indicates which DNS record family to use.\n\n Values:\n - `undefined`: IPv4 (if present) or IPv6\n - `4`: Only IPv4\n - `6`: Only IPv6\n\n @default undefined\n */\n get dnsLookupIpVersion() {\n return this._internals.dnsLookupIpVersion;\n }\n set dnsLookupIpVersion(value) {\n if (value !== undefined && value !== 4 && value !== 6) {\n throw new TypeError(`Invalid DNS lookup IP version: ${value}`);\n }\n this._internals.dnsLookupIpVersion = value;\n }\n /**\n A function used to parse JSON responses.\n\n @example\n ```\n import got from 'got';\n import Bourne from '@hapi/bourne';\n\n const parsed = await got('https://example.com', {\n parseJson: text => Bourne.parse(text)\n }).json();\n\n console.log(parsed);\n ```\n */\n get parseJson() {\n return this._internals.parseJson;\n }\n set parseJson(value) {\n assert.function_(value);\n this._internals.parseJson = value;\n }\n /**\n A function used to stringify the body of JSON requests.\n\n @example\n ```\n import got from 'got';\n\n await got.post('https://example.com', {\n stringifyJson: object => JSON.stringify(object, (key, value) => {\n if (key.startsWith('_')) {\n return;\n }\n\n return value;\n }),\n json: {\n some: 'payload',\n _ignoreMe: 1234\n }\n });\n ```\n\n @example\n ```\n import got from 'got';\n\n await got.post('https://example.com', {\n stringifyJson: object => JSON.stringify(object, (key, value) => {\n if (typeof value === 'number') {\n return value.toString();\n }\n\n return value;\n }),\n json: {\n some: 'payload',\n number: 1\n }\n });\n ```\n */\n get stringifyJson() {\n return this._internals.stringifyJson;\n }\n set stringifyJson(value) {\n assert.function_(value);\n this._internals.stringifyJson = value;\n }\n /**\n An object representing `limit`, `calculateDelay`, `methods`, `statusCodes`, `maxRetryAfter` and `errorCodes` fields for maximum retry count, retry handler, allowed methods, allowed status codes, maximum [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) time and allowed error codes.\n\n Delays between retries counts with function `1000 * Math.pow(2, retry) + Math.random() * 100`, where `retry` is attempt number (starts from 1).\n\n The `calculateDelay` property is a `function` that receives an object with `attemptCount`, `retryOptions`, `error` and `computedValue` properties for current retry count, the retry options, error and default computed value.\n The function must return a delay in milliseconds (or a Promise resolving with it) (`0` return value cancels retry).\n\n By default, it retries *only* on the specified methods, status codes, and on these network errors:\n\n - `ETIMEDOUT`: One of the [timeout](#timeout) limits were reached.\n - `ECONNRESET`: Connection was forcibly closed by a peer.\n - `EADDRINUSE`: Could not bind to any free port.\n - `ECONNREFUSED`: Connection was refused by the server.\n - `EPIPE`: The remote side of the stream being written has been closed.\n - `ENOTFOUND`: Couldn't resolve the hostname to an IP address.\n - `ENETUNREACH`: No internet connection.\n - `EAI_AGAIN`: DNS lookup timed out.\n\n __Note__: If `maxRetryAfter` is set to `undefined`, it will use `options.timeout`.\n __Note__: If [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) header is greater than `maxRetryAfter`, it will cancel the request.\n */\n get retry() {\n return this._internals.retry;\n }\n set retry(value) {\n assert.plainObject(value);\n assert.any([is.function_, is.undefined], value.calculateDelay);\n assert.any([is.number, is.undefined], value.maxRetryAfter);\n assert.any([is.number, is.undefined], value.limit);\n assert.any([is.array, is.undefined], value.methods);\n assert.any([is.array, is.undefined], value.statusCodes);\n assert.any([is.array, is.undefined], value.errorCodes);\n assert.any([is.number, is.undefined], value.noise);\n if (value.noise && Math.abs(value.noise) > 100) {\n throw new Error(`The maximum acceptable retry noise is +/- 100ms, got ${value.noise}`);\n }\n for (const key in value) {\n if (!(key in this._internals.retry)) {\n throw new Error(`Unexpected retry option: ${key}`);\n }\n }\n if (this._merging) {\n Object.assign(this._internals.retry, value);\n }\n else {\n this._internals.retry = { ...value };\n }\n const { retry } = this._internals;\n retry.methods = [...new Set(retry.methods.map(method => method.toUpperCase()))];\n retry.statusCodes = [...new Set(retry.statusCodes)];\n retry.errorCodes = [...new Set(retry.errorCodes)];\n }\n /**\n From `http.RequestOptions`.\n\n The IP address used to send the request from.\n */\n get localAddress() {\n return this._internals.localAddress;\n }\n set localAddress(value) {\n assert.any([is.string, is.undefined], value);\n this._internals.localAddress = value;\n }\n /**\n The HTTP method used to make the request.\n\n @default 'GET'\n */\n get method() {\n return this._internals.method;\n }\n set method(value) {\n assert.string(value);\n this._internals.method = value.toUpperCase();\n }\n get createConnection() {\n return this._internals.createConnection;\n }\n set createConnection(value) {\n assert.any([is.function_, is.undefined], value);\n this._internals.createConnection = value;\n }\n /**\n From `http-cache-semantics`\n\n @default {}\n */\n get cacheOptions() {\n return this._internals.cacheOptions;\n }\n set cacheOptions(value) {\n assert.plainObject(value);\n assert.any([is.boolean, is.undefined], value.shared);\n assert.any([is.number, is.undefined], value.cacheHeuristic);\n assert.any([is.number, is.undefined], value.immutableMinTimeToLive);\n assert.any([is.boolean, is.undefined], value.ignoreCargoCult);\n for (const key in value) {\n if (!(key in this._internals.cacheOptions)) {\n throw new Error(`Cache option \\`${key}\\` does not exist`);\n }\n }\n if (this._merging) {\n Object.assign(this._internals.cacheOptions, value);\n }\n else {\n this._internals.cacheOptions = { ...value };\n }\n }\n /**\n Options for the advanced HTTPS API.\n */\n get https() {\n return this._internals.https;\n }\n set https(value) {\n assert.plainObject(value);\n assert.any([is.boolean, is.undefined], value.rejectUnauthorized);\n assert.any([is.function_, is.undefined], value.checkServerIdentity);\n assert.any([is.string, is.object, is.array, is.undefined], value.certificateAuthority);\n assert.any([is.string, is.object, is.array, is.undefined], value.key);\n assert.any([is.string, is.object, is.array, is.undefined], value.certificate);\n assert.any([is.string, is.undefined], value.passphrase);\n assert.any([is.string, is.buffer, is.array, is.undefined], value.pfx);\n assert.any([is.array, is.undefined], value.alpnProtocols);\n assert.any([is.string, is.undefined], value.ciphers);\n assert.any([is.string, is.buffer, is.undefined], value.dhparam);\n assert.any([is.string, is.undefined], value.signatureAlgorithms);\n assert.any([is.string, is.undefined], value.minVersion);\n assert.any([is.string, is.undefined], value.maxVersion);\n assert.any([is.boolean, is.undefined], value.honorCipherOrder);\n assert.any([is.number, is.undefined], value.tlsSessionLifetime);\n assert.any([is.string, is.undefined], value.ecdhCurve);\n assert.any([is.string, is.buffer, is.array, is.undefined], value.certificateRevocationLists);\n for (const key in value) {\n if (!(key in this._internals.https)) {\n throw new Error(`HTTPS option \\`${key}\\` does not exist`);\n }\n }\n if (this._merging) {\n Object.assign(this._internals.https, value);\n }\n else {\n this._internals.https = { ...value };\n }\n }\n /**\n [Encoding](https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings) to be used on `setEncoding` of the response data.\n\n To get a [`Buffer`](https://nodejs.org/api/buffer.html), you need to set `responseType` to `buffer` instead.\n Don't set this option to `null`.\n\n __Note__: This doesn't affect streams! Instead, you need to do `got.stream(...).setEncoding(encoding)`.\n\n @default 'utf-8'\n */\n get encoding() {\n return this._internals.encoding;\n }\n set encoding(value) {\n if (value === null) {\n throw new TypeError('To get a Buffer, set `options.responseType` to `buffer` instead');\n }\n assert.any([is.string, is.undefined], value);\n this._internals.encoding = value;\n }\n /**\n When set to `true` the promise will return the Response body instead of the Response object.\n\n @default false\n */\n get resolveBodyOnly() {\n return this._internals.resolveBodyOnly;\n }\n set resolveBodyOnly(value) {\n assert.boolean(value);\n this._internals.resolveBodyOnly = value;\n }\n /**\n Returns a `Stream` instead of a `Promise`.\n This is equivalent to calling `got.stream(url, options?)`.\n\n @default false\n */\n get isStream() {\n return this._internals.isStream;\n }\n set isStream(value) {\n assert.boolean(value);\n this._internals.isStream = value;\n }\n /**\n The parsing method.\n\n The promise also has `.text()`, `.json()` and `.buffer()` methods which return another Got promise for the parsed body.\n\n It's like setting the options to `{responseType: 'json', resolveBodyOnly: true}` but without affecting the main Got promise.\n\n __Note__: When using streams, this option is ignored.\n\n @example\n ```\n const responsePromise = got(url);\n const bufferPromise = responsePromise.buffer();\n const jsonPromise = responsePromise.json();\n\n const [response, buffer, json] = Promise.all([responsePromise, bufferPromise, jsonPromise]);\n // `response` is an instance of Got Response\n // `buffer` is an instance of Buffer\n // `json` is an object\n ```\n\n @example\n ```\n // This\n const body = await got(url).json();\n\n // is semantically the same as this\n const body = await got(url, {responseType: 'json', resolveBodyOnly: true});\n ```\n */\n get responseType() {\n return this._internals.responseType;\n }\n set responseType(value) {\n if (value === undefined) {\n this._internals.responseType = 'text';\n return;\n }\n if (value !== 'text' && value !== 'buffer' && value !== 'json') {\n throw new Error(`Invalid \\`responseType\\` option: ${value}`);\n }\n this._internals.responseType = value;\n }\n get pagination() {\n return this._internals.pagination;\n }\n set pagination(value) {\n assert.object(value);\n if (this._merging) {\n Object.assign(this._internals.pagination, value);\n }\n else {\n this._internals.pagination = value;\n }\n }\n get auth() {\n throw new Error('Parameter `auth` is deprecated. Use `username` / `password` instead.');\n }\n set auth(_value) {\n throw new Error('Parameter `auth` is deprecated. Use `username` / `password` instead.');\n }\n get setHost() {\n return this._internals.setHost;\n }\n set setHost(value) {\n assert.boolean(value);\n this._internals.setHost = value;\n }\n get maxHeaderSize() {\n return this._internals.maxHeaderSize;\n }\n set maxHeaderSize(value) {\n assert.any([is.number, is.undefined], value);\n this._internals.maxHeaderSize = value;\n }\n get enableUnixSockets() {\n return this._internals.enableUnixSockets;\n }\n set enableUnixSockets(value) {\n assert.boolean(value);\n this._internals.enableUnixSockets = value;\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n toJSON() {\n return { ...this._internals };\n }\n [Symbol.for('nodejs.util.inspect.custom')](_depth, options) {\n return inspect(this._internals, options);\n }\n createNativeRequestOptions() {\n const internals = this._internals;\n const url = internals.url;\n let agent;\n if (url.protocol === 'https:') {\n agent = internals.http2 ? internals.agent : internals.agent.https;\n }\n else {\n agent = internals.agent.http;\n }\n const { https } = internals;\n let { pfx } = https;\n if (is.array(pfx) && is.plainObject(pfx[0])) {\n pfx = pfx.map(object => ({\n buf: object.buffer,\n passphrase: object.passphrase,\n }));\n }\n return {\n ...internals.cacheOptions,\n ...this._unixOptions,\n // HTTPS options\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ALPNProtocols: https.alpnProtocols,\n ca: https.certificateAuthority,\n cert: https.certificate,\n key: https.key,\n passphrase: https.passphrase,\n pfx: https.pfx,\n rejectUnauthorized: https.rejectUnauthorized,\n checkServerIdentity: https.checkServerIdentity ?? checkServerIdentity,\n ciphers: https.ciphers,\n honorCipherOrder: https.honorCipherOrder,\n minVersion: https.minVersion,\n maxVersion: https.maxVersion,\n sigalgs: https.signatureAlgorithms,\n sessionTimeout: https.tlsSessionLifetime,\n dhparam: https.dhparam,\n ecdhCurve: https.ecdhCurve,\n crl: https.certificateRevocationLists,\n // HTTP options\n lookup: internals.dnsLookup ?? internals.dnsCache?.lookup,\n family: internals.dnsLookupIpVersion,\n agent,\n setHost: internals.setHost,\n method: internals.method,\n maxHeaderSize: internals.maxHeaderSize,\n localAddress: internals.localAddress,\n headers: internals.headers,\n createConnection: internals.createConnection,\n timeout: internals.http2 ? getHttp2TimeoutOption(internals) : undefined,\n // HTTP/2 options\n h2session: internals.h2session,\n };\n }\n getRequestFunction() {\n const url = this._internals.url;\n const { request } = this._internals;\n if (!request && url) {\n return this.getFallbackRequestFunction();\n }\n return request;\n }\n getFallbackRequestFunction() {\n const url = this._internals.url;\n if (!url) {\n return;\n }\n if (url.protocol === 'https:') {\n if (this._internals.http2) {\n if (major < 15 || (major === 15 && minor < 10)) {\n const error = new Error('To use the `http2` option, install Node.js 15.10.0 or above');\n error.code = 'EUNSUPPORTED';\n throw error;\n }\n return http2wrapper.auto;\n }\n return https.request;\n }\n return http.request;\n }\n freeze() {\n const options = this._internals;\n Object.freeze(options);\n Object.freeze(options.hooks);\n Object.freeze(options.hooks.afterResponse);\n Object.freeze(options.hooks.beforeError);\n Object.freeze(options.hooks.beforeRedirect);\n Object.freeze(options.hooks.beforeRequest);\n Object.freeze(options.hooks.beforeRetry);\n Object.freeze(options.hooks.init);\n Object.freeze(options.https);\n Object.freeze(options.cacheOptions);\n Object.freeze(options.agent);\n Object.freeze(options.headers);\n Object.freeze(options.timeout);\n Object.freeze(options.retry);\n Object.freeze(options.retry.errorCodes);\n Object.freeze(options.retry.methods);\n Object.freeze(options.retry.statusCodes);\n }\n}\n",
|
|
156
|
+
"import { RequestError } from './errors.js';\nexport const isResponseOk = (response) => {\n const { statusCode } = response;\n const limitStatusCode = response.request.options.followRedirect ? 299 : 399;\n return (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304;\n};\n/**\nAn error to be thrown when server response code is 2xx, and parsing body fails.\nIncludes a `response` property.\n*/\nexport class ParseError extends RequestError {\n constructor(error, response) {\n const { options } = response.request;\n super(`${error.message} in \"${options.url.toString()}\"`, error, response.request);\n this.name = 'ParseError';\n this.code = 'ERR_BODY_PARSE_FAILURE';\n }\n}\nexport const parseBody = (response, responseType, parseJson, encoding) => {\n const { rawBody } = response;\n try {\n if (responseType === 'text') {\n return rawBody.toString(encoding);\n }\n if (responseType === 'json') {\n return rawBody.length === 0 ? '' : parseJson(rawBody.toString(encoding));\n }\n if (responseType === 'buffer') {\n return rawBody;\n }\n }\n catch (error) {\n throw new ParseError(error, response);\n }\n throw new ParseError({\n message: `Unknown body type '${responseType}'`,\n name: 'Error',\n }, response);\n};\n",
|
|
157
|
+
"function isClientRequest(clientRequest) {\n return clientRequest.writable && !clientRequest.writableEnded;\n}\nexport default isClientRequest;\n",
|
|
158
|
+
"// eslint-disable-next-line @typescript-eslint/naming-convention\nexport default function isUnixSocketURL(url) {\n return url.protocol === 'unix:' || url.hostname === 'unix';\n}\n",
|
|
159
|
+
"import process from 'node:process';\nimport { Buffer } from 'node:buffer';\nimport { Duplex } from 'node:stream';\nimport http, { ServerResponse } from 'node:http';\nimport timer from '@szmarczak/http-timer';\nimport CacheableRequest, { CacheError as CacheableCacheError, } from 'cacheable-request';\nimport decompressResponse from 'decompress-response';\nimport is from '@sindresorhus/is';\nimport getStream from 'get-stream';\nimport { FormDataEncoder, isFormData as isFormDataLike } from 'form-data-encoder';\nimport getBodySize from './utils/get-body-size.js';\nimport isFormData from './utils/is-form-data.js';\nimport proxyEvents from './utils/proxy-events.js';\nimport timedOut, { TimeoutError as TimedOutTimeoutError } from './timed-out.js';\nimport urlToOptions from './utils/url-to-options.js';\nimport WeakableMap from './utils/weakable-map.js';\nimport calculateRetryDelay from './calculate-retry-delay.js';\nimport Options from './options.js';\nimport { isResponseOk } from './response.js';\nimport isClientRequest from './utils/is-client-request.js';\nimport isUnixSocketURL from './utils/is-unix-socket-url.js';\nimport { RequestError, ReadError, MaxRedirectsError, HTTPError, TimeoutError, UploadError, CacheError, AbortError, } from './errors.js';\nconst { buffer: getStreamAsBuffer } = getStream;\nconst supportsBrotli = is.string(process.versions.brotli);\nconst methodsWithoutBody = new Set(['GET', 'HEAD']);\nconst cacheableStore = new WeakableMap();\nconst redirectCodes = new Set([300, 301, 302, 303, 304, 307, 308]);\nconst proxiedRequestEvents = [\n 'socket',\n 'connect',\n 'continue',\n 'information',\n 'upgrade',\n];\nconst noop = () => { };\nexport default class Request extends Duplex {\n constructor(url, options, defaults) {\n super({\n // Don't destroy immediately, as the error may be emitted on unsuccessful retry\n autoDestroy: false,\n // It needs to be zero because we're just proxying the data to another stream\n highWaterMark: 0,\n });\n // @ts-expect-error - Ignoring for now.\n Object.defineProperty(this, 'constructor', {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_noPipe\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/9568\n Object.defineProperty(this, \"options\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"response\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"requestUrl\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"redirectUrls\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"retryCount\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_stopRetry\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_downloadedSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_uploadedSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_stopReading\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_pipedServerResponses\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_request\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_responseSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_bodySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_unproxyEvents\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_isFromCache\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_cannotHaveBody\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_triggerRead\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_cancelTimeouts\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_removeListeners\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nativeResponse\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_flushed\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_aborted\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // We need this because `this._request` if `undefined` when using cache\n Object.defineProperty(this, \"_requestInitialized\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._downloadedSize = 0;\n this._uploadedSize = 0;\n this._stopReading = false;\n this._pipedServerResponses = new Set();\n this._cannotHaveBody = false;\n this._unproxyEvents = noop;\n this._triggerRead = false;\n this._cancelTimeouts = noop;\n this._removeListeners = noop;\n this._jobs = [];\n this._flushed = false;\n this._requestInitialized = false;\n this._aborted = false;\n this.redirectUrls = [];\n this.retryCount = 0;\n this._stopRetry = noop;\n this.on('pipe', (source) => {\n if (source?.headers) {\n Object.assign(this.options.headers, source.headers);\n }\n });\n this.on('newListener', event => {\n if (event === 'retry' && this.listenerCount('retry') > 0) {\n throw new Error('A retry listener has been attached already.');\n }\n });\n try {\n this.options = new Options(url, options, defaults);\n if (!this.options.url) {\n if (this.options.prefixUrl === '') {\n throw new TypeError('Missing `url` property');\n }\n this.options.url = '';\n }\n this.requestUrl = this.options.url;\n }\n catch (error) {\n const { options } = error;\n if (options) {\n this.options = options;\n }\n this.flush = async () => {\n this.flush = async () => { };\n this.destroy(error);\n };\n return;\n }\n // Important! If you replace `body` in a handler with another stream, make sure it's readable first.\n // The below is run only once.\n const { body } = this.options;\n if (is.nodeStream(body)) {\n body.once('error', error => {\n if (this._flushed) {\n this._beforeError(new UploadError(error, this));\n }\n else {\n this.flush = async () => {\n this.flush = async () => { };\n this._beforeError(new UploadError(error, this));\n };\n }\n });\n }\n if (this.options.signal) {\n const abort = () => {\n this.destroy(new AbortError(this));\n };\n if (this.options.signal.aborted) {\n abort();\n }\n else {\n this.options.signal.addEventListener('abort', abort);\n this._removeListeners = () => {\n this.options.signal?.removeEventListener('abort', abort);\n };\n }\n }\n }\n async flush() {\n if (this._flushed) {\n return;\n }\n this._flushed = true;\n try {\n await this._finalizeBody();\n if (this.destroyed) {\n return;\n }\n await this._makeRequest();\n if (this.destroyed) {\n this._request?.destroy();\n return;\n }\n // Queued writes etc.\n for (const job of this._jobs) {\n job();\n }\n // Prevent memory leak\n this._jobs.length = 0;\n this._requestInitialized = true;\n }\n catch (error) {\n this._beforeError(error);\n }\n }\n _beforeError(error) {\n if (this._stopReading) {\n return;\n }\n const { response, options } = this;\n const attemptCount = this.retryCount + (error.name === 'RetryError' ? 0 : 1);\n this._stopReading = true;\n if (!(error instanceof RequestError)) {\n error = new RequestError(error.message, error, this);\n }\n const typedError = error;\n void (async () => {\n // Node.js parser is really weird.\n // It emits post-request Parse Errors on the same instance as previous request. WTF.\n // Therefore we need to check if it has been destroyed as well.\n //\n // Furthermore, Node.js 16 `response.destroy()` doesn't immediately destroy the socket,\n // but makes the response unreadable. So we additionally need to check `response.readable`.\n if (response?.readable && !response.rawBody && !this._request?.socket?.destroyed) {\n // @types/node has incorrect typings. `setEncoding` accepts `null` as well.\n response.setEncoding(this.readableEncoding);\n const success = await this._setRawBody(response);\n if (success) {\n response.body = response.rawBody.toString();\n }\n }\n if (this.listenerCount('retry') !== 0) {\n let backoff;\n try {\n let retryAfter;\n if (response && 'retry-after' in response.headers) {\n retryAfter = Number(response.headers['retry-after']);\n if (Number.isNaN(retryAfter)) {\n retryAfter = Date.parse(response.headers['retry-after']) - Date.now();\n if (retryAfter <= 0) {\n retryAfter = 1;\n }\n }\n else {\n retryAfter *= 1000;\n }\n }\n const retryOptions = options.retry;\n backoff = await retryOptions.calculateDelay({\n attemptCount,\n retryOptions,\n error: typedError,\n retryAfter,\n computedValue: calculateRetryDelay({\n attemptCount,\n retryOptions,\n error: typedError,\n retryAfter,\n computedValue: retryOptions.maxRetryAfter ?? options.timeout.request ?? Number.POSITIVE_INFINITY,\n }),\n });\n }\n catch (error_) {\n void this._error(new RequestError(error_.message, error_, this));\n return;\n }\n if (backoff) {\n await new Promise(resolve => {\n const timeout = setTimeout(resolve, backoff);\n this._stopRetry = () => {\n clearTimeout(timeout);\n resolve();\n };\n });\n // Something forced us to abort the retry\n if (this.destroyed) {\n return;\n }\n try {\n for (const hook of this.options.hooks.beforeRetry) {\n // eslint-disable-next-line no-await-in-loop\n await hook(typedError, this.retryCount + 1);\n }\n }\n catch (error_) {\n void this._error(new RequestError(error_.message, error, this));\n return;\n }\n // Something forced us to abort the retry\n if (this.destroyed) {\n return;\n }\n this.destroy();\n this.emit('retry', this.retryCount + 1, error, (updatedOptions) => {\n const request = new Request(options.url, updatedOptions, options);\n request.retryCount = this.retryCount + 1;\n process.nextTick(() => {\n void request.flush();\n });\n return request;\n });\n return;\n }\n }\n void this._error(typedError);\n })();\n }\n _read() {\n this._triggerRead = true;\n const { response } = this;\n if (response && !this._stopReading) {\n // We cannot put this in the `if` above\n // because `.read()` also triggers the `end` event\n if (response.readableLength) {\n this._triggerRead = false;\n }\n let data;\n while ((data = response.read()) !== null) {\n this._downloadedSize += data.length; // eslint-disable-line @typescript-eslint/restrict-plus-operands\n const progress = this.downloadProgress;\n if (progress.percent < 1) {\n this.emit('downloadProgress', progress);\n }\n this.push(data);\n }\n }\n }\n _write(chunk, encoding, callback) {\n const write = () => {\n this._writeRequest(chunk, encoding, callback);\n };\n if (this._requestInitialized) {\n write();\n }\n else {\n this._jobs.push(write);\n }\n }\n _final(callback) {\n const endRequest = () => {\n // We need to check if `this._request` is present,\n // because it isn't when we use cache.\n if (!this._request || this._request.destroyed) {\n callback();\n return;\n }\n this._request.end((error) => {\n // The request has been destroyed before `_final` finished.\n // See https://github.com/nodejs/node/issues/39356\n if (this._request._writableState?.errored) {\n return;\n }\n if (!error) {\n this._bodySize = this._uploadedSize;\n this.emit('uploadProgress', this.uploadProgress);\n this._request.emit('upload-complete');\n }\n callback(error);\n });\n };\n if (this._requestInitialized) {\n endRequest();\n }\n else {\n this._jobs.push(endRequest);\n }\n }\n _destroy(error, callback) {\n this._stopReading = true;\n this.flush = async () => { };\n // Prevent further retries\n this._stopRetry();\n this._cancelTimeouts();\n this._removeListeners();\n if (this.options) {\n const { body } = this.options;\n if (is.nodeStream(body)) {\n body.destroy();\n }\n }\n if (this._request) {\n this._request.destroy();\n }\n if (error !== null && !is.undefined(error) && !(error instanceof RequestError)) {\n error = new RequestError(error.message, error, this);\n }\n callback(error);\n }\n pipe(destination, options) {\n if (destination instanceof ServerResponse) {\n this._pipedServerResponses.add(destination);\n }\n return super.pipe(destination, options);\n }\n unpipe(destination) {\n if (destination instanceof ServerResponse) {\n this._pipedServerResponses.delete(destination);\n }\n super.unpipe(destination);\n return this;\n }\n async _finalizeBody() {\n const { options } = this;\n const { headers } = options;\n const isForm = !is.undefined(options.form);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const isJSON = !is.undefined(options.json);\n const isBody = !is.undefined(options.body);\n const cannotHaveBody = methodsWithoutBody.has(options.method) && !(options.method === 'GET' && options.allowGetBody);\n this._cannotHaveBody = cannotHaveBody;\n if (isForm || isJSON || isBody) {\n if (cannotHaveBody) {\n throw new TypeError(`The \\`${options.method}\\` method cannot be used with a body`);\n }\n // Serialize body\n const noContentType = !is.string(headers['content-type']);\n if (isBody) {\n // Body is spec-compliant FormData\n if (isFormDataLike(options.body)) {\n const encoder = new FormDataEncoder(options.body);\n if (noContentType) {\n headers['content-type'] = encoder.headers['Content-Type'];\n }\n if ('Content-Length' in encoder.headers) {\n headers['content-length'] = encoder.headers['Content-Length'];\n }\n options.body = encoder.encode();\n }\n // Special case for https://github.com/form-data/form-data\n if (isFormData(options.body) && noContentType) {\n headers['content-type'] = `multipart/form-data; boundary=${options.body.getBoundary()}`;\n }\n }\n else if (isForm) {\n if (noContentType) {\n headers['content-type'] = 'application/x-www-form-urlencoded';\n }\n const { form } = options;\n options.form = undefined;\n options.body = (new URLSearchParams(form)).toString();\n }\n else {\n if (noContentType) {\n headers['content-type'] = 'application/json';\n }\n const { json } = options;\n options.json = undefined;\n options.body = options.stringifyJson(json);\n }\n const uploadBodySize = await getBodySize(options.body, options.headers);\n // See https://tools.ietf.org/html/rfc7230#section-3.3.2\n // A user agent SHOULD send a Content-Length in a request message when\n // no Transfer-Encoding is sent and the request method defines a meaning\n // for an enclosed payload body. For example, a Content-Length header\n // field is normally sent in a POST request even when the value is 0\n // (indicating an empty payload body). A user agent SHOULD NOT send a\n // Content-Length header field when the request message does not contain\n // a payload body and the method semantics do not anticipate such a\n // body.\n if (is.undefined(headers['content-length']) && is.undefined(headers['transfer-encoding']) && !cannotHaveBody && !is.undefined(uploadBodySize)) {\n headers['content-length'] = String(uploadBodySize);\n }\n }\n if (options.responseType === 'json' && !('accept' in options.headers)) {\n options.headers.accept = 'application/json';\n }\n this._bodySize = Number(headers['content-length']) || undefined;\n }\n async _onResponseBase(response) {\n // This will be called e.g. when using cache so we need to check if this request has been aborted.\n if (this.isAborted) {\n return;\n }\n const { options } = this;\n const { url } = options;\n this._nativeResponse = response;\n if (options.decompress) {\n response = decompressResponse(response);\n }\n const statusCode = response.statusCode;\n const typedResponse = response;\n typedResponse.statusMessage = typedResponse.statusMessage ?? http.STATUS_CODES[statusCode];\n typedResponse.url = options.url.toString();\n typedResponse.requestUrl = this.requestUrl;\n typedResponse.redirectUrls = this.redirectUrls;\n typedResponse.request = this;\n typedResponse.isFromCache = this._nativeResponse.fromCache ?? false;\n typedResponse.ip = this.ip;\n typedResponse.retryCount = this.retryCount;\n typedResponse.ok = isResponseOk(typedResponse);\n this._isFromCache = typedResponse.isFromCache;\n this._responseSize = Number(response.headers['content-length']) || undefined;\n this.response = typedResponse;\n response.once('end', () => {\n this._responseSize = this._downloadedSize;\n this.emit('downloadProgress', this.downloadProgress);\n });\n response.once('error', (error) => {\n this._aborted = true;\n // Force clean-up, because some packages don't do this.\n // TODO: Fix decompress-response\n response.destroy();\n this._beforeError(new ReadError(error, this));\n });\n response.once('aborted', () => {\n this._aborted = true;\n this._beforeError(new ReadError({\n name: 'Error',\n message: 'The server aborted pending request',\n code: 'ECONNRESET',\n }, this));\n });\n this.emit('downloadProgress', this.downloadProgress);\n const rawCookies = response.headers['set-cookie'];\n if (is.object(options.cookieJar) && rawCookies) {\n let promises = rawCookies.map(async (rawCookie) => options.cookieJar.setCookie(rawCookie, url.toString()));\n if (options.ignoreInvalidCookies) {\n promises = promises.map(async (promise) => {\n try {\n await promise;\n }\n catch { }\n });\n }\n try {\n await Promise.all(promises);\n }\n catch (error) {\n this._beforeError(error);\n return;\n }\n }\n // The above is running a promise, therefore we need to check if this request has been aborted yet again.\n if (this.isAborted) {\n return;\n }\n if (options.followRedirect && response.headers.location && redirectCodes.has(statusCode)) {\n // We're being redirected, we don't care about the response.\n // It'd be best to abort the request, but we can't because\n // we would have to sacrifice the TCP connection. We don't want that.\n response.resume();\n this._cancelTimeouts();\n this._unproxyEvents();\n if (this.redirectUrls.length >= options.maxRedirects) {\n this._beforeError(new MaxRedirectsError(this));\n return;\n }\n this._request = undefined;\n const updatedOptions = new Options(undefined, undefined, this.options);\n const serverRequestedGet = statusCode === 303 && updatedOptions.method !== 'GET' && updatedOptions.method !== 'HEAD';\n const canRewrite = statusCode !== 307 && statusCode !== 308;\n const userRequestedGet = updatedOptions.methodRewriting && canRewrite;\n if (serverRequestedGet || userRequestedGet) {\n updatedOptions.method = 'GET';\n updatedOptions.body = undefined;\n updatedOptions.json = undefined;\n updatedOptions.form = undefined;\n delete updatedOptions.headers['content-length'];\n }\n try {\n // We need this in order to support UTF-8\n const redirectBuffer = Buffer.from(response.headers.location, 'binary').toString();\n const redirectUrl = new URL(redirectBuffer, url);\n if (!isUnixSocketURL(url) && isUnixSocketURL(redirectUrl)) {\n this._beforeError(new RequestError('Cannot redirect to UNIX socket', {}, this));\n return;\n }\n // Redirecting to a different site, clear sensitive data.\n if (redirectUrl.hostname !== url.hostname || redirectUrl.port !== url.port) {\n if ('host' in updatedOptions.headers) {\n delete updatedOptions.headers.host;\n }\n if ('cookie' in updatedOptions.headers) {\n delete updatedOptions.headers.cookie;\n }\n if ('authorization' in updatedOptions.headers) {\n delete updatedOptions.headers.authorization;\n }\n if (updatedOptions.username || updatedOptions.password) {\n updatedOptions.username = '';\n updatedOptions.password = '';\n }\n }\n else {\n redirectUrl.username = updatedOptions.username;\n redirectUrl.password = updatedOptions.password;\n }\n this.redirectUrls.push(redirectUrl);\n updatedOptions.prefixUrl = '';\n updatedOptions.url = redirectUrl;\n for (const hook of updatedOptions.hooks.beforeRedirect) {\n // eslint-disable-next-line no-await-in-loop\n await hook(updatedOptions, typedResponse);\n }\n this.emit('redirect', updatedOptions, typedResponse);\n this.options = updatedOptions;\n await this._makeRequest();\n }\n catch (error) {\n this._beforeError(error);\n return;\n }\n return;\n }\n // `HTTPError`s always have `error.response.body` defined.\n // Therefore we cannot retry if `options.throwHttpErrors` is false.\n // On the last retry, if `options.throwHttpErrors` is false, we would need to return the body,\n // but that wouldn't be possible since the body would be already read in `error.response.body`.\n if (options.isStream && options.throwHttpErrors && !isResponseOk(typedResponse)) {\n this._beforeError(new HTTPError(typedResponse));\n return;\n }\n response.on('readable', () => {\n if (this._triggerRead) {\n this._read();\n }\n });\n this.on('resume', () => {\n response.resume();\n });\n this.on('pause', () => {\n response.pause();\n });\n response.once('end', () => {\n this.push(null);\n });\n if (this._noPipe) {\n const success = await this._setRawBody();\n if (success) {\n this.emit('response', response);\n }\n return;\n }\n this.emit('response', response);\n for (const destination of this._pipedServerResponses) {\n if (destination.headersSent) {\n continue;\n }\n // eslint-disable-next-line guard-for-in\n for (const key in response.headers) {\n const isAllowed = options.decompress ? key !== 'content-encoding' : true;\n const value = response.headers[key];\n if (isAllowed) {\n destination.setHeader(key, value);\n }\n }\n destination.statusCode = statusCode;\n }\n }\n async _setRawBody(from = this) {\n if (from.readableEnded) {\n return false;\n }\n try {\n // Errors are emitted via the `error` event\n const rawBody = await getStreamAsBuffer(from);\n // TODO: Switch to this:\n // let rawBody = await from.toArray();\n // rawBody = Buffer.concat(rawBody);\n // On retry Request is destroyed with no error, therefore the above will successfully resolve.\n // So in order to check if this was really successfull, we need to check if it has been properly ended.\n if (!this.isAborted) {\n this.response.rawBody = rawBody;\n return true;\n }\n }\n catch { }\n return false;\n }\n async _onResponse(response) {\n try {\n await this._onResponseBase(response);\n }\n catch (error) {\n /* istanbul ignore next: better safe than sorry */\n this._beforeError(error);\n }\n }\n _onRequest(request) {\n const { options } = this;\n const { timeout, url } = options;\n timer(request);\n if (this.options.http2) {\n // Unset stream timeout, as the `timeout` option was used only for connection timeout.\n request.setTimeout(0);\n }\n this._cancelTimeouts = timedOut(request, timeout, url);\n const responseEventName = options.cache ? 'cacheableResponse' : 'response';\n request.once(responseEventName, (response) => {\n void this._onResponse(response);\n });\n request.once('error', (error) => {\n this._aborted = true;\n // Force clean-up, because some packages (e.g. nock) don't do this.\n request.destroy();\n error = error instanceof TimedOutTimeoutError ? new TimeoutError(error, this.timings, this) : new RequestError(error.message, error, this);\n this._beforeError(error);\n });\n this._unproxyEvents = proxyEvents(request, this, proxiedRequestEvents);\n this._request = request;\n this.emit('uploadProgress', this.uploadProgress);\n this._sendBody();\n this.emit('request', request);\n }\n async _asyncWrite(chunk) {\n return new Promise((resolve, reject) => {\n super.write(chunk, error => {\n if (error) {\n reject(error);\n return;\n }\n resolve();\n });\n });\n }\n _sendBody() {\n // Send body\n const { body } = this.options;\n const currentRequest = this.redirectUrls.length === 0 ? this : this._request ?? this;\n if (is.nodeStream(body)) {\n body.pipe(currentRequest);\n }\n else if (is.generator(body) || is.asyncGenerator(body)) {\n (async () => {\n try {\n for await (const chunk of body) {\n await this._asyncWrite(chunk);\n }\n super.end();\n }\n catch (error) {\n this._beforeError(error);\n }\n })();\n }\n else if (!is.undefined(body)) {\n this._writeRequest(body, undefined, () => { });\n currentRequest.end();\n }\n else if (this._cannotHaveBody || this._noPipe) {\n currentRequest.end();\n }\n }\n _prepareCache(cache) {\n if (!cacheableStore.has(cache)) {\n const cacheableRequest = new CacheableRequest(((requestOptions, handler) => {\n const result = requestOptions._request(requestOptions, handler);\n // TODO: remove this when `cacheable-request` supports async request functions.\n if (is.promise(result)) {\n // We only need to implement the error handler in order to support HTTP2 caching.\n // The result will be a promise anyway.\n // @ts-expect-error ignore\n result.once = (event, handler) => {\n if (event === 'error') {\n (async () => {\n try {\n await result;\n }\n catch (error) {\n handler(error);\n }\n })();\n }\n else if (event === 'abort') {\n // The empty catch is needed here in case when\n // it rejects before it's `await`ed in `_makeRequest`.\n (async () => {\n try {\n const request = (await result);\n request.once('abort', handler);\n }\n catch { }\n })();\n }\n else {\n /* istanbul ignore next: safety check */\n throw new Error(`Unknown HTTP2 promise event: ${event}`);\n }\n return result;\n };\n }\n return result;\n }), cache);\n cacheableStore.set(cache, cacheableRequest.request());\n }\n }\n async _createCacheableRequest(url, options) {\n return new Promise((resolve, reject) => {\n // TODO: Remove `utils/url-to-options.ts` when `cacheable-request` is fixed\n Object.assign(options, urlToOptions(url));\n let request;\n // TODO: Fix `cacheable-response`. This is ugly.\n const cacheRequest = cacheableStore.get(options.cache)(options, async (response) => {\n response._readableState.autoDestroy = false;\n if (request) {\n const fix = () => {\n if (response.req) {\n response.complete = response.req.res.complete;\n }\n };\n response.prependOnceListener('end', fix);\n fix();\n (await request).emit('cacheableResponse', response);\n }\n resolve(response);\n });\n cacheRequest.once('error', reject);\n cacheRequest.once('request', async (requestOrPromise) => {\n request = requestOrPromise;\n resolve(request);\n });\n });\n }\n async _makeRequest() {\n const { options } = this;\n const { headers, username, password } = options;\n const cookieJar = options.cookieJar;\n for (const key in headers) {\n if (is.undefined(headers[key])) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete headers[key];\n }\n else if (is.null_(headers[key])) {\n throw new TypeError(`Use \\`undefined\\` instead of \\`null\\` to delete the \\`${key}\\` header`);\n }\n }\n if (options.decompress && is.undefined(headers['accept-encoding'])) {\n headers['accept-encoding'] = supportsBrotli ? 'gzip, deflate, br' : 'gzip, deflate';\n }\n if (username || password) {\n const credentials = Buffer.from(`${username}:${password}`).toString('base64');\n headers.authorization = `Basic ${credentials}`;\n }\n // Set cookies\n if (cookieJar) {\n const cookieString = await cookieJar.getCookieString(options.url.toString());\n if (is.nonEmptyString(cookieString)) {\n headers.cookie = cookieString;\n }\n }\n // Reset `prefixUrl`\n options.prefixUrl = '';\n let request;\n for (const hook of options.hooks.beforeRequest) {\n // eslint-disable-next-line no-await-in-loop\n const result = await hook(options);\n if (!is.undefined(result)) {\n // @ts-expect-error Skip the type mismatch to support abstract responses\n request = () => result;\n break;\n }\n }\n if (!request) {\n request = options.getRequestFunction();\n }\n const url = options.url;\n this._requestOptions = options.createNativeRequestOptions();\n if (options.cache) {\n this._requestOptions._request = request;\n this._requestOptions.cache = options.cache;\n this._requestOptions.body = options.body;\n this._prepareCache(options.cache);\n }\n // Cache support\n const fn = options.cache ? this._createCacheableRequest : request;\n try {\n // We can't do `await fn(...)`,\n // because stream `error` event can be emitted before `Promise.resolve()`.\n let requestOrResponse = fn(url, this._requestOptions);\n if (is.promise(requestOrResponse)) {\n requestOrResponse = await requestOrResponse;\n }\n // Fallback\n if (is.undefined(requestOrResponse)) {\n requestOrResponse = options.getFallbackRequestFunction()(url, this._requestOptions);\n if (is.promise(requestOrResponse)) {\n requestOrResponse = await requestOrResponse;\n }\n }\n if (isClientRequest(requestOrResponse)) {\n this._onRequest(requestOrResponse);\n }\n else if (this.writable) {\n this.once('finish', () => {\n void this._onResponse(requestOrResponse);\n });\n this._sendBody();\n }\n else {\n void this._onResponse(requestOrResponse);\n }\n }\n catch (error) {\n if (error instanceof CacheableCacheError) {\n throw new CacheError(error, this);\n }\n throw error;\n }\n }\n async _error(error) {\n try {\n if (error instanceof HTTPError && !this.options.throwHttpErrors) {\n // This branch can be reached only when using the Promise API\n // Skip calling the hooks on purpose.\n // See https://github.com/sindresorhus/got/issues/2103\n }\n else {\n for (const hook of this.options.hooks.beforeError) {\n // eslint-disable-next-line no-await-in-loop\n error = await hook(error);\n }\n }\n }\n catch (error_) {\n error = new RequestError(error_.message, error_, this);\n }\n this.destroy(error);\n }\n _writeRequest(chunk, encoding, callback) {\n if (!this._request || this._request.destroyed) {\n // Probably the `ClientRequest` instance will throw\n return;\n }\n this._request.write(chunk, encoding, (error) => {\n // The `!destroyed` check is required to prevent `uploadProgress` being emitted after the stream was destroyed\n if (!error && !this._request.destroyed) {\n this._uploadedSize += Buffer.byteLength(chunk, encoding);\n const progress = this.uploadProgress;\n if (progress.percent < 1) {\n this.emit('uploadProgress', progress);\n }\n }\n callback(error);\n });\n }\n /**\n The remote IP address.\n */\n get ip() {\n return this.socket?.remoteAddress;\n }\n /**\n Indicates whether the request has been aborted or not.\n */\n get isAborted() {\n return this._aborted;\n }\n get socket() {\n return this._request?.socket ?? undefined;\n }\n /**\n Progress event for downloading (receiving a response).\n */\n get downloadProgress() {\n let percent;\n if (this._responseSize) {\n percent = this._downloadedSize / this._responseSize;\n }\n else if (this._responseSize === this._downloadedSize) {\n percent = 1;\n }\n else {\n percent = 0;\n }\n return {\n percent,\n transferred: this._downloadedSize,\n total: this._responseSize,\n };\n }\n /**\n Progress event for uploading (sending a request).\n */\n get uploadProgress() {\n let percent;\n if (this._bodySize) {\n percent = this._uploadedSize / this._bodySize;\n }\n else if (this._bodySize === this._uploadedSize) {\n percent = 1;\n }\n else {\n percent = 0;\n }\n return {\n percent,\n transferred: this._uploadedSize,\n total: this._bodySize,\n };\n }\n /**\n The object contains the following properties:\n\n - `start` - Time when the request started.\n - `socket` - Time when a socket was assigned to the request.\n - `lookup` - Time when the DNS lookup finished.\n - `connect` - Time when the socket successfully connected.\n - `secureConnect` - Time when the socket securely connected.\n - `upload` - Time when the request finished uploading.\n - `response` - Time when the request fired `response` event.\n - `end` - Time when the response fired `end` event.\n - `error` - Time when the request fired `error` event.\n - `abort` - Time when the request fired `abort` event.\n - `phases`\n - `wait` - `timings.socket - timings.start`\n - `dns` - `timings.lookup - timings.socket`\n - `tcp` - `timings.connect - timings.lookup`\n - `tls` - `timings.secureConnect - timings.connect`\n - `request` - `timings.upload - (timings.secureConnect || timings.connect)`\n - `firstByte` - `timings.response - timings.upload`\n - `download` - `timings.end - timings.response`\n - `total` - `(timings.end || timings.error || timings.abort) - timings.start`\n\n If something has not been measured yet, it will be `undefined`.\n\n __Note__: The time is a `number` representing the milliseconds elapsed since the UNIX epoch.\n */\n get timings() {\n return this._request?.timings;\n }\n /**\n Whether the response was retrieved from the cache.\n */\n get isFromCache() {\n return this._isFromCache;\n }\n get reusedSocket() {\n return this._request?.reusedSocket;\n }\n}\n",
|
|
160
|
+
"import { RequestError } from '../core/errors.js';\n/**\nAn error to be thrown when the request is aborted with `.cancel()`.\n*/\nexport class CancelError extends RequestError {\n constructor(request) {\n super('Promise was canceled', {}, request);\n this.name = 'CancelError';\n this.code = 'ERR_CANCELED';\n }\n /**\n Whether the promise is canceled.\n */\n get isCanceled() {\n return true;\n }\n}\n",
|
|
161
|
+
"import { EventEmitter } from 'node:events';\nimport is from '@sindresorhus/is';\nimport PCancelable from 'p-cancelable';\nimport { HTTPError, RetryError, } from '../core/errors.js';\nimport Request from '../core/index.js';\nimport { parseBody, isResponseOk } from '../core/response.js';\nimport proxyEvents from '../core/utils/proxy-events.js';\nimport { CancelError } from './types.js';\nconst proxiedRequestEvents = [\n 'request',\n 'response',\n 'redirect',\n 'uploadProgress',\n 'downloadProgress',\n];\nexport default function asPromise(firstRequest) {\n let globalRequest;\n let globalResponse;\n let normalizedOptions;\n const emitter = new EventEmitter();\n const promise = new PCancelable((resolve, reject, onCancel) => {\n onCancel(() => {\n globalRequest.destroy();\n });\n onCancel.shouldReject = false;\n onCancel(() => {\n reject(new CancelError(globalRequest));\n });\n const makeRequest = (retryCount) => {\n // Errors when a new request is made after the promise settles.\n // Used to detect a race condition.\n // See https://github.com/sindresorhus/got/issues/1489\n onCancel(() => { });\n const request = firstRequest ?? new Request(undefined, undefined, normalizedOptions);\n request.retryCount = retryCount;\n request._noPipe = true;\n globalRequest = request;\n request.once('response', async (response) => {\n // Parse body\n const contentEncoding = (response.headers['content-encoding'] ?? '').toLowerCase();\n const isCompressed = contentEncoding === 'gzip' || contentEncoding === 'deflate' || contentEncoding === 'br';\n const { options } = request;\n if (isCompressed && !options.decompress) {\n response.body = response.rawBody;\n }\n else {\n try {\n response.body = parseBody(response, options.responseType, options.parseJson, options.encoding);\n }\n catch (error) {\n // Fall back to `utf8`\n response.body = response.rawBody.toString();\n if (isResponseOk(response)) {\n request._beforeError(error);\n return;\n }\n }\n }\n try {\n const hooks = options.hooks.afterResponse;\n for (const [index, hook] of hooks.entries()) {\n // @ts-expect-error TS doesn't notice that CancelableRequest is a Promise\n // eslint-disable-next-line no-await-in-loop\n response = await hook(response, async (updatedOptions) => {\n options.merge(updatedOptions);\n options.prefixUrl = '';\n if (updatedOptions.url) {\n options.url = updatedOptions.url;\n }\n // Remove any further hooks for that request, because we'll call them anyway.\n // The loop continues. We don't want duplicates (asPromise recursion).\n options.hooks.afterResponse = options.hooks.afterResponse.slice(0, index);\n throw new RetryError(request);\n });\n if (!(is.object(response) && is.number(response.statusCode) && !is.nullOrUndefined(response.body))) {\n throw new TypeError('The `afterResponse` hook returned an invalid value');\n }\n }\n }\n catch (error) {\n request._beforeError(error);\n return;\n }\n globalResponse = response;\n if (!isResponseOk(response)) {\n request._beforeError(new HTTPError(response));\n return;\n }\n request.destroy();\n resolve(request.options.resolveBodyOnly ? response.body : response);\n });\n const onError = (error) => {\n if (promise.isCanceled) {\n return;\n }\n const { options } = request;\n if (error instanceof HTTPError && !options.throwHttpErrors) {\n const { response } = error;\n request.destroy();\n resolve(request.options.resolveBodyOnly ? response.body : response);\n return;\n }\n reject(error);\n };\n request.once('error', onError);\n const previousBody = request.options?.body;\n request.once('retry', (newRetryCount, error) => {\n firstRequest = undefined;\n const newBody = request.options.body;\n if (previousBody === newBody && is.nodeStream(newBody)) {\n error.message = 'Cannot retry with consumed body stream';\n onError(error);\n return;\n }\n // This is needed! We need to reuse `request.options` because they can get modified!\n // For example, by calling `promise.json()`.\n normalizedOptions = request.options;\n makeRequest(newRetryCount);\n });\n proxyEvents(request, emitter, proxiedRequestEvents);\n if (is.undefined(firstRequest)) {\n void request.flush();\n }\n };\n makeRequest(0);\n });\n promise.on = (event, fn) => {\n emitter.on(event, fn);\n return promise;\n };\n promise.off = (event, fn) => {\n emitter.off(event, fn);\n return promise;\n };\n const shortcut = (responseType) => {\n const newPromise = (async () => {\n // Wait until downloading has ended\n await promise;\n const { options } = globalResponse.request;\n return parseBody(globalResponse, responseType, options.parseJson, options.encoding);\n })();\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n Object.defineProperties(newPromise, Object.getOwnPropertyDescriptors(promise));\n return newPromise;\n };\n promise.json = () => {\n if (globalRequest.options) {\n const { headers } = globalRequest.options;\n if (!globalRequest.writableFinished && !('accept' in headers)) {\n headers.accept = 'application/json';\n }\n }\n return shortcut('json');\n };\n promise.buffer = () => shortcut('buffer');\n promise.text = () => shortcut('text');\n return promise;\n}\n",
|
|
162
|
+
"import is, { assert } from '@sindresorhus/is';\nimport asPromise from './as-promise/index.js';\nimport Request from './core/index.js';\nimport Options from './core/options.js';\n// The `delay` package weighs 10KB (!)\nconst delay = async (ms) => new Promise(resolve => {\n setTimeout(resolve, ms);\n});\nconst isGotInstance = (value) => is.function_(value);\nconst aliases = [\n 'get',\n 'post',\n 'put',\n 'patch',\n 'head',\n 'delete',\n];\nconst create = (defaults) => {\n defaults = {\n options: new Options(undefined, undefined, defaults.options),\n handlers: [...defaults.handlers],\n mutableDefaults: defaults.mutableDefaults,\n };\n Object.defineProperty(defaults, 'mutableDefaults', {\n enumerable: true,\n configurable: false,\n writable: false,\n });\n // Got interface\n const got = ((url, options, defaultOptions = defaults.options) => {\n const request = new Request(url, options, defaultOptions);\n let promise;\n const lastHandler = (normalized) => {\n // Note: `options` is `undefined` when `new Options(...)` fails\n request.options = normalized;\n request._noPipe = !normalized.isStream;\n void request.flush();\n if (normalized.isStream) {\n return request;\n }\n if (!promise) {\n promise = asPromise(request);\n }\n return promise;\n };\n let iteration = 0;\n const iterateHandlers = (newOptions) => {\n const handler = defaults.handlers[iteration++] ?? lastHandler;\n const result = handler(newOptions, iterateHandlers);\n if (is.promise(result) && !request.options.isStream) {\n if (!promise) {\n promise = asPromise(request);\n }\n if (result !== promise) {\n const descriptors = Object.getOwnPropertyDescriptors(promise);\n for (const key in descriptors) {\n if (key in result) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete descriptors[key];\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n Object.defineProperties(result, descriptors);\n result.cancel = promise.cancel;\n }\n }\n return result;\n };\n return iterateHandlers(request.options);\n });\n got.extend = (...instancesOrOptions) => {\n const options = new Options(undefined, undefined, defaults.options);\n const handlers = [...defaults.handlers];\n let mutableDefaults;\n for (const value of instancesOrOptions) {\n if (isGotInstance(value)) {\n options.merge(value.defaults.options);\n handlers.push(...value.defaults.handlers);\n mutableDefaults = value.defaults.mutableDefaults;\n }\n else {\n options.merge(value);\n if (value.handlers) {\n handlers.push(...value.handlers);\n }\n mutableDefaults = value.mutableDefaults;\n }\n }\n return create({\n options,\n handlers,\n mutableDefaults: Boolean(mutableDefaults),\n });\n };\n // Pagination\n const paginateEach = (async function* (url, options) {\n let normalizedOptions = new Options(url, options, defaults.options);\n normalizedOptions.resolveBodyOnly = false;\n const { pagination } = normalizedOptions;\n assert.function_(pagination.transform);\n assert.function_(pagination.shouldContinue);\n assert.function_(pagination.filter);\n assert.function_(pagination.paginate);\n assert.number(pagination.countLimit);\n assert.number(pagination.requestLimit);\n assert.number(pagination.backoff);\n const allItems = [];\n let { countLimit } = pagination;\n let numberOfRequests = 0;\n while (numberOfRequests < pagination.requestLimit) {\n if (numberOfRequests !== 0) {\n // eslint-disable-next-line no-await-in-loop\n await delay(pagination.backoff);\n }\n // eslint-disable-next-line no-await-in-loop\n const response = (await got(undefined, undefined, normalizedOptions));\n // eslint-disable-next-line no-await-in-loop\n const parsed = await pagination.transform(response);\n const currentItems = [];\n assert.array(parsed);\n for (const item of parsed) {\n if (pagination.filter({ item, currentItems, allItems })) {\n if (!pagination.shouldContinue({ item, currentItems, allItems })) {\n return;\n }\n yield item;\n if (pagination.stackAllItems) {\n allItems.push(item);\n }\n currentItems.push(item);\n if (--countLimit <= 0) {\n return;\n }\n }\n }\n const optionsToMerge = pagination.paginate({\n response,\n currentItems,\n allItems,\n });\n if (optionsToMerge === false) {\n return;\n }\n if (optionsToMerge === response.request.options) {\n normalizedOptions = response.request.options;\n }\n else {\n normalizedOptions.merge(optionsToMerge);\n assert.any([is.urlInstance, is.undefined], optionsToMerge.url);\n if (optionsToMerge.url !== undefined) {\n normalizedOptions.prefixUrl = '';\n normalizedOptions.url = optionsToMerge.url;\n }\n }\n numberOfRequests++;\n }\n });\n got.paginate = paginateEach;\n got.paginate.all = (async (url, options) => {\n const results = [];\n for await (const item of paginateEach(url, options)) {\n results.push(item);\n }\n return results;\n });\n // For those who like very descriptive names\n got.paginate.each = paginateEach;\n // Stream API\n got.stream = ((url, options) => got(url, { ...options, isStream: true }));\n // Shortcuts\n for (const method of aliases) {\n got[method] = ((url, options) => got(url, { ...options, method }));\n got.stream[method] = ((url, options) => got(url, { ...options, method, isStream: true }));\n }\n if (!defaults.mutableDefaults) {\n Object.freeze(defaults.handlers);\n defaults.options.freeze();\n }\n Object.defineProperty(got, 'defaults', {\n value: defaults,\n writable: false,\n configurable: false,\n enumerable: true,\n });\n return got;\n};\nexport default create;\n",
|
|
163
|
+
"import create from './create.js';\nimport Options from './core/options.js';\nconst defaults = {\n options: new Options(),\n handlers: [],\n mutableDefaults: false,\n};\nconst got = create(defaults);\nexport default got;\nexport { got };\nexport { default as Options } from './core/options.js';\nexport * from './core/options.js';\nexport * from './core/response.js';\nexport * from './core/index.js';\nexport * from './core/errors.js';\nexport { default as calculateRetryDelay } from './core/calculate-retry-delay.js';\nexport * from './as-promise/types.js';\nexport * from './types.js';\nexport { default as create } from './create.js';\nexport { default as parseLinkHeader } from './core/parse-link-header.js';\n",
|
|
10
164
|
"import got from \"got\";\nimport type { NetworkName } from \"../types/config\";\n\n/**\n * Stacks API client for fetching contract information\n */\n\nconst API_URLS: Record<NetworkName, string> = {\n mainnet: \"https://api.hiro.so\",\n testnet: \"https://api.testnet.hiro.so\",\n devnet: \"http://localhost:3999\",\n};\n\nexport interface ContractInfo {\n functions: any[];\n variables?: any[];\n maps?: any[];\n fungible_tokens?: any[];\n non_fungible_tokens?: any[];\n epoch?: string;\n clarity_version?: string;\n}\n\nexport class StacksApiClient {\n private baseUrl: string;\n private headers: Record<string, string>;\n\n constructor(\n network: NetworkName = \"mainnet\",\n apiKey?: string,\n apiUrl?: string\n ) {\n this.baseUrl = apiUrl || API_URLS[network];\n this.headers = apiKey ? { \"x-api-key\": apiKey } : {};\n }\n\n async getContractInfo(contractId: string): Promise<ContractInfo> {\n const [address, contractName] = contractId.split(\".\");\n\n if (!address || !contractName) {\n throw new Error(\n `Invalid contract ID format: ${contractId}. Expected format: ADDRESS.CONTRACT_NAME`\n );\n }\n\n const url = `${this.baseUrl}/v2/contracts/interface/${address}/${contractName}`;\n\n try {\n const response = await got(url, {\n headers: this.headers,\n responseType: \"json\",\n });\n\n return response.body as ContractInfo;\n } catch (error: any) {\n if (error.response?.statusCode === 404) {\n throw new Error(`Contract not found: ${contractId}`);\n }\n if (error.response?.statusCode === 429) {\n throw new Error(\n \"Rate limited. Please provide an API key in your config.\"\n );\n }\n throw new Error(`Failed to fetch contract: ${error.message}`);\n }\n }\n\n async getContractSource(contractId: string): Promise<string> {\n const [address, contractName] = contractId.split(\".\");\n\n if (!address || !contractName) {\n throw new Error(\n `Invalid contract ID format: ${contractId}. Expected format: ADDRESS.CONTRACT_NAME`\n );\n }\n\n const url = `${this.baseUrl}/v2/contracts/source/${address}/${contractName}`;\n\n try {\n const response = await got(url, {\n headers: this.headers,\n responseType: \"json\",\n });\n\n const data = response.body as { source: string };\n return data.source;\n } catch (error: any) {\n return \"\";\n }\n }\n}\n",
|
|
11
165
|
"import { promises as fs } from \"fs\";\nimport type {\n ClarityContract,\n ClarityFunction,\n ClarityType,\n} from \"@secondlayer/clarity-types\";\n\n/**\n * Basic Clarity contract parser\n * This is a simplified parser - a full implementation would be more robust\n */\n\nexport async function parseClarityFile(\n filePath: string\n): Promise<ClarityContract> {\n const content = await fs.readFile(filePath, \"utf-8\");\n return parseClarityContent(content);\n}\n\nexport function parseClarityContent(content: string): ClarityContract {\n const functions: ClarityFunction[] = [];\n\n const functionRegex =\n /\\(define-(public|read-only|private)\\s+\\(([^)]+)\\)([\\s\\S]*?)\\)\\s*$/gm;\n\n let match;\n while ((match = functionRegex.exec(content)) !== null) {\n const [, access, signature, body] = match;\n const func = parseFunctionSignature(signature, access as any, body);\n if (func) {\n functions.push(func);\n }\n }\n\n return { functions };\n}\n\nfunction parseFunctionSignature(\n signature: string,\n access: \"public\" | \"read-only\" | \"private\",\n body: string\n): ClarityFunction | null {\n // Parse function name and arguments\n const parts = signature.trim().split(/\\s+/);\n const name = parts[0];\n\n const args: Array<{ name: string; type: ClarityType }> = [];\n\n // Parse arguments (simplified)\n for (let i = 1; i < parts.length; i += 2) {\n if (parts[i] && parts[i + 1]) {\n const argName = parts[i].replace(/[()]/g, \"\");\n const argType = parseType(parts[i + 1]);\n if (argType) {\n args.push({ name: argName, type: argType });\n }\n }\n }\n\n // Infer return type from body (simplified)\n const outputs = inferReturnType(body);\n\n return {\n name,\n access,\n args,\n outputs,\n };\n}\n\nfunction parseType(typeStr: string): ClarityType | null {\n typeStr = typeStr.replace(/[()]/g, \"\").trim();\n\n // Basic type mappings\n switch (typeStr) {\n case \"uint\":\n case \"uint128\":\n return \"uint128\";\n case \"int\":\n case \"int128\":\n return \"int128\";\n case \"bool\":\n return \"bool\";\n case \"principal\":\n return \"principal\";\n case \"trait_reference\":\n return \"principal\";\n default:\n // Handle complex types (simplified)\n if (typeStr.startsWith(\"string-ascii\")) {\n return { \"string-ascii\": { length: 256 } };\n }\n if (typeStr.startsWith(\"string-utf8\")) {\n return { \"string-utf8\": { length: 256 } };\n }\n if (typeStr.startsWith(\"buff\")) {\n return { buff: { length: 32 } };\n }\n // Default to uint128 for unknown types\n return \"uint128\";\n }\n}\n\nfunction inferReturnType(body: string): ClarityType {\n // Simplified return type inference\n if (body.includes(\"(ok\")) {\n if (body.includes(\"(err\")) {\n return {\n response: {\n ok: \"bool\",\n error: \"uint128\",\n },\n };\n }\n }\n\n if (body.includes(\"true\") || body.includes(\"false\")) {\n return \"bool\";\n }\n\n return \"bool\";\n}\n\n/**\n * Parse ABI from API response\n */\nexport function parseApiResponse(apiResponse: any): ClarityContract {\n try {\n const functions: ClarityFunction[] = [];\n\n if (apiResponse.functions) {\n for (const func of apiResponse.functions) {\n const access = func.access === \"read_only\" ? \"read-only\" : func.access;\n\n functions.push({\n name: func.name,\n access: access,\n args: func.args.map((arg: any) => ({\n name: arg.name,\n type: convertApiType(arg.type),\n })),\n outputs: convertApiType(func.outputs.type),\n });\n }\n }\n\n return { functions };\n } catch (error) {\n throw new Error(`Failed to parse API response: ${error}`);\n }\n}\n\nfunction convertApiType(apiType: any): ClarityType {\n if (typeof apiType === \"string\") {\n if (apiType === \"trait_reference\") {\n return \"trait_reference\";\n }\n return parseType(apiType) || \"uint128\";\n }\n\n // Handle complex types from API\n if (apiType.response) {\n return {\n response: {\n ok: convertApiType(apiType.response.ok),\n error: convertApiType(apiType.response.error),\n },\n };\n }\n\n if (apiType.optional) {\n return {\n optional: convertApiType(apiType.optional),\n };\n }\n\n if (apiType.list) {\n return {\n list: {\n type: convertApiType(apiType.list.type),\n length: apiType.list.length || 100,\n },\n };\n }\n\n if (apiType.tuple) {\n return {\n tuple: apiType.tuple.map((field: any) => ({\n name: field.name,\n type: convertApiType(field.type),\n })),\n };\n }\n\n if (apiType.buffer) {\n return {\n buff: {\n length: apiType.buffer.length || 32,\n },\n };\n }\n\n if (apiType[\"string-ascii\"]) {\n return {\n \"string-ascii\": {\n length: apiType[\"string-ascii\"].length || 256,\n },\n };\n }\n\n if (apiType[\"string-utf8\"]) {\n return {\n \"string-utf8\": {\n length: apiType[\"string-utf8\"].length || 256,\n },\n };\n }\n\n // Handle none type\n if (apiType === \"none\") {\n return \"uint128\"; // TODO: We'll need to handle this better in the future\n }\n\n // Default\n return \"uint128\";\n}\n",
|
|
12
|
-
"import { format } from \"prettier\";\nimport type { ResolvedContract } from \"../types/config\";\nimport type { ClarityFunction } from \"@secondlayer/clarity-types\";\n\n/**\n * Code generator for contract interfaces\n */\n\nexport async function generateContractInterface(\n contracts: ResolvedContract[]\n): Promise<string> {\n const imports = `import { Cl, validateStacksAddress } from '@stacks/transactions'`;\n\n const header = `/**\n * Generated by @secondlayer/cli\n * DO NOT EDIT MANUALLY\n */`;\n\n const contractsCode = contracts\n .map((contract) => generateContract(contract))\n .join(\"\\n\\n\");\n\n const code = `${imports}\\n\\n${header}\\n\\n${contractsCode}`;\n\n const formatted = await format(code, {\n parser: \"typescript\",\n singleQuote: true,\n semi: true,\n printWidth: 100,\n trailingComma: \"es5\",\n });\n\n return formatted;\n}\n\nfunction generateContract(contract: ResolvedContract): string {\n const { name, address, contractName, abi } = contract;\n\n const abiCode = generateAbiConstant(name, abi);\n\n const methods = abi.functions\n .filter((func: ClarityFunction) => func.access !== \"private\")\n .map((func: ClarityFunction) => generateMethod(func, address, contractName))\n .join(\",\\n\\n \");\n\n const contractCode = `export const ${name} = {\n address: '${address}',\n contractAddress: '${address}',\n contractName: '${contractName}',\n \n ${methods}\n} as const`;\n\n return `${abiCode}\\n\\n${contractCode}`;\n}\n\nfunction generateAbiConstant(name: string, abi: any): string {\n const abiJson = JSON.stringify(abi, null, 2)\n .replace(/\"([a-zA-Z_$][a-zA-Z0-9_$]*)\":/g, \"$1:\") // Only remove quotes from valid JS identifiers\n .replace(/\"/g, \"'\"); // Use single quotes\n\n return `export const ${name}Abi = ${abiJson} as const`;\n}\n\nfunction generateMethod(\n func: ClarityFunction,\n address: string,\n contractName: string\n): string {\n const methodName = toCamelCase(func.name);\n\n if (func.args.length === 0) {\n return `${methodName}() {\n return {\n contractAddress: '${address}',\n contractName: '${contractName}',\n functionName: '${func.name}',\n functionArgs: []\n }\n }`;\n }\n\n if (func.args.length === 1) {\n const originalArgName = func.args[0].name;\n const argName = toCamelCase(originalArgName);\n const argType = getTypeForArg(func.args[0]);\n const clarityConversion = generateClarityConversion(argName, func.args[0]);\n\n return `${methodName}(...args: [{ ${argName}: ${argType} }] | [${argType}]) {\n const ${argName} = args.length === 1 && typeof args[0] === 'object' && args[0] !== null && '${argName}' in args[0]\n ? args[0].${argName}\n : args[0] as ${argType}\n \n return {\n contractAddress: '${address}',\n contractName: '${contractName}',\n functionName: '${func.name}',\n functionArgs: [${clarityConversion}]\n }\n }`;\n }\n\n const argsList = func.args.map((arg) => toCamelCase(arg.name)).join(\", \");\n const argsTypes = func.args\n .map((arg) => {\n const camelName = toCamelCase(arg.name);\n return `${camelName}: ${getTypeForArg(arg)}`;\n })\n .join(\"; \");\n const argsArray = func.args\n .map((arg) => {\n const argName = toCamelCase(arg.name);\n return generateClarityConversion(argName, arg);\n })\n .join(\", \");\n const objectAccess = func.args\n .map((arg) => {\n const camelName = toCamelCase(arg.name);\n return `args[0].${camelName}`;\n })\n .join(\", \");\n const positionTypes = func.args.map((arg) => getTypeForArg(arg)).join(\", \");\n\n return `${methodName}(...args: [{ ${argsTypes} }] | [${positionTypes}]) {\n const [${argsList}] = args.length === 1 && typeof args[0] === 'object' && args[0] !== null\n ? [${objectAccess}]\n : args as [${positionTypes}]\n \n return {\n contractAddress: '${address}',\n contractName: '${contractName}',\n functionName: '${func.name}',\n functionArgs: [${argsArray}]\n }\n }`;\n}\n\nfunction getTypeForArg(arg: any): string {\n const type = arg.type;\n\n if (typeof type === \"string\") {\n switch (type) {\n case \"uint128\":\n case \"int128\":\n return \"bigint\";\n case \"bool\":\n return \"boolean\";\n case \"principal\":\n case \"trait_reference\":\n return \"string\";\n default:\n return \"any\";\n }\n }\n\n if (type[\"string-ascii\"] || type[\"string-utf8\"]) {\n return \"string\";\n }\n\n if (type.buff) {\n // Support flexible buffer input types\n return \"Uint8Array | string | { type: 'ascii' | 'utf8' | 'hex'; value: string }\";\n }\n\n if (type.optional) {\n const innerType = getTypeForArg({ type: type.optional });\n return `${innerType} | null`;\n }\n\n if (type.list) {\n const innerType = getTypeForArg({ type: type.list.type });\n return `${innerType}[]`;\n }\n\n if (type.tuple) {\n const fields = type.tuple\n .map(\n (field: any) =>\n `${toCamelCase(field.name)}: ${getTypeForArg({ type: field.type })}`\n )\n .join(\"; \");\n return `{ ${fields} }`;\n }\n\n if (type.response) {\n const okType = getTypeForArg({ type: type.response.ok });\n const errType = getTypeForArg({ type: type.response.error });\n return `{ ok: ${okType} } | { err: ${errType} }`;\n }\n\n return \"any\";\n}\n\nfunction toCamelCase(str: string): string {\n return str\n .replace(/-([a-z])/g, (_, letter) => letter.toUpperCase()) // Convert -a to A\n .replace(/-([A-Z])/g, (_, letter) => letter) // Convert -A to A\n .replace(/-(\\d)/g, (_, digit) => digit) // Convert -1 to 1\n .replace(/-/g, \"\"); // Remove any remaining hyphens\n}\n\n/**\n * Convert TypeScript value to ClarityValue based on the argument type\n */\nfunction generateClarityConversion(argName: string, argType: any): string {\n const type = argType.type;\n\n if (typeof type === \"string\") {\n switch (type) {\n case \"uint128\":\n return `Cl.uint(${argName})`;\n case \"int128\":\n return `Cl.int(${argName})`;\n case \"bool\":\n return `Cl.bool(${argName})`;\n case \"principal\":\n case \"trait_reference\":\n return `(() => {\n const [address, contractName] = ${argName}.split(\".\") as [string, string];\n if (!validateStacksAddress(address)) {\n throw new Error(\"Invalid Stacks address format\");\n }\n if (${argName}.includes(\".\")) {\n return Cl.contractPrincipal(address, contractName);\n } else {\n return Cl.standardPrincipal(${argName});\n }\n })()`;\n default:\n return `${argName}`; // fallback for unknown types\n }\n }\n\n if (type[\"string-ascii\"]) {\n return `Cl.stringAscii(${argName})`;\n }\n\n if (type[\"string-utf8\"]) {\n return `Cl.stringUtf8(${argName})`;\n }\n\n if (type.buff) {\n // Generate flexible buffer conversion code that matches the hooks implementation\n return `(() => {\n const value = ${argName};\n // Direct Uint8Array\n if (value instanceof Uint8Array) {\n return Cl.buffer(value);\n }\n // Object notation with explicit type\n if (typeof value === 'object' && value !== null && value.type && value.value) {\n switch (value.type) {\n case 'ascii':\n return Cl.bufferFromAscii(value.value);\n case 'utf8':\n return Cl.bufferFromUtf8(value.value);\n case 'hex':\n return Cl.bufferFromHex(value.value);\n default:\n throw new Error(\\`Unsupported buffer type: \\${value.type}\\`);\n }\n }\n // Auto-detect string type\n if (typeof value === 'string') {\n // Check for hex (0x prefix or pure hex pattern)\n if (value.startsWith('0x') || /^[0-9a-fA-F]+$/.test(value)) {\n return Cl.bufferFromHex(value);\n }\n // Check for non-ASCII characters (UTF-8)\n if (!/^[\\\\x00-\\\\x7F]*$/.test(value)) {\n return Cl.bufferFromUtf8(value);\n }\n // Default to ASCII for simple ASCII strings\n return Cl.bufferFromAscii(value);\n }\n throw new Error(\\`Invalid buffer value: \\${value}\\`);\n })()`;\n }\n\n if (type.optional) {\n const innerConversion = generateClarityConversion(argName, {\n type: type.optional,\n });\n return `${argName} !== null ? Cl.some(${innerConversion.replace(argName, `${argName}`)}) : Cl.none()`;\n }\n\n if (type.list) {\n const innerConversion = generateClarityConversion(\"item\", {\n type: type.list.type,\n });\n return `Cl.list(${argName}.map(item => ${innerConversion}))`;\n }\n\n if (type.tuple) {\n const fields = type.tuple\n .map((field: any) => {\n const camelFieldName = toCamelCase(field.name);\n const fieldConversion = generateClarityConversion(\n `${argName}.${camelFieldName}`,\n { type: field.type }\n );\n return `\"${field.name}\": ${fieldConversion}`;\n })\n .join(\", \");\n return `Cl.tuple({ ${fields} })`;\n }\n\n if (type.response) {\n // For response types, we expect the user to pass { ok: value } or { err: value }\n const okConversion = generateClarityConversion(`${argName}.ok`, {\n type: type.response.ok,\n });\n const errConversion = generateClarityConversion(`${argName}.err`, {\n type: type.response.error,\n });\n return `'ok' in ${argName} ? Cl.ok(${okConversion.replace(`${argName}.ok`, `${argName}.ok`)}) : Cl.error(${errConversion.replace(`${argName}.err`, `${argName}.err`)})`;\n }\n\n // Default fallback\n return `${argName}`;\n}\n"
|
|
166
|
+
"import { format } from \"prettier\";\nimport type { ResolvedContract } from \"../types/config\";\nimport type { ClarityFunction } from \"@secondlayer/clarity-types\";\n\n/**\n * Code generator for contract interfaces\n */\n\nexport async function generateContractInterface(\n contracts: ResolvedContract[]\n): Promise<string> {\n const imports = `import { Cl, validateStacksAddress } from '@stacks/transactions'`;\n\n const header = `/**\n * Generated by @secondlayer/cli\n * DO NOT EDIT MANUALLY\n */`;\n\n const contractsCode = contracts\n .map((contract) => generateContract(contract))\n .join(\"\\n\\n\");\n\n const code = `${imports}\\n\\n${header}\\n\\n${contractsCode}`;\n\n const formatted = await format(code, {\n parser: \"typescript\",\n singleQuote: true,\n semi: true,\n printWidth: 100,\n trailingComma: \"es5\",\n });\n\n return formatted;\n}\n\nfunction generateContract(contract: ResolvedContract): string {\n const { name, address, contractName, abi } = contract;\n\n const abiCode = generateAbiConstant(name, abi);\n\n const methods = abi.functions\n .filter((func: ClarityFunction) => func.access !== \"private\")\n .map((func: ClarityFunction) => generateMethod(func, address, contractName))\n .join(\",\\n\\n \");\n\n const contractCode = `export const ${name} = {\n address: '${address}',\n contractAddress: '${address}',\n contractName: '${contractName}',\n \n ${methods}\n} as const`;\n\n return `${abiCode}\\n\\n${contractCode}`;\n}\n\nfunction generateAbiConstant(name: string, abi: any): string {\n const abiJson = JSON.stringify(abi, null, 2)\n .replace(/\"([a-zA-Z_$][a-zA-Z0-9_$]*)\":/g, \"$1:\") // Only remove quotes from valid JS identifiers\n .replace(/\"/g, \"'\"); // Use single quotes\n\n return `export const ${name}Abi = ${abiJson} as const`;\n}\n\nfunction generateMethod(\n func: ClarityFunction,\n address: string,\n contractName: string\n): string {\n const methodName = toCamelCase(func.name);\n\n if (func.args.length === 0) {\n return `${methodName}() {\n return {\n contractAddress: '${address}',\n contractName: '${contractName}',\n functionName: '${func.name}',\n functionArgs: []\n }\n }`;\n }\n\n if (func.args.length === 1) {\n const originalArgName = func.args[0].name;\n const argName = toCamelCase(originalArgName);\n const argType = getTypeForArg(func.args[0]);\n const clarityConversion = generateClarityConversion(argName, func.args[0]);\n\n return `${methodName}(...args: [{ ${argName}: ${argType} }] | [${argType}]) {\n const ${argName} = args.length === 1 && typeof args[0] === 'object' && args[0] !== null && '${argName}' in args[0]\n ? args[0].${argName}\n : args[0] as ${argType}\n \n return {\n contractAddress: '${address}',\n contractName: '${contractName}',\n functionName: '${func.name}',\n functionArgs: [${clarityConversion}]\n }\n }`;\n }\n\n const argsList = func.args.map((arg) => toCamelCase(arg.name)).join(\", \");\n const argsTypes = func.args\n .map((arg) => {\n const camelName = toCamelCase(arg.name);\n return `${camelName}: ${getTypeForArg(arg)}`;\n })\n .join(\"; \");\n const argsArray = func.args\n .map((arg) => {\n const argName = toCamelCase(arg.name);\n return generateClarityConversion(argName, arg);\n })\n .join(\", \");\n const objectAccess = func.args\n .map((arg) => {\n const camelName = toCamelCase(arg.name);\n return `args[0].${camelName}`;\n })\n .join(\", \");\n const positionTypes = func.args.map((arg) => getTypeForArg(arg)).join(\", \");\n\n return `${methodName}(...args: [{ ${argsTypes} }] | [${positionTypes}]) {\n const [${argsList}] = args.length === 1 && typeof args[0] === 'object' && args[0] !== null\n ? [${objectAccess}]\n : args as [${positionTypes}]\n \n return {\n contractAddress: '${address}',\n contractName: '${contractName}',\n functionName: '${func.name}',\n functionArgs: [${argsArray}]\n }\n }`;\n}\n\nfunction getTypeForArg(arg: any): string {\n const type = arg.type;\n\n if (typeof type === \"string\") {\n switch (type) {\n case \"uint128\":\n case \"int128\":\n return \"bigint\";\n case \"bool\":\n return \"boolean\";\n case \"principal\":\n case \"trait_reference\":\n return \"string\";\n default:\n return \"any\";\n }\n }\n\n if (type[\"string-ascii\"] || type[\"string-utf8\"]) {\n return \"string\";\n }\n\n if (type.buff) {\n // Support flexible buffer input types\n return \"Uint8Array | string | { type: 'ascii' | 'utf8' | 'hex'; value: string }\";\n }\n\n if (type.optional) {\n const innerType = getTypeForArg({ type: type.optional });\n return `${innerType} | null`;\n }\n\n if (type.list) {\n const innerType = getTypeForArg({ type: type.list.type });\n return `${innerType}[]`;\n }\n\n if (type.tuple) {\n const fields = type.tuple\n .map(\n (field: any) =>\n `${toCamelCase(field.name)}: ${getTypeForArg({ type: field.type })}`\n )\n .join(\"; \");\n return `{ ${fields} }`;\n }\n\n if (type.response) {\n const okType = getTypeForArg({ type: type.response.ok });\n const errType = getTypeForArg({ type: type.response.error });\n return `{ ok: ${okType} } | { err: ${errType} }`;\n }\n\n return \"any\";\n}\n\nfunction toCamelCase(str: string): string {\n return str\n .replace(/-([a-z])/g, (_, letter) => letter.toUpperCase()) // Convert -a to A\n .replace(/-([A-Z])/g, (_, letter) => letter) // Convert -A to A\n .replace(/-(\\d)/g, (_, digit) => digit) // Convert -1 to 1\n .replace(/-/g, \"\"); // Remove any remaining hyphens\n}\n\n/**\n * Convert TypeScript value to ClarityValue based on the argument type\n */\nfunction generateClarityConversion(argName: string, argType: any): string {\n const type = argType.type;\n\n if (typeof type === \"string\") {\n switch (type) {\n case \"uint128\":\n return `Cl.uint(${argName})`;\n case \"int128\":\n return `Cl.int(${argName})`;\n case \"bool\":\n return `Cl.bool(${argName})`;\n case \"principal\":\n case \"trait_reference\":\n return `(() => {\n const [address, contractName] = ${argName}.split(\".\") as [string, string];\n if (!validateStacksAddress(address)) {\n throw new Error(\"Invalid Stacks address format\");\n }\n if (${argName}.includes(\".\")) {\n return Cl.contractPrincipal(address, contractName);\n } else {\n return Cl.standardPrincipal(${argName});\n }\n })()`;\n default:\n return `${argName}`; // fallback for unknown types\n }\n }\n\n if (type[\"string-ascii\"]) {\n return `Cl.stringAscii(${argName})`;\n }\n\n if (type[\"string-utf8\"]) {\n return `Cl.stringUtf8(${argName})`;\n }\n\n if (type.buff) {\n // Generate flexible buffer conversion code that matches the hooks implementation\n return `(() => {\n const value = ${argName};\n // Direct Uint8Array\n if (value instanceof Uint8Array) {\n return Cl.buffer(value);\n }\n // Object notation with explicit type\n if (typeof value === 'object' && value !== null && value.type && value.value) {\n switch (value.type) {\n case 'ascii':\n return Cl.bufferFromAscii(value.value);\n case 'utf8':\n return Cl.bufferFromUtf8(value.value);\n case 'hex':\n return Cl.bufferFromHex(value.value);\n default:\n throw new Error(\\`Unsupported buffer type: \\${value.type}\\`);\n }\n }\n // Auto-detect string type\n if (typeof value === 'string') {\n // Check for hex (0x prefix or pure hex pattern)\n if (value.startsWith('0x') || /^[0-9a-fA-F]+$/.test(value)) {\n return Cl.bufferFromHex(value);\n }\n // Check for non-ASCII characters (UTF-8)\n if (!/^[\\\\x00-\\\\x7F]*$/.test(value)) {\n return Cl.bufferFromUtf8(value);\n }\n // Default to ASCII for simple ASCII strings\n return Cl.bufferFromAscii(value);\n }\n throw new Error(\\`Invalid buffer value: \\${value}\\`);\n })()`;\n }\n\n if (type.optional) {\n const innerConversion = generateClarityConversion(argName, {\n type: type.optional,\n });\n return `${argName} !== null ? Cl.some(${innerConversion.replace(argName, `${argName}`)}) : Cl.none()`;\n }\n\n if (type.list) {\n const innerConversion = generateClarityConversion(\"item\", {\n type: type.list.type,\n });\n return `Cl.list(${argName}.map(item => ${innerConversion}))`;\n }\n\n if (type.tuple) {\n const fields = type.tuple\n .map((field: any) => {\n const camelFieldName = toCamelCase(field.name);\n const fieldConversion = generateClarityConversion(\n `${argName}.${camelFieldName}`,\n { type: field.type }\n );\n return `\"${field.name}\": ${fieldConversion}`;\n })\n .join(\", \");\n return `Cl.tuple({ ${fields} })`;\n }\n\n if (type.response) {\n // For response types, we expect the user to pass { ok: value } or { err: value }\n const okConversion = generateClarityConversion(`${argName}.ok`, {\n type: type.response.ok,\n });\n const errConversion = generateClarityConversion(`${argName}.err`, {\n type: type.response.error,\n });\n return `'ok' in ${argName} ? Cl.ok(${okConversion.replace(`${argName}.ok`, `${argName}.ok`)}) : Cl.error(${errConversion.replace(`${argName}.err`, `${argName}.err`)})`;\n }\n\n // Default fallback\n return `${argName}`;\n}\n",
|
|
167
|
+
"import path from \"path\";\nimport chalk from \"chalk\";\nimport fg from \"fast-glob\";\nimport { loadConfig } from \"../utils/config\";\nimport { StacksApiClient } from \"../utils/api\";\nimport { parseClarityFile, parseApiResponse } from \"../parsers/clarity\";\nimport { generateContractInterface } from \"../generators/contract\";\nimport { PluginManager } from \"../core/plugin-manager\";\nimport type {\n ResolvedContract,\n NetworkName,\n ContractSource,\n StacksConfig,\n} from \"../types/config\";\nimport type { ContractConfig, ResolvedConfig } from \"../types/plugin\";\n\n/**\n * Generate command implementation\n */\n\nexport interface GenerateOptions {\n config?: string;\n out?: string;\n apiKey?: string;\n watch?: boolean;\n}\n\n/**\n * Check if a string looks like a deployed contract address (ADDRESS.contract-name)\n */\nfunction isContractAddress(input: string): boolean {\n // Contract addresses are in format: SP/ST/SM/SN...ADDRESS.contract-name\n // SP = mainnet standard, ST = testnet standard\n // SM = mainnet multisig, SN = testnet multisig\n const contractIdPattern = /^(SP|ST|SM|SN)[A-Z0-9]{38,}\\.[a-zA-Z][a-zA-Z0-9-]*$/;\n return contractIdPattern.test(input);\n}\n\n/**\n * Infer network from contract address prefix\n */\nfunction inferNetwork(address: string): NetworkName {\n // SP = mainnet standard, SM = mainnet multisig\n if (address.startsWith(\"SP\") || address.startsWith(\"SM\")) {\n return \"mainnet\";\n }\n // ST = testnet standard, SN = testnet multisig\n return \"testnet\";\n}\n\n/**\n * Parse inputs and separate into local files and deployed contract addresses\n */\ninterface ParsedInputs {\n files: string[];\n contractIds: string[];\n}\n\nasync function parseInputs(inputs: string[]): Promise<ParsedInputs> {\n const files: string[] = [];\n const contractIds: string[] = [];\n\n for (const input of inputs) {\n // Check if it's a deployed contract address\n if (isContractAddress(input)) {\n contractIds.push(input);\n continue;\n }\n\n // Check if it's a glob pattern\n if (input.includes(\"*\") || input.includes(\"?\")) {\n const matches = await fg(input, { cwd: process.cwd(), absolute: true });\n for (const file of matches) {\n if (file.endsWith(\".clar\")) {\n files.push(file);\n }\n }\n continue;\n }\n\n // Direct file path\n if (input.endsWith(\".clar\")) {\n const absolutePath = path.resolve(process.cwd(), input);\n files.push(absolutePath);\n }\n }\n\n return {\n files: [...new Set(files)],\n contractIds: [...new Set(contractIds)],\n };\n}\n\n/**\n * Convert filename to camelCase contract name\n */\nfunction deriveContractName(filePath: string): string {\n const basename = path.basename(filePath, \".clar\");\n // Convert kebab-case or snake_case to camelCase\n return basename\n .replace(/[-_](.)/g, (_, char) => char.toUpperCase())\n .replace(/^(.)/, (_, char) => char.toLowerCase())\n .replace(/^\\d/, \"_$&\"); // Prefix with underscore if starts with digit\n}\n\n/**\n * Convert contract name from kebab-case to camelCase\n */\nfunction toCamelCase(str: string): string {\n return str\n .replace(/[-_](.)/g, (_, char) => char.toUpperCase())\n .replace(/^(.)/, (_, char) => char.toLowerCase())\n .replace(/^\\d/, \"_$&\");\n}\n\n/**\n * Build config from direct inputs (local files and/or deployed contract addresses)\n */\nasync function buildConfigFromInputs(\n parsedInputs: ParsedInputs,\n outPath: string,\n apiKey: string | undefined,\n log: (msg: string) => void\n): Promise<StacksConfig> {\n const contracts = [];\n\n // Process local .clar files\n for (const file of parsedInputs.files) {\n const abi = await parseClarityFile(file);\n const name = deriveContractName(file);\n\n contracts.push({\n name,\n address: `ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.${name}`,\n abi,\n _directFile: true,\n });\n }\n\n // Process deployed contract addresses (fetch from API)\n for (const contractId of parsedInputs.contractIds) {\n const [address, contractName] = contractId.split(\".\");\n const network = inferNetwork(address);\n\n log(`Fetching ${contractName} from ${network}...`);\n\n try {\n const apiClient = new StacksApiClient(network, apiKey);\n const contractInfo = await apiClient.getContractInfo(contractId);\n const abi = parseApiResponse(contractInfo);\n const name = toCamelCase(contractName);\n\n contracts.push({\n name,\n address: contractId,\n abi,\n _directFile: true,\n });\n } catch (error: any) {\n throw new Error(`Failed to fetch contract ${contractId}: ${error.message}`);\n }\n }\n\n return {\n out: outPath,\n contracts,\n plugins: [],\n };\n}\n\nexport async function generate(files: string[], options: GenerateOptions) {\n const log = (msg: string) => console.log(chalk.gray(` ${msg}`));\n\n try {\n let config: StacksConfig;\n\n // Check if direct inputs were provided (files or contract addresses)\n if (files && files.length > 0) {\n // Require -o/--out when using direct inputs\n if (!options.out) {\n console.error(chalk.red(\"✗ Output path required\"));\n console.error(\n chalk.red(\"\\nWhen using direct inputs, you must specify an output path with -o/--out\")\n );\n console.log(chalk.gray(\"\\nExamples:\"));\n console.log(chalk.gray(\" secondlayer generate ./contracts/*.clar -o ./src/generated.ts\"));\n console.log(chalk.gray(\" secondlayer generate SP2C2YFP12AJZB1M6DY7SF9A3PRHWKGYGVWQKW3.my-token -o ./src/generated.ts\"));\n process.exit(1);\n }\n\n // Parse inputs to separate files from contract addresses\n const parsedInputs = await parseInputs(files);\n const totalInputs = parsedInputs.files.length + parsedInputs.contractIds.length;\n\n if (totalInputs === 0) {\n console.error(chalk.red(\"✗ No valid inputs found\"));\n console.error(chalk.red(\"\\nNo .clar files or contract addresses matched the provided inputs\"));\n process.exit(1);\n }\n\n log(`Processing ${totalInputs} contract(s)...`);\n\n // Get API key from option or environment variable\n const apiKey = options.apiKey || process.env.HIRO_API_KEY;\n\n config = await buildConfigFromInputs(parsedInputs, options.out, apiKey, log);\n } else {\n // Use config file (existing behavior)\n config = await loadConfig(options.config);\n }\n\n // Get plugin manager from config loading\n const pluginManager = new PluginManager();\n\n // Register plugins from config\n if (config.plugins) {\n for (const plugin of config.plugins) {\n pluginManager.register(plugin);\n }\n }\n\n // Create resolved config with typed plugins\n const resolvedConfig: ResolvedConfig = {\n ...config,\n plugins: pluginManager.getPlugins(),\n };\n\n // Execute configResolved hooks\n await pluginManager.executeHook(\"configResolved\", resolvedConfig);\n\n // Convert existing contracts to ContractConfig format (if any)\n // Use the resolved config which includes contracts added by plugins\n const contractConfigs: ContractConfig[] = (config.contracts || []).map(\n (contract) => ({\n name: contract.name,\n address: contract.address,\n source: contract.source,\n abi: (contract as any).abi, // Include ABI if it exists (from plugins)\n _clarinetSource: (contract as any)._clarinetSource, // Include plugin flags\n })\n );\n\n // Transform contracts through plugins (plugins can add more contracts)\n const processedContracts = await pluginManager.transformContracts(\n contractConfigs,\n resolvedConfig\n );\n\n if (processedContracts.length === 0) {\n console.log(chalk.yellow(\"⚠ No contracts found to generate\"));\n console.log(\"\\nTo get started:\");\n console.log(\" • Add contracts to your config file, or\");\n console.log(\" • Use plugins like clarinet() for local contracts\");\n return;\n }\n\n // Execute generation through plugin system\n const outputs = await pluginManager.executeGeneration(\n processedContracts,\n resolvedConfig\n );\n\n // If no plugins generated the main contracts output, generate it using the existing generator\n if (!outputs.has(\"contracts\") && processedContracts.length > 0) {\n const contractsCode = await generateContractInterface(processedContracts);\n outputs.set(\"contracts\", {\n path: config.out,\n content: contractsCode,\n type: \"contracts\",\n });\n }\n\n // Transform outputs through plugins\n const transformedOutputs = await pluginManager.transformOutputs(outputs);\n\n // Write all outputs to disk\n await pluginManager.writeOutputs(transformedOutputs);\n\n const contractCount = processedContracts.length;\n const contractWord = contractCount === 1 ? \"contract\" : \"contracts\";\n console.log(chalk.green(`✓ Generation complete for ${contractCount} ${contractWord}`));\n\n console.log(`\\n📄 ${config.out}`);\n console.log(`\\n💡 Import your contracts:`);\n\n // Show import examples based on actual contract names\n if (processedContracts.length > 0) {\n const exampleContract = processedContracts[0];\n console.log(\n chalk.gray(\n ` import { ${exampleContract.name} } from '${config.out.replace(/\\.ts$/, \"\")}'`\n )\n );\n\n if (processedContracts.length > 1) {\n console.log(\n chalk.gray(\n ` // Also available: ${processedContracts\n .slice(1)\n .map((c) => c.name)\n .join(\", \")}`\n )\n );\n }\n }\n } catch (error: any) {\n console.error(chalk.red(\"✗ Generation failed\"));\n console.error(chalk.red(`\\n${error.message}`));\n if (process.env.DEBUG) {\n console.error(error.stack);\n }\n process.exit(1);\n }\n}\n\n// Keep existing contract resolution functions for backward compatibility and plugin use\nexport async function resolveContract(\n source: ContractSource,\n network: NetworkName,\n apiKey?: string,\n apiUrl?: string\n): Promise<ResolvedContract> {\n // Handle local source files\n if (source.source) {\n const filePath = path.resolve(process.cwd(), source.source);\n const abi = await parseClarityFile(filePath);\n\n const name =\n source.name ||\n path\n .basename(source.source, \".clar\")\n .replace(/-/g, \"_\")\n .replace(/^\\d/, \"_$&\");\n\n // For local files, we need to construct the address\n const address =\n typeof source.address === \"string\"\n ? source.address\n : source.address?.[network] ||\n \"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM\";\n\n const [contractAddress, contractName] = address.includes(\".\")\n ? address.split(\".\")\n : [address, name];\n\n return {\n name,\n address: contractAddress,\n contractName: contractName || name,\n abi,\n source: \"local\",\n };\n }\n\n // Handle deployed contracts\n if (source.address) {\n const contractId =\n typeof source.address === \"string\"\n ? source.address\n : source.address[network];\n\n if (!contractId) {\n throw new Error(`No contract address for network ${network}`);\n }\n\n const contractInfo = await new StacksApiClient(\n network,\n apiKey,\n apiUrl\n ).getContractInfo(contractId);\n const abi = parseApiResponse(contractInfo);\n\n const [contractAddress, contractName] = contractId.split(\".\");\n const name =\n source.name || contractName.replace(/-/g, \"_\").replace(/^\\d/, \"_$&\");\n\n return {\n name,\n address: contractAddress,\n contractName,\n abi,\n source: \"api\",\n };\n }\n\n throw new Error(\"Contract must have either address or source\");\n}\n\nexport async function resolveContracts(\n source: ContractSource,\n defaultNetwork: NetworkName | undefined,\n apiKey?: string,\n apiUrl?: string\n): Promise<ResolvedContract[]> {\n // Handle single network contracts (existing behavior)\n if (typeof source.address === \"string\" || source.source) {\n const resolved = await resolveContract(\n source,\n defaultNetwork || \"testnet\", // Use testnet as fallback for single contracts\n apiKey,\n apiUrl\n );\n return [resolved];\n }\n\n // Handle multi-network contracts\n if (source.address && typeof source.address === \"object\") {\n const resolvedContracts: ResolvedContract[] = [];\n\n // If defaultNetwork is specified, only generate that network\n // If no network specified, generate all networks defined in the address object\n const networksToGenerate = defaultNetwork\n ? [defaultNetwork].filter(\n (net) => (source.address as Partial<Record<NetworkName, string>>)[net]\n ) // Only if address exists for that network\n : (Object.keys(source.address) as NetworkName[]);\n\n for (const network of networksToGenerate) {\n const contractId = source.address[network];\n if (!contractId) continue;\n\n try {\n const networkApiClient = new StacksApiClient(network, apiKey, apiUrl);\n\n const contractInfo = await networkApiClient.getContractInfo(contractId);\n const abi = parseApiResponse(contractInfo);\n\n const [contractAddress, contractName] = contractId.split(\".\");\n const baseName =\n source.name || contractName.replace(/-/g, \"_\").replace(/^\\d/, \"_$&\");\n\n // Generate network-specific names\n const name =\n network === \"mainnet\"\n ? baseName\n : `${network}${baseName.charAt(0).toUpperCase() + baseName.slice(1)}`;\n\n resolvedContracts.push({\n name,\n address: contractAddress,\n contractName,\n abi,\n source: \"api\",\n });\n } catch (error: any) {\n console.warn(\n `Warning: Failed to resolve contract for ${network}: ${error.message}`\n );\n }\n }\n\n return resolvedContracts;\n }\n\n throw new Error(\"Contract must have either address or source\");\n}\n",
|
|
168
|
+
"import { promises as fs } from \"fs\";\nimport path from \"path\";\nimport chalk from \"chalk\";\n\n/**\n * Init command - creates a default config file\n */\n\nexport async function init() {\n const configPath = path.join(process.cwd(), \"stacks.config.ts\");\n\n // Check if config already exists\n try {\n await fs.access(configPath);\n console.log(chalk.yellow(\"⚠ stacks.config.ts already exists\"));\n return;\n } catch {\n // File doesn't exist, continue\n }\n\n // Check for Clarinet project\n const hasClarinetProject = await fileExists(\"./Clarinet.toml\");\n\n let config: string;\n\n if (hasClarinetProject) {\n // Generate plugin-based config for Clarinet projects\n config = `import { defineConfig } from '@secondlayer/cli';\nimport { clarinet } from '@secondlayer/cli/plugins';\n\nexport default defineConfig({\n out: './src/generated/contracts.ts',\n plugins: [\n clarinet() // Found Clarinet.toml in current directory\n ]\n});`;\n } else {\n // Generate basic config for non-Clarinet projects\n config = `import { defineConfig } from '@secondlayer/cli';\n\nexport default defineConfig({\n out: './src/generated/contracts.ts',\n plugins: [],\n});`;\n }\n\n // Write config file\n await fs.writeFile(configPath, config);\n\n console.log(chalk.green(\"✓ Created `stacks.config.ts`\"));\n\n console.log(\n \"\\nRun `secondlayer generate` to generate type-safe interfaces, functions, and hooks!\"\n );\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n",
|
|
169
|
+
"import commander from './index.js';\n\n// wrapper to provide named exports for ESM.\nexport const {\n program,\n createCommand,\n createArgument,\n createOption,\n CommanderError,\n InvalidArgumentError,\n InvalidOptionArgumentError, // deprecated old name\n Command,\n Argument,\n Option,\n Help\n} = commander;\n",
|
|
170
|
+
"#!/usr/bin/env node\nimport { program } from \"commander\";\nimport pkg from \"../package.json\" with { type: \"json\" };\n\nconst { version } = pkg;\n\n/**\n * CLI entry point\n */\n\nprogram\n .name(\"secondlayer\")\n .description(\"CLI tool for generating type-safe Stacks contract interfaces\")\n .version(version);\n\nprogram\n .command(\"generate [files...]\")\n .alias(\"gen\")\n .description(\"Generate TypeScript interfaces from Clarity contracts\")\n .option(\"-c, --config <path>\", \"Path to config file\")\n .option(\"-o, --out <path>\", \"Output file path (required when using direct files)\")\n .option(\"-k, --api-key <key>\", \"Hiro API key (or set HIRO_API_KEY env var)\")\n .option(\"-w, --watch\", \"Watch for changes\")\n .action(async (files, options) => {\n const { generate } = await import(\"./commands/generate\");\n await generate(files, options);\n });\n\nprogram\n .command(\"init\")\n .description(\"Initialize a new stacks.config.ts file\")\n .action(async () => {\n const { init } = await import(\"./commands/init\");\n await init();\n });\n\nprogram.parse();\n"
|
|
13
171
|
],
|
|
14
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA,qBAAS;AACT;AACA;AAMA,eAAsB,IAAI,GAAG;AAAA,EAC3B,MAAM,UAAU,KAAI,cAAc,EAAE,MAAM;AAAA,EAC1C,MAAM,aAAa,MAAK,KAAK,QAAQ,IAAI,GAAG,kBAAkB;AAAA,EAG9D,IAAI;AAAA,IACF,MAAM,IAAG,OAAO,UAAU;AAAA,IAC1B,QAAQ,KAAK,iCAAiC;AAAA,IAC9C;AAAA,IACA,MAAM;AAAA,EAKR,MAAM,qBAAqB,MAAM,WAAW,iBAAiB;AAAA,EAE7D,IAAI;AAAA,EAEJ,IAAI,oBAAoB;AAAA,IAEtB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASX,EAAO;AAAA,IAEL,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASX,MAAM,IAAG,UAAU,YAAY,MAAM;AAAA,EAErC,QAAQ,QAAQ,4BAA4B;AAAA,EAE5C,QAAQ,IACN,sFACF;AAAA;AAGF,eAAe,UAAU,CAAC,UAAoC;AAAA,EAC5D,IAAI;AAAA,IACF,MAAM,IAAG,OAAO,QAAQ;AAAA,IACxB,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAAA;;;AC7DX;;;ACDA;AACA;AACA;AACA;;;ACHA,qBAAS;AACT;AACA;AACA;AACA;;;ACCA;AACA,qBAAS;AACT;AACA;AAAA;AAkBO,MAAM,cAAc;AAAA,EACjB,UAAiC,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EAER,WAAW,GAAG;AAAA,IACZ,KAAK,SAAS,KAAK,aAAa;AAAA,IAChC,KAAK,QAAQ,KAAK,YAAY;AAAA,IAC9B,KAAK,mBAAmB;AAAA,MACtB,OAAO;AAAA,MACP,WAAW,KAAK,IAAI;AAAA,MACpB,SAAS,IAAI;AAAA,IACf;AAAA;AAAA,EAMF,QAAQ,CAAC,QAAmC;AAAA,IAE1C,IAAI,CAAC,OAAO,QAAQ,CAAC,OAAO,SAAS;AAAA,MACnC,MAAM,IAAI,MAAM,qCAAqC;AAAA,IACvD;AAAA,IAGA,MAAM,WAAW,KAAK,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO,IAAI;AAAA,IAChE,IAAI,UAAU;AAAA,MACZ,MAAM,IAAI,MACR,WAAW,OAAO,wCAAwC,SAAS,UACrE;AAAA,IACF;AAAA,IAEA,KAAK,QAAQ,KAAK,MAAM;AAAA,IACxB,KAAK,OAAO,MAAM,sBAAsB,OAAO,QAAQ,OAAO,SAAS;AAAA;AAAA,EAMzE,UAAU,GAA0B;AAAA,IAClC,OAAO,CAAC,GAAG,KAAK,OAAO;AAAA;AAAA,OAMnB,gBAAe,CAAC,QAA6C;AAAA,IACjE,KAAK,iBAAiB,QAAQ;AAAA,IAC9B,IAAI,oBAAoB,KAAK,OAAO;AAAA,IAEpC,WAAW,UAAU,KAAK,SAAS;AAAA,MACjC,IAAI,OAAO,iBAAiB;AAAA,QAC1B,KAAK,iBAAiB,gBAAgB;AAAA,QACtC,IAAI;AAAA,UACF,MAAM,SAAS,MAAM,OAAO,gBAAgB,iBAAiB;AAAA,UAC7D,oBAAoB;AAAA,UACpB,KAAK,iBAAiB,OAAO,MAAM,mBAAmB;AAAA,YACpD,SAAS;AAAA,UACX,CAAC;AAAA,UACD,OAAO,OAAO;AAAA,UACd,MAAM,MAAM;AAAA,UACZ,KAAK,iBAAiB,OAAO,MAAM,mBAAmB;AAAA,YACpD,SAAS;AAAA,YACT,OAAO;AAAA,UACT,CAAC;AAAA,UACD,MAAM,IAAI,MACR,WAAW,OAAO,8CAA8C,IAAI,SACtE;AAAA;AAAA,MAEJ;AAAA,IACF;AAAA,IAGA,MAAM,iBAAiC;AAAA,SAClC;AAAA,MACH,SAAS,KAAK;AAAA,IAChB;AAAA,IAEA,OAAO;AAAA;AAAA,OAMH,mBAAkB,CACtB,WACA,SAC8B;AAAA,IAC9B,MAAM,qBAA0C,CAAC;AAAA,IAEjD,SAAS,YAAY,WAAW;AAAA,MAE9B,IAAK,SAAiB,mBAAmB,SAAS,KAAK;AAAA,QAErD,MAAM,UACJ,OAAO,SAAS,YAAY,WAAW,SAAS,UAAU;AAAA,QAC5D,OAAO,iBAAiB,gBAAgB,QAAQ,MAAM,GAAG;AAAA,QACzD,MAAM,YAA+B;AAAA,UACnC,MAAM,SAAS,QAAQ;AAAA,UACvB,SAAS;AAAA,UACT;AAAA,UACA,KAAK,SAAS;AAAA,UACd,QAAQ;AAAA,UACR,UAAU,EAAE,QAAQ,WAAW;AAAA,QACjC;AAAA,QACA,mBAAmB,KAAK,SAAS;AAAA,QACjC;AAAA,MACF;AAAA,MAGA,IAAK,SAAiB,eAAe,SAAS,KAAK;AAAA,QACjD,MAAM,UACJ,OAAO,SAAS,YAAY,WAAW,SAAS,UAAU;AAAA,QAC5D,OAAO,iBAAiB,gBAAgB,QAAQ,MAAM,GAAG;AAAA,QACzD,MAAM,YAA+B;AAAA,UACnC,MAAM,SAAS,QAAQ;AAAA,UACvB,SAAS;AAAA,UACT;AAAA,UACA,KAAK,SAAS;AAAA,UACd,QAAQ;AAAA,UACR,UAAU,EAAE,QAAQ,SAAS;AAAA,QAC/B;AAAA,QACA,mBAAmB,KAAK,SAAS;AAAA,QACjC;AAAA,MACF;AAAA,MAGA,WAAW,UAAU,KAAK,SAAS;AAAA,QACjC,IAAI,OAAO,mBAAmB;AAAA,UAC5B,KAAK,iBAAiB,gBAAgB;AAAA,UACtC,IAAI;AAAA,YACF,WAAW,MAAM,OAAO,kBAAkB,QAAQ;AAAA,YAClD,KAAK,iBAAiB,OAAO,MAAM,qBAAqB;AAAA,cACtD,SAAS;AAAA,YACX,CAAC;AAAA,YACD,OAAO,OAAO;AAAA,YACd,MAAM,MAAM;AAAA,YACZ,KAAK,iBAAiB,OAAO,MAAM,qBAAqB;AAAA,cACtD,SAAS;AAAA,cACT,OAAO;AAAA,YACT,CAAC;AAAA,YACD,KAAK,OAAO,KACV,WAAW,OAAO,uCAAuC,IAAI,SAC/D;AAAA;AAAA,QAEJ;AAAA,MACF;AAAA,MAGA,IAAI,SAAS,KAAK;AAAA,QAChB,MAAM,YAA+B;AAAA,UACnC,MAAM,SAAS,QAAQ;AAAA,UACvB,SACE,OAAO,SAAS,YAAY,WACxB,SAAS,QAAQ,MAAM,GAAG,EAAE,KAC5B;AAAA,UACN,cAAc,SAAS,QAAQ;AAAA,UAC/B,KAAK,SAAS;AAAA,UACd,QAAQ;AAAA,UACR,UAAU,SAAS;AAAA,QACrB;AAAA,QACA,mBAAmB,KAAK,SAAS;AAAA,MACnC;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAMH,YAAW,CACf,UACA,SACe;AAAA,IACf,WAAW,UAAU,KAAK,SAAS;AAAA,MACjC,MAAM,OAAO,OAAO;AAAA,MACpB,IAAI,OAAO,SAAS,YAAY;AAAA,QAC9B,KAAK,iBAAiB,gBAAgB;AAAA,QACtC,IAAI;AAAA,UACF,MAAO,KAAa,KAAK,QAAQ,OAAO;AAAA,UACxC,KAAK,iBAAiB,OAAO,MAAM,UAAoB;AAAA,YACrD,SAAS;AAAA,UACX,CAAC;AAAA,UACD,OAAO,OAAO;AAAA,UACd,MAAM,MAAM;AAAA,UACZ,KAAK,iBAAiB,OAAO,MAAM,UAAoB;AAAA,YACrD,SAAS;AAAA,YACT,OAAO;AAAA,UACT,CAAC;AAAA,UACD,KAAK,OAAO,MACV,WAAW,OAAO,uBAAuB,aAAuB,IAAI,SACtE;AAAA;AAAA,MAGJ;AAAA,IACF;AAAA;AAAA,OAMI,kBAAiB,CACrB,WACA,QACuC;AAAA,IACvC,KAAK,iBAAiB,QAAQ;AAAA,IAC9B,MAAM,UAAU,IAAI;AAAA,IAGpB,MAAM,UAA2B;AAAA,MAC/B;AAAA,MACA,QAAQ,KAAK;AAAA,MACb,OAAO,KAAK;AAAA,MACZ;AAAA,MACA;AAAA,MACA,SAAS,CAAC,WAAmB,cAAsB,YAAiB;AAAA,QAClE,KAAK,cAAc,SAAS,WAAW,cAAc,OAAO;AAAA;AAAA,MAE9D,WAAW,CAAC,KAAa,WAA4B;AAAA,QACnD,QAAQ,IAAI,KAAK,MAAM;AAAA;AAAA,IAE3B;AAAA,IAGA,MAAM,KAAK,YAAY,kBAAkB,OAAO;AAAA,IAGhD,MAAM,KAAK,YAAY,YAAY,OAAO;AAAA,IAG1C,MAAM,KAAK,YAAY,iBAAiB,OAAO;AAAA,IAE/C,OAAO;AAAA;AAAA,OAMH,iBAAgB,CACpB,SACuC;AAAA,IACvC,KAAK,iBAAiB,QAAQ;AAAA,IAC9B,MAAM,qBAAqB,IAAI;AAAA,IAE/B,YAAY,KAAK,WAAW,SAAS;AAAA,MACnC,IAAI,qBAAqB,OAAO;AAAA,MAEhC,WAAW,UAAU,KAAK,SAAS;AAAA,QACjC,IAAI,OAAO,iBAAiB;AAAA,UAC1B,KAAK,iBAAiB,gBAAgB;AAAA,UACtC,IAAI;AAAA,YACF,qBAAqB,MAAM,OAAO,gBAChC,oBACA,OAAO,QAAQ,OACjB;AAAA,YACA,KAAK,iBAAiB,OAAO,MAAM,mBAAmB;AAAA,cACpD,SAAS;AAAA,YACX,CAAC;AAAA,YACD,OAAO,OAAO;AAAA,YACd,MAAM,MAAM;AAAA,YACZ,KAAK,iBAAiB,OAAO,MAAM,mBAAmB;AAAA,cACpD,SAAS;AAAA,cACT,OAAO;AAAA,YACT,CAAC;AAAA,YACD,KAAK,OAAO,KACV,WAAW,OAAO,qCAAqC,IAAI,SAC7D;AAAA;AAAA,QAEJ;AAAA,MACF;AAAA,MAEA,mBAAmB,IAAI,KAAK;AAAA,WACvB;AAAA,QACH,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,IAEA,OAAO;AAAA;AAAA,OAMH,aAAY,CAAC,SAAsD;AAAA,IACvE,cAAc,WAAW,SAAS;AAAA,MAChC,IAAI;AAAA,QACF,MAAM,eAAe,KAAK,QAAQ,QAAQ,IAAI,GAAG,OAAO,IAAI;AAAA,QAC5D,MAAM,KAAK,MAAM,UAAU,KAAK,QAAQ,YAAY,CAAC;AAAA,QACrD,MAAM,KAAK,MAAM,UAAU,cAAc,OAAO,OAAO;AAAA,QAEvD,OAAO,OAAO;AAAA,QACd,MAAM,MAAM;AAAA,QACZ,KAAK,OAAO,MAAM,mBAAmB,OAAO,SAAS,IAAI,SAAS;AAAA,QAClE,MAAM;AAAA;AAAA,IAEV;AAAA;AAAA,EAMF,mBAAmB,GAA8B;AAAA,IAC/C,OAAO,IAAI,IAAI,KAAK,iBAAiB,OAAO;AAAA;AAAA,EAMtC,aAAa,CACnB,SACA,WACA,cACA,SACM;AAAA,IACN,MAAM,WAAW,QAAQ,IAAI,SAAS;AAAA,IACtC,IAAI,CAAC,UAAU;AAAA,MACb,KAAK,OAAO,KAAK,uCAAuC,WAAW;AAAA,MACnE;AAAA,IACF;AAAA,IAIA,MAAM,mBAAmB,GAAG,SAAS;AAAA;AAAA,6BAAyC;AAAA,EAAiB,KAAK,UAAU,SAAS,MAAM,CAAC;AAAA,IAE9H,QAAQ,IAAI,WAAW;AAAA,SAClB;AAAA,MACH,SAAS;AAAA,IACX,CAAC;AAAA;AAAA,EAMK,gBAAgB,CACtB,YACA,UACA,QACM;AAAA,IACN,MAAM,MAAM,GAAG,cAAc;AAAA,IAC7B,MAAM,WAAW,KAAK,iBAAiB,QAAQ,IAAI,GAAG,KAAK,CAAC;AAAA,IAC5D,SAAS,KAAK,KAAK,QAAQ,QAAQ,WAAW,CAAC;AAAA,IAC/C,KAAK,iBAAiB,QAAQ,IAAI,KAAK,QAAQ;AAAA;AAAA,EAMzC,YAAY,GAAW;AAAA,IAC7B,OAAO;AAAA,MACL,MAAM,CAAC,YAAoB,QAAQ,IAAI,iBAAM,SAAS;AAAA,MACtD,MAAM,CAAC,YAAoB,QAAQ,KAAK,iBAAM,SAAS;AAAA,MACvD,OAAO,CAAC,YAAoB,QAAQ,MAAM,UAAI,SAAS;AAAA,MACvD,OAAO,CAAC,YAAoB;AAAA,QAC1B,IAAI,QAAQ,IAAI,OAAO;AAAA,UACrB,QAAQ,IAAI,gBAAK,SAAS;AAAA,QAC5B;AAAA;AAAA,MAEF,SAAS,CAAC,YAAoB,QAAQ,IAAI,UAAI,SAAS;AAAA,IACzD;AAAA;AAAA,EAMM,WAAW,GAAgB;AAAA,IACjC,OAAO;AAAA,MACL,aAAa,CAAC,QAAgB;AAAA,QAC5B,OAAO,IAAI,QAAQ,aAAa,CAAC,GAAG,WAAW,OAAO,YAAY,CAAC;AAAA;AAAA,MAGrE,aAAa,CAAC,QAAgB;AAAA,QAC5B,OAAO,IAAI,QAAQ,UAAU,CAAC,WAAW,IAAI,OAAO,YAAY,GAAG;AAAA;AAAA,MAGrE,iBAAiB,CAAC,YAAoB;AAAA,QACpC,OAAO,sBAAsB,QAAQ,MAAM,GAAG,EAAE,EAAE;AAAA;AAAA,MAGpD,iBAAiB,CAAC,eAAuB;AAAA,QACvC,OAAO,SAAS,gBAAgB,WAAW,MAAM,GAAG;AAAA,QACpD,OAAO,EAAE,SAAS,aAAa;AAAA;AAAA,MAGjC,YAAY,OAAO,SAAiB;AAAA,QAClC,OAAO,OAAO,MAAM;AAAA,UAClB,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,eAAe;AAAA,QACjB,CAAC;AAAA;AAAA,MAGH,aAAa,CAAC,iBAAyB;AAAA,QACrC,OAAO,KAAK,QAAQ,QAAQ,IAAI,GAAG,YAAY;AAAA;AAAA,MAGjD,YAAY,OAAO,aAAqB;AAAA,QACtC,IAAI;AAAA,UACF,MAAM,GAAG,OAAO,QAAQ;AAAA,UACxB,OAAO;AAAA,UACP,MAAM;AAAA,UACN,OAAO;AAAA;AAAA;AAAA,MAIX,UAAU,OAAO,aAAqB;AAAA,QACpC,OAAO,GAAG,SAAS,UAAU,OAAO;AAAA;AAAA,MAGtC,WAAW,OAAO,UAAkB,YAAoB;AAAA,QACtD,MAAM,GAAG,UAAU,UAAU,SAAS,OAAO;AAAA;AAAA,MAG/C,WAAW,OAAO,YAAoB;AAAA,QACpC,MAAM,GAAG,MAAM,SAAS,EAAE,WAAW,KAAK,CAAC;AAAA;AAAA,IAE/C;AAAA;AAEJ;;;ADlbA,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF;AAEA,eAAsB,cAAc,CAAC,KAAqC;AAAA,EACxE,WAAW,YAAY,mBAAmB;AAAA,IACxC,MAAM,WAAW,MAAK,KAAK,KAAK,QAAQ;AAAA,IACxC,IAAI;AAAA,MACF,MAAM,IAAG,OAAO,QAAQ;AAAA,MACxB,OAAO;AAAA,MACP,MAAM;AAAA,EAGV;AAAA,EACA,OAAO;AAAA;AAGT,eAAsB,UAAU,CAAC,YAA8C;AAAA,EAC7E,MAAM,MAAM,QAAQ,IAAI;AAAA,EAExB,MAAM,eAAe,aACjB,MAAK,QAAQ,KAAK,UAAU,IAC5B,MAAM,eAAe,GAAG;AAAA,EAE5B,IAAI,CAAC,cAAc;AAAA,IACjB,MAAM,IAAI,MACR,sFACF;AAAA,EACF;AAAA,EAEA,IAAI;AAAA,EAEJ,IAAI,aAAa,SAAS,KAAK,GAAG;AAAA,IAChC,MAAM,OAAO,MAAM,IAAG,SAAS,cAAc,OAAO;AAAA,IAKpD,IAAI;AAAA,IAEJ,IAAI;AAAA,MAEF,MAAM,WAAU,cAAc,YAAY,GAAG;AAAA,MAC7C,MAAM,cAAc,SAAQ,QAAQ,kBAAkB;AAAA,MACtD,kBAAkB,cAAc,WAAW,EAAE;AAAA,MAC7C,MAAM;AAAA,MAEN,MAAM,mBAAmB,MAAK,QAAQ,IAAI,IAAI,YAAY,GAAG,EAAE,QAAQ;AAAA,MACvE,MAAM,YAAY,MAAK,QAAQ,kBAAkB,UAAU;AAAA,MAC3D,kBAAkB,cAAc,SAAS,EAAE;AAAA;AAAA,IAG7C,MAAM,kBAAkB,KAAK,QAC3B,gCACA,SAAS,kBACX;AAAA,IAEA,MAAM,SAAS,cAAc,iBAAiB;AAAA,MAC5C,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV,CAAC;AAAA,IAED,MAAM,WAAW,aAAa,QAAQ,SAAS,MAAM;AAAA,IACrD,MAAM,IAAG,UAAU,UAAU,OAAO,IAAI;AAAA,IAExC,IAAI;AAAA,MACF,MAAM,UAAU,cAAc,QAAQ,EAAE;AAAA,MACxC,MAAM,SAAS,MAAa;AAAA,MAC5B,SAAS,OAAO;AAAA,cAChB;AAAA,MACA,MAAM,IAAG,OAAO,QAAQ,EAAE,MAAM,MAAM,EAAE;AAAA;AAAA,EAE5C,EAAO;AAAA,IACL,MAAM,UAAU,cAAc,YAAY,EAAE;AAAA,IAC5C,MAAM,SAAS,MAAa;AAAA,IAC5B,SAAS,OAAO;AAAA;AAAA,EAGlB,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAAA,EAEA,IAAI,OAAO,WAAW,YAAY;AAAA,IAChC,SAAS,OAAO,CAAC,CAAiB;AAAA,EACpC;AAAA,EAEA,eAAe,MAAM;AAAA,EAGrB,MAAM,gBAAgB,IAAI;AAAA,EAE1B,IAAI,OAAO,WAAW,MAAM,QAAQ,OAAO,OAAO,GAAG;AAAA,IACnD,WAAW,UAAU,OAAO,SAAS;AAAA,MACnC,cAAc,SAAS,MAAM;AAAA,IAC/B;AAAA,EACF;AAAA,EAGA,MAAM,iBAAiB,MAAM,cAAc,gBAAgB,MAAM;AAAA,EAEjE,OAAO;AAAA;AAGF,SAAS,cAAc,CAC5B,QACgC;AAAA,EAChC,IAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AAAA,IACzC,MAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AAAA,EAEA,MAAM,IAAI;AAAA,EAGV,IAAI,EAAE,aAAa,CAAC,MAAM,QAAQ,EAAE,SAAS,GAAG;AAAA,IAC9C,MAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAAA,EAEA,IAAI,CAAC,EAAE,OAAO,OAAO,EAAE,QAAQ,UAAU;AAAA,IACvC,MAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AAAA,EAGA,IAAI,EAAE,WAAW;AAAA,IACf,WAAW,YAAY,EAAE,WAAW;AAAA,MAClC,IAAI,CAAC,SAAS,WAAW,CAAC,SAAS,QAAQ;AAAA,QACzC,MAAM,IAAI,MAAM,qDAAqD;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AAAA,EAGA,IAAI,EAAE,WAAW,CAAC,MAAM,QAAQ,EAAE,OAAO,GAAG;AAAA,IAC1C,MAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AAAA;;;AErJF;AAOA,IAAM,WAAwC;AAAA,EAC5C,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AACV;AAAA;AAYO,MAAM,gBAAgB;AAAA,EACnB;AAAA,EACA;AAAA,EAER,WAAW,CACT,UAAuB,WACvB,QACA,QACA;AAAA,IACA,KAAK,UAAU,UAAU,SAAS;AAAA,IAClC,KAAK,UAAU,SAAS,EAAE,aAAa,OAAO,IAAI,CAAC;AAAA;AAAA,OAG/C,gBAAe,CAAC,YAA2C;AAAA,IAC/D,OAAO,SAAS,gBAAgB,WAAW,MAAM,GAAG;AAAA,IAEpD,IAAI,CAAC,WAAW,CAAC,cAAc;AAAA,MAC7B,MAAM,IAAI,MACR,+BAA+B,oDACjC;AAAA,IACF;AAAA,IAEA,MAAM,MAAM,GAAG,KAAK,kCAAkC,WAAW;AAAA,IAEjE,IAAI;AAAA,MACF,MAAM,WAAW,MAAM,IAAI,KAAK;AAAA,QAC9B,SAAS,KAAK;AAAA,QACd,cAAc;AAAA,MAChB,CAAC;AAAA,MAED,OAAO,SAAS;AAAA,MAChB,OAAO,OAAY;AAAA,MACnB,IAAI,MAAM,UAAU,eAAe,KAAK;AAAA,QACtC,MAAM,IAAI,MAAM,uBAAuB,YAAY;AAAA,MACrD;AAAA,MACA,IAAI,MAAM,UAAU,eAAe,KAAK;AAAA,QACtC,MAAM,IAAI,MACR,yDACF;AAAA,MACF;AAAA,MACA,MAAM,IAAI,MAAM,6BAA6B,MAAM,SAAS;AAAA;AAAA;AAAA,OAI1D,kBAAiB,CAAC,YAAqC;AAAA,IAC3D,OAAO,SAAS,gBAAgB,WAAW,MAAM,GAAG;AAAA,IAEpD,IAAI,CAAC,WAAW,CAAC,cAAc;AAAA,MAC7B,MAAM,IAAI,MACR,+BAA+B,oDACjC;AAAA,IACF;AAAA,IAEA,MAAM,MAAM,GAAG,KAAK,+BAA+B,WAAW;AAAA,IAE9D,IAAI;AAAA,MACF,MAAM,WAAW,MAAM,IAAI,KAAK;AAAA,QAC9B,SAAS,KAAK;AAAA,QACd,cAAc;AAAA,MAChB,CAAC;AAAA,MAED,MAAM,OAAO,SAAS;AAAA,MACtB,OAAO,KAAK;AAAA,MACZ,OAAO,OAAY;AAAA,MACnB,OAAO;AAAA;AAAA;AAGb;;;AC1FA,qBAAS;AAYT,eAAsB,gBAAgB,CACpC,UAC0B;AAAA,EAC1B,MAAM,UAAU,MAAM,IAAG,SAAS,UAAU,OAAO;AAAA,EACnD,OAAO,oBAAoB,OAAO;AAAA;AAG7B,SAAS,mBAAmB,CAAC,SAAkC;AAAA,EACpE,MAAM,YAA+B,CAAC;AAAA,EAEtC,MAAM,gBACJ;AAAA,EAEF,IAAI;AAAA,EACJ,QAAQ,QAAQ,cAAc,KAAK,OAAO,OAAO,MAAM;AAAA,IACrD,SAAS,QAAQ,WAAW,QAAQ;AAAA,IACpC,MAAM,OAAO,uBAAuB,WAAW,QAAe,IAAI;AAAA,IAClE,IAAI,MAAM;AAAA,MACR,UAAU,KAAK,IAAI;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,OAAO,EAAE,UAAU;AAAA;AAGrB,SAAS,sBAAsB,CAC7B,WACA,QACA,MACwB;AAAA,EAExB,MAAM,QAAQ,UAAU,KAAK,EAAE,MAAM,KAAK;AAAA,EAC1C,MAAM,OAAO,MAAM;AAAA,EAEnB,MAAM,OAAmD,CAAC;AAAA,EAG1D,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,IACxC,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI;AAAA,MAC5B,MAAM,UAAU,MAAM,GAAG,QAAQ,SAAS,EAAE;AAAA,MAC5C,MAAM,UAAU,UAAU,MAAM,IAAI,EAAE;AAAA,MACtC,IAAI,SAAS;AAAA,QACX,KAAK,KAAK,EAAE,MAAM,SAAS,MAAM,QAAQ,CAAC;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAAA,EAGA,MAAM,UAAU,gBAAgB,IAAI;AAAA,EAEpC,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAGF,SAAS,SAAS,CAAC,SAAqC;AAAA,EACtD,UAAU,QAAQ,QAAQ,SAAS,EAAE,EAAE,KAAK;AAAA,EAG5C,QAAQ;AAAA,SACD;AAAA,SACA;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,SACA;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA;AAAA,MAGP,IAAI,QAAQ,WAAW,cAAc,GAAG;AAAA,QACtC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,IAAI,EAAE;AAAA,MAC3C;AAAA,MACA,IAAI,QAAQ,WAAW,aAAa,GAAG;AAAA,QACrC,OAAO,EAAE,eAAe,EAAE,QAAQ,IAAI,EAAE;AAAA,MAC1C;AAAA,MACA,IAAI,QAAQ,WAAW,MAAM,GAAG;AAAA,QAC9B,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAG,EAAE;AAAA,MAChC;AAAA,MAEA,OAAO;AAAA;AAAA;AAIb,SAAS,eAAe,CAAC,MAA2B;AAAA,EAElD,IAAI,KAAK,SAAS,KAAK,GAAG;AAAA,IACxB,IAAI,KAAK,SAAS,MAAM,GAAG;AAAA,MACzB,OAAO;AAAA,QACL,UAAU;AAAA,UACR,IAAI;AAAA,UACJ,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,OAAO,GAAG;AAAA,IACnD,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;AAMF,SAAS,gBAAgB,CAAC,aAAmC;AAAA,EAClE,IAAI;AAAA,IACF,MAAM,YAA+B,CAAC;AAAA,IAEtC,IAAI,YAAY,WAAW;AAAA,MACzB,WAAW,QAAQ,YAAY,WAAW;AAAA,QACxC,MAAM,SAAS,KAAK,WAAW,cAAc,cAAc,KAAK;AAAA,QAEhE,UAAU,KAAK;AAAA,UACb,MAAM,KAAK;AAAA,UACX;AAAA,UACA,MAAM,KAAK,KAAK,IAAI,CAAC,SAAc;AAAA,YACjC,MAAM,IAAI;AAAA,YACV,MAAM,eAAe,IAAI,IAAI;AAAA,UAC/B,EAAE;AAAA,UACF,SAAS,eAAe,KAAK,QAAQ,IAAI;AAAA,QAC3C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,OAAO,EAAE,UAAU;AAAA,IACnB,OAAO,OAAO;AAAA,IACd,MAAM,IAAI,MAAM,iCAAiC,OAAO;AAAA;AAAA;AAI5D,SAAS,cAAc,CAAC,SAA2B;AAAA,EACjD,IAAI,OAAO,YAAY,UAAU;AAAA,IAC/B,IAAI,YAAY,mBAAmB;AAAA,MACjC,OAAO;AAAA,IACT;AAAA,IACA,OAAO,UAAU,OAAO,KAAK;AAAA,EAC/B;AAAA,EAGA,IAAI,QAAQ,UAAU;AAAA,IACpB,OAAO;AAAA,MACL,UAAU;AAAA,QACR,IAAI,eAAe,QAAQ,SAAS,EAAE;AAAA,QACtC,OAAO,eAAe,QAAQ,SAAS,KAAK;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,UAAU;AAAA,IACpB,OAAO;AAAA,MACL,UAAU,eAAe,QAAQ,QAAQ;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,MAAM;AAAA,IAChB,OAAO;AAAA,MACL,MAAM;AAAA,QACJ,MAAM,eAAe,QAAQ,KAAK,IAAI;AAAA,QACtC,QAAQ,QAAQ,KAAK,UAAU;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,OAAO;AAAA,IACjB,OAAO;AAAA,MACL,OAAO,QAAQ,MAAM,IAAI,CAAC,WAAgB;AAAA,QACxC,MAAM,MAAM;AAAA,QACZ,MAAM,eAAe,MAAM,IAAI;AAAA,MACjC,EAAE;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,QAAQ;AAAA,IAClB,OAAO;AAAA,MACL,MAAM;AAAA,QACJ,QAAQ,QAAQ,OAAO,UAAU;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,iBAAiB;AAAA,IAC3B,OAAO;AAAA,MACL,gBAAgB;AAAA,QACd,QAAQ,QAAQ,gBAAgB,UAAU;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,gBAAgB;AAAA,IAC1B,OAAO;AAAA,MACL,eAAe;AAAA,QACb,QAAQ,QAAQ,eAAe,UAAU;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAAA,EAGA,IAAI,YAAY,QAAQ;AAAA,IACtB,OAAO;AAAA,EACT;AAAA,EAGA,OAAO;AAAA;;;AChOT,mBAAS;AAQT,eAAsB,yBAAyB,CAC7C,WACiB;AAAA,EACjB,MAAM,UAAU;AAAA,EAEhB,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA,EAKf,MAAM,gBAAgB,UACnB,IAAI,CAAC,aAAa,iBAAiB,QAAQ,CAAC,EAC5C,KAAK;AAAA;AAAA,CAAM;AAAA,EAEd,MAAM,OAAO,GAAG;AAAA;AAAA,EAAc;AAAA;AAAA,EAAa;AAAA,EAE3C,MAAM,YAAY,MAAM,QAAO,MAAM;AAAA,IACnC,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,EACjB,CAAC;AAAA,EAED,OAAO;AAAA;AAGT,SAAS,gBAAgB,CAAC,UAAoC;AAAA,EAC5D,QAAQ,MAAM,SAAS,cAAc,QAAQ;AAAA,EAE7C,MAAM,UAAU,oBAAoB,MAAM,GAAG;AAAA,EAE7C,MAAM,UAAU,IAAI,UACjB,OAAO,CAAC,SAA0B,KAAK,WAAW,SAAS,EAC3D,IAAI,CAAC,SAA0B,eAAe,MAAM,SAAS,YAAY,CAAC,EAC1E,KAAK;AAAA;AAAA,GAAS;AAAA,EAEjB,MAAM,eAAe,gBAAgB;AAAA,cACzB;AAAA,sBACQ;AAAA,mBACH;AAAA;AAAA,IAEf;AAAA;AAAA,EAGF,OAAO,GAAG;AAAA;AAAA,EAAc;AAAA;AAG1B,SAAS,mBAAmB,CAAC,MAAc,KAAkB;AAAA,EAC3D,MAAM,UAAU,KAAK,UAAU,KAAK,MAAM,CAAC,EACxC,QAAQ,kCAAkC,KAAK,EAC/C,QAAQ,MAAM,GAAG;AAAA,EAEpB,OAAO,gBAAgB,aAAa;AAAA;AAGtC,SAAS,cAAc,CACrB,MACA,SACA,cACQ;AAAA,EACR,MAAM,aAAa,YAAY,KAAK,IAAI;AAAA,EAExC,IAAI,KAAK,KAAK,WAAW,GAAG;AAAA,IAC1B,OAAO,GAAG;AAAA;AAAA,0BAEY;AAAA,uBACH;AAAA,uBACA,KAAK;AAAA;AAAA;AAAA;AAAA,EAI1B;AAAA,EAEA,IAAI,KAAK,KAAK,WAAW,GAAG;AAAA,IAC1B,MAAM,kBAAkB,KAAK,KAAK,GAAG;AAAA,IACrC,MAAM,UAAU,YAAY,eAAe;AAAA,IAC3C,MAAM,UAAU,cAAc,KAAK,KAAK,EAAE;AAAA,IAC1C,MAAM,oBAAoB,0BAA0B,SAAS,KAAK,KAAK,EAAE;AAAA,IAEzE,OAAO,GAAG,0BAA0B,YAAY,iBAAiB;AAAA,YACzD,sFAAsF;AAAA,kBAChF;AAAA,qBACG;AAAA;AAAA;AAAA,0BAGK;AAAA,uBACH;AAAA,uBACA,KAAK;AAAA,uBACL;AAAA;AAAA;AAAA,EAGrB;AAAA,EAEA,MAAM,WAAW,KAAK,KAAK,IAAI,CAAC,QAAQ,YAAY,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI;AAAA,EACxE,MAAM,YAAY,KAAK,KACpB,IAAI,CAAC,QAAQ;AAAA,IACZ,MAAM,YAAY,YAAY,IAAI,IAAI;AAAA,IACtC,OAAO,GAAG,cAAc,cAAc,GAAG;AAAA,GAC1C,EACA,KAAK,IAAI;AAAA,EACZ,MAAM,YAAY,KAAK,KACpB,IAAI,CAAC,QAAQ;AAAA,IACZ,MAAM,UAAU,YAAY,IAAI,IAAI;AAAA,IACpC,OAAO,0BAA0B,SAAS,GAAG;AAAA,GAC9C,EACA,KAAK,IAAI;AAAA,EACZ,MAAM,eAAe,KAAK,KACvB,IAAI,CAAC,QAAQ;AAAA,IACZ,MAAM,YAAY,YAAY,IAAI,IAAI;AAAA,IACtC,OAAO,WAAW;AAAA,GACnB,EACA,KAAK,IAAI;AAAA,EACZ,MAAM,gBAAgB,KAAK,KAAK,IAAI,CAAC,QAAQ,cAAc,GAAG,CAAC,EAAE,KAAK,IAAI;AAAA,EAE1E,OAAO,GAAG,0BAA0B,mBAAmB;AAAA,aAC5C;AAAA,WACF;AAAA,mBACQ;AAAA;AAAA;AAAA,0BAGO;AAAA,uBACH;AAAA,uBACA,KAAK;AAAA,uBACL;AAAA;AAAA;AAAA;AAKvB,SAAS,aAAa,CAAC,KAAkB;AAAA,EACvC,MAAM,OAAO,IAAI;AAAA,EAEjB,IAAI,OAAO,SAAS,UAAU;AAAA,IAC5B,QAAQ;AAAA,WACD;AAAA,WACA;AAAA,QACH,OAAO;AAAA,WACJ;AAAA,QACH,OAAO;AAAA,WACJ;AAAA,WACA;AAAA,QACH,OAAO;AAAA;AAAA,QAEP,OAAO;AAAA;AAAA,EAEb;AAAA,EAEA,IAAI,KAAK,mBAAmB,KAAK,gBAAgB;AAAA,IAC/C,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,KAAK,MAAM;AAAA,IAEb,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,KAAK,UAAU;AAAA,IACjB,MAAM,YAAY,cAAc,EAAE,MAAM,KAAK,SAAS,CAAC;AAAA,IACvD,OAAO,GAAG;AAAA,EACZ;AAAA,EAEA,IAAI,KAAK,MAAM;AAAA,IACb,MAAM,YAAY,cAAc,EAAE,MAAM,KAAK,KAAK,KAAK,CAAC;AAAA,IACxD,OAAO,GAAG;AAAA,EACZ;AAAA,EAEA,IAAI,KAAK,OAAO;AAAA,IACd,MAAM,SAAS,KAAK,MACjB,IACC,CAAC,UACC,GAAG,YAAY,MAAM,IAAI,MAAM,cAAc,EAAE,MAAM,MAAM,KAAK,CAAC,GACrE,EACC,KAAK,IAAI;AAAA,IACZ,OAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,KAAK,UAAU;AAAA,IACjB,MAAM,SAAS,cAAc,EAAE,MAAM,KAAK,SAAS,GAAG,CAAC;AAAA,IACvD,MAAM,UAAU,cAAc,EAAE,MAAM,KAAK,SAAS,MAAM,CAAC;AAAA,IAC3D,OAAO,SAAS,qBAAqB;AAAA,EACvC;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,WAAW,CAAC,KAAqB;AAAA,EACxC,OAAO,IACJ,QAAQ,aAAa,CAAC,GAAG,WAAW,OAAO,YAAY,CAAC,EACxD,QAAQ,aAAa,CAAC,GAAG,WAAW,MAAM,EAC1C,QAAQ,UAAU,CAAC,GAAG,UAAU,KAAK,EACrC,QAAQ,MAAM,EAAE;AAAA;AAMrB,SAAS,yBAAyB,CAAC,SAAiB,SAAsB;AAAA,EACxE,MAAM,OAAO,QAAQ;AAAA,EAErB,IAAI,OAAO,SAAS,UAAU;AAAA,IAC5B,QAAQ;AAAA,WACD;AAAA,QACH,OAAO,WAAW;AAAA,WACf;AAAA,QACH,OAAO,UAAU;AAAA,WACd;AAAA,QACH,OAAO,WAAW;AAAA,WACf;AAAA,WACA;AAAA,QACH,OAAO;AAAA,4CAC6B;AAAA;AAAA;AAAA;AAAA,gBAI5B;AAAA;AAAA;AAAA,0CAG0B;AAAA;AAAA;AAAA;AAAA,QAIlC,OAAO,GAAG;AAAA;AAAA,EAEhB;AAAA,EAEA,IAAI,KAAK,iBAAiB;AAAA,IACxB,OAAO,kBAAkB;AAAA,EAC3B;AAAA,EAEA,IAAI,KAAK,gBAAgB;AAAA,IACvB,OAAO,iBAAiB;AAAA,EAC1B;AAAA,EAEA,IAAI,KAAK,MAAM;AAAA,IAEb,OAAO;AAAA,sBACW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiCpB;AAAA,EAEA,IAAI,KAAK,UAAU;AAAA,IACjB,MAAM,kBAAkB,0BAA0B,SAAS;AAAA,MACzD,MAAM,KAAK;AAAA,IACb,CAAC;AAAA,IACD,OAAO,GAAG,8BAA8B,gBAAgB,QAAQ,SAAS,GAAG,SAAS;AAAA,EACvF;AAAA,EAEA,IAAI,KAAK,MAAM;AAAA,IACb,MAAM,kBAAkB,0BAA0B,QAAQ;AAAA,MACxD,MAAM,KAAK,KAAK;AAAA,IAClB,CAAC;AAAA,IACD,OAAO,WAAW,uBAAuB;AAAA,EAC3C;AAAA,EAEA,IAAI,KAAK,OAAO;AAAA,IACd,MAAM,SAAS,KAAK,MACjB,IAAI,CAAC,UAAe;AAAA,MACnB,MAAM,iBAAiB,YAAY,MAAM,IAAI;AAAA,MAC7C,MAAM,kBAAkB,0BACtB,GAAG,WAAW,kBACd,EAAE,MAAM,MAAM,KAAK,CACrB;AAAA,MACA,OAAO,IAAI,MAAM,UAAU;AAAA,KAC5B,EACA,KAAK,IAAI;AAAA,IACZ,OAAO,cAAc;AAAA,EACvB;AAAA,EAEA,IAAI,KAAK,UAAU;AAAA,IAEjB,MAAM,eAAe,0BAA0B,GAAG,cAAc;AAAA,MAC9D,MAAM,KAAK,SAAS;AAAA,IACtB,CAAC;AAAA,IACD,MAAM,gBAAgB,0BAA0B,GAAG,eAAe;AAAA,MAChE,MAAM,KAAK,SAAS;AAAA,IACtB,CAAC;AAAA,IACD,OAAO,WAAW,mBAAmB,aAAa,QAAQ,GAAG,cAAc,GAAG,YAAY,iBAAiB,cAAc,QAAQ,GAAG,eAAe,GAAG,aAAa;AAAA,EACrK;AAAA,EAGA,OAAO,GAAG;AAAA;;;ALhSZ,SAAS,iBAAiB,CAAC,OAAwB;AAAA,EAIjD,MAAM,oBAAoB;AAAA,EAC1B,OAAO,kBAAkB,KAAK,KAAK;AAAA;AAMrC,SAAS,YAAY,CAAC,SAA8B;AAAA,EAElD,IAAI,QAAQ,WAAW,IAAI,KAAK,QAAQ,WAAW,IAAI,GAAG;AAAA,IACxD,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;AAWT,eAAe,WAAW,CAAC,QAAyC;AAAA,EAClE,MAAM,QAAkB,CAAC;AAAA,EACzB,MAAM,cAAwB,CAAC;AAAA,EAE/B,WAAW,SAAS,QAAQ;AAAA,IAE1B,IAAI,kBAAkB,KAAK,GAAG;AAAA,MAC5B,YAAY,KAAK,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,IAAI,MAAM,SAAS,GAAG,KAAK,MAAM,SAAS,GAAG,GAAG;AAAA,MAC9C,MAAM,UAAU,MAAM,GAAG,OAAO,EAAE,KAAK,QAAQ,IAAI,GAAG,UAAU,KAAK,CAAC;AAAA,MACtE,WAAW,QAAQ,SAAS;AAAA,QAC1B,IAAI,KAAK,SAAS,OAAO,GAAG;AAAA,UAC1B,MAAM,KAAK,IAAI;AAAA,QACjB;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,IAGA,IAAI,MAAM,SAAS,OAAO,GAAG;AAAA,MAC3B,MAAM,eAAe,MAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK;AAAA,MACtD,MAAM,KAAK,YAAY;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,OAAO,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC;AAAA,IACzB,aAAa,CAAC,GAAG,IAAI,IAAI,WAAW,CAAC;AAAA,EACvC;AAAA;AAMF,SAAS,kBAAkB,CAAC,UAA0B;AAAA,EACpD,MAAM,WAAW,MAAK,SAAS,UAAU,OAAO;AAAA,EAEhD,OAAO,SACJ,QAAQ,YAAY,CAAC,GAAG,SAAS,KAAK,YAAY,CAAC,EACnD,QAAQ,QAAQ,CAAC,GAAG,SAAS,KAAK,YAAY,CAAC,EAC/C,QAAQ,OAAO,KAAK;AAAA;AAMzB,SAAS,YAAW,CAAC,KAAqB;AAAA,EACxC,OAAO,IACJ,QAAQ,YAAY,CAAC,GAAG,SAAS,KAAK,YAAY,CAAC,EACnD,QAAQ,QAAQ,CAAC,GAAG,SAAS,KAAK,YAAY,CAAC,EAC/C,QAAQ,OAAO,KAAK;AAAA;AAMzB,eAAe,qBAAqB,CAClC,cACA,SACA,QACA,SACuB;AAAA,EACvB,MAAM,YAAY,CAAC;AAAA,EAGnB,WAAW,QAAQ,aAAa,OAAO;AAAA,IACrC,MAAM,MAAM,MAAM,iBAAiB,IAAI;AAAA,IACvC,MAAM,OAAO,mBAAmB,IAAI;AAAA,IAEpC,UAAU,KAAK;AAAA,MACb;AAAA,MACA,SAAS,6CAA6C;AAAA,MACtD;AAAA,MACA,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EAGA,WAAW,cAAc,aAAa,aAAa;AAAA,IACjD,OAAO,SAAS,gBAAgB,WAAW,MAAM,GAAG;AAAA,IACpD,MAAM,UAAU,aAAa,OAAO;AAAA,IAEpC,QAAQ,OAAO,YAAY,qBAAqB;AAAA,IAEhD,IAAI;AAAA,MACF,MAAM,YAAY,IAAI,gBAAgB,SAAS,MAAM;AAAA,MACrD,MAAM,eAAe,MAAM,UAAU,gBAAgB,UAAU;AAAA,MAC/D,MAAM,MAAM,iBAAiB,YAAY;AAAA,MACzC,MAAM,OAAO,aAAY,YAAY;AAAA,MAErC,UAAU,KAAK;AAAA,QACb;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA,aAAa;AAAA,MACf,CAAC;AAAA,MACD,OAAO,OAAY;AAAA,MACnB,MAAM,IAAI,MAAM,4BAA4B,eAAe,MAAM,SAAS;AAAA;AAAA,EAE9E;AAAA,EAEA,OAAO;AAAA,IACL,KAAK;AAAA,IACL;AAAA,IACA,SAAS,CAAC;AAAA,EACZ;AAAA;AAGF,eAAsB,QAAQ,CAAC,OAAiB,SAA0B;AAAA,EACxE,MAAM,UAAU,IAAI,sBAAsB,EAAE,MAAM;AAAA,EAElD,IAAI;AAAA,IACF,IAAI;AAAA,IAGJ,IAAI,SAAS,MAAM,SAAS,GAAG;AAAA,MAE7B,IAAI,CAAC,QAAQ,KAAK;AAAA,QAChB,QAAQ,KAAK,sBAAsB;AAAA,QACnC,QAAQ,MACN,MAAM,IAAI;AAAA,wEAA2E,CACvF;AAAA,QACA,QAAQ,IAAI,MAAM,KAAK;AAAA,UAAa,CAAC;AAAA,QACrC,QAAQ,IAAI,MAAM,KAAK,iEAAiE,CAAC;AAAA,QACzF,QAAQ,IAAI,MAAM,KAAK,+FAA+F,CAAC;AAAA,QACvH,QAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,MAGA,MAAM,eAAe,MAAM,YAAY,KAAK;AAAA,MAC5C,MAAM,cAAc,aAAa,MAAM,SAAS,aAAa,YAAY;AAAA,MAEzE,IAAI,gBAAgB,GAAG;AAAA,QACrB,QAAQ,KAAK,uBAAuB;AAAA,QACpC,QAAQ,MAAM,MAAM,IAAI;AAAA,iEAAoE,CAAC;AAAA,QAC7F,QAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,MAEA,QAAQ,OAAO,cAAc;AAAA,MAG7B,MAAM,SAAS,QAAQ,UAAU,QAAQ,IAAI;AAAA,MAE7C,SAAS,MAAM,sBAAsB,cAAc,QAAQ,KAAK,QAAQ,OAAO;AAAA,IACjF,EAAO;AAAA,MAEL,SAAS,MAAM,WAAW,QAAQ,MAAM;AAAA;AAAA,IAI1C,MAAM,gBAAgB,IAAI;AAAA,IAG1B,IAAI,OAAO,SAAS;AAAA,MAClB,WAAW,UAAU,OAAO,SAAS;AAAA,QACnC,cAAc,SAAS,MAAM;AAAA,MAC/B;AAAA,IACF;AAAA,IAGA,MAAM,iBAAiC;AAAA,SAClC;AAAA,MACH,SAAS,cAAc,WAAW;AAAA,IACpC;AAAA,IAGA,MAAM,cAAc,YAAY,kBAAkB,cAAc;AAAA,IAIhE,MAAM,mBAAqC,OAAO,aAAa,CAAC,GAAG,IACjE,CAAC,cAAc;AAAA,MACb,MAAM,SAAS;AAAA,MACf,SAAS,SAAS;AAAA,MAClB,QAAQ,SAAS;AAAA,MACjB,KAAM,SAAiB;AAAA,MACvB,iBAAkB,SAAiB;AAAA,IACrC,EACF;AAAA,IAGA,MAAM,qBAAqB,MAAM,cAAc,mBAC7C,iBACA,cACF;AAAA,IAEA,IAAI,mBAAmB,WAAW,GAAG;AAAA,MACnC,QAAQ,KAAK,gCAAgC;AAAA,MAC7C,QAAQ,IAAI;AAAA,gBAAmB;AAAA,MAC/B,QAAQ,IAAI,gDAA0C;AAAA,MACtD,QAAQ,IAAI,0DAAoD;AAAA,MAChE;AAAA,IACF;AAAA,IAGA,MAAM,UAAU,MAAM,cAAc,kBAClC,oBACA,cACF;AAAA,IAGA,IAAI,CAAC,QAAQ,IAAI,WAAW,KAAK,mBAAmB,SAAS,GAAG;AAAA,MAC9D,MAAM,gBAAgB,MAAM,0BAA0B,kBAAkB;AAAA,MACxE,QAAQ,IAAI,aAAa;AAAA,QACvB,MAAM,OAAO;AAAA,QACb,SAAS;AAAA,QACT,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAAA,IAGA,MAAM,qBAAqB,MAAM,cAAc,iBAAiB,OAAO;AAAA,IAGvE,MAAM,cAAc,aAAa,kBAAkB;AAAA,IAEnD,MAAM,gBAAgB,mBAAmB;AAAA,IACzC,MAAM,eAAe,kBAAkB,IAAI,aAAa;AAAA,IACxD,QAAQ,QAAQ,2BAA2B,iBAAiB,cAAc;AAAA,IAE1E,QAAQ,IAAI;AAAA,eAAO,OAAO,KAAK;AAAA,IAC/B,QAAQ,IAAI;AAAA,oCAA4B;AAAA,IAGxC,IAAI,mBAAmB,SAAS,GAAG;AAAA,MACjC,MAAM,kBAAkB,mBAAmB;AAAA,MAC3C,QAAQ,IACN,MAAM,KACJ,eAAe,gBAAgB,gBAAgB,OAAO,IAAI,QAAQ,SAAS,EAAE,IAC/E,CACF;AAAA,MAEA,IAAI,mBAAmB,SAAS,GAAG;AAAA,QACjC,QAAQ,IACN,MAAM,KACJ,yBAAyB,mBACtB,MAAM,CAAC,EACP,IAAI,CAAC,MAAM,EAAE,IAAI,EACjB,KAAK,IAAI,GACd,CACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OAAY;AAAA,IACnB,QAAQ,KAAK,mBAAmB;AAAA,IAChC,QAAQ,MAAM,MAAM,IAAI;AAAA,EAAK,MAAM,SAAS,CAAC;AAAA,IAC7C,IAAI,QAAQ,IAAI,OAAO;AAAA,MACrB,QAAQ,MAAM,MAAM,KAAK;AAAA,IAC3B;AAAA,IACA,QAAQ,KAAK,CAAC;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADnTlB,MAAQ,YAAY;AAMpB,QACG,KAAK,aAAa,EAClB,YAAY,8DAA8D,EAC1E,QAAQ,OAAO;AAElB,QACG,QAAQ,qBAAqB,EAC7B,MAAM,KAAK,EACX,YAAY,uDAAuD,EACnE,OAAO,uBAAuB,qBAAqB,EACnD,OAAO,oBAAoB,qDAAqD,EAChF,OAAO,uBAAuB,4CAA4C,EAC1E,OAAO,eAAe,mBAAmB,EACzC,OAAO,QAAQ;AAElB,QACG,QAAQ,MAAM,EACd,YAAY,wCAAwC,EACpD,OAAO,YAAY;AAAA,EAClB,QAAQ,gBAAS;AAAA,EACjB,MAAM,MAAK;AAAA,CACZ;AAEH,QAAQ,MAAM;",
|
|
15
|
-
"debugId": "
|
|
172
|
+
"mappings": "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",
|
|
173
|
+
"debugId": "C236EDEA54ABBFA664756E2164756E21",
|
|
16
174
|
"names": []
|
|
17
175
|
}
|