[
  {
    "path": ".github/copilot-instructions.md",
    "content": "# Copilot Instructions for figma-api\n\n## Project Overview\n\nThis is a TypeScript library that provides a thin, fully-typed wrapper around the [Figma REST API](https://www.figma.com/developers/api). The library supports both Node.js and browser environments.\n\n## Key Architecture\n\n- **Source**: TypeScript files in `src/` directory\n- **Output**: Compiled JavaScript in `lib/` directory  \n- **Types**: Uses official `@figma/rest-api-spec` for complete type safety\n- **HTTP Client**: Axios v1.12.2 for making API requests\n- **Build**: esbuild for fast compilation with multiple targets (Node.js, browser, minified)\n- **Testing**: Jest with TypeScript support and comprehensive test coverage\n\n## Core Files\n\n- `src/api-class.ts` - Main API class with authentication and method bindings\n- `src/api-endpoints.ts` - Individual endpoint implementations following Figma API structure\n- `src/config.ts` - API domain and version constants\n- `src/utils.ts` - Utility functions for query parameters and requests\n- `src/index.ts` - Main entry point, exports public API\n- `tests/` - Jest test suite for all source files\n- `jest.config.js` - Jest configuration for TypeScript testing\n\n## Development Guidelines\n\n### Code Style\n- Use TypeScript strict mode (already configured)\n- Follow existing naming conventions (camelCase for methods, PascalCase for types)\n- Import types from `@figma/rest-api-spec` - do NOT create custom types for API responses\n- Use arrow functions for endpoint method bindings in `Api` class\n- Keep endpoint implementations pure functions that return `this.request()` calls\n\n### API Endpoint Pattern\n```typescript\nexport function getExampleApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetExamplePathParams,\n    queryParams?: FigmaRestAPI.GetExampleQueryParams\n): Promise<FigmaRestAPI.GetExampleResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/endpoint/${pathParams.id}?${encodedQueryParams}`);\n}\n```\n\n### Adding New Endpoints\n1. Add the endpoint function to `src/api-endpoints.ts` following the pattern above\n2. Export the function at the top of the file\n3. Add method binding in `src/api-class.ts` using arrow function syntax\n4. Group by API category with comments (Files, Comments, Users, etc.)\n5. Include the official Figma API documentation link in comments\n6. Write comprehensive tests in `tests/api-endpoints.test.ts` for the new endpoint\n7. Ensure the new endpoint follows the existing error handling patterns\n\n### Authentication\n- Support both Personal Access Tokens and OAuth tokens\n- Use the existing authentication helper methods in `Api` class\n- Headers are automatically populated by `appendHeaders()` method\n\n### Building & Testing\n- Run `npm run build` to compile for all targets (Node.js, browser, minified)\n  - `npm run build:node` - Build for Node.js environment using esbuild\n  - `npm run build:browser` - Build for browser as IIFE with global `Figma` object\n  - `npm run build:browser:min` - Build minified browser version\n- Run `npm test` to execute the Jest test suite\n  - `npm run test:watch` - Run tests in watch mode for development\n  - `npm run test:coverage` - Generate test coverage reports\n- All builds use esbuild for fast compilation and bundling\n- Tests are written in TypeScript and located in the `tests/` directory\n\n### Development Workflow\n- Use TypeScript strict mode for all development\n- Run `npm test` during development to ensure changes don't break existing functionality\n- Use `npm run test:watch` for real-time testing during development\n- Run builds frequently to catch compilation issues early: `npm run build`\n- Use the existing patterns consistently - don't create new patterns\n- When in doubt, follow the Figma REST API documentation exactly\n- Check `lib/` output after builds to ensure proper compilation\n- Write tests for new functionality in the `tests/` directory following existing patterns\n\n### Tool Configuration\n- **esbuild** handles all compilation and bundling (replaced TypeScript + Browserify)\n- **Jest** configuration in `jest.config.js` with ts-jest preset for TypeScript testing\n- TypeScript config in `tsconfig.json` targets ES5 with CommonJS modules\n- Test files should be placed in `tests/` directory with `.test.ts` extension\n- Coverage reports generated in `coverage/` directory\n- Use `@figma/rest-api-spec` types exclusively - never create custom API types\n\n### Version Alignment\n- This library stays in sync with official Figma REST API specifications\n- Types come from `@figma/rest-api-spec` package - update that package for new API features\n- Endpoint URLs and parameters must match official Figma documentation exactly\n\n## Important Notes\n\n- This is version 2.x which is a complete rewrite from 1.x for API alignment\n- All endpoint methods use object parameters (pathParams, queryParams, requestBody)\n- The library is designed to be a thin wrapper - avoid adding business logic\n- Browser and Node.js compatibility is maintained through build process\n- Keep the public API surface minimal and focused on REST API exposure\n\n### Security & Dependencies\n- Check for vulnerabilities before adding new dependencies: `npm audit`\n- Keep dependencies minimal and focused on the library's core purpose\n- When adding dependencies, verify they're well-maintained and trusted\n- Address security vulnerabilities promptly but carefully to avoid breaking changes\n\n### Error Handling\n- API errors should be handled consistently using the existing error patterns\n- Preserve error information from the Figma API in responses\n- Use TypeScript's strict typing to catch errors at compile time\n- Handle network errors gracefully in the request utility functions\n\n### File Management\n- Exclude build artifacts from version control (already configured in `.gitignore`)\n- Keep the source in `src/` and compiled output in `lib/`\n- Place all tests in `tests/` directory with `.test.ts` extension\n- Don't commit `node_modules`, `playground`, `coverage/`, or temporary files\n- Use `.npmignore` to control what gets published to npm\n- Test coverage reports are generated in `coverage/` directory\n\n## When Making Changes\n\n1. Write or update tests first: `npm test` (Test-Driven Development approach)\n2. Ensure TypeScript compilation succeeds: `npm run build`\n3. Run the full test suite to ensure no regressions: `npm test`\n4. Verify all build targets work correctly (Node.js, browser, minified)\n5. Check test coverage is maintained: `npm run test:coverage`\n6. Check that new endpoints follow the established patterns\n7. Update documentation in README.md if adding major new functionality\n8. Maintain backward compatibility within major version\n9. Run `npm audit` to check for security vulnerabilities\n10. Test both Node.js and browser environments when possible"
  },
  {
    "path": ".gitignore",
    "content": "/node_modules\n/playground\n/.idea\n/coverage"
  },
  {
    "path": ".npmignore",
    "content": "playground\nsrc\nnode_modules\ntsconfig.json\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [v2.2.0-beta] - 2026-04-22\n\n### Added\n- Added missing `GetFileMeta` endpoint\n\n### Changed\n- Widened `@figma/rest-api-spec` dependency range to `>=0.37.0 <1.0.0` (floor bumped from `0.27.0` to `0.37.0`, which is the current latest release,\n\n## [v2.1.4-beta] - 2026-04-22\n\n### Changed\n- Expanded OAuth scope support to granular and multi-scope values\n\n### Fixed\n- Updated `toQueryParams` utility function to preserve explicit `false`/`0` query values\n\n## [v2.1.3-beta] - 2026-04-22\n\n### Changed\n- Updated `minimatch` from `9.0.5` to `9.0.9`\n- Updated `picomatch` from `4.0.3` to `4.0.4`\n- Bumped `handlebars` from `4.7.8` to `4.7.9`\n- Bumped `axios` from `1.13.5` to `1.15.0`\n- Bumped `follow-redirects` from `1.15.11` to `1.16.0`\n\n## [v2.1.2-beta] - 2026-02-16\n\n### Changed\n- Properly upgraded Axios from `1.12.2` to `1.13.5` (before an issue with dependabot didn't upgrade it in `package.json`)\n\n## [v2.1.1-beta] - 2026-02-13\n\n### Changed\n- Upgraded `js-yaml` from `3.14.1` to `3.14.2`\n- Upgraded Axios from `1.12.2` to `1.13.5` (note: incorrect upgrade)\n- Fixed vulnerabilities singaled by npm\n\n## [v2.1.0-beta] - 2025-10-08\n\n### Added\n- Comprehensive Jest testing suite for TypeScript source files\n- Copilot instructions for repository development guidance\n- Enhanced error handling with custom `ApiError` class\n\n### Changed\n- Migrated build system from browserify to esbuild for modern bundling\n- Upgraded Axios from v0.27.2 to v1.12.2\n- Split build commands into meaningful sub-commands (`build:node`, `build:browser`, `build:browser:min`)\n- Updated TypeScript configuration to explicitly include `src` folder\n\n### Fixed\n- Package.json dependencies structure - moved `axios` and `@figma/rest-api-spec` to `dependencies`\n- Fixed failing tests to work with enhanced ApiError implementation\n\n## [v2.0.2-beta] - 2025-04-16\n\n### Changed\n- Dependencies maintenance and security updates\n- Bumped `@figma/rest-api-spec` to v0.27.0\n- Bumped `@types/node` to v22.14.1\n- Bumped `typescript` to v5.8.3\n- Bumped `uglifyify` to v5.0.2\n\n### Fixed\n- Fixed wrong path for `getPublishedVariablesApi` endpoint\n- TypeScript compilation issues resolved\n\n### Security\n- Updated multiple dependency versions to address security vulnerabilities\n- Bumped elliptic from 6.6.0 to 6.6.1\n- Updated sha.js, pbkdf2, cipher-base, and form-data\n\n## [v2.0.1-beta] - 2024-11-06\n\n### Added\n- Updated exported endpoints in main library\n- Enhanced README documentation\n\n### Changed\n- Updated comment documentation\n- Renamed readme.md to README.md for consistency\n\n## [v2.0.0-beta] - 2024-11-05\n\n### Added\n- **BREAKING CHANGE**: Complete refactoring to align with official Figma REST API specifications\n- Integration with `@figma/rest-api-spec` for type safety and API alignment\n- All missing endpoints from the official Figma API added\n- OAuth authentication improvements following new Figma specifications\n- Analytics endpoints support\n- Variables endpoints support\n- Dev Resources endpoints support\n- Enhanced webhooks support (v2 API)\n\n### Changed\n- **BREAKING CHANGE**: All endpoint methods now use object parameters (`pathParams`, `queryParams`, `requestBody`)\n- **BREAKING CHANGE**: Method signatures completely restructured to match official API\n- Library now acts as a thin wrapper around the official Figma REST API\n- Package metadata updated to reflect v2.0 changes\n- Types now sourced directly from `@figma/rest-api-spec`\n\n### Security\n- Updated OAuth token exchange method according to new Figma specifications\n\n---\n\n## Migration Guide: v1.x to v2.x\n\nVersion 2.0 represents a complete rewrite of the library to align with the official Figma REST API specifications. Here are the key breaking changes:\n\n### Method Signatures\n**Before (v1.x):**\n```javascript\napi.getFile(fileKey, { version, ids, depth, geometry, plugin_data, branch_data })\n```\n\n**After (v2.x):**\n```javascript\napi.getFile(\n  { file_key: fileKey }, // pathParams\n  { version, ids, depth, geometry, plugin_data, branch_data } // queryParams\n)\n```\n\n### Authentication\nOAuth authentication has been updated to follow the new Figma specifications. The `oAuthToken` method signature has changed.\n\n### Benefits of v2.x\n- Full type safety with official Figma API types\n- Complete API coverage with all endpoints\n- Future-proof alignment with Figma's specifications\n- Better error handling and debugging\n\nFor detailed migration instructions, please refer to the [README.md](README.md) file.\n\n---\n\n## [v1.12.0] - 2024-11-05\n\n### Added\n- Missing properties in API response types\n- Section type support\n- New types from Figma REST API documentation\n- Component sets support in API responses\n\n### Changed\n- Updated dependencies including axios to v0.28.0\n- Made `getImageApi` scale parameter optional\n\n### Fixed\n- Missing fields in `GetFileResult` type\n- Scale and format parameters now properly optional in image API\n\n### Security\n- Updated browserify-sign from 4.0.4 to 4.2.3\n- Updated elliptic from 6.5.4 to 6.6.0\n- Updated follow-redirects from 1.14.8 to 1.15.9\n- Updated minimatch from 3.0.4 to 3.1.2\n\n## [v1.11.0] - 2022-10-29\n\n### Added\n- Autolayout v4 properties support\n- Improved `getFileNodesApi` response type\n- Enhanced type definitions for various API responses\n\n### Fixed\n- Minor type issues in API definitions\n- Updated `file.components` type definition\n\n### Security\n- Bumped shell-quote from 1.6.1 to 1.7.3\n- Bumped minimist and mkdirp dependencies for security\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2020 Morglod\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "[![NPM Version](https://badge.fury.io/js/figma-api.svg?style=flat)](https://www.npmjs.com/package/figma-api)\n\n> [!IMPORTANT]\n> **Version 2.0 Beta** - This version is a complete rewrite of the library, based on the [Figma REST API specifications](https://github.com/figma/rest-api-spec). Many endpoint methods have been renamed from version 1.x, and all the endpoint methods' arguments now match the [Figma REST API](https://www.figma.com/developers/api) documentation. If you were using the previous version, and intend to use the new one, **you will have to update your code accordingly**. The good news is that from now on they should always remain in sync, so no major disruptions in the future, with the benefit of a full alignment with the official Figma REST API documentation and specifications.\n\n# figma-api\n\nJavaScript client-side implementation of the [Figma REST API](https://www.figma.com/developers/api#intro).\n\nThin layer on top of the official [Figma REST API specifications](https://github.com/figma/rest-api-spec), fully typed with TypeScript, uses Promises (via [Axios](https://github.com/axios/axios)) & ES6.\n\nSupports both browser & Node.js implementations.\n\n## Install\n\n`npm i figma-api`\n\nor browser version:\n\n`https://raw.githubusercontent.com/didoo/figma-api/master/lib/figma-api.js`\n`https://raw.githubusercontent.com/didoo/figma-api/master/lib/figma-api.min.js`\n\nIf you have CORS limitation, import the `figma-api[.min].js` file in your codebase via the npm package.\n\n## Usage\n\nIn a Node.js script:\n\n```ts\nimport * as Figma from 'figma-api';\n\nexport async function main() {\n    const api = new Figma.Api({\n        personalAccessToken: 'my-token',\n    });\n\n    const file = await api.getFile({ file_key: 'my-file-key'});\n    // ... access file data ...\n}\n```\n\nIn a browser script:\n\n```js\nconst api = new Figma.Api({ personalAccessToken: 'my-personal-access-token' });\n\napi.getFile({ file_key: 'my-file-key'}).then((file) => {\n    // access file data\n});\n```\n\nIn this case, the `Figma` object is gloabl and all the API methods are associated with it.\n\n## Api\n\nWe have followed the same organisation as the official [Figma API documentation](https://www.figma.com/developers/api) to describe our API methods, so it's easier to find the exact endpoint call you are looking for.\n\n### Authentication\n\n```ts\nnew Api ({ personalAccessToken, oAuthToken })\n```\n\nCreates new Api object with specified `personalAccessToken` or `oAuthToken`. For details about how to get these tokens, [see the documentation](https://www.figma.com/developers/api#authentication)\n\n```ts\nfunction oAuthLink(\n    client_id: string,\n    redirect_uri: string,\n    scope: string | string[],\n    state: string,\n    response_type: 'code',\n): string;\n```\n\nReturns link for OAuth auth flow. `scope` can be a single scope string (for example `file_content:read`) or an array of scope strings for multiple permissions. Users should open this link, allow access and they will be redirected to `redirect_uri?code=<code>`. Then they should use `oAuthToken` method to get an access token.\n\n```ts\nfunction oAuthToken(\n    client_id: string,\n    client_secret: string,\n    redirect_uri: string,\n    code: string,\n    grant_type: 'authorization_code',\n): Promise<{\n    access_token: string,\n    refresh_token: string,\n    expires_in: number,\n}>\n```\nReturns the access token from oauth code (see `oAuthLink` method).\n\nOther helpers:\n\n- `Api.appendHeaders(headers)` - Populate headers with auth.\n- `Api.request(url, opts)` - Make request with auth headers.\n\n### Endpoints\n\nAll these endpoints methods receive objects like `pathParams`, `queryParams`, `requestBody`, as arguments, and return a Promise. For details about the shape of these objects refer to the official Figma REST API documentation (see links below).\n\n> [!IMPORTANT]\n> Version 2.x differs considerably from version 1.x in that the arguments of the API endpoint methods are _always_ contained in these objects, while before they were passed singularly as values directly to the function.\n\n#### Files\n\nSee: https://www.figma.com/developers/api#files-endpoints\n\n- `Api.getFile(pathParams,queryParams)`\n- `Api.getFileNodes(pathParams,queryParams)`\n- `Api.getImages(pathParams,queryParams)`\n- `Api.getImageFills(pathParams)`\n\n#### Comments\n\nSee: https://www.figma.com/developers/api#comments-endpoints\n\n- `Api.getComments(pathParams)`\n- `Api.postComment(pathParams,requestBody)`\n- `Api.deleteComment(pathParams)`\n- `Api.getCommentReactions(pathParams,queryParams)`\n- `Api.postCommentReaction(pathParams,requestBody)`\n- `Api.deleteCommentReactions(pathParams)`\n\n#### Users\n\nSee: https://www.figma.com/developers/api#users-endpoints\n\n- `Api.getUserMe()`\n\n#### Version History (File Versions)\n\nSee: https://www.figma.com/developers/api#version-history-endpoints\n\n- `Api.getFileVersions(pathParams)`\n\n#### Projects\n\nSee: https://www.figma.com/developers/api#projects-endpoints\n\n- `Api.getTeamProjects(pathParams)`\n- `Api.getProjectFiles(pathParams,queryParams)`\n\n#### Components and Styles (Library Items)\n\nSee: https://www.figma.com/developers/api#library-items-endpoints\n\n- `Api.getTeamComponents(pathParams,queryParams)`\n- `Api.getFileComponents(pathParams)`\n- `Api.getComponent(pathParams)`\n- `Api.getTeamComponentSets(pathParams,queryParams)`\n- `Api.getFileComponentSets(pathParams)`\n- `Api.getComponentSet(pathParams)`\n- `Api.getTeamStyles(pathParams,queryParams)`\n- `Api.getFileStyles(pathParams)`\n- `Api.getStyle(pathParams)`\n\n#### Webhooks\n\nSee: https://www.figma.com/developers/api#webhooks_v2\n\n- `Api.getWebhook(pathParams)`\n- `Api.postWebhook(requestBody)`\n- `Api.putWebhook(pathParams,requestBody)`\n- `Api.deleteWebhook(pathParams)`\n- `Api.getTeamWebhooks(pathParams)`\n- `Api.getWebhookRequests(pathParams)`\n\n#### Activity Logs\n\nSee: https://www.figma.com/developers/api#activity-logs-endpoints\n\n> [!TIP]\n> [TODO] Open to contributions if someone is needs to use these endpoints\n\n\n#### Payments\n\nSee: https://www.figma.com/developers/api#payments-endpoints\n\n> [!TIP]\n> [TODO] Open to contributions if someone is needs to use these endpoints\n\n#### Variables\n\n> [!NOTE]\n> These APIs are available only to full members of Enterprise orgs.\n\nSee: https://www.figma.com/developers/api#variables-endpoints\n\n- `Api.getLocalVariables(pathParams)`\n- `Api.getPublishedVariables(pathParams)`\n- `Api.postVariables(pathParams,requestBody)`\n\n#### Dev Resources\n\nSee: https://www.figma.com/developers/api#dev-resources-endpoints\n\n- `Api.getDevResources(pathParams,queryParams)`\n- `Api.postDevResources(requestBody)`\n- `Api.putDevResources(requestBody)`\n- `Api.deleteDevResources(pathParams)`\n\n#### Analytics\n\nSee: https://www.figma.com/developers/api#library-analytics-endpoints\n\n- `Api.getLibraryAnalyticsComponentActions(pathParams,queryParams)`\n- `Api.getLibraryAnalyticsComponentUsages(pathParams,queryParams)`\n- `Api.getLibraryAnalyticsStyleActions(pathParams,queryParams)`\n- `Api.getLibraryAnalyticsStyleUsages(pathParams,queryParams)`\n- `Api.getLibraryAnalyticsVariableActions(pathParams,queryParams)`\n- `Api.getLibraryAnalyticsVariableUsages(pathParams,queryParams)`\n\n## Types\n\nThe library is fully typed using the official [Figma REST API specifications](https://github.com/figma/rest-api-spec). You can see those types in the generated file here: https://github.com/figma/rest-api-spec/blob/main/dist/api_types.ts.\n\nAlternatively, you can refer to the official Figma REST API documentation (see links above).\n\n---\n\n## Development\n\n```\ngit clone https://github.com/didoo/figma-api.git\ncd figma-api\ngit checkout main\nnpm install\nnpm run build\n```\n\n## Testing\n\n```\nnpm run test\n```\n\n## Release\n\n```\nnpm version [<newversion> | major | minor | patch]\n#if not yet logged in\nnpm login\nnpm publish\n```\n\n(notice: tags are created automatically after a few minutes from the publishing)\n"
  },
  {
    "path": "jest.config.js",
    "content": "module.exports = {\n  preset: 'ts-jest',\n  testEnvironment: 'node',\n  roots: ['<rootDir>/src', '<rootDir>/tests'],\n  testMatch: ['**/__tests__/**/*.ts', '**/?(*.)+(spec|test).ts'],\n  transform: {\n    '^.+\\\\.ts$': 'ts-jest',\n  },\n  collectCoverageFrom: [\n    'src/**/*.ts',\n    '!src/**/*.d.ts',\n  ],\n  coverageDirectory: 'coverage',\n  coverageReporters: ['text', 'lcov', 'html'],\n};"
  },
  {
    "path": "lib/api-class.d.ts",
    "content": "import * as ApiEndpoints from './api-endpoints';\nimport { ApiRequestMethod } from './utils';\nexport declare class Api {\n    personalAccessToken?: string;\n    oAuthToken?: string;\n    constructor(params: {\n        personalAccessToken: string;\n    } | {\n        oAuthToken: string;\n    });\n    appendHeaders: (headers: {\n        [x: string]: string;\n    }) => void;\n    request: ApiRequestMethod;\n    getFile: typeof ApiEndpoints.getFileApi;\n    getFileNodes: typeof ApiEndpoints.getFileNodesApi;\n    getImages: typeof ApiEndpoints.getImagesApi;\n    getImageFills: typeof ApiEndpoints.getImageFillsApi;\n    getComments: typeof ApiEndpoints.getCommentsApi;\n    postComment: typeof ApiEndpoints.postCommentApi;\n    deleteComment: typeof ApiEndpoints.deleteCommentApi;\n    getCommentReactions: typeof ApiEndpoints.getCommentReactionsApi;\n    postCommentReaction: typeof ApiEndpoints.postCommentReactionApi;\n    deleteCommentReactions: typeof ApiEndpoints.deleteCommentReactionsApi;\n    getUserMe: typeof ApiEndpoints.getUserMeApi;\n    getFileVersions: typeof ApiEndpoints.getFileVersionsApi;\n    getTeamProjects: typeof ApiEndpoints.getTeamProjectsApi;\n    getProjectFiles: typeof ApiEndpoints.getProjectFilesApi;\n    getTeamComponents: typeof ApiEndpoints.getTeamComponentsApi;\n    getFileComponents: typeof ApiEndpoints.getFileComponentsApi;\n    getComponent: typeof ApiEndpoints.getComponentApi;\n    getTeamComponentSets: typeof ApiEndpoints.getTeamComponentSetsApi;\n    getFileComponentSets: typeof ApiEndpoints.getFileComponentSetsApi;\n    getComponentSet: typeof ApiEndpoints.getComponentSetApi;\n    getTeamStyles: typeof ApiEndpoints.getTeamStylesApi;\n    getFileStyles: typeof ApiEndpoints.getFileStylesApi;\n    getStyle: typeof ApiEndpoints.getStyleApi;\n    getWebhook: typeof ApiEndpoints.getWebhookApi;\n    postWebhook: typeof ApiEndpoints.postWebhookApi;\n    putWebhook: typeof ApiEndpoints.putWebhookApi;\n    deleteWebhook: typeof ApiEndpoints.deleteWebhookApi;\n    getTeamWebhooks: typeof ApiEndpoints.getTeamWebhooksApi;\n    getWebhookRequests: typeof ApiEndpoints.getWebhookRequestsApi;\n    getLocalVariables: typeof ApiEndpoints.getLocalVariablesApi;\n    getPublishedVariables: typeof ApiEndpoints.getPublishedVariablesApi;\n    postVariables: typeof ApiEndpoints.postVariablesApi;\n    getDevResources: typeof ApiEndpoints.getDevResourcesApi;\n    postDevResources: typeof ApiEndpoints.postDevResourcesApi;\n    putDevResources: typeof ApiEndpoints.putDevResourcesApi;\n    deleteDevResources: typeof ApiEndpoints.deleteDevResourcesApi;\n    getLibraryAnalyticsComponentActions: typeof ApiEndpoints.getLibraryAnalyticsComponentActionsApi;\n    getLibraryAnalyticsComponentUsages: typeof ApiEndpoints.getLibraryAnalyticsComponentUsagesApi;\n    getLibraryAnalyticsStyleActions: typeof ApiEndpoints.getLibraryAnalyticsStyleActionsApi;\n    getLibraryAnalyticsStyleUsages: typeof ApiEndpoints.getLibraryAnalyticsStyleUsagesApi;\n    getLibraryAnalyticsVariableActions: typeof ApiEndpoints.getLibraryAnalyticsVariableActionsApi;\n    getLibraryAnalyticsVariableUsages: typeof ApiEndpoints.getLibraryAnalyticsVariableUsagesApi;\n}\nexport declare function oAuthLink(client_id: string, redirect_uri: string, scope: 'file_read', state: string, response_type: 'code'): string;\ntype OAuthTokenResponseData = {\n    user_id: string;\n    access_token: string;\n    refresh_token: string;\n    expires_in: number;\n};\nexport declare function oAuthToken(client_id: string, client_secret: string, redirect_uri: string, code: string, grant_type: 'authorization_code'): Promise<OAuthTokenResponseData>;\nexport {};\n"
  },
  {
    "path": "lib/api-class.js",
    "content": "\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n    return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Api = void 0;\nexports.oAuthLink = oAuthLink;\nexports.oAuthToken = oAuthToken;\nvar ApiEndpoints = __importStar(require(\"./api-endpoints\"));\nvar utils_1 = require(\"./utils\");\nvar axios_1 = __importDefault(require(\"axios\"));\nvar Api = /** @class */ (function () {\n    function Api(params) {\n        var _this = this;\n        this.appendHeaders = function (headers) {\n            if (_this.personalAccessToken)\n                headers['X-Figma-Token'] = _this.personalAccessToken;\n            if (_this.oAuthToken)\n                headers['Authorization'] = \"Bearer \".concat(_this.oAuthToken);\n        };\n        this.request = function (url, opts) { return __awaiter(_this, void 0, void 0, function () {\n            var headers, axiosParams, res;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        headers = {};\n                        this.appendHeaders(headers);\n                        axiosParams = __assign(__assign({ url: url }, opts), { headers: headers });\n                        return [4 /*yield*/, (0, axios_1.default)(axiosParams)];\n                    case 1:\n                        res = _a.sent();\n                        if (Math.floor(res.status / 100) !== 2)\n                            throw res.statusText;\n                        return [2 /*return*/, res.data];\n                }\n            });\n        }); };\n        this.getFile = ApiEndpoints.getFileApi;\n        this.getFileNodes = ApiEndpoints.getFileNodesApi;\n        this.getImages = ApiEndpoints.getImagesApi;\n        this.getImageFills = ApiEndpoints.getImageFillsApi;\n        this.getComments = ApiEndpoints.getCommentsApi;\n        this.postComment = ApiEndpoints.postCommentApi;\n        this.deleteComment = ApiEndpoints.deleteCommentApi;\n        this.getCommentReactions = ApiEndpoints.getCommentReactionsApi;\n        this.postCommentReaction = ApiEndpoints.postCommentReactionApi;\n        this.deleteCommentReactions = ApiEndpoints.deleteCommentReactionsApi;\n        this.getUserMe = ApiEndpoints.getUserMeApi;\n        this.getFileVersions = ApiEndpoints.getFileVersionsApi;\n        this.getTeamProjects = ApiEndpoints.getTeamProjectsApi;\n        this.getProjectFiles = ApiEndpoints.getProjectFilesApi;\n        this.getTeamComponents = ApiEndpoints.getTeamComponentsApi;\n        this.getFileComponents = ApiEndpoints.getFileComponentsApi;\n        this.getComponent = ApiEndpoints.getComponentApi;\n        this.getTeamComponentSets = ApiEndpoints.getTeamComponentSetsApi;\n        this.getFileComponentSets = ApiEndpoints.getFileComponentSetsApi;\n        this.getComponentSet = ApiEndpoints.getComponentSetApi;\n        this.getTeamStyles = ApiEndpoints.getTeamStylesApi;\n        this.getFileStyles = ApiEndpoints.getFileStylesApi;\n        this.getStyle = ApiEndpoints.getStyleApi;\n        this.getWebhook = ApiEndpoints.getWebhookApi;\n        this.postWebhook = ApiEndpoints.postWebhookApi;\n        this.putWebhook = ApiEndpoints.putWebhookApi;\n        this.deleteWebhook = ApiEndpoints.deleteWebhookApi;\n        this.getTeamWebhooks = ApiEndpoints.getTeamWebhooksApi;\n        this.getWebhookRequests = ApiEndpoints.getWebhookRequestsApi;\n        this.getLocalVariables = ApiEndpoints.getLocalVariablesApi;\n        this.getPublishedVariables = ApiEndpoints.getPublishedVariablesApi;\n        this.postVariables = ApiEndpoints.postVariablesApi;\n        this.getDevResources = ApiEndpoints.getDevResourcesApi;\n        this.postDevResources = ApiEndpoints.postDevResourcesApi;\n        this.putDevResources = ApiEndpoints.putDevResourcesApi;\n        this.deleteDevResources = ApiEndpoints.deleteDevResourcesApi;\n        this.getLibraryAnalyticsComponentActions = ApiEndpoints.getLibraryAnalyticsComponentActionsApi;\n        this.getLibraryAnalyticsComponentUsages = ApiEndpoints.getLibraryAnalyticsComponentUsagesApi;\n        this.getLibraryAnalyticsStyleActions = ApiEndpoints.getLibraryAnalyticsStyleActionsApi;\n        this.getLibraryAnalyticsStyleUsages = ApiEndpoints.getLibraryAnalyticsStyleUsagesApi;\n        this.getLibraryAnalyticsVariableActions = ApiEndpoints.getLibraryAnalyticsVariableActionsApi;\n        this.getLibraryAnalyticsVariableUsages = ApiEndpoints.getLibraryAnalyticsVariableUsagesApi;\n        if ('personalAccessToken' in params) {\n            this.personalAccessToken = params.personalAccessToken;\n        }\n        if ('oAuthToken' in params) {\n            this.oAuthToken = params.oAuthToken;\n        }\n    }\n    return Api;\n}());\nexports.Api = Api;\n// see: https://www.figma.com/developers/api#auth-oauth2\nfunction oAuthLink(client_id, redirect_uri, scope, state, response_type) {\n    var queryParams = (0, utils_1.toQueryParams)({\n        client_id: client_id,\n        redirect_uri: redirect_uri,\n        scope: scope,\n        state: state,\n        response_type: response_type,\n    });\n    return \"https://www.figma.com/oauth?\".concat(queryParams);\n}\nfunction oAuthToken(client_id, client_secret, redirect_uri, code, grant_type) {\n    return __awaiter(this, void 0, void 0, function () {\n        var headers, queryParams, url, res;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    headers = {\n                        'Authorization': \"Basic \".concat(Buffer.from(\"\".concat(client_id, \":\").concat(client_secret)).toString('base64')),\n                    };\n                    queryParams = (0, utils_1.toQueryParams)({\n                        redirect_uri: redirect_uri,\n                        code: code,\n                        grant_type: grant_type,\n                    });\n                    url = \"https://api.figma.com/v1/oauth/token?\".concat(queryParams);\n                    return [4 /*yield*/, axios_1.default.post(url, null, { headers: headers })];\n                case 1:\n                    res = _a.sent();\n                    if (res.status !== 200)\n                        throw res.statusText;\n                    return [2 /*return*/, res.data];\n            }\n        });\n    });\n}\n"
  },
  {
    "path": "lib/api-endpoints.d.ts",
    "content": "import { ApiRequestMethod } from \"./utils\";\ntype ApiClass = {\n    request: ApiRequestMethod;\n};\nimport type * as FigmaRestAPI from '@figma/rest-api-spec';\nexport declare function getFileApi(this: ApiClass, pathParams: FigmaRestAPI.GetFilePathParams, queryParams?: FigmaRestAPI.GetFileQueryParams): Promise<FigmaRestAPI.GetFileResponse>;\nexport declare function getFileNodesApi(this: ApiClass, pathParams: FigmaRestAPI.GetFileNodesPathParams, queryParams?: FigmaRestAPI.GetFileNodesQueryParams): Promise<FigmaRestAPI.GetFileNodesResponse>;\nexport declare function getImagesApi(this: ApiClass, pathParams: FigmaRestAPI.GetImagesPathParams, queryParams?: FigmaRestAPI.GetImagesQueryParams): Promise<FigmaRestAPI.GetImagesResponse>;\nexport declare function getImageFillsApi(this: ApiClass, pathParams: FigmaRestAPI.GetImageFillsPathParams): Promise<FigmaRestAPI.GetImageFillsResponse>;\nexport declare function getCommentsApi(this: ApiClass, pathParams: FigmaRestAPI.GetCommentsPathParams): Promise<FigmaRestAPI.GetCommentsResponse>;\nexport declare function postCommentApi(this: ApiClass, pathParams: FigmaRestAPI.PostCommentPathParams, requestBody?: FigmaRestAPI.PostCommentRequestBody): Promise<FigmaRestAPI.PostCommentResponse>;\nexport declare function deleteCommentApi(this: ApiClass, pathParams: FigmaRestAPI.DeleteCommentPathParams): Promise<FigmaRestAPI.DeleteCommentResponse>;\nexport declare function getCommentReactionsApi(this: ApiClass, pathParams: FigmaRestAPI.GetCommentReactionsPathParams, queryParams?: FigmaRestAPI.GetCommentReactionsQueryParams): Promise<FigmaRestAPI.GetCommentsResponse>;\nexport declare function postCommentReactionApi(this: ApiClass, pathParams: FigmaRestAPI.PostCommentReactionPathParams, requestBody?: FigmaRestAPI.PostCommentReactionRequestBody): Promise<FigmaRestAPI.PostCommentResponse>;\nexport declare function deleteCommentReactionsApi(this: ApiClass, pathParams: FigmaRestAPI.DeleteCommentReactionPathParams): Promise<FigmaRestAPI.DeleteCommentReactionResponse>;\nexport declare function getUserMeApi(this: ApiClass): Promise<FigmaRestAPI.User>;\nexport declare function getFileVersionsApi(this: ApiClass, pathParams: FigmaRestAPI.GetFileVersionsPathParams): Promise<FigmaRestAPI.GetFileVersionsResponse>;\nexport declare function getTeamProjectsApi(this: ApiClass, pathParams: FigmaRestAPI.GetTeamProjectsPathParams): Promise<FigmaRestAPI.GetTeamProjectsResponse>;\nexport declare function getProjectFilesApi(this: ApiClass, pathParams: FigmaRestAPI.GetProjectFilesPathParams, queryParams?: FigmaRestAPI.GetProjectFilesQueryParams): Promise<FigmaRestAPI.GetProjectFilesResponse>;\nexport declare function getTeamComponentsApi(this: ApiClass, pathParams: FigmaRestAPI.GetTeamComponentsPathParams, queryParams?: FigmaRestAPI.GetTeamComponentsQueryParams): Promise<FigmaRestAPI.GetTeamComponentsResponse>;\nexport declare function getFileComponentsApi(this: ApiClass, pathParams: FigmaRestAPI.GetFileComponentsPathParams): Promise<FigmaRestAPI.GetFileComponentsResponse>;\nexport declare function getComponentApi(this: ApiClass, pathParams: FigmaRestAPI.GetComponentPathParams): Promise<FigmaRestAPI.GetComponentResponse>;\nexport declare function getTeamComponentSetsApi(this: ApiClass, pathParams: FigmaRestAPI.GetTeamComponentSetsPathParams, queryParams?: FigmaRestAPI.GetTeamComponentSetsQueryParams): Promise<FigmaRestAPI.GetTeamComponentSetsResponse>;\nexport declare function getFileComponentSetsApi(this: ApiClass, pathParams: FigmaRestAPI.GetFileComponentSetsPathParams): Promise<FigmaRestAPI.GetFileComponentSetsResponse>;\nexport declare function getComponentSetApi(this: ApiClass, pathParams: FigmaRestAPI.GetComponentSetPathParams): Promise<FigmaRestAPI.GetComponentSetResponse>;\nexport declare function getTeamStylesApi(this: ApiClass, pathParams: FigmaRestAPI.GetTeamStylesPathParams, queryParams?: FigmaRestAPI.GetTeamStylesQueryParams): Promise<FigmaRestAPI.GetTeamStylesResponse>;\nexport declare function getFileStylesApi(this: ApiClass, pathParams: FigmaRestAPI.GetFileStylesPathParams): Promise<FigmaRestAPI.GetFileStylesResponse>;\nexport declare function getStyleApi(this: ApiClass, pathParams: FigmaRestAPI.GetStylePathParams): Promise<FigmaRestAPI.GetStyleResponse>;\nexport declare function getWebhookApi(this: ApiClass, pathParams: FigmaRestAPI.GetWebhookPathParams): Promise<FigmaRestAPI.GetWebhookResponse>;\nexport declare function postWebhookApi(this: ApiClass, requestBody?: FigmaRestAPI.PostWebhookRequestBody): Promise<FigmaRestAPI.PostWebhookResponse>;\nexport declare function putWebhookApi(this: ApiClass, pathParams: FigmaRestAPI.PutWebhookPathParams, requestBody?: FigmaRestAPI.PutWebhookRequestBody): Promise<FigmaRestAPI.PutWebhookResponse>;\nexport declare function deleteWebhookApi(this: ApiClass, pathParams: FigmaRestAPI.DeleteWebhookPathParams): Promise<FigmaRestAPI.DeleteWebhookResponse>;\nexport declare function getTeamWebhooksApi(this: ApiClass, pathParams: FigmaRestAPI.GetTeamWebhooksPathParams): Promise<FigmaRestAPI.GetTeamWebhooksResponse>;\nexport declare function getWebhookRequestsApi(this: ApiClass, pathParams: FigmaRestAPI.GetWebhookRequestsPathParams): Promise<FigmaRestAPI.GetWebhookRequestsResponse>;\nexport declare function getLocalVariablesApi(this: ApiClass, pathParams: FigmaRestAPI.GetLocalVariablesPathParams): Promise<FigmaRestAPI.GetLocalVariablesResponse>;\nexport declare function getPublishedVariablesApi(this: ApiClass, pathParams: FigmaRestAPI.GetPublishedVariablesPathParams): Promise<FigmaRestAPI.GetPublishedVariablesResponse>;\nexport declare function postVariablesApi(this: ApiClass, pathParams: FigmaRestAPI.PostVariablesPathParams, requestBody?: FigmaRestAPI.PostVariablesRequestBody): Promise<FigmaRestAPI.PostVariablesResponse>;\nexport declare function getDevResourcesApi(this: ApiClass, pathParams: FigmaRestAPI.GetDevResourcesPathParams, queryParams?: FigmaRestAPI.GetDevResourcesQueryParams): Promise<FigmaRestAPI.GetDevResourcesResponse>;\nexport declare function postDevResourcesApi(this: ApiClass, requestBody?: FigmaRestAPI.PostDevResourcesRequestBody): Promise<FigmaRestAPI.PostDevResourcesResponse>;\nexport declare function putDevResourcesApi(this: ApiClass, requestBody?: FigmaRestAPI.PutDevResourcesRequestBody): Promise<FigmaRestAPI.PutDevResourcesResponse>;\nexport declare function deleteDevResourcesApi(this: ApiClass, pathParams: FigmaRestAPI.DeleteDevResourcePathParams): Promise<FigmaRestAPI.DeleteDevResourceResponse>;\nexport declare function getLibraryAnalyticsComponentActionsApi(this: ApiClass, pathParams: FigmaRestAPI.GetLibraryAnalyticsComponentActionsPathParams, queryParams?: FigmaRestAPI.GetLibraryAnalyticsComponentActionsQueryParams): Promise<FigmaRestAPI.GetLibraryAnalyticsComponentActionsResponse>;\nexport declare function getLibraryAnalyticsComponentUsagesApi(this: ApiClass, pathParams: FigmaRestAPI.GetLibraryAnalyticsComponentUsagesPathParams, queryParams?: FigmaRestAPI.GetLibraryAnalyticsComponentUsagesQueryParams): Promise<FigmaRestAPI.GetLibraryAnalyticsComponentUsagesResponse>;\nexport declare function getLibraryAnalyticsStyleActionsApi(this: ApiClass, pathParams: FigmaRestAPI.GetLibraryAnalyticsStyleActionsPathParams, queryParams?: FigmaRestAPI.GetLibraryAnalyticsStyleActionsQueryParams): Promise<FigmaRestAPI.GetLibraryAnalyticsStyleActionsResponse>;\nexport declare function getLibraryAnalyticsStyleUsagesApi(this: ApiClass, pathParams: FigmaRestAPI.GetLibraryAnalyticsStyleUsagesPathParams, queryParams?: FigmaRestAPI.GetLibraryAnalyticsStyleUsagesQueryParams): Promise<FigmaRestAPI.GetLibraryAnalyticsStyleUsagesResponse>;\nexport declare function getLibraryAnalyticsVariableActionsApi(this: ApiClass, pathParams: FigmaRestAPI.GetLibraryAnalyticsVariableActionsPathParams, queryParams?: FigmaRestAPI.GetLibraryAnalyticsVariableActionsQueryParams): Promise<FigmaRestAPI.GetLibraryAnalyticsVariableActionsResponse>;\nexport declare function getLibraryAnalyticsVariableUsagesApi(this: ApiClass, pathParams: FigmaRestAPI.GetLibraryAnalyticsVariableUsagesPathParams, queryParams?: FigmaRestAPI.GetLibraryAnalyticsVariableUsagesQueryParams): Promise<FigmaRestAPI.GetLibraryAnalyticsVariableUsagesResponse>;\nexport {};\n"
  },
  {
    "path": "lib/api-endpoints.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFileApi = getFileApi;\nexports.getFileNodesApi = getFileNodesApi;\nexports.getImagesApi = getImagesApi;\nexports.getImageFillsApi = getImageFillsApi;\nexports.getCommentsApi = getCommentsApi;\nexports.postCommentApi = postCommentApi;\nexports.deleteCommentApi = deleteCommentApi;\nexports.getCommentReactionsApi = getCommentReactionsApi;\nexports.postCommentReactionApi = postCommentReactionApi;\nexports.deleteCommentReactionsApi = deleteCommentReactionsApi;\nexports.getUserMeApi = getUserMeApi;\nexports.getFileVersionsApi = getFileVersionsApi;\nexports.getTeamProjectsApi = getTeamProjectsApi;\nexports.getProjectFilesApi = getProjectFilesApi;\nexports.getTeamComponentsApi = getTeamComponentsApi;\nexports.getFileComponentsApi = getFileComponentsApi;\nexports.getComponentApi = getComponentApi;\nexports.getTeamComponentSetsApi = getTeamComponentSetsApi;\nexports.getFileComponentSetsApi = getFileComponentSetsApi;\nexports.getComponentSetApi = getComponentSetApi;\nexports.getTeamStylesApi = getTeamStylesApi;\nexports.getFileStylesApi = getFileStylesApi;\nexports.getStyleApi = getStyleApi;\nexports.getWebhookApi = getWebhookApi;\nexports.postWebhookApi = postWebhookApi;\nexports.putWebhookApi = putWebhookApi;\nexports.deleteWebhookApi = deleteWebhookApi;\nexports.getTeamWebhooksApi = getTeamWebhooksApi;\nexports.getWebhookRequestsApi = getWebhookRequestsApi;\nexports.getLocalVariablesApi = getLocalVariablesApi;\nexports.getPublishedVariablesApi = getPublishedVariablesApi;\nexports.postVariablesApi = postVariablesApi;\nexports.getDevResourcesApi = getDevResourcesApi;\nexports.postDevResourcesApi = postDevResourcesApi;\nexports.putDevResourcesApi = putDevResourcesApi;\nexports.deleteDevResourcesApi = deleteDevResourcesApi;\nexports.getLibraryAnalyticsComponentActionsApi = getLibraryAnalyticsComponentActionsApi;\nexports.getLibraryAnalyticsComponentUsagesApi = getLibraryAnalyticsComponentUsagesApi;\nexports.getLibraryAnalyticsStyleActionsApi = getLibraryAnalyticsStyleActionsApi;\nexports.getLibraryAnalyticsStyleUsagesApi = getLibraryAnalyticsStyleUsagesApi;\nexports.getLibraryAnalyticsVariableActionsApi = getLibraryAnalyticsVariableActionsApi;\nexports.getLibraryAnalyticsVariableUsagesApi = getLibraryAnalyticsVariableUsagesApi;\nvar config_1 = require(\"./config\");\nvar utils_1 = require(\"./utils\");\n// FILES\n// https://www.figma.com/developers/api#files-endpoints\n// -----------------------------------------------------------------\nfunction getFileApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"?\").concat(encodedQueryParams));\n}\nfunction getFileNodesApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/nodes?\").concat(encodedQueryParams));\n}\nfunction getImagesApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/images/\").concat(pathParams.file_key, \"?\").concat(encodedQueryParams));\n}\nfunction getImageFillsApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/images\"));\n}\n// COMMENTS\n// https://www.figma.com/developers/api#comments-endpoints\n// -----------------------------------------------------------------\nfunction getCommentsApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/comments\"));\n}\nfunction postCommentApi(pathParams, requestBody) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/comments\"), {\n        method: 'POST',\n        data: requestBody,\n    });\n}\nfunction deleteCommentApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/comments/\").concat(pathParams.comment_id), {\n        method: 'DELETE',\n        data: ''\n    });\n}\nfunction getCommentReactionsApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/comments/\").concat(pathParams.comment_id, \"/reactions?\").concat(encodedQueryParams));\n}\nfunction postCommentReactionApi(pathParams, requestBody) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/comments/\").concat(pathParams.comment_id, \"/reactions\"), {\n        method: 'POST',\n        data: requestBody,\n    });\n}\nfunction deleteCommentReactionsApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/comments/\").concat(pathParams.comment_id, \"/reactions\"), {\n        method: 'DELETE',\n        data: ''\n    });\n}\n// USERS\n// https://www.figma.com/developers/api#users-endpoints\n// -----------------------------------------------------------------\nfunction getUserMeApi() {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/me\"));\n}\n// VERSION HISTORY (FILE VERSIONS)\n// https://www.figma.com/developers/api#version-history-endpoints\n// -----------------------------------------------------------------\nfunction getFileVersionsApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/versions\"));\n}\n// PROJECTS\n// https://www.figma.com/developers/api#projects-endpoints\n// -----------------------------------------------------------------\nfunction getTeamProjectsApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/teams/\").concat(pathParams.team_id, \"/projects\"));\n}\nfunction getProjectFilesApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/projects/\").concat(pathParams.project_id, \"/files?\").concat(encodedQueryParams));\n}\n// COMPONENTS AND STYLES (LIBRARY ITEMS)\n// https://www.figma.com/developers/api#library-items-endpoints\n// -----------------------------------------------------------------\nfunction getTeamComponentsApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/teams/\").concat(pathParams.team_id, \"/components?\").concat(encodedQueryParams));\n}\nfunction getFileComponentsApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/components\"));\n}\nfunction getComponentApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/components/\").concat(pathParams.key));\n}\nfunction getTeamComponentSetsApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/teams/\").concat(pathParams.team_id, \"/component_sets?\").concat(encodedQueryParams));\n}\nfunction getFileComponentSetsApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/component_sets\"));\n}\nfunction getComponentSetApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/component_sets/\").concat(pathParams.key));\n}\nfunction getTeamStylesApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/teams/\").concat(pathParams.team_id, \"/styles?\").concat(encodedQueryParams));\n}\nfunction getFileStylesApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/styles\"));\n}\nfunction getStyleApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/styles/\").concat(pathParams.key));\n}\n// WEBHOOKS\n// https://www.figma.com/developers/api#webhooks_v2\n// -----------------------------------------------------------------\nfunction getWebhookApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER_WEBHOOKS, \"/webhooks/\").concat(pathParams.webhook_id));\n}\nfunction postWebhookApi(requestBody) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER_WEBHOOKS, \"/webhooks\"), {\n        method: 'POST',\n        data: requestBody,\n    });\n}\nfunction putWebhookApi(pathParams, requestBody) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER_WEBHOOKS, \"/webhooks/\").concat(pathParams.webhook_id), {\n        method: 'PUT',\n        data: requestBody,\n    });\n}\nfunction deleteWebhookApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER_WEBHOOKS, \"/webhooks/\").concat(pathParams.webhook_id, \"/\"), {\n        method: 'DELETE',\n        data: ''\n    });\n}\nfunction getTeamWebhooksApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER_WEBHOOKS, \"/teams/\").concat(pathParams.team_id, \"/webhooks\"));\n}\nfunction getWebhookRequestsApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER_WEBHOOKS, \"/webhooks/\").concat(pathParams.webhook_id, \"/requests\"));\n}\n// ACTIVITY LOGS\n// https://www.figma.com/developers/api#activity-logs-endpoints\n// -----------------------------------------------------------------\n// TODO - Open to contributions if someone is needs to use these endpoints\n// PAYMENTS\n// https://www.figma.com/developers/api#payments-endpoints\n// -----------------------------------------------------------------\n// TODO - Open to contributions if someone is needs to use these endpoints\n// VARIABLES\n// These APIs are available only to full members of Enterprise orgs.\n// https://www.figma.com/developers/api#variables-endpoints\n// -----------------------------------------------------------------\nfunction getLocalVariablesApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/variables/local\"));\n}\nfunction getPublishedVariablesApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/variables/published\"));\n}\nfunction postVariablesApi(pathParams, requestBody) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/variables\"), {\n        method: 'POST',\n        data: requestBody,\n    });\n}\n// DEV RESOURCES\n// https://www.figma.com/developers/api#dev-resources-endpoints\n// -----------------------------------------------------------------\nfunction getDevResourcesApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/dev_resources\"));\n}\nfunction postDevResourcesApi(requestBody) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/dev_resources\"), {\n        method: 'POST',\n        data: requestBody,\n    });\n}\nfunction putDevResourcesApi(requestBody) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/dev_resources\"), {\n        method: 'PUT',\n        data: requestBody,\n    });\n}\nfunction deleteDevResourcesApi(pathParams) {\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/files/\").concat(pathParams.file_key, \"/dev_resources/\").concat(pathParams.dev_resource_id), {\n        method: 'DELETE',\n        data: ''\n    });\n}\n// ANALYTICS\n// https://www.figma.com/developers/api#library-analytics-endpoints\n// -----------------------------------------------------------------\nfunction getLibraryAnalyticsComponentActionsApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/analytics/libraries/\").concat(pathParams.file_key, \"/component/actions?\").concat(encodedQueryParams));\n}\nfunction getLibraryAnalyticsComponentUsagesApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/analytics/libraries/\").concat(pathParams.file_key, \"/component/usages?\").concat(encodedQueryParams));\n}\nfunction getLibraryAnalyticsStyleActionsApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/analytics/libraries/\").concat(pathParams.file_key, \"/style/actions?\").concat(encodedQueryParams));\n}\nfunction getLibraryAnalyticsStyleUsagesApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/analytics/libraries/\").concat(pathParams.file_key, \"/style/usages?\").concat(encodedQueryParams));\n}\nfunction getLibraryAnalyticsVariableActionsApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/analytics/libraries/\").concat(pathParams.file_key, \"/variable/actions?\").concat(encodedQueryParams));\n}\nfunction getLibraryAnalyticsVariableUsagesApi(pathParams, queryParams) {\n    var encodedQueryParams = (0, utils_1.toQueryParams)(queryParams);\n    return this.request(\"\".concat(config_1.API_DOMAIN, \"/\").concat(config_1.API_VER, \"/analytics/libraries/\").concat(pathParams.file_key, \"/variable/usages?\").concat(encodedQueryParams));\n}\n"
  },
  {
    "path": "lib/config.d.ts",
    "content": "export declare const API_DOMAIN = \"https://api.figma.com\";\nexport declare const API_VER = \"v1\";\nexport declare const API_VER_WEBHOOKS = \"v2\";\n"
  },
  {
    "path": "lib/config.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.API_VER_WEBHOOKS = exports.API_VER = exports.API_DOMAIN = void 0;\nexports.API_DOMAIN = 'https://api.figma.com';\nexports.API_VER = 'v1';\nexports.API_VER_WEBHOOKS = 'v2';\n"
  },
  {
    "path": "lib/figma-api.js",
    "content": "\"use strict\";\nvar Figma = (() => {\n  var __defProp = Object.defineProperty;\n  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n  var __getOwnPropNames = Object.getOwnPropertyNames;\n  var __hasOwnProp = Object.prototype.hasOwnProperty;\n  var __export = (target, all3) => {\n    for (var name in all3)\n      __defProp(target, name, { get: all3[name], enumerable: true });\n  };\n  var __copyProps = (to, from, except, desc) => {\n    if (from && typeof from === \"object\" || typeof from === \"function\") {\n      for (let key of __getOwnPropNames(from))\n        if (!__hasOwnProp.call(to, key) && key !== except)\n          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n    }\n    return to;\n  };\n  var __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n  // src/index.ts\n  var index_exports = {};\n  __export(index_exports, {\n    API_DOMAIN: () => API_DOMAIN,\n    API_VER: () => API_VER,\n    API_VER_WEBHOOKS: () => API_VER_WEBHOOKS,\n    Api: () => Api,\n    oAuthLink: () => oAuthLink,\n    oAuthToken: () => oAuthToken\n  });\n\n  // src/config.ts\n  var API_DOMAIN = \"https://api.figma.com\";\n  var API_VER = \"v1\";\n  var API_VER_WEBHOOKS = \"v2\";\n\n  // src/utils.ts\n  function toQueryParams(x) {\n    if (!x) return \"\";\n    return Object.entries(x).map(([k, v]) => (\n      // Keep explicit false/0 values (e.g. svg_outline_text=false), only omit undefined/null/empty-string.\n      k && v !== void 0 && v !== null && v !== \"\" && `${k}=${encodeURIComponent(v)}`\n    )).filter(Boolean).join(\"&\");\n  }\n  var ApiError = class _ApiError extends Error {\n    constructor(error) {\n      super(error.message);\n      this.error = error;\n      this.name = \"ApiError\";\n      if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, _ApiError);\n      }\n    }\n  };\n\n  // src/api-endpoints.ts\n  function getFileApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}?${encodedQueryParams}`);\n  }\n  function getFileNodesApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/nodes?${encodedQueryParams}`);\n  }\n  function getFileMetaApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/meta`);\n  }\n  function getImagesApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/images/${pathParams.file_key}?${encodedQueryParams}`);\n  }\n  function getImageFillsApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/images`);\n  }\n  function getCommentsApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments`);\n  }\n  function postCommentApi(pathParams, requestBody) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments`, {\n      method: \"POST\",\n      data: requestBody\n    });\n  }\n  function deleteCommentApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments/${pathParams.comment_id}`, {\n      method: \"DELETE\",\n      data: \"\"\n    });\n  }\n  function getCommentReactionsApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments/${pathParams.comment_id}/reactions?${encodedQueryParams}`);\n  }\n  function postCommentReactionApi(pathParams, requestBody) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments/${pathParams.comment_id}/reactions`, {\n      method: \"POST\",\n      data: requestBody\n    });\n  }\n  function deleteCommentReactionsApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments/${pathParams.comment_id}/reactions`, {\n      method: \"DELETE\",\n      data: \"\"\n    });\n  }\n  function getUserMeApi() {\n    return this.request(`${API_DOMAIN}/${API_VER}/me`);\n  }\n  function getFileVersionsApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/versions`);\n  }\n  function getTeamProjectsApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/teams/${pathParams.team_id}/projects`);\n  }\n  function getProjectFilesApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/projects/${pathParams.project_id}/files?${encodedQueryParams}`);\n  }\n  function getTeamComponentsApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/teams/${pathParams.team_id}/components?${encodedQueryParams}`);\n  }\n  function getFileComponentsApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/components`);\n  }\n  function getComponentApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/components/${pathParams.key}`);\n  }\n  function getTeamComponentSetsApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/teams/${pathParams.team_id}/component_sets?${encodedQueryParams}`);\n  }\n  function getFileComponentSetsApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/component_sets`);\n  }\n  function getComponentSetApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/component_sets/${pathParams.key}`);\n  }\n  function getTeamStylesApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/teams/${pathParams.team_id}/styles?${encodedQueryParams}`);\n  }\n  function getFileStylesApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/styles`);\n  }\n  function getStyleApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/styles/${pathParams.key}`);\n  }\n  function getWebhookApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks/${pathParams.webhook_id}`);\n  }\n  function postWebhookApi(requestBody) {\n    return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks`, {\n      method: \"POST\",\n      data: requestBody\n    });\n  }\n  function putWebhookApi(pathParams, requestBody) {\n    return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks/${pathParams.webhook_id}`, {\n      method: \"PUT\",\n      data: requestBody\n    });\n  }\n  function deleteWebhookApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks/${pathParams.webhook_id}/`, {\n      method: \"DELETE\",\n      data: \"\"\n    });\n  }\n  function getTeamWebhooksApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/teams/${pathParams.team_id}/webhooks`);\n  }\n  function getWebhookRequestsApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks/${pathParams.webhook_id}/requests`);\n  }\n  function getLocalVariablesApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/variables/local`);\n  }\n  function getPublishedVariablesApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/variables/published`);\n  }\n  function postVariablesApi(pathParams, requestBody) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/variables`, {\n      method: \"POST\",\n      data: requestBody\n    });\n  }\n  function getDevResourcesApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/dev_resources`);\n  }\n  function postDevResourcesApi(requestBody) {\n    return this.request(`${API_DOMAIN}/${API_VER}/dev_resources`, {\n      method: \"POST\",\n      data: requestBody\n    });\n  }\n  function putDevResourcesApi(requestBody) {\n    return this.request(`${API_DOMAIN}/${API_VER}/dev_resources`, {\n      method: \"PUT\",\n      data: requestBody\n    });\n  }\n  function deleteDevResourcesApi(pathParams) {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/dev_resources/${pathParams.dev_resource_id}`, {\n      method: \"DELETE\",\n      data: \"\"\n    });\n  }\n  function getLibraryAnalyticsComponentActionsApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/component/actions?${encodedQueryParams}`);\n  }\n  function getLibraryAnalyticsComponentUsagesApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/component/usages?${encodedQueryParams}`);\n  }\n  function getLibraryAnalyticsStyleActionsApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/style/actions?${encodedQueryParams}`);\n  }\n  function getLibraryAnalyticsStyleUsagesApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/style/usages?${encodedQueryParams}`);\n  }\n  function getLibraryAnalyticsVariableActionsApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/variable/actions?${encodedQueryParams}`);\n  }\n  function getLibraryAnalyticsVariableUsagesApi(pathParams, queryParams) {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/variable/usages?${encodedQueryParams}`);\n  }\n\n  // node_modules/axios/lib/helpers/bind.js\n  function bind(fn, thisArg) {\n    return function wrap() {\n      return fn.apply(thisArg, arguments);\n    };\n  }\n\n  // node_modules/axios/lib/utils.js\n  var { toString } = Object.prototype;\n  var { getPrototypeOf } = Object;\n  var { iterator, toStringTag } = Symbol;\n  var kindOf = /* @__PURE__ */ ((cache) => (thing) => {\n    const str = toString.call(thing);\n    return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n  })(/* @__PURE__ */ Object.create(null));\n  var kindOfTest = (type) => {\n    type = type.toLowerCase();\n    return (thing) => kindOf(thing) === type;\n  };\n  var typeOfTest = (type) => (thing) => typeof thing === type;\n  var { isArray } = Array;\n  var isUndefined = typeOfTest(\"undefined\");\n  function isBuffer(val) {\n    return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n  }\n  var isArrayBuffer = kindOfTest(\"ArrayBuffer\");\n  function isArrayBufferView(val) {\n    let result;\n    if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView) {\n      result = ArrayBuffer.isView(val);\n    } else {\n      result = val && val.buffer && isArrayBuffer(val.buffer);\n    }\n    return result;\n  }\n  var isString = typeOfTest(\"string\");\n  var isFunction = typeOfTest(\"function\");\n  var isNumber = typeOfTest(\"number\");\n  var isObject = (thing) => thing !== null && typeof thing === \"object\";\n  var isBoolean = (thing) => thing === true || thing === false;\n  var isPlainObject = (val) => {\n    if (kindOf(val) !== \"object\") {\n      return false;\n    }\n    const prototype2 = getPrototypeOf(val);\n    return (prototype2 === null || prototype2 === Object.prototype || Object.getPrototypeOf(prototype2) === null) && !(toStringTag in val) && !(iterator in val);\n  };\n  var isEmptyObject = (val) => {\n    if (!isObject(val) || isBuffer(val)) {\n      return false;\n    }\n    try {\n      return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n    } catch (e) {\n      return false;\n    }\n  };\n  var isDate = kindOfTest(\"Date\");\n  var isFile = kindOfTest(\"File\");\n  var isReactNativeBlob = (value) => {\n    return !!(value && typeof value.uri !== \"undefined\");\n  };\n  var isReactNative = (formData) => formData && typeof formData.getParts !== \"undefined\";\n  var isBlob = kindOfTest(\"Blob\");\n  var isFileList = kindOfTest(\"FileList\");\n  var isStream = (val) => isObject(val) && isFunction(val.pipe);\n  function getGlobal() {\n    if (typeof globalThis !== \"undefined\") return globalThis;\n    if (typeof self !== \"undefined\") return self;\n    if (typeof window !== \"undefined\") return window;\n    if (typeof global !== \"undefined\") return global;\n    return {};\n  }\n  var G = getGlobal();\n  var FormDataCtor = typeof G.FormData !== \"undefined\" ? G.FormData : void 0;\n  var isFormData = (thing) => {\n    if (!thing) return false;\n    if (FormDataCtor && thing instanceof FormDataCtor) return true;\n    const proto = getPrototypeOf(thing);\n    if (!proto || proto === Object.prototype) return false;\n    if (!isFunction(thing.append)) return false;\n    const kind = kindOf(thing);\n    return kind === \"formdata\" || // detect form-data instance\n    kind === \"object\" && isFunction(thing.toString) && thing.toString() === \"[object FormData]\";\n  };\n  var isURLSearchParams = kindOfTest(\"URLSearchParams\");\n  var [isReadableStream, isRequest, isResponse, isHeaders] = [\n    \"ReadableStream\",\n    \"Request\",\n    \"Response\",\n    \"Headers\"\n  ].map(kindOfTest);\n  var trim = (str) => {\n    return str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\n  };\n  function forEach(obj, fn, { allOwnKeys = false } = {}) {\n    if (obj === null || typeof obj === \"undefined\") {\n      return;\n    }\n    let i;\n    let l;\n    if (typeof obj !== \"object\") {\n      obj = [obj];\n    }\n    if (isArray(obj)) {\n      for (i = 0, l = obj.length; i < l; i++) {\n        fn.call(null, obj[i], i, obj);\n      }\n    } else {\n      if (isBuffer(obj)) {\n        return;\n      }\n      const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n      const len = keys.length;\n      let key;\n      for (i = 0; i < len; i++) {\n        key = keys[i];\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n  function findKey(obj, key) {\n    if (isBuffer(obj)) {\n      return null;\n    }\n    key = key.toLowerCase();\n    const keys = Object.keys(obj);\n    let i = keys.length;\n    let _key;\n    while (i-- > 0) {\n      _key = keys[i];\n      if (key === _key.toLowerCase()) {\n        return _key;\n      }\n    }\n    return null;\n  }\n  var _global = (() => {\n    if (typeof globalThis !== \"undefined\") return globalThis;\n    return typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : global;\n  })();\n  var isContextDefined = (context) => !isUndefined(context) && context !== _global;\n  function merge() {\n    const { caseless, skipUndefined } = isContextDefined(this) && this || {};\n    const result = {};\n    const assignValue = (val, key) => {\n      if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\n        return;\n      }\n      const targetKey = caseless && findKey(result, key) || key;\n      if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n        result[targetKey] = merge(result[targetKey], val);\n      } else if (isPlainObject(val)) {\n        result[targetKey] = merge({}, val);\n      } else if (isArray(val)) {\n        result[targetKey] = val.slice();\n      } else if (!skipUndefined || !isUndefined(val)) {\n        result[targetKey] = val;\n      }\n    };\n    for (let i = 0, l = arguments.length; i < l; i++) {\n      arguments[i] && forEach(arguments[i], assignValue);\n    }\n    return result;\n  }\n  var extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n    forEach(\n      b,\n      (val, key) => {\n        if (thisArg && isFunction(val)) {\n          Object.defineProperty(a, key, {\n            value: bind(val, thisArg),\n            writable: true,\n            enumerable: true,\n            configurable: true\n          });\n        } else {\n          Object.defineProperty(a, key, {\n            value: val,\n            writable: true,\n            enumerable: true,\n            configurable: true\n          });\n        }\n      },\n      { allOwnKeys }\n    );\n    return a;\n  };\n  var stripBOM = (content) => {\n    if (content.charCodeAt(0) === 65279) {\n      content = content.slice(1);\n    }\n    return content;\n  };\n  var inherits = (constructor, superConstructor, props, descriptors) => {\n    constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n    Object.defineProperty(constructor.prototype, \"constructor\", {\n      value: constructor,\n      writable: true,\n      enumerable: false,\n      configurable: true\n    });\n    Object.defineProperty(constructor, \"super\", {\n      value: superConstructor.prototype\n    });\n    props && Object.assign(constructor.prototype, props);\n  };\n  var toFlatObject = (sourceObj, destObj, filter2, propFilter) => {\n    let props;\n    let i;\n    let prop;\n    const merged = {};\n    destObj = destObj || {};\n    if (sourceObj == null) return destObj;\n    do {\n      props = Object.getOwnPropertyNames(sourceObj);\n      i = props.length;\n      while (i-- > 0) {\n        prop = props[i];\n        if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n          destObj[prop] = sourceObj[prop];\n          merged[prop] = true;\n        }\n      }\n      sourceObj = filter2 !== false && getPrototypeOf(sourceObj);\n    } while (sourceObj && (!filter2 || filter2(sourceObj, destObj)) && sourceObj !== Object.prototype);\n    return destObj;\n  };\n  var endsWith = (str, searchString, position) => {\n    str = String(str);\n    if (position === void 0 || position > str.length) {\n      position = str.length;\n    }\n    position -= searchString.length;\n    const lastIndex = str.indexOf(searchString, position);\n    return lastIndex !== -1 && lastIndex === position;\n  };\n  var toArray = (thing) => {\n    if (!thing) return null;\n    if (isArray(thing)) return thing;\n    let i = thing.length;\n    if (!isNumber(i)) return null;\n    const arr = new Array(i);\n    while (i-- > 0) {\n      arr[i] = thing[i];\n    }\n    return arr;\n  };\n  var isTypedArray = /* @__PURE__ */ ((TypedArray) => {\n    return (thing) => {\n      return TypedArray && thing instanceof TypedArray;\n    };\n  })(typeof Uint8Array !== \"undefined\" && getPrototypeOf(Uint8Array));\n  var forEachEntry = (obj, fn) => {\n    const generator = obj && obj[iterator];\n    const _iterator = generator.call(obj);\n    let result;\n    while ((result = _iterator.next()) && !result.done) {\n      const pair = result.value;\n      fn.call(obj, pair[0], pair[1]);\n    }\n  };\n  var matchAll = (regExp, str) => {\n    let matches;\n    const arr = [];\n    while ((matches = regExp.exec(str)) !== null) {\n      arr.push(matches);\n    }\n    return arr;\n  };\n  var isHTMLForm = kindOfTest(\"HTMLFormElement\");\n  var toCamelCase = (str) => {\n    return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n      return p1.toUpperCase() + p2;\n    });\n  };\n  var hasOwnProperty = (({ hasOwnProperty: hasOwnProperty2 }) => (obj, prop) => hasOwnProperty2.call(obj, prop))(Object.prototype);\n  var isRegExp = kindOfTest(\"RegExp\");\n  var reduceDescriptors = (obj, reducer) => {\n    const descriptors = Object.getOwnPropertyDescriptors(obj);\n    const reducedDescriptors = {};\n    forEach(descriptors, (descriptor, name) => {\n      let ret;\n      if ((ret = reducer(descriptor, name, obj)) !== false) {\n        reducedDescriptors[name] = ret || descriptor;\n      }\n    });\n    Object.defineProperties(obj, reducedDescriptors);\n  };\n  var freezeMethods = (obj) => {\n    reduceDescriptors(obj, (descriptor, name) => {\n      if (isFunction(obj) && [\"arguments\", \"caller\", \"callee\"].indexOf(name) !== -1) {\n        return false;\n      }\n      const value = obj[name];\n      if (!isFunction(value)) return;\n      descriptor.enumerable = false;\n      if (\"writable\" in descriptor) {\n        descriptor.writable = false;\n        return;\n      }\n      if (!descriptor.set) {\n        descriptor.set = () => {\n          throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n        };\n      }\n    });\n  };\n  var toObjectSet = (arrayOrString, delimiter) => {\n    const obj = {};\n    const define = (arr) => {\n      arr.forEach((value) => {\n        obj[value] = true;\n      });\n    };\n    isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n    return obj;\n  };\n  var noop = () => {\n  };\n  var toFiniteNumber = (value, defaultValue) => {\n    return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n  };\n  function isSpecCompliantForm(thing) {\n    return !!(thing && isFunction(thing.append) && thing[toStringTag] === \"FormData\" && thing[iterator]);\n  }\n  var toJSONObject = (obj) => {\n    const stack = new Array(10);\n    const visit = (source, i) => {\n      if (isObject(source)) {\n        if (stack.indexOf(source) >= 0) {\n          return;\n        }\n        if (isBuffer(source)) {\n          return source;\n        }\n        if (!(\"toJSON\" in source)) {\n          stack[i] = source;\n          const target = isArray(source) ? [] : {};\n          forEach(source, (value, key) => {\n            const reducedValue = visit(value, i + 1);\n            !isUndefined(reducedValue) && (target[key] = reducedValue);\n          });\n          stack[i] = void 0;\n          return target;\n        }\n      }\n      return source;\n    };\n    return visit(obj, 0);\n  };\n  var isAsyncFn = kindOfTest(\"AsyncFunction\");\n  var isThenable = (thing) => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n  var _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n    if (setImmediateSupported) {\n      return setImmediate;\n    }\n    return postMessageSupported ? ((token, callbacks) => {\n      _global.addEventListener(\n        \"message\",\n        ({ source, data }) => {\n          if (source === _global && data === token) {\n            callbacks.length && callbacks.shift()();\n          }\n        },\n        false\n      );\n      return (cb) => {\n        callbacks.push(cb);\n        _global.postMessage(token, \"*\");\n      };\n    })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n  })(typeof setImmediate === \"function\", isFunction(_global.postMessage));\n  var asap = typeof queueMicrotask !== \"undefined\" ? queueMicrotask.bind(_global) : typeof process !== \"undefined\" && process.nextTick || _setImmediate;\n  var isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n  var utils_default = {\n    isArray,\n    isArrayBuffer,\n    isBuffer,\n    isFormData,\n    isArrayBufferView,\n    isString,\n    isNumber,\n    isBoolean,\n    isObject,\n    isPlainObject,\n    isEmptyObject,\n    isReadableStream,\n    isRequest,\n    isResponse,\n    isHeaders,\n    isUndefined,\n    isDate,\n    isFile,\n    isReactNativeBlob,\n    isReactNative,\n    isBlob,\n    isRegExp,\n    isFunction,\n    isStream,\n    isURLSearchParams,\n    isTypedArray,\n    isFileList,\n    forEach,\n    merge,\n    extend,\n    trim,\n    stripBOM,\n    inherits,\n    toFlatObject,\n    kindOf,\n    kindOfTest,\n    endsWith,\n    toArray,\n    forEachEntry,\n    matchAll,\n    isHTMLForm,\n    hasOwnProperty,\n    hasOwnProp: hasOwnProperty,\n    // an alias to avoid ESLint no-prototype-builtins detection\n    reduceDescriptors,\n    freezeMethods,\n    toObjectSet,\n    toCamelCase,\n    noop,\n    toFiniteNumber,\n    findKey,\n    global: _global,\n    isContextDefined,\n    isSpecCompliantForm,\n    toJSONObject,\n    isAsyncFn,\n    isThenable,\n    setImmediate: _setImmediate,\n    asap,\n    isIterable\n  };\n\n  // node_modules/axios/lib/core/AxiosError.js\n  var AxiosError = class _AxiosError extends Error {\n    static from(error, code, config, request, response, customProps) {\n      const axiosError = new _AxiosError(error.message, code || error.code, config, request, response);\n      axiosError.cause = error;\n      axiosError.name = error.name;\n      if (error.status != null && axiosError.status == null) {\n        axiosError.status = error.status;\n      }\n      customProps && Object.assign(axiosError, customProps);\n      return axiosError;\n    }\n    /**\n     * Create an Error with the specified message, config, error code, request and response.\n     *\n     * @param {string} message The error message.\n     * @param {string} [code] The error code (for example, 'ECONNABORTED').\n     * @param {Object} [config] The config.\n     * @param {Object} [request] The request.\n     * @param {Object} [response] The response.\n     *\n     * @returns {Error} The created error.\n     */\n    constructor(message, code, config, request, response) {\n      super(message);\n      Object.defineProperty(this, \"message\", {\n        value: message,\n        enumerable: true,\n        writable: true,\n        configurable: true\n      });\n      this.name = \"AxiosError\";\n      this.isAxiosError = true;\n      code && (this.code = code);\n      config && (this.config = config);\n      request && (this.request = request);\n      if (response) {\n        this.response = response;\n        this.status = response.status;\n      }\n    }\n    toJSON() {\n      return {\n        // Standard\n        message: this.message,\n        name: this.name,\n        // Microsoft\n        description: this.description,\n        number: this.number,\n        // Mozilla\n        fileName: this.fileName,\n        lineNumber: this.lineNumber,\n        columnNumber: this.columnNumber,\n        stack: this.stack,\n        // Axios\n        config: utils_default.toJSONObject(this.config),\n        code: this.code,\n        status: this.status\n      };\n    }\n  };\n  AxiosError.ERR_BAD_OPTION_VALUE = \"ERR_BAD_OPTION_VALUE\";\n  AxiosError.ERR_BAD_OPTION = \"ERR_BAD_OPTION\";\n  AxiosError.ECONNABORTED = \"ECONNABORTED\";\n  AxiosError.ETIMEDOUT = \"ETIMEDOUT\";\n  AxiosError.ERR_NETWORK = \"ERR_NETWORK\";\n  AxiosError.ERR_FR_TOO_MANY_REDIRECTS = \"ERR_FR_TOO_MANY_REDIRECTS\";\n  AxiosError.ERR_DEPRECATED = \"ERR_DEPRECATED\";\n  AxiosError.ERR_BAD_RESPONSE = \"ERR_BAD_RESPONSE\";\n  AxiosError.ERR_BAD_REQUEST = \"ERR_BAD_REQUEST\";\n  AxiosError.ERR_CANCELED = \"ERR_CANCELED\";\n  AxiosError.ERR_NOT_SUPPORT = \"ERR_NOT_SUPPORT\";\n  AxiosError.ERR_INVALID_URL = \"ERR_INVALID_URL\";\n  AxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED = \"ERR_FORM_DATA_DEPTH_EXCEEDED\";\n  var AxiosError_default = AxiosError;\n\n  // node_modules/axios/lib/helpers/null.js\n  var null_default = null;\n\n  // node_modules/axios/lib/helpers/toFormData.js\n  function isVisitable(thing) {\n    return utils_default.isPlainObject(thing) || utils_default.isArray(thing);\n  }\n  function removeBrackets(key) {\n    return utils_default.endsWith(key, \"[]\") ? key.slice(0, -2) : key;\n  }\n  function renderKey(path, key, dots) {\n    if (!path) return key;\n    return path.concat(key).map(function each(token, i) {\n      token = removeBrackets(token);\n      return !dots && i ? \"[\" + token + \"]\" : token;\n    }).join(dots ? \".\" : \"\");\n  }\n  function isFlatArray(arr) {\n    return utils_default.isArray(arr) && !arr.some(isVisitable);\n  }\n  var predicates = utils_default.toFlatObject(utils_default, {}, null, function filter(prop) {\n    return /^is[A-Z]/.test(prop);\n  });\n  function toFormData(obj, formData, options) {\n    if (!utils_default.isObject(obj)) {\n      throw new TypeError(\"target must be an object\");\n    }\n    formData = formData || new (null_default || FormData)();\n    options = utils_default.toFlatObject(\n      options,\n      {\n        metaTokens: true,\n        dots: false,\n        indexes: false\n      },\n      false,\n      function defined(option, source) {\n        return !utils_default.isUndefined(source[option]);\n      }\n    );\n    const metaTokens = options.metaTokens;\n    const visitor = options.visitor || defaultVisitor;\n    const dots = options.dots;\n    const indexes = options.indexes;\n    const _Blob = options.Blob || typeof Blob !== \"undefined\" && Blob;\n    const maxDepth = options.maxDepth === void 0 ? 100 : options.maxDepth;\n    const useBlob = _Blob && utils_default.isSpecCompliantForm(formData);\n    if (!utils_default.isFunction(visitor)) {\n      throw new TypeError(\"visitor must be a function\");\n    }\n    function convertValue(value) {\n      if (value === null) return \"\";\n      if (utils_default.isDate(value)) {\n        return value.toISOString();\n      }\n      if (utils_default.isBoolean(value)) {\n        return value.toString();\n      }\n      if (!useBlob && utils_default.isBlob(value)) {\n        throw new AxiosError_default(\"Blob is not supported. Use a Buffer instead.\");\n      }\n      if (utils_default.isArrayBuffer(value) || utils_default.isTypedArray(value)) {\n        return useBlob && typeof Blob === \"function\" ? new Blob([value]) : Buffer.from(value);\n      }\n      return value;\n    }\n    function defaultVisitor(value, key, path) {\n      let arr = value;\n      if (utils_default.isReactNative(formData) && utils_default.isReactNativeBlob(value)) {\n        formData.append(renderKey(path, key, dots), convertValue(value));\n        return false;\n      }\n      if (value && !path && typeof value === \"object\") {\n        if (utils_default.endsWith(key, \"{}\")) {\n          key = metaTokens ? key : key.slice(0, -2);\n          value = JSON.stringify(value);\n        } else if (utils_default.isArray(value) && isFlatArray(value) || (utils_default.isFileList(value) || utils_default.endsWith(key, \"[]\")) && (arr = utils_default.toArray(value))) {\n          key = removeBrackets(key);\n          arr.forEach(function each(el, index) {\n            !(utils_default.isUndefined(el) || el === null) && formData.append(\n              // eslint-disable-next-line no-nested-ternary\n              indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + \"[]\",\n              convertValue(el)\n            );\n          });\n          return false;\n        }\n      }\n      if (isVisitable(value)) {\n        return true;\n      }\n      formData.append(renderKey(path, key, dots), convertValue(value));\n      return false;\n    }\n    const stack = [];\n    const exposedHelpers = Object.assign(predicates, {\n      defaultVisitor,\n      convertValue,\n      isVisitable\n    });\n    function build(value, path, depth = 0) {\n      if (utils_default.isUndefined(value)) return;\n      if (depth > maxDepth) {\n        throw new AxiosError_default(\n          \"Object is too deeply nested (\" + depth + \" levels). Max depth: \" + maxDepth,\n          AxiosError_default.ERR_FORM_DATA_DEPTH_EXCEEDED\n        );\n      }\n      if (stack.indexOf(value) !== -1) {\n        throw Error(\"Circular reference detected in \" + path.join(\".\"));\n      }\n      stack.push(value);\n      utils_default.forEach(value, function each(el, key) {\n        const result = !(utils_default.isUndefined(el) || el === null) && visitor.call(formData, el, utils_default.isString(key) ? key.trim() : key, path, exposedHelpers);\n        if (result === true) {\n          build(el, path ? path.concat(key) : [key], depth + 1);\n        }\n      });\n      stack.pop();\n    }\n    if (!utils_default.isObject(obj)) {\n      throw new TypeError(\"data must be an object\");\n    }\n    build(obj);\n    return formData;\n  }\n  var toFormData_default = toFormData;\n\n  // node_modules/axios/lib/helpers/AxiosURLSearchParams.js\n  function encode(str) {\n    const charMap = {\n      \"!\": \"%21\",\n      \"'\": \"%27\",\n      \"(\": \"%28\",\n      \")\": \"%29\",\n      \"~\": \"%7E\",\n      \"%20\": \"+\"\n    };\n    return encodeURIComponent(str).replace(/[!'()~]|%20/g, function replacer(match) {\n      return charMap[match];\n    });\n  }\n  function AxiosURLSearchParams(params, options) {\n    this._pairs = [];\n    params && toFormData_default(params, this, options);\n  }\n  var prototype = AxiosURLSearchParams.prototype;\n  prototype.append = function append(name, value) {\n    this._pairs.push([name, value]);\n  };\n  prototype.toString = function toString2(encoder) {\n    const _encode = encoder ? function(value) {\n      return encoder.call(this, value, encode);\n    } : encode;\n    return this._pairs.map(function each(pair) {\n      return _encode(pair[0]) + \"=\" + _encode(pair[1]);\n    }, \"\").join(\"&\");\n  };\n  var AxiosURLSearchParams_default = AxiosURLSearchParams;\n\n  // node_modules/axios/lib/helpers/buildURL.js\n  function encode2(val) {\n    return encodeURIComponent(val).replace(/%3A/gi, \":\").replace(/%24/g, \"$\").replace(/%2C/gi, \",\").replace(/%20/g, \"+\");\n  }\n  function buildURL(url, params, options) {\n    if (!params) {\n      return url;\n    }\n    const _encode = options && options.encode || encode2;\n    const _options = utils_default.isFunction(options) ? {\n      serialize: options\n    } : options;\n    const serializeFn = _options && _options.serialize;\n    let serializedParams;\n    if (serializeFn) {\n      serializedParams = serializeFn(params, _options);\n    } else {\n      serializedParams = utils_default.isURLSearchParams(params) ? params.toString() : new AxiosURLSearchParams_default(params, _options).toString(_encode);\n    }\n    if (serializedParams) {\n      const hashmarkIndex = url.indexOf(\"#\");\n      if (hashmarkIndex !== -1) {\n        url = url.slice(0, hashmarkIndex);\n      }\n      url += (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + serializedParams;\n    }\n    return url;\n  }\n\n  // node_modules/axios/lib/core/InterceptorManager.js\n  var InterceptorManager = class {\n    constructor() {\n      this.handlers = [];\n    }\n    /**\n     * Add a new interceptor to the stack\n     *\n     * @param {Function} fulfilled The function to handle `then` for a `Promise`\n     * @param {Function} rejected The function to handle `reject` for a `Promise`\n     * @param {Object} options The options for the interceptor, synchronous and runWhen\n     *\n     * @return {Number} An ID used to remove interceptor later\n     */\n    use(fulfilled, rejected, options) {\n      this.handlers.push({\n        fulfilled,\n        rejected,\n        synchronous: options ? options.synchronous : false,\n        runWhen: options ? options.runWhen : null\n      });\n      return this.handlers.length - 1;\n    }\n    /**\n     * Remove an interceptor from the stack\n     *\n     * @param {Number} id The ID that was returned by `use`\n     *\n     * @returns {void}\n     */\n    eject(id) {\n      if (this.handlers[id]) {\n        this.handlers[id] = null;\n      }\n    }\n    /**\n     * Clear all interceptors from the stack\n     *\n     * @returns {void}\n     */\n    clear() {\n      if (this.handlers) {\n        this.handlers = [];\n      }\n    }\n    /**\n     * Iterate over all the registered interceptors\n     *\n     * This method is particularly useful for skipping over any\n     * interceptors that may have become `null` calling `eject`.\n     *\n     * @param {Function} fn The function to call for each interceptor\n     *\n     * @returns {void}\n     */\n    forEach(fn) {\n      utils_default.forEach(this.handlers, function forEachHandler(h) {\n        if (h !== null) {\n          fn(h);\n        }\n      });\n    }\n  };\n  var InterceptorManager_default = InterceptorManager;\n\n  // node_modules/axios/lib/defaults/transitional.js\n  var transitional_default = {\n    silentJSONParsing: true,\n    forcedJSONParsing: true,\n    clarifyTimeoutError: false,\n    legacyInterceptorReqResOrdering: true\n  };\n\n  // node_modules/axios/lib/platform/browser/classes/URLSearchParams.js\n  var URLSearchParams_default = typeof URLSearchParams !== \"undefined\" ? URLSearchParams : AxiosURLSearchParams_default;\n\n  // node_modules/axios/lib/platform/browser/classes/FormData.js\n  var FormData_default = typeof FormData !== \"undefined\" ? FormData : null;\n\n  // node_modules/axios/lib/platform/browser/classes/Blob.js\n  var Blob_default = typeof Blob !== \"undefined\" ? Blob : null;\n\n  // node_modules/axios/lib/platform/browser/index.js\n  var browser_default = {\n    isBrowser: true,\n    classes: {\n      URLSearchParams: URLSearchParams_default,\n      FormData: FormData_default,\n      Blob: Blob_default\n    },\n    protocols: [\"http\", \"https\", \"file\", \"blob\", \"url\", \"data\"]\n  };\n\n  // node_modules/axios/lib/platform/common/utils.js\n  var utils_exports = {};\n  __export(utils_exports, {\n    hasBrowserEnv: () => hasBrowserEnv,\n    hasStandardBrowserEnv: () => hasStandardBrowserEnv,\n    hasStandardBrowserWebWorkerEnv: () => hasStandardBrowserWebWorkerEnv,\n    navigator: () => _navigator,\n    origin: () => origin\n  });\n  var hasBrowserEnv = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n  var _navigator = typeof navigator === \"object\" && navigator || void 0;\n  var hasStandardBrowserEnv = hasBrowserEnv && (!_navigator || [\"ReactNative\", \"NativeScript\", \"NS\"].indexOf(_navigator.product) < 0);\n  var hasStandardBrowserWebWorkerEnv = (() => {\n    return typeof WorkerGlobalScope !== \"undefined\" && // eslint-disable-next-line no-undef\n    self instanceof WorkerGlobalScope && typeof self.importScripts === \"function\";\n  })();\n  var origin = hasBrowserEnv && window.location.href || \"http://localhost\";\n\n  // node_modules/axios/lib/platform/index.js\n  var platform_default = {\n    ...utils_exports,\n    ...browser_default\n  };\n\n  // node_modules/axios/lib/helpers/toURLEncodedForm.js\n  function toURLEncodedForm(data, options) {\n    return toFormData_default(data, new platform_default.classes.URLSearchParams(), {\n      visitor: function(value, key, path, helpers) {\n        if (platform_default.isNode && utils_default.isBuffer(value)) {\n          this.append(key, value.toString(\"base64\"));\n          return false;\n        }\n        return helpers.defaultVisitor.apply(this, arguments);\n      },\n      ...options\n    });\n  }\n\n  // node_modules/axios/lib/helpers/formDataToJSON.js\n  function parsePropPath(name) {\n    return utils_default.matchAll(/\\w+|\\[(\\w*)]/g, name).map((match) => {\n      return match[0] === \"[]\" ? \"\" : match[1] || match[0];\n    });\n  }\n  function arrayToObject(arr) {\n    const obj = {};\n    const keys = Object.keys(arr);\n    let i;\n    const len = keys.length;\n    let key;\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      obj[key] = arr[key];\n    }\n    return obj;\n  }\n  function formDataToJSON(formData) {\n    function buildPath(path, value, target, index) {\n      let name = path[index++];\n      if (name === \"__proto__\") return true;\n      const isNumericKey = Number.isFinite(+name);\n      const isLast = index >= path.length;\n      name = !name && utils_default.isArray(target) ? target.length : name;\n      if (isLast) {\n        if (utils_default.hasOwnProp(target, name)) {\n          target[name] = utils_default.isArray(target[name]) ? target[name].concat(value) : [target[name], value];\n        } else {\n          target[name] = value;\n        }\n        return !isNumericKey;\n      }\n      if (!target[name] || !utils_default.isObject(target[name])) {\n        target[name] = [];\n      }\n      const result = buildPath(path, value, target[name], index);\n      if (result && utils_default.isArray(target[name])) {\n        target[name] = arrayToObject(target[name]);\n      }\n      return !isNumericKey;\n    }\n    if (utils_default.isFormData(formData) && utils_default.isFunction(formData.entries)) {\n      const obj = {};\n      utils_default.forEachEntry(formData, (name, value) => {\n        buildPath(parsePropPath(name), value, obj, 0);\n      });\n      return obj;\n    }\n    return null;\n  }\n  var formDataToJSON_default = formDataToJSON;\n\n  // node_modules/axios/lib/defaults/index.js\n  var own = (obj, key) => obj != null && utils_default.hasOwnProp(obj, key) ? obj[key] : void 0;\n  function stringifySafely(rawValue, parser, encoder) {\n    if (utils_default.isString(rawValue)) {\n      try {\n        (parser || JSON.parse)(rawValue);\n        return utils_default.trim(rawValue);\n      } catch (e) {\n        if (e.name !== \"SyntaxError\") {\n          throw e;\n        }\n      }\n    }\n    return (encoder || JSON.stringify)(rawValue);\n  }\n  var defaults = {\n    transitional: transitional_default,\n    adapter: [\"xhr\", \"http\", \"fetch\"],\n    transformRequest: [\n      function transformRequest(data, headers) {\n        const contentType = headers.getContentType() || \"\";\n        const hasJSONContentType = contentType.indexOf(\"application/json\") > -1;\n        const isObjectPayload = utils_default.isObject(data);\n        if (isObjectPayload && utils_default.isHTMLForm(data)) {\n          data = new FormData(data);\n        }\n        const isFormData2 = utils_default.isFormData(data);\n        if (isFormData2) {\n          return hasJSONContentType ? JSON.stringify(formDataToJSON_default(data)) : data;\n        }\n        if (utils_default.isArrayBuffer(data) || utils_default.isBuffer(data) || utils_default.isStream(data) || utils_default.isFile(data) || utils_default.isBlob(data) || utils_default.isReadableStream(data)) {\n          return data;\n        }\n        if (utils_default.isArrayBufferView(data)) {\n          return data.buffer;\n        }\n        if (utils_default.isURLSearchParams(data)) {\n          headers.setContentType(\"application/x-www-form-urlencoded;charset=utf-8\", false);\n          return data.toString();\n        }\n        let isFileList2;\n        if (isObjectPayload) {\n          const formSerializer = own(this, \"formSerializer\");\n          if (contentType.indexOf(\"application/x-www-form-urlencoded\") > -1) {\n            return toURLEncodedForm(data, formSerializer).toString();\n          }\n          if ((isFileList2 = utils_default.isFileList(data)) || contentType.indexOf(\"multipart/form-data\") > -1) {\n            const env = own(this, \"env\");\n            const _FormData = env && env.FormData;\n            return toFormData_default(\n              isFileList2 ? { \"files[]\": data } : data,\n              _FormData && new _FormData(),\n              formSerializer\n            );\n          }\n        }\n        if (isObjectPayload || hasJSONContentType) {\n          headers.setContentType(\"application/json\", false);\n          return stringifySafely(data);\n        }\n        return data;\n      }\n    ],\n    transformResponse: [\n      function transformResponse(data) {\n        const transitional2 = own(this, \"transitional\") || defaults.transitional;\n        const forcedJSONParsing = transitional2 && transitional2.forcedJSONParsing;\n        const responseType = own(this, \"responseType\");\n        const JSONRequested = responseType === \"json\";\n        if (utils_default.isResponse(data) || utils_default.isReadableStream(data)) {\n          return data;\n        }\n        if (data && utils_default.isString(data) && (forcedJSONParsing && !responseType || JSONRequested)) {\n          const silentJSONParsing = transitional2 && transitional2.silentJSONParsing;\n          const strictJSONParsing = !silentJSONParsing && JSONRequested;\n          try {\n            return JSON.parse(data, own(this, \"parseReviver\"));\n          } catch (e) {\n            if (strictJSONParsing) {\n              if (e.name === \"SyntaxError\") {\n                throw AxiosError_default.from(e, AxiosError_default.ERR_BAD_RESPONSE, this, null, own(this, \"response\"));\n              }\n              throw e;\n            }\n          }\n        }\n        return data;\n      }\n    ],\n    /**\n     * A timeout in milliseconds to abort a request. If set to 0 (default) a\n     * timeout is not created.\n     */\n    timeout: 0,\n    xsrfCookieName: \"XSRF-TOKEN\",\n    xsrfHeaderName: \"X-XSRF-TOKEN\",\n    maxContentLength: -1,\n    maxBodyLength: -1,\n    env: {\n      FormData: platform_default.classes.FormData,\n      Blob: platform_default.classes.Blob\n    },\n    validateStatus: function validateStatus(status) {\n      return status >= 200 && status < 300;\n    },\n    headers: {\n      common: {\n        Accept: \"application/json, text/plain, */*\",\n        \"Content-Type\": void 0\n      }\n    }\n  };\n  utils_default.forEach([\"delete\", \"get\", \"head\", \"post\", \"put\", \"patch\"], (method) => {\n    defaults.headers[method] = {};\n  });\n  var defaults_default = defaults;\n\n  // node_modules/axios/lib/helpers/parseHeaders.js\n  var ignoreDuplicateOf = utils_default.toObjectSet([\n    \"age\",\n    \"authorization\",\n    \"content-length\",\n    \"content-type\",\n    \"etag\",\n    \"expires\",\n    \"from\",\n    \"host\",\n    \"if-modified-since\",\n    \"if-unmodified-since\",\n    \"last-modified\",\n    \"location\",\n    \"max-forwards\",\n    \"proxy-authorization\",\n    \"referer\",\n    \"retry-after\",\n    \"user-agent\"\n  ]);\n  var parseHeaders_default = (rawHeaders) => {\n    const parsed = {};\n    let key;\n    let val;\n    let i;\n    rawHeaders && rawHeaders.split(\"\\n\").forEach(function parser(line) {\n      i = line.indexOf(\":\");\n      key = line.substring(0, i).trim().toLowerCase();\n      val = line.substring(i + 1).trim();\n      if (!key || parsed[key] && ignoreDuplicateOf[key]) {\n        return;\n      }\n      if (key === \"set-cookie\") {\n        if (parsed[key]) {\n          parsed[key].push(val);\n        } else {\n          parsed[key] = [val];\n        }\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + \", \" + val : val;\n      }\n    });\n    return parsed;\n  };\n\n  // node_modules/axios/lib/core/AxiosHeaders.js\n  var $internals = Symbol(\"internals\");\n  var INVALID_HEADER_VALUE_CHARS_RE = /[^\\x09\\x20-\\x7E\\x80-\\xFF]/g;\n  function trimSPorHTAB(str) {\n    let start = 0;\n    let end = str.length;\n    while (start < end) {\n      const code = str.charCodeAt(start);\n      if (code !== 9 && code !== 32) {\n        break;\n      }\n      start += 1;\n    }\n    while (end > start) {\n      const code = str.charCodeAt(end - 1);\n      if (code !== 9 && code !== 32) {\n        break;\n      }\n      end -= 1;\n    }\n    return start === 0 && end === str.length ? str : str.slice(start, end);\n  }\n  function normalizeHeader(header) {\n    return header && String(header).trim().toLowerCase();\n  }\n  function sanitizeHeaderValue(str) {\n    return trimSPorHTAB(str.replace(INVALID_HEADER_VALUE_CHARS_RE, \"\"));\n  }\n  function normalizeValue(value) {\n    if (value === false || value == null) {\n      return value;\n    }\n    return utils_default.isArray(value) ? value.map(normalizeValue) : sanitizeHeaderValue(String(value));\n  }\n  function parseTokens(str) {\n    const tokens = /* @__PURE__ */ Object.create(null);\n    const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n    let match;\n    while (match = tokensRE.exec(str)) {\n      tokens[match[1]] = match[2];\n    }\n    return tokens;\n  }\n  var isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n  function matchHeaderValue(context, value, header, filter2, isHeaderNameFilter) {\n    if (utils_default.isFunction(filter2)) {\n      return filter2.call(this, value, header);\n    }\n    if (isHeaderNameFilter) {\n      value = header;\n    }\n    if (!utils_default.isString(value)) return;\n    if (utils_default.isString(filter2)) {\n      return value.indexOf(filter2) !== -1;\n    }\n    if (utils_default.isRegExp(filter2)) {\n      return filter2.test(value);\n    }\n  }\n  function formatHeader(header) {\n    return header.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n      return char.toUpperCase() + str;\n    });\n  }\n  function buildAccessors(obj, header) {\n    const accessorName = utils_default.toCamelCase(\" \" + header);\n    [\"get\", \"set\", \"has\"].forEach((methodName) => {\n      Object.defineProperty(obj, methodName + accessorName, {\n        value: function(arg1, arg2, arg3) {\n          return this[methodName].call(this, header, arg1, arg2, arg3);\n        },\n        configurable: true\n      });\n    });\n  }\n  var AxiosHeaders = class {\n    constructor(headers) {\n      headers && this.set(headers);\n    }\n    set(header, valueOrRewrite, rewrite) {\n      const self2 = this;\n      function setHeader(_value, _header, _rewrite) {\n        const lHeader = normalizeHeader(_header);\n        if (!lHeader) {\n          throw new Error(\"header name must be a non-empty string\");\n        }\n        const key = utils_default.findKey(self2, lHeader);\n        if (!key || self2[key] === void 0 || _rewrite === true || _rewrite === void 0 && self2[key] !== false) {\n          self2[key || _header] = normalizeValue(_value);\n        }\n      }\n      const setHeaders = (headers, _rewrite) => utils_default.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n      if (utils_default.isPlainObject(header) || header instanceof this.constructor) {\n        setHeaders(header, valueOrRewrite);\n      } else if (utils_default.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n        setHeaders(parseHeaders_default(header), valueOrRewrite);\n      } else if (utils_default.isObject(header) && utils_default.isIterable(header)) {\n        let obj = {}, dest, key;\n        for (const entry of header) {\n          if (!utils_default.isArray(entry)) {\n            throw TypeError(\"Object iterator must return a key-value pair\");\n          }\n          obj[key = entry[0]] = (dest = obj[key]) ? utils_default.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]] : entry[1];\n        }\n        setHeaders(obj, valueOrRewrite);\n      } else {\n        header != null && setHeader(valueOrRewrite, header, rewrite);\n      }\n      return this;\n    }\n    get(header, parser) {\n      header = normalizeHeader(header);\n      if (header) {\n        const key = utils_default.findKey(this, header);\n        if (key) {\n          const value = this[key];\n          if (!parser) {\n            return value;\n          }\n          if (parser === true) {\n            return parseTokens(value);\n          }\n          if (utils_default.isFunction(parser)) {\n            return parser.call(this, value, key);\n          }\n          if (utils_default.isRegExp(parser)) {\n            return parser.exec(value);\n          }\n          throw new TypeError(\"parser must be boolean|regexp|function\");\n        }\n      }\n    }\n    has(header, matcher) {\n      header = normalizeHeader(header);\n      if (header) {\n        const key = utils_default.findKey(this, header);\n        return !!(key && this[key] !== void 0 && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n      }\n      return false;\n    }\n    delete(header, matcher) {\n      const self2 = this;\n      let deleted = false;\n      function deleteHeader(_header) {\n        _header = normalizeHeader(_header);\n        if (_header) {\n          const key = utils_default.findKey(self2, _header);\n          if (key && (!matcher || matchHeaderValue(self2, self2[key], key, matcher))) {\n            delete self2[key];\n            deleted = true;\n          }\n        }\n      }\n      if (utils_default.isArray(header)) {\n        header.forEach(deleteHeader);\n      } else {\n        deleteHeader(header);\n      }\n      return deleted;\n    }\n    clear(matcher) {\n      const keys = Object.keys(this);\n      let i = keys.length;\n      let deleted = false;\n      while (i--) {\n        const key = keys[i];\n        if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n          delete this[key];\n          deleted = true;\n        }\n      }\n      return deleted;\n    }\n    normalize(format) {\n      const self2 = this;\n      const headers = {};\n      utils_default.forEach(this, (value, header) => {\n        const key = utils_default.findKey(headers, header);\n        if (key) {\n          self2[key] = normalizeValue(value);\n          delete self2[header];\n          return;\n        }\n        const normalized = format ? formatHeader(header) : String(header).trim();\n        if (normalized !== header) {\n          delete self2[header];\n        }\n        self2[normalized] = normalizeValue(value);\n        headers[normalized] = true;\n      });\n      return this;\n    }\n    concat(...targets) {\n      return this.constructor.concat(this, ...targets);\n    }\n    toJSON(asStrings) {\n      const obj = /* @__PURE__ */ Object.create(null);\n      utils_default.forEach(this, (value, header) => {\n        value != null && value !== false && (obj[header] = asStrings && utils_default.isArray(value) ? value.join(\", \") : value);\n      });\n      return obj;\n    }\n    [Symbol.iterator]() {\n      return Object.entries(this.toJSON())[Symbol.iterator]();\n    }\n    toString() {\n      return Object.entries(this.toJSON()).map(([header, value]) => header + \": \" + value).join(\"\\n\");\n    }\n    getSetCookie() {\n      return this.get(\"set-cookie\") || [];\n    }\n    get [Symbol.toStringTag]() {\n      return \"AxiosHeaders\";\n    }\n    static from(thing) {\n      return thing instanceof this ? thing : new this(thing);\n    }\n    static concat(first, ...targets) {\n      const computed = new this(first);\n      targets.forEach((target) => computed.set(target));\n      return computed;\n    }\n    static accessor(header) {\n      const internals = this[$internals] = this[$internals] = {\n        accessors: {}\n      };\n      const accessors = internals.accessors;\n      const prototype2 = this.prototype;\n      function defineAccessor(_header) {\n        const lHeader = normalizeHeader(_header);\n        if (!accessors[lHeader]) {\n          buildAccessors(prototype2, _header);\n          accessors[lHeader] = true;\n        }\n      }\n      utils_default.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n      return this;\n    }\n  };\n  AxiosHeaders.accessor([\n    \"Content-Type\",\n    \"Content-Length\",\n    \"Accept\",\n    \"Accept-Encoding\",\n    \"User-Agent\",\n    \"Authorization\"\n  ]);\n  utils_default.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => {\n    let mapped = key[0].toUpperCase() + key.slice(1);\n    return {\n      get: () => value,\n      set(headerValue) {\n        this[mapped] = headerValue;\n      }\n    };\n  });\n  utils_default.freezeMethods(AxiosHeaders);\n  var AxiosHeaders_default = AxiosHeaders;\n\n  // node_modules/axios/lib/core/transformData.js\n  function transformData(fns, response) {\n    const config = this || defaults_default;\n    const context = response || config;\n    const headers = AxiosHeaders_default.from(context.headers);\n    let data = context.data;\n    utils_default.forEach(fns, function transform(fn) {\n      data = fn.call(config, data, headers.normalize(), response ? response.status : void 0);\n    });\n    headers.normalize();\n    return data;\n  }\n\n  // node_modules/axios/lib/cancel/isCancel.js\n  function isCancel(value) {\n    return !!(value && value.__CANCEL__);\n  }\n\n  // node_modules/axios/lib/cancel/CanceledError.js\n  var CanceledError = class extends AxiosError_default {\n    /**\n     * A `CanceledError` is an object that is thrown when an operation is canceled.\n     *\n     * @param {string=} message The message.\n     * @param {Object=} config The config.\n     * @param {Object=} request The request.\n     *\n     * @returns {CanceledError} The created error.\n     */\n    constructor(message, config, request) {\n      super(message == null ? \"canceled\" : message, AxiosError_default.ERR_CANCELED, config, request);\n      this.name = \"CanceledError\";\n      this.__CANCEL__ = true;\n    }\n  };\n  var CanceledError_default = CanceledError;\n\n  // node_modules/axios/lib/core/settle.js\n  function settle(resolve, reject, response) {\n    const validateStatus2 = response.config.validateStatus;\n    if (!response.status || !validateStatus2 || validateStatus2(response.status)) {\n      resolve(response);\n    } else {\n      reject(\n        new AxiosError_default(\n          \"Request failed with status code \" + response.status,\n          [AxiosError_default.ERR_BAD_REQUEST, AxiosError_default.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n          response.config,\n          response.request,\n          response\n        )\n      );\n    }\n  }\n\n  // node_modules/axios/lib/helpers/parseProtocol.js\n  function parseProtocol(url) {\n    const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n    return match && match[1] || \"\";\n  }\n\n  // node_modules/axios/lib/helpers/speedometer.js\n  function speedometer(samplesCount, min) {\n    samplesCount = samplesCount || 10;\n    const bytes = new Array(samplesCount);\n    const timestamps = new Array(samplesCount);\n    let head = 0;\n    let tail = 0;\n    let firstSampleTS;\n    min = min !== void 0 ? min : 1e3;\n    return function push(chunkLength) {\n      const now = Date.now();\n      const startedAt = timestamps[tail];\n      if (!firstSampleTS) {\n        firstSampleTS = now;\n      }\n      bytes[head] = chunkLength;\n      timestamps[head] = now;\n      let i = tail;\n      let bytesCount = 0;\n      while (i !== head) {\n        bytesCount += bytes[i++];\n        i = i % samplesCount;\n      }\n      head = (head + 1) % samplesCount;\n      if (head === tail) {\n        tail = (tail + 1) % samplesCount;\n      }\n      if (now - firstSampleTS < min) {\n        return;\n      }\n      const passed = startedAt && now - startedAt;\n      return passed ? Math.round(bytesCount * 1e3 / passed) : void 0;\n    };\n  }\n  var speedometer_default = speedometer;\n\n  // node_modules/axios/lib/helpers/throttle.js\n  function throttle(fn, freq) {\n    let timestamp = 0;\n    let threshold = 1e3 / freq;\n    let lastArgs;\n    let timer;\n    const invoke = (args, now = Date.now()) => {\n      timestamp = now;\n      lastArgs = null;\n      if (timer) {\n        clearTimeout(timer);\n        timer = null;\n      }\n      fn(...args);\n    };\n    const throttled = (...args) => {\n      const now = Date.now();\n      const passed = now - timestamp;\n      if (passed >= threshold) {\n        invoke(args, now);\n      } else {\n        lastArgs = args;\n        if (!timer) {\n          timer = setTimeout(() => {\n            timer = null;\n            invoke(lastArgs);\n          }, threshold - passed);\n        }\n      }\n    };\n    const flush = () => lastArgs && invoke(lastArgs);\n    return [throttled, flush];\n  }\n  var throttle_default = throttle;\n\n  // node_modules/axios/lib/helpers/progressEventReducer.js\n  var progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n    let bytesNotified = 0;\n    const _speedometer = speedometer_default(50, 250);\n    return throttle_default((e) => {\n      const rawLoaded = e.loaded;\n      const total = e.lengthComputable ? e.total : void 0;\n      const loaded = total != null ? Math.min(rawLoaded, total) : rawLoaded;\n      const progressBytes = Math.max(0, loaded - bytesNotified);\n      const rate = _speedometer(progressBytes);\n      bytesNotified = Math.max(bytesNotified, loaded);\n      const data = {\n        loaded,\n        total,\n        progress: total ? loaded / total : void 0,\n        bytes: progressBytes,\n        rate: rate ? rate : void 0,\n        estimated: rate && total ? (total - loaded) / rate : void 0,\n        event: e,\n        lengthComputable: total != null,\n        [isDownloadStream ? \"download\" : \"upload\"]: true\n      };\n      listener(data);\n    }, freq);\n  };\n  var progressEventDecorator = (total, throttled) => {\n    const lengthComputable = total != null;\n    return [\n      (loaded) => throttled[0]({\n        lengthComputable,\n        total,\n        loaded\n      }),\n      throttled[1]\n    ];\n  };\n  var asyncDecorator = (fn) => (...args) => utils_default.asap(() => fn(...args));\n\n  // node_modules/axios/lib/helpers/isURLSameOrigin.js\n  var isURLSameOrigin_default = platform_default.hasStandardBrowserEnv ? /* @__PURE__ */ ((origin2, isMSIE) => (url) => {\n    url = new URL(url, platform_default.origin);\n    return origin2.protocol === url.protocol && origin2.host === url.host && (isMSIE || origin2.port === url.port);\n  })(\n    new URL(platform_default.origin),\n    platform_default.navigator && /(msie|trident)/i.test(platform_default.navigator.userAgent)\n  ) : () => true;\n\n  // node_modules/axios/lib/helpers/cookies.js\n  var cookies_default = platform_default.hasStandardBrowserEnv ? (\n    // Standard browser envs support document.cookie\n    {\n      write(name, value, expires, path, domain, secure, sameSite) {\n        if (typeof document === \"undefined\") return;\n        const cookie = [`${name}=${encodeURIComponent(value)}`];\n        if (utils_default.isNumber(expires)) {\n          cookie.push(`expires=${new Date(expires).toUTCString()}`);\n        }\n        if (utils_default.isString(path)) {\n          cookie.push(`path=${path}`);\n        }\n        if (utils_default.isString(domain)) {\n          cookie.push(`domain=${domain}`);\n        }\n        if (secure === true) {\n          cookie.push(\"secure\");\n        }\n        if (utils_default.isString(sameSite)) {\n          cookie.push(`SameSite=${sameSite}`);\n        }\n        document.cookie = cookie.join(\"; \");\n      },\n      read(name) {\n        if (typeof document === \"undefined\") return null;\n        const match = document.cookie.match(new RegExp(\"(?:^|; )\" + name + \"=([^;]*)\"));\n        return match ? decodeURIComponent(match[1]) : null;\n      },\n      remove(name) {\n        this.write(name, \"\", Date.now() - 864e5, \"/\");\n      }\n    }\n  ) : (\n    // Non-standard browser env (web workers, react-native) lack needed support.\n    {\n      write() {\n      },\n      read() {\n        return null;\n      },\n      remove() {\n      }\n    }\n  );\n\n  // node_modules/axios/lib/helpers/isAbsoluteURL.js\n  function isAbsoluteURL(url) {\n    if (typeof url !== \"string\") {\n      return false;\n    }\n    return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n  }\n\n  // node_modules/axios/lib/helpers/combineURLs.js\n  function combineURLs(baseURL, relativeURL) {\n    return relativeURL ? baseURL.replace(/\\/?\\/$/, \"\") + \"/\" + relativeURL.replace(/^\\/+/, \"\") : baseURL;\n  }\n\n  // node_modules/axios/lib/core/buildFullPath.js\n  function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n    let isRelativeUrl = !isAbsoluteURL(requestedURL);\n    if (baseURL && (isRelativeUrl || allowAbsoluteUrls === false)) {\n      return combineURLs(baseURL, requestedURL);\n    }\n    return requestedURL;\n  }\n\n  // node_modules/axios/lib/core/mergeConfig.js\n  var headersToObject = (thing) => thing instanceof AxiosHeaders_default ? { ...thing } : thing;\n  function mergeConfig(config1, config2) {\n    config2 = config2 || {};\n    const config = /* @__PURE__ */ Object.create(null);\n    Object.defineProperty(config, \"hasOwnProperty\", {\n      value: Object.prototype.hasOwnProperty,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    });\n    function getMergedValue(target, source, prop, caseless) {\n      if (utils_default.isPlainObject(target) && utils_default.isPlainObject(source)) {\n        return utils_default.merge.call({ caseless }, target, source);\n      } else if (utils_default.isPlainObject(source)) {\n        return utils_default.merge({}, source);\n      } else if (utils_default.isArray(source)) {\n        return source.slice();\n      }\n      return source;\n    }\n    function mergeDeepProperties(a, b, prop, caseless) {\n      if (!utils_default.isUndefined(b)) {\n        return getMergedValue(a, b, prop, caseless);\n      } else if (!utils_default.isUndefined(a)) {\n        return getMergedValue(void 0, a, prop, caseless);\n      }\n    }\n    function valueFromConfig2(a, b) {\n      if (!utils_default.isUndefined(b)) {\n        return getMergedValue(void 0, b);\n      }\n    }\n    function defaultToConfig2(a, b) {\n      if (!utils_default.isUndefined(b)) {\n        return getMergedValue(void 0, b);\n      } else if (!utils_default.isUndefined(a)) {\n        return getMergedValue(void 0, a);\n      }\n    }\n    function mergeDirectKeys(a, b, prop) {\n      if (utils_default.hasOwnProp(config2, prop)) {\n        return getMergedValue(a, b);\n      } else if (utils_default.hasOwnProp(config1, prop)) {\n        return getMergedValue(void 0, a);\n      }\n    }\n    const mergeMap = {\n      url: valueFromConfig2,\n      method: valueFromConfig2,\n      data: valueFromConfig2,\n      baseURL: defaultToConfig2,\n      transformRequest: defaultToConfig2,\n      transformResponse: defaultToConfig2,\n      paramsSerializer: defaultToConfig2,\n      timeout: defaultToConfig2,\n      timeoutMessage: defaultToConfig2,\n      withCredentials: defaultToConfig2,\n      withXSRFToken: defaultToConfig2,\n      adapter: defaultToConfig2,\n      responseType: defaultToConfig2,\n      xsrfCookieName: defaultToConfig2,\n      xsrfHeaderName: defaultToConfig2,\n      onUploadProgress: defaultToConfig2,\n      onDownloadProgress: defaultToConfig2,\n      decompress: defaultToConfig2,\n      maxContentLength: defaultToConfig2,\n      maxBodyLength: defaultToConfig2,\n      beforeRedirect: defaultToConfig2,\n      transport: defaultToConfig2,\n      httpAgent: defaultToConfig2,\n      httpsAgent: defaultToConfig2,\n      cancelToken: defaultToConfig2,\n      socketPath: defaultToConfig2,\n      allowedSocketPaths: defaultToConfig2,\n      responseEncoding: defaultToConfig2,\n      validateStatus: mergeDirectKeys,\n      headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)\n    };\n    utils_default.forEach(Object.keys({ ...config1, ...config2 }), function computeConfigValue(prop) {\n      if (prop === \"__proto__\" || prop === \"constructor\" || prop === \"prototype\") return;\n      const merge2 = utils_default.hasOwnProp(mergeMap, prop) ? mergeMap[prop] : mergeDeepProperties;\n      const a = utils_default.hasOwnProp(config1, prop) ? config1[prop] : void 0;\n      const b = utils_default.hasOwnProp(config2, prop) ? config2[prop] : void 0;\n      const configValue = merge2(a, b, prop);\n      utils_default.isUndefined(configValue) && merge2 !== mergeDirectKeys || (config[prop] = configValue);\n    });\n    return config;\n  }\n\n  // node_modules/axios/lib/helpers/resolveConfig.js\n  var resolveConfig_default = (config) => {\n    const newConfig = mergeConfig({}, config);\n    const own2 = (key) => utils_default.hasOwnProp(newConfig, key) ? newConfig[key] : void 0;\n    const data = own2(\"data\");\n    let withXSRFToken = own2(\"withXSRFToken\");\n    const xsrfHeaderName = own2(\"xsrfHeaderName\");\n    const xsrfCookieName = own2(\"xsrfCookieName\");\n    let headers = own2(\"headers\");\n    const auth = own2(\"auth\");\n    const baseURL = own2(\"baseURL\");\n    const allowAbsoluteUrls = own2(\"allowAbsoluteUrls\");\n    const url = own2(\"url\");\n    newConfig.headers = headers = AxiosHeaders_default.from(headers);\n    newConfig.url = buildURL(\n      buildFullPath(baseURL, url, allowAbsoluteUrls),\n      config.params,\n      config.paramsSerializer\n    );\n    if (auth) {\n      headers.set(\n        \"Authorization\",\n        \"Basic \" + btoa(\n          (auth.username || \"\") + \":\" + (auth.password ? unescape(encodeURIComponent(auth.password)) : \"\")\n        )\n      );\n    }\n    if (utils_default.isFormData(data)) {\n      if (platform_default.hasStandardBrowserEnv || platform_default.hasStandardBrowserWebWorkerEnv) {\n        headers.setContentType(void 0);\n      } else if (utils_default.isFunction(data.getHeaders)) {\n        const formHeaders = data.getHeaders();\n        const allowedHeaders = [\"content-type\", \"content-length\"];\n        Object.entries(formHeaders).forEach(([key, val]) => {\n          if (allowedHeaders.includes(key.toLowerCase())) {\n            headers.set(key, val);\n          }\n        });\n      }\n    }\n    if (platform_default.hasStandardBrowserEnv) {\n      if (utils_default.isFunction(withXSRFToken)) {\n        withXSRFToken = withXSRFToken(newConfig);\n      }\n      const shouldSendXSRF = withXSRFToken === true || withXSRFToken == null && isURLSameOrigin_default(newConfig.url);\n      if (shouldSendXSRF) {\n        const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies_default.read(xsrfCookieName);\n        if (xsrfValue) {\n          headers.set(xsrfHeaderName, xsrfValue);\n        }\n      }\n    }\n    return newConfig;\n  };\n\n  // node_modules/axios/lib/adapters/xhr.js\n  var isXHRAdapterSupported = typeof XMLHttpRequest !== \"undefined\";\n  var xhr_default = isXHRAdapterSupported && function(config) {\n    return new Promise(function dispatchXhrRequest(resolve, reject) {\n      const _config = resolveConfig_default(config);\n      let requestData = _config.data;\n      const requestHeaders = AxiosHeaders_default.from(_config.headers).normalize();\n      let { responseType, onUploadProgress, onDownloadProgress } = _config;\n      let onCanceled;\n      let uploadThrottled, downloadThrottled;\n      let flushUpload, flushDownload;\n      function done() {\n        flushUpload && flushUpload();\n        flushDownload && flushDownload();\n        _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n        _config.signal && _config.signal.removeEventListener(\"abort\", onCanceled);\n      }\n      let request = new XMLHttpRequest();\n      request.open(_config.method.toUpperCase(), _config.url, true);\n      request.timeout = _config.timeout;\n      function onloadend() {\n        if (!request) {\n          return;\n        }\n        const responseHeaders = AxiosHeaders_default.from(\n          \"getAllResponseHeaders\" in request && request.getAllResponseHeaders()\n        );\n        const responseData = !responseType || responseType === \"text\" || responseType === \"json\" ? request.responseText : request.response;\n        const response = {\n          data: responseData,\n          status: request.status,\n          statusText: request.statusText,\n          headers: responseHeaders,\n          config,\n          request\n        };\n        settle(\n          function _resolve(value) {\n            resolve(value);\n            done();\n          },\n          function _reject(err) {\n            reject(err);\n            done();\n          },\n          response\n        );\n        request = null;\n      }\n      if (\"onloadend\" in request) {\n        request.onloadend = onloadend;\n      } else {\n        request.onreadystatechange = function handleLoad() {\n          if (!request || request.readyState !== 4) {\n            return;\n          }\n          if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf(\"file:\") === 0)) {\n            return;\n          }\n          setTimeout(onloadend);\n        };\n      }\n      request.onabort = function handleAbort() {\n        if (!request) {\n          return;\n        }\n        reject(new AxiosError_default(\"Request aborted\", AxiosError_default.ECONNABORTED, config, request));\n        request = null;\n      };\n      request.onerror = function handleError(event) {\n        const msg = event && event.message ? event.message : \"Network Error\";\n        const err = new AxiosError_default(msg, AxiosError_default.ERR_NETWORK, config, request);\n        err.event = event || null;\n        reject(err);\n        request = null;\n      };\n      request.ontimeout = function handleTimeout() {\n        let timeoutErrorMessage = _config.timeout ? \"timeout of \" + _config.timeout + \"ms exceeded\" : \"timeout exceeded\";\n        const transitional2 = _config.transitional || transitional_default;\n        if (_config.timeoutErrorMessage) {\n          timeoutErrorMessage = _config.timeoutErrorMessage;\n        }\n        reject(\n          new AxiosError_default(\n            timeoutErrorMessage,\n            transitional2.clarifyTimeoutError ? AxiosError_default.ETIMEDOUT : AxiosError_default.ECONNABORTED,\n            config,\n            request\n          )\n        );\n        request = null;\n      };\n      requestData === void 0 && requestHeaders.setContentType(null);\n      if (\"setRequestHeader\" in request) {\n        utils_default.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n          request.setRequestHeader(key, val);\n        });\n      }\n      if (!utils_default.isUndefined(_config.withCredentials)) {\n        request.withCredentials = !!_config.withCredentials;\n      }\n      if (responseType && responseType !== \"json\") {\n        request.responseType = _config.responseType;\n      }\n      if (onDownloadProgress) {\n        [downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true);\n        request.addEventListener(\"progress\", downloadThrottled);\n      }\n      if (onUploadProgress && request.upload) {\n        [uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress);\n        request.upload.addEventListener(\"progress\", uploadThrottled);\n        request.upload.addEventListener(\"loadend\", flushUpload);\n      }\n      if (_config.cancelToken || _config.signal) {\n        onCanceled = (cancel) => {\n          if (!request) {\n            return;\n          }\n          reject(!cancel || cancel.type ? new CanceledError_default(null, config, request) : cancel);\n          request.abort();\n          request = null;\n        };\n        _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n        if (_config.signal) {\n          _config.signal.aborted ? onCanceled() : _config.signal.addEventListener(\"abort\", onCanceled);\n        }\n      }\n      const protocol = parseProtocol(_config.url);\n      if (protocol && platform_default.protocols.indexOf(protocol) === -1) {\n        reject(\n          new AxiosError_default(\n            \"Unsupported protocol \" + protocol + \":\",\n            AxiosError_default.ERR_BAD_REQUEST,\n            config\n          )\n        );\n        return;\n      }\n      request.send(requestData || null);\n    });\n  };\n\n  // node_modules/axios/lib/helpers/composeSignals.js\n  var composeSignals = (signals, timeout) => {\n    const { length } = signals = signals ? signals.filter(Boolean) : [];\n    if (timeout || length) {\n      let controller = new AbortController();\n      let aborted;\n      const onabort = function(reason) {\n        if (!aborted) {\n          aborted = true;\n          unsubscribe();\n          const err = reason instanceof Error ? reason : this.reason;\n          controller.abort(\n            err instanceof AxiosError_default ? err : new CanceledError_default(err instanceof Error ? err.message : err)\n          );\n        }\n      };\n      let timer = timeout && setTimeout(() => {\n        timer = null;\n        onabort(new AxiosError_default(`timeout of ${timeout}ms exceeded`, AxiosError_default.ETIMEDOUT));\n      }, timeout);\n      const unsubscribe = () => {\n        if (signals) {\n          timer && clearTimeout(timer);\n          timer = null;\n          signals.forEach((signal2) => {\n            signal2.unsubscribe ? signal2.unsubscribe(onabort) : signal2.removeEventListener(\"abort\", onabort);\n          });\n          signals = null;\n        }\n      };\n      signals.forEach((signal2) => signal2.addEventListener(\"abort\", onabort));\n      const { signal } = controller;\n      signal.unsubscribe = () => utils_default.asap(unsubscribe);\n      return signal;\n    }\n  };\n  var composeSignals_default = composeSignals;\n\n  // node_modules/axios/lib/helpers/trackStream.js\n  var streamChunk = function* (chunk, chunkSize) {\n    let len = chunk.byteLength;\n    if (!chunkSize || len < chunkSize) {\n      yield chunk;\n      return;\n    }\n    let pos = 0;\n    let end;\n    while (pos < len) {\n      end = pos + chunkSize;\n      yield chunk.slice(pos, end);\n      pos = end;\n    }\n  };\n  var readBytes = async function* (iterable, chunkSize) {\n    for await (const chunk of readStream(iterable)) {\n      yield* streamChunk(chunk, chunkSize);\n    }\n  };\n  var readStream = async function* (stream) {\n    if (stream[Symbol.asyncIterator]) {\n      yield* stream;\n      return;\n    }\n    const reader = stream.getReader();\n    try {\n      for (; ; ) {\n        const { done, value } = await reader.read();\n        if (done) {\n          break;\n        }\n        yield value;\n      }\n    } finally {\n      await reader.cancel();\n    }\n  };\n  var trackStream = (stream, chunkSize, onProgress, onFinish) => {\n    const iterator2 = readBytes(stream, chunkSize);\n    let bytes = 0;\n    let done;\n    let _onFinish = (e) => {\n      if (!done) {\n        done = true;\n        onFinish && onFinish(e);\n      }\n    };\n    return new ReadableStream(\n      {\n        async pull(controller) {\n          try {\n            const { done: done2, value } = await iterator2.next();\n            if (done2) {\n              _onFinish();\n              controller.close();\n              return;\n            }\n            let len = value.byteLength;\n            if (onProgress) {\n              let loadedBytes = bytes += len;\n              onProgress(loadedBytes);\n            }\n            controller.enqueue(new Uint8Array(value));\n          } catch (err) {\n            _onFinish(err);\n            throw err;\n          }\n        },\n        cancel(reason) {\n          _onFinish(reason);\n          return iterator2.return();\n        }\n      },\n      {\n        highWaterMark: 2\n      }\n    );\n  };\n\n  // node_modules/axios/lib/adapters/fetch.js\n  var DEFAULT_CHUNK_SIZE = 64 * 1024;\n  var { isFunction: isFunction2 } = utils_default;\n  var globalFetchAPI = (({ Request, Response }) => ({\n    Request,\n    Response\n  }))(utils_default.global);\n  var { ReadableStream: ReadableStream2, TextEncoder } = utils_default.global;\n  var test = (fn, ...args) => {\n    try {\n      return !!fn(...args);\n    } catch (e) {\n      return false;\n    }\n  };\n  var factory = (env) => {\n    env = utils_default.merge.call(\n      {\n        skipUndefined: true\n      },\n      globalFetchAPI,\n      env\n    );\n    const { fetch: envFetch, Request, Response } = env;\n    const isFetchSupported = envFetch ? isFunction2(envFetch) : typeof fetch === \"function\";\n    const isRequestSupported = isFunction2(Request);\n    const isResponseSupported = isFunction2(Response);\n    if (!isFetchSupported) {\n      return false;\n    }\n    const isReadableStreamSupported = isFetchSupported && isFunction2(ReadableStream2);\n    const encodeText = isFetchSupported && (typeof TextEncoder === \"function\" ? /* @__PURE__ */ ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) : async (str) => new Uint8Array(await new Request(str).arrayBuffer()));\n    const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n      let duplexAccessed = false;\n      const request = new Request(platform_default.origin, {\n        body: new ReadableStream2(),\n        method: \"POST\",\n        get duplex() {\n          duplexAccessed = true;\n          return \"half\";\n        }\n      });\n      const hasContentType = request.headers.has(\"Content-Type\");\n      if (request.body != null) {\n        request.body.cancel();\n      }\n      return duplexAccessed && !hasContentType;\n    });\n    const supportsResponseStream = isResponseSupported && isReadableStreamSupported && test(() => utils_default.isReadableStream(new Response(\"\").body));\n    const resolvers = {\n      stream: supportsResponseStream && ((res) => res.body)\n    };\n    isFetchSupported && (() => {\n      [\"text\", \"arrayBuffer\", \"blob\", \"formData\", \"stream\"].forEach((type) => {\n        !resolvers[type] && (resolvers[type] = (res, config) => {\n          let method = res && res[type];\n          if (method) {\n            return method.call(res);\n          }\n          throw new AxiosError_default(\n            `Response type '${type}' is not supported`,\n            AxiosError_default.ERR_NOT_SUPPORT,\n            config\n          );\n        });\n      });\n    })();\n    const getBodyLength = async (body) => {\n      if (body == null) {\n        return 0;\n      }\n      if (utils_default.isBlob(body)) {\n        return body.size;\n      }\n      if (utils_default.isSpecCompliantForm(body)) {\n        const _request = new Request(platform_default.origin, {\n          method: \"POST\",\n          body\n        });\n        return (await _request.arrayBuffer()).byteLength;\n      }\n      if (utils_default.isArrayBufferView(body) || utils_default.isArrayBuffer(body)) {\n        return body.byteLength;\n      }\n      if (utils_default.isURLSearchParams(body)) {\n        body = body + \"\";\n      }\n      if (utils_default.isString(body)) {\n        return (await encodeText(body)).byteLength;\n      }\n    };\n    const resolveBodyLength = async (headers, body) => {\n      const length = utils_default.toFiniteNumber(headers.getContentLength());\n      return length == null ? getBodyLength(body) : length;\n    };\n    return async (config) => {\n      let {\n        url,\n        method,\n        data,\n        signal,\n        cancelToken,\n        timeout,\n        onDownloadProgress,\n        onUploadProgress,\n        responseType,\n        headers,\n        withCredentials = \"same-origin\",\n        fetchOptions\n      } = resolveConfig_default(config);\n      let _fetch = envFetch || fetch;\n      responseType = responseType ? (responseType + \"\").toLowerCase() : \"text\";\n      let composedSignal = composeSignals_default(\n        [signal, cancelToken && cancelToken.toAbortSignal()],\n        timeout\n      );\n      let request = null;\n      const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n        composedSignal.unsubscribe();\n      });\n      let requestContentLength;\n      try {\n        if (onUploadProgress && supportsRequestStream && method !== \"get\" && method !== \"head\" && (requestContentLength = await resolveBodyLength(headers, data)) !== 0) {\n          let _request = new Request(url, {\n            method: \"POST\",\n            body: data,\n            duplex: \"half\"\n          });\n          let contentTypeHeader;\n          if (utils_default.isFormData(data) && (contentTypeHeader = _request.headers.get(\"content-type\"))) {\n            headers.setContentType(contentTypeHeader);\n          }\n          if (_request.body) {\n            const [onProgress, flush] = progressEventDecorator(\n              requestContentLength,\n              progressEventReducer(asyncDecorator(onUploadProgress))\n            );\n            data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n          }\n        }\n        if (!utils_default.isString(withCredentials)) {\n          withCredentials = withCredentials ? \"include\" : \"omit\";\n        }\n        const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n        if (utils_default.isFormData(data)) {\n          const contentType = headers.getContentType();\n          if (contentType && /^multipart\\/form-data/i.test(contentType) && !/boundary=/i.test(contentType)) {\n            headers.delete(\"content-type\");\n          }\n        }\n        const resolvedOptions = {\n          ...fetchOptions,\n          signal: composedSignal,\n          method: method.toUpperCase(),\n          headers: headers.normalize().toJSON(),\n          body: data,\n          duplex: \"half\",\n          credentials: isCredentialsSupported ? withCredentials : void 0\n        };\n        request = isRequestSupported && new Request(url, resolvedOptions);\n        let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n        const isStreamResponse = supportsResponseStream && (responseType === \"stream\" || responseType === \"response\");\n        if (supportsResponseStream && (onDownloadProgress || isStreamResponse && unsubscribe)) {\n          const options = {};\n          [\"status\", \"statusText\", \"headers\"].forEach((prop) => {\n            options[prop] = response[prop];\n          });\n          const responseContentLength = utils_default.toFiniteNumber(response.headers.get(\"content-length\"));\n          const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n            responseContentLength,\n            progressEventReducer(asyncDecorator(onDownloadProgress), true)\n          ) || [];\n          response = new Response(\n            trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n              flush && flush();\n              unsubscribe && unsubscribe();\n            }),\n            options\n          );\n        }\n        responseType = responseType || \"text\";\n        let responseData = await resolvers[utils_default.findKey(resolvers, responseType) || \"text\"](\n          response,\n          config\n        );\n        !isStreamResponse && unsubscribe && unsubscribe();\n        return await new Promise((resolve, reject) => {\n          settle(resolve, reject, {\n            data: responseData,\n            headers: AxiosHeaders_default.from(response.headers),\n            status: response.status,\n            statusText: response.statusText,\n            config,\n            request\n          });\n        });\n      } catch (err) {\n        unsubscribe && unsubscribe();\n        if (err && err.name === \"TypeError\" && /Load failed|fetch/i.test(err.message)) {\n          throw Object.assign(\n            new AxiosError_default(\n              \"Network Error\",\n              AxiosError_default.ERR_NETWORK,\n              config,\n              request,\n              err && err.response\n            ),\n            {\n              cause: err.cause || err\n            }\n          );\n        }\n        throw AxiosError_default.from(err, err && err.code, config, request, err && err.response);\n      }\n    };\n  };\n  var seedCache = /* @__PURE__ */ new Map();\n  var getFetch = (config) => {\n    let env = config && config.env || {};\n    const { fetch: fetch2, Request, Response } = env;\n    const seeds = [Request, Response, fetch2];\n    let len = seeds.length, i = len, seed, target, map = seedCache;\n    while (i--) {\n      seed = seeds[i];\n      target = map.get(seed);\n      target === void 0 && map.set(seed, target = i ? /* @__PURE__ */ new Map() : factory(env));\n      map = target;\n    }\n    return target;\n  };\n  var adapter = getFetch();\n\n  // node_modules/axios/lib/adapters/adapters.js\n  var knownAdapters = {\n    http: null_default,\n    xhr: xhr_default,\n    fetch: {\n      get: getFetch\n    }\n  };\n  utils_default.forEach(knownAdapters, (fn, value) => {\n    if (fn) {\n      try {\n        Object.defineProperty(fn, \"name\", { value });\n      } catch (e) {\n      }\n      Object.defineProperty(fn, \"adapterName\", { value });\n    }\n  });\n  var renderReason = (reason) => `- ${reason}`;\n  var isResolvedHandle = (adapter2) => utils_default.isFunction(adapter2) || adapter2 === null || adapter2 === false;\n  function getAdapter(adapters, config) {\n    adapters = utils_default.isArray(adapters) ? adapters : [adapters];\n    const { length } = adapters;\n    let nameOrAdapter;\n    let adapter2;\n    const rejectedReasons = {};\n    for (let i = 0; i < length; i++) {\n      nameOrAdapter = adapters[i];\n      let id;\n      adapter2 = nameOrAdapter;\n      if (!isResolvedHandle(nameOrAdapter)) {\n        adapter2 = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n        if (adapter2 === void 0) {\n          throw new AxiosError_default(`Unknown adapter '${id}'`);\n        }\n      }\n      if (adapter2 && (utils_default.isFunction(adapter2) || (adapter2 = adapter2.get(config)))) {\n        break;\n      }\n      rejectedReasons[id || \"#\" + i] = adapter2;\n    }\n    if (!adapter2) {\n      const reasons = Object.entries(rejectedReasons).map(\n        ([id, state]) => `adapter ${id} ` + (state === false ? \"is not supported by the environment\" : \"is not available in the build\")\n      );\n      let s = length ? reasons.length > 1 ? \"since :\\n\" + reasons.map(renderReason).join(\"\\n\") : \" \" + renderReason(reasons[0]) : \"as no adapter specified\";\n      throw new AxiosError_default(\n        `There is no suitable adapter to dispatch the request ` + s,\n        \"ERR_NOT_SUPPORT\"\n      );\n    }\n    return adapter2;\n  }\n  var adapters_default = {\n    /**\n     * Resolve an adapter from a list of adapter names or functions.\n     * @type {Function}\n     */\n    getAdapter,\n    /**\n     * Exposes all known adapters\n     * @type {Object<string, Function|Object>}\n     */\n    adapters: knownAdapters\n  };\n\n  // node_modules/axios/lib/core/dispatchRequest.js\n  function throwIfCancellationRequested(config) {\n    if (config.cancelToken) {\n      config.cancelToken.throwIfRequested();\n    }\n    if (config.signal && config.signal.aborted) {\n      throw new CanceledError_default(null, config);\n    }\n  }\n  function dispatchRequest(config) {\n    throwIfCancellationRequested(config);\n    config.headers = AxiosHeaders_default.from(config.headers);\n    config.data = transformData.call(config, config.transformRequest);\n    if ([\"post\", \"put\", \"patch\"].indexOf(config.method) !== -1) {\n      config.headers.setContentType(\"application/x-www-form-urlencoded\", false);\n    }\n    const adapter2 = adapters_default.getAdapter(config.adapter || defaults_default.adapter, config);\n    return adapter2(config).then(\n      function onAdapterResolution(response) {\n        throwIfCancellationRequested(config);\n        response.data = transformData.call(config, config.transformResponse, response);\n        response.headers = AxiosHeaders_default.from(response.headers);\n        return response;\n      },\n      function onAdapterRejection(reason) {\n        if (!isCancel(reason)) {\n          throwIfCancellationRequested(config);\n          if (reason && reason.response) {\n            reason.response.data = transformData.call(\n              config,\n              config.transformResponse,\n              reason.response\n            );\n            reason.response.headers = AxiosHeaders_default.from(reason.response.headers);\n          }\n        }\n        return Promise.reject(reason);\n      }\n    );\n  }\n\n  // node_modules/axios/lib/env/data.js\n  var VERSION = \"1.15.2\";\n\n  // node_modules/axios/lib/helpers/validator.js\n  var validators = {};\n  [\"object\", \"boolean\", \"number\", \"function\", \"string\", \"symbol\"].forEach((type, i) => {\n    validators[type] = function validator(thing) {\n      return typeof thing === type || \"a\" + (i < 1 ? \"n \" : \" \") + type;\n    };\n  });\n  var deprecatedWarnings = {};\n  validators.transitional = function transitional(validator, version, message) {\n    function formatMessage(opt, desc) {\n      return \"[Axios v\" + VERSION + \"] Transitional option '\" + opt + \"'\" + desc + (message ? \". \" + message : \"\");\n    }\n    return (value, opt, opts) => {\n      if (validator === false) {\n        throw new AxiosError_default(\n          formatMessage(opt, \" has been removed\" + (version ? \" in \" + version : \"\")),\n          AxiosError_default.ERR_DEPRECATED\n        );\n      }\n      if (version && !deprecatedWarnings[opt]) {\n        deprecatedWarnings[opt] = true;\n        console.warn(\n          formatMessage(\n            opt,\n            \" has been deprecated since v\" + version + \" and will be removed in the near future\"\n          )\n        );\n      }\n      return validator ? validator(value, opt, opts) : true;\n    };\n  };\n  validators.spelling = function spelling(correctSpelling) {\n    return (value, opt) => {\n      console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n      return true;\n    };\n  };\n  function assertOptions(options, schema, allowUnknown) {\n    if (typeof options !== \"object\") {\n      throw new AxiosError_default(\"options must be an object\", AxiosError_default.ERR_BAD_OPTION_VALUE);\n    }\n    const keys = Object.keys(options);\n    let i = keys.length;\n    while (i-- > 0) {\n      const opt = keys[i];\n      const validator = Object.prototype.hasOwnProperty.call(schema, opt) ? schema[opt] : void 0;\n      if (validator) {\n        const value = options[opt];\n        const result = value === void 0 || validator(value, opt, options);\n        if (result !== true) {\n          throw new AxiosError_default(\n            \"option \" + opt + \" must be \" + result,\n            AxiosError_default.ERR_BAD_OPTION_VALUE\n          );\n        }\n        continue;\n      }\n      if (allowUnknown !== true) {\n        throw new AxiosError_default(\"Unknown option \" + opt, AxiosError_default.ERR_BAD_OPTION);\n      }\n    }\n  }\n  var validator_default = {\n    assertOptions,\n    validators\n  };\n\n  // node_modules/axios/lib/core/Axios.js\n  var validators2 = validator_default.validators;\n  var Axios = class {\n    constructor(instanceConfig) {\n      this.defaults = instanceConfig || {};\n      this.interceptors = {\n        request: new InterceptorManager_default(),\n        response: new InterceptorManager_default()\n      };\n    }\n    /**\n     * Dispatch a request\n     *\n     * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n     * @param {?Object} config\n     *\n     * @returns {Promise} The Promise to be fulfilled\n     */\n    async request(configOrUrl, config) {\n      try {\n        return await this._request(configOrUrl, config);\n      } catch (err) {\n        if (err instanceof Error) {\n          let dummy = {};\n          Error.captureStackTrace ? Error.captureStackTrace(dummy) : dummy = new Error();\n          const stack = (() => {\n            if (!dummy.stack) {\n              return \"\";\n            }\n            const firstNewlineIndex = dummy.stack.indexOf(\"\\n\");\n            return firstNewlineIndex === -1 ? \"\" : dummy.stack.slice(firstNewlineIndex + 1);\n          })();\n          try {\n            if (!err.stack) {\n              err.stack = stack;\n            } else if (stack) {\n              const firstNewlineIndex = stack.indexOf(\"\\n\");\n              const secondNewlineIndex = firstNewlineIndex === -1 ? -1 : stack.indexOf(\"\\n\", firstNewlineIndex + 1);\n              const stackWithoutTwoTopLines = secondNewlineIndex === -1 ? \"\" : stack.slice(secondNewlineIndex + 1);\n              if (!String(err.stack).endsWith(stackWithoutTwoTopLines)) {\n                err.stack += \"\\n\" + stack;\n              }\n            }\n          } catch (e) {\n          }\n        }\n        throw err;\n      }\n    }\n    _request(configOrUrl, config) {\n      if (typeof configOrUrl === \"string\") {\n        config = config || {};\n        config.url = configOrUrl;\n      } else {\n        config = configOrUrl || {};\n      }\n      config = mergeConfig(this.defaults, config);\n      const { transitional: transitional2, paramsSerializer, headers } = config;\n      if (transitional2 !== void 0) {\n        validator_default.assertOptions(\n          transitional2,\n          {\n            silentJSONParsing: validators2.transitional(validators2.boolean),\n            forcedJSONParsing: validators2.transitional(validators2.boolean),\n            clarifyTimeoutError: validators2.transitional(validators2.boolean),\n            legacyInterceptorReqResOrdering: validators2.transitional(validators2.boolean)\n          },\n          false\n        );\n      }\n      if (paramsSerializer != null) {\n        if (utils_default.isFunction(paramsSerializer)) {\n          config.paramsSerializer = {\n            serialize: paramsSerializer\n          };\n        } else {\n          validator_default.assertOptions(\n            paramsSerializer,\n            {\n              encode: validators2.function,\n              serialize: validators2.function\n            },\n            true\n          );\n        }\n      }\n      if (config.allowAbsoluteUrls !== void 0) {\n      } else if (this.defaults.allowAbsoluteUrls !== void 0) {\n        config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n      } else {\n        config.allowAbsoluteUrls = true;\n      }\n      validator_default.assertOptions(\n        config,\n        {\n          baseUrl: validators2.spelling(\"baseURL\"),\n          withXsrfToken: validators2.spelling(\"withXSRFToken\")\n        },\n        true\n      );\n      config.method = (config.method || this.defaults.method || \"get\").toLowerCase();\n      let contextHeaders = headers && utils_default.merge(headers.common, headers[config.method]);\n      headers && utils_default.forEach([\"delete\", \"get\", \"head\", \"post\", \"put\", \"patch\", \"common\"], (method) => {\n        delete headers[method];\n      });\n      config.headers = AxiosHeaders_default.concat(contextHeaders, headers);\n      const requestInterceptorChain = [];\n      let synchronousRequestInterceptors = true;\n      this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n        if (typeof interceptor.runWhen === \"function\" && interceptor.runWhen(config) === false) {\n          return;\n        }\n        synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n        const transitional3 = config.transitional || transitional_default;\n        const legacyInterceptorReqResOrdering = transitional3 && transitional3.legacyInterceptorReqResOrdering;\n        if (legacyInterceptorReqResOrdering) {\n          requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n        } else {\n          requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n        }\n      });\n      const responseInterceptorChain = [];\n      this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n        responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n      });\n      let promise;\n      let i = 0;\n      let len;\n      if (!synchronousRequestInterceptors) {\n        const chain = [dispatchRequest.bind(this), void 0];\n        chain.unshift(...requestInterceptorChain);\n        chain.push(...responseInterceptorChain);\n        len = chain.length;\n        promise = Promise.resolve(config);\n        while (i < len) {\n          promise = promise.then(chain[i++], chain[i++]);\n        }\n        return promise;\n      }\n      len = requestInterceptorChain.length;\n      let newConfig = config;\n      while (i < len) {\n        const onFulfilled = requestInterceptorChain[i++];\n        const onRejected = requestInterceptorChain[i++];\n        try {\n          newConfig = onFulfilled(newConfig);\n        } catch (error) {\n          onRejected.call(this, error);\n          break;\n        }\n      }\n      try {\n        promise = dispatchRequest.call(this, newConfig);\n      } catch (error) {\n        return Promise.reject(error);\n      }\n      i = 0;\n      len = responseInterceptorChain.length;\n      while (i < len) {\n        promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n      }\n      return promise;\n    }\n    getUri(config) {\n      config = mergeConfig(this.defaults, config);\n      const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n      return buildURL(fullPath, config.params, config.paramsSerializer);\n    }\n  };\n  utils_default.forEach([\"delete\", \"get\", \"head\", \"options\"], function forEachMethodNoData(method) {\n    Axios.prototype[method] = function(url, config) {\n      return this.request(\n        mergeConfig(config || {}, {\n          method,\n          url,\n          data: (config || {}).data\n        })\n      );\n    };\n  });\n  utils_default.forEach([\"post\", \"put\", \"patch\"], function forEachMethodWithData(method) {\n    function generateHTTPMethod(isForm) {\n      return function httpMethod(url, data, config) {\n        return this.request(\n          mergeConfig(config || {}, {\n            method,\n            headers: isForm ? {\n              \"Content-Type\": \"multipart/form-data\"\n            } : {},\n            url,\n            data\n          })\n        );\n      };\n    }\n    Axios.prototype[method] = generateHTTPMethod();\n    Axios.prototype[method + \"Form\"] = generateHTTPMethod(true);\n  });\n  var Axios_default = Axios;\n\n  // node_modules/axios/lib/cancel/CancelToken.js\n  var CancelToken = class _CancelToken {\n    constructor(executor) {\n      if (typeof executor !== \"function\") {\n        throw new TypeError(\"executor must be a function.\");\n      }\n      let resolvePromise;\n      this.promise = new Promise(function promiseExecutor(resolve) {\n        resolvePromise = resolve;\n      });\n      const token = this;\n      this.promise.then((cancel) => {\n        if (!token._listeners) return;\n        let i = token._listeners.length;\n        while (i-- > 0) {\n          token._listeners[i](cancel);\n        }\n        token._listeners = null;\n      });\n      this.promise.then = (onfulfilled) => {\n        let _resolve;\n        const promise = new Promise((resolve) => {\n          token.subscribe(resolve);\n          _resolve = resolve;\n        }).then(onfulfilled);\n        promise.cancel = function reject() {\n          token.unsubscribe(_resolve);\n        };\n        return promise;\n      };\n      executor(function cancel(message, config, request) {\n        if (token.reason) {\n          return;\n        }\n        token.reason = new CanceledError_default(message, config, request);\n        resolvePromise(token.reason);\n      });\n    }\n    /**\n     * Throws a `CanceledError` if cancellation has been requested.\n     */\n    throwIfRequested() {\n      if (this.reason) {\n        throw this.reason;\n      }\n    }\n    /**\n     * Subscribe to the cancel signal\n     */\n    subscribe(listener) {\n      if (this.reason) {\n        listener(this.reason);\n        return;\n      }\n      if (this._listeners) {\n        this._listeners.push(listener);\n      } else {\n        this._listeners = [listener];\n      }\n    }\n    /**\n     * Unsubscribe from the cancel signal\n     */\n    unsubscribe(listener) {\n      if (!this._listeners) {\n        return;\n      }\n      const index = this._listeners.indexOf(listener);\n      if (index !== -1) {\n        this._listeners.splice(index, 1);\n      }\n    }\n    toAbortSignal() {\n      const controller = new AbortController();\n      const abort = (err) => {\n        controller.abort(err);\n      };\n      this.subscribe(abort);\n      controller.signal.unsubscribe = () => this.unsubscribe(abort);\n      return controller.signal;\n    }\n    /**\n     * Returns an object that contains a new `CancelToken` and a function that, when called,\n     * cancels the `CancelToken`.\n     */\n    static source() {\n      let cancel;\n      const token = new _CancelToken(function executor(c) {\n        cancel = c;\n      });\n      return {\n        token,\n        cancel\n      };\n    }\n  };\n  var CancelToken_default = CancelToken;\n\n  // node_modules/axios/lib/helpers/spread.js\n  function spread(callback) {\n    return function wrap(arr) {\n      return callback.apply(null, arr);\n    };\n  }\n\n  // node_modules/axios/lib/helpers/isAxiosError.js\n  function isAxiosError(payload) {\n    return utils_default.isObject(payload) && payload.isAxiosError === true;\n  }\n\n  // node_modules/axios/lib/helpers/HttpStatusCode.js\n  var HttpStatusCode = {\n    Continue: 100,\n    SwitchingProtocols: 101,\n    Processing: 102,\n    EarlyHints: 103,\n    Ok: 200,\n    Created: 201,\n    Accepted: 202,\n    NonAuthoritativeInformation: 203,\n    NoContent: 204,\n    ResetContent: 205,\n    PartialContent: 206,\n    MultiStatus: 207,\n    AlreadyReported: 208,\n    ImUsed: 226,\n    MultipleChoices: 300,\n    MovedPermanently: 301,\n    Found: 302,\n    SeeOther: 303,\n    NotModified: 304,\n    UseProxy: 305,\n    Unused: 306,\n    TemporaryRedirect: 307,\n    PermanentRedirect: 308,\n    BadRequest: 400,\n    Unauthorized: 401,\n    PaymentRequired: 402,\n    Forbidden: 403,\n    NotFound: 404,\n    MethodNotAllowed: 405,\n    NotAcceptable: 406,\n    ProxyAuthenticationRequired: 407,\n    RequestTimeout: 408,\n    Conflict: 409,\n    Gone: 410,\n    LengthRequired: 411,\n    PreconditionFailed: 412,\n    PayloadTooLarge: 413,\n    UriTooLong: 414,\n    UnsupportedMediaType: 415,\n    RangeNotSatisfiable: 416,\n    ExpectationFailed: 417,\n    ImATeapot: 418,\n    MisdirectedRequest: 421,\n    UnprocessableEntity: 422,\n    Locked: 423,\n    FailedDependency: 424,\n    TooEarly: 425,\n    UpgradeRequired: 426,\n    PreconditionRequired: 428,\n    TooManyRequests: 429,\n    RequestHeaderFieldsTooLarge: 431,\n    UnavailableForLegalReasons: 451,\n    InternalServerError: 500,\n    NotImplemented: 501,\n    BadGateway: 502,\n    ServiceUnavailable: 503,\n    GatewayTimeout: 504,\n    HttpVersionNotSupported: 505,\n    VariantAlsoNegotiates: 506,\n    InsufficientStorage: 507,\n    LoopDetected: 508,\n    NotExtended: 510,\n    NetworkAuthenticationRequired: 511,\n    WebServerIsDown: 521,\n    ConnectionTimedOut: 522,\n    OriginIsUnreachable: 523,\n    TimeoutOccurred: 524,\n    SslHandshakeFailed: 525,\n    InvalidSslCertificate: 526\n  };\n  Object.entries(HttpStatusCode).forEach(([key, value]) => {\n    HttpStatusCode[value] = key;\n  });\n  var HttpStatusCode_default = HttpStatusCode;\n\n  // node_modules/axios/lib/axios.js\n  function createInstance(defaultConfig) {\n    const context = new Axios_default(defaultConfig);\n    const instance = bind(Axios_default.prototype.request, context);\n    utils_default.extend(instance, Axios_default.prototype, context, { allOwnKeys: true });\n    utils_default.extend(instance, context, null, { allOwnKeys: true });\n    instance.create = function create(instanceConfig) {\n      return createInstance(mergeConfig(defaultConfig, instanceConfig));\n    };\n    return instance;\n  }\n  var axios = createInstance(defaults_default);\n  axios.Axios = Axios_default;\n  axios.CanceledError = CanceledError_default;\n  axios.CancelToken = CancelToken_default;\n  axios.isCancel = isCancel;\n  axios.VERSION = VERSION;\n  axios.toFormData = toFormData_default;\n  axios.AxiosError = AxiosError_default;\n  axios.Cancel = axios.CanceledError;\n  axios.all = function all(promises) {\n    return Promise.all(promises);\n  };\n  axios.spread = spread;\n  axios.isAxiosError = isAxiosError;\n  axios.mergeConfig = mergeConfig;\n  axios.AxiosHeaders = AxiosHeaders_default;\n  axios.formToJSON = (thing) => formDataToJSON_default(utils_default.isHTMLForm(thing) ? new FormData(thing) : thing);\n  axios.getAdapter = adapters_default.getAdapter;\n  axios.HttpStatusCode = HttpStatusCode_default;\n  axios.default = axios;\n  var axios_default = axios;\n\n  // node_modules/axios/index.js\n  var {\n    Axios: Axios2,\n    AxiosError: AxiosError2,\n    CanceledError: CanceledError2,\n    isCancel: isCancel2,\n    CancelToken: CancelToken2,\n    VERSION: VERSION2,\n    all: all2,\n    Cancel,\n    isAxiosError: isAxiosError2,\n    spread: spread2,\n    toFormData: toFormData2,\n    AxiosHeaders: AxiosHeaders2,\n    HttpStatusCode: HttpStatusCode2,\n    formToJSON,\n    getAdapter: getAdapter2,\n    mergeConfig: mergeConfig2\n  } = axios_default;\n\n  // src/api-class.ts\n  var Api = class {\n    constructor(params) {\n      this.appendHeaders = (headers) => {\n        if (this.personalAccessToken) headers[\"X-Figma-Token\"] = this.personalAccessToken;\n        if (this.oAuthToken) headers[\"Authorization\"] = `Bearer ${this.oAuthToken}`;\n      };\n      this.request = (url, opts) => {\n        const headers = {};\n        this.appendHeaders(headers);\n        const axiosParams = {\n          url,\n          ...opts,\n          headers\n        };\n        return axios_default(axiosParams).then((response) => response.data).catch((error) => {\n          throw new ApiError(error);\n        });\n      };\n      this.getFile = getFileApi;\n      this.getFileNodes = getFileNodesApi;\n      this.getFileMeta = getFileMetaApi;\n      this.getImages = getImagesApi;\n      this.getImageFills = getImageFillsApi;\n      this.getComments = getCommentsApi;\n      this.postComment = postCommentApi;\n      this.deleteComment = deleteCommentApi;\n      this.getCommentReactions = getCommentReactionsApi;\n      this.postCommentReaction = postCommentReactionApi;\n      this.deleteCommentReactions = deleteCommentReactionsApi;\n      this.getUserMe = getUserMeApi;\n      this.getFileVersions = getFileVersionsApi;\n      this.getTeamProjects = getTeamProjectsApi;\n      this.getProjectFiles = getProjectFilesApi;\n      this.getTeamComponents = getTeamComponentsApi;\n      this.getFileComponents = getFileComponentsApi;\n      this.getComponent = getComponentApi;\n      this.getTeamComponentSets = getTeamComponentSetsApi;\n      this.getFileComponentSets = getFileComponentSetsApi;\n      this.getComponentSet = getComponentSetApi;\n      this.getTeamStyles = getTeamStylesApi;\n      this.getFileStyles = getFileStylesApi;\n      this.getStyle = getStyleApi;\n      this.getWebhook = getWebhookApi;\n      this.postWebhook = postWebhookApi;\n      this.putWebhook = putWebhookApi;\n      this.deleteWebhook = deleteWebhookApi;\n      this.getTeamWebhooks = getTeamWebhooksApi;\n      this.getWebhookRequests = getWebhookRequestsApi;\n      this.getLocalVariables = getLocalVariablesApi;\n      this.getPublishedVariables = getPublishedVariablesApi;\n      this.postVariables = postVariablesApi;\n      this.getDevResources = getDevResourcesApi;\n      this.postDevResources = postDevResourcesApi;\n      this.putDevResources = putDevResourcesApi;\n      this.deleteDevResources = deleteDevResourcesApi;\n      this.getLibraryAnalyticsComponentActions = getLibraryAnalyticsComponentActionsApi;\n      this.getLibraryAnalyticsComponentUsages = getLibraryAnalyticsComponentUsagesApi;\n      this.getLibraryAnalyticsStyleActions = getLibraryAnalyticsStyleActionsApi;\n      this.getLibraryAnalyticsStyleUsages = getLibraryAnalyticsStyleUsagesApi;\n      this.getLibraryAnalyticsVariableActions = getLibraryAnalyticsVariableActionsApi;\n      this.getLibraryAnalyticsVariableUsages = getLibraryAnalyticsVariableUsagesApi;\n      if (\"personalAccessToken\" in params) {\n        this.personalAccessToken = params.personalAccessToken;\n      }\n      if (\"oAuthToken\" in params) {\n        this.oAuthToken = params.oAuthToken;\n      }\n    }\n  };\n  function oAuthLink(client_id, redirect_uri, scope, state, response_type) {\n    const queryParams = toQueryParams({\n      client_id,\n      redirect_uri,\n      scope: Array.isArray(scope) ? scope.join(\" \") : scope,\n      state,\n      response_type\n    });\n    return `https://www.figma.com/oauth?${queryParams}`;\n  }\n  async function oAuthToken(client_id, client_secret, redirect_uri, code, grant_type) {\n    const headers = {\n      \"Authorization\": `Basic ${Buffer.from(`${client_id}:${client_secret}`).toString(\"base64\")}`\n    };\n    const queryParams = toQueryParams({\n      redirect_uri,\n      code,\n      grant_type\n    });\n    const url = `https://api.figma.com/v1/oauth/token?${queryParams}`;\n    const res = await axios_default.post(url, null, { headers });\n    if (res.status !== 200) throw new ApiError(res);\n    return res.data;\n  }\n  return __toCommonJS(index_exports);\n})();\n"
  },
  {
    "path": "lib/index.d.ts",
    "content": "export * from './config';\nexport * from './api-class';\n"
  },
  {
    "path": "lib/index.js",
    "content": "\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJS = (cb, mod) => function __require() {\n  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __export = (target, all3) => {\n  for (var name in all3)\n    __defProp(target, name, { get: all3[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n  // If the importer is in node compatibility mode or this is not an ESM\n  // file that has been converted to a CommonJS file using a Babel-\n  // compatible transform (i.e. \"__esModule\" has not been set), then set\n  // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n  isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n  mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// node_modules/delayed-stream/lib/delayed_stream.js\nvar require_delayed_stream = __commonJS({\n  \"node_modules/delayed-stream/lib/delayed_stream.js\"(exports2, module2) {\n    var Stream = require(\"stream\").Stream;\n    var util3 = require(\"util\");\n    module2.exports = DelayedStream;\n    function DelayedStream() {\n      this.source = null;\n      this.dataSize = 0;\n      this.maxDataSize = 1024 * 1024;\n      this.pauseStream = true;\n      this._maxDataSizeExceeded = false;\n      this._released = false;\n      this._bufferedEvents = [];\n    }\n    util3.inherits(DelayedStream, Stream);\n    DelayedStream.create = function(source, options) {\n      var delayedStream = new this();\n      options = options || {};\n      for (var option in options) {\n        delayedStream[option] = options[option];\n      }\n      delayedStream.source = source;\n      var realEmit = source.emit;\n      source.emit = function() {\n        delayedStream._handleEmit(arguments);\n        return realEmit.apply(source, arguments);\n      };\n      source.on(\"error\", function() {\n      });\n      if (delayedStream.pauseStream) {\n        source.pause();\n      }\n      return delayedStream;\n    };\n    Object.defineProperty(DelayedStream.prototype, \"readable\", {\n      configurable: true,\n      enumerable: true,\n      get: function() {\n        return this.source.readable;\n      }\n    });\n    DelayedStream.prototype.setEncoding = function() {\n      return this.source.setEncoding.apply(this.source, arguments);\n    };\n    DelayedStream.prototype.resume = function() {\n      if (!this._released) {\n        this.release();\n      }\n      this.source.resume();\n    };\n    DelayedStream.prototype.pause = function() {\n      this.source.pause();\n    };\n    DelayedStream.prototype.release = function() {\n      this._released = true;\n      this._bufferedEvents.forEach(function(args) {\n        this.emit.apply(this, args);\n      }.bind(this));\n      this._bufferedEvents = [];\n    };\n    DelayedStream.prototype.pipe = function() {\n      var r = Stream.prototype.pipe.apply(this, arguments);\n      this.resume();\n      return r;\n    };\n    DelayedStream.prototype._handleEmit = function(args) {\n      if (this._released) {\n        this.emit.apply(this, args);\n        return;\n      }\n      if (args[0] === \"data\") {\n        this.dataSize += args[1].length;\n        this._checkIfMaxDataSizeExceeded();\n      }\n      this._bufferedEvents.push(args);\n    };\n    DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n      if (this._maxDataSizeExceeded) {\n        return;\n      }\n      if (this.dataSize <= this.maxDataSize) {\n        return;\n      }\n      this._maxDataSizeExceeded = true;\n      var message = \"DelayedStream#maxDataSize of \" + this.maxDataSize + \" bytes exceeded.\";\n      this.emit(\"error\", new Error(message));\n    };\n  }\n});\n\n// node_modules/combined-stream/lib/combined_stream.js\nvar require_combined_stream = __commonJS({\n  \"node_modules/combined-stream/lib/combined_stream.js\"(exports2, module2) {\n    var util3 = require(\"util\");\n    var Stream = require(\"stream\").Stream;\n    var DelayedStream = require_delayed_stream();\n    module2.exports = CombinedStream;\n    function CombinedStream() {\n      this.writable = false;\n      this.readable = true;\n      this.dataSize = 0;\n      this.maxDataSize = 2 * 1024 * 1024;\n      this.pauseStreams = true;\n      this._released = false;\n      this._streams = [];\n      this._currentStream = null;\n      this._insideLoop = false;\n      this._pendingNext = false;\n    }\n    util3.inherits(CombinedStream, Stream);\n    CombinedStream.create = function(options) {\n      var combinedStream = new this();\n      options = options || {};\n      for (var option in options) {\n        combinedStream[option] = options[option];\n      }\n      return combinedStream;\n    };\n    CombinedStream.isStreamLike = function(stream4) {\n      return typeof stream4 !== \"function\" && typeof stream4 !== \"string\" && typeof stream4 !== \"boolean\" && typeof stream4 !== \"number\" && !Buffer.isBuffer(stream4);\n    };\n    CombinedStream.prototype.append = function(stream4) {\n      var isStreamLike = CombinedStream.isStreamLike(stream4);\n      if (isStreamLike) {\n        if (!(stream4 instanceof DelayedStream)) {\n          var newStream = DelayedStream.create(stream4, {\n            maxDataSize: Infinity,\n            pauseStream: this.pauseStreams\n          });\n          stream4.on(\"data\", this._checkDataSize.bind(this));\n          stream4 = newStream;\n        }\n        this._handleErrors(stream4);\n        if (this.pauseStreams) {\n          stream4.pause();\n        }\n      }\n      this._streams.push(stream4);\n      return this;\n    };\n    CombinedStream.prototype.pipe = function(dest, options) {\n      Stream.prototype.pipe.call(this, dest, options);\n      this.resume();\n      return dest;\n    };\n    CombinedStream.prototype._getNext = function() {\n      this._currentStream = null;\n      if (this._insideLoop) {\n        this._pendingNext = true;\n        return;\n      }\n      this._insideLoop = true;\n      try {\n        do {\n          this._pendingNext = false;\n          this._realGetNext();\n        } while (this._pendingNext);\n      } finally {\n        this._insideLoop = false;\n      }\n    };\n    CombinedStream.prototype._realGetNext = function() {\n      var stream4 = this._streams.shift();\n      if (typeof stream4 == \"undefined\") {\n        this.end();\n        return;\n      }\n      if (typeof stream4 !== \"function\") {\n        this._pipeNext(stream4);\n        return;\n      }\n      var getStream = stream4;\n      getStream(function(stream5) {\n        var isStreamLike = CombinedStream.isStreamLike(stream5);\n        if (isStreamLike) {\n          stream5.on(\"data\", this._checkDataSize.bind(this));\n          this._handleErrors(stream5);\n        }\n        this._pipeNext(stream5);\n      }.bind(this));\n    };\n    CombinedStream.prototype._pipeNext = function(stream4) {\n      this._currentStream = stream4;\n      var isStreamLike = CombinedStream.isStreamLike(stream4);\n      if (isStreamLike) {\n        stream4.on(\"end\", this._getNext.bind(this));\n        stream4.pipe(this, { end: false });\n        return;\n      }\n      var value = stream4;\n      this.write(value);\n      this._getNext();\n    };\n    CombinedStream.prototype._handleErrors = function(stream4) {\n      var self2 = this;\n      stream4.on(\"error\", function(err) {\n        self2._emitError(err);\n      });\n    };\n    CombinedStream.prototype.write = function(data) {\n      this.emit(\"data\", data);\n    };\n    CombinedStream.prototype.pause = function() {\n      if (!this.pauseStreams) {\n        return;\n      }\n      if (this.pauseStreams && this._currentStream && typeof this._currentStream.pause == \"function\") this._currentStream.pause();\n      this.emit(\"pause\");\n    };\n    CombinedStream.prototype.resume = function() {\n      if (!this._released) {\n        this._released = true;\n        this.writable = true;\n        this._getNext();\n      }\n      if (this.pauseStreams && this._currentStream && typeof this._currentStream.resume == \"function\") this._currentStream.resume();\n      this.emit(\"resume\");\n    };\n    CombinedStream.prototype.end = function() {\n      this._reset();\n      this.emit(\"end\");\n    };\n    CombinedStream.prototype.destroy = function() {\n      this._reset();\n      this.emit(\"close\");\n    };\n    CombinedStream.prototype._reset = function() {\n      this.writable = false;\n      this._streams = [];\n      this._currentStream = null;\n    };\n    CombinedStream.prototype._checkDataSize = function() {\n      this._updateDataSize();\n      if (this.dataSize <= this.maxDataSize) {\n        return;\n      }\n      var message = \"DelayedStream#maxDataSize of \" + this.maxDataSize + \" bytes exceeded.\";\n      this._emitError(new Error(message));\n    };\n    CombinedStream.prototype._updateDataSize = function() {\n      this.dataSize = 0;\n      var self2 = this;\n      this._streams.forEach(function(stream4) {\n        if (!stream4.dataSize) {\n          return;\n        }\n        self2.dataSize += stream4.dataSize;\n      });\n      if (this._currentStream && this._currentStream.dataSize) {\n        this.dataSize += this._currentStream.dataSize;\n      }\n    };\n    CombinedStream.prototype._emitError = function(err) {\n      this._reset();\n      this.emit(\"error\", err);\n    };\n  }\n});\n\n// node_modules/mime-db/db.json\nvar require_db = __commonJS({\n  \"node_modules/mime-db/db.json\"(exports2, module2) {\n    module2.exports = {\n      \"application/1d-interleaved-parityfec\": {\n        source: \"iana\"\n      },\n      \"application/3gpdash-qoe-report+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/3gpp-ims+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/3gpphal+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/3gpphalforms+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/a2l\": {\n        source: \"iana\"\n      },\n      \"application/ace+cbor\": {\n        source: \"iana\"\n      },\n      \"application/activemessage\": {\n        source: \"iana\"\n      },\n      \"application/activity+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/alto-costmap+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/alto-costmapfilter+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/alto-directory+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/alto-endpointcost+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/alto-endpointcostparams+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/alto-endpointprop+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/alto-endpointpropparams+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/alto-error+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/alto-networkmap+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/alto-networkmapfilter+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/alto-updatestreamcontrol+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/alto-updatestreamparams+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/aml\": {\n        source: \"iana\"\n      },\n      \"application/andrew-inset\": {\n        source: \"iana\",\n        extensions: [\"ez\"]\n      },\n      \"application/applefile\": {\n        source: \"iana\"\n      },\n      \"application/applixware\": {\n        source: \"apache\",\n        extensions: [\"aw\"]\n      },\n      \"application/at+jwt\": {\n        source: \"iana\"\n      },\n      \"application/atf\": {\n        source: \"iana\"\n      },\n      \"application/atfx\": {\n        source: \"iana\"\n      },\n      \"application/atom+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"atom\"]\n      },\n      \"application/atomcat+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"atomcat\"]\n      },\n      \"application/atomdeleted+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"atomdeleted\"]\n      },\n      \"application/atomicmail\": {\n        source: \"iana\"\n      },\n      \"application/atomsvc+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"atomsvc\"]\n      },\n      \"application/atsc-dwd+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"dwd\"]\n      },\n      \"application/atsc-dynamic-event-message\": {\n        source: \"iana\"\n      },\n      \"application/atsc-held+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"held\"]\n      },\n      \"application/atsc-rdt+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/atsc-rsat+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"rsat\"]\n      },\n      \"application/atxml\": {\n        source: \"iana\"\n      },\n      \"application/auth-policy+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/bacnet-xdd+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/batch-smtp\": {\n        source: \"iana\"\n      },\n      \"application/bdoc\": {\n        compressible: false,\n        extensions: [\"bdoc\"]\n      },\n      \"application/beep+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/calendar+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/calendar+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xcs\"]\n      },\n      \"application/call-completion\": {\n        source: \"iana\"\n      },\n      \"application/cals-1840\": {\n        source: \"iana\"\n      },\n      \"application/captive+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/cbor\": {\n        source: \"iana\"\n      },\n      \"application/cbor-seq\": {\n        source: \"iana\"\n      },\n      \"application/cccex\": {\n        source: \"iana\"\n      },\n      \"application/ccmp+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/ccxml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"ccxml\"]\n      },\n      \"application/cdfx+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"cdfx\"]\n      },\n      \"application/cdmi-capability\": {\n        source: \"iana\",\n        extensions: [\"cdmia\"]\n      },\n      \"application/cdmi-container\": {\n        source: \"iana\",\n        extensions: [\"cdmic\"]\n      },\n      \"application/cdmi-domain\": {\n        source: \"iana\",\n        extensions: [\"cdmid\"]\n      },\n      \"application/cdmi-object\": {\n        source: \"iana\",\n        extensions: [\"cdmio\"]\n      },\n      \"application/cdmi-queue\": {\n        source: \"iana\",\n        extensions: [\"cdmiq\"]\n      },\n      \"application/cdni\": {\n        source: \"iana\"\n      },\n      \"application/cea\": {\n        source: \"iana\"\n      },\n      \"application/cea-2018+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/cellml+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/cfw\": {\n        source: \"iana\"\n      },\n      \"application/city+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/clr\": {\n        source: \"iana\"\n      },\n      \"application/clue+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/clue_info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/cms\": {\n        source: \"iana\"\n      },\n      \"application/cnrp+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/coap-group+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/coap-payload\": {\n        source: \"iana\"\n      },\n      \"application/commonground\": {\n        source: \"iana\"\n      },\n      \"application/conference-info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/cose\": {\n        source: \"iana\"\n      },\n      \"application/cose-key\": {\n        source: \"iana\"\n      },\n      \"application/cose-key-set\": {\n        source: \"iana\"\n      },\n      \"application/cpl+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"cpl\"]\n      },\n      \"application/csrattrs\": {\n        source: \"iana\"\n      },\n      \"application/csta+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/cstadata+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/csvm+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/cu-seeme\": {\n        source: \"apache\",\n        extensions: [\"cu\"]\n      },\n      \"application/cwt\": {\n        source: \"iana\"\n      },\n      \"application/cybercash\": {\n        source: \"iana\"\n      },\n      \"application/dart\": {\n        compressible: true\n      },\n      \"application/dash+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"mpd\"]\n      },\n      \"application/dash-patch+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"mpp\"]\n      },\n      \"application/dashdelta\": {\n        source: \"iana\"\n      },\n      \"application/davmount+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"davmount\"]\n      },\n      \"application/dca-rft\": {\n        source: \"iana\"\n      },\n      \"application/dcd\": {\n        source: \"iana\"\n      },\n      \"application/dec-dx\": {\n        source: \"iana\"\n      },\n      \"application/dialog-info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/dicom\": {\n        source: \"iana\"\n      },\n      \"application/dicom+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/dicom+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/dii\": {\n        source: \"iana\"\n      },\n      \"application/dit\": {\n        source: \"iana\"\n      },\n      \"application/dns\": {\n        source: \"iana\"\n      },\n      \"application/dns+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/dns-message\": {\n        source: \"iana\"\n      },\n      \"application/docbook+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"dbk\"]\n      },\n      \"application/dots+cbor\": {\n        source: \"iana\"\n      },\n      \"application/dskpp+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/dssc+der\": {\n        source: \"iana\",\n        extensions: [\"dssc\"]\n      },\n      \"application/dssc+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xdssc\"]\n      },\n      \"application/dvcs\": {\n        source: \"iana\"\n      },\n      \"application/ecmascript\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"es\", \"ecma\"]\n      },\n      \"application/edi-consent\": {\n        source: \"iana\"\n      },\n      \"application/edi-x12\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/edifact\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/efi\": {\n        source: \"iana\"\n      },\n      \"application/elm+json\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/elm+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/emergencycalldata.cap+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/emergencycalldata.comment+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/emergencycalldata.control+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/emergencycalldata.deviceinfo+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/emergencycalldata.ecall.msd\": {\n        source: \"iana\"\n      },\n      \"application/emergencycalldata.providerinfo+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/emergencycalldata.serviceinfo+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/emergencycalldata.subscriberinfo+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/emergencycalldata.veds+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/emma+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"emma\"]\n      },\n      \"application/emotionml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"emotionml\"]\n      },\n      \"application/encaprtp\": {\n        source: \"iana\"\n      },\n      \"application/epp+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/epub+zip\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"epub\"]\n      },\n      \"application/eshop\": {\n        source: \"iana\"\n      },\n      \"application/exi\": {\n        source: \"iana\",\n        extensions: [\"exi\"]\n      },\n      \"application/expect-ct-report+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/express\": {\n        source: \"iana\",\n        extensions: [\"exp\"]\n      },\n      \"application/fastinfoset\": {\n        source: \"iana\"\n      },\n      \"application/fastsoap\": {\n        source: \"iana\"\n      },\n      \"application/fdt+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"fdt\"]\n      },\n      \"application/fhir+json\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/fhir+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/fido.trusted-apps+json\": {\n        compressible: true\n      },\n      \"application/fits\": {\n        source: \"iana\"\n      },\n      \"application/flexfec\": {\n        source: \"iana\"\n      },\n      \"application/font-sfnt\": {\n        source: \"iana\"\n      },\n      \"application/font-tdpfr\": {\n        source: \"iana\",\n        extensions: [\"pfr\"]\n      },\n      \"application/font-woff\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/framework-attributes+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/geo+json\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"geojson\"]\n      },\n      \"application/geo+json-seq\": {\n        source: \"iana\"\n      },\n      \"application/geopackage+sqlite3\": {\n        source: \"iana\"\n      },\n      \"application/geoxacml+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/gltf-buffer\": {\n        source: \"iana\"\n      },\n      \"application/gml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"gml\"]\n      },\n      \"application/gpx+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"gpx\"]\n      },\n      \"application/gxf\": {\n        source: \"apache\",\n        extensions: [\"gxf\"]\n      },\n      \"application/gzip\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"gz\"]\n      },\n      \"application/h224\": {\n        source: \"iana\"\n      },\n      \"application/held+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/hjson\": {\n        extensions: [\"hjson\"]\n      },\n      \"application/http\": {\n        source: \"iana\"\n      },\n      \"application/hyperstudio\": {\n        source: \"iana\",\n        extensions: [\"stk\"]\n      },\n      \"application/ibe-key-request+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/ibe-pkg-reply+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/ibe-pp-data\": {\n        source: \"iana\"\n      },\n      \"application/iges\": {\n        source: \"iana\"\n      },\n      \"application/im-iscomposing+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/index\": {\n        source: \"iana\"\n      },\n      \"application/index.cmd\": {\n        source: \"iana\"\n      },\n      \"application/index.obj\": {\n        source: \"iana\"\n      },\n      \"application/index.response\": {\n        source: \"iana\"\n      },\n      \"application/index.vnd\": {\n        source: \"iana\"\n      },\n      \"application/inkml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"ink\", \"inkml\"]\n      },\n      \"application/iotp\": {\n        source: \"iana\"\n      },\n      \"application/ipfix\": {\n        source: \"iana\",\n        extensions: [\"ipfix\"]\n      },\n      \"application/ipp\": {\n        source: \"iana\"\n      },\n      \"application/isup\": {\n        source: \"iana\"\n      },\n      \"application/its+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"its\"]\n      },\n      \"application/java-archive\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"jar\", \"war\", \"ear\"]\n      },\n      \"application/java-serialized-object\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"ser\"]\n      },\n      \"application/java-vm\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"class\"]\n      },\n      \"application/javascript\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true,\n        extensions: [\"js\", \"mjs\"]\n      },\n      \"application/jf2feed+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/jose\": {\n        source: \"iana\"\n      },\n      \"application/jose+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/jrd+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/jscalendar+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/json\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true,\n        extensions: [\"json\", \"map\"]\n      },\n      \"application/json-patch+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/json-seq\": {\n        source: \"iana\"\n      },\n      \"application/json5\": {\n        extensions: [\"json5\"]\n      },\n      \"application/jsonml+json\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"jsonml\"]\n      },\n      \"application/jwk+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/jwk-set+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/jwt\": {\n        source: \"iana\"\n      },\n      \"application/kpml-request+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/kpml-response+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/ld+json\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"jsonld\"]\n      },\n      \"application/lgr+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"lgr\"]\n      },\n      \"application/link-format\": {\n        source: \"iana\"\n      },\n      \"application/load-control+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/lost+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"lostxml\"]\n      },\n      \"application/lostsync+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/lpf+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/lxf\": {\n        source: \"iana\"\n      },\n      \"application/mac-binhex40\": {\n        source: \"iana\",\n        extensions: [\"hqx\"]\n      },\n      \"application/mac-compactpro\": {\n        source: \"apache\",\n        extensions: [\"cpt\"]\n      },\n      \"application/macwriteii\": {\n        source: \"iana\"\n      },\n      \"application/mads+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"mads\"]\n      },\n      \"application/manifest+json\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true,\n        extensions: [\"webmanifest\"]\n      },\n      \"application/marc\": {\n        source: \"iana\",\n        extensions: [\"mrc\"]\n      },\n      \"application/marcxml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"mrcx\"]\n      },\n      \"application/mathematica\": {\n        source: \"iana\",\n        extensions: [\"ma\", \"nb\", \"mb\"]\n      },\n      \"application/mathml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"mathml\"]\n      },\n      \"application/mathml-content+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mathml-presentation+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mbms-associated-procedure-description+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mbms-deregister+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mbms-envelope+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mbms-msk+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mbms-msk-response+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mbms-protection-description+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mbms-reception-report+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mbms-register+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mbms-register-response+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mbms-schedule+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mbms-user-service-description+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mbox\": {\n        source: \"iana\",\n        extensions: [\"mbox\"]\n      },\n      \"application/media-policy-dataset+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"mpf\"]\n      },\n      \"application/media_control+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mediaservercontrol+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"mscml\"]\n      },\n      \"application/merge-patch+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/metalink+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"metalink\"]\n      },\n      \"application/metalink4+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"meta4\"]\n      },\n      \"application/mets+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"mets\"]\n      },\n      \"application/mf4\": {\n        source: \"iana\"\n      },\n      \"application/mikey\": {\n        source: \"iana\"\n      },\n      \"application/mipc\": {\n        source: \"iana\"\n      },\n      \"application/missing-blocks+cbor-seq\": {\n        source: \"iana\"\n      },\n      \"application/mmt-aei+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"maei\"]\n      },\n      \"application/mmt-usd+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"musd\"]\n      },\n      \"application/mods+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"mods\"]\n      },\n      \"application/moss-keys\": {\n        source: \"iana\"\n      },\n      \"application/moss-signature\": {\n        source: \"iana\"\n      },\n      \"application/mosskey-data\": {\n        source: \"iana\"\n      },\n      \"application/mosskey-request\": {\n        source: \"iana\"\n      },\n      \"application/mp21\": {\n        source: \"iana\",\n        extensions: [\"m21\", \"mp21\"]\n      },\n      \"application/mp4\": {\n        source: \"iana\",\n        extensions: [\"mp4s\", \"m4p\"]\n      },\n      \"application/mpeg4-generic\": {\n        source: \"iana\"\n      },\n      \"application/mpeg4-iod\": {\n        source: \"iana\"\n      },\n      \"application/mpeg4-iod-xmt\": {\n        source: \"iana\"\n      },\n      \"application/mrb-consumer+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/mrb-publish+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/msc-ivr+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/msc-mixer+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/msword\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"doc\", \"dot\"]\n      },\n      \"application/mud+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/multipart-core\": {\n        source: \"iana\"\n      },\n      \"application/mxf\": {\n        source: \"iana\",\n        extensions: [\"mxf\"]\n      },\n      \"application/n-quads\": {\n        source: \"iana\",\n        extensions: [\"nq\"]\n      },\n      \"application/n-triples\": {\n        source: \"iana\",\n        extensions: [\"nt\"]\n      },\n      \"application/nasdata\": {\n        source: \"iana\"\n      },\n      \"application/news-checkgroups\": {\n        source: \"iana\",\n        charset: \"US-ASCII\"\n      },\n      \"application/news-groupinfo\": {\n        source: \"iana\",\n        charset: \"US-ASCII\"\n      },\n      \"application/news-transmission\": {\n        source: \"iana\"\n      },\n      \"application/nlsml+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/node\": {\n        source: \"iana\",\n        extensions: [\"cjs\"]\n      },\n      \"application/nss\": {\n        source: \"iana\"\n      },\n      \"application/oauth-authz-req+jwt\": {\n        source: \"iana\"\n      },\n      \"application/oblivious-dns-message\": {\n        source: \"iana\"\n      },\n      \"application/ocsp-request\": {\n        source: \"iana\"\n      },\n      \"application/ocsp-response\": {\n        source: \"iana\"\n      },\n      \"application/octet-stream\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"bin\", \"dms\", \"lrf\", \"mar\", \"so\", \"dist\", \"distz\", \"pkg\", \"bpk\", \"dump\", \"elc\", \"deploy\", \"exe\", \"dll\", \"deb\", \"dmg\", \"iso\", \"img\", \"msi\", \"msp\", \"msm\", \"buffer\"]\n      },\n      \"application/oda\": {\n        source: \"iana\",\n        extensions: [\"oda\"]\n      },\n      \"application/odm+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/odx\": {\n        source: \"iana\"\n      },\n      \"application/oebps-package+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"opf\"]\n      },\n      \"application/ogg\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"ogx\"]\n      },\n      \"application/omdoc+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"omdoc\"]\n      },\n      \"application/onenote\": {\n        source: \"apache\",\n        extensions: [\"onetoc\", \"onetoc2\", \"onetmp\", \"onepkg\"]\n      },\n      \"application/opc-nodeset+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/oscore\": {\n        source: \"iana\"\n      },\n      \"application/oxps\": {\n        source: \"iana\",\n        extensions: [\"oxps\"]\n      },\n      \"application/p21\": {\n        source: \"iana\"\n      },\n      \"application/p21+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/p2p-overlay+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"relo\"]\n      },\n      \"application/parityfec\": {\n        source: \"iana\"\n      },\n      \"application/passport\": {\n        source: \"iana\"\n      },\n      \"application/patch-ops-error+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xer\"]\n      },\n      \"application/pdf\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"pdf\"]\n      },\n      \"application/pdx\": {\n        source: \"iana\"\n      },\n      \"application/pem-certificate-chain\": {\n        source: \"iana\"\n      },\n      \"application/pgp-encrypted\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"pgp\"]\n      },\n      \"application/pgp-keys\": {\n        source: \"iana\",\n        extensions: [\"asc\"]\n      },\n      \"application/pgp-signature\": {\n        source: \"iana\",\n        extensions: [\"asc\", \"sig\"]\n      },\n      \"application/pics-rules\": {\n        source: \"apache\",\n        extensions: [\"prf\"]\n      },\n      \"application/pidf+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/pidf-diff+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/pkcs10\": {\n        source: \"iana\",\n        extensions: [\"p10\"]\n      },\n      \"application/pkcs12\": {\n        source: \"iana\"\n      },\n      \"application/pkcs7-mime\": {\n        source: \"iana\",\n        extensions: [\"p7m\", \"p7c\"]\n      },\n      \"application/pkcs7-signature\": {\n        source: \"iana\",\n        extensions: [\"p7s\"]\n      },\n      \"application/pkcs8\": {\n        source: \"iana\",\n        extensions: [\"p8\"]\n      },\n      \"application/pkcs8-encrypted\": {\n        source: \"iana\"\n      },\n      \"application/pkix-attr-cert\": {\n        source: \"iana\",\n        extensions: [\"ac\"]\n      },\n      \"application/pkix-cert\": {\n        source: \"iana\",\n        extensions: [\"cer\"]\n      },\n      \"application/pkix-crl\": {\n        source: \"iana\",\n        extensions: [\"crl\"]\n      },\n      \"application/pkix-pkipath\": {\n        source: \"iana\",\n        extensions: [\"pkipath\"]\n      },\n      \"application/pkixcmp\": {\n        source: \"iana\",\n        extensions: [\"pki\"]\n      },\n      \"application/pls+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"pls\"]\n      },\n      \"application/poc-settings+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/postscript\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"ai\", \"eps\", \"ps\"]\n      },\n      \"application/ppsp-tracker+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/problem+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/problem+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/provenance+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"provx\"]\n      },\n      \"application/prs.alvestrand.titrax-sheet\": {\n        source: \"iana\"\n      },\n      \"application/prs.cww\": {\n        source: \"iana\",\n        extensions: [\"cww\"]\n      },\n      \"application/prs.cyn\": {\n        source: \"iana\",\n        charset: \"7-BIT\"\n      },\n      \"application/prs.hpub+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/prs.nprend\": {\n        source: \"iana\"\n      },\n      \"application/prs.plucker\": {\n        source: \"iana\"\n      },\n      \"application/prs.rdf-xml-crypt\": {\n        source: \"iana\"\n      },\n      \"application/prs.xsf+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/pskc+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"pskcxml\"]\n      },\n      \"application/pvd+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/qsig\": {\n        source: \"iana\"\n      },\n      \"application/raml+yaml\": {\n        compressible: true,\n        extensions: [\"raml\"]\n      },\n      \"application/raptorfec\": {\n        source: \"iana\"\n      },\n      \"application/rdap+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/rdf+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"rdf\", \"owl\"]\n      },\n      \"application/reginfo+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"rif\"]\n      },\n      \"application/relax-ng-compact-syntax\": {\n        source: \"iana\",\n        extensions: [\"rnc\"]\n      },\n      \"application/remote-printing\": {\n        source: \"iana\"\n      },\n      \"application/reputon+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/resource-lists+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"rl\"]\n      },\n      \"application/resource-lists-diff+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"rld\"]\n      },\n      \"application/rfc+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/riscos\": {\n        source: \"iana\"\n      },\n      \"application/rlmi+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/rls-services+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"rs\"]\n      },\n      \"application/route-apd+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"rapd\"]\n      },\n      \"application/route-s-tsid+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"sls\"]\n      },\n      \"application/route-usd+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"rusd\"]\n      },\n      \"application/rpki-ghostbusters\": {\n        source: \"iana\",\n        extensions: [\"gbr\"]\n      },\n      \"application/rpki-manifest\": {\n        source: \"iana\",\n        extensions: [\"mft\"]\n      },\n      \"application/rpki-publication\": {\n        source: \"iana\"\n      },\n      \"application/rpki-roa\": {\n        source: \"iana\",\n        extensions: [\"roa\"]\n      },\n      \"application/rpki-updown\": {\n        source: \"iana\"\n      },\n      \"application/rsd+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"rsd\"]\n      },\n      \"application/rss+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"rss\"]\n      },\n      \"application/rtf\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"rtf\"]\n      },\n      \"application/rtploopback\": {\n        source: \"iana\"\n      },\n      \"application/rtx\": {\n        source: \"iana\"\n      },\n      \"application/samlassertion+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/samlmetadata+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/sarif+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/sarif-external-properties+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/sbe\": {\n        source: \"iana\"\n      },\n      \"application/sbml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"sbml\"]\n      },\n      \"application/scaip+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/scim+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/scvp-cv-request\": {\n        source: \"iana\",\n        extensions: [\"scq\"]\n      },\n      \"application/scvp-cv-response\": {\n        source: \"iana\",\n        extensions: [\"scs\"]\n      },\n      \"application/scvp-vp-request\": {\n        source: \"iana\",\n        extensions: [\"spq\"]\n      },\n      \"application/scvp-vp-response\": {\n        source: \"iana\",\n        extensions: [\"spp\"]\n      },\n      \"application/sdp\": {\n        source: \"iana\",\n        extensions: [\"sdp\"]\n      },\n      \"application/secevent+jwt\": {\n        source: \"iana\"\n      },\n      \"application/senml+cbor\": {\n        source: \"iana\"\n      },\n      \"application/senml+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/senml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"senmlx\"]\n      },\n      \"application/senml-etch+cbor\": {\n        source: \"iana\"\n      },\n      \"application/senml-etch+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/senml-exi\": {\n        source: \"iana\"\n      },\n      \"application/sensml+cbor\": {\n        source: \"iana\"\n      },\n      \"application/sensml+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/sensml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"sensmlx\"]\n      },\n      \"application/sensml-exi\": {\n        source: \"iana\"\n      },\n      \"application/sep+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/sep-exi\": {\n        source: \"iana\"\n      },\n      \"application/session-info\": {\n        source: \"iana\"\n      },\n      \"application/set-payment\": {\n        source: \"iana\"\n      },\n      \"application/set-payment-initiation\": {\n        source: \"iana\",\n        extensions: [\"setpay\"]\n      },\n      \"application/set-registration\": {\n        source: \"iana\"\n      },\n      \"application/set-registration-initiation\": {\n        source: \"iana\",\n        extensions: [\"setreg\"]\n      },\n      \"application/sgml\": {\n        source: \"iana\"\n      },\n      \"application/sgml-open-catalog\": {\n        source: \"iana\"\n      },\n      \"application/shf+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"shf\"]\n      },\n      \"application/sieve\": {\n        source: \"iana\",\n        extensions: [\"siv\", \"sieve\"]\n      },\n      \"application/simple-filter+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/simple-message-summary\": {\n        source: \"iana\"\n      },\n      \"application/simplesymbolcontainer\": {\n        source: \"iana\"\n      },\n      \"application/sipc\": {\n        source: \"iana\"\n      },\n      \"application/slate\": {\n        source: \"iana\"\n      },\n      \"application/smil\": {\n        source: \"iana\"\n      },\n      \"application/smil+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"smi\", \"smil\"]\n      },\n      \"application/smpte336m\": {\n        source: \"iana\"\n      },\n      \"application/soap+fastinfoset\": {\n        source: \"iana\"\n      },\n      \"application/soap+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/sparql-query\": {\n        source: \"iana\",\n        extensions: [\"rq\"]\n      },\n      \"application/sparql-results+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"srx\"]\n      },\n      \"application/spdx+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/spirits-event+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/sql\": {\n        source: \"iana\"\n      },\n      \"application/srgs\": {\n        source: \"iana\",\n        extensions: [\"gram\"]\n      },\n      \"application/srgs+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"grxml\"]\n      },\n      \"application/sru+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"sru\"]\n      },\n      \"application/ssdl+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"ssdl\"]\n      },\n      \"application/ssml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"ssml\"]\n      },\n      \"application/stix+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/swid+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"swidtag\"]\n      },\n      \"application/tamp-apex-update\": {\n        source: \"iana\"\n      },\n      \"application/tamp-apex-update-confirm\": {\n        source: \"iana\"\n      },\n      \"application/tamp-community-update\": {\n        source: \"iana\"\n      },\n      \"application/tamp-community-update-confirm\": {\n        source: \"iana\"\n      },\n      \"application/tamp-error\": {\n        source: \"iana\"\n      },\n      \"application/tamp-sequence-adjust\": {\n        source: \"iana\"\n      },\n      \"application/tamp-sequence-adjust-confirm\": {\n        source: \"iana\"\n      },\n      \"application/tamp-status-query\": {\n        source: \"iana\"\n      },\n      \"application/tamp-status-response\": {\n        source: \"iana\"\n      },\n      \"application/tamp-update\": {\n        source: \"iana\"\n      },\n      \"application/tamp-update-confirm\": {\n        source: \"iana\"\n      },\n      \"application/tar\": {\n        compressible: true\n      },\n      \"application/taxii+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/td+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/tei+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"tei\", \"teicorpus\"]\n      },\n      \"application/tetra_isi\": {\n        source: \"iana\"\n      },\n      \"application/thraud+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"tfi\"]\n      },\n      \"application/timestamp-query\": {\n        source: \"iana\"\n      },\n      \"application/timestamp-reply\": {\n        source: \"iana\"\n      },\n      \"application/timestamped-data\": {\n        source: \"iana\",\n        extensions: [\"tsd\"]\n      },\n      \"application/tlsrpt+gzip\": {\n        source: \"iana\"\n      },\n      \"application/tlsrpt+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/tnauthlist\": {\n        source: \"iana\"\n      },\n      \"application/token-introspection+jwt\": {\n        source: \"iana\"\n      },\n      \"application/toml\": {\n        compressible: true,\n        extensions: [\"toml\"]\n      },\n      \"application/trickle-ice-sdpfrag\": {\n        source: \"iana\"\n      },\n      \"application/trig\": {\n        source: \"iana\",\n        extensions: [\"trig\"]\n      },\n      \"application/ttml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"ttml\"]\n      },\n      \"application/tve-trigger\": {\n        source: \"iana\"\n      },\n      \"application/tzif\": {\n        source: \"iana\"\n      },\n      \"application/tzif-leap\": {\n        source: \"iana\"\n      },\n      \"application/ubjson\": {\n        compressible: false,\n        extensions: [\"ubj\"]\n      },\n      \"application/ulpfec\": {\n        source: \"iana\"\n      },\n      \"application/urc-grpsheet+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/urc-ressheet+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"rsheet\"]\n      },\n      \"application/urc-targetdesc+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"td\"]\n      },\n      \"application/urc-uisocketdesc+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vcard+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vcard+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vemmi\": {\n        source: \"iana\"\n      },\n      \"application/vividence.scriptfile\": {\n        source: \"apache\"\n      },\n      \"application/vnd.1000minds.decision-model+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"1km\"]\n      },\n      \"application/vnd.3gpp-prose+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp-prose-pc3ch+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp-v2x-local-service-information\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3gpp.5gnas\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3gpp.access-transfer-events+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.bsf+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.gmop+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.gtpc\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3gpp.interworking-data\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3gpp.lpp\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3gpp.mc-signalling-ear\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcdata-info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcdata-payload\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3gpp.mcdata-service-config+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcdata-signalling\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcptt-info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcptt-location-info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcptt-service-config+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcptt-signed+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcvideo-info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.mid-call+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.ngap\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3gpp.pfcp\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3gpp.pic-bw-large\": {\n        source: \"iana\",\n        extensions: [\"plb\"]\n      },\n      \"application/vnd.3gpp.pic-bw-small\": {\n        source: \"iana\",\n        extensions: [\"psb\"]\n      },\n      \"application/vnd.3gpp.pic-bw-var\": {\n        source: \"iana\",\n        extensions: [\"pvb\"]\n      },\n      \"application/vnd.3gpp.s1ap\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3gpp.sms\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3gpp.sms+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.srvcc-ext+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.srvcc-info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.state-and-event-info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp.ussd+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.3gpp2.sms\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3gpp2.tcap\": {\n        source: \"iana\",\n        extensions: [\"tcap\"]\n      },\n      \"application/vnd.3lightssoftware.imagescal\": {\n        source: \"iana\"\n      },\n      \"application/vnd.3m.post-it-notes\": {\n        source: \"iana\",\n        extensions: [\"pwn\"]\n      },\n      \"application/vnd.accpac.simply.aso\": {\n        source: \"iana\",\n        extensions: [\"aso\"]\n      },\n      \"application/vnd.accpac.simply.imp\": {\n        source: \"iana\",\n        extensions: [\"imp\"]\n      },\n      \"application/vnd.acucobol\": {\n        source: \"iana\",\n        extensions: [\"acu\"]\n      },\n      \"application/vnd.acucorp\": {\n        source: \"iana\",\n        extensions: [\"atc\", \"acutc\"]\n      },\n      \"application/vnd.adobe.air-application-installer-package+zip\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"air\"]\n      },\n      \"application/vnd.adobe.flash.movie\": {\n        source: \"iana\"\n      },\n      \"application/vnd.adobe.formscentral.fcdt\": {\n        source: \"iana\",\n        extensions: [\"fcdt\"]\n      },\n      \"application/vnd.adobe.fxp\": {\n        source: \"iana\",\n        extensions: [\"fxp\", \"fxpl\"]\n      },\n      \"application/vnd.adobe.partial-upload\": {\n        source: \"iana\"\n      },\n      \"application/vnd.adobe.xdp+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xdp\"]\n      },\n      \"application/vnd.adobe.xfdf\": {\n        source: \"iana\",\n        extensions: [\"xfdf\"]\n      },\n      \"application/vnd.aether.imp\": {\n        source: \"iana\"\n      },\n      \"application/vnd.afpc.afplinedata\": {\n        source: \"iana\"\n      },\n      \"application/vnd.afpc.afplinedata-pagedef\": {\n        source: \"iana\"\n      },\n      \"application/vnd.afpc.cmoca-cmresource\": {\n        source: \"iana\"\n      },\n      \"application/vnd.afpc.foca-charset\": {\n        source: \"iana\"\n      },\n      \"application/vnd.afpc.foca-codedfont\": {\n        source: \"iana\"\n      },\n      \"application/vnd.afpc.foca-codepage\": {\n        source: \"iana\"\n      },\n      \"application/vnd.afpc.modca\": {\n        source: \"iana\"\n      },\n      \"application/vnd.afpc.modca-cmtable\": {\n        source: \"iana\"\n      },\n      \"application/vnd.afpc.modca-formdef\": {\n        source: \"iana\"\n      },\n      \"application/vnd.afpc.modca-mediummap\": {\n        source: \"iana\"\n      },\n      \"application/vnd.afpc.modca-objectcontainer\": {\n        source: \"iana\"\n      },\n      \"application/vnd.afpc.modca-overlay\": {\n        source: \"iana\"\n      },\n      \"application/vnd.afpc.modca-pagesegment\": {\n        source: \"iana\"\n      },\n      \"application/vnd.age\": {\n        source: \"iana\",\n        extensions: [\"age\"]\n      },\n      \"application/vnd.ah-barcode\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ahead.space\": {\n        source: \"iana\",\n        extensions: [\"ahead\"]\n      },\n      \"application/vnd.airzip.filesecure.azf\": {\n        source: \"iana\",\n        extensions: [\"azf\"]\n      },\n      \"application/vnd.airzip.filesecure.azs\": {\n        source: \"iana\",\n        extensions: [\"azs\"]\n      },\n      \"application/vnd.amadeus+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.amazon.ebook\": {\n        source: \"apache\",\n        extensions: [\"azw\"]\n      },\n      \"application/vnd.amazon.mobi8-ebook\": {\n        source: \"iana\"\n      },\n      \"application/vnd.americandynamics.acc\": {\n        source: \"iana\",\n        extensions: [\"acc\"]\n      },\n      \"application/vnd.amiga.ami\": {\n        source: \"iana\",\n        extensions: [\"ami\"]\n      },\n      \"application/vnd.amundsen.maze+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.android.ota\": {\n        source: \"iana\"\n      },\n      \"application/vnd.android.package-archive\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"apk\"]\n      },\n      \"application/vnd.anki\": {\n        source: \"iana\"\n      },\n      \"application/vnd.anser-web-certificate-issue-initiation\": {\n        source: \"iana\",\n        extensions: [\"cii\"]\n      },\n      \"application/vnd.anser-web-funds-transfer-initiation\": {\n        source: \"apache\",\n        extensions: [\"fti\"]\n      },\n      \"application/vnd.antix.game-component\": {\n        source: \"iana\",\n        extensions: [\"atx\"]\n      },\n      \"application/vnd.apache.arrow.file\": {\n        source: \"iana\"\n      },\n      \"application/vnd.apache.arrow.stream\": {\n        source: \"iana\"\n      },\n      \"application/vnd.apache.thrift.binary\": {\n        source: \"iana\"\n      },\n      \"application/vnd.apache.thrift.compact\": {\n        source: \"iana\"\n      },\n      \"application/vnd.apache.thrift.json\": {\n        source: \"iana\"\n      },\n      \"application/vnd.api+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.aplextor.warrp+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.apothekende.reservation+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.apple.installer+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"mpkg\"]\n      },\n      \"application/vnd.apple.keynote\": {\n        source: \"iana\",\n        extensions: [\"key\"]\n      },\n      \"application/vnd.apple.mpegurl\": {\n        source: \"iana\",\n        extensions: [\"m3u8\"]\n      },\n      \"application/vnd.apple.numbers\": {\n        source: \"iana\",\n        extensions: [\"numbers\"]\n      },\n      \"application/vnd.apple.pages\": {\n        source: \"iana\",\n        extensions: [\"pages\"]\n      },\n      \"application/vnd.apple.pkpass\": {\n        compressible: false,\n        extensions: [\"pkpass\"]\n      },\n      \"application/vnd.arastra.swi\": {\n        source: \"iana\"\n      },\n      \"application/vnd.aristanetworks.swi\": {\n        source: \"iana\",\n        extensions: [\"swi\"]\n      },\n      \"application/vnd.artisan+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.artsquare\": {\n        source: \"iana\"\n      },\n      \"application/vnd.astraea-software.iota\": {\n        source: \"iana\",\n        extensions: [\"iota\"]\n      },\n      \"application/vnd.audiograph\": {\n        source: \"iana\",\n        extensions: [\"aep\"]\n      },\n      \"application/vnd.autopackage\": {\n        source: \"iana\"\n      },\n      \"application/vnd.avalon+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.avistar+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.balsamiq.bmml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"bmml\"]\n      },\n      \"application/vnd.balsamiq.bmpr\": {\n        source: \"iana\"\n      },\n      \"application/vnd.banana-accounting\": {\n        source: \"iana\"\n      },\n      \"application/vnd.bbf.usp.error\": {\n        source: \"iana\"\n      },\n      \"application/vnd.bbf.usp.msg\": {\n        source: \"iana\"\n      },\n      \"application/vnd.bbf.usp.msg+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.bekitzur-stech+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.bint.med-content\": {\n        source: \"iana\"\n      },\n      \"application/vnd.biopax.rdf+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.blink-idb-value-wrapper\": {\n        source: \"iana\"\n      },\n      \"application/vnd.blueice.multipass\": {\n        source: \"iana\",\n        extensions: [\"mpm\"]\n      },\n      \"application/vnd.bluetooth.ep.oob\": {\n        source: \"iana\"\n      },\n      \"application/vnd.bluetooth.le.oob\": {\n        source: \"iana\"\n      },\n      \"application/vnd.bmi\": {\n        source: \"iana\",\n        extensions: [\"bmi\"]\n      },\n      \"application/vnd.bpf\": {\n        source: \"iana\"\n      },\n      \"application/vnd.bpf3\": {\n        source: \"iana\"\n      },\n      \"application/vnd.businessobjects\": {\n        source: \"iana\",\n        extensions: [\"rep\"]\n      },\n      \"application/vnd.byu.uapi+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.cab-jscript\": {\n        source: \"iana\"\n      },\n      \"application/vnd.canon-cpdl\": {\n        source: \"iana\"\n      },\n      \"application/vnd.canon-lips\": {\n        source: \"iana\"\n      },\n      \"application/vnd.capasystems-pg+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.cendio.thinlinc.clientconf\": {\n        source: \"iana\"\n      },\n      \"application/vnd.century-systems.tcp_stream\": {\n        source: \"iana\"\n      },\n      \"application/vnd.chemdraw+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"cdxml\"]\n      },\n      \"application/vnd.chess-pgn\": {\n        source: \"iana\"\n      },\n      \"application/vnd.chipnuts.karaoke-mmd\": {\n        source: \"iana\",\n        extensions: [\"mmd\"]\n      },\n      \"application/vnd.ciedi\": {\n        source: \"iana\"\n      },\n      \"application/vnd.cinderella\": {\n        source: \"iana\",\n        extensions: [\"cdy\"]\n      },\n      \"application/vnd.cirpack.isdn-ext\": {\n        source: \"iana\"\n      },\n      \"application/vnd.citationstyles.style+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"csl\"]\n      },\n      \"application/vnd.claymore\": {\n        source: \"iana\",\n        extensions: [\"cla\"]\n      },\n      \"application/vnd.cloanto.rp9\": {\n        source: \"iana\",\n        extensions: [\"rp9\"]\n      },\n      \"application/vnd.clonk.c4group\": {\n        source: \"iana\",\n        extensions: [\"c4g\", \"c4d\", \"c4f\", \"c4p\", \"c4u\"]\n      },\n      \"application/vnd.cluetrust.cartomobile-config\": {\n        source: \"iana\",\n        extensions: [\"c11amc\"]\n      },\n      \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n        source: \"iana\",\n        extensions: [\"c11amz\"]\n      },\n      \"application/vnd.coffeescript\": {\n        source: \"iana\"\n      },\n      \"application/vnd.collabio.xodocuments.document\": {\n        source: \"iana\"\n      },\n      \"application/vnd.collabio.xodocuments.document-template\": {\n        source: \"iana\"\n      },\n      \"application/vnd.collabio.xodocuments.presentation\": {\n        source: \"iana\"\n      },\n      \"application/vnd.collabio.xodocuments.presentation-template\": {\n        source: \"iana\"\n      },\n      \"application/vnd.collabio.xodocuments.spreadsheet\": {\n        source: \"iana\"\n      },\n      \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n        source: \"iana\"\n      },\n      \"application/vnd.collection+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.collection.doc+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.collection.next+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.comicbook+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.comicbook-rar\": {\n        source: \"iana\"\n      },\n      \"application/vnd.commerce-battelle\": {\n        source: \"iana\"\n      },\n      \"application/vnd.commonspace\": {\n        source: \"iana\",\n        extensions: [\"csp\"]\n      },\n      \"application/vnd.contact.cmsg\": {\n        source: \"iana\",\n        extensions: [\"cdbcmsg\"]\n      },\n      \"application/vnd.coreos.ignition+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.cosmocaller\": {\n        source: \"iana\",\n        extensions: [\"cmc\"]\n      },\n      \"application/vnd.crick.clicker\": {\n        source: \"iana\",\n        extensions: [\"clkx\"]\n      },\n      \"application/vnd.crick.clicker.keyboard\": {\n        source: \"iana\",\n        extensions: [\"clkk\"]\n      },\n      \"application/vnd.crick.clicker.palette\": {\n        source: \"iana\",\n        extensions: [\"clkp\"]\n      },\n      \"application/vnd.crick.clicker.template\": {\n        source: \"iana\",\n        extensions: [\"clkt\"]\n      },\n      \"application/vnd.crick.clicker.wordbank\": {\n        source: \"iana\",\n        extensions: [\"clkw\"]\n      },\n      \"application/vnd.criticaltools.wbs+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"wbs\"]\n      },\n      \"application/vnd.cryptii.pipe+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.crypto-shade-file\": {\n        source: \"iana\"\n      },\n      \"application/vnd.cryptomator.encrypted\": {\n        source: \"iana\"\n      },\n      \"application/vnd.cryptomator.vault\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ctc-posml\": {\n        source: \"iana\",\n        extensions: [\"pml\"]\n      },\n      \"application/vnd.ctct.ws+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.cups-pdf\": {\n        source: \"iana\"\n      },\n      \"application/vnd.cups-postscript\": {\n        source: \"iana\"\n      },\n      \"application/vnd.cups-ppd\": {\n        source: \"iana\",\n        extensions: [\"ppd\"]\n      },\n      \"application/vnd.cups-raster\": {\n        source: \"iana\"\n      },\n      \"application/vnd.cups-raw\": {\n        source: \"iana\"\n      },\n      \"application/vnd.curl\": {\n        source: \"iana\"\n      },\n      \"application/vnd.curl.car\": {\n        source: \"apache\",\n        extensions: [\"car\"]\n      },\n      \"application/vnd.curl.pcurl\": {\n        source: \"apache\",\n        extensions: [\"pcurl\"]\n      },\n      \"application/vnd.cyan.dean.root+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.cybank\": {\n        source: \"iana\"\n      },\n      \"application/vnd.cyclonedx+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.cyclonedx+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.d2l.coursepackage1p0+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.d3m-dataset\": {\n        source: \"iana\"\n      },\n      \"application/vnd.d3m-problem\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dart\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"dart\"]\n      },\n      \"application/vnd.data-vision.rdz\": {\n        source: \"iana\",\n        extensions: [\"rdz\"]\n      },\n      \"application/vnd.datapackage+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.dataresource+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.dbf\": {\n        source: \"iana\",\n        extensions: [\"dbf\"]\n      },\n      \"application/vnd.debian.binary-package\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dece.data\": {\n        source: \"iana\",\n        extensions: [\"uvf\", \"uvvf\", \"uvd\", \"uvvd\"]\n      },\n      \"application/vnd.dece.ttml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"uvt\", \"uvvt\"]\n      },\n      \"application/vnd.dece.unspecified\": {\n        source: \"iana\",\n        extensions: [\"uvx\", \"uvvx\"]\n      },\n      \"application/vnd.dece.zip\": {\n        source: \"iana\",\n        extensions: [\"uvz\", \"uvvz\"]\n      },\n      \"application/vnd.denovo.fcselayout-link\": {\n        source: \"iana\",\n        extensions: [\"fe_launch\"]\n      },\n      \"application/vnd.desmume.movie\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dm.delegation+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.dna\": {\n        source: \"iana\",\n        extensions: [\"dna\"]\n      },\n      \"application/vnd.document+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.dolby.mlp\": {\n        source: \"apache\",\n        extensions: [\"mlp\"]\n      },\n      \"application/vnd.dolby.mobile.1\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dolby.mobile.2\": {\n        source: \"iana\"\n      },\n      \"application/vnd.doremir.scorecloud-binary-document\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dpgraph\": {\n        source: \"iana\",\n        extensions: [\"dpg\"]\n      },\n      \"application/vnd.dreamfactory\": {\n        source: \"iana\",\n        extensions: [\"dfac\"]\n      },\n      \"application/vnd.drive+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.ds-keypoint\": {\n        source: \"apache\",\n        extensions: [\"kpxx\"]\n      },\n      \"application/vnd.dtg.local\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dtg.local.flash\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dtg.local.html\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dvb.ait\": {\n        source: \"iana\",\n        extensions: [\"ait\"]\n      },\n      \"application/vnd.dvb.dvbisl+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.dvb.dvbj\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dvb.esgcontainer\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dvb.ipdcdftnotifaccess\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dvb.ipdcesgaccess\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dvb.ipdcesgaccess2\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dvb.ipdcesgpdd\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dvb.ipdcroaming\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dvb.iptv.alfec-base\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dvb.iptv.alfec-enhancement\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dvb.notif-aggregate-root+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.dvb.notif-container+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.dvb.notif-generic+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.dvb.notif-ia-msglist+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.dvb.notif-init+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.dvb.pfr\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dvb.service\": {\n        source: \"iana\",\n        extensions: [\"svc\"]\n      },\n      \"application/vnd.dxr\": {\n        source: \"iana\"\n      },\n      \"application/vnd.dynageo\": {\n        source: \"iana\",\n        extensions: [\"geo\"]\n      },\n      \"application/vnd.dzr\": {\n        source: \"iana\"\n      },\n      \"application/vnd.easykaraoke.cdgdownload\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ecdis-update\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ecip.rlp\": {\n        source: \"iana\"\n      },\n      \"application/vnd.eclipse.ditto+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.ecowin.chart\": {\n        source: \"iana\",\n        extensions: [\"mag\"]\n      },\n      \"application/vnd.ecowin.filerequest\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ecowin.fileupdate\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ecowin.series\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ecowin.seriesrequest\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ecowin.seriesupdate\": {\n        source: \"iana\"\n      },\n      \"application/vnd.efi.img\": {\n        source: \"iana\"\n      },\n      \"application/vnd.efi.iso\": {\n        source: \"iana\"\n      },\n      \"application/vnd.emclient.accessrequest+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.enliven\": {\n        source: \"iana\",\n        extensions: [\"nml\"]\n      },\n      \"application/vnd.enphase.envoy\": {\n        source: \"iana\"\n      },\n      \"application/vnd.eprints.data+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.epson.esf\": {\n        source: \"iana\",\n        extensions: [\"esf\"]\n      },\n      \"application/vnd.epson.msf\": {\n        source: \"iana\",\n        extensions: [\"msf\"]\n      },\n      \"application/vnd.epson.quickanime\": {\n        source: \"iana\",\n        extensions: [\"qam\"]\n      },\n      \"application/vnd.epson.salt\": {\n        source: \"iana\",\n        extensions: [\"slt\"]\n      },\n      \"application/vnd.epson.ssf\": {\n        source: \"iana\",\n        extensions: [\"ssf\"]\n      },\n      \"application/vnd.ericsson.quickcall\": {\n        source: \"iana\"\n      },\n      \"application/vnd.espass-espass+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.eszigno3+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"es3\", \"et3\"]\n      },\n      \"application/vnd.etsi.aoc+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.asic-e+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.etsi.asic-s+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.etsi.cug+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.iptvcommand+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.iptvdiscovery+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.iptvprofile+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.iptvsad-bc+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.iptvsad-cod+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.iptvsad-npvr+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.iptvservice+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.iptvsync+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.iptvueprofile+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.mcid+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.mheg5\": {\n        source: \"iana\"\n      },\n      \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.pstn+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.sci+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.simservs+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.timestamp-token\": {\n        source: \"iana\"\n      },\n      \"application/vnd.etsi.tsl+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.etsi.tsl.der\": {\n        source: \"iana\"\n      },\n      \"application/vnd.eu.kasparian.car+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.eudora.data\": {\n        source: \"iana\"\n      },\n      \"application/vnd.evolv.ecig.profile\": {\n        source: \"iana\"\n      },\n      \"application/vnd.evolv.ecig.settings\": {\n        source: \"iana\"\n      },\n      \"application/vnd.evolv.ecig.theme\": {\n        source: \"iana\"\n      },\n      \"application/vnd.exstream-empower+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.exstream-package\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ezpix-album\": {\n        source: \"iana\",\n        extensions: [\"ez2\"]\n      },\n      \"application/vnd.ezpix-package\": {\n        source: \"iana\",\n        extensions: [\"ez3\"]\n      },\n      \"application/vnd.f-secure.mobile\": {\n        source: \"iana\"\n      },\n      \"application/vnd.familysearch.gedcom+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.fastcopy-disk-image\": {\n        source: \"iana\"\n      },\n      \"application/vnd.fdf\": {\n        source: \"iana\",\n        extensions: [\"fdf\"]\n      },\n      \"application/vnd.fdsn.mseed\": {\n        source: \"iana\",\n        extensions: [\"mseed\"]\n      },\n      \"application/vnd.fdsn.seed\": {\n        source: \"iana\",\n        extensions: [\"seed\", \"dataless\"]\n      },\n      \"application/vnd.ffsns\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ficlab.flb+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.filmit.zfc\": {\n        source: \"iana\"\n      },\n      \"application/vnd.fints\": {\n        source: \"iana\"\n      },\n      \"application/vnd.firemonkeys.cloudcell\": {\n        source: \"iana\"\n      },\n      \"application/vnd.flographit\": {\n        source: \"iana\",\n        extensions: [\"gph\"]\n      },\n      \"application/vnd.fluxtime.clip\": {\n        source: \"iana\",\n        extensions: [\"ftc\"]\n      },\n      \"application/vnd.font-fontforge-sfd\": {\n        source: \"iana\"\n      },\n      \"application/vnd.framemaker\": {\n        source: \"iana\",\n        extensions: [\"fm\", \"frame\", \"maker\", \"book\"]\n      },\n      \"application/vnd.frogans.fnc\": {\n        source: \"iana\",\n        extensions: [\"fnc\"]\n      },\n      \"application/vnd.frogans.ltf\": {\n        source: \"iana\",\n        extensions: [\"ltf\"]\n      },\n      \"application/vnd.fsc.weblaunch\": {\n        source: \"iana\",\n        extensions: [\"fsc\"]\n      },\n      \"application/vnd.fujifilm.fb.docuworks\": {\n        source: \"iana\"\n      },\n      \"application/vnd.fujifilm.fb.docuworks.binder\": {\n        source: \"iana\"\n      },\n      \"application/vnd.fujifilm.fb.docuworks.container\": {\n        source: \"iana\"\n      },\n      \"application/vnd.fujifilm.fb.jfi+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.fujitsu.oasys\": {\n        source: \"iana\",\n        extensions: [\"oas\"]\n      },\n      \"application/vnd.fujitsu.oasys2\": {\n        source: \"iana\",\n        extensions: [\"oa2\"]\n      },\n      \"application/vnd.fujitsu.oasys3\": {\n        source: \"iana\",\n        extensions: [\"oa3\"]\n      },\n      \"application/vnd.fujitsu.oasysgp\": {\n        source: \"iana\",\n        extensions: [\"fg5\"]\n      },\n      \"application/vnd.fujitsu.oasysprs\": {\n        source: \"iana\",\n        extensions: [\"bh2\"]\n      },\n      \"application/vnd.fujixerox.art-ex\": {\n        source: \"iana\"\n      },\n      \"application/vnd.fujixerox.art4\": {\n        source: \"iana\"\n      },\n      \"application/vnd.fujixerox.ddd\": {\n        source: \"iana\",\n        extensions: [\"ddd\"]\n      },\n      \"application/vnd.fujixerox.docuworks\": {\n        source: \"iana\",\n        extensions: [\"xdw\"]\n      },\n      \"application/vnd.fujixerox.docuworks.binder\": {\n        source: \"iana\",\n        extensions: [\"xbd\"]\n      },\n      \"application/vnd.fujixerox.docuworks.container\": {\n        source: \"iana\"\n      },\n      \"application/vnd.fujixerox.hbpl\": {\n        source: \"iana\"\n      },\n      \"application/vnd.fut-misnet\": {\n        source: \"iana\"\n      },\n      \"application/vnd.futoin+cbor\": {\n        source: \"iana\"\n      },\n      \"application/vnd.futoin+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.fuzzysheet\": {\n        source: \"iana\",\n        extensions: [\"fzs\"]\n      },\n      \"application/vnd.genomatix.tuxedo\": {\n        source: \"iana\",\n        extensions: [\"txd\"]\n      },\n      \"application/vnd.gentics.grd+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.geo+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.geocube+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.geogebra.file\": {\n        source: \"iana\",\n        extensions: [\"ggb\"]\n      },\n      \"application/vnd.geogebra.slides\": {\n        source: \"iana\"\n      },\n      \"application/vnd.geogebra.tool\": {\n        source: \"iana\",\n        extensions: [\"ggt\"]\n      },\n      \"application/vnd.geometry-explorer\": {\n        source: \"iana\",\n        extensions: [\"gex\", \"gre\"]\n      },\n      \"application/vnd.geonext\": {\n        source: \"iana\",\n        extensions: [\"gxt\"]\n      },\n      \"application/vnd.geoplan\": {\n        source: \"iana\",\n        extensions: [\"g2w\"]\n      },\n      \"application/vnd.geospace\": {\n        source: \"iana\",\n        extensions: [\"g3w\"]\n      },\n      \"application/vnd.gerber\": {\n        source: \"iana\"\n      },\n      \"application/vnd.globalplatform.card-content-mgt\": {\n        source: \"iana\"\n      },\n      \"application/vnd.globalplatform.card-content-mgt-response\": {\n        source: \"iana\"\n      },\n      \"application/vnd.gmx\": {\n        source: \"iana\",\n        extensions: [\"gmx\"]\n      },\n      \"application/vnd.google-apps.document\": {\n        compressible: false,\n        extensions: [\"gdoc\"]\n      },\n      \"application/vnd.google-apps.presentation\": {\n        compressible: false,\n        extensions: [\"gslides\"]\n      },\n      \"application/vnd.google-apps.spreadsheet\": {\n        compressible: false,\n        extensions: [\"gsheet\"]\n      },\n      \"application/vnd.google-earth.kml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"kml\"]\n      },\n      \"application/vnd.google-earth.kmz\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"kmz\"]\n      },\n      \"application/vnd.gov.sk.e-form+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.gov.sk.e-form+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.grafeq\": {\n        source: \"iana\",\n        extensions: [\"gqf\", \"gqs\"]\n      },\n      \"application/vnd.gridmp\": {\n        source: \"iana\"\n      },\n      \"application/vnd.groove-account\": {\n        source: \"iana\",\n        extensions: [\"gac\"]\n      },\n      \"application/vnd.groove-help\": {\n        source: \"iana\",\n        extensions: [\"ghf\"]\n      },\n      \"application/vnd.groove-identity-message\": {\n        source: \"iana\",\n        extensions: [\"gim\"]\n      },\n      \"application/vnd.groove-injector\": {\n        source: \"iana\",\n        extensions: [\"grv\"]\n      },\n      \"application/vnd.groove-tool-message\": {\n        source: \"iana\",\n        extensions: [\"gtm\"]\n      },\n      \"application/vnd.groove-tool-template\": {\n        source: \"iana\",\n        extensions: [\"tpl\"]\n      },\n      \"application/vnd.groove-vcard\": {\n        source: \"iana\",\n        extensions: [\"vcg\"]\n      },\n      \"application/vnd.hal+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.hal+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"hal\"]\n      },\n      \"application/vnd.handheld-entertainment+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"zmm\"]\n      },\n      \"application/vnd.hbci\": {\n        source: \"iana\",\n        extensions: [\"hbci\"]\n      },\n      \"application/vnd.hc+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.hcl-bireports\": {\n        source: \"iana\"\n      },\n      \"application/vnd.hdt\": {\n        source: \"iana\"\n      },\n      \"application/vnd.heroku+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.hhe.lesson-player\": {\n        source: \"iana\",\n        extensions: [\"les\"]\n      },\n      \"application/vnd.hl7cda+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/vnd.hl7v2+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/vnd.hp-hpgl\": {\n        source: \"iana\",\n        extensions: [\"hpgl\"]\n      },\n      \"application/vnd.hp-hpid\": {\n        source: \"iana\",\n        extensions: [\"hpid\"]\n      },\n      \"application/vnd.hp-hps\": {\n        source: \"iana\",\n        extensions: [\"hps\"]\n      },\n      \"application/vnd.hp-jlyt\": {\n        source: \"iana\",\n        extensions: [\"jlt\"]\n      },\n      \"application/vnd.hp-pcl\": {\n        source: \"iana\",\n        extensions: [\"pcl\"]\n      },\n      \"application/vnd.hp-pclxl\": {\n        source: \"iana\",\n        extensions: [\"pclxl\"]\n      },\n      \"application/vnd.httphone\": {\n        source: \"iana\"\n      },\n      \"application/vnd.hydrostatix.sof-data\": {\n        source: \"iana\",\n        extensions: [\"sfd-hdstx\"]\n      },\n      \"application/vnd.hyper+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.hyper-item+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.hyperdrive+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.hzn-3d-crossword\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ibm.afplinedata\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ibm.electronic-media\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ibm.minipay\": {\n        source: \"iana\",\n        extensions: [\"mpy\"]\n      },\n      \"application/vnd.ibm.modcap\": {\n        source: \"iana\",\n        extensions: [\"afp\", \"listafp\", \"list3820\"]\n      },\n      \"application/vnd.ibm.rights-management\": {\n        source: \"iana\",\n        extensions: [\"irm\"]\n      },\n      \"application/vnd.ibm.secure-container\": {\n        source: \"iana\",\n        extensions: [\"sc\"]\n      },\n      \"application/vnd.iccprofile\": {\n        source: \"iana\",\n        extensions: [\"icc\", \"icm\"]\n      },\n      \"application/vnd.ieee.1905\": {\n        source: \"iana\"\n      },\n      \"application/vnd.igloader\": {\n        source: \"iana\",\n        extensions: [\"igl\"]\n      },\n      \"application/vnd.imagemeter.folder+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.imagemeter.image+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.immervision-ivp\": {\n        source: \"iana\",\n        extensions: [\"ivp\"]\n      },\n      \"application/vnd.immervision-ivu\": {\n        source: \"iana\",\n        extensions: [\"ivu\"]\n      },\n      \"application/vnd.ims.imsccv1p1\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ims.imsccv1p2\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ims.imsccv1p3\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ims.lis.v2.result+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.ims.lti.v2.toolproxy+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.ims.lti.v2.toolsettings+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.informedcontrol.rms+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.informix-visionary\": {\n        source: \"iana\"\n      },\n      \"application/vnd.infotech.project\": {\n        source: \"iana\"\n      },\n      \"application/vnd.infotech.project+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.innopath.wamp.notification\": {\n        source: \"iana\"\n      },\n      \"application/vnd.insors.igm\": {\n        source: \"iana\",\n        extensions: [\"igm\"]\n      },\n      \"application/vnd.intercon.formnet\": {\n        source: \"iana\",\n        extensions: [\"xpw\", \"xpx\"]\n      },\n      \"application/vnd.intergeo\": {\n        source: \"iana\",\n        extensions: [\"i2g\"]\n      },\n      \"application/vnd.intertrust.digibox\": {\n        source: \"iana\"\n      },\n      \"application/vnd.intertrust.nncp\": {\n        source: \"iana\"\n      },\n      \"application/vnd.intu.qbo\": {\n        source: \"iana\",\n        extensions: [\"qbo\"]\n      },\n      \"application/vnd.intu.qfx\": {\n        source: \"iana\",\n        extensions: [\"qfx\"]\n      },\n      \"application/vnd.iptc.g2.catalogitem+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.iptc.g2.conceptitem+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.iptc.g2.newsitem+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.iptc.g2.newsmessage+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.iptc.g2.packageitem+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.iptc.g2.planningitem+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.ipunplugged.rcprofile\": {\n        source: \"iana\",\n        extensions: [\"rcprofile\"]\n      },\n      \"application/vnd.irepository.package+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"irp\"]\n      },\n      \"application/vnd.is-xpr\": {\n        source: \"iana\",\n        extensions: [\"xpr\"]\n      },\n      \"application/vnd.isac.fcs\": {\n        source: \"iana\",\n        extensions: [\"fcs\"]\n      },\n      \"application/vnd.iso11783-10+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.jam\": {\n        source: \"iana\",\n        extensions: [\"jam\"]\n      },\n      \"application/vnd.japannet-directory-service\": {\n        source: \"iana\"\n      },\n      \"application/vnd.japannet-jpnstore-wakeup\": {\n        source: \"iana\"\n      },\n      \"application/vnd.japannet-payment-wakeup\": {\n        source: \"iana\"\n      },\n      \"application/vnd.japannet-registration\": {\n        source: \"iana\"\n      },\n      \"application/vnd.japannet-registration-wakeup\": {\n        source: \"iana\"\n      },\n      \"application/vnd.japannet-setstore-wakeup\": {\n        source: \"iana\"\n      },\n      \"application/vnd.japannet-verification\": {\n        source: \"iana\"\n      },\n      \"application/vnd.japannet-verification-wakeup\": {\n        source: \"iana\"\n      },\n      \"application/vnd.jcp.javame.midlet-rms\": {\n        source: \"iana\",\n        extensions: [\"rms\"]\n      },\n      \"application/vnd.jisp\": {\n        source: \"iana\",\n        extensions: [\"jisp\"]\n      },\n      \"application/vnd.joost.joda-archive\": {\n        source: \"iana\",\n        extensions: [\"joda\"]\n      },\n      \"application/vnd.jsk.isdn-ngn\": {\n        source: \"iana\"\n      },\n      \"application/vnd.kahootz\": {\n        source: \"iana\",\n        extensions: [\"ktz\", \"ktr\"]\n      },\n      \"application/vnd.kde.karbon\": {\n        source: \"iana\",\n        extensions: [\"karbon\"]\n      },\n      \"application/vnd.kde.kchart\": {\n        source: \"iana\",\n        extensions: [\"chrt\"]\n      },\n      \"application/vnd.kde.kformula\": {\n        source: \"iana\",\n        extensions: [\"kfo\"]\n      },\n      \"application/vnd.kde.kivio\": {\n        source: \"iana\",\n        extensions: [\"flw\"]\n      },\n      \"application/vnd.kde.kontour\": {\n        source: \"iana\",\n        extensions: [\"kon\"]\n      },\n      \"application/vnd.kde.kpresenter\": {\n        source: \"iana\",\n        extensions: [\"kpr\", \"kpt\"]\n      },\n      \"application/vnd.kde.kspread\": {\n        source: \"iana\",\n        extensions: [\"ksp\"]\n      },\n      \"application/vnd.kde.kword\": {\n        source: \"iana\",\n        extensions: [\"kwd\", \"kwt\"]\n      },\n      \"application/vnd.kenameaapp\": {\n        source: \"iana\",\n        extensions: [\"htke\"]\n      },\n      \"application/vnd.kidspiration\": {\n        source: \"iana\",\n        extensions: [\"kia\"]\n      },\n      \"application/vnd.kinar\": {\n        source: \"iana\",\n        extensions: [\"kne\", \"knp\"]\n      },\n      \"application/vnd.koan\": {\n        source: \"iana\",\n        extensions: [\"skp\", \"skd\", \"skt\", \"skm\"]\n      },\n      \"application/vnd.kodak-descriptor\": {\n        source: \"iana\",\n        extensions: [\"sse\"]\n      },\n      \"application/vnd.las\": {\n        source: \"iana\"\n      },\n      \"application/vnd.las.las+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.las.las+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"lasxml\"]\n      },\n      \"application/vnd.laszip\": {\n        source: \"iana\"\n      },\n      \"application/vnd.leap+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.liberty-request+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.llamagraphics.life-balance.desktop\": {\n        source: \"iana\",\n        extensions: [\"lbd\"]\n      },\n      \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"lbe\"]\n      },\n      \"application/vnd.logipipe.circuit+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.loom\": {\n        source: \"iana\"\n      },\n      \"application/vnd.lotus-1-2-3\": {\n        source: \"iana\",\n        extensions: [\"123\"]\n      },\n      \"application/vnd.lotus-approach\": {\n        source: \"iana\",\n        extensions: [\"apr\"]\n      },\n      \"application/vnd.lotus-freelance\": {\n        source: \"iana\",\n        extensions: [\"pre\"]\n      },\n      \"application/vnd.lotus-notes\": {\n        source: \"iana\",\n        extensions: [\"nsf\"]\n      },\n      \"application/vnd.lotus-organizer\": {\n        source: \"iana\",\n        extensions: [\"org\"]\n      },\n      \"application/vnd.lotus-screencam\": {\n        source: \"iana\",\n        extensions: [\"scm\"]\n      },\n      \"application/vnd.lotus-wordpro\": {\n        source: \"iana\",\n        extensions: [\"lwp\"]\n      },\n      \"application/vnd.macports.portpkg\": {\n        source: \"iana\",\n        extensions: [\"portpkg\"]\n      },\n      \"application/vnd.mapbox-vector-tile\": {\n        source: \"iana\",\n        extensions: [\"mvt\"]\n      },\n      \"application/vnd.marlin.drm.actiontoken+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.marlin.drm.conftoken+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.marlin.drm.license+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.marlin.drm.mdcf\": {\n        source: \"iana\"\n      },\n      \"application/vnd.mason+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.maxar.archive.3tz+zip\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"application/vnd.maxmind.maxmind-db\": {\n        source: \"iana\"\n      },\n      \"application/vnd.mcd\": {\n        source: \"iana\",\n        extensions: [\"mcd\"]\n      },\n      \"application/vnd.medcalcdata\": {\n        source: \"iana\",\n        extensions: [\"mc1\"]\n      },\n      \"application/vnd.mediastation.cdkey\": {\n        source: \"iana\",\n        extensions: [\"cdkey\"]\n      },\n      \"application/vnd.meridian-slingshot\": {\n        source: \"iana\"\n      },\n      \"application/vnd.mfer\": {\n        source: \"iana\",\n        extensions: [\"mwf\"]\n      },\n      \"application/vnd.mfmp\": {\n        source: \"iana\",\n        extensions: [\"mfm\"]\n      },\n      \"application/vnd.micro+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.micrografx.flo\": {\n        source: \"iana\",\n        extensions: [\"flo\"]\n      },\n      \"application/vnd.micrografx.igx\": {\n        source: \"iana\",\n        extensions: [\"igx\"]\n      },\n      \"application/vnd.microsoft.portable-executable\": {\n        source: \"iana\"\n      },\n      \"application/vnd.microsoft.windows.thumbnail-cache\": {\n        source: \"iana\"\n      },\n      \"application/vnd.miele+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.mif\": {\n        source: \"iana\",\n        extensions: [\"mif\"]\n      },\n      \"application/vnd.minisoft-hp3000-save\": {\n        source: \"iana\"\n      },\n      \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n        source: \"iana\"\n      },\n      \"application/vnd.mobius.daf\": {\n        source: \"iana\",\n        extensions: [\"daf\"]\n      },\n      \"application/vnd.mobius.dis\": {\n        source: \"iana\",\n        extensions: [\"dis\"]\n      },\n      \"application/vnd.mobius.mbk\": {\n        source: \"iana\",\n        extensions: [\"mbk\"]\n      },\n      \"application/vnd.mobius.mqy\": {\n        source: \"iana\",\n        extensions: [\"mqy\"]\n      },\n      \"application/vnd.mobius.msl\": {\n        source: \"iana\",\n        extensions: [\"msl\"]\n      },\n      \"application/vnd.mobius.plc\": {\n        source: \"iana\",\n        extensions: [\"plc\"]\n      },\n      \"application/vnd.mobius.txf\": {\n        source: \"iana\",\n        extensions: [\"txf\"]\n      },\n      \"application/vnd.mophun.application\": {\n        source: \"iana\",\n        extensions: [\"mpn\"]\n      },\n      \"application/vnd.mophun.certificate\": {\n        source: \"iana\",\n        extensions: [\"mpc\"]\n      },\n      \"application/vnd.motorola.flexsuite\": {\n        source: \"iana\"\n      },\n      \"application/vnd.motorola.flexsuite.adsi\": {\n        source: \"iana\"\n      },\n      \"application/vnd.motorola.flexsuite.fis\": {\n        source: \"iana\"\n      },\n      \"application/vnd.motorola.flexsuite.gotap\": {\n        source: \"iana\"\n      },\n      \"application/vnd.motorola.flexsuite.kmr\": {\n        source: \"iana\"\n      },\n      \"application/vnd.motorola.flexsuite.ttc\": {\n        source: \"iana\"\n      },\n      \"application/vnd.motorola.flexsuite.wem\": {\n        source: \"iana\"\n      },\n      \"application/vnd.motorola.iprm\": {\n        source: \"iana\"\n      },\n      \"application/vnd.mozilla.xul+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xul\"]\n      },\n      \"application/vnd.ms-3mfdocument\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ms-artgalry\": {\n        source: \"iana\",\n        extensions: [\"cil\"]\n      },\n      \"application/vnd.ms-asf\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ms-cab-compressed\": {\n        source: \"iana\",\n        extensions: [\"cab\"]\n      },\n      \"application/vnd.ms-color.iccprofile\": {\n        source: \"apache\"\n      },\n      \"application/vnd.ms-excel\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"xls\", \"xlm\", \"xla\", \"xlc\", \"xlt\", \"xlw\"]\n      },\n      \"application/vnd.ms-excel.addin.macroenabled.12\": {\n        source: \"iana\",\n        extensions: [\"xlam\"]\n      },\n      \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n        source: \"iana\",\n        extensions: [\"xlsb\"]\n      },\n      \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n        source: \"iana\",\n        extensions: [\"xlsm\"]\n      },\n      \"application/vnd.ms-excel.template.macroenabled.12\": {\n        source: \"iana\",\n        extensions: [\"xltm\"]\n      },\n      \"application/vnd.ms-fontobject\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"eot\"]\n      },\n      \"application/vnd.ms-htmlhelp\": {\n        source: \"iana\",\n        extensions: [\"chm\"]\n      },\n      \"application/vnd.ms-ims\": {\n        source: \"iana\",\n        extensions: [\"ims\"]\n      },\n      \"application/vnd.ms-lrm\": {\n        source: \"iana\",\n        extensions: [\"lrm\"]\n      },\n      \"application/vnd.ms-office.activex+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.ms-officetheme\": {\n        source: \"iana\",\n        extensions: [\"thmx\"]\n      },\n      \"application/vnd.ms-opentype\": {\n        source: \"apache\",\n        compressible: true\n      },\n      \"application/vnd.ms-outlook\": {\n        compressible: false,\n        extensions: [\"msg\"]\n      },\n      \"application/vnd.ms-package.obfuscated-opentype\": {\n        source: \"apache\"\n      },\n      \"application/vnd.ms-pki.seccat\": {\n        source: \"apache\",\n        extensions: [\"cat\"]\n      },\n      \"application/vnd.ms-pki.stl\": {\n        source: \"apache\",\n        extensions: [\"stl\"]\n      },\n      \"application/vnd.ms-playready.initiator+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.ms-powerpoint\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"ppt\", \"pps\", \"pot\"]\n      },\n      \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n        source: \"iana\",\n        extensions: [\"ppam\"]\n      },\n      \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n        source: \"iana\",\n        extensions: [\"pptm\"]\n      },\n      \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n        source: \"iana\",\n        extensions: [\"sldm\"]\n      },\n      \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n        source: \"iana\",\n        extensions: [\"ppsm\"]\n      },\n      \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n        source: \"iana\",\n        extensions: [\"potm\"]\n      },\n      \"application/vnd.ms-printdevicecapabilities+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.ms-printing.printticket+xml\": {\n        source: \"apache\",\n        compressible: true\n      },\n      \"application/vnd.ms-printschematicket+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.ms-project\": {\n        source: \"iana\",\n        extensions: [\"mpp\", \"mpt\"]\n      },\n      \"application/vnd.ms-tnef\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ms-windows.devicepairing\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ms-windows.nwprinting.oob\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ms-windows.printerpairing\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ms-windows.wsd.oob\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ms-wmdrm.lic-resp\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ms-wmdrm.meter-resp\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ms-word.document.macroenabled.12\": {\n        source: \"iana\",\n        extensions: [\"docm\"]\n      },\n      \"application/vnd.ms-word.template.macroenabled.12\": {\n        source: \"iana\",\n        extensions: [\"dotm\"]\n      },\n      \"application/vnd.ms-works\": {\n        source: \"iana\",\n        extensions: [\"wps\", \"wks\", \"wcm\", \"wdb\"]\n      },\n      \"application/vnd.ms-wpl\": {\n        source: \"iana\",\n        extensions: [\"wpl\"]\n      },\n      \"application/vnd.ms-xpsdocument\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"xps\"]\n      },\n      \"application/vnd.msa-disk-image\": {\n        source: \"iana\"\n      },\n      \"application/vnd.mseq\": {\n        source: \"iana\",\n        extensions: [\"mseq\"]\n      },\n      \"application/vnd.msign\": {\n        source: \"iana\"\n      },\n      \"application/vnd.multiad.creator\": {\n        source: \"iana\"\n      },\n      \"application/vnd.multiad.creator.cif\": {\n        source: \"iana\"\n      },\n      \"application/vnd.music-niff\": {\n        source: \"iana\"\n      },\n      \"application/vnd.musician\": {\n        source: \"iana\",\n        extensions: [\"mus\"]\n      },\n      \"application/vnd.muvee.style\": {\n        source: \"iana\",\n        extensions: [\"msty\"]\n      },\n      \"application/vnd.mynfc\": {\n        source: \"iana\",\n        extensions: [\"taglet\"]\n      },\n      \"application/vnd.nacamar.ybrid+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.ncd.control\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ncd.reference\": {\n        source: \"iana\"\n      },\n      \"application/vnd.nearst.inv+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.nebumind.line\": {\n        source: \"iana\"\n      },\n      \"application/vnd.nervana\": {\n        source: \"iana\"\n      },\n      \"application/vnd.netfpx\": {\n        source: \"iana\"\n      },\n      \"application/vnd.neurolanguage.nlu\": {\n        source: \"iana\",\n        extensions: [\"nlu\"]\n      },\n      \"application/vnd.nimn\": {\n        source: \"iana\"\n      },\n      \"application/vnd.nintendo.nitro.rom\": {\n        source: \"iana\"\n      },\n      \"application/vnd.nintendo.snes.rom\": {\n        source: \"iana\"\n      },\n      \"application/vnd.nitf\": {\n        source: \"iana\",\n        extensions: [\"ntf\", \"nitf\"]\n      },\n      \"application/vnd.noblenet-directory\": {\n        source: \"iana\",\n        extensions: [\"nnd\"]\n      },\n      \"application/vnd.noblenet-sealer\": {\n        source: \"iana\",\n        extensions: [\"nns\"]\n      },\n      \"application/vnd.noblenet-web\": {\n        source: \"iana\",\n        extensions: [\"nnw\"]\n      },\n      \"application/vnd.nokia.catalogs\": {\n        source: \"iana\"\n      },\n      \"application/vnd.nokia.conml+wbxml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.nokia.conml+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.nokia.iptv.config+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.nokia.isds-radio-presets\": {\n        source: \"iana\"\n      },\n      \"application/vnd.nokia.landmark+wbxml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.nokia.landmark+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.nokia.landmarkcollection+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.nokia.n-gage.ac+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"ac\"]\n      },\n      \"application/vnd.nokia.n-gage.data\": {\n        source: \"iana\",\n        extensions: [\"ngdat\"]\n      },\n      \"application/vnd.nokia.n-gage.symbian.install\": {\n        source: \"iana\",\n        extensions: [\"n-gage\"]\n      },\n      \"application/vnd.nokia.ncd\": {\n        source: \"iana\"\n      },\n      \"application/vnd.nokia.pcd+wbxml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.nokia.pcd+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.nokia.radio-preset\": {\n        source: \"iana\",\n        extensions: [\"rpst\"]\n      },\n      \"application/vnd.nokia.radio-presets\": {\n        source: \"iana\",\n        extensions: [\"rpss\"]\n      },\n      \"application/vnd.novadigm.edm\": {\n        source: \"iana\",\n        extensions: [\"edm\"]\n      },\n      \"application/vnd.novadigm.edx\": {\n        source: \"iana\",\n        extensions: [\"edx\"]\n      },\n      \"application/vnd.novadigm.ext\": {\n        source: \"iana\",\n        extensions: [\"ext\"]\n      },\n      \"application/vnd.ntt-local.content-share\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ntt-local.file-transfer\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ntt-local.ogw_remote-access\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ntt-local.sip-ta_remote\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oasis.opendocument.chart\": {\n        source: \"iana\",\n        extensions: [\"odc\"]\n      },\n      \"application/vnd.oasis.opendocument.chart-template\": {\n        source: \"iana\",\n        extensions: [\"otc\"]\n      },\n      \"application/vnd.oasis.opendocument.database\": {\n        source: \"iana\",\n        extensions: [\"odb\"]\n      },\n      \"application/vnd.oasis.opendocument.formula\": {\n        source: \"iana\",\n        extensions: [\"odf\"]\n      },\n      \"application/vnd.oasis.opendocument.formula-template\": {\n        source: \"iana\",\n        extensions: [\"odft\"]\n      },\n      \"application/vnd.oasis.opendocument.graphics\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"odg\"]\n      },\n      \"application/vnd.oasis.opendocument.graphics-template\": {\n        source: \"iana\",\n        extensions: [\"otg\"]\n      },\n      \"application/vnd.oasis.opendocument.image\": {\n        source: \"iana\",\n        extensions: [\"odi\"]\n      },\n      \"application/vnd.oasis.opendocument.image-template\": {\n        source: \"iana\",\n        extensions: [\"oti\"]\n      },\n      \"application/vnd.oasis.opendocument.presentation\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"odp\"]\n      },\n      \"application/vnd.oasis.opendocument.presentation-template\": {\n        source: \"iana\",\n        extensions: [\"otp\"]\n      },\n      \"application/vnd.oasis.opendocument.spreadsheet\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"ods\"]\n      },\n      \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n        source: \"iana\",\n        extensions: [\"ots\"]\n      },\n      \"application/vnd.oasis.opendocument.text\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"odt\"]\n      },\n      \"application/vnd.oasis.opendocument.text-master\": {\n        source: \"iana\",\n        extensions: [\"odm\"]\n      },\n      \"application/vnd.oasis.opendocument.text-template\": {\n        source: \"iana\",\n        extensions: [\"ott\"]\n      },\n      \"application/vnd.oasis.opendocument.text-web\": {\n        source: \"iana\",\n        extensions: [\"oth\"]\n      },\n      \"application/vnd.obn\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ocf+cbor\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oci.image.manifest.v1+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oftn.l10n+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oipf.contentaccessdownload+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oipf.contentaccessstreaming+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oipf.cspg-hexbinary\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oipf.dae.svg+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oipf.dae.xhtml+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oipf.pae.gem\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oipf.spdiscovery+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oipf.spdlist+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oipf.ueprofile+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oipf.userprofile+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.olpc-sugar\": {\n        source: \"iana\",\n        extensions: [\"xo\"]\n      },\n      \"application/vnd.oma-scws-config\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma-scws-http-request\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma-scws-http-response\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.bcast.drm-trigger+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.bcast.imd+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.bcast.ltkm\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma.bcast.notification+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.bcast.provisioningtrigger\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma.bcast.sgboot\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma.bcast.sgdd+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.bcast.sgdu\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma.bcast.simple-symbol-container\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.bcast.sprov+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.bcast.stkm\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma.cab-address-book+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.cab-feature-handler+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.cab-pcc+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.cab-subs-invite+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.cab-user-prefs+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.dcd\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma.dcdc\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma.dd2+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"dd2\"]\n      },\n      \"application/vnd.oma.drm.risd+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.group-usage-list+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.lwm2m+cbor\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma.lwm2m+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.lwm2m+tlv\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma.pal+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.poc.final-report+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.poc.groups+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.push\": {\n        source: \"iana\"\n      },\n      \"application/vnd.oma.scidm.messages+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oma.xcap-directory+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.omads-email+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/vnd.omads-file+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/vnd.omads-folder+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/vnd.omaloc-supl-init\": {\n        source: \"iana\"\n      },\n      \"application/vnd.onepager\": {\n        source: \"iana\"\n      },\n      \"application/vnd.onepagertamp\": {\n        source: \"iana\"\n      },\n      \"application/vnd.onepagertamx\": {\n        source: \"iana\"\n      },\n      \"application/vnd.onepagertat\": {\n        source: \"iana\"\n      },\n      \"application/vnd.onepagertatp\": {\n        source: \"iana\"\n      },\n      \"application/vnd.onepagertatx\": {\n        source: \"iana\"\n      },\n      \"application/vnd.openblox.game+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"obgx\"]\n      },\n      \"application/vnd.openblox.game-binary\": {\n        source: \"iana\"\n      },\n      \"application/vnd.openeye.oeb\": {\n        source: \"iana\"\n      },\n      \"application/vnd.openofficeorg.extension\": {\n        source: \"apache\",\n        extensions: [\"oxt\"]\n      },\n      \"application/vnd.openstreetmap.data+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"osm\"]\n      },\n      \"application/vnd.opentimestamps.ots\": {\n        source: \"iana\"\n      },\n      \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"pptx\"]\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n        source: \"iana\",\n        extensions: [\"sldx\"]\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n        source: \"iana\",\n        extensions: [\"ppsx\"]\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n        source: \"iana\",\n        extensions: [\"potx\"]\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"xlsx\"]\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n        source: \"iana\",\n        extensions: [\"xltx\"]\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n        source: \"iana\"\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"docx\"]\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n        source: \"iana\",\n        extensions: [\"dotx\"]\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-package.core-properties+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.openxmlformats-package.relationships+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oracle.resource+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.orange.indata\": {\n        source: \"iana\"\n      },\n      \"application/vnd.osa.netdeploy\": {\n        source: \"iana\"\n      },\n      \"application/vnd.osgeo.mapguide.package\": {\n        source: \"iana\",\n        extensions: [\"mgp\"]\n      },\n      \"application/vnd.osgi.bundle\": {\n        source: \"iana\"\n      },\n      \"application/vnd.osgi.dp\": {\n        source: \"iana\",\n        extensions: [\"dp\"]\n      },\n      \"application/vnd.osgi.subsystem\": {\n        source: \"iana\",\n        extensions: [\"esa\"]\n      },\n      \"application/vnd.otps.ct-kip+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.oxli.countgraph\": {\n        source: \"iana\"\n      },\n      \"application/vnd.pagerduty+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.palm\": {\n        source: \"iana\",\n        extensions: [\"pdb\", \"pqa\", \"oprc\"]\n      },\n      \"application/vnd.panoply\": {\n        source: \"iana\"\n      },\n      \"application/vnd.paos.xml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.patentdive\": {\n        source: \"iana\"\n      },\n      \"application/vnd.patientecommsdoc\": {\n        source: \"iana\"\n      },\n      \"application/vnd.pawaafile\": {\n        source: \"iana\",\n        extensions: [\"paw\"]\n      },\n      \"application/vnd.pcos\": {\n        source: \"iana\"\n      },\n      \"application/vnd.pg.format\": {\n        source: \"iana\",\n        extensions: [\"str\"]\n      },\n      \"application/vnd.pg.osasli\": {\n        source: \"iana\",\n        extensions: [\"ei6\"]\n      },\n      \"application/vnd.piaccess.application-licence\": {\n        source: \"iana\"\n      },\n      \"application/vnd.picsel\": {\n        source: \"iana\",\n        extensions: [\"efif\"]\n      },\n      \"application/vnd.pmi.widget\": {\n        source: \"iana\",\n        extensions: [\"wg\"]\n      },\n      \"application/vnd.poc.group-advertisement+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.pocketlearn\": {\n        source: \"iana\",\n        extensions: [\"plf\"]\n      },\n      \"application/vnd.powerbuilder6\": {\n        source: \"iana\",\n        extensions: [\"pbd\"]\n      },\n      \"application/vnd.powerbuilder6-s\": {\n        source: \"iana\"\n      },\n      \"application/vnd.powerbuilder7\": {\n        source: \"iana\"\n      },\n      \"application/vnd.powerbuilder7-s\": {\n        source: \"iana\"\n      },\n      \"application/vnd.powerbuilder75\": {\n        source: \"iana\"\n      },\n      \"application/vnd.powerbuilder75-s\": {\n        source: \"iana\"\n      },\n      \"application/vnd.preminet\": {\n        source: \"iana\"\n      },\n      \"application/vnd.previewsystems.box\": {\n        source: \"iana\",\n        extensions: [\"box\"]\n      },\n      \"application/vnd.proteus.magazine\": {\n        source: \"iana\",\n        extensions: [\"mgz\"]\n      },\n      \"application/vnd.psfs\": {\n        source: \"iana\"\n      },\n      \"application/vnd.publishare-delta-tree\": {\n        source: \"iana\",\n        extensions: [\"qps\"]\n      },\n      \"application/vnd.pvi.ptid1\": {\n        source: \"iana\",\n        extensions: [\"ptid\"]\n      },\n      \"application/vnd.pwg-multiplexed\": {\n        source: \"iana\"\n      },\n      \"application/vnd.pwg-xhtml-print+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.qualcomm.brew-app-res\": {\n        source: \"iana\"\n      },\n      \"application/vnd.quarantainenet\": {\n        source: \"iana\"\n      },\n      \"application/vnd.quark.quarkxpress\": {\n        source: \"iana\",\n        extensions: [\"qxd\", \"qxt\", \"qwd\", \"qwt\", \"qxl\", \"qxb\"]\n      },\n      \"application/vnd.quobject-quoxdocument\": {\n        source: \"iana\"\n      },\n      \"application/vnd.radisys.moml+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml-audit+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml-audit-conf+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml-audit-conn+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml-audit-dialog+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml-audit-stream+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml-conf+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml-dialog+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml-dialog-base+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml-dialog-group+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml-dialog-speech+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.radisys.msml-dialog-transform+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.rainstor.data\": {\n        source: \"iana\"\n      },\n      \"application/vnd.rapid\": {\n        source: \"iana\"\n      },\n      \"application/vnd.rar\": {\n        source: \"iana\",\n        extensions: [\"rar\"]\n      },\n      \"application/vnd.realvnc.bed\": {\n        source: \"iana\",\n        extensions: [\"bed\"]\n      },\n      \"application/vnd.recordare.musicxml\": {\n        source: \"iana\",\n        extensions: [\"mxl\"]\n      },\n      \"application/vnd.recordare.musicxml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"musicxml\"]\n      },\n      \"application/vnd.renlearn.rlprint\": {\n        source: \"iana\"\n      },\n      \"application/vnd.resilient.logic\": {\n        source: \"iana\"\n      },\n      \"application/vnd.restful+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.rig.cryptonote\": {\n        source: \"iana\",\n        extensions: [\"cryptonote\"]\n      },\n      \"application/vnd.rim.cod\": {\n        source: \"apache\",\n        extensions: [\"cod\"]\n      },\n      \"application/vnd.rn-realmedia\": {\n        source: \"apache\",\n        extensions: [\"rm\"]\n      },\n      \"application/vnd.rn-realmedia-vbr\": {\n        source: \"apache\",\n        extensions: [\"rmvb\"]\n      },\n      \"application/vnd.route66.link66+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"link66\"]\n      },\n      \"application/vnd.rs-274x\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ruckus.download\": {\n        source: \"iana\"\n      },\n      \"application/vnd.s3sms\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sailingtracker.track\": {\n        source: \"iana\",\n        extensions: [\"st\"]\n      },\n      \"application/vnd.sar\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sbm.cid\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sbm.mid2\": {\n        source: \"iana\"\n      },\n      \"application/vnd.scribus\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sealed.3df\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sealed.csf\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sealed.doc\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sealed.eml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sealed.mht\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sealed.net\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sealed.ppt\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sealed.tiff\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sealed.xls\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sealedmedia.softseal.html\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sealedmedia.softseal.pdf\": {\n        source: \"iana\"\n      },\n      \"application/vnd.seemail\": {\n        source: \"iana\",\n        extensions: [\"see\"]\n      },\n      \"application/vnd.seis+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.sema\": {\n        source: \"iana\",\n        extensions: [\"sema\"]\n      },\n      \"application/vnd.semd\": {\n        source: \"iana\",\n        extensions: [\"semd\"]\n      },\n      \"application/vnd.semf\": {\n        source: \"iana\",\n        extensions: [\"semf\"]\n      },\n      \"application/vnd.shade-save-file\": {\n        source: \"iana\"\n      },\n      \"application/vnd.shana.informed.formdata\": {\n        source: \"iana\",\n        extensions: [\"ifm\"]\n      },\n      \"application/vnd.shana.informed.formtemplate\": {\n        source: \"iana\",\n        extensions: [\"itp\"]\n      },\n      \"application/vnd.shana.informed.interchange\": {\n        source: \"iana\",\n        extensions: [\"iif\"]\n      },\n      \"application/vnd.shana.informed.package\": {\n        source: \"iana\",\n        extensions: [\"ipk\"]\n      },\n      \"application/vnd.shootproof+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.shopkick+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.shp\": {\n        source: \"iana\"\n      },\n      \"application/vnd.shx\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sigrok.session\": {\n        source: \"iana\"\n      },\n      \"application/vnd.simtech-mindmapper\": {\n        source: \"iana\",\n        extensions: [\"twd\", \"twds\"]\n      },\n      \"application/vnd.siren+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.smaf\": {\n        source: \"iana\",\n        extensions: [\"mmf\"]\n      },\n      \"application/vnd.smart.notebook\": {\n        source: \"iana\"\n      },\n      \"application/vnd.smart.teacher\": {\n        source: \"iana\",\n        extensions: [\"teacher\"]\n      },\n      \"application/vnd.snesdev-page-table\": {\n        source: \"iana\"\n      },\n      \"application/vnd.software602.filler.form+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"fo\"]\n      },\n      \"application/vnd.software602.filler.form-xml-zip\": {\n        source: \"iana\"\n      },\n      \"application/vnd.solent.sdkm+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"sdkm\", \"sdkd\"]\n      },\n      \"application/vnd.spotfire.dxp\": {\n        source: \"iana\",\n        extensions: [\"dxp\"]\n      },\n      \"application/vnd.spotfire.sfs\": {\n        source: \"iana\",\n        extensions: [\"sfs\"]\n      },\n      \"application/vnd.sqlite3\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sss-cod\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sss-dtf\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sss-ntf\": {\n        source: \"iana\"\n      },\n      \"application/vnd.stardivision.calc\": {\n        source: \"apache\",\n        extensions: [\"sdc\"]\n      },\n      \"application/vnd.stardivision.draw\": {\n        source: \"apache\",\n        extensions: [\"sda\"]\n      },\n      \"application/vnd.stardivision.impress\": {\n        source: \"apache\",\n        extensions: [\"sdd\"]\n      },\n      \"application/vnd.stardivision.math\": {\n        source: \"apache\",\n        extensions: [\"smf\"]\n      },\n      \"application/vnd.stardivision.writer\": {\n        source: \"apache\",\n        extensions: [\"sdw\", \"vor\"]\n      },\n      \"application/vnd.stardivision.writer-global\": {\n        source: \"apache\",\n        extensions: [\"sgl\"]\n      },\n      \"application/vnd.stepmania.package\": {\n        source: \"iana\",\n        extensions: [\"smzip\"]\n      },\n      \"application/vnd.stepmania.stepchart\": {\n        source: \"iana\",\n        extensions: [\"sm\"]\n      },\n      \"application/vnd.street-stream\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sun.wadl+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"wadl\"]\n      },\n      \"application/vnd.sun.xml.calc\": {\n        source: \"apache\",\n        extensions: [\"sxc\"]\n      },\n      \"application/vnd.sun.xml.calc.template\": {\n        source: \"apache\",\n        extensions: [\"stc\"]\n      },\n      \"application/vnd.sun.xml.draw\": {\n        source: \"apache\",\n        extensions: [\"sxd\"]\n      },\n      \"application/vnd.sun.xml.draw.template\": {\n        source: \"apache\",\n        extensions: [\"std\"]\n      },\n      \"application/vnd.sun.xml.impress\": {\n        source: \"apache\",\n        extensions: [\"sxi\"]\n      },\n      \"application/vnd.sun.xml.impress.template\": {\n        source: \"apache\",\n        extensions: [\"sti\"]\n      },\n      \"application/vnd.sun.xml.math\": {\n        source: \"apache\",\n        extensions: [\"sxm\"]\n      },\n      \"application/vnd.sun.xml.writer\": {\n        source: \"apache\",\n        extensions: [\"sxw\"]\n      },\n      \"application/vnd.sun.xml.writer.global\": {\n        source: \"apache\",\n        extensions: [\"sxg\"]\n      },\n      \"application/vnd.sun.xml.writer.template\": {\n        source: \"apache\",\n        extensions: [\"stw\"]\n      },\n      \"application/vnd.sus-calendar\": {\n        source: \"iana\",\n        extensions: [\"sus\", \"susp\"]\n      },\n      \"application/vnd.svd\": {\n        source: \"iana\",\n        extensions: [\"svd\"]\n      },\n      \"application/vnd.swiftview-ics\": {\n        source: \"iana\"\n      },\n      \"application/vnd.sycle+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.syft+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.symbian.install\": {\n        source: \"apache\",\n        extensions: [\"sis\", \"sisx\"]\n      },\n      \"application/vnd.syncml+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true,\n        extensions: [\"xsm\"]\n      },\n      \"application/vnd.syncml.dm+wbxml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        extensions: [\"bdm\"]\n      },\n      \"application/vnd.syncml.dm+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true,\n        extensions: [\"xdm\"]\n      },\n      \"application/vnd.syncml.dm.notification\": {\n        source: \"iana\"\n      },\n      \"application/vnd.syncml.dmddf+wbxml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.syncml.dmddf+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true,\n        extensions: [\"ddf\"]\n      },\n      \"application/vnd.syncml.dmtnds+wbxml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.syncml.dmtnds+xml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true\n      },\n      \"application/vnd.syncml.ds.notification\": {\n        source: \"iana\"\n      },\n      \"application/vnd.tableschema+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.tao.intent-module-archive\": {\n        source: \"iana\",\n        extensions: [\"tao\"]\n      },\n      \"application/vnd.tcpdump.pcap\": {\n        source: \"iana\",\n        extensions: [\"pcap\", \"cap\", \"dmp\"]\n      },\n      \"application/vnd.think-cell.ppttc+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.tmd.mediaflex.api+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.tml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.tmobile-livetv\": {\n        source: \"iana\",\n        extensions: [\"tmo\"]\n      },\n      \"application/vnd.tri.onesource\": {\n        source: \"iana\"\n      },\n      \"application/vnd.trid.tpt\": {\n        source: \"iana\",\n        extensions: [\"tpt\"]\n      },\n      \"application/vnd.triscape.mxs\": {\n        source: \"iana\",\n        extensions: [\"mxs\"]\n      },\n      \"application/vnd.trueapp\": {\n        source: \"iana\",\n        extensions: [\"tra\"]\n      },\n      \"application/vnd.truedoc\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ubisoft.webplayer\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ufdl\": {\n        source: \"iana\",\n        extensions: [\"ufd\", \"ufdl\"]\n      },\n      \"application/vnd.uiq.theme\": {\n        source: \"iana\",\n        extensions: [\"utz\"]\n      },\n      \"application/vnd.umajin\": {\n        source: \"iana\",\n        extensions: [\"umj\"]\n      },\n      \"application/vnd.unity\": {\n        source: \"iana\",\n        extensions: [\"unityweb\"]\n      },\n      \"application/vnd.uoml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"uoml\"]\n      },\n      \"application/vnd.uplanet.alert\": {\n        source: \"iana\"\n      },\n      \"application/vnd.uplanet.alert-wbxml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.uplanet.bearer-choice\": {\n        source: \"iana\"\n      },\n      \"application/vnd.uplanet.bearer-choice-wbxml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.uplanet.cacheop\": {\n        source: \"iana\"\n      },\n      \"application/vnd.uplanet.cacheop-wbxml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.uplanet.channel\": {\n        source: \"iana\"\n      },\n      \"application/vnd.uplanet.channel-wbxml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.uplanet.list\": {\n        source: \"iana\"\n      },\n      \"application/vnd.uplanet.list-wbxml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.uplanet.listcmd\": {\n        source: \"iana\"\n      },\n      \"application/vnd.uplanet.listcmd-wbxml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.uplanet.signal\": {\n        source: \"iana\"\n      },\n      \"application/vnd.uri-map\": {\n        source: \"iana\"\n      },\n      \"application/vnd.valve.source.material\": {\n        source: \"iana\"\n      },\n      \"application/vnd.vcx\": {\n        source: \"iana\",\n        extensions: [\"vcx\"]\n      },\n      \"application/vnd.vd-study\": {\n        source: \"iana\"\n      },\n      \"application/vnd.vectorworks\": {\n        source: \"iana\"\n      },\n      \"application/vnd.vel+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.verimatrix.vcas\": {\n        source: \"iana\"\n      },\n      \"application/vnd.veritone.aion+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.veryant.thin\": {\n        source: \"iana\"\n      },\n      \"application/vnd.ves.encrypted\": {\n        source: \"iana\"\n      },\n      \"application/vnd.vidsoft.vidconference\": {\n        source: \"iana\"\n      },\n      \"application/vnd.visio\": {\n        source: \"iana\",\n        extensions: [\"vsd\", \"vst\", \"vss\", \"vsw\"]\n      },\n      \"application/vnd.visionary\": {\n        source: \"iana\",\n        extensions: [\"vis\"]\n      },\n      \"application/vnd.vividence.scriptfile\": {\n        source: \"iana\"\n      },\n      \"application/vnd.vsf\": {\n        source: \"iana\",\n        extensions: [\"vsf\"]\n      },\n      \"application/vnd.wap.sic\": {\n        source: \"iana\"\n      },\n      \"application/vnd.wap.slc\": {\n        source: \"iana\"\n      },\n      \"application/vnd.wap.wbxml\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        extensions: [\"wbxml\"]\n      },\n      \"application/vnd.wap.wmlc\": {\n        source: \"iana\",\n        extensions: [\"wmlc\"]\n      },\n      \"application/vnd.wap.wmlscriptc\": {\n        source: \"iana\",\n        extensions: [\"wmlsc\"]\n      },\n      \"application/vnd.webturbo\": {\n        source: \"iana\",\n        extensions: [\"wtb\"]\n      },\n      \"application/vnd.wfa.dpp\": {\n        source: \"iana\"\n      },\n      \"application/vnd.wfa.p2p\": {\n        source: \"iana\"\n      },\n      \"application/vnd.wfa.wsc\": {\n        source: \"iana\"\n      },\n      \"application/vnd.windows.devicepairing\": {\n        source: \"iana\"\n      },\n      \"application/vnd.wmc\": {\n        source: \"iana\"\n      },\n      \"application/vnd.wmf.bootstrap\": {\n        source: \"iana\"\n      },\n      \"application/vnd.wolfram.mathematica\": {\n        source: \"iana\"\n      },\n      \"application/vnd.wolfram.mathematica.package\": {\n        source: \"iana\"\n      },\n      \"application/vnd.wolfram.player\": {\n        source: \"iana\",\n        extensions: [\"nbp\"]\n      },\n      \"application/vnd.wordperfect\": {\n        source: \"iana\",\n        extensions: [\"wpd\"]\n      },\n      \"application/vnd.wqd\": {\n        source: \"iana\",\n        extensions: [\"wqd\"]\n      },\n      \"application/vnd.wrq-hp3000-labelled\": {\n        source: \"iana\"\n      },\n      \"application/vnd.wt.stf\": {\n        source: \"iana\",\n        extensions: [\"stf\"]\n      },\n      \"application/vnd.wv.csp+wbxml\": {\n        source: \"iana\"\n      },\n      \"application/vnd.wv.csp+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.wv.ssp+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.xacml+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.xara\": {\n        source: \"iana\",\n        extensions: [\"xar\"]\n      },\n      \"application/vnd.xfdl\": {\n        source: \"iana\",\n        extensions: [\"xfdl\"]\n      },\n      \"application/vnd.xfdl.webform\": {\n        source: \"iana\"\n      },\n      \"application/vnd.xmi+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vnd.xmpie.cpkg\": {\n        source: \"iana\"\n      },\n      \"application/vnd.xmpie.dpkg\": {\n        source: \"iana\"\n      },\n      \"application/vnd.xmpie.plan\": {\n        source: \"iana\"\n      },\n      \"application/vnd.xmpie.ppkg\": {\n        source: \"iana\"\n      },\n      \"application/vnd.xmpie.xlim\": {\n        source: \"iana\"\n      },\n      \"application/vnd.yamaha.hv-dic\": {\n        source: \"iana\",\n        extensions: [\"hvd\"]\n      },\n      \"application/vnd.yamaha.hv-script\": {\n        source: \"iana\",\n        extensions: [\"hvs\"]\n      },\n      \"application/vnd.yamaha.hv-voice\": {\n        source: \"iana\",\n        extensions: [\"hvp\"]\n      },\n      \"application/vnd.yamaha.openscoreformat\": {\n        source: \"iana\",\n        extensions: [\"osf\"]\n      },\n      \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"osfpvg\"]\n      },\n      \"application/vnd.yamaha.remote-setup\": {\n        source: \"iana\"\n      },\n      \"application/vnd.yamaha.smaf-audio\": {\n        source: \"iana\",\n        extensions: [\"saf\"]\n      },\n      \"application/vnd.yamaha.smaf-phrase\": {\n        source: \"iana\",\n        extensions: [\"spf\"]\n      },\n      \"application/vnd.yamaha.through-ngn\": {\n        source: \"iana\"\n      },\n      \"application/vnd.yamaha.tunnel-udpencap\": {\n        source: \"iana\"\n      },\n      \"application/vnd.yaoweme\": {\n        source: \"iana\"\n      },\n      \"application/vnd.yellowriver-custom-menu\": {\n        source: \"iana\",\n        extensions: [\"cmp\"]\n      },\n      \"application/vnd.youtube.yt\": {\n        source: \"iana\"\n      },\n      \"application/vnd.zul\": {\n        source: \"iana\",\n        extensions: [\"zir\", \"zirz\"]\n      },\n      \"application/vnd.zzazz.deck+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"zaz\"]\n      },\n      \"application/voicexml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"vxml\"]\n      },\n      \"application/voucher-cms+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/vq-rtcpxr\": {\n        source: \"iana\"\n      },\n      \"application/wasm\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"wasm\"]\n      },\n      \"application/watcherinfo+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"wif\"]\n      },\n      \"application/webpush-options+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/whoispp-query\": {\n        source: \"iana\"\n      },\n      \"application/whoispp-response\": {\n        source: \"iana\"\n      },\n      \"application/widget\": {\n        source: \"iana\",\n        extensions: [\"wgt\"]\n      },\n      \"application/winhlp\": {\n        source: \"apache\",\n        extensions: [\"hlp\"]\n      },\n      \"application/wita\": {\n        source: \"iana\"\n      },\n      \"application/wordperfect5.1\": {\n        source: \"iana\"\n      },\n      \"application/wsdl+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"wsdl\"]\n      },\n      \"application/wspolicy+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"wspolicy\"]\n      },\n      \"application/x-7z-compressed\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"7z\"]\n      },\n      \"application/x-abiword\": {\n        source: \"apache\",\n        extensions: [\"abw\"]\n      },\n      \"application/x-ace-compressed\": {\n        source: \"apache\",\n        extensions: [\"ace\"]\n      },\n      \"application/x-amf\": {\n        source: \"apache\"\n      },\n      \"application/x-apple-diskimage\": {\n        source: \"apache\",\n        extensions: [\"dmg\"]\n      },\n      \"application/x-arj\": {\n        compressible: false,\n        extensions: [\"arj\"]\n      },\n      \"application/x-authorware-bin\": {\n        source: \"apache\",\n        extensions: [\"aab\", \"x32\", \"u32\", \"vox\"]\n      },\n      \"application/x-authorware-map\": {\n        source: \"apache\",\n        extensions: [\"aam\"]\n      },\n      \"application/x-authorware-seg\": {\n        source: \"apache\",\n        extensions: [\"aas\"]\n      },\n      \"application/x-bcpio\": {\n        source: \"apache\",\n        extensions: [\"bcpio\"]\n      },\n      \"application/x-bdoc\": {\n        compressible: false,\n        extensions: [\"bdoc\"]\n      },\n      \"application/x-bittorrent\": {\n        source: \"apache\",\n        extensions: [\"torrent\"]\n      },\n      \"application/x-blorb\": {\n        source: \"apache\",\n        extensions: [\"blb\", \"blorb\"]\n      },\n      \"application/x-bzip\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"bz\"]\n      },\n      \"application/x-bzip2\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"bz2\", \"boz\"]\n      },\n      \"application/x-cbr\": {\n        source: \"apache\",\n        extensions: [\"cbr\", \"cba\", \"cbt\", \"cbz\", \"cb7\"]\n      },\n      \"application/x-cdlink\": {\n        source: \"apache\",\n        extensions: [\"vcd\"]\n      },\n      \"application/x-cfs-compressed\": {\n        source: \"apache\",\n        extensions: [\"cfs\"]\n      },\n      \"application/x-chat\": {\n        source: \"apache\",\n        extensions: [\"chat\"]\n      },\n      \"application/x-chess-pgn\": {\n        source: \"apache\",\n        extensions: [\"pgn\"]\n      },\n      \"application/x-chrome-extension\": {\n        extensions: [\"crx\"]\n      },\n      \"application/x-cocoa\": {\n        source: \"nginx\",\n        extensions: [\"cco\"]\n      },\n      \"application/x-compress\": {\n        source: \"apache\"\n      },\n      \"application/x-conference\": {\n        source: \"apache\",\n        extensions: [\"nsc\"]\n      },\n      \"application/x-cpio\": {\n        source: \"apache\",\n        extensions: [\"cpio\"]\n      },\n      \"application/x-csh\": {\n        source: \"apache\",\n        extensions: [\"csh\"]\n      },\n      \"application/x-deb\": {\n        compressible: false\n      },\n      \"application/x-debian-package\": {\n        source: \"apache\",\n        extensions: [\"deb\", \"udeb\"]\n      },\n      \"application/x-dgc-compressed\": {\n        source: \"apache\",\n        extensions: [\"dgc\"]\n      },\n      \"application/x-director\": {\n        source: \"apache\",\n        extensions: [\"dir\", \"dcr\", \"dxr\", \"cst\", \"cct\", \"cxt\", \"w3d\", \"fgd\", \"swa\"]\n      },\n      \"application/x-doom\": {\n        source: \"apache\",\n        extensions: [\"wad\"]\n      },\n      \"application/x-dtbncx+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"ncx\"]\n      },\n      \"application/x-dtbook+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"dtb\"]\n      },\n      \"application/x-dtbresource+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"res\"]\n      },\n      \"application/x-dvi\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"dvi\"]\n      },\n      \"application/x-envoy\": {\n        source: \"apache\",\n        extensions: [\"evy\"]\n      },\n      \"application/x-eva\": {\n        source: \"apache\",\n        extensions: [\"eva\"]\n      },\n      \"application/x-font-bdf\": {\n        source: \"apache\",\n        extensions: [\"bdf\"]\n      },\n      \"application/x-font-dos\": {\n        source: \"apache\"\n      },\n      \"application/x-font-framemaker\": {\n        source: \"apache\"\n      },\n      \"application/x-font-ghostscript\": {\n        source: \"apache\",\n        extensions: [\"gsf\"]\n      },\n      \"application/x-font-libgrx\": {\n        source: \"apache\"\n      },\n      \"application/x-font-linux-psf\": {\n        source: \"apache\",\n        extensions: [\"psf\"]\n      },\n      \"application/x-font-pcf\": {\n        source: \"apache\",\n        extensions: [\"pcf\"]\n      },\n      \"application/x-font-snf\": {\n        source: \"apache\",\n        extensions: [\"snf\"]\n      },\n      \"application/x-font-speedo\": {\n        source: \"apache\"\n      },\n      \"application/x-font-sunos-news\": {\n        source: \"apache\"\n      },\n      \"application/x-font-type1\": {\n        source: \"apache\",\n        extensions: [\"pfa\", \"pfb\", \"pfm\", \"afm\"]\n      },\n      \"application/x-font-vfont\": {\n        source: \"apache\"\n      },\n      \"application/x-freearc\": {\n        source: \"apache\",\n        extensions: [\"arc\"]\n      },\n      \"application/x-futuresplash\": {\n        source: \"apache\",\n        extensions: [\"spl\"]\n      },\n      \"application/x-gca-compressed\": {\n        source: \"apache\",\n        extensions: [\"gca\"]\n      },\n      \"application/x-glulx\": {\n        source: \"apache\",\n        extensions: [\"ulx\"]\n      },\n      \"application/x-gnumeric\": {\n        source: \"apache\",\n        extensions: [\"gnumeric\"]\n      },\n      \"application/x-gramps-xml\": {\n        source: \"apache\",\n        extensions: [\"gramps\"]\n      },\n      \"application/x-gtar\": {\n        source: \"apache\",\n        extensions: [\"gtar\"]\n      },\n      \"application/x-gzip\": {\n        source: \"apache\"\n      },\n      \"application/x-hdf\": {\n        source: \"apache\",\n        extensions: [\"hdf\"]\n      },\n      \"application/x-httpd-php\": {\n        compressible: true,\n        extensions: [\"php\"]\n      },\n      \"application/x-install-instructions\": {\n        source: \"apache\",\n        extensions: [\"install\"]\n      },\n      \"application/x-iso9660-image\": {\n        source: \"apache\",\n        extensions: [\"iso\"]\n      },\n      \"application/x-iwork-keynote-sffkey\": {\n        extensions: [\"key\"]\n      },\n      \"application/x-iwork-numbers-sffnumbers\": {\n        extensions: [\"numbers\"]\n      },\n      \"application/x-iwork-pages-sffpages\": {\n        extensions: [\"pages\"]\n      },\n      \"application/x-java-archive-diff\": {\n        source: \"nginx\",\n        extensions: [\"jardiff\"]\n      },\n      \"application/x-java-jnlp-file\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"jnlp\"]\n      },\n      \"application/x-javascript\": {\n        compressible: true\n      },\n      \"application/x-keepass2\": {\n        extensions: [\"kdbx\"]\n      },\n      \"application/x-latex\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"latex\"]\n      },\n      \"application/x-lua-bytecode\": {\n        extensions: [\"luac\"]\n      },\n      \"application/x-lzh-compressed\": {\n        source: \"apache\",\n        extensions: [\"lzh\", \"lha\"]\n      },\n      \"application/x-makeself\": {\n        source: \"nginx\",\n        extensions: [\"run\"]\n      },\n      \"application/x-mie\": {\n        source: \"apache\",\n        extensions: [\"mie\"]\n      },\n      \"application/x-mobipocket-ebook\": {\n        source: \"apache\",\n        extensions: [\"prc\", \"mobi\"]\n      },\n      \"application/x-mpegurl\": {\n        compressible: false\n      },\n      \"application/x-ms-application\": {\n        source: \"apache\",\n        extensions: [\"application\"]\n      },\n      \"application/x-ms-shortcut\": {\n        source: \"apache\",\n        extensions: [\"lnk\"]\n      },\n      \"application/x-ms-wmd\": {\n        source: \"apache\",\n        extensions: [\"wmd\"]\n      },\n      \"application/x-ms-wmz\": {\n        source: \"apache\",\n        extensions: [\"wmz\"]\n      },\n      \"application/x-ms-xbap\": {\n        source: \"apache\",\n        extensions: [\"xbap\"]\n      },\n      \"application/x-msaccess\": {\n        source: \"apache\",\n        extensions: [\"mdb\"]\n      },\n      \"application/x-msbinder\": {\n        source: \"apache\",\n        extensions: [\"obd\"]\n      },\n      \"application/x-mscardfile\": {\n        source: \"apache\",\n        extensions: [\"crd\"]\n      },\n      \"application/x-msclip\": {\n        source: \"apache\",\n        extensions: [\"clp\"]\n      },\n      \"application/x-msdos-program\": {\n        extensions: [\"exe\"]\n      },\n      \"application/x-msdownload\": {\n        source: \"apache\",\n        extensions: [\"exe\", \"dll\", \"com\", \"bat\", \"msi\"]\n      },\n      \"application/x-msmediaview\": {\n        source: \"apache\",\n        extensions: [\"mvb\", \"m13\", \"m14\"]\n      },\n      \"application/x-msmetafile\": {\n        source: \"apache\",\n        extensions: [\"wmf\", \"wmz\", \"emf\", \"emz\"]\n      },\n      \"application/x-msmoney\": {\n        source: \"apache\",\n        extensions: [\"mny\"]\n      },\n      \"application/x-mspublisher\": {\n        source: \"apache\",\n        extensions: [\"pub\"]\n      },\n      \"application/x-msschedule\": {\n        source: \"apache\",\n        extensions: [\"scd\"]\n      },\n      \"application/x-msterminal\": {\n        source: \"apache\",\n        extensions: [\"trm\"]\n      },\n      \"application/x-mswrite\": {\n        source: \"apache\",\n        extensions: [\"wri\"]\n      },\n      \"application/x-netcdf\": {\n        source: \"apache\",\n        extensions: [\"nc\", \"cdf\"]\n      },\n      \"application/x-ns-proxy-autoconfig\": {\n        compressible: true,\n        extensions: [\"pac\"]\n      },\n      \"application/x-nzb\": {\n        source: \"apache\",\n        extensions: [\"nzb\"]\n      },\n      \"application/x-perl\": {\n        source: \"nginx\",\n        extensions: [\"pl\", \"pm\"]\n      },\n      \"application/x-pilot\": {\n        source: \"nginx\",\n        extensions: [\"prc\", \"pdb\"]\n      },\n      \"application/x-pkcs12\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"p12\", \"pfx\"]\n      },\n      \"application/x-pkcs7-certificates\": {\n        source: \"apache\",\n        extensions: [\"p7b\", \"spc\"]\n      },\n      \"application/x-pkcs7-certreqresp\": {\n        source: \"apache\",\n        extensions: [\"p7r\"]\n      },\n      \"application/x-pki-message\": {\n        source: \"iana\"\n      },\n      \"application/x-rar-compressed\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"rar\"]\n      },\n      \"application/x-redhat-package-manager\": {\n        source: \"nginx\",\n        extensions: [\"rpm\"]\n      },\n      \"application/x-research-info-systems\": {\n        source: \"apache\",\n        extensions: [\"ris\"]\n      },\n      \"application/x-sea\": {\n        source: \"nginx\",\n        extensions: [\"sea\"]\n      },\n      \"application/x-sh\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"sh\"]\n      },\n      \"application/x-shar\": {\n        source: \"apache\",\n        extensions: [\"shar\"]\n      },\n      \"application/x-shockwave-flash\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"swf\"]\n      },\n      \"application/x-silverlight-app\": {\n        source: \"apache\",\n        extensions: [\"xap\"]\n      },\n      \"application/x-sql\": {\n        source: \"apache\",\n        extensions: [\"sql\"]\n      },\n      \"application/x-stuffit\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"sit\"]\n      },\n      \"application/x-stuffitx\": {\n        source: \"apache\",\n        extensions: [\"sitx\"]\n      },\n      \"application/x-subrip\": {\n        source: \"apache\",\n        extensions: [\"srt\"]\n      },\n      \"application/x-sv4cpio\": {\n        source: \"apache\",\n        extensions: [\"sv4cpio\"]\n      },\n      \"application/x-sv4crc\": {\n        source: \"apache\",\n        extensions: [\"sv4crc\"]\n      },\n      \"application/x-t3vm-image\": {\n        source: \"apache\",\n        extensions: [\"t3\"]\n      },\n      \"application/x-tads\": {\n        source: \"apache\",\n        extensions: [\"gam\"]\n      },\n      \"application/x-tar\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"tar\"]\n      },\n      \"application/x-tcl\": {\n        source: \"apache\",\n        extensions: [\"tcl\", \"tk\"]\n      },\n      \"application/x-tex\": {\n        source: \"apache\",\n        extensions: [\"tex\"]\n      },\n      \"application/x-tex-tfm\": {\n        source: \"apache\",\n        extensions: [\"tfm\"]\n      },\n      \"application/x-texinfo\": {\n        source: \"apache\",\n        extensions: [\"texinfo\", \"texi\"]\n      },\n      \"application/x-tgif\": {\n        source: \"apache\",\n        extensions: [\"obj\"]\n      },\n      \"application/x-ustar\": {\n        source: \"apache\",\n        extensions: [\"ustar\"]\n      },\n      \"application/x-virtualbox-hdd\": {\n        compressible: true,\n        extensions: [\"hdd\"]\n      },\n      \"application/x-virtualbox-ova\": {\n        compressible: true,\n        extensions: [\"ova\"]\n      },\n      \"application/x-virtualbox-ovf\": {\n        compressible: true,\n        extensions: [\"ovf\"]\n      },\n      \"application/x-virtualbox-vbox\": {\n        compressible: true,\n        extensions: [\"vbox\"]\n      },\n      \"application/x-virtualbox-vbox-extpack\": {\n        compressible: false,\n        extensions: [\"vbox-extpack\"]\n      },\n      \"application/x-virtualbox-vdi\": {\n        compressible: true,\n        extensions: [\"vdi\"]\n      },\n      \"application/x-virtualbox-vhd\": {\n        compressible: true,\n        extensions: [\"vhd\"]\n      },\n      \"application/x-virtualbox-vmdk\": {\n        compressible: true,\n        extensions: [\"vmdk\"]\n      },\n      \"application/x-wais-source\": {\n        source: \"apache\",\n        extensions: [\"src\"]\n      },\n      \"application/x-web-app-manifest+json\": {\n        compressible: true,\n        extensions: [\"webapp\"]\n      },\n      \"application/x-www-form-urlencoded\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/x-x509-ca-cert\": {\n        source: \"iana\",\n        extensions: [\"der\", \"crt\", \"pem\"]\n      },\n      \"application/x-x509-ca-ra-cert\": {\n        source: \"iana\"\n      },\n      \"application/x-x509-next-ca-cert\": {\n        source: \"iana\"\n      },\n      \"application/x-xfig\": {\n        source: \"apache\",\n        extensions: [\"fig\"]\n      },\n      \"application/x-xliff+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"xlf\"]\n      },\n      \"application/x-xpinstall\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"xpi\"]\n      },\n      \"application/x-xz\": {\n        source: \"apache\",\n        extensions: [\"xz\"]\n      },\n      \"application/x-zmachine\": {\n        source: \"apache\",\n        extensions: [\"z1\", \"z2\", \"z3\", \"z4\", \"z5\", \"z6\", \"z7\", \"z8\"]\n      },\n      \"application/x400-bp\": {\n        source: \"iana\"\n      },\n      \"application/xacml+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/xaml+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"xaml\"]\n      },\n      \"application/xcap-att+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xav\"]\n      },\n      \"application/xcap-caps+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xca\"]\n      },\n      \"application/xcap-diff+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xdf\"]\n      },\n      \"application/xcap-el+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xel\"]\n      },\n      \"application/xcap-error+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/xcap-ns+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xns\"]\n      },\n      \"application/xcon-conference-info+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/xcon-conference-info-diff+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/xenc+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xenc\"]\n      },\n      \"application/xhtml+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xhtml\", \"xht\"]\n      },\n      \"application/xhtml-voice+xml\": {\n        source: \"apache\",\n        compressible: true\n      },\n      \"application/xliff+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xlf\"]\n      },\n      \"application/xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xml\", \"xsl\", \"xsd\", \"rng\"]\n      },\n      \"application/xml-dtd\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"dtd\"]\n      },\n      \"application/xml-external-parsed-entity\": {\n        source: \"iana\"\n      },\n      \"application/xml-patch+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/xmpp+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/xop+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xop\"]\n      },\n      \"application/xproc+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"xpl\"]\n      },\n      \"application/xslt+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xsl\", \"xslt\"]\n      },\n      \"application/xspf+xml\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"xspf\"]\n      },\n      \"application/xv+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"mxml\", \"xhvml\", \"xvml\", \"xvm\"]\n      },\n      \"application/yang\": {\n        source: \"iana\",\n        extensions: [\"yang\"]\n      },\n      \"application/yang-data+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/yang-data+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/yang-patch+json\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/yang-patch+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"application/yin+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"yin\"]\n      },\n      \"application/zip\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"zip\"]\n      },\n      \"application/zlib\": {\n        source: \"iana\"\n      },\n      \"application/zstd\": {\n        source: \"iana\"\n      },\n      \"audio/1d-interleaved-parityfec\": {\n        source: \"iana\"\n      },\n      \"audio/32kadpcm\": {\n        source: \"iana\"\n      },\n      \"audio/3gpp\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"3gpp\"]\n      },\n      \"audio/3gpp2\": {\n        source: \"iana\"\n      },\n      \"audio/aac\": {\n        source: \"iana\"\n      },\n      \"audio/ac3\": {\n        source: \"iana\"\n      },\n      \"audio/adpcm\": {\n        source: \"apache\",\n        extensions: [\"adp\"]\n      },\n      \"audio/amr\": {\n        source: \"iana\",\n        extensions: [\"amr\"]\n      },\n      \"audio/amr-wb\": {\n        source: \"iana\"\n      },\n      \"audio/amr-wb+\": {\n        source: \"iana\"\n      },\n      \"audio/aptx\": {\n        source: \"iana\"\n      },\n      \"audio/asc\": {\n        source: \"iana\"\n      },\n      \"audio/atrac-advanced-lossless\": {\n        source: \"iana\"\n      },\n      \"audio/atrac-x\": {\n        source: \"iana\"\n      },\n      \"audio/atrac3\": {\n        source: \"iana\"\n      },\n      \"audio/basic\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"au\", \"snd\"]\n      },\n      \"audio/bv16\": {\n        source: \"iana\"\n      },\n      \"audio/bv32\": {\n        source: \"iana\"\n      },\n      \"audio/clearmode\": {\n        source: \"iana\"\n      },\n      \"audio/cn\": {\n        source: \"iana\"\n      },\n      \"audio/dat12\": {\n        source: \"iana\"\n      },\n      \"audio/dls\": {\n        source: \"iana\"\n      },\n      \"audio/dsr-es201108\": {\n        source: \"iana\"\n      },\n      \"audio/dsr-es202050\": {\n        source: \"iana\"\n      },\n      \"audio/dsr-es202211\": {\n        source: \"iana\"\n      },\n      \"audio/dsr-es202212\": {\n        source: \"iana\"\n      },\n      \"audio/dv\": {\n        source: \"iana\"\n      },\n      \"audio/dvi4\": {\n        source: \"iana\"\n      },\n      \"audio/eac3\": {\n        source: \"iana\"\n      },\n      \"audio/encaprtp\": {\n        source: \"iana\"\n      },\n      \"audio/evrc\": {\n        source: \"iana\"\n      },\n      \"audio/evrc-qcp\": {\n        source: \"iana\"\n      },\n      \"audio/evrc0\": {\n        source: \"iana\"\n      },\n      \"audio/evrc1\": {\n        source: \"iana\"\n      },\n      \"audio/evrcb\": {\n        source: \"iana\"\n      },\n      \"audio/evrcb0\": {\n        source: \"iana\"\n      },\n      \"audio/evrcb1\": {\n        source: \"iana\"\n      },\n      \"audio/evrcnw\": {\n        source: \"iana\"\n      },\n      \"audio/evrcnw0\": {\n        source: \"iana\"\n      },\n      \"audio/evrcnw1\": {\n        source: \"iana\"\n      },\n      \"audio/evrcwb\": {\n        source: \"iana\"\n      },\n      \"audio/evrcwb0\": {\n        source: \"iana\"\n      },\n      \"audio/evrcwb1\": {\n        source: \"iana\"\n      },\n      \"audio/evs\": {\n        source: \"iana\"\n      },\n      \"audio/flexfec\": {\n        source: \"iana\"\n      },\n      \"audio/fwdred\": {\n        source: \"iana\"\n      },\n      \"audio/g711-0\": {\n        source: \"iana\"\n      },\n      \"audio/g719\": {\n        source: \"iana\"\n      },\n      \"audio/g722\": {\n        source: \"iana\"\n      },\n      \"audio/g7221\": {\n        source: \"iana\"\n      },\n      \"audio/g723\": {\n        source: \"iana\"\n      },\n      \"audio/g726-16\": {\n        source: \"iana\"\n      },\n      \"audio/g726-24\": {\n        source: \"iana\"\n      },\n      \"audio/g726-32\": {\n        source: \"iana\"\n      },\n      \"audio/g726-40\": {\n        source: \"iana\"\n      },\n      \"audio/g728\": {\n        source: \"iana\"\n      },\n      \"audio/g729\": {\n        source: \"iana\"\n      },\n      \"audio/g7291\": {\n        source: \"iana\"\n      },\n      \"audio/g729d\": {\n        source: \"iana\"\n      },\n      \"audio/g729e\": {\n        source: \"iana\"\n      },\n      \"audio/gsm\": {\n        source: \"iana\"\n      },\n      \"audio/gsm-efr\": {\n        source: \"iana\"\n      },\n      \"audio/gsm-hr-08\": {\n        source: \"iana\"\n      },\n      \"audio/ilbc\": {\n        source: \"iana\"\n      },\n      \"audio/ip-mr_v2.5\": {\n        source: \"iana\"\n      },\n      \"audio/isac\": {\n        source: \"apache\"\n      },\n      \"audio/l16\": {\n        source: \"iana\"\n      },\n      \"audio/l20\": {\n        source: \"iana\"\n      },\n      \"audio/l24\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"audio/l8\": {\n        source: \"iana\"\n      },\n      \"audio/lpc\": {\n        source: \"iana\"\n      },\n      \"audio/melp\": {\n        source: \"iana\"\n      },\n      \"audio/melp1200\": {\n        source: \"iana\"\n      },\n      \"audio/melp2400\": {\n        source: \"iana\"\n      },\n      \"audio/melp600\": {\n        source: \"iana\"\n      },\n      \"audio/mhas\": {\n        source: \"iana\"\n      },\n      \"audio/midi\": {\n        source: \"apache\",\n        extensions: [\"mid\", \"midi\", \"kar\", \"rmi\"]\n      },\n      \"audio/mobile-xmf\": {\n        source: \"iana\",\n        extensions: [\"mxmf\"]\n      },\n      \"audio/mp3\": {\n        compressible: false,\n        extensions: [\"mp3\"]\n      },\n      \"audio/mp4\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"m4a\", \"mp4a\"]\n      },\n      \"audio/mp4a-latm\": {\n        source: \"iana\"\n      },\n      \"audio/mpa\": {\n        source: \"iana\"\n      },\n      \"audio/mpa-robust\": {\n        source: \"iana\"\n      },\n      \"audio/mpeg\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"mpga\", \"mp2\", \"mp2a\", \"mp3\", \"m2a\", \"m3a\"]\n      },\n      \"audio/mpeg4-generic\": {\n        source: \"iana\"\n      },\n      \"audio/musepack\": {\n        source: \"apache\"\n      },\n      \"audio/ogg\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"oga\", \"ogg\", \"spx\", \"opus\"]\n      },\n      \"audio/opus\": {\n        source: \"iana\"\n      },\n      \"audio/parityfec\": {\n        source: \"iana\"\n      },\n      \"audio/pcma\": {\n        source: \"iana\"\n      },\n      \"audio/pcma-wb\": {\n        source: \"iana\"\n      },\n      \"audio/pcmu\": {\n        source: \"iana\"\n      },\n      \"audio/pcmu-wb\": {\n        source: \"iana\"\n      },\n      \"audio/prs.sid\": {\n        source: \"iana\"\n      },\n      \"audio/qcelp\": {\n        source: \"iana\"\n      },\n      \"audio/raptorfec\": {\n        source: \"iana\"\n      },\n      \"audio/red\": {\n        source: \"iana\"\n      },\n      \"audio/rtp-enc-aescm128\": {\n        source: \"iana\"\n      },\n      \"audio/rtp-midi\": {\n        source: \"iana\"\n      },\n      \"audio/rtploopback\": {\n        source: \"iana\"\n      },\n      \"audio/rtx\": {\n        source: \"iana\"\n      },\n      \"audio/s3m\": {\n        source: \"apache\",\n        extensions: [\"s3m\"]\n      },\n      \"audio/scip\": {\n        source: \"iana\"\n      },\n      \"audio/silk\": {\n        source: \"apache\",\n        extensions: [\"sil\"]\n      },\n      \"audio/smv\": {\n        source: \"iana\"\n      },\n      \"audio/smv-qcp\": {\n        source: \"iana\"\n      },\n      \"audio/smv0\": {\n        source: \"iana\"\n      },\n      \"audio/sofa\": {\n        source: \"iana\"\n      },\n      \"audio/sp-midi\": {\n        source: \"iana\"\n      },\n      \"audio/speex\": {\n        source: \"iana\"\n      },\n      \"audio/t140c\": {\n        source: \"iana\"\n      },\n      \"audio/t38\": {\n        source: \"iana\"\n      },\n      \"audio/telephone-event\": {\n        source: \"iana\"\n      },\n      \"audio/tetra_acelp\": {\n        source: \"iana\"\n      },\n      \"audio/tetra_acelp_bb\": {\n        source: \"iana\"\n      },\n      \"audio/tone\": {\n        source: \"iana\"\n      },\n      \"audio/tsvcis\": {\n        source: \"iana\"\n      },\n      \"audio/uemclip\": {\n        source: \"iana\"\n      },\n      \"audio/ulpfec\": {\n        source: \"iana\"\n      },\n      \"audio/usac\": {\n        source: \"iana\"\n      },\n      \"audio/vdvi\": {\n        source: \"iana\"\n      },\n      \"audio/vmr-wb\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.3gpp.iufp\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.4sb\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.audiokoz\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.celp\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.cisco.nse\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.cmles.radio-events\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.cns.anp1\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.cns.inf1\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.dece.audio\": {\n        source: \"iana\",\n        extensions: [\"uva\", \"uvva\"]\n      },\n      \"audio/vnd.digital-winds\": {\n        source: \"iana\",\n        extensions: [\"eol\"]\n      },\n      \"audio/vnd.dlna.adts\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.dolby.heaac.1\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.dolby.heaac.2\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.dolby.mlp\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.dolby.mps\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.dolby.pl2\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.dolby.pl2x\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.dolby.pl2z\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.dolby.pulse.1\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.dra\": {\n        source: \"iana\",\n        extensions: [\"dra\"]\n      },\n      \"audio/vnd.dts\": {\n        source: \"iana\",\n        extensions: [\"dts\"]\n      },\n      \"audio/vnd.dts.hd\": {\n        source: \"iana\",\n        extensions: [\"dtshd\"]\n      },\n      \"audio/vnd.dts.uhd\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.dvb.file\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.everad.plj\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.hns.audio\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.lucent.voice\": {\n        source: \"iana\",\n        extensions: [\"lvp\"]\n      },\n      \"audio/vnd.ms-playready.media.pya\": {\n        source: \"iana\",\n        extensions: [\"pya\"]\n      },\n      \"audio/vnd.nokia.mobile-xmf\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.nortel.vbk\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.nuera.ecelp4800\": {\n        source: \"iana\",\n        extensions: [\"ecelp4800\"]\n      },\n      \"audio/vnd.nuera.ecelp7470\": {\n        source: \"iana\",\n        extensions: [\"ecelp7470\"]\n      },\n      \"audio/vnd.nuera.ecelp9600\": {\n        source: \"iana\",\n        extensions: [\"ecelp9600\"]\n      },\n      \"audio/vnd.octel.sbc\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.presonus.multitrack\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.qcelp\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.rhetorex.32kadpcm\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.rip\": {\n        source: \"iana\",\n        extensions: [\"rip\"]\n      },\n      \"audio/vnd.rn-realaudio\": {\n        compressible: false\n      },\n      \"audio/vnd.sealedmedia.softseal.mpeg\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.vmx.cvsd\": {\n        source: \"iana\"\n      },\n      \"audio/vnd.wave\": {\n        compressible: false\n      },\n      \"audio/vorbis\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"audio/vorbis-config\": {\n        source: \"iana\"\n      },\n      \"audio/wav\": {\n        compressible: false,\n        extensions: [\"wav\"]\n      },\n      \"audio/wave\": {\n        compressible: false,\n        extensions: [\"wav\"]\n      },\n      \"audio/webm\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"weba\"]\n      },\n      \"audio/x-aac\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"aac\"]\n      },\n      \"audio/x-aiff\": {\n        source: \"apache\",\n        extensions: [\"aif\", \"aiff\", \"aifc\"]\n      },\n      \"audio/x-caf\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"caf\"]\n      },\n      \"audio/x-flac\": {\n        source: \"apache\",\n        extensions: [\"flac\"]\n      },\n      \"audio/x-m4a\": {\n        source: \"nginx\",\n        extensions: [\"m4a\"]\n      },\n      \"audio/x-matroska\": {\n        source: \"apache\",\n        extensions: [\"mka\"]\n      },\n      \"audio/x-mpegurl\": {\n        source: \"apache\",\n        extensions: [\"m3u\"]\n      },\n      \"audio/x-ms-wax\": {\n        source: \"apache\",\n        extensions: [\"wax\"]\n      },\n      \"audio/x-ms-wma\": {\n        source: \"apache\",\n        extensions: [\"wma\"]\n      },\n      \"audio/x-pn-realaudio\": {\n        source: \"apache\",\n        extensions: [\"ram\", \"ra\"]\n      },\n      \"audio/x-pn-realaudio-plugin\": {\n        source: \"apache\",\n        extensions: [\"rmp\"]\n      },\n      \"audio/x-realaudio\": {\n        source: \"nginx\",\n        extensions: [\"ra\"]\n      },\n      \"audio/x-tta\": {\n        source: \"apache\"\n      },\n      \"audio/x-wav\": {\n        source: \"apache\",\n        extensions: [\"wav\"]\n      },\n      \"audio/xm\": {\n        source: \"apache\",\n        extensions: [\"xm\"]\n      },\n      \"chemical/x-cdx\": {\n        source: \"apache\",\n        extensions: [\"cdx\"]\n      },\n      \"chemical/x-cif\": {\n        source: \"apache\",\n        extensions: [\"cif\"]\n      },\n      \"chemical/x-cmdf\": {\n        source: \"apache\",\n        extensions: [\"cmdf\"]\n      },\n      \"chemical/x-cml\": {\n        source: \"apache\",\n        extensions: [\"cml\"]\n      },\n      \"chemical/x-csml\": {\n        source: \"apache\",\n        extensions: [\"csml\"]\n      },\n      \"chemical/x-pdb\": {\n        source: \"apache\"\n      },\n      \"chemical/x-xyz\": {\n        source: \"apache\",\n        extensions: [\"xyz\"]\n      },\n      \"font/collection\": {\n        source: \"iana\",\n        extensions: [\"ttc\"]\n      },\n      \"font/otf\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"otf\"]\n      },\n      \"font/sfnt\": {\n        source: \"iana\"\n      },\n      \"font/ttf\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"ttf\"]\n      },\n      \"font/woff\": {\n        source: \"iana\",\n        extensions: [\"woff\"]\n      },\n      \"font/woff2\": {\n        source: \"iana\",\n        extensions: [\"woff2\"]\n      },\n      \"image/aces\": {\n        source: \"iana\",\n        extensions: [\"exr\"]\n      },\n      \"image/apng\": {\n        compressible: false,\n        extensions: [\"apng\"]\n      },\n      \"image/avci\": {\n        source: \"iana\",\n        extensions: [\"avci\"]\n      },\n      \"image/avcs\": {\n        source: \"iana\",\n        extensions: [\"avcs\"]\n      },\n      \"image/avif\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"avif\"]\n      },\n      \"image/bmp\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"bmp\"]\n      },\n      \"image/cgm\": {\n        source: \"iana\",\n        extensions: [\"cgm\"]\n      },\n      \"image/dicom-rle\": {\n        source: \"iana\",\n        extensions: [\"drle\"]\n      },\n      \"image/emf\": {\n        source: \"iana\",\n        extensions: [\"emf\"]\n      },\n      \"image/fits\": {\n        source: \"iana\",\n        extensions: [\"fits\"]\n      },\n      \"image/g3fax\": {\n        source: \"iana\",\n        extensions: [\"g3\"]\n      },\n      \"image/gif\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"gif\"]\n      },\n      \"image/heic\": {\n        source: \"iana\",\n        extensions: [\"heic\"]\n      },\n      \"image/heic-sequence\": {\n        source: \"iana\",\n        extensions: [\"heics\"]\n      },\n      \"image/heif\": {\n        source: \"iana\",\n        extensions: [\"heif\"]\n      },\n      \"image/heif-sequence\": {\n        source: \"iana\",\n        extensions: [\"heifs\"]\n      },\n      \"image/hej2k\": {\n        source: \"iana\",\n        extensions: [\"hej2\"]\n      },\n      \"image/hsj2\": {\n        source: \"iana\",\n        extensions: [\"hsj2\"]\n      },\n      \"image/ief\": {\n        source: \"iana\",\n        extensions: [\"ief\"]\n      },\n      \"image/jls\": {\n        source: \"iana\",\n        extensions: [\"jls\"]\n      },\n      \"image/jp2\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"jp2\", \"jpg2\"]\n      },\n      \"image/jpeg\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"jpeg\", \"jpg\", \"jpe\"]\n      },\n      \"image/jph\": {\n        source: \"iana\",\n        extensions: [\"jph\"]\n      },\n      \"image/jphc\": {\n        source: \"iana\",\n        extensions: [\"jhc\"]\n      },\n      \"image/jpm\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"jpm\"]\n      },\n      \"image/jpx\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"jpx\", \"jpf\"]\n      },\n      \"image/jxr\": {\n        source: \"iana\",\n        extensions: [\"jxr\"]\n      },\n      \"image/jxra\": {\n        source: \"iana\",\n        extensions: [\"jxra\"]\n      },\n      \"image/jxrs\": {\n        source: \"iana\",\n        extensions: [\"jxrs\"]\n      },\n      \"image/jxs\": {\n        source: \"iana\",\n        extensions: [\"jxs\"]\n      },\n      \"image/jxsc\": {\n        source: \"iana\",\n        extensions: [\"jxsc\"]\n      },\n      \"image/jxsi\": {\n        source: \"iana\",\n        extensions: [\"jxsi\"]\n      },\n      \"image/jxss\": {\n        source: \"iana\",\n        extensions: [\"jxss\"]\n      },\n      \"image/ktx\": {\n        source: \"iana\",\n        extensions: [\"ktx\"]\n      },\n      \"image/ktx2\": {\n        source: \"iana\",\n        extensions: [\"ktx2\"]\n      },\n      \"image/naplps\": {\n        source: \"iana\"\n      },\n      \"image/pjpeg\": {\n        compressible: false\n      },\n      \"image/png\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"png\"]\n      },\n      \"image/prs.btif\": {\n        source: \"iana\",\n        extensions: [\"btif\"]\n      },\n      \"image/prs.pti\": {\n        source: \"iana\",\n        extensions: [\"pti\"]\n      },\n      \"image/pwg-raster\": {\n        source: \"iana\"\n      },\n      \"image/sgi\": {\n        source: \"apache\",\n        extensions: [\"sgi\"]\n      },\n      \"image/svg+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"svg\", \"svgz\"]\n      },\n      \"image/t38\": {\n        source: \"iana\",\n        extensions: [\"t38\"]\n      },\n      \"image/tiff\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"tif\", \"tiff\"]\n      },\n      \"image/tiff-fx\": {\n        source: \"iana\",\n        extensions: [\"tfx\"]\n      },\n      \"image/vnd.adobe.photoshop\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"psd\"]\n      },\n      \"image/vnd.airzip.accelerator.azv\": {\n        source: \"iana\",\n        extensions: [\"azv\"]\n      },\n      \"image/vnd.cns.inf2\": {\n        source: \"iana\"\n      },\n      \"image/vnd.dece.graphic\": {\n        source: \"iana\",\n        extensions: [\"uvi\", \"uvvi\", \"uvg\", \"uvvg\"]\n      },\n      \"image/vnd.djvu\": {\n        source: \"iana\",\n        extensions: [\"djvu\", \"djv\"]\n      },\n      \"image/vnd.dvb.subtitle\": {\n        source: \"iana\",\n        extensions: [\"sub\"]\n      },\n      \"image/vnd.dwg\": {\n        source: \"iana\",\n        extensions: [\"dwg\"]\n      },\n      \"image/vnd.dxf\": {\n        source: \"iana\",\n        extensions: [\"dxf\"]\n      },\n      \"image/vnd.fastbidsheet\": {\n        source: \"iana\",\n        extensions: [\"fbs\"]\n      },\n      \"image/vnd.fpx\": {\n        source: \"iana\",\n        extensions: [\"fpx\"]\n      },\n      \"image/vnd.fst\": {\n        source: \"iana\",\n        extensions: [\"fst\"]\n      },\n      \"image/vnd.fujixerox.edmics-mmr\": {\n        source: \"iana\",\n        extensions: [\"mmr\"]\n      },\n      \"image/vnd.fujixerox.edmics-rlc\": {\n        source: \"iana\",\n        extensions: [\"rlc\"]\n      },\n      \"image/vnd.globalgraphics.pgb\": {\n        source: \"iana\"\n      },\n      \"image/vnd.microsoft.icon\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"ico\"]\n      },\n      \"image/vnd.mix\": {\n        source: \"iana\"\n      },\n      \"image/vnd.mozilla.apng\": {\n        source: \"iana\"\n      },\n      \"image/vnd.ms-dds\": {\n        compressible: true,\n        extensions: [\"dds\"]\n      },\n      \"image/vnd.ms-modi\": {\n        source: \"iana\",\n        extensions: [\"mdi\"]\n      },\n      \"image/vnd.ms-photo\": {\n        source: \"apache\",\n        extensions: [\"wdp\"]\n      },\n      \"image/vnd.net-fpx\": {\n        source: \"iana\",\n        extensions: [\"npx\"]\n      },\n      \"image/vnd.pco.b16\": {\n        source: \"iana\",\n        extensions: [\"b16\"]\n      },\n      \"image/vnd.radiance\": {\n        source: \"iana\"\n      },\n      \"image/vnd.sealed.png\": {\n        source: \"iana\"\n      },\n      \"image/vnd.sealedmedia.softseal.gif\": {\n        source: \"iana\"\n      },\n      \"image/vnd.sealedmedia.softseal.jpg\": {\n        source: \"iana\"\n      },\n      \"image/vnd.svf\": {\n        source: \"iana\"\n      },\n      \"image/vnd.tencent.tap\": {\n        source: \"iana\",\n        extensions: [\"tap\"]\n      },\n      \"image/vnd.valve.source.texture\": {\n        source: \"iana\",\n        extensions: [\"vtf\"]\n      },\n      \"image/vnd.wap.wbmp\": {\n        source: \"iana\",\n        extensions: [\"wbmp\"]\n      },\n      \"image/vnd.xiff\": {\n        source: \"iana\",\n        extensions: [\"xif\"]\n      },\n      \"image/vnd.zbrush.pcx\": {\n        source: \"iana\",\n        extensions: [\"pcx\"]\n      },\n      \"image/webp\": {\n        source: \"apache\",\n        extensions: [\"webp\"]\n      },\n      \"image/wmf\": {\n        source: \"iana\",\n        extensions: [\"wmf\"]\n      },\n      \"image/x-3ds\": {\n        source: \"apache\",\n        extensions: [\"3ds\"]\n      },\n      \"image/x-cmu-raster\": {\n        source: \"apache\",\n        extensions: [\"ras\"]\n      },\n      \"image/x-cmx\": {\n        source: \"apache\",\n        extensions: [\"cmx\"]\n      },\n      \"image/x-freehand\": {\n        source: \"apache\",\n        extensions: [\"fh\", \"fhc\", \"fh4\", \"fh5\", \"fh7\"]\n      },\n      \"image/x-icon\": {\n        source: \"apache\",\n        compressible: true,\n        extensions: [\"ico\"]\n      },\n      \"image/x-jng\": {\n        source: \"nginx\",\n        extensions: [\"jng\"]\n      },\n      \"image/x-mrsid-image\": {\n        source: \"apache\",\n        extensions: [\"sid\"]\n      },\n      \"image/x-ms-bmp\": {\n        source: \"nginx\",\n        compressible: true,\n        extensions: [\"bmp\"]\n      },\n      \"image/x-pcx\": {\n        source: \"apache\",\n        extensions: [\"pcx\"]\n      },\n      \"image/x-pict\": {\n        source: \"apache\",\n        extensions: [\"pic\", \"pct\"]\n      },\n      \"image/x-portable-anymap\": {\n        source: \"apache\",\n        extensions: [\"pnm\"]\n      },\n      \"image/x-portable-bitmap\": {\n        source: \"apache\",\n        extensions: [\"pbm\"]\n      },\n      \"image/x-portable-graymap\": {\n        source: \"apache\",\n        extensions: [\"pgm\"]\n      },\n      \"image/x-portable-pixmap\": {\n        source: \"apache\",\n        extensions: [\"ppm\"]\n      },\n      \"image/x-rgb\": {\n        source: \"apache\",\n        extensions: [\"rgb\"]\n      },\n      \"image/x-tga\": {\n        source: \"apache\",\n        extensions: [\"tga\"]\n      },\n      \"image/x-xbitmap\": {\n        source: \"apache\",\n        extensions: [\"xbm\"]\n      },\n      \"image/x-xcf\": {\n        compressible: false\n      },\n      \"image/x-xpixmap\": {\n        source: \"apache\",\n        extensions: [\"xpm\"]\n      },\n      \"image/x-xwindowdump\": {\n        source: \"apache\",\n        extensions: [\"xwd\"]\n      },\n      \"message/cpim\": {\n        source: \"iana\"\n      },\n      \"message/delivery-status\": {\n        source: \"iana\"\n      },\n      \"message/disposition-notification\": {\n        source: \"iana\",\n        extensions: [\n          \"disposition-notification\"\n        ]\n      },\n      \"message/external-body\": {\n        source: \"iana\"\n      },\n      \"message/feedback-report\": {\n        source: \"iana\"\n      },\n      \"message/global\": {\n        source: \"iana\",\n        extensions: [\"u8msg\"]\n      },\n      \"message/global-delivery-status\": {\n        source: \"iana\",\n        extensions: [\"u8dsn\"]\n      },\n      \"message/global-disposition-notification\": {\n        source: \"iana\",\n        extensions: [\"u8mdn\"]\n      },\n      \"message/global-headers\": {\n        source: \"iana\",\n        extensions: [\"u8hdr\"]\n      },\n      \"message/http\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"message/imdn+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"message/news\": {\n        source: \"iana\"\n      },\n      \"message/partial\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"message/rfc822\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"eml\", \"mime\"]\n      },\n      \"message/s-http\": {\n        source: \"iana\"\n      },\n      \"message/sip\": {\n        source: \"iana\"\n      },\n      \"message/sipfrag\": {\n        source: \"iana\"\n      },\n      \"message/tracking-status\": {\n        source: \"iana\"\n      },\n      \"message/vnd.si.simp\": {\n        source: \"iana\"\n      },\n      \"message/vnd.wfa.wsc\": {\n        source: \"iana\",\n        extensions: [\"wsc\"]\n      },\n      \"model/3mf\": {\n        source: \"iana\",\n        extensions: [\"3mf\"]\n      },\n      \"model/e57\": {\n        source: \"iana\"\n      },\n      \"model/gltf+json\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"gltf\"]\n      },\n      \"model/gltf-binary\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"glb\"]\n      },\n      \"model/iges\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"igs\", \"iges\"]\n      },\n      \"model/mesh\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"msh\", \"mesh\", \"silo\"]\n      },\n      \"model/mtl\": {\n        source: \"iana\",\n        extensions: [\"mtl\"]\n      },\n      \"model/obj\": {\n        source: \"iana\",\n        extensions: [\"obj\"]\n      },\n      \"model/step\": {\n        source: \"iana\"\n      },\n      \"model/step+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"stpx\"]\n      },\n      \"model/step+zip\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"stpz\"]\n      },\n      \"model/step-xml+zip\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"stpxz\"]\n      },\n      \"model/stl\": {\n        source: \"iana\",\n        extensions: [\"stl\"]\n      },\n      \"model/vnd.collada+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"dae\"]\n      },\n      \"model/vnd.dwf\": {\n        source: \"iana\",\n        extensions: [\"dwf\"]\n      },\n      \"model/vnd.flatland.3dml\": {\n        source: \"iana\"\n      },\n      \"model/vnd.gdl\": {\n        source: \"iana\",\n        extensions: [\"gdl\"]\n      },\n      \"model/vnd.gs-gdl\": {\n        source: \"apache\"\n      },\n      \"model/vnd.gs.gdl\": {\n        source: \"iana\"\n      },\n      \"model/vnd.gtw\": {\n        source: \"iana\",\n        extensions: [\"gtw\"]\n      },\n      \"model/vnd.moml+xml\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"model/vnd.mts\": {\n        source: \"iana\",\n        extensions: [\"mts\"]\n      },\n      \"model/vnd.opengex\": {\n        source: \"iana\",\n        extensions: [\"ogex\"]\n      },\n      \"model/vnd.parasolid.transmit.binary\": {\n        source: \"iana\",\n        extensions: [\"x_b\"]\n      },\n      \"model/vnd.parasolid.transmit.text\": {\n        source: \"iana\",\n        extensions: [\"x_t\"]\n      },\n      \"model/vnd.pytha.pyox\": {\n        source: \"iana\"\n      },\n      \"model/vnd.rosette.annotated-data-model\": {\n        source: \"iana\"\n      },\n      \"model/vnd.sap.vds\": {\n        source: \"iana\",\n        extensions: [\"vds\"]\n      },\n      \"model/vnd.usdz+zip\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"usdz\"]\n      },\n      \"model/vnd.valve.source.compiled-map\": {\n        source: \"iana\",\n        extensions: [\"bsp\"]\n      },\n      \"model/vnd.vtu\": {\n        source: \"iana\",\n        extensions: [\"vtu\"]\n      },\n      \"model/vrml\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"wrl\", \"vrml\"]\n      },\n      \"model/x3d+binary\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"x3db\", \"x3dbz\"]\n      },\n      \"model/x3d+fastinfoset\": {\n        source: \"iana\",\n        extensions: [\"x3db\"]\n      },\n      \"model/x3d+vrml\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"x3dv\", \"x3dvz\"]\n      },\n      \"model/x3d+xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"x3d\", \"x3dz\"]\n      },\n      \"model/x3d-vrml\": {\n        source: \"iana\",\n        extensions: [\"x3dv\"]\n      },\n      \"multipart/alternative\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"multipart/appledouble\": {\n        source: \"iana\"\n      },\n      \"multipart/byteranges\": {\n        source: \"iana\"\n      },\n      \"multipart/digest\": {\n        source: \"iana\"\n      },\n      \"multipart/encrypted\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"multipart/form-data\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"multipart/header-set\": {\n        source: \"iana\"\n      },\n      \"multipart/mixed\": {\n        source: \"iana\"\n      },\n      \"multipart/multilingual\": {\n        source: \"iana\"\n      },\n      \"multipart/parallel\": {\n        source: \"iana\"\n      },\n      \"multipart/related\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"multipart/report\": {\n        source: \"iana\"\n      },\n      \"multipart/signed\": {\n        source: \"iana\",\n        compressible: false\n      },\n      \"multipart/vnd.bint.med-plus\": {\n        source: \"iana\"\n      },\n      \"multipart/voice-message\": {\n        source: \"iana\"\n      },\n      \"multipart/x-mixed-replace\": {\n        source: \"iana\"\n      },\n      \"text/1d-interleaved-parityfec\": {\n        source: \"iana\"\n      },\n      \"text/cache-manifest\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"appcache\", \"manifest\"]\n      },\n      \"text/calendar\": {\n        source: \"iana\",\n        extensions: [\"ics\", \"ifb\"]\n      },\n      \"text/calender\": {\n        compressible: true\n      },\n      \"text/cmd\": {\n        compressible: true\n      },\n      \"text/coffeescript\": {\n        extensions: [\"coffee\", \"litcoffee\"]\n      },\n      \"text/cql\": {\n        source: \"iana\"\n      },\n      \"text/cql-expression\": {\n        source: \"iana\"\n      },\n      \"text/cql-identifier\": {\n        source: \"iana\"\n      },\n      \"text/css\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true,\n        extensions: [\"css\"]\n      },\n      \"text/csv\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"csv\"]\n      },\n      \"text/csv-schema\": {\n        source: \"iana\"\n      },\n      \"text/directory\": {\n        source: \"iana\"\n      },\n      \"text/dns\": {\n        source: \"iana\"\n      },\n      \"text/ecmascript\": {\n        source: \"iana\"\n      },\n      \"text/encaprtp\": {\n        source: \"iana\"\n      },\n      \"text/enriched\": {\n        source: \"iana\"\n      },\n      \"text/fhirpath\": {\n        source: \"iana\"\n      },\n      \"text/flexfec\": {\n        source: \"iana\"\n      },\n      \"text/fwdred\": {\n        source: \"iana\"\n      },\n      \"text/gff3\": {\n        source: \"iana\"\n      },\n      \"text/grammar-ref-list\": {\n        source: \"iana\"\n      },\n      \"text/html\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"html\", \"htm\", \"shtml\"]\n      },\n      \"text/jade\": {\n        extensions: [\"jade\"]\n      },\n      \"text/javascript\": {\n        source: \"iana\",\n        compressible: true\n      },\n      \"text/jcr-cnd\": {\n        source: \"iana\"\n      },\n      \"text/jsx\": {\n        compressible: true,\n        extensions: [\"jsx\"]\n      },\n      \"text/less\": {\n        compressible: true,\n        extensions: [\"less\"]\n      },\n      \"text/markdown\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"markdown\", \"md\"]\n      },\n      \"text/mathml\": {\n        source: \"nginx\",\n        extensions: [\"mml\"]\n      },\n      \"text/mdx\": {\n        compressible: true,\n        extensions: [\"mdx\"]\n      },\n      \"text/mizar\": {\n        source: \"iana\"\n      },\n      \"text/n3\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true,\n        extensions: [\"n3\"]\n      },\n      \"text/parameters\": {\n        source: \"iana\",\n        charset: \"UTF-8\"\n      },\n      \"text/parityfec\": {\n        source: \"iana\"\n      },\n      \"text/plain\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\", \"in\", \"ini\"]\n      },\n      \"text/provenance-notation\": {\n        source: \"iana\",\n        charset: \"UTF-8\"\n      },\n      \"text/prs.fallenstein.rst\": {\n        source: \"iana\"\n      },\n      \"text/prs.lines.tag\": {\n        source: \"iana\",\n        extensions: [\"dsc\"]\n      },\n      \"text/prs.prop.logic\": {\n        source: \"iana\"\n      },\n      \"text/raptorfec\": {\n        source: \"iana\"\n      },\n      \"text/red\": {\n        source: \"iana\"\n      },\n      \"text/rfc822-headers\": {\n        source: \"iana\"\n      },\n      \"text/richtext\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"rtx\"]\n      },\n      \"text/rtf\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"rtf\"]\n      },\n      \"text/rtp-enc-aescm128\": {\n        source: \"iana\"\n      },\n      \"text/rtploopback\": {\n        source: \"iana\"\n      },\n      \"text/rtx\": {\n        source: \"iana\"\n      },\n      \"text/sgml\": {\n        source: \"iana\",\n        extensions: [\"sgml\", \"sgm\"]\n      },\n      \"text/shaclc\": {\n        source: \"iana\"\n      },\n      \"text/shex\": {\n        source: \"iana\",\n        extensions: [\"shex\"]\n      },\n      \"text/slim\": {\n        extensions: [\"slim\", \"slm\"]\n      },\n      \"text/spdx\": {\n        source: \"iana\",\n        extensions: [\"spdx\"]\n      },\n      \"text/strings\": {\n        source: \"iana\"\n      },\n      \"text/stylus\": {\n        extensions: [\"stylus\", \"styl\"]\n      },\n      \"text/t140\": {\n        source: \"iana\"\n      },\n      \"text/tab-separated-values\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"tsv\"]\n      },\n      \"text/troff\": {\n        source: \"iana\",\n        extensions: [\"t\", \"tr\", \"roff\", \"man\", \"me\", \"ms\"]\n      },\n      \"text/turtle\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        extensions: [\"ttl\"]\n      },\n      \"text/ulpfec\": {\n        source: \"iana\"\n      },\n      \"text/uri-list\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"uri\", \"uris\", \"urls\"]\n      },\n      \"text/vcard\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"vcard\"]\n      },\n      \"text/vnd.a\": {\n        source: \"iana\"\n      },\n      \"text/vnd.abc\": {\n        source: \"iana\"\n      },\n      \"text/vnd.ascii-art\": {\n        source: \"iana\"\n      },\n      \"text/vnd.curl\": {\n        source: \"iana\",\n        extensions: [\"curl\"]\n      },\n      \"text/vnd.curl.dcurl\": {\n        source: \"apache\",\n        extensions: [\"dcurl\"]\n      },\n      \"text/vnd.curl.mcurl\": {\n        source: \"apache\",\n        extensions: [\"mcurl\"]\n      },\n      \"text/vnd.curl.scurl\": {\n        source: \"apache\",\n        extensions: [\"scurl\"]\n      },\n      \"text/vnd.debian.copyright\": {\n        source: \"iana\",\n        charset: \"UTF-8\"\n      },\n      \"text/vnd.dmclientscript\": {\n        source: \"iana\"\n      },\n      \"text/vnd.dvb.subtitle\": {\n        source: \"iana\",\n        extensions: [\"sub\"]\n      },\n      \"text/vnd.esmertec.theme-descriptor\": {\n        source: \"iana\",\n        charset: \"UTF-8\"\n      },\n      \"text/vnd.familysearch.gedcom\": {\n        source: \"iana\",\n        extensions: [\"ged\"]\n      },\n      \"text/vnd.ficlab.flt\": {\n        source: \"iana\"\n      },\n      \"text/vnd.fly\": {\n        source: \"iana\",\n        extensions: [\"fly\"]\n      },\n      \"text/vnd.fmi.flexstor\": {\n        source: \"iana\",\n        extensions: [\"flx\"]\n      },\n      \"text/vnd.gml\": {\n        source: \"iana\"\n      },\n      \"text/vnd.graphviz\": {\n        source: \"iana\",\n        extensions: [\"gv\"]\n      },\n      \"text/vnd.hans\": {\n        source: \"iana\"\n      },\n      \"text/vnd.hgl\": {\n        source: \"iana\"\n      },\n      \"text/vnd.in3d.3dml\": {\n        source: \"iana\",\n        extensions: [\"3dml\"]\n      },\n      \"text/vnd.in3d.spot\": {\n        source: \"iana\",\n        extensions: [\"spot\"]\n      },\n      \"text/vnd.iptc.newsml\": {\n        source: \"iana\"\n      },\n      \"text/vnd.iptc.nitf\": {\n        source: \"iana\"\n      },\n      \"text/vnd.latex-z\": {\n        source: \"iana\"\n      },\n      \"text/vnd.motorola.reflex\": {\n        source: \"iana\"\n      },\n      \"text/vnd.ms-mediapackage\": {\n        source: \"iana\"\n      },\n      \"text/vnd.net2phone.commcenter.command\": {\n        source: \"iana\"\n      },\n      \"text/vnd.radisys.msml-basic-layout\": {\n        source: \"iana\"\n      },\n      \"text/vnd.senx.warpscript\": {\n        source: \"iana\"\n      },\n      \"text/vnd.si.uricatalogue\": {\n        source: \"iana\"\n      },\n      \"text/vnd.sosi\": {\n        source: \"iana\"\n      },\n      \"text/vnd.sun.j2me.app-descriptor\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        extensions: [\"jad\"]\n      },\n      \"text/vnd.trolltech.linguist\": {\n        source: \"iana\",\n        charset: \"UTF-8\"\n      },\n      \"text/vnd.wap.si\": {\n        source: \"iana\"\n      },\n      \"text/vnd.wap.sl\": {\n        source: \"iana\"\n      },\n      \"text/vnd.wap.wml\": {\n        source: \"iana\",\n        extensions: [\"wml\"]\n      },\n      \"text/vnd.wap.wmlscript\": {\n        source: \"iana\",\n        extensions: [\"wmls\"]\n      },\n      \"text/vtt\": {\n        source: \"iana\",\n        charset: \"UTF-8\",\n        compressible: true,\n        extensions: [\"vtt\"]\n      },\n      \"text/x-asm\": {\n        source: \"apache\",\n        extensions: [\"s\", \"asm\"]\n      },\n      \"text/x-c\": {\n        source: \"apache\",\n        extensions: [\"c\", \"cc\", \"cxx\", \"cpp\", \"h\", \"hh\", \"dic\"]\n      },\n      \"text/x-component\": {\n        source: \"nginx\",\n        extensions: [\"htc\"]\n      },\n      \"text/x-fortran\": {\n        source: \"apache\",\n        extensions: [\"f\", \"for\", \"f77\", \"f90\"]\n      },\n      \"text/x-gwt-rpc\": {\n        compressible: true\n      },\n      \"text/x-handlebars-template\": {\n        extensions: [\"hbs\"]\n      },\n      \"text/x-java-source\": {\n        source: \"apache\",\n        extensions: [\"java\"]\n      },\n      \"text/x-jquery-tmpl\": {\n        compressible: true\n      },\n      \"text/x-lua\": {\n        extensions: [\"lua\"]\n      },\n      \"text/x-markdown\": {\n        compressible: true,\n        extensions: [\"mkd\"]\n      },\n      \"text/x-nfo\": {\n        source: \"apache\",\n        extensions: [\"nfo\"]\n      },\n      \"text/x-opml\": {\n        source: \"apache\",\n        extensions: [\"opml\"]\n      },\n      \"text/x-org\": {\n        compressible: true,\n        extensions: [\"org\"]\n      },\n      \"text/x-pascal\": {\n        source: \"apache\",\n        extensions: [\"p\", \"pas\"]\n      },\n      \"text/x-processing\": {\n        compressible: true,\n        extensions: [\"pde\"]\n      },\n      \"text/x-sass\": {\n        extensions: [\"sass\"]\n      },\n      \"text/x-scss\": {\n        extensions: [\"scss\"]\n      },\n      \"text/x-setext\": {\n        source: \"apache\",\n        extensions: [\"etx\"]\n      },\n      \"text/x-sfv\": {\n        source: \"apache\",\n        extensions: [\"sfv\"]\n      },\n      \"text/x-suse-ymp\": {\n        compressible: true,\n        extensions: [\"ymp\"]\n      },\n      \"text/x-uuencode\": {\n        source: \"apache\",\n        extensions: [\"uu\"]\n      },\n      \"text/x-vcalendar\": {\n        source: \"apache\",\n        extensions: [\"vcs\"]\n      },\n      \"text/x-vcard\": {\n        source: \"apache\",\n        extensions: [\"vcf\"]\n      },\n      \"text/xml\": {\n        source: \"iana\",\n        compressible: true,\n        extensions: [\"xml\"]\n      },\n      \"text/xml-external-parsed-entity\": {\n        source: \"iana\"\n      },\n      \"text/yaml\": {\n        compressible: true,\n        extensions: [\"yaml\", \"yml\"]\n      },\n      \"video/1d-interleaved-parityfec\": {\n        source: \"iana\"\n      },\n      \"video/3gpp\": {\n        source: \"iana\",\n        extensions: [\"3gp\", \"3gpp\"]\n      },\n      \"video/3gpp-tt\": {\n        source: \"iana\"\n      },\n      \"video/3gpp2\": {\n        source: \"iana\",\n        extensions: [\"3g2\"]\n      },\n      \"video/av1\": {\n        source: \"iana\"\n      },\n      \"video/bmpeg\": {\n        source: \"iana\"\n      },\n      \"video/bt656\": {\n        source: \"iana\"\n      },\n      \"video/celb\": {\n        source: \"iana\"\n      },\n      \"video/dv\": {\n        source: \"iana\"\n      },\n      \"video/encaprtp\": {\n        source: \"iana\"\n      },\n      \"video/ffv1\": {\n        source: \"iana\"\n      },\n      \"video/flexfec\": {\n        source: \"iana\"\n      },\n      \"video/h261\": {\n        source: \"iana\",\n        extensions: [\"h261\"]\n      },\n      \"video/h263\": {\n        source: \"iana\",\n        extensions: [\"h263\"]\n      },\n      \"video/h263-1998\": {\n        source: \"iana\"\n      },\n      \"video/h263-2000\": {\n        source: \"iana\"\n      },\n      \"video/h264\": {\n        source: \"iana\",\n        extensions: [\"h264\"]\n      },\n      \"video/h264-rcdo\": {\n        source: \"iana\"\n      },\n      \"video/h264-svc\": {\n        source: \"iana\"\n      },\n      \"video/h265\": {\n        source: \"iana\"\n      },\n      \"video/iso.segment\": {\n        source: \"iana\",\n        extensions: [\"m4s\"]\n      },\n      \"video/jpeg\": {\n        source: \"iana\",\n        extensions: [\"jpgv\"]\n      },\n      \"video/jpeg2000\": {\n        source: \"iana\"\n      },\n      \"video/jpm\": {\n        source: \"apache\",\n        extensions: [\"jpm\", \"jpgm\"]\n      },\n      \"video/jxsv\": {\n        source: \"iana\"\n      },\n      \"video/mj2\": {\n        source: \"iana\",\n        extensions: [\"mj2\", \"mjp2\"]\n      },\n      \"video/mp1s\": {\n        source: \"iana\"\n      },\n      \"video/mp2p\": {\n        source: \"iana\"\n      },\n      \"video/mp2t\": {\n        source: \"iana\",\n        extensions: [\"ts\"]\n      },\n      \"video/mp4\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"mp4\", \"mp4v\", \"mpg4\"]\n      },\n      \"video/mp4v-es\": {\n        source: \"iana\"\n      },\n      \"video/mpeg\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"mpeg\", \"mpg\", \"mpe\", \"m1v\", \"m2v\"]\n      },\n      \"video/mpeg4-generic\": {\n        source: \"iana\"\n      },\n      \"video/mpv\": {\n        source: \"iana\"\n      },\n      \"video/nv\": {\n        source: \"iana\"\n      },\n      \"video/ogg\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"ogv\"]\n      },\n      \"video/parityfec\": {\n        source: \"iana\"\n      },\n      \"video/pointer\": {\n        source: \"iana\"\n      },\n      \"video/quicktime\": {\n        source: \"iana\",\n        compressible: false,\n        extensions: [\"qt\", \"mov\"]\n      },\n      \"video/raptorfec\": {\n        source: \"iana\"\n      },\n      \"video/raw\": {\n        source: \"iana\"\n      },\n      \"video/rtp-enc-aescm128\": {\n        source: \"iana\"\n      },\n      \"video/rtploopback\": {\n        source: \"iana\"\n      },\n      \"video/rtx\": {\n        source: \"iana\"\n      },\n      \"video/scip\": {\n        source: \"iana\"\n      },\n      \"video/smpte291\": {\n        source: \"iana\"\n      },\n      \"video/smpte292m\": {\n        source: \"iana\"\n      },\n      \"video/ulpfec\": {\n        source: \"iana\"\n      },\n      \"video/vc1\": {\n        source: \"iana\"\n      },\n      \"video/vc2\": {\n        source: \"iana\"\n      },\n      \"video/vnd.cctv\": {\n        source: \"iana\"\n      },\n      \"video/vnd.dece.hd\": {\n        source: \"iana\",\n        extensions: [\"uvh\", \"uvvh\"]\n      },\n      \"video/vnd.dece.mobile\": {\n        source: \"iana\",\n        extensions: [\"uvm\", \"uvvm\"]\n      },\n      \"video/vnd.dece.mp4\": {\n        source: \"iana\"\n      },\n      \"video/vnd.dece.pd\": {\n        source: \"iana\",\n        extensions: [\"uvp\", \"uvvp\"]\n      },\n      \"video/vnd.dece.sd\": {\n        source: \"iana\",\n        extensions: [\"uvs\", \"uvvs\"]\n      },\n      \"video/vnd.dece.video\": {\n        source: \"iana\",\n        extensions: [\"uvv\", \"uvvv\"]\n      },\n      \"video/vnd.directv.mpeg\": {\n        source: \"iana\"\n      },\n      \"video/vnd.directv.mpeg-tts\": {\n        source: \"iana\"\n      },\n      \"video/vnd.dlna.mpeg-tts\": {\n        source: \"iana\"\n      },\n      \"video/vnd.dvb.file\": {\n        source: \"iana\",\n        extensions: [\"dvb\"]\n      },\n      \"video/vnd.fvt\": {\n        source: \"iana\",\n        extensions: [\"fvt\"]\n      },\n      \"video/vnd.hns.video\": {\n        source: \"iana\"\n      },\n      \"video/vnd.iptvforum.1dparityfec-1010\": {\n        source: \"iana\"\n      },\n      \"video/vnd.iptvforum.1dparityfec-2005\": {\n        source: \"iana\"\n      },\n      \"video/vnd.iptvforum.2dparityfec-1010\": {\n        source: \"iana\"\n      },\n      \"video/vnd.iptvforum.2dparityfec-2005\": {\n        source: \"iana\"\n      },\n      \"video/vnd.iptvforum.ttsavc\": {\n        source: \"iana\"\n      },\n      \"video/vnd.iptvforum.ttsmpeg2\": {\n        source: \"iana\"\n      },\n      \"video/vnd.motorola.video\": {\n        source: \"iana\"\n      },\n      \"video/vnd.motorola.videop\": {\n        source: \"iana\"\n      },\n      \"video/vnd.mpegurl\": {\n        source: \"iana\",\n        extensions: [\"mxu\", \"m4u\"]\n      },\n      \"video/vnd.ms-playready.media.pyv\": {\n        source: \"iana\",\n        extensions: [\"pyv\"]\n      },\n      \"video/vnd.nokia.interleaved-multimedia\": {\n        source: \"iana\"\n      },\n      \"video/vnd.nokia.mp4vr\": {\n        source: \"iana\"\n      },\n      \"video/vnd.nokia.videovoip\": {\n        source: \"iana\"\n      },\n      \"video/vnd.objectvideo\": {\n        source: \"iana\"\n      },\n      \"video/vnd.radgamettools.bink\": {\n        source: \"iana\"\n      },\n      \"video/vnd.radgamettools.smacker\": {\n        source: \"iana\"\n      },\n      \"video/vnd.sealed.mpeg1\": {\n        source: \"iana\"\n      },\n      \"video/vnd.sealed.mpeg4\": {\n        source: \"iana\"\n      },\n      \"video/vnd.sealed.swf\": {\n        source: \"iana\"\n      },\n      \"video/vnd.sealedmedia.softseal.mov\": {\n        source: \"iana\"\n      },\n      \"video/vnd.uvvu.mp4\": {\n        source: \"iana\",\n        extensions: [\"uvu\", \"uvvu\"]\n      },\n      \"video/vnd.vivo\": {\n        source: \"iana\",\n        extensions: [\"viv\"]\n      },\n      \"video/vnd.youtube.yt\": {\n        source: \"iana\"\n      },\n      \"video/vp8\": {\n        source: \"iana\"\n      },\n      \"video/vp9\": {\n        source: \"iana\"\n      },\n      \"video/webm\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"webm\"]\n      },\n      \"video/x-f4v\": {\n        source: \"apache\",\n        extensions: [\"f4v\"]\n      },\n      \"video/x-fli\": {\n        source: \"apache\",\n        extensions: [\"fli\"]\n      },\n      \"video/x-flv\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"flv\"]\n      },\n      \"video/x-m4v\": {\n        source: \"apache\",\n        extensions: [\"m4v\"]\n      },\n      \"video/x-matroska\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"mkv\", \"mk3d\", \"mks\"]\n      },\n      \"video/x-mng\": {\n        source: \"apache\",\n        extensions: [\"mng\"]\n      },\n      \"video/x-ms-asf\": {\n        source: \"apache\",\n        extensions: [\"asf\", \"asx\"]\n      },\n      \"video/x-ms-vob\": {\n        source: \"apache\",\n        extensions: [\"vob\"]\n      },\n      \"video/x-ms-wm\": {\n        source: \"apache\",\n        extensions: [\"wm\"]\n      },\n      \"video/x-ms-wmv\": {\n        source: \"apache\",\n        compressible: false,\n        extensions: [\"wmv\"]\n      },\n      \"video/x-ms-wmx\": {\n        source: \"apache\",\n        extensions: [\"wmx\"]\n      },\n      \"video/x-ms-wvx\": {\n        source: \"apache\",\n        extensions: [\"wvx\"]\n      },\n      \"video/x-msvideo\": {\n        source: \"apache\",\n        extensions: [\"avi\"]\n      },\n      \"video/x-sgi-movie\": {\n        source: \"apache\",\n        extensions: [\"movie\"]\n      },\n      \"video/x-smv\": {\n        source: \"apache\",\n        extensions: [\"smv\"]\n      },\n      \"x-conference/x-cooltalk\": {\n        source: \"apache\",\n        extensions: [\"ice\"]\n      },\n      \"x-shader/x-fragment\": {\n        compressible: true\n      },\n      \"x-shader/x-vertex\": {\n        compressible: true\n      }\n    };\n  }\n});\n\n// node_modules/mime-db/index.js\nvar require_mime_db = __commonJS({\n  \"node_modules/mime-db/index.js\"(exports2, module2) {\n    module2.exports = require_db();\n  }\n});\n\n// node_modules/mime-types/index.js\nvar require_mime_types = __commonJS({\n  \"node_modules/mime-types/index.js\"(exports2) {\n    \"use strict\";\n    var db = require_mime_db();\n    var extname = require(\"path\").extname;\n    var EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/;\n    var TEXT_TYPE_REGEXP = /^text\\//i;\n    exports2.charset = charset;\n    exports2.charsets = { lookup: charset };\n    exports2.contentType = contentType;\n    exports2.extension = extension;\n    exports2.extensions = /* @__PURE__ */ Object.create(null);\n    exports2.lookup = lookup;\n    exports2.types = /* @__PURE__ */ Object.create(null);\n    populateMaps(exports2.extensions, exports2.types);\n    function charset(type) {\n      if (!type || typeof type !== \"string\") {\n        return false;\n      }\n      var match = EXTRACT_TYPE_REGEXP.exec(type);\n      var mime = match && db[match[1].toLowerCase()];\n      if (mime && mime.charset) {\n        return mime.charset;\n      }\n      if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n        return \"UTF-8\";\n      }\n      return false;\n    }\n    function contentType(str) {\n      if (!str || typeof str !== \"string\") {\n        return false;\n      }\n      var mime = str.indexOf(\"/\") === -1 ? exports2.lookup(str) : str;\n      if (!mime) {\n        return false;\n      }\n      if (mime.indexOf(\"charset\") === -1) {\n        var charset2 = exports2.charset(mime);\n        if (charset2) mime += \"; charset=\" + charset2.toLowerCase();\n      }\n      return mime;\n    }\n    function extension(type) {\n      if (!type || typeof type !== \"string\") {\n        return false;\n      }\n      var match = EXTRACT_TYPE_REGEXP.exec(type);\n      var exts = match && exports2.extensions[match[1].toLowerCase()];\n      if (!exts || !exts.length) {\n        return false;\n      }\n      return exts[0];\n    }\n    function lookup(path) {\n      if (!path || typeof path !== \"string\") {\n        return false;\n      }\n      var extension2 = extname(\"x.\" + path).toLowerCase().substr(1);\n      if (!extension2) {\n        return false;\n      }\n      return exports2.types[extension2] || false;\n    }\n    function populateMaps(extensions, types) {\n      var preference = [\"nginx\", \"apache\", void 0, \"iana\"];\n      Object.keys(db).forEach(function forEachMimeType(type) {\n        var mime = db[type];\n        var exts = mime.extensions;\n        if (!exts || !exts.length) {\n          return;\n        }\n        extensions[type] = exts;\n        for (var i = 0; i < exts.length; i++) {\n          var extension2 = exts[i];\n          if (types[extension2]) {\n            var from = preference.indexOf(db[types[extension2]].source);\n            var to = preference.indexOf(mime.source);\n            if (types[extension2] !== \"application/octet-stream\" && (from > to || from === to && types[extension2].substr(0, 12) === \"application/\")) {\n              continue;\n            }\n          }\n          types[extension2] = type;\n        }\n      });\n    }\n  }\n});\n\n// node_modules/asynckit/lib/defer.js\nvar require_defer = __commonJS({\n  \"node_modules/asynckit/lib/defer.js\"(exports2, module2) {\n    module2.exports = defer;\n    function defer(fn) {\n      var nextTick = typeof setImmediate == \"function\" ? setImmediate : typeof process == \"object\" && typeof process.nextTick == \"function\" ? process.nextTick : null;\n      if (nextTick) {\n        nextTick(fn);\n      } else {\n        setTimeout(fn, 0);\n      }\n    }\n  }\n});\n\n// node_modules/asynckit/lib/async.js\nvar require_async = __commonJS({\n  \"node_modules/asynckit/lib/async.js\"(exports2, module2) {\n    var defer = require_defer();\n    module2.exports = async;\n    function async(callback) {\n      var isAsync = false;\n      defer(function() {\n        isAsync = true;\n      });\n      return function async_callback(err, result) {\n        if (isAsync) {\n          callback(err, result);\n        } else {\n          defer(function nextTick_callback() {\n            callback(err, result);\n          });\n        }\n      };\n    }\n  }\n});\n\n// node_modules/asynckit/lib/abort.js\nvar require_abort = __commonJS({\n  \"node_modules/asynckit/lib/abort.js\"(exports2, module2) {\n    module2.exports = abort;\n    function abort(state) {\n      Object.keys(state.jobs).forEach(clean.bind(state));\n      state.jobs = {};\n    }\n    function clean(key) {\n      if (typeof this.jobs[key] == \"function\") {\n        this.jobs[key]();\n      }\n    }\n  }\n});\n\n// node_modules/asynckit/lib/iterate.js\nvar require_iterate = __commonJS({\n  \"node_modules/asynckit/lib/iterate.js\"(exports2, module2) {\n    var async = require_async();\n    var abort = require_abort();\n    module2.exports = iterate;\n    function iterate(list, iterator2, state, callback) {\n      var key = state[\"keyedList\"] ? state[\"keyedList\"][state.index] : state.index;\n      state.jobs[key] = runJob(iterator2, key, list[key], function(error, output) {\n        if (!(key in state.jobs)) {\n          return;\n        }\n        delete state.jobs[key];\n        if (error) {\n          abort(state);\n        } else {\n          state.results[key] = output;\n        }\n        callback(error, state.results);\n      });\n    }\n    function runJob(iterator2, key, item, callback) {\n      var aborter;\n      if (iterator2.length == 2) {\n        aborter = iterator2(item, async(callback));\n      } else {\n        aborter = iterator2(item, key, async(callback));\n      }\n      return aborter;\n    }\n  }\n});\n\n// node_modules/asynckit/lib/state.js\nvar require_state = __commonJS({\n  \"node_modules/asynckit/lib/state.js\"(exports2, module2) {\n    module2.exports = state;\n    function state(list, sortMethod) {\n      var isNamedList = !Array.isArray(list), initState = {\n        index: 0,\n        keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n        jobs: {},\n        results: isNamedList ? {} : [],\n        size: isNamedList ? Object.keys(list).length : list.length\n      };\n      if (sortMethod) {\n        initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) {\n          return sortMethod(list[a], list[b]);\n        });\n      }\n      return initState;\n    }\n  }\n});\n\n// node_modules/asynckit/lib/terminator.js\nvar require_terminator = __commonJS({\n  \"node_modules/asynckit/lib/terminator.js\"(exports2, module2) {\n    var abort = require_abort();\n    var async = require_async();\n    module2.exports = terminator;\n    function terminator(callback) {\n      if (!Object.keys(this.jobs).length) {\n        return;\n      }\n      this.index = this.size;\n      abort(this);\n      async(callback)(null, this.results);\n    }\n  }\n});\n\n// node_modules/asynckit/parallel.js\nvar require_parallel = __commonJS({\n  \"node_modules/asynckit/parallel.js\"(exports2, module2) {\n    var iterate = require_iterate();\n    var initState = require_state();\n    var terminator = require_terminator();\n    module2.exports = parallel;\n    function parallel(list, iterator2, callback) {\n      var state = initState(list);\n      while (state.index < (state[\"keyedList\"] || list).length) {\n        iterate(list, iterator2, state, function(error, result) {\n          if (error) {\n            callback(error, result);\n            return;\n          }\n          if (Object.keys(state.jobs).length === 0) {\n            callback(null, state.results);\n            return;\n          }\n        });\n        state.index++;\n      }\n      return terminator.bind(state, callback);\n    }\n  }\n});\n\n// node_modules/asynckit/serialOrdered.js\nvar require_serialOrdered = __commonJS({\n  \"node_modules/asynckit/serialOrdered.js\"(exports2, module2) {\n    var iterate = require_iterate();\n    var initState = require_state();\n    var terminator = require_terminator();\n    module2.exports = serialOrdered;\n    module2.exports.ascending = ascending;\n    module2.exports.descending = descending;\n    function serialOrdered(list, iterator2, sortMethod, callback) {\n      var state = initState(list, sortMethod);\n      iterate(list, iterator2, state, function iteratorHandler(error, result) {\n        if (error) {\n          callback(error, result);\n          return;\n        }\n        state.index++;\n        if (state.index < (state[\"keyedList\"] || list).length) {\n          iterate(list, iterator2, state, iteratorHandler);\n          return;\n        }\n        callback(null, state.results);\n      });\n      return terminator.bind(state, callback);\n    }\n    function ascending(a, b) {\n      return a < b ? -1 : a > b ? 1 : 0;\n    }\n    function descending(a, b) {\n      return -1 * ascending(a, b);\n    }\n  }\n});\n\n// node_modules/asynckit/serial.js\nvar require_serial = __commonJS({\n  \"node_modules/asynckit/serial.js\"(exports2, module2) {\n    var serialOrdered = require_serialOrdered();\n    module2.exports = serial;\n    function serial(list, iterator2, callback) {\n      return serialOrdered(list, iterator2, null, callback);\n    }\n  }\n});\n\n// node_modules/asynckit/index.js\nvar require_asynckit = __commonJS({\n  \"node_modules/asynckit/index.js\"(exports2, module2) {\n    module2.exports = {\n      parallel: require_parallel(),\n      serial: require_serial(),\n      serialOrdered: require_serialOrdered()\n    };\n  }\n});\n\n// node_modules/es-object-atoms/index.js\nvar require_es_object_atoms = __commonJS({\n  \"node_modules/es-object-atoms/index.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = Object;\n  }\n});\n\n// node_modules/es-errors/index.js\nvar require_es_errors = __commonJS({\n  \"node_modules/es-errors/index.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = Error;\n  }\n});\n\n// node_modules/es-errors/eval.js\nvar require_eval = __commonJS({\n  \"node_modules/es-errors/eval.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = EvalError;\n  }\n});\n\n// node_modules/es-errors/range.js\nvar require_range = __commonJS({\n  \"node_modules/es-errors/range.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = RangeError;\n  }\n});\n\n// node_modules/es-errors/ref.js\nvar require_ref = __commonJS({\n  \"node_modules/es-errors/ref.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = ReferenceError;\n  }\n});\n\n// node_modules/es-errors/syntax.js\nvar require_syntax = __commonJS({\n  \"node_modules/es-errors/syntax.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = SyntaxError;\n  }\n});\n\n// node_modules/es-errors/type.js\nvar require_type = __commonJS({\n  \"node_modules/es-errors/type.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = TypeError;\n  }\n});\n\n// node_modules/es-errors/uri.js\nvar require_uri = __commonJS({\n  \"node_modules/es-errors/uri.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = URIError;\n  }\n});\n\n// node_modules/math-intrinsics/abs.js\nvar require_abs = __commonJS({\n  \"node_modules/math-intrinsics/abs.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = Math.abs;\n  }\n});\n\n// node_modules/math-intrinsics/floor.js\nvar require_floor = __commonJS({\n  \"node_modules/math-intrinsics/floor.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = Math.floor;\n  }\n});\n\n// node_modules/math-intrinsics/max.js\nvar require_max = __commonJS({\n  \"node_modules/math-intrinsics/max.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = Math.max;\n  }\n});\n\n// node_modules/math-intrinsics/min.js\nvar require_min = __commonJS({\n  \"node_modules/math-intrinsics/min.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = Math.min;\n  }\n});\n\n// node_modules/math-intrinsics/pow.js\nvar require_pow = __commonJS({\n  \"node_modules/math-intrinsics/pow.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = Math.pow;\n  }\n});\n\n// node_modules/math-intrinsics/round.js\nvar require_round = __commonJS({\n  \"node_modules/math-intrinsics/round.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = Math.round;\n  }\n});\n\n// node_modules/math-intrinsics/isNaN.js\nvar require_isNaN = __commonJS({\n  \"node_modules/math-intrinsics/isNaN.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = Number.isNaN || function isNaN2(a) {\n      return a !== a;\n    };\n  }\n});\n\n// node_modules/math-intrinsics/sign.js\nvar require_sign = __commonJS({\n  \"node_modules/math-intrinsics/sign.js\"(exports2, module2) {\n    \"use strict\";\n    var $isNaN = require_isNaN();\n    module2.exports = function sign(number) {\n      if ($isNaN(number) || number === 0) {\n        return number;\n      }\n      return number < 0 ? -1 : 1;\n    };\n  }\n});\n\n// node_modules/gopd/gOPD.js\nvar require_gOPD = __commonJS({\n  \"node_modules/gopd/gOPD.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = Object.getOwnPropertyDescriptor;\n  }\n});\n\n// node_modules/gopd/index.js\nvar require_gopd = __commonJS({\n  \"node_modules/gopd/index.js\"(exports2, module2) {\n    \"use strict\";\n    var $gOPD = require_gOPD();\n    if ($gOPD) {\n      try {\n        $gOPD([], \"length\");\n      } catch (e) {\n        $gOPD = null;\n      }\n    }\n    module2.exports = $gOPD;\n  }\n});\n\n// node_modules/es-define-property/index.js\nvar require_es_define_property = __commonJS({\n  \"node_modules/es-define-property/index.js\"(exports2, module2) {\n    \"use strict\";\n    var $defineProperty = Object.defineProperty || false;\n    if ($defineProperty) {\n      try {\n        $defineProperty({}, \"a\", { value: 1 });\n      } catch (e) {\n        $defineProperty = false;\n      }\n    }\n    module2.exports = $defineProperty;\n  }\n});\n\n// node_modules/has-symbols/shams.js\nvar require_shams = __commonJS({\n  \"node_modules/has-symbols/shams.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = function hasSymbols() {\n      if (typeof Symbol !== \"function\" || typeof Object.getOwnPropertySymbols !== \"function\") {\n        return false;\n      }\n      if (typeof Symbol.iterator === \"symbol\") {\n        return true;\n      }\n      var obj = {};\n      var sym = Symbol(\"test\");\n      var symObj = Object(sym);\n      if (typeof sym === \"string\") {\n        return false;\n      }\n      if (Object.prototype.toString.call(sym) !== \"[object Symbol]\") {\n        return false;\n      }\n      if (Object.prototype.toString.call(symObj) !== \"[object Symbol]\") {\n        return false;\n      }\n      var symVal = 42;\n      obj[sym] = symVal;\n      for (var _ in obj) {\n        return false;\n      }\n      if (typeof Object.keys === \"function\" && Object.keys(obj).length !== 0) {\n        return false;\n      }\n      if (typeof Object.getOwnPropertyNames === \"function\" && Object.getOwnPropertyNames(obj).length !== 0) {\n        return false;\n      }\n      var syms = Object.getOwnPropertySymbols(obj);\n      if (syms.length !== 1 || syms[0] !== sym) {\n        return false;\n      }\n      if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) {\n        return false;\n      }\n      if (typeof Object.getOwnPropertyDescriptor === \"function\") {\n        var descriptor = (\n          /** @type {PropertyDescriptor} */\n          Object.getOwnPropertyDescriptor(obj, sym)\n        );\n        if (descriptor.value !== symVal || descriptor.enumerable !== true) {\n          return false;\n        }\n      }\n      return true;\n    };\n  }\n});\n\n// node_modules/has-symbols/index.js\nvar require_has_symbols = __commonJS({\n  \"node_modules/has-symbols/index.js\"(exports2, module2) {\n    \"use strict\";\n    var origSymbol = typeof Symbol !== \"undefined\" && Symbol;\n    var hasSymbolSham = require_shams();\n    module2.exports = function hasNativeSymbols() {\n      if (typeof origSymbol !== \"function\") {\n        return false;\n      }\n      if (typeof Symbol !== \"function\") {\n        return false;\n      }\n      if (typeof origSymbol(\"foo\") !== \"symbol\") {\n        return false;\n      }\n      if (typeof Symbol(\"bar\") !== \"symbol\") {\n        return false;\n      }\n      return hasSymbolSham();\n    };\n  }\n});\n\n// node_modules/get-proto/Reflect.getPrototypeOf.js\nvar require_Reflect_getPrototypeOf = __commonJS({\n  \"node_modules/get-proto/Reflect.getPrototypeOf.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = typeof Reflect !== \"undefined\" && Reflect.getPrototypeOf || null;\n  }\n});\n\n// node_modules/get-proto/Object.getPrototypeOf.js\nvar require_Object_getPrototypeOf = __commonJS({\n  \"node_modules/get-proto/Object.getPrototypeOf.js\"(exports2, module2) {\n    \"use strict\";\n    var $Object = require_es_object_atoms();\n    module2.exports = $Object.getPrototypeOf || null;\n  }\n});\n\n// node_modules/function-bind/implementation.js\nvar require_implementation = __commonJS({\n  \"node_modules/function-bind/implementation.js\"(exports2, module2) {\n    \"use strict\";\n    var ERROR_MESSAGE = \"Function.prototype.bind called on incompatible \";\n    var toStr = Object.prototype.toString;\n    var max = Math.max;\n    var funcType = \"[object Function]\";\n    var concatty = function concatty2(a, b) {\n      var arr = [];\n      for (var i = 0; i < a.length; i += 1) {\n        arr[i] = a[i];\n      }\n      for (var j = 0; j < b.length; j += 1) {\n        arr[j + a.length] = b[j];\n      }\n      return arr;\n    };\n    var slicy = function slicy2(arrLike, offset) {\n      var arr = [];\n      for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n        arr[j] = arrLike[i];\n      }\n      return arr;\n    };\n    var joiny = function(arr, joiner) {\n      var str = \"\";\n      for (var i = 0; i < arr.length; i += 1) {\n        str += arr[i];\n        if (i + 1 < arr.length) {\n          str += joiner;\n        }\n      }\n      return str;\n    };\n    module2.exports = function bind2(that) {\n      var target = this;\n      if (typeof target !== \"function\" || toStr.apply(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n      }\n      var args = slicy(arguments, 1);\n      var bound;\n      var binder = function() {\n        if (this instanceof bound) {\n          var result = target.apply(\n            this,\n            concatty(args, arguments)\n          );\n          if (Object(result) === result) {\n            return result;\n          }\n          return this;\n        }\n        return target.apply(\n          that,\n          concatty(args, arguments)\n        );\n      };\n      var boundLength = max(0, target.length - args.length);\n      var boundArgs = [];\n      for (var i = 0; i < boundLength; i++) {\n        boundArgs[i] = \"$\" + i;\n      }\n      bound = Function(\"binder\", \"return function (\" + joiny(boundArgs, \",\") + \"){ return binder.apply(this,arguments); }\")(binder);\n      if (target.prototype) {\n        var Empty = function Empty2() {\n        };\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n      }\n      return bound;\n    };\n  }\n});\n\n// node_modules/function-bind/index.js\nvar require_function_bind = __commonJS({\n  \"node_modules/function-bind/index.js\"(exports2, module2) {\n    \"use strict\";\n    var implementation = require_implementation();\n    module2.exports = Function.prototype.bind || implementation;\n  }\n});\n\n// node_modules/call-bind-apply-helpers/functionCall.js\nvar require_functionCall = __commonJS({\n  \"node_modules/call-bind-apply-helpers/functionCall.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = Function.prototype.call;\n  }\n});\n\n// node_modules/call-bind-apply-helpers/functionApply.js\nvar require_functionApply = __commonJS({\n  \"node_modules/call-bind-apply-helpers/functionApply.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = Function.prototype.apply;\n  }\n});\n\n// node_modules/call-bind-apply-helpers/reflectApply.js\nvar require_reflectApply = __commonJS({\n  \"node_modules/call-bind-apply-helpers/reflectApply.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = typeof Reflect !== \"undefined\" && Reflect && Reflect.apply;\n  }\n});\n\n// node_modules/call-bind-apply-helpers/actualApply.js\nvar require_actualApply = __commonJS({\n  \"node_modules/call-bind-apply-helpers/actualApply.js\"(exports2, module2) {\n    \"use strict\";\n    var bind2 = require_function_bind();\n    var $apply = require_functionApply();\n    var $call = require_functionCall();\n    var $reflectApply = require_reflectApply();\n    module2.exports = $reflectApply || bind2.call($call, $apply);\n  }\n});\n\n// node_modules/call-bind-apply-helpers/index.js\nvar require_call_bind_apply_helpers = __commonJS({\n  \"node_modules/call-bind-apply-helpers/index.js\"(exports2, module2) {\n    \"use strict\";\n    var bind2 = require_function_bind();\n    var $TypeError = require_type();\n    var $call = require_functionCall();\n    var $actualApply = require_actualApply();\n    module2.exports = function callBindBasic(args) {\n      if (args.length < 1 || typeof args[0] !== \"function\") {\n        throw new $TypeError(\"a function is required\");\n      }\n      return $actualApply(bind2, $call, args);\n    };\n  }\n});\n\n// node_modules/dunder-proto/get.js\nvar require_get = __commonJS({\n  \"node_modules/dunder-proto/get.js\"(exports2, module2) {\n    \"use strict\";\n    var callBind = require_call_bind_apply_helpers();\n    var gOPD = require_gopd();\n    var hasProtoAccessor;\n    try {\n      hasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */\n      [].__proto__ === Array.prototype;\n    } catch (e) {\n      if (!e || typeof e !== \"object\" || !(\"code\" in e) || e.code !== \"ERR_PROTO_ACCESS\") {\n        throw e;\n      }\n    }\n    var desc = !!hasProtoAccessor && gOPD && gOPD(\n      Object.prototype,\n      /** @type {keyof typeof Object.prototype} */\n      \"__proto__\"\n    );\n    var $Object = Object;\n    var $getPrototypeOf = $Object.getPrototypeOf;\n    module2.exports = desc && typeof desc.get === \"function\" ? callBind([desc.get]) : typeof $getPrototypeOf === \"function\" ? (\n      /** @type {import('./get')} */\n      function getDunder(value) {\n        return $getPrototypeOf(value == null ? value : $Object(value));\n      }\n    ) : false;\n  }\n});\n\n// node_modules/get-proto/index.js\nvar require_get_proto = __commonJS({\n  \"node_modules/get-proto/index.js\"(exports2, module2) {\n    \"use strict\";\n    var reflectGetProto = require_Reflect_getPrototypeOf();\n    var originalGetProto = require_Object_getPrototypeOf();\n    var getDunderProto = require_get();\n    module2.exports = reflectGetProto ? function getProto(O) {\n      return reflectGetProto(O);\n    } : originalGetProto ? function getProto(O) {\n      if (!O || typeof O !== \"object\" && typeof O !== \"function\") {\n        throw new TypeError(\"getProto: not an object\");\n      }\n      return originalGetProto(O);\n    } : getDunderProto ? function getProto(O) {\n      return getDunderProto(O);\n    } : null;\n  }\n});\n\n// node_modules/hasown/index.js\nvar require_hasown = __commonJS({\n  \"node_modules/hasown/index.js\"(exports2, module2) {\n    \"use strict\";\n    var call = Function.prototype.call;\n    var $hasOwn = Object.prototype.hasOwnProperty;\n    var bind2 = require_function_bind();\n    module2.exports = bind2.call(call, $hasOwn);\n  }\n});\n\n// node_modules/get-intrinsic/index.js\nvar require_get_intrinsic = __commonJS({\n  \"node_modules/get-intrinsic/index.js\"(exports2, module2) {\n    \"use strict\";\n    var undefined2;\n    var $Object = require_es_object_atoms();\n    var $Error = require_es_errors();\n    var $EvalError = require_eval();\n    var $RangeError = require_range();\n    var $ReferenceError = require_ref();\n    var $SyntaxError = require_syntax();\n    var $TypeError = require_type();\n    var $URIError = require_uri();\n    var abs = require_abs();\n    var floor = require_floor();\n    var max = require_max();\n    var min = require_min();\n    var pow = require_pow();\n    var round = require_round();\n    var sign = require_sign();\n    var $Function = Function;\n    var getEvalledConstructor = function(expressionSyntax) {\n      try {\n        return $Function('\"use strict\"; return (' + expressionSyntax + \").constructor;\")();\n      } catch (e) {\n      }\n    };\n    var $gOPD = require_gopd();\n    var $defineProperty = require_es_define_property();\n    var throwTypeError = function() {\n      throw new $TypeError();\n    };\n    var ThrowTypeError = $gOPD ? (function() {\n      try {\n        arguments.callee;\n        return throwTypeError;\n      } catch (calleeThrows) {\n        try {\n          return $gOPD(arguments, \"callee\").get;\n        } catch (gOPDthrows) {\n          return throwTypeError;\n        }\n      }\n    })() : throwTypeError;\n    var hasSymbols = require_has_symbols()();\n    var getProto = require_get_proto();\n    var $ObjectGPO = require_Object_getPrototypeOf();\n    var $ReflectGPO = require_Reflect_getPrototypeOf();\n    var $apply = require_functionApply();\n    var $call = require_functionCall();\n    var needsEval = {};\n    var TypedArray = typeof Uint8Array === \"undefined\" || !getProto ? undefined2 : getProto(Uint8Array);\n    var INTRINSICS = {\n      __proto__: null,\n      \"%AggregateError%\": typeof AggregateError === \"undefined\" ? undefined2 : AggregateError,\n      \"%Array%\": Array,\n      \"%ArrayBuffer%\": typeof ArrayBuffer === \"undefined\" ? undefined2 : ArrayBuffer,\n      \"%ArrayIteratorPrototype%\": hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined2,\n      \"%AsyncFromSyncIteratorPrototype%\": undefined2,\n      \"%AsyncFunction%\": needsEval,\n      \"%AsyncGenerator%\": needsEval,\n      \"%AsyncGeneratorFunction%\": needsEval,\n      \"%AsyncIteratorPrototype%\": needsEval,\n      \"%Atomics%\": typeof Atomics === \"undefined\" ? undefined2 : Atomics,\n      \"%BigInt%\": typeof BigInt === \"undefined\" ? undefined2 : BigInt,\n      \"%BigInt64Array%\": typeof BigInt64Array === \"undefined\" ? undefined2 : BigInt64Array,\n      \"%BigUint64Array%\": typeof BigUint64Array === \"undefined\" ? undefined2 : BigUint64Array,\n      \"%Boolean%\": Boolean,\n      \"%DataView%\": typeof DataView === \"undefined\" ? undefined2 : DataView,\n      \"%Date%\": Date,\n      \"%decodeURI%\": decodeURI,\n      \"%decodeURIComponent%\": decodeURIComponent,\n      \"%encodeURI%\": encodeURI,\n      \"%encodeURIComponent%\": encodeURIComponent,\n      \"%Error%\": $Error,\n      \"%eval%\": eval,\n      // eslint-disable-line no-eval\n      \"%EvalError%\": $EvalError,\n      \"%Float16Array%\": typeof Float16Array === \"undefined\" ? undefined2 : Float16Array,\n      \"%Float32Array%\": typeof Float32Array === \"undefined\" ? undefined2 : Float32Array,\n      \"%Float64Array%\": typeof Float64Array === \"undefined\" ? undefined2 : Float64Array,\n      \"%FinalizationRegistry%\": typeof FinalizationRegistry === \"undefined\" ? undefined2 : FinalizationRegistry,\n      \"%Function%\": $Function,\n      \"%GeneratorFunction%\": needsEval,\n      \"%Int8Array%\": typeof Int8Array === \"undefined\" ? undefined2 : Int8Array,\n      \"%Int16Array%\": typeof Int16Array === \"undefined\" ? undefined2 : Int16Array,\n      \"%Int32Array%\": typeof Int32Array === \"undefined\" ? undefined2 : Int32Array,\n      \"%isFinite%\": isFinite,\n      \"%isNaN%\": isNaN,\n      \"%IteratorPrototype%\": hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined2,\n      \"%JSON%\": typeof JSON === \"object\" ? JSON : undefined2,\n      \"%Map%\": typeof Map === \"undefined\" ? undefined2 : Map,\n      \"%MapIteratorPrototype%\": typeof Map === \"undefined\" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Map())[Symbol.iterator]()),\n      \"%Math%\": Math,\n      \"%Number%\": Number,\n      \"%Object%\": $Object,\n      \"%Object.getOwnPropertyDescriptor%\": $gOPD,\n      \"%parseFloat%\": parseFloat,\n      \"%parseInt%\": parseInt,\n      \"%Promise%\": typeof Promise === \"undefined\" ? undefined2 : Promise,\n      \"%Proxy%\": typeof Proxy === \"undefined\" ? undefined2 : Proxy,\n      \"%RangeError%\": $RangeError,\n      \"%ReferenceError%\": $ReferenceError,\n      \"%Reflect%\": typeof Reflect === \"undefined\" ? undefined2 : Reflect,\n      \"%RegExp%\": RegExp,\n      \"%Set%\": typeof Set === \"undefined\" ? undefined2 : Set,\n      \"%SetIteratorPrototype%\": typeof Set === \"undefined\" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Set())[Symbol.iterator]()),\n      \"%SharedArrayBuffer%\": typeof SharedArrayBuffer === \"undefined\" ? undefined2 : SharedArrayBuffer,\n      \"%String%\": String,\n      \"%StringIteratorPrototype%\": hasSymbols && getProto ? getProto(\"\"[Symbol.iterator]()) : undefined2,\n      \"%Symbol%\": hasSymbols ? Symbol : undefined2,\n      \"%SyntaxError%\": $SyntaxError,\n      \"%ThrowTypeError%\": ThrowTypeError,\n      \"%TypedArray%\": TypedArray,\n      \"%TypeError%\": $TypeError,\n      \"%Uint8Array%\": typeof Uint8Array === \"undefined\" ? undefined2 : Uint8Array,\n      \"%Uint8ClampedArray%\": typeof Uint8ClampedArray === \"undefined\" ? undefined2 : Uint8ClampedArray,\n      \"%Uint16Array%\": typeof Uint16Array === \"undefined\" ? undefined2 : Uint16Array,\n      \"%Uint32Array%\": typeof Uint32Array === \"undefined\" ? undefined2 : Uint32Array,\n      \"%URIError%\": $URIError,\n      \"%WeakMap%\": typeof WeakMap === \"undefined\" ? undefined2 : WeakMap,\n      \"%WeakRef%\": typeof WeakRef === \"undefined\" ? undefined2 : WeakRef,\n      \"%WeakSet%\": typeof WeakSet === \"undefined\" ? undefined2 : WeakSet,\n      \"%Function.prototype.call%\": $call,\n      \"%Function.prototype.apply%\": $apply,\n      \"%Object.defineProperty%\": $defineProperty,\n      \"%Object.getPrototypeOf%\": $ObjectGPO,\n      \"%Math.abs%\": abs,\n      \"%Math.floor%\": floor,\n      \"%Math.max%\": max,\n      \"%Math.min%\": min,\n      \"%Math.pow%\": pow,\n      \"%Math.round%\": round,\n      \"%Math.sign%\": sign,\n      \"%Reflect.getPrototypeOf%\": $ReflectGPO\n    };\n    if (getProto) {\n      try {\n        null.error;\n      } catch (e) {\n        errorProto = getProto(getProto(e));\n        INTRINSICS[\"%Error.prototype%\"] = errorProto;\n      }\n    }\n    var errorProto;\n    var doEval = function doEval2(name) {\n      var value;\n      if (name === \"%AsyncFunction%\") {\n        value = getEvalledConstructor(\"async function () {}\");\n      } else if (name === \"%GeneratorFunction%\") {\n        value = getEvalledConstructor(\"function* () {}\");\n      } else if (name === \"%AsyncGeneratorFunction%\") {\n        value = getEvalledConstructor(\"async function* () {}\");\n      } else if (name === \"%AsyncGenerator%\") {\n        var fn = doEval2(\"%AsyncGeneratorFunction%\");\n        if (fn) {\n          value = fn.prototype;\n        }\n      } else if (name === \"%AsyncIteratorPrototype%\") {\n        var gen = doEval2(\"%AsyncGenerator%\");\n        if (gen && getProto) {\n          value = getProto(gen.prototype);\n        }\n      }\n      INTRINSICS[name] = value;\n      return value;\n    };\n    var LEGACY_ALIASES = {\n      __proto__: null,\n      \"%ArrayBufferPrototype%\": [\"ArrayBuffer\", \"prototype\"],\n      \"%ArrayPrototype%\": [\"Array\", \"prototype\"],\n      \"%ArrayProto_entries%\": [\"Array\", \"prototype\", \"entries\"],\n      \"%ArrayProto_forEach%\": [\"Array\", \"prototype\", \"forEach\"],\n      \"%ArrayProto_keys%\": [\"Array\", \"prototype\", \"keys\"],\n      \"%ArrayProto_values%\": [\"Array\", \"prototype\", \"values\"],\n      \"%AsyncFunctionPrototype%\": [\"AsyncFunction\", \"prototype\"],\n      \"%AsyncGenerator%\": [\"AsyncGeneratorFunction\", \"prototype\"],\n      \"%AsyncGeneratorPrototype%\": [\"AsyncGeneratorFunction\", \"prototype\", \"prototype\"],\n      \"%BooleanPrototype%\": [\"Boolean\", \"prototype\"],\n      \"%DataViewPrototype%\": [\"DataView\", \"prototype\"],\n      \"%DatePrototype%\": [\"Date\", \"prototype\"],\n      \"%ErrorPrototype%\": [\"Error\", \"prototype\"],\n      \"%EvalErrorPrototype%\": [\"EvalError\", \"prototype\"],\n      \"%Float32ArrayPrototype%\": [\"Float32Array\", \"prototype\"],\n      \"%Float64ArrayPrototype%\": [\"Float64Array\", \"prototype\"],\n      \"%FunctionPrototype%\": [\"Function\", \"prototype\"],\n      \"%Generator%\": [\"GeneratorFunction\", \"prototype\"],\n      \"%GeneratorPrototype%\": [\"GeneratorFunction\", \"prototype\", \"prototype\"],\n      \"%Int8ArrayPrototype%\": [\"Int8Array\", \"prototype\"],\n      \"%Int16ArrayPrototype%\": [\"Int16Array\", \"prototype\"],\n      \"%Int32ArrayPrototype%\": [\"Int32Array\", \"prototype\"],\n      \"%JSONParse%\": [\"JSON\", \"parse\"],\n      \"%JSONStringify%\": [\"JSON\", \"stringify\"],\n      \"%MapPrototype%\": [\"Map\", \"prototype\"],\n      \"%NumberPrototype%\": [\"Number\", \"prototype\"],\n      \"%ObjectPrototype%\": [\"Object\", \"prototype\"],\n      \"%ObjProto_toString%\": [\"Object\", \"prototype\", \"toString\"],\n      \"%ObjProto_valueOf%\": [\"Object\", \"prototype\", \"valueOf\"],\n      \"%PromisePrototype%\": [\"Promise\", \"prototype\"],\n      \"%PromiseProto_then%\": [\"Promise\", \"prototype\", \"then\"],\n      \"%Promise_all%\": [\"Promise\", \"all\"],\n      \"%Promise_reject%\": [\"Promise\", \"reject\"],\n      \"%Promise_resolve%\": [\"Promise\", \"resolve\"],\n      \"%RangeErrorPrototype%\": [\"RangeError\", \"prototype\"],\n      \"%ReferenceErrorPrototype%\": [\"ReferenceError\", \"prototype\"],\n      \"%RegExpPrototype%\": [\"RegExp\", \"prototype\"],\n      \"%SetPrototype%\": [\"Set\", \"prototype\"],\n      \"%SharedArrayBufferPrototype%\": [\"SharedArrayBuffer\", \"prototype\"],\n      \"%StringPrototype%\": [\"String\", \"prototype\"],\n      \"%SymbolPrototype%\": [\"Symbol\", \"prototype\"],\n      \"%SyntaxErrorPrototype%\": [\"SyntaxError\", \"prototype\"],\n      \"%TypedArrayPrototype%\": [\"TypedArray\", \"prototype\"],\n      \"%TypeErrorPrototype%\": [\"TypeError\", \"prototype\"],\n      \"%Uint8ArrayPrototype%\": [\"Uint8Array\", \"prototype\"],\n      \"%Uint8ClampedArrayPrototype%\": [\"Uint8ClampedArray\", \"prototype\"],\n      \"%Uint16ArrayPrototype%\": [\"Uint16Array\", \"prototype\"],\n      \"%Uint32ArrayPrototype%\": [\"Uint32Array\", \"prototype\"],\n      \"%URIErrorPrototype%\": [\"URIError\", \"prototype\"],\n      \"%WeakMapPrototype%\": [\"WeakMap\", \"prototype\"],\n      \"%WeakSetPrototype%\": [\"WeakSet\", \"prototype\"]\n    };\n    var bind2 = require_function_bind();\n    var hasOwn = require_hasown();\n    var $concat = bind2.call($call, Array.prototype.concat);\n    var $spliceApply = bind2.call($apply, Array.prototype.splice);\n    var $replace = bind2.call($call, String.prototype.replace);\n    var $strSlice = bind2.call($call, String.prototype.slice);\n    var $exec = bind2.call($call, RegExp.prototype.exec);\n    var rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\n    var reEscapeChar = /\\\\(\\\\)?/g;\n    var stringToPath = function stringToPath2(string) {\n      var first = $strSlice(string, 0, 1);\n      var last = $strSlice(string, -1);\n      if (first === \"%\" && last !== \"%\") {\n        throw new $SyntaxError(\"invalid intrinsic syntax, expected closing `%`\");\n      } else if (last === \"%\" && first !== \"%\") {\n        throw new $SyntaxError(\"invalid intrinsic syntax, expected opening `%`\");\n      }\n      var result = [];\n      $replace(string, rePropName, function(match, number, quote, subString) {\n        result[result.length] = quote ? $replace(subString, reEscapeChar, \"$1\") : number || match;\n      });\n      return result;\n    };\n    var getBaseIntrinsic = function getBaseIntrinsic2(name, allowMissing) {\n      var intrinsicName = name;\n      var alias;\n      if (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n        alias = LEGACY_ALIASES[intrinsicName];\n        intrinsicName = \"%\" + alias[0] + \"%\";\n      }\n      if (hasOwn(INTRINSICS, intrinsicName)) {\n        var value = INTRINSICS[intrinsicName];\n        if (value === needsEval) {\n          value = doEval(intrinsicName);\n        }\n        if (typeof value === \"undefined\" && !allowMissing) {\n          throw new $TypeError(\"intrinsic \" + name + \" exists, but is not available. Please file an issue!\");\n        }\n        return {\n          alias,\n          name: intrinsicName,\n          value\n        };\n      }\n      throw new $SyntaxError(\"intrinsic \" + name + \" does not exist!\");\n    };\n    module2.exports = function GetIntrinsic(name, allowMissing) {\n      if (typeof name !== \"string\" || name.length === 0) {\n        throw new $TypeError(\"intrinsic name must be a non-empty string\");\n      }\n      if (arguments.length > 1 && typeof allowMissing !== \"boolean\") {\n        throw new $TypeError('\"allowMissing\" argument must be a boolean');\n      }\n      if ($exec(/^%?[^%]*%?$/, name) === null) {\n        throw new $SyntaxError(\"`%` may not be present anywhere but at the beginning and end of the intrinsic name\");\n      }\n      var parts = stringToPath(name);\n      var intrinsicBaseName = parts.length > 0 ? parts[0] : \"\";\n      var intrinsic = getBaseIntrinsic(\"%\" + intrinsicBaseName + \"%\", allowMissing);\n      var intrinsicRealName = intrinsic.name;\n      var value = intrinsic.value;\n      var skipFurtherCaching = false;\n      var alias = intrinsic.alias;\n      if (alias) {\n        intrinsicBaseName = alias[0];\n        $spliceApply(parts, $concat([0, 1], alias));\n      }\n      for (var i = 1, isOwn = true; i < parts.length; i += 1) {\n        var part = parts[i];\n        var first = $strSlice(part, 0, 1);\n        var last = $strSlice(part, -1);\n        if ((first === '\"' || first === \"'\" || first === \"`\" || (last === '\"' || last === \"'\" || last === \"`\")) && first !== last) {\n          throw new $SyntaxError(\"property names with quotes must have matching quotes\");\n        }\n        if (part === \"constructor\" || !isOwn) {\n          skipFurtherCaching = true;\n        }\n        intrinsicBaseName += \".\" + part;\n        intrinsicRealName = \"%\" + intrinsicBaseName + \"%\";\n        if (hasOwn(INTRINSICS, intrinsicRealName)) {\n          value = INTRINSICS[intrinsicRealName];\n        } else if (value != null) {\n          if (!(part in value)) {\n            if (!allowMissing) {\n              throw new $TypeError(\"base intrinsic for \" + name + \" exists, but the property is not available.\");\n            }\n            return void undefined2;\n          }\n          if ($gOPD && i + 1 >= parts.length) {\n            var desc = $gOPD(value, part);\n            isOwn = !!desc;\n            if (isOwn && \"get\" in desc && !(\"originalValue\" in desc.get)) {\n              value = desc.get;\n            } else {\n              value = value[part];\n            }\n          } else {\n            isOwn = hasOwn(value, part);\n            value = value[part];\n          }\n          if (isOwn && !skipFurtherCaching) {\n            INTRINSICS[intrinsicRealName] = value;\n          }\n        }\n      }\n      return value;\n    };\n  }\n});\n\n// node_modules/has-tostringtag/shams.js\nvar require_shams2 = __commonJS({\n  \"node_modules/has-tostringtag/shams.js\"(exports2, module2) {\n    \"use strict\";\n    var hasSymbols = require_shams();\n    module2.exports = function hasToStringTagShams() {\n      return hasSymbols() && !!Symbol.toStringTag;\n    };\n  }\n});\n\n// node_modules/es-set-tostringtag/index.js\nvar require_es_set_tostringtag = __commonJS({\n  \"node_modules/es-set-tostringtag/index.js\"(exports2, module2) {\n    \"use strict\";\n    var GetIntrinsic = require_get_intrinsic();\n    var $defineProperty = GetIntrinsic(\"%Object.defineProperty%\", true);\n    var hasToStringTag = require_shams2()();\n    var hasOwn = require_hasown();\n    var $TypeError = require_type();\n    var toStringTag2 = hasToStringTag ? Symbol.toStringTag : null;\n    module2.exports = function setToStringTag(object, value) {\n      var overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force;\n      var nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable;\n      if (typeof overrideIfSet !== \"undefined\" && typeof overrideIfSet !== \"boolean\" || typeof nonConfigurable !== \"undefined\" && typeof nonConfigurable !== \"boolean\") {\n        throw new $TypeError(\"if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans\");\n      }\n      if (toStringTag2 && (overrideIfSet || !hasOwn(object, toStringTag2))) {\n        if ($defineProperty) {\n          $defineProperty(object, toStringTag2, {\n            configurable: !nonConfigurable,\n            enumerable: false,\n            value,\n            writable: false\n          });\n        } else {\n          object[toStringTag2] = value;\n        }\n      }\n    };\n  }\n});\n\n// node_modules/form-data/lib/populate.js\nvar require_populate = __commonJS({\n  \"node_modules/form-data/lib/populate.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = function(dst, src) {\n      Object.keys(src).forEach(function(prop) {\n        dst[prop] = dst[prop] || src[prop];\n      });\n      return dst;\n    };\n  }\n});\n\n// node_modules/form-data/lib/form_data.js\nvar require_form_data = __commonJS({\n  \"node_modules/form-data/lib/form_data.js\"(exports2, module2) {\n    \"use strict\";\n    var CombinedStream = require_combined_stream();\n    var util3 = require(\"util\");\n    var path = require(\"path\");\n    var http3 = require(\"http\");\n    var https2 = require(\"https\");\n    var parseUrl2 = require(\"url\").parse;\n    var fs = require(\"fs\");\n    var Stream = require(\"stream\").Stream;\n    var crypto2 = require(\"crypto\");\n    var mime = require_mime_types();\n    var asynckit = require_asynckit();\n    var setToStringTag = require_es_set_tostringtag();\n    var hasOwn = require_hasown();\n    var populate = require_populate();\n    function FormData3(options) {\n      if (!(this instanceof FormData3)) {\n        return new FormData3(options);\n      }\n      this._overheadLength = 0;\n      this._valueLength = 0;\n      this._valuesToMeasure = [];\n      CombinedStream.call(this);\n      options = options || {};\n      for (var option in options) {\n        this[option] = options[option];\n      }\n    }\n    util3.inherits(FormData3, CombinedStream);\n    FormData3.LINE_BREAK = \"\\r\\n\";\n    FormData3.DEFAULT_CONTENT_TYPE = \"application/octet-stream\";\n    FormData3.prototype.append = function(field, value, options) {\n      options = options || {};\n      if (typeof options === \"string\") {\n        options = { filename: options };\n      }\n      var append2 = CombinedStream.prototype.append.bind(this);\n      if (typeof value === \"number\" || value == null) {\n        value = String(value);\n      }\n      if (Array.isArray(value)) {\n        this._error(new Error(\"Arrays are not supported.\"));\n        return;\n      }\n      var header = this._multiPartHeader(field, value, options);\n      var footer = this._multiPartFooter();\n      append2(header);\n      append2(value);\n      append2(footer);\n      this._trackLength(header, value, options);\n    };\n    FormData3.prototype._trackLength = function(header, value, options) {\n      var valueLength = 0;\n      if (options.knownLength != null) {\n        valueLength += Number(options.knownLength);\n      } else if (Buffer.isBuffer(value)) {\n        valueLength = value.length;\n      } else if (typeof value === \"string\") {\n        valueLength = Buffer.byteLength(value);\n      }\n      this._valueLength += valueLength;\n      this._overheadLength += Buffer.byteLength(header) + FormData3.LINE_BREAK.length;\n      if (!value || !value.path && !(value.readable && hasOwn(value, \"httpVersion\")) && !(value instanceof Stream)) {\n        return;\n      }\n      if (!options.knownLength) {\n        this._valuesToMeasure.push(value);\n      }\n    };\n    FormData3.prototype._lengthRetriever = function(value, callback) {\n      if (hasOwn(value, \"fd\")) {\n        if (value.end != void 0 && value.end != Infinity && value.start != void 0) {\n          callback(null, value.end + 1 - (value.start ? value.start : 0));\n        } else {\n          fs.stat(value.path, function(err, stat) {\n            if (err) {\n              callback(err);\n              return;\n            }\n            var fileSize = stat.size - (value.start ? value.start : 0);\n            callback(null, fileSize);\n          });\n        }\n      } else if (hasOwn(value, \"httpVersion\")) {\n        callback(null, Number(value.headers[\"content-length\"]));\n      } else if (hasOwn(value, \"httpModule\")) {\n        value.on(\"response\", function(response) {\n          value.pause();\n          callback(null, Number(response.headers[\"content-length\"]));\n        });\n        value.resume();\n      } else {\n        callback(\"Unknown stream\");\n      }\n    };\n    FormData3.prototype._multiPartHeader = function(field, value, options) {\n      if (typeof options.header === \"string\") {\n        return options.header;\n      }\n      var contentDisposition = this._getContentDisposition(value, options);\n      var contentType = this._getContentType(value, options);\n      var contents = \"\";\n      var headers = {\n        // add custom disposition as third element or keep it two elements if not\n        \"Content-Disposition\": [\"form-data\", 'name=\"' + field + '\"'].concat(contentDisposition || []),\n        // if no content type. allow it to be empty array\n        \"Content-Type\": [].concat(contentType || [])\n      };\n      if (typeof options.header === \"object\") {\n        populate(headers, options.header);\n      }\n      var header;\n      for (var prop in headers) {\n        if (hasOwn(headers, prop)) {\n          header = headers[prop];\n          if (header == null) {\n            continue;\n          }\n          if (!Array.isArray(header)) {\n            header = [header];\n          }\n          if (header.length) {\n            contents += prop + \": \" + header.join(\"; \") + FormData3.LINE_BREAK;\n          }\n        }\n      }\n      return \"--\" + this.getBoundary() + FormData3.LINE_BREAK + contents + FormData3.LINE_BREAK;\n    };\n    FormData3.prototype._getContentDisposition = function(value, options) {\n      var filename;\n      if (typeof options.filepath === \"string\") {\n        filename = path.normalize(options.filepath).replace(/\\\\/g, \"/\");\n      } else if (options.filename || value && (value.name || value.path)) {\n        filename = path.basename(options.filename || value && (value.name || value.path));\n      } else if (value && value.readable && hasOwn(value, \"httpVersion\")) {\n        filename = path.basename(value.client._httpMessage.path || \"\");\n      }\n      if (filename) {\n        return 'filename=\"' + filename + '\"';\n      }\n    };\n    FormData3.prototype._getContentType = function(value, options) {\n      var contentType = options.contentType;\n      if (!contentType && value && value.name) {\n        contentType = mime.lookup(value.name);\n      }\n      if (!contentType && value && value.path) {\n        contentType = mime.lookup(value.path);\n      }\n      if (!contentType && value && value.readable && hasOwn(value, \"httpVersion\")) {\n        contentType = value.headers[\"content-type\"];\n      }\n      if (!contentType && (options.filepath || options.filename)) {\n        contentType = mime.lookup(options.filepath || options.filename);\n      }\n      if (!contentType && value && typeof value === \"object\") {\n        contentType = FormData3.DEFAULT_CONTENT_TYPE;\n      }\n      return contentType;\n    };\n    FormData3.prototype._multiPartFooter = function() {\n      return function(next) {\n        var footer = FormData3.LINE_BREAK;\n        var lastPart = this._streams.length === 0;\n        if (lastPart) {\n          footer += this._lastBoundary();\n        }\n        next(footer);\n      }.bind(this);\n    };\n    FormData3.prototype._lastBoundary = function() {\n      return \"--\" + this.getBoundary() + \"--\" + FormData3.LINE_BREAK;\n    };\n    FormData3.prototype.getHeaders = function(userHeaders) {\n      var header;\n      var formHeaders = {\n        \"content-type\": \"multipart/form-data; boundary=\" + this.getBoundary()\n      };\n      for (header in userHeaders) {\n        if (hasOwn(userHeaders, header)) {\n          formHeaders[header.toLowerCase()] = userHeaders[header];\n        }\n      }\n      return formHeaders;\n    };\n    FormData3.prototype.setBoundary = function(boundary) {\n      if (typeof boundary !== \"string\") {\n        throw new TypeError(\"FormData boundary must be a string\");\n      }\n      this._boundary = boundary;\n    };\n    FormData3.prototype.getBoundary = function() {\n      if (!this._boundary) {\n        this._generateBoundary();\n      }\n      return this._boundary;\n    };\n    FormData3.prototype.getBuffer = function() {\n      var dataBuffer = new Buffer.alloc(0);\n      var boundary = this.getBoundary();\n      for (var i = 0, len = this._streams.length; i < len; i++) {\n        if (typeof this._streams[i] !== \"function\") {\n          if (Buffer.isBuffer(this._streams[i])) {\n            dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]);\n          } else {\n            dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]);\n          }\n          if (typeof this._streams[i] !== \"string\" || this._streams[i].substring(2, boundary.length + 2) !== boundary) {\n            dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData3.LINE_BREAK)]);\n          }\n        }\n      }\n      return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]);\n    };\n    FormData3.prototype._generateBoundary = function() {\n      this._boundary = \"--------------------------\" + crypto2.randomBytes(12).toString(\"hex\");\n    };\n    FormData3.prototype.getLengthSync = function() {\n      var knownLength = this._overheadLength + this._valueLength;\n      if (this._streams.length) {\n        knownLength += this._lastBoundary().length;\n      }\n      if (!this.hasKnownLength()) {\n        this._error(new Error(\"Cannot calculate proper length in synchronous way.\"));\n      }\n      return knownLength;\n    };\n    FormData3.prototype.hasKnownLength = function() {\n      var hasKnownLength = true;\n      if (this._valuesToMeasure.length) {\n        hasKnownLength = false;\n      }\n      return hasKnownLength;\n    };\n    FormData3.prototype.getLength = function(cb) {\n      var knownLength = this._overheadLength + this._valueLength;\n      if (this._streams.length) {\n        knownLength += this._lastBoundary().length;\n      }\n      if (!this._valuesToMeasure.length) {\n        process.nextTick(cb.bind(this, null, knownLength));\n        return;\n      }\n      asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {\n        if (err) {\n          cb(err);\n          return;\n        }\n        values.forEach(function(length) {\n          knownLength += length;\n        });\n        cb(null, knownLength);\n      });\n    };\n    FormData3.prototype.submit = function(params, cb) {\n      var request;\n      var options;\n      var defaults2 = { method: \"post\" };\n      if (typeof params === \"string\") {\n        params = parseUrl2(params);\n        options = populate({\n          port: params.port,\n          path: params.pathname,\n          host: params.hostname,\n          protocol: params.protocol\n        }, defaults2);\n      } else {\n        options = populate(params, defaults2);\n        if (!options.port) {\n          options.port = options.protocol === \"https:\" ? 443 : 80;\n        }\n      }\n      options.headers = this.getHeaders(params.headers);\n      if (options.protocol === \"https:\") {\n        request = https2.request(options);\n      } else {\n        request = http3.request(options);\n      }\n      this.getLength(function(err, length) {\n        if (err && err !== \"Unknown stream\") {\n          this._error(err);\n          return;\n        }\n        if (length) {\n          request.setHeader(\"Content-Length\", length);\n        }\n        this.pipe(request);\n        if (cb) {\n          var onResponse;\n          var callback = function(error, responce) {\n            request.removeListener(\"error\", callback);\n            request.removeListener(\"response\", onResponse);\n            return cb.call(this, error, responce);\n          };\n          onResponse = callback.bind(this, null);\n          request.on(\"error\", callback);\n          request.on(\"response\", onResponse);\n        }\n      }.bind(this));\n      return request;\n    };\n    FormData3.prototype._error = function(err) {\n      if (!this.error) {\n        this.error = err;\n        this.pause();\n        this.emit(\"error\", err);\n      }\n    };\n    FormData3.prototype.toString = function() {\n      return \"[object FormData]\";\n    };\n    setToStringTag(FormData3.prototype, \"FormData\");\n    module2.exports = FormData3;\n  }\n});\n\n// node_modules/ms/index.js\nvar require_ms = __commonJS({\n  \"node_modules/ms/index.js\"(exports2, module2) {\n    var s = 1e3;\n    var m = s * 60;\n    var h = m * 60;\n    var d = h * 24;\n    var w = d * 7;\n    var y = d * 365.25;\n    module2.exports = function(val, options) {\n      options = options || {};\n      var type = typeof val;\n      if (type === \"string\" && val.length > 0) {\n        return parse(val);\n      } else if (type === \"number\" && isFinite(val)) {\n        return options.long ? fmtLong(val) : fmtShort(val);\n      }\n      throw new Error(\n        \"val is not a non-empty string or a valid number. val=\" + JSON.stringify(val)\n      );\n    };\n    function parse(str) {\n      str = String(str);\n      if (str.length > 100) {\n        return;\n      }\n      var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n        str\n      );\n      if (!match) {\n        return;\n      }\n      var n = parseFloat(match[1]);\n      var type = (match[2] || \"ms\").toLowerCase();\n      switch (type) {\n        case \"years\":\n        case \"year\":\n        case \"yrs\":\n        case \"yr\":\n        case \"y\":\n          return n * y;\n        case \"weeks\":\n        case \"week\":\n        case \"w\":\n          return n * w;\n        case \"days\":\n        case \"day\":\n        case \"d\":\n          return n * d;\n        case \"hours\":\n        case \"hour\":\n        case \"hrs\":\n        case \"hr\":\n        case \"h\":\n          return n * h;\n        case \"minutes\":\n        case \"minute\":\n        case \"mins\":\n        case \"min\":\n        case \"m\":\n          return n * m;\n        case \"seconds\":\n        case \"second\":\n        case \"secs\":\n        case \"sec\":\n        case \"s\":\n          return n * s;\n        case \"milliseconds\":\n        case \"millisecond\":\n        case \"msecs\":\n        case \"msec\":\n        case \"ms\":\n          return n;\n        default:\n          return void 0;\n      }\n    }\n    function fmtShort(ms) {\n      var msAbs = Math.abs(ms);\n      if (msAbs >= d) {\n        return Math.round(ms / d) + \"d\";\n      }\n      if (msAbs >= h) {\n        return Math.round(ms / h) + \"h\";\n      }\n      if (msAbs >= m) {\n        return Math.round(ms / m) + \"m\";\n      }\n      if (msAbs >= s) {\n        return Math.round(ms / s) + \"s\";\n      }\n      return ms + \"ms\";\n    }\n    function fmtLong(ms) {\n      var msAbs = Math.abs(ms);\n      if (msAbs >= d) {\n        return plural(ms, msAbs, d, \"day\");\n      }\n      if (msAbs >= h) {\n        return plural(ms, msAbs, h, \"hour\");\n      }\n      if (msAbs >= m) {\n        return plural(ms, msAbs, m, \"minute\");\n      }\n      if (msAbs >= s) {\n        return plural(ms, msAbs, s, \"second\");\n      }\n      return ms + \" ms\";\n    }\n    function plural(ms, msAbs, n, name) {\n      var isPlural = msAbs >= n * 1.5;\n      return Math.round(ms / n) + \" \" + name + (isPlural ? \"s\" : \"\");\n    }\n  }\n});\n\n// node_modules/debug/src/common.js\nvar require_common = __commonJS({\n  \"node_modules/debug/src/common.js\"(exports2, module2) {\n    function setup(env) {\n      createDebug.debug = createDebug;\n      createDebug.default = createDebug;\n      createDebug.coerce = coerce;\n      createDebug.disable = disable;\n      createDebug.enable = enable;\n      createDebug.enabled = enabled;\n      createDebug.humanize = require_ms();\n      createDebug.destroy = destroy;\n      Object.keys(env).forEach((key) => {\n        createDebug[key] = env[key];\n      });\n      createDebug.names = [];\n      createDebug.skips = [];\n      createDebug.formatters = {};\n      function selectColor(namespace) {\n        let hash = 0;\n        for (let i = 0; i < namespace.length; i++) {\n          hash = (hash << 5) - hash + namespace.charCodeAt(i);\n          hash |= 0;\n        }\n        return createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n      }\n      createDebug.selectColor = selectColor;\n      function createDebug(namespace) {\n        let prevTime;\n        let enableOverride = null;\n        let namespacesCache;\n        let enabledCache;\n        function debug(...args) {\n          if (!debug.enabled) {\n            return;\n          }\n          const self2 = debug;\n          const curr = Number(/* @__PURE__ */ new Date());\n          const ms = curr - (prevTime || curr);\n          self2.diff = ms;\n          self2.prev = prevTime;\n          self2.curr = curr;\n          prevTime = curr;\n          args[0] = createDebug.coerce(args[0]);\n          if (typeof args[0] !== \"string\") {\n            args.unshift(\"%O\");\n          }\n          let index = 0;\n          args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n            if (match === \"%%\") {\n              return \"%\";\n            }\n            index++;\n            const formatter = createDebug.formatters[format];\n            if (typeof formatter === \"function\") {\n              const val = args[index];\n              match = formatter.call(self2, val);\n              args.splice(index, 1);\n              index--;\n            }\n            return match;\n          });\n          createDebug.formatArgs.call(self2, args);\n          const logFn = self2.log || createDebug.log;\n          logFn.apply(self2, args);\n        }\n        debug.namespace = namespace;\n        debug.useColors = createDebug.useColors();\n        debug.color = createDebug.selectColor(namespace);\n        debug.extend = extend2;\n        debug.destroy = createDebug.destroy;\n        Object.defineProperty(debug, \"enabled\", {\n          enumerable: true,\n          configurable: false,\n          get: () => {\n            if (enableOverride !== null) {\n              return enableOverride;\n            }\n            if (namespacesCache !== createDebug.namespaces) {\n              namespacesCache = createDebug.namespaces;\n              enabledCache = createDebug.enabled(namespace);\n            }\n            return enabledCache;\n          },\n          set: (v) => {\n            enableOverride = v;\n          }\n        });\n        if (typeof createDebug.init === \"function\") {\n          createDebug.init(debug);\n        }\n        return debug;\n      }\n      function extend2(namespace, delimiter) {\n        const newDebug = createDebug(this.namespace + (typeof delimiter === \"undefined\" ? \":\" : delimiter) + namespace);\n        newDebug.log = this.log;\n        return newDebug;\n      }\n      function enable(namespaces) {\n        createDebug.save(namespaces);\n        createDebug.namespaces = namespaces;\n        createDebug.names = [];\n        createDebug.skips = [];\n        const split = (typeof namespaces === \"string\" ? namespaces : \"\").trim().replace(/\\s+/g, \",\").split(\",\").filter(Boolean);\n        for (const ns of split) {\n          if (ns[0] === \"-\") {\n            createDebug.skips.push(ns.slice(1));\n          } else {\n            createDebug.names.push(ns);\n          }\n        }\n      }\n      function matchesTemplate(search, template) {\n        let searchIndex = 0;\n        let templateIndex = 0;\n        let starIndex = -1;\n        let matchIndex = 0;\n        while (searchIndex < search.length) {\n          if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === \"*\")) {\n            if (template[templateIndex] === \"*\") {\n              starIndex = templateIndex;\n              matchIndex = searchIndex;\n              templateIndex++;\n            } else {\n              searchIndex++;\n              templateIndex++;\n            }\n          } else if (starIndex !== -1) {\n            templateIndex = starIndex + 1;\n            matchIndex++;\n            searchIndex = matchIndex;\n          } else {\n            return false;\n          }\n        }\n        while (templateIndex < template.length && template[templateIndex] === \"*\") {\n          templateIndex++;\n        }\n        return templateIndex === template.length;\n      }\n      function disable() {\n        const namespaces = [\n          ...createDebug.names,\n          ...createDebug.skips.map((namespace) => \"-\" + namespace)\n        ].join(\",\");\n        createDebug.enable(\"\");\n        return namespaces;\n      }\n      function enabled(name) {\n        for (const skip of createDebug.skips) {\n          if (matchesTemplate(name, skip)) {\n            return false;\n          }\n        }\n        for (const ns of createDebug.names) {\n          if (matchesTemplate(name, ns)) {\n            return true;\n          }\n        }\n        return false;\n      }\n      function coerce(val) {\n        if (val instanceof Error) {\n          return val.stack || val.message;\n        }\n        return val;\n      }\n      function destroy() {\n        console.warn(\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\");\n      }\n      createDebug.enable(createDebug.load());\n      return createDebug;\n    }\n    module2.exports = setup;\n  }\n});\n\n// node_modules/debug/src/browser.js\nvar require_browser = __commonJS({\n  \"node_modules/debug/src/browser.js\"(exports2, module2) {\n    exports2.formatArgs = formatArgs;\n    exports2.save = save;\n    exports2.load = load;\n    exports2.useColors = useColors;\n    exports2.storage = localstorage();\n    exports2.destroy = /* @__PURE__ */ (() => {\n      let warned = false;\n      return () => {\n        if (!warned) {\n          warned = true;\n          console.warn(\"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\");\n        }\n      };\n    })();\n    exports2.colors = [\n      \"#0000CC\",\n      \"#0000FF\",\n      \"#0033CC\",\n      \"#0033FF\",\n      \"#0066CC\",\n      \"#0066FF\",\n      \"#0099CC\",\n      \"#0099FF\",\n      \"#00CC00\",\n      \"#00CC33\",\n      \"#00CC66\",\n      \"#00CC99\",\n      \"#00CCCC\",\n      \"#00CCFF\",\n      \"#3300CC\",\n      \"#3300FF\",\n      \"#3333CC\",\n      \"#3333FF\",\n      \"#3366CC\",\n      \"#3366FF\",\n      \"#3399CC\",\n      \"#3399FF\",\n      \"#33CC00\",\n      \"#33CC33\",\n      \"#33CC66\",\n      \"#33CC99\",\n      \"#33CCCC\",\n      \"#33CCFF\",\n      \"#6600CC\",\n      \"#6600FF\",\n      \"#6633CC\",\n      \"#6633FF\",\n      \"#66CC00\",\n      \"#66CC33\",\n      \"#9900CC\",\n      \"#9900FF\",\n      \"#9933CC\",\n      \"#9933FF\",\n      \"#99CC00\",\n      \"#99CC33\",\n      \"#CC0000\",\n      \"#CC0033\",\n      \"#CC0066\",\n      \"#CC0099\",\n      \"#CC00CC\",\n      \"#CC00FF\",\n      \"#CC3300\",\n      \"#CC3333\",\n      \"#CC3366\",\n      \"#CC3399\",\n      \"#CC33CC\",\n      \"#CC33FF\",\n      \"#CC6600\",\n      \"#CC6633\",\n      \"#CC9900\",\n      \"#CC9933\",\n      \"#CCCC00\",\n      \"#CCCC33\",\n      \"#FF0000\",\n      \"#FF0033\",\n      \"#FF0066\",\n      \"#FF0099\",\n      \"#FF00CC\",\n      \"#FF00FF\",\n      \"#FF3300\",\n      \"#FF3333\",\n      \"#FF3366\",\n      \"#FF3399\",\n      \"#FF33CC\",\n      \"#FF33FF\",\n      \"#FF6600\",\n      \"#FF6633\",\n      \"#FF9900\",\n      \"#FF9933\",\n      \"#FFCC00\",\n      \"#FFCC33\"\n    ];\n    function useColors() {\n      if (typeof window !== \"undefined\" && window.process && (window.process.type === \"renderer\" || window.process.__nwjs)) {\n        return true;\n      }\n      if (typeof navigator !== \"undefined\" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n        return false;\n      }\n      let m;\n      return typeof document !== \"undefined\" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773\n      typeof window !== \"undefined\" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?\n      // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n      typeof navigator !== \"undefined\" && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker\n      typeof navigator !== \"undefined\" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n    }\n    function formatArgs(args) {\n      args[0] = (this.useColors ? \"%c\" : \"\") + this.namespace + (this.useColors ? \" %c\" : \" \") + args[0] + (this.useColors ? \"%c \" : \" \") + \"+\" + module2.exports.humanize(this.diff);\n      if (!this.useColors) {\n        return;\n      }\n      const c = \"color: \" + this.color;\n      args.splice(1, 0, c, \"color: inherit\");\n      let index = 0;\n      let lastC = 0;\n      args[0].replace(/%[a-zA-Z%]/g, (match) => {\n        if (match === \"%%\") {\n          return;\n        }\n        index++;\n        if (match === \"%c\") {\n          lastC = index;\n        }\n      });\n      args.splice(lastC, 0, c);\n    }\n    exports2.log = console.debug || console.log || (() => {\n    });\n    function save(namespaces) {\n      try {\n        if (namespaces) {\n          exports2.storage.setItem(\"debug\", namespaces);\n        } else {\n          exports2.storage.removeItem(\"debug\");\n        }\n      } catch (error) {\n      }\n    }\n    function load() {\n      let r;\n      try {\n        r = exports2.storage.getItem(\"debug\") || exports2.storage.getItem(\"DEBUG\");\n      } catch (error) {\n      }\n      if (!r && typeof process !== \"undefined\" && \"env\" in process) {\n        r = process.env.DEBUG;\n      }\n      return r;\n    }\n    function localstorage() {\n      try {\n        return localStorage;\n      } catch (error) {\n      }\n    }\n    module2.exports = require_common()(exports2);\n    var { formatters } = module2.exports;\n    formatters.j = function(v) {\n      try {\n        return JSON.stringify(v);\n      } catch (error) {\n        return \"[UnexpectedJSONParseError]: \" + error.message;\n      }\n    };\n  }\n});\n\n// node_modules/has-flag/index.js\nvar require_has_flag = __commonJS({\n  \"node_modules/has-flag/index.js\"(exports2, module2) {\n    \"use strict\";\n    module2.exports = (flag, argv = process.argv) => {\n      const prefix = flag.startsWith(\"-\") ? \"\" : flag.length === 1 ? \"-\" : \"--\";\n      const position = argv.indexOf(prefix + flag);\n      const terminatorPosition = argv.indexOf(\"--\");\n      return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n    };\n  }\n});\n\n// node_modules/supports-color/index.js\nvar require_supports_color = __commonJS({\n  \"node_modules/supports-color/index.js\"(exports2, module2) {\n    \"use strict\";\n    var os = require(\"os\");\n    var tty = require(\"tty\");\n    var hasFlag = require_has_flag();\n    var { env } = process;\n    var forceColor;\n    if (hasFlag(\"no-color\") || hasFlag(\"no-colors\") || hasFlag(\"color=false\") || hasFlag(\"color=never\")) {\n      forceColor = 0;\n    } else if (hasFlag(\"color\") || hasFlag(\"colors\") || hasFlag(\"color=true\") || hasFlag(\"color=always\")) {\n      forceColor = 1;\n    }\n    if (\"FORCE_COLOR\" in env) {\n      if (env.FORCE_COLOR === \"true\") {\n        forceColor = 1;\n      } else if (env.FORCE_COLOR === \"false\") {\n        forceColor = 0;\n      } else {\n        forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n      }\n    }\n    function translateLevel(level) {\n      if (level === 0) {\n        return false;\n      }\n      return {\n        level,\n        hasBasic: true,\n        has256: level >= 2,\n        has16m: level >= 3\n      };\n    }\n    function supportsColor(haveStream, streamIsTTY) {\n      if (forceColor === 0) {\n        return 0;\n      }\n      if (hasFlag(\"color=16m\") || hasFlag(\"color=full\") || hasFlag(\"color=truecolor\")) {\n        return 3;\n      }\n      if (hasFlag(\"color=256\")) {\n        return 2;\n      }\n      if (haveStream && !streamIsTTY && forceColor === void 0) {\n        return 0;\n      }\n      const min = forceColor || 0;\n      if (env.TERM === \"dumb\") {\n        return min;\n      }\n      if (process.platform === \"win32\") {\n        const osRelease = os.release().split(\".\");\n        if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {\n          return Number(osRelease[2]) >= 14931 ? 3 : 2;\n        }\n        return 1;\n      }\n      if (\"CI\" in env) {\n        if ([\"TRAVIS\", \"CIRCLECI\", \"APPVEYOR\", \"GITLAB_CI\", \"GITHUB_ACTIONS\", \"BUILDKITE\"].some((sign) => sign in env) || env.CI_NAME === \"codeship\") {\n          return 1;\n        }\n        return min;\n      }\n      if (\"TEAMCITY_VERSION\" in env) {\n        return /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n      }\n      if (env.COLORTERM === \"truecolor\") {\n        return 3;\n      }\n      if (\"TERM_PROGRAM\" in env) {\n        const version = parseInt((env.TERM_PROGRAM_VERSION || \"\").split(\".\")[0], 10);\n        switch (env.TERM_PROGRAM) {\n          case \"iTerm.app\":\n            return version >= 3 ? 3 : 2;\n          case \"Apple_Terminal\":\n            return 2;\n        }\n      }\n      if (/-256(color)?$/i.test(env.TERM)) {\n        return 2;\n      }\n      if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n        return 1;\n      }\n      if (\"COLORTERM\" in env) {\n        return 1;\n      }\n      return min;\n    }\n    function getSupportLevel(stream4) {\n      const level = supportsColor(stream4, stream4 && stream4.isTTY);\n      return translateLevel(level);\n    }\n    module2.exports = {\n      supportsColor: getSupportLevel,\n      stdout: translateLevel(supportsColor(true, tty.isatty(1))),\n      stderr: translateLevel(supportsColor(true, tty.isatty(2)))\n    };\n  }\n});\n\n// node_modules/debug/src/node.js\nvar require_node = __commonJS({\n  \"node_modules/debug/src/node.js\"(exports2, module2) {\n    var tty = require(\"tty\");\n    var util3 = require(\"util\");\n    exports2.init = init;\n    exports2.log = log;\n    exports2.formatArgs = formatArgs;\n    exports2.save = save;\n    exports2.load = load;\n    exports2.useColors = useColors;\n    exports2.destroy = util3.deprecate(\n      () => {\n      },\n      \"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.\"\n    );\n    exports2.colors = [6, 2, 3, 4, 5, 1];\n    try {\n      const supportsColor = require_supports_color();\n      if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n        exports2.colors = [\n          20,\n          21,\n          26,\n          27,\n          32,\n          33,\n          38,\n          39,\n          40,\n          41,\n          42,\n          43,\n          44,\n          45,\n          56,\n          57,\n          62,\n          63,\n          68,\n          69,\n          74,\n          75,\n          76,\n          77,\n          78,\n          79,\n          80,\n          81,\n          92,\n          93,\n          98,\n          99,\n          112,\n          113,\n          128,\n          129,\n          134,\n          135,\n          148,\n          149,\n          160,\n          161,\n          162,\n          163,\n          164,\n          165,\n          166,\n          167,\n          168,\n          169,\n          170,\n          171,\n          172,\n          173,\n          178,\n          179,\n          184,\n          185,\n          196,\n          197,\n          198,\n          199,\n          200,\n          201,\n          202,\n          203,\n          204,\n          205,\n          206,\n          207,\n          208,\n          209,\n          214,\n          215,\n          220,\n          221\n        ];\n      }\n    } catch (error) {\n    }\n    exports2.inspectOpts = Object.keys(process.env).filter((key) => {\n      return /^debug_/i.test(key);\n    }).reduce((obj, key) => {\n      const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => {\n        return k.toUpperCase();\n      });\n      let val = process.env[key];\n      if (/^(yes|on|true|enabled)$/i.test(val)) {\n        val = true;\n      } else if (/^(no|off|false|disabled)$/i.test(val)) {\n        val = false;\n      } else if (val === \"null\") {\n        val = null;\n      } else {\n        val = Number(val);\n      }\n      obj[prop] = val;\n      return obj;\n    }, {});\n    function useColors() {\n      return \"colors\" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty.isatty(process.stderr.fd);\n    }\n    function formatArgs(args) {\n      const { namespace: name, useColors: useColors2 } = this;\n      if (useColors2) {\n        const c = this.color;\n        const colorCode = \"\\x1B[3\" + (c < 8 ? c : \"8;5;\" + c);\n        const prefix = `  ${colorCode};1m${name} \\x1B[0m`;\n        args[0] = prefix + args[0].split(\"\\n\").join(\"\\n\" + prefix);\n        args.push(colorCode + \"m+\" + module2.exports.humanize(this.diff) + \"\\x1B[0m\");\n      } else {\n        args[0] = getDate() + name + \" \" + args[0];\n      }\n    }\n    function getDate() {\n      if (exports2.inspectOpts.hideDate) {\n        return \"\";\n      }\n      return (/* @__PURE__ */ new Date()).toISOString() + \" \";\n    }\n    function log(...args) {\n      return process.stderr.write(util3.formatWithOptions(exports2.inspectOpts, ...args) + \"\\n\");\n    }\n    function save(namespaces) {\n      if (namespaces) {\n        process.env.DEBUG = namespaces;\n      } else {\n        delete process.env.DEBUG;\n      }\n    }\n    function load() {\n      return process.env.DEBUG;\n    }\n    function init(debug) {\n      debug.inspectOpts = {};\n      const keys = Object.keys(exports2.inspectOpts);\n      for (let i = 0; i < keys.length; i++) {\n        debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]];\n      }\n    }\n    module2.exports = require_common()(exports2);\n    var { formatters } = module2.exports;\n    formatters.o = function(v) {\n      this.inspectOpts.colors = this.useColors;\n      return util3.inspect(v, this.inspectOpts).split(\"\\n\").map((str) => str.trim()).join(\" \");\n    };\n    formatters.O = function(v) {\n      this.inspectOpts.colors = this.useColors;\n      return util3.inspect(v, this.inspectOpts);\n    };\n  }\n});\n\n// node_modules/debug/src/index.js\nvar require_src = __commonJS({\n  \"node_modules/debug/src/index.js\"(exports2, module2) {\n    if (typeof process === \"undefined\" || process.type === \"renderer\" || process.browser === true || process.__nwjs) {\n      module2.exports = require_browser();\n    } else {\n      module2.exports = require_node();\n    }\n  }\n});\n\n// node_modules/follow-redirects/debug.js\nvar require_debug = __commonJS({\n  \"node_modules/follow-redirects/debug.js\"(exports2, module2) {\n    var debug;\n    module2.exports = function() {\n      if (!debug) {\n        try {\n          debug = require_src()(\"follow-redirects\");\n        } catch (error) {\n        }\n        if (typeof debug !== \"function\") {\n          debug = function() {\n          };\n        }\n      }\n      debug.apply(null, arguments);\n    };\n  }\n});\n\n// node_modules/follow-redirects/index.js\nvar require_follow_redirects = __commonJS({\n  \"node_modules/follow-redirects/index.js\"(exports2, module2) {\n    var url2 = require(\"url\");\n    var URL2 = url2.URL;\n    var http3 = require(\"http\");\n    var https2 = require(\"https\");\n    var Writable = require(\"stream\").Writable;\n    var assert = require(\"assert\");\n    var debug = require_debug();\n    (function detectUnsupportedEnvironment() {\n      var looksLikeNode = typeof process !== \"undefined\";\n      var looksLikeBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n      var looksLikeV8 = isFunction3(Error.captureStackTrace);\n      if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) {\n        console.warn(\"The follow-redirects package should be excluded from browser builds.\");\n      }\n    })();\n    var useNativeURL = false;\n    try {\n      assert(new URL2(\"\"));\n    } catch (error) {\n      useNativeURL = error.code === \"ERR_INVALID_URL\";\n    }\n    var sensitiveHeaders = [\n      \"Authorization\",\n      \"Proxy-Authorization\",\n      \"Cookie\"\n    ];\n    var preservedUrlFields = [\n      \"auth\",\n      \"host\",\n      \"hostname\",\n      \"href\",\n      \"path\",\n      \"pathname\",\n      \"port\",\n      \"protocol\",\n      \"query\",\n      \"search\",\n      \"hash\"\n    ];\n    var events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\n    var eventHandlers = /* @__PURE__ */ Object.create(null);\n    events.forEach(function(event) {\n      eventHandlers[event] = function(arg1, arg2, arg3) {\n        this._redirectable.emit(event, arg1, arg2, arg3);\n      };\n    });\n    var InvalidUrlError = createErrorType(\n      \"ERR_INVALID_URL\",\n      \"Invalid URL\",\n      TypeError\n    );\n    var RedirectionError = createErrorType(\n      \"ERR_FR_REDIRECTION_FAILURE\",\n      \"Redirected request failed\"\n    );\n    var TooManyRedirectsError = createErrorType(\n      \"ERR_FR_TOO_MANY_REDIRECTS\",\n      \"Maximum number of redirects exceeded\",\n      RedirectionError\n    );\n    var MaxBodyLengthExceededError = createErrorType(\n      \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n      \"Request body larger than maxBodyLength limit\"\n    );\n    var WriteAfterEndError = createErrorType(\n      \"ERR_STREAM_WRITE_AFTER_END\",\n      \"write after end\"\n    );\n    var destroy = Writable.prototype.destroy || noop2;\n    function RedirectableRequest(options, responseCallback) {\n      Writable.call(this);\n      this._sanitizeOptions(options);\n      this._options = options;\n      this._ended = false;\n      this._ending = false;\n      this._redirectCount = 0;\n      this._redirects = [];\n      this._requestBodyLength = 0;\n      this._requestBodyBuffers = [];\n      if (responseCallback) {\n        this.on(\"response\", responseCallback);\n      }\n      var self2 = this;\n      this._onNativeResponse = function(response) {\n        try {\n          self2._processResponse(response);\n        } catch (cause) {\n          self2.emit(\"error\", cause instanceof RedirectionError ? cause : new RedirectionError({ cause }));\n        }\n      };\n      this._headerFilter = new RegExp(\"^(?:\" + sensitiveHeaders.concat(options.sensitiveHeaders).map(escapeRegex).join(\"|\") + \")$\", \"i\");\n      this._performRequest();\n    }\n    RedirectableRequest.prototype = Object.create(Writable.prototype);\n    RedirectableRequest.prototype.abort = function() {\n      destroyRequest(this._currentRequest);\n      this._currentRequest.abort();\n      this.emit(\"abort\");\n    };\n    RedirectableRequest.prototype.destroy = function(error) {\n      destroyRequest(this._currentRequest, error);\n      destroy.call(this, error);\n      return this;\n    };\n    RedirectableRequest.prototype.write = function(data, encoding, callback) {\n      if (this._ending) {\n        throw new WriteAfterEndError();\n      }\n      if (!isString2(data) && !isBuffer2(data)) {\n        throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n      }\n      if (isFunction3(encoding)) {\n        callback = encoding;\n        encoding = null;\n      }\n      if (data.length === 0) {\n        if (callback) {\n          callback();\n        }\n        return;\n      }\n      if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n        this._requestBodyLength += data.length;\n        this._requestBodyBuffers.push({ data, encoding });\n        this._currentRequest.write(data, encoding, callback);\n      } else {\n        this.emit(\"error\", new MaxBodyLengthExceededError());\n        this.abort();\n      }\n    };\n    RedirectableRequest.prototype.end = function(data, encoding, callback) {\n      if (isFunction3(data)) {\n        callback = data;\n        data = encoding = null;\n      } else if (isFunction3(encoding)) {\n        callback = encoding;\n        encoding = null;\n      }\n      if (!data) {\n        this._ended = this._ending = true;\n        this._currentRequest.end(null, null, callback);\n      } else {\n        var self2 = this;\n        var currentRequest = this._currentRequest;\n        this.write(data, encoding, function() {\n          self2._ended = true;\n          currentRequest.end(null, null, callback);\n        });\n        this._ending = true;\n      }\n    };\n    RedirectableRequest.prototype.setHeader = function(name, value) {\n      this._options.headers[name] = value;\n      this._currentRequest.setHeader(name, value);\n    };\n    RedirectableRequest.prototype.removeHeader = function(name) {\n      delete this._options.headers[name];\n      this._currentRequest.removeHeader(name);\n    };\n    RedirectableRequest.prototype.setTimeout = function(msecs, callback) {\n      var self2 = this;\n      function destroyOnTimeout(socket) {\n        socket.setTimeout(msecs);\n        socket.removeListener(\"timeout\", socket.destroy);\n        socket.addListener(\"timeout\", socket.destroy);\n      }\n      function startTimer(socket) {\n        if (self2._timeout) {\n          clearTimeout(self2._timeout);\n        }\n        self2._timeout = setTimeout(function() {\n          self2.emit(\"timeout\");\n          clearTimer();\n        }, msecs);\n        destroyOnTimeout(socket);\n      }\n      function clearTimer() {\n        if (self2._timeout) {\n          clearTimeout(self2._timeout);\n          self2._timeout = null;\n        }\n        self2.removeListener(\"abort\", clearTimer);\n        self2.removeListener(\"error\", clearTimer);\n        self2.removeListener(\"response\", clearTimer);\n        self2.removeListener(\"close\", clearTimer);\n        if (callback) {\n          self2.removeListener(\"timeout\", callback);\n        }\n        if (!self2.socket) {\n          self2._currentRequest.removeListener(\"socket\", startTimer);\n        }\n      }\n      if (callback) {\n        this.on(\"timeout\", callback);\n      }\n      if (this.socket) {\n        startTimer(this.socket);\n      } else {\n        this._currentRequest.once(\"socket\", startTimer);\n      }\n      this.on(\"socket\", destroyOnTimeout);\n      this.on(\"abort\", clearTimer);\n      this.on(\"error\", clearTimer);\n      this.on(\"response\", clearTimer);\n      this.on(\"close\", clearTimer);\n      return this;\n    };\n    [\n      \"flushHeaders\",\n      \"getHeader\",\n      \"setNoDelay\",\n      \"setSocketKeepAlive\"\n    ].forEach(function(method) {\n      RedirectableRequest.prototype[method] = function(a, b) {\n        return this._currentRequest[method](a, b);\n      };\n    });\n    [\"aborted\", \"connection\", \"socket\"].forEach(function(property) {\n      Object.defineProperty(RedirectableRequest.prototype, property, {\n        get: function() {\n          return this._currentRequest[property];\n        }\n      });\n    });\n    RedirectableRequest.prototype._sanitizeOptions = function(options) {\n      if (!options.headers) {\n        options.headers = {};\n      }\n      if (!isArray2(options.sensitiveHeaders)) {\n        options.sensitiveHeaders = [];\n      }\n      if (options.host) {\n        if (!options.hostname) {\n          options.hostname = options.host;\n        }\n        delete options.host;\n      }\n      if (!options.pathname && options.path) {\n        var searchPos = options.path.indexOf(\"?\");\n        if (searchPos < 0) {\n          options.pathname = options.path;\n        } else {\n          options.pathname = options.path.substring(0, searchPos);\n          options.search = options.path.substring(searchPos);\n        }\n      }\n    };\n    RedirectableRequest.prototype._performRequest = function() {\n      var protocol = this._options.protocol;\n      var nativeProtocol = this._options.nativeProtocols[protocol];\n      if (!nativeProtocol) {\n        throw new TypeError(\"Unsupported protocol \" + protocol);\n      }\n      if (this._options.agents) {\n        var scheme = protocol.slice(0, -1);\n        this._options.agent = this._options.agents[scheme];\n      }\n      var request = this._currentRequest = nativeProtocol.request(this._options, this._onNativeResponse);\n      request._redirectable = this;\n      for (var event of events) {\n        request.on(event, eventHandlers[event]);\n      }\n      this._currentUrl = /^\\//.test(this._options.path) ? url2.format(this._options) : (\n        // When making a request to a proxy, […]\n        // a client MUST send the target URI in absolute-form […].\n        this._options.path\n      );\n      if (this._isRedirect) {\n        var i = 0;\n        var self2 = this;\n        var buffers = this._requestBodyBuffers;\n        (function writeNext(error) {\n          if (request === self2._currentRequest) {\n            if (error) {\n              self2.emit(\"error\", error);\n            } else if (i < buffers.length) {\n              var buffer = buffers[i++];\n              if (!request.finished) {\n                request.write(buffer.data, buffer.encoding, writeNext);\n              }\n            } else if (self2._ended) {\n              request.end();\n            }\n          }\n        })();\n      }\n    };\n    RedirectableRequest.prototype._processResponse = function(response) {\n      var statusCode = response.statusCode;\n      if (this._options.trackRedirects) {\n        this._redirects.push({\n          url: this._currentUrl,\n          headers: response.headers,\n          statusCode\n        });\n      }\n      var location = response.headers.location;\n      if (!location || this._options.followRedirects === false || statusCode < 300 || statusCode >= 400) {\n        response.responseUrl = this._currentUrl;\n        response.redirects = this._redirects;\n        this.emit(\"response\", response);\n        this._requestBodyBuffers = [];\n        return;\n      }\n      destroyRequest(this._currentRequest);\n      response.destroy();\n      if (++this._redirectCount > this._options.maxRedirects) {\n        throw new TooManyRedirectsError();\n      }\n      var requestHeaders;\n      var beforeRedirect = this._options.beforeRedirect;\n      if (beforeRedirect) {\n        requestHeaders = Object.assign({\n          // The Host header was set by nativeProtocol.request\n          Host: response.req.getHeader(\"host\")\n        }, this._options.headers);\n      }\n      var method = this._options.method;\n      if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" || // RFC7231§6.4.4: The 303 (See Other) status code indicates that\n      // the server is redirecting the user agent to a different resource […]\n      // A user agent can perform a retrieval request targeting that URI\n      // (a GET or HEAD request if using HTTP) […]\n      statusCode === 303 && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n        this._options.method = \"GET\";\n        this._requestBodyBuffers = [];\n        removeMatchingHeaders(/^content-/i, this._options.headers);\n      }\n      var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n      var currentUrlParts = parseUrl2(this._currentUrl);\n      var currentHost = currentHostHeader || currentUrlParts.host;\n      var currentUrl = /^\\w+:/.test(location) ? this._currentUrl : url2.format(Object.assign(currentUrlParts, { host: currentHost }));\n      var redirectUrl = resolveUrl(location, currentUrl);\n      debug(\"redirecting to\", redirectUrl.href);\n      this._isRedirect = true;\n      spreadUrlObject(redirectUrl, this._options);\n      if (redirectUrl.protocol !== currentUrlParts.protocol && redirectUrl.protocol !== \"https:\" || redirectUrl.host !== currentHost && !isSubdomain(redirectUrl.host, currentHost)) {\n        removeMatchingHeaders(this._headerFilter, this._options.headers);\n      }\n      if (isFunction3(beforeRedirect)) {\n        var responseDetails = {\n          headers: response.headers,\n          statusCode\n        };\n        var requestDetails = {\n          url: currentUrl,\n          method,\n          headers: requestHeaders\n        };\n        beforeRedirect(this._options, responseDetails, requestDetails);\n        this._sanitizeOptions(this._options);\n      }\n      this._performRequest();\n    };\n    function wrap(protocols) {\n      var exports3 = {\n        maxRedirects: 21,\n        maxBodyLength: 10 * 1024 * 1024\n      };\n      var nativeProtocols = {};\n      Object.keys(protocols).forEach(function(scheme) {\n        var protocol = scheme + \":\";\n        var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n        var wrappedProtocol = exports3[scheme] = Object.create(nativeProtocol);\n        function request(input, options, callback) {\n          if (isURL(input)) {\n            input = spreadUrlObject(input);\n          } else if (isString2(input)) {\n            input = spreadUrlObject(parseUrl2(input));\n          } else {\n            callback = options;\n            options = validateUrl(input);\n            input = { protocol };\n          }\n          if (isFunction3(options)) {\n            callback = options;\n            options = null;\n          }\n          options = Object.assign({\n            maxRedirects: exports3.maxRedirects,\n            maxBodyLength: exports3.maxBodyLength\n          }, input, options);\n          options.nativeProtocols = nativeProtocols;\n          if (!isString2(options.host) && !isString2(options.hostname)) {\n            options.hostname = \"::1\";\n          }\n          assert.equal(options.protocol, protocol, \"protocol mismatch\");\n          debug(\"options\", options);\n          return new RedirectableRequest(options, callback);\n        }\n        function get(input, options, callback) {\n          var wrappedRequest = wrappedProtocol.request(input, options, callback);\n          wrappedRequest.end();\n          return wrappedRequest;\n        }\n        Object.defineProperties(wrappedProtocol, {\n          request: { value: request, configurable: true, enumerable: true, writable: true },\n          get: { value: get, configurable: true, enumerable: true, writable: true }\n        });\n      });\n      return exports3;\n    }\n    function noop2() {\n    }\n    function parseUrl2(input) {\n      var parsed;\n      if (useNativeURL) {\n        parsed = new URL2(input);\n      } else {\n        parsed = validateUrl(url2.parse(input));\n        if (!isString2(parsed.protocol)) {\n          throw new InvalidUrlError({ input });\n        }\n      }\n      return parsed;\n    }\n    function resolveUrl(relative, base) {\n      return useNativeURL ? new URL2(relative, base) : parseUrl2(url2.resolve(base, relative));\n    }\n    function validateUrl(input) {\n      if (/^\\[/.test(input.hostname) && !/^\\[[:0-9a-f]+\\]$/i.test(input.hostname)) {\n        throw new InvalidUrlError({ input: input.href || input });\n      }\n      if (/^\\[/.test(input.host) && !/^\\[[:0-9a-f]+\\](:\\d+)?$/i.test(input.host)) {\n        throw new InvalidUrlError({ input: input.href || input });\n      }\n      return input;\n    }\n    function spreadUrlObject(urlObject, target) {\n      var spread3 = target || {};\n      for (var key of preservedUrlFields) {\n        spread3[key] = urlObject[key];\n      }\n      if (spread3.hostname.startsWith(\"[\")) {\n        spread3.hostname = spread3.hostname.slice(1, -1);\n      }\n      if (spread3.port !== \"\") {\n        spread3.port = Number(spread3.port);\n      }\n      spread3.path = spread3.search ? spread3.pathname + spread3.search : spread3.pathname;\n      return spread3;\n    }\n    function removeMatchingHeaders(regex, headers) {\n      var lastValue;\n      for (var header in headers) {\n        if (regex.test(header)) {\n          lastValue = headers[header];\n          delete headers[header];\n        }\n      }\n      return lastValue === null || typeof lastValue === \"undefined\" ? void 0 : String(lastValue).trim();\n    }\n    function createErrorType(code, message, baseClass) {\n      function CustomError(properties) {\n        if (isFunction3(Error.captureStackTrace)) {\n          Error.captureStackTrace(this, this.constructor);\n        }\n        Object.assign(this, properties || {});\n        this.code = code;\n        this.message = this.cause ? message + \": \" + this.cause.message : message;\n      }\n      CustomError.prototype = new (baseClass || Error)();\n      Object.defineProperties(CustomError.prototype, {\n        constructor: {\n          value: CustomError,\n          enumerable: false\n        },\n        name: {\n          value: \"Error [\" + code + \"]\",\n          enumerable: false\n        }\n      });\n      return CustomError;\n    }\n    function destroyRequest(request, error) {\n      for (var event of events) {\n        request.removeListener(event, eventHandlers[event]);\n      }\n      request.on(\"error\", noop2);\n      request.destroy(error);\n    }\n    function isSubdomain(subdomain, domain) {\n      assert(isString2(subdomain) && isString2(domain));\n      var dot = subdomain.length - domain.length - 1;\n      return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n    }\n    function isArray2(value) {\n      return value instanceof Array;\n    }\n    function isString2(value) {\n      return typeof value === \"string\" || value instanceof String;\n    }\n    function isFunction3(value) {\n      return typeof value === \"function\";\n    }\n    function isBuffer2(value) {\n      return typeof value === \"object\" && \"length\" in value;\n    }\n    function isURL(value) {\n      return URL2 && value instanceof URL2;\n    }\n    function escapeRegex(regex) {\n      return regex.replace(/[\\]\\\\/()*+?.$]/g, \"\\\\$&\");\n    }\n    module2.exports = wrap({ http: http3, https: https2 });\n    module2.exports.wrap = wrap;\n  }\n});\n\n// src/index.ts\nvar index_exports = {};\n__export(index_exports, {\n  API_DOMAIN: () => API_DOMAIN,\n  API_VER: () => API_VER,\n  API_VER_WEBHOOKS: () => API_VER_WEBHOOKS,\n  Api: () => Api,\n  oAuthLink: () => oAuthLink,\n  oAuthToken: () => oAuthToken\n});\nmodule.exports = __toCommonJS(index_exports);\n\n// src/config.ts\nvar API_DOMAIN = \"https://api.figma.com\";\nvar API_VER = \"v1\";\nvar API_VER_WEBHOOKS = \"v2\";\n\n// src/utils.ts\nfunction toQueryParams(x) {\n  if (!x) return \"\";\n  return Object.entries(x).map(([k, v]) => (\n    // Keep explicit false/0 values (e.g. svg_outline_text=false), only omit undefined/null/empty-string.\n    k && v !== void 0 && v !== null && v !== \"\" && `${k}=${encodeURIComponent(v)}`\n  )).filter(Boolean).join(\"&\");\n}\nvar ApiError = class _ApiError extends Error {\n  constructor(error) {\n    super(error.message);\n    this.error = error;\n    this.name = \"ApiError\";\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, _ApiError);\n    }\n  }\n};\n\n// src/api-endpoints.ts\nfunction getFileApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}?${encodedQueryParams}`);\n}\nfunction getFileNodesApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/nodes?${encodedQueryParams}`);\n}\nfunction getFileMetaApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/meta`);\n}\nfunction getImagesApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/images/${pathParams.file_key}?${encodedQueryParams}`);\n}\nfunction getImageFillsApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/images`);\n}\nfunction getCommentsApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments`);\n}\nfunction postCommentApi(pathParams, requestBody) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments`, {\n    method: \"POST\",\n    data: requestBody\n  });\n}\nfunction deleteCommentApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments/${pathParams.comment_id}`, {\n    method: \"DELETE\",\n    data: \"\"\n  });\n}\nfunction getCommentReactionsApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments/${pathParams.comment_id}/reactions?${encodedQueryParams}`);\n}\nfunction postCommentReactionApi(pathParams, requestBody) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments/${pathParams.comment_id}/reactions`, {\n    method: \"POST\",\n    data: requestBody\n  });\n}\nfunction deleteCommentReactionsApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments/${pathParams.comment_id}/reactions`, {\n    method: \"DELETE\",\n    data: \"\"\n  });\n}\nfunction getUserMeApi() {\n  return this.request(`${API_DOMAIN}/${API_VER}/me`);\n}\nfunction getFileVersionsApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/versions`);\n}\nfunction getTeamProjectsApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/teams/${pathParams.team_id}/projects`);\n}\nfunction getProjectFilesApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/projects/${pathParams.project_id}/files?${encodedQueryParams}`);\n}\nfunction getTeamComponentsApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/teams/${pathParams.team_id}/components?${encodedQueryParams}`);\n}\nfunction getFileComponentsApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/components`);\n}\nfunction getComponentApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/components/${pathParams.key}`);\n}\nfunction getTeamComponentSetsApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/teams/${pathParams.team_id}/component_sets?${encodedQueryParams}`);\n}\nfunction getFileComponentSetsApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/component_sets`);\n}\nfunction getComponentSetApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/component_sets/${pathParams.key}`);\n}\nfunction getTeamStylesApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/teams/${pathParams.team_id}/styles?${encodedQueryParams}`);\n}\nfunction getFileStylesApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/styles`);\n}\nfunction getStyleApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/styles/${pathParams.key}`);\n}\nfunction getWebhookApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks/${pathParams.webhook_id}`);\n}\nfunction postWebhookApi(requestBody) {\n  return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks`, {\n    method: \"POST\",\n    data: requestBody\n  });\n}\nfunction putWebhookApi(pathParams, requestBody) {\n  return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks/${pathParams.webhook_id}`, {\n    method: \"PUT\",\n    data: requestBody\n  });\n}\nfunction deleteWebhookApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks/${pathParams.webhook_id}/`, {\n    method: \"DELETE\",\n    data: \"\"\n  });\n}\nfunction getTeamWebhooksApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/teams/${pathParams.team_id}/webhooks`);\n}\nfunction getWebhookRequestsApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks/${pathParams.webhook_id}/requests`);\n}\nfunction getLocalVariablesApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/variables/local`);\n}\nfunction getPublishedVariablesApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/variables/published`);\n}\nfunction postVariablesApi(pathParams, requestBody) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/variables`, {\n    method: \"POST\",\n    data: requestBody\n  });\n}\nfunction getDevResourcesApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/dev_resources`);\n}\nfunction postDevResourcesApi(requestBody) {\n  return this.request(`${API_DOMAIN}/${API_VER}/dev_resources`, {\n    method: \"POST\",\n    data: requestBody\n  });\n}\nfunction putDevResourcesApi(requestBody) {\n  return this.request(`${API_DOMAIN}/${API_VER}/dev_resources`, {\n    method: \"PUT\",\n    data: requestBody\n  });\n}\nfunction deleteDevResourcesApi(pathParams) {\n  return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/dev_resources/${pathParams.dev_resource_id}`, {\n    method: \"DELETE\",\n    data: \"\"\n  });\n}\nfunction getLibraryAnalyticsComponentActionsApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/component/actions?${encodedQueryParams}`);\n}\nfunction getLibraryAnalyticsComponentUsagesApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/component/usages?${encodedQueryParams}`);\n}\nfunction getLibraryAnalyticsStyleActionsApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/style/actions?${encodedQueryParams}`);\n}\nfunction getLibraryAnalyticsStyleUsagesApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/style/usages?${encodedQueryParams}`);\n}\nfunction getLibraryAnalyticsVariableActionsApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/variable/actions?${encodedQueryParams}`);\n}\nfunction getLibraryAnalyticsVariableUsagesApi(pathParams, queryParams) {\n  const encodedQueryParams = toQueryParams(queryParams);\n  return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/variable/usages?${encodedQueryParams}`);\n}\n\n// node_modules/axios/lib/helpers/bind.js\nfunction bind(fn, thisArg) {\n  return function wrap() {\n    return fn.apply(thisArg, arguments);\n  };\n}\n\n// node_modules/axios/lib/utils.js\nvar { toString } = Object.prototype;\nvar { getPrototypeOf } = Object;\nvar { iterator, toStringTag } = Symbol;\nvar kindOf = /* @__PURE__ */ ((cache) => (thing) => {\n  const str = toString.call(thing);\n  return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(/* @__PURE__ */ Object.create(null));\nvar kindOfTest = (type) => {\n  type = type.toLowerCase();\n  return (thing) => kindOf(thing) === type;\n};\nvar typeOfTest = (type) => (thing) => typeof thing === type;\nvar { isArray } = Array;\nvar isUndefined = typeOfTest(\"undefined\");\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\nvar isArrayBuffer = kindOfTest(\"ArrayBuffer\");\nfunction isArrayBufferView(val) {\n  let result;\n  if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = val && val.buffer && isArrayBuffer(val.buffer);\n  }\n  return result;\n}\nvar isString = typeOfTest(\"string\");\nvar isFunction = typeOfTest(\"function\");\nvar isNumber = typeOfTest(\"number\");\nvar isObject = (thing) => thing !== null && typeof thing === \"object\";\nvar isBoolean = (thing) => thing === true || thing === false;\nvar isPlainObject = (val) => {\n  if (kindOf(val) !== \"object\") {\n    return false;\n  }\n  const prototype2 = getPrototypeOf(val);\n  return (prototype2 === null || prototype2 === Object.prototype || Object.getPrototypeOf(prototype2) === null) && !(toStringTag in val) && !(iterator in val);\n};\nvar isEmptyObject = (val) => {\n  if (!isObject(val) || isBuffer(val)) {\n    return false;\n  }\n  try {\n    return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n  } catch (e) {\n    return false;\n  }\n};\nvar isDate = kindOfTest(\"Date\");\nvar isFile = kindOfTest(\"File\");\nvar isReactNativeBlob = (value) => {\n  return !!(value && typeof value.uri !== \"undefined\");\n};\nvar isReactNative = (formData) => formData && typeof formData.getParts !== \"undefined\";\nvar isBlob = kindOfTest(\"Blob\");\nvar isFileList = kindOfTest(\"FileList\");\nvar isStream = (val) => isObject(val) && isFunction(val.pipe);\nfunction getGlobal() {\n  if (typeof globalThis !== \"undefined\") return globalThis;\n  if (typeof self !== \"undefined\") return self;\n  if (typeof window !== \"undefined\") return window;\n  if (typeof global !== \"undefined\") return global;\n  return {};\n}\nvar G = getGlobal();\nvar FormDataCtor = typeof G.FormData !== \"undefined\" ? G.FormData : void 0;\nvar isFormData = (thing) => {\n  if (!thing) return false;\n  if (FormDataCtor && thing instanceof FormDataCtor) return true;\n  const proto = getPrototypeOf(thing);\n  if (!proto || proto === Object.prototype) return false;\n  if (!isFunction(thing.append)) return false;\n  const kind = kindOf(thing);\n  return kind === \"formdata\" || // detect form-data instance\n  kind === \"object\" && isFunction(thing.toString) && thing.toString() === \"[object FormData]\";\n};\nvar isURLSearchParams = kindOfTest(\"URLSearchParams\");\nvar [isReadableStream, isRequest, isResponse, isHeaders] = [\n  \"ReadableStream\",\n  \"Request\",\n  \"Response\",\n  \"Headers\"\n].map(kindOfTest);\nvar trim = (str) => {\n  return str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\n};\nfunction forEach(obj, fn, { allOwnKeys = false } = {}) {\n  if (obj === null || typeof obj === \"undefined\") {\n    return;\n  }\n  let i;\n  let l;\n  if (typeof obj !== \"object\") {\n    obj = [obj];\n  }\n  if (isArray(obj)) {\n    for (i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    if (isBuffer(obj)) {\n      return;\n    }\n    const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n    const len = keys.length;\n    let key;\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      fn.call(null, obj[key], key, obj);\n    }\n  }\n}\nfunction findKey(obj, key) {\n  if (isBuffer(obj)) {\n    return null;\n  }\n  key = key.toLowerCase();\n  const keys = Object.keys(obj);\n  let i = keys.length;\n  let _key;\n  while (i-- > 0) {\n    _key = keys[i];\n    if (key === _key.toLowerCase()) {\n      return _key;\n    }\n  }\n  return null;\n}\nvar _global = (() => {\n  if (typeof globalThis !== \"undefined\") return globalThis;\n  return typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : global;\n})();\nvar isContextDefined = (context) => !isUndefined(context) && context !== _global;\nfunction merge() {\n  const { caseless, skipUndefined } = isContextDefined(this) && this || {};\n  const result = {};\n  const assignValue = (val, key) => {\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\n      return;\n    }\n    const targetKey = caseless && findKey(result, key) || key;\n    if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n      result[targetKey] = merge(result[targetKey], val);\n    } else if (isPlainObject(val)) {\n      result[targetKey] = merge({}, val);\n    } else if (isArray(val)) {\n      result[targetKey] = val.slice();\n    } else if (!skipUndefined || !isUndefined(val)) {\n      result[targetKey] = val;\n    }\n  };\n  for (let i = 0, l = arguments.length; i < l; i++) {\n    arguments[i] && forEach(arguments[i], assignValue);\n  }\n  return result;\n}\nvar extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n  forEach(\n    b,\n    (val, key) => {\n      if (thisArg && isFunction(val)) {\n        Object.defineProperty(a, key, {\n          value: bind(val, thisArg),\n          writable: true,\n          enumerable: true,\n          configurable: true\n        });\n      } else {\n        Object.defineProperty(a, key, {\n          value: val,\n          writable: true,\n          enumerable: true,\n          configurable: true\n        });\n      }\n    },\n    { allOwnKeys }\n  );\n  return a;\n};\nvar stripBOM = (content) => {\n  if (content.charCodeAt(0) === 65279) {\n    content = content.slice(1);\n  }\n  return content;\n};\nvar inherits = (constructor, superConstructor, props, descriptors) => {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  Object.defineProperty(constructor.prototype, \"constructor\", {\n    value: constructor,\n    writable: true,\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(constructor, \"super\", {\n    value: superConstructor.prototype\n  });\n  props && Object.assign(constructor.prototype, props);\n};\nvar toFlatObject = (sourceObj, destObj, filter2, propFilter) => {\n  let props;\n  let i;\n  let prop;\n  const merged = {};\n  destObj = destObj || {};\n  if (sourceObj == null) return destObj;\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = filter2 !== false && getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter2 || filter2(sourceObj, destObj)) && sourceObj !== Object.prototype);\n  return destObj;\n};\nvar endsWith = (str, searchString, position) => {\n  str = String(str);\n  if (position === void 0 || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  const lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n};\nvar toArray = (thing) => {\n  if (!thing) return null;\n  if (isArray(thing)) return thing;\n  let i = thing.length;\n  if (!isNumber(i)) return null;\n  const arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n};\nvar isTypedArray = /* @__PURE__ */ ((TypedArray) => {\n  return (thing) => {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== \"undefined\" && getPrototypeOf(Uint8Array));\nvar forEachEntry = (obj, fn) => {\n  const generator = obj && obj[iterator];\n  const _iterator = generator.call(obj);\n  let result;\n  while ((result = _iterator.next()) && !result.done) {\n    const pair = result.value;\n    fn.call(obj, pair[0], pair[1]);\n  }\n};\nvar matchAll = (regExp, str) => {\n  let matches;\n  const arr = [];\n  while ((matches = regExp.exec(str)) !== null) {\n    arr.push(matches);\n  }\n  return arr;\n};\nvar isHTMLForm = kindOfTest(\"HTMLFormElement\");\nvar toCamelCase = (str) => {\n  return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n    return p1.toUpperCase() + p2;\n  });\n};\nvar hasOwnProperty = (({ hasOwnProperty: hasOwnProperty2 }) => (obj, prop) => hasOwnProperty2.call(obj, prop))(Object.prototype);\nvar isRegExp = kindOfTest(\"RegExp\");\nvar reduceDescriptors = (obj, reducer) => {\n  const descriptors = Object.getOwnPropertyDescriptors(obj);\n  const reducedDescriptors = {};\n  forEach(descriptors, (descriptor, name) => {\n    let ret;\n    if ((ret = reducer(descriptor, name, obj)) !== false) {\n      reducedDescriptors[name] = ret || descriptor;\n    }\n  });\n  Object.defineProperties(obj, reducedDescriptors);\n};\nvar freezeMethods = (obj) => {\n  reduceDescriptors(obj, (descriptor, name) => {\n    if (isFunction(obj) && [\"arguments\", \"caller\", \"callee\"].indexOf(name) !== -1) {\n      return false;\n    }\n    const value = obj[name];\n    if (!isFunction(value)) return;\n    descriptor.enumerable = false;\n    if (\"writable\" in descriptor) {\n      descriptor.writable = false;\n      return;\n    }\n    if (!descriptor.set) {\n      descriptor.set = () => {\n        throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n      };\n    }\n  });\n};\nvar toObjectSet = (arrayOrString, delimiter) => {\n  const obj = {};\n  const define = (arr) => {\n    arr.forEach((value) => {\n      obj[value] = true;\n    });\n  };\n  isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n  return obj;\n};\nvar noop = () => {\n};\nvar toFiniteNumber = (value, defaultValue) => {\n  return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n};\nfunction isSpecCompliantForm(thing) {\n  return !!(thing && isFunction(thing.append) && thing[toStringTag] === \"FormData\" && thing[iterator]);\n}\nvar toJSONObject = (obj) => {\n  const stack = new Array(10);\n  const visit = (source, i) => {\n    if (isObject(source)) {\n      if (stack.indexOf(source) >= 0) {\n        return;\n      }\n      if (isBuffer(source)) {\n        return source;\n      }\n      if (!(\"toJSON\" in source)) {\n        stack[i] = source;\n        const target = isArray(source) ? [] : {};\n        forEach(source, (value, key) => {\n          const reducedValue = visit(value, i + 1);\n          !isUndefined(reducedValue) && (target[key] = reducedValue);\n        });\n        stack[i] = void 0;\n        return target;\n      }\n    }\n    return source;\n  };\n  return visit(obj, 0);\n};\nvar isAsyncFn = kindOfTest(\"AsyncFunction\");\nvar isThenable = (thing) => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\nvar _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n  if (setImmediateSupported) {\n    return setImmediate;\n  }\n  return postMessageSupported ? ((token, callbacks) => {\n    _global.addEventListener(\n      \"message\",\n      ({ source, data }) => {\n        if (source === _global && data === token) {\n          callbacks.length && callbacks.shift()();\n        }\n      },\n      false\n    );\n    return (cb) => {\n      callbacks.push(cb);\n      _global.postMessage(token, \"*\");\n    };\n  })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(typeof setImmediate === \"function\", isFunction(_global.postMessage));\nvar asap = typeof queueMicrotask !== \"undefined\" ? queueMicrotask.bind(_global) : typeof process !== \"undefined\" && process.nextTick || _setImmediate;\nvar isIterable = (thing) => thing != null && isFunction(thing[iterator]);\nvar utils_default = {\n  isArray,\n  isArrayBuffer,\n  isBuffer,\n  isFormData,\n  isArrayBufferView,\n  isString,\n  isNumber,\n  isBoolean,\n  isObject,\n  isPlainObject,\n  isEmptyObject,\n  isReadableStream,\n  isRequest,\n  isResponse,\n  isHeaders,\n  isUndefined,\n  isDate,\n  isFile,\n  isReactNativeBlob,\n  isReactNative,\n  isBlob,\n  isRegExp,\n  isFunction,\n  isStream,\n  isURLSearchParams,\n  isTypedArray,\n  isFileList,\n  forEach,\n  merge,\n  extend,\n  trim,\n  stripBOM,\n  inherits,\n  toFlatObject,\n  kindOf,\n  kindOfTest,\n  endsWith,\n  toArray,\n  forEachEntry,\n  matchAll,\n  isHTMLForm,\n  hasOwnProperty,\n  hasOwnProp: hasOwnProperty,\n  // an alias to avoid ESLint no-prototype-builtins detection\n  reduceDescriptors,\n  freezeMethods,\n  toObjectSet,\n  toCamelCase,\n  noop,\n  toFiniteNumber,\n  findKey,\n  global: _global,\n  isContextDefined,\n  isSpecCompliantForm,\n  toJSONObject,\n  isAsyncFn,\n  isThenable,\n  setImmediate: _setImmediate,\n  asap,\n  isIterable\n};\n\n// node_modules/axios/lib/core/AxiosError.js\nvar AxiosError = class _AxiosError extends Error {\n  static from(error, code, config, request, response, customProps) {\n    const axiosError = new _AxiosError(error.message, code || error.code, config, request, response);\n    axiosError.cause = error;\n    axiosError.name = error.name;\n    if (error.status != null && axiosError.status == null) {\n      axiosError.status = error.status;\n    }\n    customProps && Object.assign(axiosError, customProps);\n    return axiosError;\n  }\n  /**\n   * Create an Error with the specified message, config, error code, request and response.\n   *\n   * @param {string} message The error message.\n   * @param {string} [code] The error code (for example, 'ECONNABORTED').\n   * @param {Object} [config] The config.\n   * @param {Object} [request] The request.\n   * @param {Object} [response] The response.\n   *\n   * @returns {Error} The created error.\n   */\n  constructor(message, code, config, request, response) {\n    super(message);\n    Object.defineProperty(this, \"message\", {\n      value: message,\n      enumerable: true,\n      writable: true,\n      configurable: true\n    });\n    this.name = \"AxiosError\";\n    this.isAxiosError = true;\n    code && (this.code = code);\n    config && (this.config = config);\n    request && (this.request = request);\n    if (response) {\n      this.response = response;\n      this.status = response.status;\n    }\n  }\n  toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: utils_default.toJSONObject(this.config),\n      code: this.code,\n      status: this.status\n    };\n  }\n};\nAxiosError.ERR_BAD_OPTION_VALUE = \"ERR_BAD_OPTION_VALUE\";\nAxiosError.ERR_BAD_OPTION = \"ERR_BAD_OPTION\";\nAxiosError.ECONNABORTED = \"ECONNABORTED\";\nAxiosError.ETIMEDOUT = \"ETIMEDOUT\";\nAxiosError.ERR_NETWORK = \"ERR_NETWORK\";\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = \"ERR_FR_TOO_MANY_REDIRECTS\";\nAxiosError.ERR_DEPRECATED = \"ERR_DEPRECATED\";\nAxiosError.ERR_BAD_RESPONSE = \"ERR_BAD_RESPONSE\";\nAxiosError.ERR_BAD_REQUEST = \"ERR_BAD_REQUEST\";\nAxiosError.ERR_CANCELED = \"ERR_CANCELED\";\nAxiosError.ERR_NOT_SUPPORT = \"ERR_NOT_SUPPORT\";\nAxiosError.ERR_INVALID_URL = \"ERR_INVALID_URL\";\nAxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED = \"ERR_FORM_DATA_DEPTH_EXCEEDED\";\nvar AxiosError_default = AxiosError;\n\n// node_modules/axios/lib/platform/node/classes/FormData.js\nvar import_form_data = __toESM(require_form_data(), 1);\nvar FormData_default = import_form_data.default;\n\n// node_modules/axios/lib/helpers/toFormData.js\nfunction isVisitable(thing) {\n  return utils_default.isPlainObject(thing) || utils_default.isArray(thing);\n}\nfunction removeBrackets(key) {\n  return utils_default.endsWith(key, \"[]\") ? key.slice(0, -2) : key;\n}\nfunction renderKey(path, key, dots) {\n  if (!path) return key;\n  return path.concat(key).map(function each(token, i) {\n    token = removeBrackets(token);\n    return !dots && i ? \"[\" + token + \"]\" : token;\n  }).join(dots ? \".\" : \"\");\n}\nfunction isFlatArray(arr) {\n  return utils_default.isArray(arr) && !arr.some(isVisitable);\n}\nvar predicates = utils_default.toFlatObject(utils_default, {}, null, function filter(prop) {\n  return /^is[A-Z]/.test(prop);\n});\nfunction toFormData(obj, formData, options) {\n  if (!utils_default.isObject(obj)) {\n    throw new TypeError(\"target must be an object\");\n  }\n  formData = formData || new (FormData_default || FormData)();\n  options = utils_default.toFlatObject(\n    options,\n    {\n      metaTokens: true,\n      dots: false,\n      indexes: false\n    },\n    false,\n    function defined(option, source) {\n      return !utils_default.isUndefined(source[option]);\n    }\n  );\n  const metaTokens = options.metaTokens;\n  const visitor = options.visitor || defaultVisitor;\n  const dots = options.dots;\n  const indexes = options.indexes;\n  const _Blob = options.Blob || typeof Blob !== \"undefined\" && Blob;\n  const maxDepth = options.maxDepth === void 0 ? 100 : options.maxDepth;\n  const useBlob = _Blob && utils_default.isSpecCompliantForm(formData);\n  if (!utils_default.isFunction(visitor)) {\n    throw new TypeError(\"visitor must be a function\");\n  }\n  function convertValue(value) {\n    if (value === null) return \"\";\n    if (utils_default.isDate(value)) {\n      return value.toISOString();\n    }\n    if (utils_default.isBoolean(value)) {\n      return value.toString();\n    }\n    if (!useBlob && utils_default.isBlob(value)) {\n      throw new AxiosError_default(\"Blob is not supported. Use a Buffer instead.\");\n    }\n    if (utils_default.isArrayBuffer(value) || utils_default.isTypedArray(value)) {\n      return useBlob && typeof Blob === \"function\" ? new Blob([value]) : Buffer.from(value);\n    }\n    return value;\n  }\n  function defaultVisitor(value, key, path) {\n    let arr = value;\n    if (utils_default.isReactNative(formData) && utils_default.isReactNativeBlob(value)) {\n      formData.append(renderKey(path, key, dots), convertValue(value));\n      return false;\n    }\n    if (value && !path && typeof value === \"object\") {\n      if (utils_default.endsWith(key, \"{}\")) {\n        key = metaTokens ? key : key.slice(0, -2);\n        value = JSON.stringify(value);\n      } else if (utils_default.isArray(value) && isFlatArray(value) || (utils_default.isFileList(value) || utils_default.endsWith(key, \"[]\")) && (arr = utils_default.toArray(value))) {\n        key = removeBrackets(key);\n        arr.forEach(function each(el, index) {\n          !(utils_default.isUndefined(el) || el === null) && formData.append(\n            // eslint-disable-next-line no-nested-ternary\n            indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + \"[]\",\n            convertValue(el)\n          );\n        });\n        return false;\n      }\n    }\n    if (isVisitable(value)) {\n      return true;\n    }\n    formData.append(renderKey(path, key, dots), convertValue(value));\n    return false;\n  }\n  const stack = [];\n  const exposedHelpers = Object.assign(predicates, {\n    defaultVisitor,\n    convertValue,\n    isVisitable\n  });\n  function build(value, path, depth = 0) {\n    if (utils_default.isUndefined(value)) return;\n    if (depth > maxDepth) {\n      throw new AxiosError_default(\n        \"Object is too deeply nested (\" + depth + \" levels). Max depth: \" + maxDepth,\n        AxiosError_default.ERR_FORM_DATA_DEPTH_EXCEEDED\n      );\n    }\n    if (stack.indexOf(value) !== -1) {\n      throw Error(\"Circular reference detected in \" + path.join(\".\"));\n    }\n    stack.push(value);\n    utils_default.forEach(value, function each(el, key) {\n      const result = !(utils_default.isUndefined(el) || el === null) && visitor.call(formData, el, utils_default.isString(key) ? key.trim() : key, path, exposedHelpers);\n      if (result === true) {\n        build(el, path ? path.concat(key) : [key], depth + 1);\n      }\n    });\n    stack.pop();\n  }\n  if (!utils_default.isObject(obj)) {\n    throw new TypeError(\"data must be an object\");\n  }\n  build(obj);\n  return formData;\n}\nvar toFormData_default = toFormData;\n\n// node_modules/axios/lib/helpers/AxiosURLSearchParams.js\nfunction encode(str) {\n  const charMap = {\n    \"!\": \"%21\",\n    \"'\": \"%27\",\n    \"(\": \"%28\",\n    \")\": \"%29\",\n    \"~\": \"%7E\",\n    \"%20\": \"+\"\n  };\n  return encodeURIComponent(str).replace(/[!'()~]|%20/g, function replacer(match) {\n    return charMap[match];\n  });\n}\nfunction AxiosURLSearchParams(params, options) {\n  this._pairs = [];\n  params && toFormData_default(params, this, options);\n}\nvar prototype = AxiosURLSearchParams.prototype;\nprototype.append = function append(name, value) {\n  this._pairs.push([name, value]);\n};\nprototype.toString = function toString2(encoder) {\n  const _encode = encoder ? function(value) {\n    return encoder.call(this, value, encode);\n  } : encode;\n  return this._pairs.map(function each(pair) {\n    return _encode(pair[0]) + \"=\" + _encode(pair[1]);\n  }, \"\").join(\"&\");\n};\nvar AxiosURLSearchParams_default = AxiosURLSearchParams;\n\n// node_modules/axios/lib/helpers/buildURL.js\nfunction encode2(val) {\n  return encodeURIComponent(val).replace(/%3A/gi, \":\").replace(/%24/g, \"$\").replace(/%2C/gi, \",\").replace(/%20/g, \"+\");\n}\nfunction buildURL(url2, params, options) {\n  if (!params) {\n    return url2;\n  }\n  const _encode = options && options.encode || encode2;\n  const _options = utils_default.isFunction(options) ? {\n    serialize: options\n  } : options;\n  const serializeFn = _options && _options.serialize;\n  let serializedParams;\n  if (serializeFn) {\n    serializedParams = serializeFn(params, _options);\n  } else {\n    serializedParams = utils_default.isURLSearchParams(params) ? params.toString() : new AxiosURLSearchParams_default(params, _options).toString(_encode);\n  }\n  if (serializedParams) {\n    const hashmarkIndex = url2.indexOf(\"#\");\n    if (hashmarkIndex !== -1) {\n      url2 = url2.slice(0, hashmarkIndex);\n    }\n    url2 += (url2.indexOf(\"?\") === -1 ? \"?\" : \"&\") + serializedParams;\n  }\n  return url2;\n}\n\n// node_modules/axios/lib/core/InterceptorManager.js\nvar InterceptorManager = class {\n  constructor() {\n    this.handlers = [];\n  }\n  /**\n   * Add a new interceptor to the stack\n   *\n   * @param {Function} fulfilled The function to handle `then` for a `Promise`\n   * @param {Function} rejected The function to handle `reject` for a `Promise`\n   * @param {Object} options The options for the interceptor, synchronous and runWhen\n   *\n   * @return {Number} An ID used to remove interceptor later\n   */\n  use(fulfilled, rejected, options) {\n    this.handlers.push({\n      fulfilled,\n      rejected,\n      synchronous: options ? options.synchronous : false,\n      runWhen: options ? options.runWhen : null\n    });\n    return this.handlers.length - 1;\n  }\n  /**\n   * Remove an interceptor from the stack\n   *\n   * @param {Number} id The ID that was returned by `use`\n   *\n   * @returns {void}\n   */\n  eject(id) {\n    if (this.handlers[id]) {\n      this.handlers[id] = null;\n    }\n  }\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    if (this.handlers) {\n      this.handlers = [];\n    }\n  }\n  /**\n   * Iterate over all the registered interceptors\n   *\n   * This method is particularly useful for skipping over any\n   * interceptors that may have become `null` calling `eject`.\n   *\n   * @param {Function} fn The function to call for each interceptor\n   *\n   * @returns {void}\n   */\n  forEach(fn) {\n    utils_default.forEach(this.handlers, function forEachHandler(h) {\n      if (h !== null) {\n        fn(h);\n      }\n    });\n  }\n};\nvar InterceptorManager_default = InterceptorManager;\n\n// node_modules/axios/lib/defaults/transitional.js\nvar transitional_default = {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false,\n  legacyInterceptorReqResOrdering: true\n};\n\n// node_modules/axios/lib/platform/node/index.js\nvar import_crypto = __toESM(require(\"crypto\"), 1);\n\n// node_modules/axios/lib/platform/node/classes/URLSearchParams.js\nvar import_url = __toESM(require(\"url\"), 1);\nvar URLSearchParams_default = import_url.default.URLSearchParams;\n\n// node_modules/axios/lib/platform/node/index.js\nvar ALPHA = \"abcdefghijklmnopqrstuvwxyz\";\nvar DIGIT = \"0123456789\";\nvar ALPHABET = {\n  DIGIT,\n  ALPHA,\n  ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n};\nvar generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n  let str = \"\";\n  const { length } = alphabet;\n  const randomValues = new Uint32Array(size);\n  import_crypto.default.randomFillSync(randomValues);\n  for (let i = 0; i < size; i++) {\n    str += alphabet[randomValues[i] % length];\n  }\n  return str;\n};\nvar node_default = {\n  isNode: true,\n  classes: {\n    URLSearchParams: URLSearchParams_default,\n    FormData: FormData_default,\n    Blob: typeof Blob !== \"undefined\" && Blob || null\n  },\n  ALPHABET,\n  generateString,\n  protocols: [\"http\", \"https\", \"file\", \"data\"]\n};\n\n// node_modules/axios/lib/platform/common/utils.js\nvar utils_exports = {};\n__export(utils_exports, {\n  hasBrowserEnv: () => hasBrowserEnv,\n  hasStandardBrowserEnv: () => hasStandardBrowserEnv,\n  hasStandardBrowserWebWorkerEnv: () => hasStandardBrowserWebWorkerEnv,\n  navigator: () => _navigator,\n  origin: () => origin\n});\nvar hasBrowserEnv = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nvar _navigator = typeof navigator === \"object\" && navigator || void 0;\nvar hasStandardBrowserEnv = hasBrowserEnv && (!_navigator || [\"ReactNative\", \"NativeScript\", \"NS\"].indexOf(_navigator.product) < 0);\nvar hasStandardBrowserWebWorkerEnv = (() => {\n  return typeof WorkerGlobalScope !== \"undefined\" && // eslint-disable-next-line no-undef\n  self instanceof WorkerGlobalScope && typeof self.importScripts === \"function\";\n})();\nvar origin = hasBrowserEnv && window.location.href || \"http://localhost\";\n\n// node_modules/axios/lib/platform/index.js\nvar platform_default = {\n  ...utils_exports,\n  ...node_default\n};\n\n// node_modules/axios/lib/helpers/toURLEncodedForm.js\nfunction toURLEncodedForm(data, options) {\n  return toFormData_default(data, new platform_default.classes.URLSearchParams(), {\n    visitor: function(value, key, path, helpers) {\n      if (platform_default.isNode && utils_default.isBuffer(value)) {\n        this.append(key, value.toString(\"base64\"));\n        return false;\n      }\n      return helpers.defaultVisitor.apply(this, arguments);\n    },\n    ...options\n  });\n}\n\n// node_modules/axios/lib/helpers/formDataToJSON.js\nfunction parsePropPath(name) {\n  return utils_default.matchAll(/\\w+|\\[(\\w*)]/g, name).map((match) => {\n    return match[0] === \"[]\" ? \"\" : match[1] || match[0];\n  });\n}\nfunction arrayToObject(arr) {\n  const obj = {};\n  const keys = Object.keys(arr);\n  let i;\n  const len = keys.length;\n  let key;\n  for (i = 0; i < len; i++) {\n    key = keys[i];\n    obj[key] = arr[key];\n  }\n  return obj;\n}\nfunction formDataToJSON(formData) {\n  function buildPath(path, value, target, index) {\n    let name = path[index++];\n    if (name === \"__proto__\") return true;\n    const isNumericKey = Number.isFinite(+name);\n    const isLast = index >= path.length;\n    name = !name && utils_default.isArray(target) ? target.length : name;\n    if (isLast) {\n      if (utils_default.hasOwnProp(target, name)) {\n        target[name] = utils_default.isArray(target[name]) ? target[name].concat(value) : [target[name], value];\n      } else {\n        target[name] = value;\n      }\n      return !isNumericKey;\n    }\n    if (!target[name] || !utils_default.isObject(target[name])) {\n      target[name] = [];\n    }\n    const result = buildPath(path, value, target[name], index);\n    if (result && utils_default.isArray(target[name])) {\n      target[name] = arrayToObject(target[name]);\n    }\n    return !isNumericKey;\n  }\n  if (utils_default.isFormData(formData) && utils_default.isFunction(formData.entries)) {\n    const obj = {};\n    utils_default.forEachEntry(formData, (name, value) => {\n      buildPath(parsePropPath(name), value, obj, 0);\n    });\n    return obj;\n  }\n  return null;\n}\nvar formDataToJSON_default = formDataToJSON;\n\n// node_modules/axios/lib/defaults/index.js\nvar own = (obj, key) => obj != null && utils_default.hasOwnProp(obj, key) ? obj[key] : void 0;\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils_default.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils_default.trim(rawValue);\n    } catch (e) {\n      if (e.name !== \"SyntaxError\") {\n        throw e;\n      }\n    }\n  }\n  return (encoder || JSON.stringify)(rawValue);\n}\nvar defaults = {\n  transitional: transitional_default,\n  adapter: [\"xhr\", \"http\", \"fetch\"],\n  transformRequest: [\n    function transformRequest(data, headers) {\n      const contentType = headers.getContentType() || \"\";\n      const hasJSONContentType = contentType.indexOf(\"application/json\") > -1;\n      const isObjectPayload = utils_default.isObject(data);\n      if (isObjectPayload && utils_default.isHTMLForm(data)) {\n        data = new FormData(data);\n      }\n      const isFormData2 = utils_default.isFormData(data);\n      if (isFormData2) {\n        return hasJSONContentType ? JSON.stringify(formDataToJSON_default(data)) : data;\n      }\n      if (utils_default.isArrayBuffer(data) || utils_default.isBuffer(data) || utils_default.isStream(data) || utils_default.isFile(data) || utils_default.isBlob(data) || utils_default.isReadableStream(data)) {\n        return data;\n      }\n      if (utils_default.isArrayBufferView(data)) {\n        return data.buffer;\n      }\n      if (utils_default.isURLSearchParams(data)) {\n        headers.setContentType(\"application/x-www-form-urlencoded;charset=utf-8\", false);\n        return data.toString();\n      }\n      let isFileList2;\n      if (isObjectPayload) {\n        const formSerializer = own(this, \"formSerializer\");\n        if (contentType.indexOf(\"application/x-www-form-urlencoded\") > -1) {\n          return toURLEncodedForm(data, formSerializer).toString();\n        }\n        if ((isFileList2 = utils_default.isFileList(data)) || contentType.indexOf(\"multipart/form-data\") > -1) {\n          const env = own(this, \"env\");\n          const _FormData = env && env.FormData;\n          return toFormData_default(\n            isFileList2 ? { \"files[]\": data } : data,\n            _FormData && new _FormData(),\n            formSerializer\n          );\n        }\n      }\n      if (isObjectPayload || hasJSONContentType) {\n        headers.setContentType(\"application/json\", false);\n        return stringifySafely(data);\n      }\n      return data;\n    }\n  ],\n  transformResponse: [\n    function transformResponse(data) {\n      const transitional2 = own(this, \"transitional\") || defaults.transitional;\n      const forcedJSONParsing = transitional2 && transitional2.forcedJSONParsing;\n      const responseType = own(this, \"responseType\");\n      const JSONRequested = responseType === \"json\";\n      if (utils_default.isResponse(data) || utils_default.isReadableStream(data)) {\n        return data;\n      }\n      if (data && utils_default.isString(data) && (forcedJSONParsing && !responseType || JSONRequested)) {\n        const silentJSONParsing = transitional2 && transitional2.silentJSONParsing;\n        const strictJSONParsing = !silentJSONParsing && JSONRequested;\n        try {\n          return JSON.parse(data, own(this, \"parseReviver\"));\n        } catch (e) {\n          if (strictJSONParsing) {\n            if (e.name === \"SyntaxError\") {\n              throw AxiosError_default.from(e, AxiosError_default.ERR_BAD_RESPONSE, this, null, own(this, \"response\"));\n            }\n            throw e;\n          }\n        }\n      }\n      return data;\n    }\n  ],\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n  xsrfCookieName: \"XSRF-TOKEN\",\n  xsrfHeaderName: \"X-XSRF-TOKEN\",\n  maxContentLength: -1,\n  maxBodyLength: -1,\n  env: {\n    FormData: platform_default.classes.FormData,\n    Blob: platform_default.classes.Blob\n  },\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n  headers: {\n    common: {\n      Accept: \"application/json, text/plain, */*\",\n      \"Content-Type\": void 0\n    }\n  }\n};\nutils_default.forEach([\"delete\", \"get\", \"head\", \"post\", \"put\", \"patch\"], (method) => {\n  defaults.headers[method] = {};\n});\nvar defaults_default = defaults;\n\n// node_modules/axios/lib/helpers/parseHeaders.js\nvar ignoreDuplicateOf = utils_default.toObjectSet([\n  \"age\",\n  \"authorization\",\n  \"content-length\",\n  \"content-type\",\n  \"etag\",\n  \"expires\",\n  \"from\",\n  \"host\",\n  \"if-modified-since\",\n  \"if-unmodified-since\",\n  \"last-modified\",\n  \"location\",\n  \"max-forwards\",\n  \"proxy-authorization\",\n  \"referer\",\n  \"retry-after\",\n  \"user-agent\"\n]);\nvar parseHeaders_default = (rawHeaders) => {\n  const parsed = {};\n  let key;\n  let val;\n  let i;\n  rawHeaders && rawHeaders.split(\"\\n\").forEach(function parser(line) {\n    i = line.indexOf(\":\");\n    key = line.substring(0, i).trim().toLowerCase();\n    val = line.substring(i + 1).trim();\n    if (!key || parsed[key] && ignoreDuplicateOf[key]) {\n      return;\n    }\n    if (key === \"set-cookie\") {\n      if (parsed[key]) {\n        parsed[key].push(val);\n      } else {\n        parsed[key] = [val];\n      }\n    } else {\n      parsed[key] = parsed[key] ? parsed[key] + \", \" + val : val;\n    }\n  });\n  return parsed;\n};\n\n// node_modules/axios/lib/core/AxiosHeaders.js\nvar $internals = Symbol(\"internals\");\nvar INVALID_HEADER_VALUE_CHARS_RE = /[^\\x09\\x20-\\x7E\\x80-\\xFF]/g;\nfunction trimSPorHTAB(str) {\n  let start = 0;\n  let end = str.length;\n  while (start < end) {\n    const code = str.charCodeAt(start);\n    if (code !== 9 && code !== 32) {\n      break;\n    }\n    start += 1;\n  }\n  while (end > start) {\n    const code = str.charCodeAt(end - 1);\n    if (code !== 9 && code !== 32) {\n      break;\n    }\n    end -= 1;\n  }\n  return start === 0 && end === str.length ? str : str.slice(start, end);\n}\nfunction normalizeHeader(header) {\n  return header && String(header).trim().toLowerCase();\n}\nfunction sanitizeHeaderValue(str) {\n  return trimSPorHTAB(str.replace(INVALID_HEADER_VALUE_CHARS_RE, \"\"));\n}\nfunction normalizeValue(value) {\n  if (value === false || value == null) {\n    return value;\n  }\n  return utils_default.isArray(value) ? value.map(normalizeValue) : sanitizeHeaderValue(String(value));\n}\nfunction parseTokens(str) {\n  const tokens = /* @__PURE__ */ Object.create(null);\n  const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let match;\n  while (match = tokensRE.exec(str)) {\n    tokens[match[1]] = match[2];\n  }\n  return tokens;\n}\nvar isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\nfunction matchHeaderValue(context, value, header, filter2, isHeaderNameFilter) {\n  if (utils_default.isFunction(filter2)) {\n    return filter2.call(this, value, header);\n  }\n  if (isHeaderNameFilter) {\n    value = header;\n  }\n  if (!utils_default.isString(value)) return;\n  if (utils_default.isString(filter2)) {\n    return value.indexOf(filter2) !== -1;\n  }\n  if (utils_default.isRegExp(filter2)) {\n    return filter2.test(value);\n  }\n}\nfunction formatHeader(header) {\n  return header.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n    return char.toUpperCase() + str;\n  });\n}\nfunction buildAccessors(obj, header) {\n  const accessorName = utils_default.toCamelCase(\" \" + header);\n  [\"get\", \"set\", \"has\"].forEach((methodName) => {\n    Object.defineProperty(obj, methodName + accessorName, {\n      value: function(arg1, arg2, arg3) {\n        return this[methodName].call(this, header, arg1, arg2, arg3);\n      },\n      configurable: true\n    });\n  });\n}\nvar AxiosHeaders = class {\n  constructor(headers) {\n    headers && this.set(headers);\n  }\n  set(header, valueOrRewrite, rewrite) {\n    const self2 = this;\n    function setHeader(_value, _header, _rewrite) {\n      const lHeader = normalizeHeader(_header);\n      if (!lHeader) {\n        throw new Error(\"header name must be a non-empty string\");\n      }\n      const key = utils_default.findKey(self2, lHeader);\n      if (!key || self2[key] === void 0 || _rewrite === true || _rewrite === void 0 && self2[key] !== false) {\n        self2[key || _header] = normalizeValue(_value);\n      }\n    }\n    const setHeaders = (headers, _rewrite) => utils_default.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n    if (utils_default.isPlainObject(header) || header instanceof this.constructor) {\n      setHeaders(header, valueOrRewrite);\n    } else if (utils_default.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n      setHeaders(parseHeaders_default(header), valueOrRewrite);\n    } else if (utils_default.isObject(header) && utils_default.isIterable(header)) {\n      let obj = {}, dest, key;\n      for (const entry of header) {\n        if (!utils_default.isArray(entry)) {\n          throw TypeError(\"Object iterator must return a key-value pair\");\n        }\n        obj[key = entry[0]] = (dest = obj[key]) ? utils_default.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]] : entry[1];\n      }\n      setHeaders(obj, valueOrRewrite);\n    } else {\n      header != null && setHeader(valueOrRewrite, header, rewrite);\n    }\n    return this;\n  }\n  get(header, parser) {\n    header = normalizeHeader(header);\n    if (header) {\n      const key = utils_default.findKey(this, header);\n      if (key) {\n        const value = this[key];\n        if (!parser) {\n          return value;\n        }\n        if (parser === true) {\n          return parseTokens(value);\n        }\n        if (utils_default.isFunction(parser)) {\n          return parser.call(this, value, key);\n        }\n        if (utils_default.isRegExp(parser)) {\n          return parser.exec(value);\n        }\n        throw new TypeError(\"parser must be boolean|regexp|function\");\n      }\n    }\n  }\n  has(header, matcher) {\n    header = normalizeHeader(header);\n    if (header) {\n      const key = utils_default.findKey(this, header);\n      return !!(key && this[key] !== void 0 && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n    }\n    return false;\n  }\n  delete(header, matcher) {\n    const self2 = this;\n    let deleted = false;\n    function deleteHeader(_header) {\n      _header = normalizeHeader(_header);\n      if (_header) {\n        const key = utils_default.findKey(self2, _header);\n        if (key && (!matcher || matchHeaderValue(self2, self2[key], key, matcher))) {\n          delete self2[key];\n          deleted = true;\n        }\n      }\n    }\n    if (utils_default.isArray(header)) {\n      header.forEach(deleteHeader);\n    } else {\n      deleteHeader(header);\n    }\n    return deleted;\n  }\n  clear(matcher) {\n    const keys = Object.keys(this);\n    let i = keys.length;\n    let deleted = false;\n    while (i--) {\n      const key = keys[i];\n      if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n        delete this[key];\n        deleted = true;\n      }\n    }\n    return deleted;\n  }\n  normalize(format) {\n    const self2 = this;\n    const headers = {};\n    utils_default.forEach(this, (value, header) => {\n      const key = utils_default.findKey(headers, header);\n      if (key) {\n        self2[key] = normalizeValue(value);\n        delete self2[header];\n        return;\n      }\n      const normalized = format ? formatHeader(header) : String(header).trim();\n      if (normalized !== header) {\n        delete self2[header];\n      }\n      self2[normalized] = normalizeValue(value);\n      headers[normalized] = true;\n    });\n    return this;\n  }\n  concat(...targets) {\n    return this.constructor.concat(this, ...targets);\n  }\n  toJSON(asStrings) {\n    const obj = /* @__PURE__ */ Object.create(null);\n    utils_default.forEach(this, (value, header) => {\n      value != null && value !== false && (obj[header] = asStrings && utils_default.isArray(value) ? value.join(\", \") : value);\n    });\n    return obj;\n  }\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n  toString() {\n    return Object.entries(this.toJSON()).map(([header, value]) => header + \": \" + value).join(\"\\n\");\n  }\n  getSetCookie() {\n    return this.get(\"set-cookie\") || [];\n  }\n  get [Symbol.toStringTag]() {\n    return \"AxiosHeaders\";\n  }\n  static from(thing) {\n    return thing instanceof this ? thing : new this(thing);\n  }\n  static concat(first, ...targets) {\n    const computed = new this(first);\n    targets.forEach((target) => computed.set(target));\n    return computed;\n  }\n  static accessor(header) {\n    const internals = this[$internals] = this[$internals] = {\n      accessors: {}\n    };\n    const accessors = internals.accessors;\n    const prototype2 = this.prototype;\n    function defineAccessor(_header) {\n      const lHeader = normalizeHeader(_header);\n      if (!accessors[lHeader]) {\n        buildAccessors(prototype2, _header);\n        accessors[lHeader] = true;\n      }\n    }\n    utils_default.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n    return this;\n  }\n};\nAxiosHeaders.accessor([\n  \"Content-Type\",\n  \"Content-Length\",\n  \"Accept\",\n  \"Accept-Encoding\",\n  \"User-Agent\",\n  \"Authorization\"\n]);\nutils_default.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => {\n  let mapped = key[0].toUpperCase() + key.slice(1);\n  return {\n    get: () => value,\n    set(headerValue) {\n      this[mapped] = headerValue;\n    }\n  };\n});\nutils_default.freezeMethods(AxiosHeaders);\nvar AxiosHeaders_default = AxiosHeaders;\n\n// node_modules/axios/lib/core/transformData.js\nfunction transformData(fns, response) {\n  const config = this || defaults_default;\n  const context = response || config;\n  const headers = AxiosHeaders_default.from(context.headers);\n  let data = context.data;\n  utils_default.forEach(fns, function transform(fn) {\n    data = fn.call(config, data, headers.normalize(), response ? response.status : void 0);\n  });\n  headers.normalize();\n  return data;\n}\n\n// node_modules/axios/lib/cancel/isCancel.js\nfunction isCancel(value) {\n  return !!(value && value.__CANCEL__);\n}\n\n// node_modules/axios/lib/cancel/CanceledError.js\nvar CanceledError = class extends AxiosError_default {\n  /**\n   * A `CanceledError` is an object that is thrown when an operation is canceled.\n   *\n   * @param {string=} message The message.\n   * @param {Object=} config The config.\n   * @param {Object=} request The request.\n   *\n   * @returns {CanceledError} The created error.\n   */\n  constructor(message, config, request) {\n    super(message == null ? \"canceled\" : message, AxiosError_default.ERR_CANCELED, config, request);\n    this.name = \"CanceledError\";\n    this.__CANCEL__ = true;\n  }\n};\nvar CanceledError_default = CanceledError;\n\n// node_modules/axios/lib/core/settle.js\nfunction settle(resolve, reject, response) {\n  const validateStatus2 = response.config.validateStatus;\n  if (!response.status || !validateStatus2 || validateStatus2(response.status)) {\n    resolve(response);\n  } else {\n    reject(\n      new AxiosError_default(\n        \"Request failed with status code \" + response.status,\n        [AxiosError_default.ERR_BAD_REQUEST, AxiosError_default.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n        response.config,\n        response.request,\n        response\n      )\n    );\n  }\n}\n\n// node_modules/axios/lib/helpers/isAbsoluteURL.js\nfunction isAbsoluteURL(url2) {\n  if (typeof url2 !== \"string\") {\n    return false;\n  }\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url2);\n}\n\n// node_modules/axios/lib/helpers/combineURLs.js\nfunction combineURLs(baseURL, relativeURL) {\n  return relativeURL ? baseURL.replace(/\\/?\\/$/, \"\") + \"/\" + relativeURL.replace(/^\\/+/, \"\") : baseURL;\n}\n\n// node_modules/axios/lib/core/buildFullPath.js\nfunction buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n  let isRelativeUrl = !isAbsoluteURL(requestedURL);\n  if (baseURL && (isRelativeUrl || allowAbsoluteUrls === false)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n}\n\n// node_modules/proxy-from-env/index.js\nvar DEFAULT_PORTS = {\n  ftp: 21,\n  gopher: 70,\n  http: 80,\n  https: 443,\n  ws: 80,\n  wss: 443\n};\nfunction parseUrl(urlString) {\n  try {\n    return new URL(urlString);\n  } catch {\n    return null;\n  }\n}\nfunction getProxyForUrl(url2) {\n  var parsedUrl = (typeof url2 === \"string\" ? parseUrl(url2) : url2) || {};\n  var proto = parsedUrl.protocol;\n  var hostname = parsedUrl.host;\n  var port = parsedUrl.port;\n  if (typeof hostname !== \"string\" || !hostname || typeof proto !== \"string\") {\n    return \"\";\n  }\n  proto = proto.split(\":\", 1)[0];\n  hostname = hostname.replace(/:\\d*$/, \"\");\n  port = parseInt(port) || DEFAULT_PORTS[proto] || 0;\n  if (!shouldProxy(hostname, port)) {\n    return \"\";\n  }\n  var proxy = getEnv(proto + \"_proxy\") || getEnv(\"all_proxy\");\n  if (proxy && proxy.indexOf(\"://\") === -1) {\n    proxy = proto + \"://\" + proxy;\n  }\n  return proxy;\n}\nfunction shouldProxy(hostname, port) {\n  var NO_PROXY = getEnv(\"no_proxy\").toLowerCase();\n  if (!NO_PROXY) {\n    return true;\n  }\n  if (NO_PROXY === \"*\") {\n    return false;\n  }\n  return NO_PROXY.split(/[,\\s]/).every(function(proxy) {\n    if (!proxy) {\n      return true;\n    }\n    var parsedProxy = proxy.match(/^(.+):(\\d+)$/);\n    var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;\n    var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;\n    if (parsedProxyPort && parsedProxyPort !== port) {\n      return true;\n    }\n    if (!/^[.*]/.test(parsedProxyHostname)) {\n      return hostname !== parsedProxyHostname;\n    }\n    if (parsedProxyHostname.charAt(0) === \"*\") {\n      parsedProxyHostname = parsedProxyHostname.slice(1);\n    }\n    return !hostname.endsWith(parsedProxyHostname);\n  });\n}\nfunction getEnv(key) {\n  return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || \"\";\n}\n\n// node_modules/axios/lib/adapters/http.js\nvar import_http = __toESM(require(\"http\"), 1);\nvar import_https = __toESM(require(\"https\"), 1);\nvar import_http2 = __toESM(require(\"http2\"), 1);\nvar import_util2 = __toESM(require(\"util\"), 1);\nvar import_path = require(\"path\");\nvar import_follow_redirects = __toESM(require_follow_redirects(), 1);\nvar import_zlib = __toESM(require(\"zlib\"), 1);\n\n// node_modules/axios/lib/env/data.js\nvar VERSION = \"1.15.2\";\n\n// node_modules/axios/lib/helpers/parseProtocol.js\nfunction parseProtocol(url2) {\n  const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url2);\n  return match && match[1] || \"\";\n}\n\n// node_modules/axios/lib/helpers/fromDataURI.js\nvar DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\\s\\S]*)$/;\nfunction fromDataURI(uri, asBlob, options) {\n  const _Blob = options && options.Blob || platform_default.classes.Blob;\n  const protocol = parseProtocol(uri);\n  if (asBlob === void 0 && _Blob) {\n    asBlob = true;\n  }\n  if (protocol === \"data\") {\n    uri = protocol.length ? uri.slice(protocol.length + 1) : uri;\n    const match = DATA_URL_PATTERN.exec(uri);\n    if (!match) {\n      throw new AxiosError_default(\"Invalid URL\", AxiosError_default.ERR_INVALID_URL);\n    }\n    const mime = match[1];\n    const isBase64 = match[2];\n    const body = match[3];\n    const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? \"base64\" : \"utf8\");\n    if (asBlob) {\n      if (!_Blob) {\n        throw new AxiosError_default(\"Blob is not supported\", AxiosError_default.ERR_NOT_SUPPORT);\n      }\n      return new _Blob([buffer], { type: mime });\n    }\n    return buffer;\n  }\n  throw new AxiosError_default(\"Unsupported protocol \" + protocol, AxiosError_default.ERR_NOT_SUPPORT);\n}\n\n// node_modules/axios/lib/adapters/http.js\nvar import_stream4 = __toESM(require(\"stream\"), 1);\n\n// node_modules/axios/lib/helpers/AxiosTransformStream.js\nvar import_stream = __toESM(require(\"stream\"), 1);\nvar kInternals = Symbol(\"internals\");\nvar AxiosTransformStream = class extends import_stream.default.Transform {\n  constructor(options) {\n    options = utils_default.toFlatObject(\n      options,\n      {\n        maxRate: 0,\n        chunkSize: 64 * 1024,\n        minChunkSize: 100,\n        timeWindow: 500,\n        ticksRate: 2,\n        samplesCount: 15\n      },\n      null,\n      (prop, source) => {\n        return !utils_default.isUndefined(source[prop]);\n      }\n    );\n    super({\n      readableHighWaterMark: options.chunkSize\n    });\n    const internals = this[kInternals] = {\n      timeWindow: options.timeWindow,\n      chunkSize: options.chunkSize,\n      maxRate: options.maxRate,\n      minChunkSize: options.minChunkSize,\n      bytesSeen: 0,\n      isCaptured: false,\n      notifiedBytesLoaded: 0,\n      ts: Date.now(),\n      bytes: 0,\n      onReadCallback: null\n    };\n    this.on(\"newListener\", (event) => {\n      if (event === \"progress\") {\n        if (!internals.isCaptured) {\n          internals.isCaptured = true;\n        }\n      }\n    });\n  }\n  _read(size) {\n    const internals = this[kInternals];\n    if (internals.onReadCallback) {\n      internals.onReadCallback();\n    }\n    return super._read(size);\n  }\n  _transform(chunk, encoding, callback) {\n    const internals = this[kInternals];\n    const maxRate = internals.maxRate;\n    const readableHighWaterMark = this.readableHighWaterMark;\n    const timeWindow = internals.timeWindow;\n    const divider = 1e3 / timeWindow;\n    const bytesThreshold = maxRate / divider;\n    const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0;\n    const pushChunk = (_chunk, _callback) => {\n      const bytes = Buffer.byteLength(_chunk);\n      internals.bytesSeen += bytes;\n      internals.bytes += bytes;\n      internals.isCaptured && this.emit(\"progress\", internals.bytesSeen);\n      if (this.push(_chunk)) {\n        process.nextTick(_callback);\n      } else {\n        internals.onReadCallback = () => {\n          internals.onReadCallback = null;\n          process.nextTick(_callback);\n        };\n      }\n    };\n    const transformChunk = (_chunk, _callback) => {\n      const chunkSize = Buffer.byteLength(_chunk);\n      let chunkRemainder = null;\n      let maxChunkSize = readableHighWaterMark;\n      let bytesLeft;\n      let passed = 0;\n      if (maxRate) {\n        const now = Date.now();\n        if (!internals.ts || (passed = now - internals.ts) >= timeWindow) {\n          internals.ts = now;\n          bytesLeft = bytesThreshold - internals.bytes;\n          internals.bytes = bytesLeft < 0 ? -bytesLeft : 0;\n          passed = 0;\n        }\n        bytesLeft = bytesThreshold - internals.bytes;\n      }\n      if (maxRate) {\n        if (bytesLeft <= 0) {\n          return setTimeout(() => {\n            _callback(null, _chunk);\n          }, timeWindow - passed);\n        }\n        if (bytesLeft < maxChunkSize) {\n          maxChunkSize = bytesLeft;\n        }\n      }\n      if (maxChunkSize && chunkSize > maxChunkSize && chunkSize - maxChunkSize > minChunkSize) {\n        chunkRemainder = _chunk.subarray(maxChunkSize);\n        _chunk = _chunk.subarray(0, maxChunkSize);\n      }\n      pushChunk(\n        _chunk,\n        chunkRemainder ? () => {\n          process.nextTick(_callback, null, chunkRemainder);\n        } : _callback\n      );\n    };\n    transformChunk(chunk, function transformNextChunk(err, _chunk) {\n      if (err) {\n        return callback(err);\n      }\n      if (_chunk) {\n        transformChunk(_chunk, transformNextChunk);\n      } else {\n        callback(null);\n      }\n    });\n  }\n};\nvar AxiosTransformStream_default = AxiosTransformStream;\n\n// node_modules/axios/lib/adapters/http.js\nvar import_events = require(\"events\");\n\n// node_modules/axios/lib/helpers/formDataToStream.js\nvar import_util = __toESM(require(\"util\"), 1);\nvar import_stream2 = require(\"stream\");\n\n// node_modules/axios/lib/helpers/readBlob.js\nvar { asyncIterator } = Symbol;\nvar readBlob = async function* (blob) {\n  if (blob.stream) {\n    yield* blob.stream();\n  } else if (blob.arrayBuffer) {\n    yield await blob.arrayBuffer();\n  } else if (blob[asyncIterator]) {\n    yield* blob[asyncIterator]();\n  } else {\n    yield blob;\n  }\n};\nvar readBlob_default = readBlob;\n\n// node_modules/axios/lib/helpers/formDataToStream.js\nvar BOUNDARY_ALPHABET = platform_default.ALPHABET.ALPHA_DIGIT + \"-_\";\nvar textEncoder = typeof TextEncoder === \"function\" ? new TextEncoder() : new import_util.default.TextEncoder();\nvar CRLF = \"\\r\\n\";\nvar CRLF_BYTES = textEncoder.encode(CRLF);\nvar CRLF_BYTES_COUNT = 2;\nvar FormDataPart = class {\n  constructor(name, value) {\n    const { escapeName } = this.constructor;\n    const isStringValue = utils_default.isString(value);\n    let headers = `Content-Disposition: form-data; name=\"${escapeName(name)}\"${!isStringValue && value.name ? `; filename=\"${escapeName(value.name)}\"` : \"\"}${CRLF}`;\n    if (isStringValue) {\n      value = textEncoder.encode(String(value).replace(/\\r?\\n|\\r\\n?/g, CRLF));\n    } else {\n      const safeType = String(value.type || \"application/octet-stream\").replace(/[\\r\\n]/g, \"\");\n      headers += `Content-Type: ${safeType}${CRLF}`;\n    }\n    this.headers = textEncoder.encode(headers + CRLF);\n    this.contentLength = isStringValue ? value.byteLength : value.size;\n    this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT;\n    this.name = name;\n    this.value = value;\n  }\n  async *encode() {\n    yield this.headers;\n    const { value } = this;\n    if (utils_default.isTypedArray(value)) {\n      yield value;\n    } else {\n      yield* readBlob_default(value);\n    }\n    yield CRLF_BYTES;\n  }\n  static escapeName(name) {\n    return String(name).replace(\n      /[\\r\\n\"]/g,\n      (match) => ({\n        \"\\r\": \"%0D\",\n        \"\\n\": \"%0A\",\n        '\"': \"%22\"\n      })[match]\n    );\n  }\n};\nvar formDataToStream = (form, headersHandler, options) => {\n  const {\n    tag = \"form-data-boundary\",\n    size = 25,\n    boundary = tag + \"-\" + platform_default.generateString(size, BOUNDARY_ALPHABET)\n  } = options || {};\n  if (!utils_default.isFormData(form)) {\n    throw TypeError(\"FormData instance required\");\n  }\n  if (boundary.length < 1 || boundary.length > 70) {\n    throw Error(\"boundary must be 10-70 characters long\");\n  }\n  const boundaryBytes = textEncoder.encode(\"--\" + boundary + CRLF);\n  const footerBytes = textEncoder.encode(\"--\" + boundary + \"--\" + CRLF);\n  let contentLength = footerBytes.byteLength;\n  const parts = Array.from(form.entries()).map(([name, value]) => {\n    const part = new FormDataPart(name, value);\n    contentLength += part.size;\n    return part;\n  });\n  contentLength += boundaryBytes.byteLength * parts.length;\n  contentLength = utils_default.toFiniteNumber(contentLength);\n  const computedHeaders = {\n    \"Content-Type\": `multipart/form-data; boundary=${boundary}`\n  };\n  if (Number.isFinite(contentLength)) {\n    computedHeaders[\"Content-Length\"] = contentLength;\n  }\n  headersHandler && headersHandler(computedHeaders);\n  return import_stream2.Readable.from(\n    (async function* () {\n      for (const part of parts) {\n        yield boundaryBytes;\n        yield* part.encode();\n      }\n      yield footerBytes;\n    })()\n  );\n};\nvar formDataToStream_default = formDataToStream;\n\n// node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js\nvar import_stream3 = __toESM(require(\"stream\"), 1);\nvar ZlibHeaderTransformStream = class extends import_stream3.default.Transform {\n  __transform(chunk, encoding, callback) {\n    this.push(chunk);\n    callback();\n  }\n  _transform(chunk, encoding, callback) {\n    if (chunk.length !== 0) {\n      this._transform = this.__transform;\n      if (chunk[0] !== 120) {\n        const header = Buffer.alloc(2);\n        header[0] = 120;\n        header[1] = 156;\n        this.push(header, encoding);\n      }\n    }\n    this.__transform(chunk, encoding, callback);\n  }\n};\nvar ZlibHeaderTransformStream_default = ZlibHeaderTransformStream;\n\n// node_modules/axios/lib/helpers/callbackify.js\nvar callbackify = (fn, reducer) => {\n  return utils_default.isAsyncFn(fn) ? function(...args) {\n    const cb = args.pop();\n    fn.apply(this, args).then((value) => {\n      try {\n        reducer ? cb(null, ...reducer(value)) : cb(null, value);\n      } catch (err) {\n        cb(err);\n      }\n    }, cb);\n  } : fn;\n};\nvar callbackify_default = callbackify;\n\n// node_modules/axios/lib/helpers/shouldBypassProxy.js\nvar LOOPBACK_HOSTNAMES = /* @__PURE__ */ new Set([\"localhost\"]);\nvar isIPv4Loopback = (host) => {\n  const parts = host.split(\".\");\n  if (parts.length !== 4) return false;\n  if (parts[0] !== \"127\") return false;\n  return parts.every((p) => /^\\d+$/.test(p) && Number(p) >= 0 && Number(p) <= 255);\n};\nvar isIPv6Loopback = (host) => {\n  if (host === \"::1\") return true;\n  const v4MappedDotted = host.match(/^::ffff:(\\d+\\.\\d+\\.\\d+\\.\\d+)$/i);\n  if (v4MappedDotted) return isIPv4Loopback(v4MappedDotted[1]);\n  const v4MappedHex = host.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i);\n  if (v4MappedHex) {\n    const high = parseInt(v4MappedHex[1], 16);\n    return high >= 32512 && high <= 32767;\n  }\n  const groups = host.split(\":\");\n  if (groups.length === 8) {\n    for (let i = 0; i < 7; i++) {\n      if (!/^0+$/.test(groups[i])) return false;\n    }\n    return /^0*1$/.test(groups[7]);\n  }\n  return false;\n};\nvar isLoopback = (host) => {\n  if (!host) return false;\n  if (LOOPBACK_HOSTNAMES.has(host)) return true;\n  if (isIPv4Loopback(host)) return true;\n  return isIPv6Loopback(host);\n};\nvar DEFAULT_PORTS2 = {\n  http: 80,\n  https: 443,\n  ws: 80,\n  wss: 443,\n  ftp: 21\n};\nvar parseNoProxyEntry = (entry) => {\n  let entryHost = entry;\n  let entryPort = 0;\n  if (entryHost.charAt(0) === \"[\") {\n    const bracketIndex = entryHost.indexOf(\"]\");\n    if (bracketIndex !== -1) {\n      const host = entryHost.slice(1, bracketIndex);\n      const rest = entryHost.slice(bracketIndex + 1);\n      if (rest.charAt(0) === \":\" && /^\\d+$/.test(rest.slice(1))) {\n        entryPort = Number.parseInt(rest.slice(1), 10);\n      }\n      return [host, entryPort];\n    }\n  }\n  const firstColon = entryHost.indexOf(\":\");\n  const lastColon = entryHost.lastIndexOf(\":\");\n  if (firstColon !== -1 && firstColon === lastColon && /^\\d+$/.test(entryHost.slice(lastColon + 1))) {\n    entryPort = Number.parseInt(entryHost.slice(lastColon + 1), 10);\n    entryHost = entryHost.slice(0, lastColon);\n  }\n  return [entryHost, entryPort];\n};\nvar normalizeNoProxyHost = (hostname) => {\n  if (!hostname) {\n    return hostname;\n  }\n  if (hostname.charAt(0) === \"[\" && hostname.charAt(hostname.length - 1) === \"]\") {\n    hostname = hostname.slice(1, -1);\n  }\n  return hostname.replace(/\\.+$/, \"\");\n};\nfunction shouldBypassProxy(location) {\n  let parsed;\n  try {\n    parsed = new URL(location);\n  } catch (_err) {\n    return false;\n  }\n  const noProxy = (process.env.no_proxy || process.env.NO_PROXY || \"\").toLowerCase();\n  if (!noProxy) {\n    return false;\n  }\n  if (noProxy === \"*\") {\n    return true;\n  }\n  const port = Number.parseInt(parsed.port, 10) || DEFAULT_PORTS2[parsed.protocol.split(\":\", 1)[0]] || 0;\n  const hostname = normalizeNoProxyHost(parsed.hostname.toLowerCase());\n  return noProxy.split(/[\\s,]+/).some((entry) => {\n    if (!entry) {\n      return false;\n    }\n    let [entryHost, entryPort] = parseNoProxyEntry(entry);\n    entryHost = normalizeNoProxyHost(entryHost);\n    if (!entryHost) {\n      return false;\n    }\n    if (entryPort && entryPort !== port) {\n      return false;\n    }\n    if (entryHost.charAt(0) === \"*\") {\n      entryHost = entryHost.slice(1);\n    }\n    if (entryHost.charAt(0) === \".\") {\n      return hostname.endsWith(entryHost);\n    }\n    return hostname === entryHost || isLoopback(hostname) && isLoopback(entryHost);\n  });\n}\n\n// node_modules/axios/lib/helpers/speedometer.js\nfunction speedometer(samplesCount, min) {\n  samplesCount = samplesCount || 10;\n  const bytes = new Array(samplesCount);\n  const timestamps = new Array(samplesCount);\n  let head = 0;\n  let tail = 0;\n  let firstSampleTS;\n  min = min !== void 0 ? min : 1e3;\n  return function push(chunkLength) {\n    const now = Date.now();\n    const startedAt = timestamps[tail];\n    if (!firstSampleTS) {\n      firstSampleTS = now;\n    }\n    bytes[head] = chunkLength;\n    timestamps[head] = now;\n    let i = tail;\n    let bytesCount = 0;\n    while (i !== head) {\n      bytesCount += bytes[i++];\n      i = i % samplesCount;\n    }\n    head = (head + 1) % samplesCount;\n    if (head === tail) {\n      tail = (tail + 1) % samplesCount;\n    }\n    if (now - firstSampleTS < min) {\n      return;\n    }\n    const passed = startedAt && now - startedAt;\n    return passed ? Math.round(bytesCount * 1e3 / passed) : void 0;\n  };\n}\nvar speedometer_default = speedometer;\n\n// node_modules/axios/lib/helpers/throttle.js\nfunction throttle(fn, freq) {\n  let timestamp = 0;\n  let threshold = 1e3 / freq;\n  let lastArgs;\n  let timer;\n  const invoke = (args, now = Date.now()) => {\n    timestamp = now;\n    lastArgs = null;\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    fn(...args);\n  };\n  const throttled = (...args) => {\n    const now = Date.now();\n    const passed = now - timestamp;\n    if (passed >= threshold) {\n      invoke(args, now);\n    } else {\n      lastArgs = args;\n      if (!timer) {\n        timer = setTimeout(() => {\n          timer = null;\n          invoke(lastArgs);\n        }, threshold - passed);\n      }\n    }\n  };\n  const flush = () => lastArgs && invoke(lastArgs);\n  return [throttled, flush];\n}\nvar throttle_default = throttle;\n\n// node_modules/axios/lib/helpers/progressEventReducer.js\nvar progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n  let bytesNotified = 0;\n  const _speedometer = speedometer_default(50, 250);\n  return throttle_default((e) => {\n    const rawLoaded = e.loaded;\n    const total = e.lengthComputable ? e.total : void 0;\n    const loaded = total != null ? Math.min(rawLoaded, total) : rawLoaded;\n    const progressBytes = Math.max(0, loaded - bytesNotified);\n    const rate = _speedometer(progressBytes);\n    bytesNotified = Math.max(bytesNotified, loaded);\n    const data = {\n      loaded,\n      total,\n      progress: total ? loaded / total : void 0,\n      bytes: progressBytes,\n      rate: rate ? rate : void 0,\n      estimated: rate && total ? (total - loaded) / rate : void 0,\n      event: e,\n      lengthComputable: total != null,\n      [isDownloadStream ? \"download\" : \"upload\"]: true\n    };\n    listener(data);\n  }, freq);\n};\nvar progressEventDecorator = (total, throttled) => {\n  const lengthComputable = total != null;\n  return [\n    (loaded) => throttled[0]({\n      lengthComputable,\n      total,\n      loaded\n    }),\n    throttled[1]\n  ];\n};\nvar asyncDecorator = (fn) => (...args) => utils_default.asap(() => fn(...args));\n\n// node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js\nfunction estimateDataURLDecodedBytes(url2) {\n  if (!url2 || typeof url2 !== \"string\") return 0;\n  if (!url2.startsWith(\"data:\")) return 0;\n  const comma = url2.indexOf(\",\");\n  if (comma < 0) return 0;\n  const meta = url2.slice(5, comma);\n  const body = url2.slice(comma + 1);\n  const isBase64 = /;base64/i.test(meta);\n  if (isBase64) {\n    let effectiveLen = body.length;\n    const len = body.length;\n    for (let i = 0; i < len; i++) {\n      if (body.charCodeAt(i) === 37 && i + 2 < len) {\n        const a = body.charCodeAt(i + 1);\n        const b = body.charCodeAt(i + 2);\n        const isHex = (a >= 48 && a <= 57 || a >= 65 && a <= 70 || a >= 97 && a <= 102) && (b >= 48 && b <= 57 || b >= 65 && b <= 70 || b >= 97 && b <= 102);\n        if (isHex) {\n          effectiveLen -= 2;\n          i += 2;\n        }\n      }\n    }\n    let pad = 0;\n    let idx = len - 1;\n    const tailIsPct3D = (j) => j >= 2 && body.charCodeAt(j - 2) === 37 && // '%'\n    body.charCodeAt(j - 1) === 51 && // '3'\n    (body.charCodeAt(j) === 68 || body.charCodeAt(j) === 100);\n    if (idx >= 0) {\n      if (body.charCodeAt(idx) === 61) {\n        pad++;\n        idx--;\n      } else if (tailIsPct3D(idx)) {\n        pad++;\n        idx -= 3;\n      }\n    }\n    if (pad === 1 && idx >= 0) {\n      if (body.charCodeAt(idx) === 61) {\n        pad++;\n      } else if (tailIsPct3D(idx)) {\n        pad++;\n      }\n    }\n    const groups = Math.floor(effectiveLen / 4);\n    const bytes = groups * 3 - (pad || 0);\n    return bytes > 0 ? bytes : 0;\n  }\n  return Buffer.byteLength(body, \"utf8\");\n}\n\n// node_modules/axios/lib/adapters/http.js\nvar zlibOptions = {\n  flush: import_zlib.default.constants.Z_SYNC_FLUSH,\n  finishFlush: import_zlib.default.constants.Z_SYNC_FLUSH\n};\nvar brotliOptions = {\n  flush: import_zlib.default.constants.BROTLI_OPERATION_FLUSH,\n  finishFlush: import_zlib.default.constants.BROTLI_OPERATION_FLUSH\n};\nvar isBrotliSupported = utils_default.isFunction(import_zlib.default.createBrotliDecompress);\nvar { http: httpFollow, https: httpsFollow } = import_follow_redirects.default;\nvar isHttps = /https:?/;\nvar kAxiosSocketListener = Symbol(\"axios.http.socketListener\");\nvar kAxiosCurrentReq = Symbol(\"axios.http.currentReq\");\nvar supportedProtocols = platform_default.protocols.map((protocol) => {\n  return protocol + \":\";\n});\nvar flushOnFinish = (stream4, [throttled, flush]) => {\n  stream4.on(\"end\", flush).on(\"error\", flush);\n  return throttled;\n};\nvar Http2Sessions = class {\n  constructor() {\n    this.sessions = /* @__PURE__ */ Object.create(null);\n  }\n  getSession(authority, options) {\n    options = Object.assign(\n      {\n        sessionTimeout: 1e3\n      },\n      options\n    );\n    let authoritySessions = this.sessions[authority];\n    if (authoritySessions) {\n      let len = authoritySessions.length;\n      for (let i = 0; i < len; i++) {\n        const [sessionHandle, sessionOptions] = authoritySessions[i];\n        if (!sessionHandle.destroyed && !sessionHandle.closed && import_util2.default.isDeepStrictEqual(sessionOptions, options)) {\n          return sessionHandle;\n        }\n      }\n    }\n    const session = import_http2.default.connect(authority, options);\n    let removed;\n    const removeSession = () => {\n      if (removed) {\n        return;\n      }\n      removed = true;\n      let entries = authoritySessions, len = entries.length, i = len;\n      while (i--) {\n        if (entries[i][0] === session) {\n          if (len === 1) {\n            delete this.sessions[authority];\n          } else {\n            entries.splice(i, 1);\n          }\n          if (!session.closed) {\n            session.close();\n          }\n          return;\n        }\n      }\n    };\n    const originalRequestFn = session.request;\n    const { sessionTimeout } = options;\n    if (sessionTimeout != null) {\n      let timer;\n      let streamsCount = 0;\n      session.request = function() {\n        const stream4 = originalRequestFn.apply(this, arguments);\n        streamsCount++;\n        if (timer) {\n          clearTimeout(timer);\n          timer = null;\n        }\n        stream4.once(\"close\", () => {\n          if (!--streamsCount) {\n            timer = setTimeout(() => {\n              timer = null;\n              removeSession();\n            }, sessionTimeout);\n          }\n        });\n        return stream4;\n      };\n    }\n    session.once(\"close\", removeSession);\n    let entry = [session, options];\n    authoritySessions ? authoritySessions.push(entry) : authoritySessions = this.sessions[authority] = [entry];\n    return session;\n  }\n};\nvar http2Sessions = new Http2Sessions();\nfunction dispatchBeforeRedirect(options, responseDetails) {\n  if (options.beforeRedirects.proxy) {\n    options.beforeRedirects.proxy(options);\n  }\n  if (options.beforeRedirects.config) {\n    options.beforeRedirects.config(options, responseDetails);\n  }\n}\nfunction setProxy(options, configProxy, location) {\n  let proxy = configProxy;\n  if (!proxy && proxy !== false) {\n    const proxyUrl = getProxyForUrl(location);\n    if (proxyUrl) {\n      if (!shouldBypassProxy(location)) {\n        proxy = new URL(proxyUrl);\n      }\n    }\n  }\n  if (proxy) {\n    if (proxy.username) {\n      proxy.auth = (proxy.username || \"\") + \":\" + (proxy.password || \"\");\n    }\n    if (proxy.auth) {\n      const validProxyAuth = Boolean(proxy.auth.username || proxy.auth.password);\n      if (validProxyAuth) {\n        proxy.auth = (proxy.auth.username || \"\") + \":\" + (proxy.auth.password || \"\");\n      } else if (typeof proxy.auth === \"object\") {\n        throw new AxiosError_default(\"Invalid proxy authorization\", AxiosError_default.ERR_BAD_OPTION, { proxy });\n      }\n      const base64 = Buffer.from(proxy.auth, \"utf8\").toString(\"base64\");\n      options.headers[\"Proxy-Authorization\"] = \"Basic \" + base64;\n    }\n    options.headers.host = options.hostname + (options.port ? \":\" + options.port : \"\");\n    const proxyHost = proxy.hostname || proxy.host;\n    options.hostname = proxyHost;\n    options.host = proxyHost;\n    options.port = proxy.port;\n    options.path = location;\n    if (proxy.protocol) {\n      options.protocol = proxy.protocol.includes(\":\") ? proxy.protocol : `${proxy.protocol}:`;\n    }\n  }\n  options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {\n    setProxy(redirectOptions, configProxy, redirectOptions.href);\n  };\n}\nvar isHttpAdapterSupported = typeof process !== \"undefined\" && utils_default.kindOf(process) === \"process\";\nvar wrapAsync = (asyncExecutor) => {\n  return new Promise((resolve, reject) => {\n    let onDone;\n    let isDone;\n    const done = (value, isRejected) => {\n      if (isDone) return;\n      isDone = true;\n      onDone && onDone(value, isRejected);\n    };\n    const _resolve = (value) => {\n      done(value);\n      resolve(value);\n    };\n    const _reject = (reason) => {\n      done(reason, true);\n      reject(reason);\n    };\n    asyncExecutor(_resolve, _reject, (onDoneHandler) => onDone = onDoneHandler).catch(_reject);\n  });\n};\nvar resolveFamily = ({ address, family }) => {\n  if (!utils_default.isString(address)) {\n    throw TypeError(\"address must be a string\");\n  }\n  return {\n    address,\n    family: family || (address.indexOf(\".\") < 0 ? 6 : 4)\n  };\n};\nvar buildAddressEntry = (address, family) => resolveFamily(utils_default.isObject(address) ? address : { address, family });\nvar http2Transport = {\n  request(options, cb) {\n    const authority = options.protocol + \"//\" + options.hostname + \":\" + (options.port || (options.protocol === \"https:\" ? 443 : 80));\n    const { http2Options, headers } = options;\n    const session = http2Sessions.getSession(authority, http2Options);\n    const { HTTP2_HEADER_SCHEME, HTTP2_HEADER_METHOD, HTTP2_HEADER_PATH, HTTP2_HEADER_STATUS } = import_http2.default.constants;\n    const http2Headers = {\n      [HTTP2_HEADER_SCHEME]: options.protocol.replace(\":\", \"\"),\n      [HTTP2_HEADER_METHOD]: options.method,\n      [HTTP2_HEADER_PATH]: options.path\n    };\n    utils_default.forEach(headers, (header, name) => {\n      name.charAt(0) !== \":\" && (http2Headers[name] = header);\n    });\n    const req = session.request(http2Headers);\n    req.once(\"response\", (responseHeaders) => {\n      const response = req;\n      responseHeaders = Object.assign({}, responseHeaders);\n      const status = responseHeaders[HTTP2_HEADER_STATUS];\n      delete responseHeaders[HTTP2_HEADER_STATUS];\n      response.headers = responseHeaders;\n      response.statusCode = +status;\n      cb(response);\n    });\n    return req;\n  }\n};\nvar http_default = isHttpAdapterSupported && function httpAdapter(config) {\n  return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) {\n    const own2 = (key) => utils_default.hasOwnProp(config, key) ? config[key] : void 0;\n    let data = own2(\"data\");\n    let lookup = own2(\"lookup\");\n    let family = own2(\"family\");\n    let httpVersion = own2(\"httpVersion\");\n    if (httpVersion === void 0) httpVersion = 1;\n    let http2Options = own2(\"http2Options\");\n    const responseType = own2(\"responseType\");\n    const responseEncoding = own2(\"responseEncoding\");\n    const method = config.method.toUpperCase();\n    let isDone;\n    let rejected = false;\n    let req;\n    httpVersion = +httpVersion;\n    if (Number.isNaN(httpVersion)) {\n      throw TypeError(`Invalid protocol version: '${config.httpVersion}' is not a number`);\n    }\n    if (httpVersion !== 1 && httpVersion !== 2) {\n      throw TypeError(`Unsupported protocol version '${httpVersion}'`);\n    }\n    const isHttp2 = httpVersion === 2;\n    if (lookup) {\n      const _lookup = callbackify_default(lookup, (value) => utils_default.isArray(value) ? value : [value]);\n      lookup = (hostname, opt, cb) => {\n        _lookup(hostname, opt, (err, arg0, arg1) => {\n          if (err) {\n            return cb(err);\n          }\n          const addresses = utils_default.isArray(arg0) ? arg0.map((addr) => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)];\n          opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);\n        });\n      };\n    }\n    const abortEmitter = new import_events.EventEmitter();\n    function abort(reason) {\n      try {\n        abortEmitter.emit(\n          \"abort\",\n          !reason || reason.type ? new CanceledError_default(null, config, req) : reason\n        );\n      } catch (err) {\n        console.warn(\"emit error\", err);\n      }\n    }\n    abortEmitter.once(\"abort\", reject);\n    const onFinished = () => {\n      if (config.cancelToken) {\n        config.cancelToken.unsubscribe(abort);\n      }\n      if (config.signal) {\n        config.signal.removeEventListener(\"abort\", abort);\n      }\n      abortEmitter.removeAllListeners();\n    };\n    if (config.cancelToken || config.signal) {\n      config.cancelToken && config.cancelToken.subscribe(abort);\n      if (config.signal) {\n        config.signal.aborted ? abort() : config.signal.addEventListener(\"abort\", abort);\n      }\n    }\n    onDone((response, isRejected) => {\n      isDone = true;\n      if (isRejected) {\n        rejected = true;\n        onFinished();\n        return;\n      }\n      const { data: data2 } = response;\n      if (data2 instanceof import_stream4.default.Readable || data2 instanceof import_stream4.default.Duplex) {\n        const offListeners = import_stream4.default.finished(data2, () => {\n          offListeners();\n          onFinished();\n        });\n      } else {\n        onFinished();\n      }\n    });\n    const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n    const parsed = new URL(fullPath, platform_default.hasBrowserEnv ? platform_default.origin : void 0);\n    const protocol = parsed.protocol || supportedProtocols[0];\n    if (protocol === \"data:\") {\n      if (config.maxContentLength > -1) {\n        const dataUrl = String(config.url || fullPath || \"\");\n        const estimated = estimateDataURLDecodedBytes(dataUrl);\n        if (estimated > config.maxContentLength) {\n          return reject(\n            new AxiosError_default(\n              \"maxContentLength size of \" + config.maxContentLength + \" exceeded\",\n              AxiosError_default.ERR_BAD_RESPONSE,\n              config\n            )\n          );\n        }\n      }\n      let convertedData;\n      if (method !== \"GET\") {\n        return settle(resolve, reject, {\n          status: 405,\n          statusText: \"method not allowed\",\n          headers: {},\n          config\n        });\n      }\n      try {\n        convertedData = fromDataURI(config.url, responseType === \"blob\", {\n          Blob: config.env && config.env.Blob\n        });\n      } catch (err) {\n        throw AxiosError_default.from(err, AxiosError_default.ERR_BAD_REQUEST, config);\n      }\n      if (responseType === \"text\") {\n        convertedData = convertedData.toString(responseEncoding);\n        if (!responseEncoding || responseEncoding === \"utf8\") {\n          convertedData = utils_default.stripBOM(convertedData);\n        }\n      } else if (responseType === \"stream\") {\n        convertedData = import_stream4.default.Readable.from(convertedData);\n      }\n      return settle(resolve, reject, {\n        data: convertedData,\n        status: 200,\n        statusText: \"OK\",\n        headers: new AxiosHeaders_default(),\n        config\n      });\n    }\n    if (supportedProtocols.indexOf(protocol) === -1) {\n      return reject(\n        new AxiosError_default(\"Unsupported protocol \" + protocol, AxiosError_default.ERR_BAD_REQUEST, config)\n      );\n    }\n    const headers = AxiosHeaders_default.from(config.headers).normalize();\n    headers.set(\"User-Agent\", \"axios/\" + VERSION, false);\n    const { onUploadProgress, onDownloadProgress } = config;\n    const maxRate = config.maxRate;\n    let maxUploadRate = void 0;\n    let maxDownloadRate = void 0;\n    if (utils_default.isSpecCompliantForm(data)) {\n      const userBoundary = headers.getContentType(/boundary=([-_\\w\\d]{10,70})/i);\n      data = formDataToStream_default(\n        data,\n        (formHeaders) => {\n          headers.set(formHeaders);\n        },\n        {\n          tag: `axios-${VERSION}-boundary`,\n          boundary: userBoundary && userBoundary[1] || void 0\n        }\n      );\n    } else if (utils_default.isFormData(data) && utils_default.isFunction(data.getHeaders) && data.getHeaders !== Object.prototype.getHeaders) {\n      headers.set(data.getHeaders());\n      if (!headers.hasContentLength()) {\n        try {\n          const knownLength = await import_util2.default.promisify(data.getLength).call(data);\n          Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength);\n        } catch (e) {\n        }\n      }\n    } else if (utils_default.isBlob(data) || utils_default.isFile(data)) {\n      data.size && headers.setContentType(data.type || \"application/octet-stream\");\n      headers.setContentLength(data.size || 0);\n      data = import_stream4.default.Readable.from(readBlob_default(data));\n    } else if (data && !utils_default.isStream(data)) {\n      if (Buffer.isBuffer(data)) {\n      } else if (utils_default.isArrayBuffer(data)) {\n        data = Buffer.from(new Uint8Array(data));\n      } else if (utils_default.isString(data)) {\n        data = Buffer.from(data, \"utf-8\");\n      } else {\n        return reject(\n          new AxiosError_default(\n            \"Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream\",\n            AxiosError_default.ERR_BAD_REQUEST,\n            config\n          )\n        );\n      }\n      headers.setContentLength(data.length, false);\n      if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {\n        return reject(\n          new AxiosError_default(\n            \"Request body larger than maxBodyLength limit\",\n            AxiosError_default.ERR_BAD_REQUEST,\n            config\n          )\n        );\n      }\n    }\n    const contentLength = utils_default.toFiniteNumber(headers.getContentLength());\n    if (utils_default.isArray(maxRate)) {\n      maxUploadRate = maxRate[0];\n      maxDownloadRate = maxRate[1];\n    } else {\n      maxUploadRate = maxDownloadRate = maxRate;\n    }\n    if (data && (onUploadProgress || maxUploadRate)) {\n      if (!utils_default.isStream(data)) {\n        data = import_stream4.default.Readable.from(data, { objectMode: false });\n      }\n      data = import_stream4.default.pipeline(\n        [\n          data,\n          new AxiosTransformStream_default({\n            maxRate: utils_default.toFiniteNumber(maxUploadRate)\n          })\n        ],\n        utils_default.noop\n      );\n      onUploadProgress && data.on(\n        \"progress\",\n        flushOnFinish(\n          data,\n          progressEventDecorator(\n            contentLength,\n            progressEventReducer(asyncDecorator(onUploadProgress), false, 3)\n          )\n        )\n      );\n    }\n    let auth = void 0;\n    const configAuth = own2(\"auth\");\n    if (configAuth) {\n      const username = configAuth.username || \"\";\n      const password = configAuth.password || \"\";\n      auth = username + \":\" + password;\n    }\n    if (!auth && parsed.username) {\n      const urlUsername = parsed.username;\n      const urlPassword = parsed.password;\n      auth = urlUsername + \":\" + urlPassword;\n    }\n    auth && headers.delete(\"authorization\");\n    let path;\n    try {\n      path = buildURL(\n        parsed.pathname + parsed.search,\n        config.params,\n        config.paramsSerializer\n      ).replace(/^\\?/, \"\");\n    } catch (err) {\n      const customErr = new Error(err.message);\n      customErr.config = config;\n      customErr.url = config.url;\n      customErr.exists = true;\n      return reject(customErr);\n    }\n    headers.set(\n      \"Accept-Encoding\",\n      \"gzip, compress, deflate\" + (isBrotliSupported ? \", br\" : \"\"),\n      false\n    );\n    const options = Object.assign(/* @__PURE__ */ Object.create(null), {\n      path,\n      method,\n      headers: headers.toJSON(),\n      agents: { http: config.httpAgent, https: config.httpsAgent },\n      auth,\n      protocol,\n      family,\n      beforeRedirect: dispatchBeforeRedirect,\n      beforeRedirects: /* @__PURE__ */ Object.create(null),\n      http2Options\n    });\n    !utils_default.isUndefined(lookup) && (options.lookup = lookup);\n    if (config.socketPath) {\n      if (typeof config.socketPath !== \"string\") {\n        return reject(new AxiosError_default(\n          \"socketPath must be a string\",\n          AxiosError_default.ERR_BAD_OPTION_VALUE,\n          config\n        ));\n      }\n      if (config.allowedSocketPaths != null) {\n        const allowed = Array.isArray(config.allowedSocketPaths) ? config.allowedSocketPaths : [config.allowedSocketPaths];\n        const resolvedSocket = (0, import_path.resolve)(config.socketPath);\n        const isAllowed = allowed.some(\n          (entry) => typeof entry === \"string\" && (0, import_path.resolve)(entry) === resolvedSocket\n        );\n        if (!isAllowed) {\n          return reject(new AxiosError_default(\n            `socketPath \"${config.socketPath}\" is not permitted by allowedSocketPaths`,\n            AxiosError_default.ERR_BAD_OPTION_VALUE,\n            config\n          ));\n        }\n      }\n      options.socketPath = config.socketPath;\n    } else {\n      options.hostname = parsed.hostname.startsWith(\"[\") ? parsed.hostname.slice(1, -1) : parsed.hostname;\n      options.port = parsed.port;\n      setProxy(\n        options,\n        config.proxy,\n        protocol + \"//\" + parsed.hostname + (parsed.port ? \":\" + parsed.port : \"\") + options.path\n      );\n    }\n    let transport;\n    const isHttpsRequest = isHttps.test(options.protocol);\n    options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n    if (isHttp2) {\n      transport = http2Transport;\n    } else {\n      const configTransport = own2(\"transport\");\n      if (configTransport) {\n        transport = configTransport;\n      } else if (config.maxRedirects === 0) {\n        transport = isHttpsRequest ? import_https.default : import_http.default;\n      } else {\n        if (config.maxRedirects) {\n          options.maxRedirects = config.maxRedirects;\n        }\n        const configBeforeRedirect = own2(\"beforeRedirect\");\n        if (configBeforeRedirect) {\n          options.beforeRedirects.config = configBeforeRedirect;\n        }\n        transport = isHttpsRequest ? httpsFollow : httpFollow;\n      }\n    }\n    if (config.maxBodyLength > -1) {\n      options.maxBodyLength = config.maxBodyLength;\n    } else {\n      options.maxBodyLength = Infinity;\n    }\n    options.insecureHTTPParser = Boolean(own2(\"insecureHTTPParser\"));\n    req = transport.request(options, function handleResponse(res) {\n      if (req.destroyed) return;\n      const streams = [res];\n      const responseLength = utils_default.toFiniteNumber(res.headers[\"content-length\"]);\n      if (onDownloadProgress || maxDownloadRate) {\n        const transformStream = new AxiosTransformStream_default({\n          maxRate: utils_default.toFiniteNumber(maxDownloadRate)\n        });\n        onDownloadProgress && transformStream.on(\n          \"progress\",\n          flushOnFinish(\n            transformStream,\n            progressEventDecorator(\n              responseLength,\n              progressEventReducer(asyncDecorator(onDownloadProgress), true, 3)\n            )\n          )\n        );\n        streams.push(transformStream);\n      }\n      let responseStream = res;\n      const lastRequest = res.req || req;\n      if (config.decompress !== false && res.headers[\"content-encoding\"]) {\n        if (method === \"HEAD\" || res.statusCode === 204) {\n          delete res.headers[\"content-encoding\"];\n        }\n        switch ((res.headers[\"content-encoding\"] || \"\").toLowerCase()) {\n          /*eslint default-case:0*/\n          case \"gzip\":\n          case \"x-gzip\":\n          case \"compress\":\n          case \"x-compress\":\n            streams.push(import_zlib.default.createUnzip(zlibOptions));\n            delete res.headers[\"content-encoding\"];\n            break;\n          case \"deflate\":\n            streams.push(new ZlibHeaderTransformStream_default());\n            streams.push(import_zlib.default.createUnzip(zlibOptions));\n            delete res.headers[\"content-encoding\"];\n            break;\n          case \"br\":\n            if (isBrotliSupported) {\n              streams.push(import_zlib.default.createBrotliDecompress(brotliOptions));\n              delete res.headers[\"content-encoding\"];\n            }\n        }\n      }\n      responseStream = streams.length > 1 ? import_stream4.default.pipeline(streams, utils_default.noop) : streams[0];\n      const response = {\n        status: res.statusCode,\n        statusText: res.statusMessage,\n        headers: new AxiosHeaders_default(res.headers),\n        config,\n        request: lastRequest\n      };\n      if (responseType === \"stream\") {\n        if (config.maxContentLength > -1) {\n          const limit = config.maxContentLength;\n          const source = responseStream;\n          async function* enforceMaxContentLength() {\n            let totalResponseBytes = 0;\n            for await (const chunk of source) {\n              totalResponseBytes += chunk.length;\n              if (totalResponseBytes > limit) {\n                throw new AxiosError_default(\n                  \"maxContentLength size of \" + limit + \" exceeded\",\n                  AxiosError_default.ERR_BAD_RESPONSE,\n                  config,\n                  lastRequest\n                );\n              }\n              yield chunk;\n            }\n          }\n          responseStream = import_stream4.default.Readable.from(enforceMaxContentLength(), {\n            objectMode: false\n          });\n        }\n        response.data = responseStream;\n        settle(resolve, reject, response);\n      } else {\n        const responseBuffer = [];\n        let totalResponseBytes = 0;\n        responseStream.on(\"data\", function handleStreamData(chunk) {\n          responseBuffer.push(chunk);\n          totalResponseBytes += chunk.length;\n          if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n            rejected = true;\n            responseStream.destroy();\n            abort(\n              new AxiosError_default(\n                \"maxContentLength size of \" + config.maxContentLength + \" exceeded\",\n                AxiosError_default.ERR_BAD_RESPONSE,\n                config,\n                lastRequest\n              )\n            );\n          }\n        });\n        responseStream.on(\"aborted\", function handlerStreamAborted() {\n          if (rejected) {\n            return;\n          }\n          const err = new AxiosError_default(\n            \"stream has been aborted\",\n            AxiosError_default.ERR_BAD_RESPONSE,\n            config,\n            lastRequest\n          );\n          responseStream.destroy(err);\n          reject(err);\n        });\n        responseStream.on(\"error\", function handleStreamError(err) {\n          if (req.destroyed) return;\n          reject(AxiosError_default.from(err, null, config, lastRequest));\n        });\n        responseStream.on(\"end\", function handleStreamEnd() {\n          try {\n            let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);\n            if (responseType !== \"arraybuffer\") {\n              responseData = responseData.toString(responseEncoding);\n              if (!responseEncoding || responseEncoding === \"utf8\") {\n                responseData = utils_default.stripBOM(responseData);\n              }\n            }\n            response.data = responseData;\n          } catch (err) {\n            return reject(AxiosError_default.from(err, null, config, response.request, response));\n          }\n          settle(resolve, reject, response);\n        });\n      }\n      abortEmitter.once(\"abort\", (err) => {\n        if (!responseStream.destroyed) {\n          responseStream.emit(\"error\", err);\n          responseStream.destroy();\n        }\n      });\n    });\n    abortEmitter.once(\"abort\", (err) => {\n      if (req.close) {\n        req.close();\n      } else {\n        req.destroy(err);\n      }\n    });\n    req.on(\"error\", function handleRequestError(err) {\n      reject(AxiosError_default.from(err, null, config, req));\n    });\n    req.on(\"socket\", function handleRequestSocket(socket) {\n      socket.setKeepAlive(true, 1e3 * 60);\n      if (!socket[kAxiosSocketListener]) {\n        socket.on(\"error\", function handleSocketError(err) {\n          const current = socket[kAxiosCurrentReq];\n          if (current && !current.destroyed) {\n            current.destroy(err);\n          }\n        });\n        socket[kAxiosSocketListener] = true;\n      }\n      socket[kAxiosCurrentReq] = req;\n      req.once(\"close\", function clearCurrentReq() {\n        if (socket[kAxiosCurrentReq] === req) {\n          socket[kAxiosCurrentReq] = null;\n        }\n      });\n    });\n    if (config.timeout) {\n      const timeout = parseInt(config.timeout, 10);\n      if (Number.isNaN(timeout)) {\n        abort(\n          new AxiosError_default(\n            \"error trying to parse `config.timeout` to int\",\n            AxiosError_default.ERR_BAD_OPTION_VALUE,\n            config,\n            req\n          )\n        );\n        return;\n      }\n      req.setTimeout(timeout, function handleRequestTimeout() {\n        if (isDone) return;\n        let timeoutErrorMessage = config.timeout ? \"timeout of \" + config.timeout + \"ms exceeded\" : \"timeout exceeded\";\n        const transitional2 = config.transitional || transitional_default;\n        if (config.timeoutErrorMessage) {\n          timeoutErrorMessage = config.timeoutErrorMessage;\n        }\n        abort(\n          new AxiosError_default(\n            timeoutErrorMessage,\n            transitional2.clarifyTimeoutError ? AxiosError_default.ETIMEDOUT : AxiosError_default.ECONNABORTED,\n            config,\n            req\n          )\n        );\n      });\n    } else {\n      req.setTimeout(0);\n    }\n    if (utils_default.isStream(data)) {\n      let ended = false;\n      let errored = false;\n      data.on(\"end\", () => {\n        ended = true;\n      });\n      data.once(\"error\", (err) => {\n        errored = true;\n        req.destroy(err);\n      });\n      data.on(\"close\", () => {\n        if (!ended && !errored) {\n          abort(new CanceledError_default(\"Request stream has been aborted\", config, req));\n        }\n      });\n      let uploadStream = data;\n      if (config.maxBodyLength > -1 && config.maxRedirects === 0) {\n        const limit = config.maxBodyLength;\n        let bytesSent = 0;\n        uploadStream = import_stream4.default.pipeline(\n          [\n            data,\n            new import_stream4.default.Transform({\n              transform(chunk, _enc, cb) {\n                bytesSent += chunk.length;\n                if (bytesSent > limit) {\n                  return cb(\n                    new AxiosError_default(\n                      \"Request body larger than maxBodyLength limit\",\n                      AxiosError_default.ERR_BAD_REQUEST,\n                      config,\n                      req\n                    )\n                  );\n                }\n                cb(null, chunk);\n              }\n            })\n          ],\n          utils_default.noop\n        );\n        uploadStream.on(\"error\", (err) => {\n          if (!req.destroyed) req.destroy(err);\n        });\n      }\n      uploadStream.pipe(req);\n    } else {\n      data && req.write(data);\n      req.end();\n    }\n  });\n};\n\n// node_modules/axios/lib/helpers/isURLSameOrigin.js\nvar isURLSameOrigin_default = platform_default.hasStandardBrowserEnv ? /* @__PURE__ */ ((origin2, isMSIE) => (url2) => {\n  url2 = new URL(url2, platform_default.origin);\n  return origin2.protocol === url2.protocol && origin2.host === url2.host && (isMSIE || origin2.port === url2.port);\n})(\n  new URL(platform_default.origin),\n  platform_default.navigator && /(msie|trident)/i.test(platform_default.navigator.userAgent)\n) : () => true;\n\n// node_modules/axios/lib/helpers/cookies.js\nvar cookies_default = platform_default.hasStandardBrowserEnv ? (\n  // Standard browser envs support document.cookie\n  {\n    write(name, value, expires, path, domain, secure, sameSite) {\n      if (typeof document === \"undefined\") return;\n      const cookie = [`${name}=${encodeURIComponent(value)}`];\n      if (utils_default.isNumber(expires)) {\n        cookie.push(`expires=${new Date(expires).toUTCString()}`);\n      }\n      if (utils_default.isString(path)) {\n        cookie.push(`path=${path}`);\n      }\n      if (utils_default.isString(domain)) {\n        cookie.push(`domain=${domain}`);\n      }\n      if (secure === true) {\n        cookie.push(\"secure\");\n      }\n      if (utils_default.isString(sameSite)) {\n        cookie.push(`SameSite=${sameSite}`);\n      }\n      document.cookie = cookie.join(\"; \");\n    },\n    read(name) {\n      if (typeof document === \"undefined\") return null;\n      const match = document.cookie.match(new RegExp(\"(?:^|; )\" + name + \"=([^;]*)\"));\n      return match ? decodeURIComponent(match[1]) : null;\n    },\n    remove(name) {\n      this.write(name, \"\", Date.now() - 864e5, \"/\");\n    }\n  }\n) : (\n  // Non-standard browser env (web workers, react-native) lack needed support.\n  {\n    write() {\n    },\n    read() {\n      return null;\n    },\n    remove() {\n    }\n  }\n);\n\n// node_modules/axios/lib/core/mergeConfig.js\nvar headersToObject = (thing) => thing instanceof AxiosHeaders_default ? { ...thing } : thing;\nfunction mergeConfig(config1, config2) {\n  config2 = config2 || {};\n  const config = /* @__PURE__ */ Object.create(null);\n  Object.defineProperty(config, \"hasOwnProperty\", {\n    value: Object.prototype.hasOwnProperty,\n    enumerable: false,\n    writable: true,\n    configurable: true\n  });\n  function getMergedValue(target, source, prop, caseless) {\n    if (utils_default.isPlainObject(target) && utils_default.isPlainObject(source)) {\n      return utils_default.merge.call({ caseless }, target, source);\n    } else if (utils_default.isPlainObject(source)) {\n      return utils_default.merge({}, source);\n    } else if (utils_default.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n  function mergeDeepProperties(a, b, prop, caseless) {\n    if (!utils_default.isUndefined(b)) {\n      return getMergedValue(a, b, prop, caseless);\n    } else if (!utils_default.isUndefined(a)) {\n      return getMergedValue(void 0, a, prop, caseless);\n    }\n  }\n  function valueFromConfig2(a, b) {\n    if (!utils_default.isUndefined(b)) {\n      return getMergedValue(void 0, b);\n    }\n  }\n  function defaultToConfig2(a, b) {\n    if (!utils_default.isUndefined(b)) {\n      return getMergedValue(void 0, b);\n    } else if (!utils_default.isUndefined(a)) {\n      return getMergedValue(void 0, a);\n    }\n  }\n  function mergeDirectKeys(a, b, prop) {\n    if (utils_default.hasOwnProp(config2, prop)) {\n      return getMergedValue(a, b);\n    } else if (utils_default.hasOwnProp(config1, prop)) {\n      return getMergedValue(void 0, a);\n    }\n  }\n  const mergeMap = {\n    url: valueFromConfig2,\n    method: valueFromConfig2,\n    data: valueFromConfig2,\n    baseURL: defaultToConfig2,\n    transformRequest: defaultToConfig2,\n    transformResponse: defaultToConfig2,\n    paramsSerializer: defaultToConfig2,\n    timeout: defaultToConfig2,\n    timeoutMessage: defaultToConfig2,\n    withCredentials: defaultToConfig2,\n    withXSRFToken: defaultToConfig2,\n    adapter: defaultToConfig2,\n    responseType: defaultToConfig2,\n    xsrfCookieName: defaultToConfig2,\n    xsrfHeaderName: defaultToConfig2,\n    onUploadProgress: defaultToConfig2,\n    onDownloadProgress: defaultToConfig2,\n    decompress: defaultToConfig2,\n    maxContentLength: defaultToConfig2,\n    maxBodyLength: defaultToConfig2,\n    beforeRedirect: defaultToConfig2,\n    transport: defaultToConfig2,\n    httpAgent: defaultToConfig2,\n    httpsAgent: defaultToConfig2,\n    cancelToken: defaultToConfig2,\n    socketPath: defaultToConfig2,\n    allowedSocketPaths: defaultToConfig2,\n    responseEncoding: defaultToConfig2,\n    validateStatus: mergeDirectKeys,\n    headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)\n  };\n  utils_default.forEach(Object.keys({ ...config1, ...config2 }), function computeConfigValue(prop) {\n    if (prop === \"__proto__\" || prop === \"constructor\" || prop === \"prototype\") return;\n    const merge2 = utils_default.hasOwnProp(mergeMap, prop) ? mergeMap[prop] : mergeDeepProperties;\n    const a = utils_default.hasOwnProp(config1, prop) ? config1[prop] : void 0;\n    const b = utils_default.hasOwnProp(config2, prop) ? config2[prop] : void 0;\n    const configValue = merge2(a, b, prop);\n    utils_default.isUndefined(configValue) && merge2 !== mergeDirectKeys || (config[prop] = configValue);\n  });\n  return config;\n}\n\n// node_modules/axios/lib/helpers/resolveConfig.js\nvar resolveConfig_default = (config) => {\n  const newConfig = mergeConfig({}, config);\n  const own2 = (key) => utils_default.hasOwnProp(newConfig, key) ? newConfig[key] : void 0;\n  const data = own2(\"data\");\n  let withXSRFToken = own2(\"withXSRFToken\");\n  const xsrfHeaderName = own2(\"xsrfHeaderName\");\n  const xsrfCookieName = own2(\"xsrfCookieName\");\n  let headers = own2(\"headers\");\n  const auth = own2(\"auth\");\n  const baseURL = own2(\"baseURL\");\n  const allowAbsoluteUrls = own2(\"allowAbsoluteUrls\");\n  const url2 = own2(\"url\");\n  newConfig.headers = headers = AxiosHeaders_default.from(headers);\n  newConfig.url = buildURL(\n    buildFullPath(baseURL, url2, allowAbsoluteUrls),\n    config.params,\n    config.paramsSerializer\n  );\n  if (auth) {\n    headers.set(\n      \"Authorization\",\n      \"Basic \" + btoa(\n        (auth.username || \"\") + \":\" + (auth.password ? unescape(encodeURIComponent(auth.password)) : \"\")\n      )\n    );\n  }\n  if (utils_default.isFormData(data)) {\n    if (platform_default.hasStandardBrowserEnv || platform_default.hasStandardBrowserWebWorkerEnv) {\n      headers.setContentType(void 0);\n    } else if (utils_default.isFunction(data.getHeaders)) {\n      const formHeaders = data.getHeaders();\n      const allowedHeaders = [\"content-type\", \"content-length\"];\n      Object.entries(formHeaders).forEach(([key, val]) => {\n        if (allowedHeaders.includes(key.toLowerCase())) {\n          headers.set(key, val);\n        }\n      });\n    }\n  }\n  if (platform_default.hasStandardBrowserEnv) {\n    if (utils_default.isFunction(withXSRFToken)) {\n      withXSRFToken = withXSRFToken(newConfig);\n    }\n    const shouldSendXSRF = withXSRFToken === true || withXSRFToken == null && isURLSameOrigin_default(newConfig.url);\n    if (shouldSendXSRF) {\n      const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies_default.read(xsrfCookieName);\n      if (xsrfValue) {\n        headers.set(xsrfHeaderName, xsrfValue);\n      }\n    }\n  }\n  return newConfig;\n};\n\n// node_modules/axios/lib/adapters/xhr.js\nvar isXHRAdapterSupported = typeof XMLHttpRequest !== \"undefined\";\nvar xhr_default = isXHRAdapterSupported && function(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    const _config = resolveConfig_default(config);\n    let requestData = _config.data;\n    const requestHeaders = AxiosHeaders_default.from(_config.headers).normalize();\n    let { responseType, onUploadProgress, onDownloadProgress } = _config;\n    let onCanceled;\n    let uploadThrottled, downloadThrottled;\n    let flushUpload, flushDownload;\n    function done() {\n      flushUpload && flushUpload();\n      flushDownload && flushDownload();\n      _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n      _config.signal && _config.signal.removeEventListener(\"abort\", onCanceled);\n    }\n    let request = new XMLHttpRequest();\n    request.open(_config.method.toUpperCase(), _config.url, true);\n    request.timeout = _config.timeout;\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      const responseHeaders = AxiosHeaders_default.from(\n        \"getAllResponseHeaders\" in request && request.getAllResponseHeaders()\n      );\n      const responseData = !responseType || responseType === \"text\" || responseType === \"json\" ? request.responseText : request.response;\n      const response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config,\n        request\n      };\n      settle(\n        function _resolve(value) {\n          resolve(value);\n          done();\n        },\n        function _reject(err) {\n          reject(err);\n          done();\n        },\n        response\n      );\n      request = null;\n    }\n    if (\"onloadend\" in request) {\n      request.onloadend = onloadend;\n    } else {\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf(\"file:\") === 0)) {\n          return;\n        }\n        setTimeout(onloadend);\n      };\n    }\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n      reject(new AxiosError_default(\"Request aborted\", AxiosError_default.ECONNABORTED, config, request));\n      request = null;\n    };\n    request.onerror = function handleError(event) {\n      const msg = event && event.message ? event.message : \"Network Error\";\n      const err = new AxiosError_default(msg, AxiosError_default.ERR_NETWORK, config, request);\n      err.event = event || null;\n      reject(err);\n      request = null;\n    };\n    request.ontimeout = function handleTimeout() {\n      let timeoutErrorMessage = _config.timeout ? \"timeout of \" + _config.timeout + \"ms exceeded\" : \"timeout exceeded\";\n      const transitional2 = _config.transitional || transitional_default;\n      if (_config.timeoutErrorMessage) {\n        timeoutErrorMessage = _config.timeoutErrorMessage;\n      }\n      reject(\n        new AxiosError_default(\n          timeoutErrorMessage,\n          transitional2.clarifyTimeoutError ? AxiosError_default.ETIMEDOUT : AxiosError_default.ECONNABORTED,\n          config,\n          request\n        )\n      );\n      request = null;\n    };\n    requestData === void 0 && requestHeaders.setContentType(null);\n    if (\"setRequestHeader\" in request) {\n      utils_default.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n        request.setRequestHeader(key, val);\n      });\n    }\n    if (!utils_default.isUndefined(_config.withCredentials)) {\n      request.withCredentials = !!_config.withCredentials;\n    }\n    if (responseType && responseType !== \"json\") {\n      request.responseType = _config.responseType;\n    }\n    if (onDownloadProgress) {\n      [downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true);\n      request.addEventListener(\"progress\", downloadThrottled);\n    }\n    if (onUploadProgress && request.upload) {\n      [uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress);\n      request.upload.addEventListener(\"progress\", uploadThrottled);\n      request.upload.addEventListener(\"loadend\", flushUpload);\n    }\n    if (_config.cancelToken || _config.signal) {\n      onCanceled = (cancel) => {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || cancel.type ? new CanceledError_default(null, config, request) : cancel);\n        request.abort();\n        request = null;\n      };\n      _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n      if (_config.signal) {\n        _config.signal.aborted ? onCanceled() : _config.signal.addEventListener(\"abort\", onCanceled);\n      }\n    }\n    const protocol = parseProtocol(_config.url);\n    if (protocol && platform_default.protocols.indexOf(protocol) === -1) {\n      reject(\n        new AxiosError_default(\n          \"Unsupported protocol \" + protocol + \":\",\n          AxiosError_default.ERR_BAD_REQUEST,\n          config\n        )\n      );\n      return;\n    }\n    request.send(requestData || null);\n  });\n};\n\n// node_modules/axios/lib/helpers/composeSignals.js\nvar composeSignals = (signals, timeout) => {\n  const { length } = signals = signals ? signals.filter(Boolean) : [];\n  if (timeout || length) {\n    let controller = new AbortController();\n    let aborted;\n    const onabort = function(reason) {\n      if (!aborted) {\n        aborted = true;\n        unsubscribe();\n        const err = reason instanceof Error ? reason : this.reason;\n        controller.abort(\n          err instanceof AxiosError_default ? err : new CanceledError_default(err instanceof Error ? err.message : err)\n        );\n      }\n    };\n    let timer = timeout && setTimeout(() => {\n      timer = null;\n      onabort(new AxiosError_default(`timeout of ${timeout}ms exceeded`, AxiosError_default.ETIMEDOUT));\n    }, timeout);\n    const unsubscribe = () => {\n      if (signals) {\n        timer && clearTimeout(timer);\n        timer = null;\n        signals.forEach((signal2) => {\n          signal2.unsubscribe ? signal2.unsubscribe(onabort) : signal2.removeEventListener(\"abort\", onabort);\n        });\n        signals = null;\n      }\n    };\n    signals.forEach((signal2) => signal2.addEventListener(\"abort\", onabort));\n    const { signal } = controller;\n    signal.unsubscribe = () => utils_default.asap(unsubscribe);\n    return signal;\n  }\n};\nvar composeSignals_default = composeSignals;\n\n// node_modules/axios/lib/helpers/trackStream.js\nvar streamChunk = function* (chunk, chunkSize) {\n  let len = chunk.byteLength;\n  if (!chunkSize || len < chunkSize) {\n    yield chunk;\n    return;\n  }\n  let pos = 0;\n  let end;\n  while (pos < len) {\n    end = pos + chunkSize;\n    yield chunk.slice(pos, end);\n    pos = end;\n  }\n};\nvar readBytes = async function* (iterable, chunkSize) {\n  for await (const chunk of readStream(iterable)) {\n    yield* streamChunk(chunk, chunkSize);\n  }\n};\nvar readStream = async function* (stream4) {\n  if (stream4[Symbol.asyncIterator]) {\n    yield* stream4;\n    return;\n  }\n  const reader = stream4.getReader();\n  try {\n    for (; ; ) {\n      const { done, value } = await reader.read();\n      if (done) {\n        break;\n      }\n      yield value;\n    }\n  } finally {\n    await reader.cancel();\n  }\n};\nvar trackStream = (stream4, chunkSize, onProgress, onFinish) => {\n  const iterator2 = readBytes(stream4, chunkSize);\n  let bytes = 0;\n  let done;\n  let _onFinish = (e) => {\n    if (!done) {\n      done = true;\n      onFinish && onFinish(e);\n    }\n  };\n  return new ReadableStream(\n    {\n      async pull(controller) {\n        try {\n          const { done: done2, value } = await iterator2.next();\n          if (done2) {\n            _onFinish();\n            controller.close();\n            return;\n          }\n          let len = value.byteLength;\n          if (onProgress) {\n            let loadedBytes = bytes += len;\n            onProgress(loadedBytes);\n          }\n          controller.enqueue(new Uint8Array(value));\n        } catch (err) {\n          _onFinish(err);\n          throw err;\n        }\n      },\n      cancel(reason) {\n        _onFinish(reason);\n        return iterator2.return();\n      }\n    },\n    {\n      highWaterMark: 2\n    }\n  );\n};\n\n// node_modules/axios/lib/adapters/fetch.js\nvar DEFAULT_CHUNK_SIZE = 64 * 1024;\nvar { isFunction: isFunction2 } = utils_default;\nvar globalFetchAPI = (({ Request, Response }) => ({\n  Request,\n  Response\n}))(utils_default.global);\nvar { ReadableStream: ReadableStream2, TextEncoder: TextEncoder2 } = utils_default.global;\nvar test = (fn, ...args) => {\n  try {\n    return !!fn(...args);\n  } catch (e) {\n    return false;\n  }\n};\nvar factory = (env) => {\n  env = utils_default.merge.call(\n    {\n      skipUndefined: true\n    },\n    globalFetchAPI,\n    env\n  );\n  const { fetch: envFetch, Request, Response } = env;\n  const isFetchSupported = envFetch ? isFunction2(envFetch) : typeof fetch === \"function\";\n  const isRequestSupported = isFunction2(Request);\n  const isResponseSupported = isFunction2(Response);\n  if (!isFetchSupported) {\n    return false;\n  }\n  const isReadableStreamSupported = isFetchSupported && isFunction2(ReadableStream2);\n  const encodeText = isFetchSupported && (typeof TextEncoder2 === \"function\" ? /* @__PURE__ */ ((encoder) => (str) => encoder.encode(str))(new TextEncoder2()) : async (str) => new Uint8Array(await new Request(str).arrayBuffer()));\n  const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n    let duplexAccessed = false;\n    const request = new Request(platform_default.origin, {\n      body: new ReadableStream2(),\n      method: \"POST\",\n      get duplex() {\n        duplexAccessed = true;\n        return \"half\";\n      }\n    });\n    const hasContentType = request.headers.has(\"Content-Type\");\n    if (request.body != null) {\n      request.body.cancel();\n    }\n    return duplexAccessed && !hasContentType;\n  });\n  const supportsResponseStream = isResponseSupported && isReadableStreamSupported && test(() => utils_default.isReadableStream(new Response(\"\").body));\n  const resolvers = {\n    stream: supportsResponseStream && ((res) => res.body)\n  };\n  isFetchSupported && (() => {\n    [\"text\", \"arrayBuffer\", \"blob\", \"formData\", \"stream\"].forEach((type) => {\n      !resolvers[type] && (resolvers[type] = (res, config) => {\n        let method = res && res[type];\n        if (method) {\n          return method.call(res);\n        }\n        throw new AxiosError_default(\n          `Response type '${type}' is not supported`,\n          AxiosError_default.ERR_NOT_SUPPORT,\n          config\n        );\n      });\n    });\n  })();\n  const getBodyLength = async (body) => {\n    if (body == null) {\n      return 0;\n    }\n    if (utils_default.isBlob(body)) {\n      return body.size;\n    }\n    if (utils_default.isSpecCompliantForm(body)) {\n      const _request = new Request(platform_default.origin, {\n        method: \"POST\",\n        body\n      });\n      return (await _request.arrayBuffer()).byteLength;\n    }\n    if (utils_default.isArrayBufferView(body) || utils_default.isArrayBuffer(body)) {\n      return body.byteLength;\n    }\n    if (utils_default.isURLSearchParams(body)) {\n      body = body + \"\";\n    }\n    if (utils_default.isString(body)) {\n      return (await encodeText(body)).byteLength;\n    }\n  };\n  const resolveBodyLength = async (headers, body) => {\n    const length = utils_default.toFiniteNumber(headers.getContentLength());\n    return length == null ? getBodyLength(body) : length;\n  };\n  return async (config) => {\n    let {\n      url: url2,\n      method,\n      data,\n      signal,\n      cancelToken,\n      timeout,\n      onDownloadProgress,\n      onUploadProgress,\n      responseType,\n      headers,\n      withCredentials = \"same-origin\",\n      fetchOptions\n    } = resolveConfig_default(config);\n    let _fetch = envFetch || fetch;\n    responseType = responseType ? (responseType + \"\").toLowerCase() : \"text\";\n    let composedSignal = composeSignals_default(\n      [signal, cancelToken && cancelToken.toAbortSignal()],\n      timeout\n    );\n    let request = null;\n    const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n      composedSignal.unsubscribe();\n    });\n    let requestContentLength;\n    try {\n      if (onUploadProgress && supportsRequestStream && method !== \"get\" && method !== \"head\" && (requestContentLength = await resolveBodyLength(headers, data)) !== 0) {\n        let _request = new Request(url2, {\n          method: \"POST\",\n          body: data,\n          duplex: \"half\"\n        });\n        let contentTypeHeader;\n        if (utils_default.isFormData(data) && (contentTypeHeader = _request.headers.get(\"content-type\"))) {\n          headers.setContentType(contentTypeHeader);\n        }\n        if (_request.body) {\n          const [onProgress, flush] = progressEventDecorator(\n            requestContentLength,\n            progressEventReducer(asyncDecorator(onUploadProgress))\n          );\n          data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n        }\n      }\n      if (!utils_default.isString(withCredentials)) {\n        withCredentials = withCredentials ? \"include\" : \"omit\";\n      }\n      const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n      if (utils_default.isFormData(data)) {\n        const contentType = headers.getContentType();\n        if (contentType && /^multipart\\/form-data/i.test(contentType) && !/boundary=/i.test(contentType)) {\n          headers.delete(\"content-type\");\n        }\n      }\n      const resolvedOptions = {\n        ...fetchOptions,\n        signal: composedSignal,\n        method: method.toUpperCase(),\n        headers: headers.normalize().toJSON(),\n        body: data,\n        duplex: \"half\",\n        credentials: isCredentialsSupported ? withCredentials : void 0\n      };\n      request = isRequestSupported && new Request(url2, resolvedOptions);\n      let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url2, resolvedOptions));\n      const isStreamResponse = supportsResponseStream && (responseType === \"stream\" || responseType === \"response\");\n      if (supportsResponseStream && (onDownloadProgress || isStreamResponse && unsubscribe)) {\n        const options = {};\n        [\"status\", \"statusText\", \"headers\"].forEach((prop) => {\n          options[prop] = response[prop];\n        });\n        const responseContentLength = utils_default.toFiniteNumber(response.headers.get(\"content-length\"));\n        const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n          responseContentLength,\n          progressEventReducer(asyncDecorator(onDownloadProgress), true)\n        ) || [];\n        response = new Response(\n          trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n            flush && flush();\n            unsubscribe && unsubscribe();\n          }),\n          options\n        );\n      }\n      responseType = responseType || \"text\";\n      let responseData = await resolvers[utils_default.findKey(resolvers, responseType) || \"text\"](\n        response,\n        config\n      );\n      !isStreamResponse && unsubscribe && unsubscribe();\n      return await new Promise((resolve, reject) => {\n        settle(resolve, reject, {\n          data: responseData,\n          headers: AxiosHeaders_default.from(response.headers),\n          status: response.status,\n          statusText: response.statusText,\n          config,\n          request\n        });\n      });\n    } catch (err) {\n      unsubscribe && unsubscribe();\n      if (err && err.name === \"TypeError\" && /Load failed|fetch/i.test(err.message)) {\n        throw Object.assign(\n          new AxiosError_default(\n            \"Network Error\",\n            AxiosError_default.ERR_NETWORK,\n            config,\n            request,\n            err && err.response\n          ),\n          {\n            cause: err.cause || err\n          }\n        );\n      }\n      throw AxiosError_default.from(err, err && err.code, config, request, err && err.response);\n    }\n  };\n};\nvar seedCache = /* @__PURE__ */ new Map();\nvar getFetch = (config) => {\n  let env = config && config.env || {};\n  const { fetch: fetch2, Request, Response } = env;\n  const seeds = [Request, Response, fetch2];\n  let len = seeds.length, i = len, seed, target, map = seedCache;\n  while (i--) {\n    seed = seeds[i];\n    target = map.get(seed);\n    target === void 0 && map.set(seed, target = i ? /* @__PURE__ */ new Map() : factory(env));\n    map = target;\n  }\n  return target;\n};\nvar adapter = getFetch();\n\n// node_modules/axios/lib/adapters/adapters.js\nvar knownAdapters = {\n  http: http_default,\n  xhr: xhr_default,\n  fetch: {\n    get: getFetch\n  }\n};\nutils_default.forEach(knownAdapters, (fn, value) => {\n  if (fn) {\n    try {\n      Object.defineProperty(fn, \"name\", { value });\n    } catch (e) {\n    }\n    Object.defineProperty(fn, \"adapterName\", { value });\n  }\n});\nvar renderReason = (reason) => `- ${reason}`;\nvar isResolvedHandle = (adapter2) => utils_default.isFunction(adapter2) || adapter2 === null || adapter2 === false;\nfunction getAdapter(adapters, config) {\n  adapters = utils_default.isArray(adapters) ? adapters : [adapters];\n  const { length } = adapters;\n  let nameOrAdapter;\n  let adapter2;\n  const rejectedReasons = {};\n  for (let i = 0; i < length; i++) {\n    nameOrAdapter = adapters[i];\n    let id;\n    adapter2 = nameOrAdapter;\n    if (!isResolvedHandle(nameOrAdapter)) {\n      adapter2 = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n      if (adapter2 === void 0) {\n        throw new AxiosError_default(`Unknown adapter '${id}'`);\n      }\n    }\n    if (adapter2 && (utils_default.isFunction(adapter2) || (adapter2 = adapter2.get(config)))) {\n      break;\n    }\n    rejectedReasons[id || \"#\" + i] = adapter2;\n  }\n  if (!adapter2) {\n    const reasons = Object.entries(rejectedReasons).map(\n      ([id, state]) => `adapter ${id} ` + (state === false ? \"is not supported by the environment\" : \"is not available in the build\")\n    );\n    let s = length ? reasons.length > 1 ? \"since :\\n\" + reasons.map(renderReason).join(\"\\n\") : \" \" + renderReason(reasons[0]) : \"as no adapter specified\";\n    throw new AxiosError_default(\n      `There is no suitable adapter to dispatch the request ` + s,\n      \"ERR_NOT_SUPPORT\"\n    );\n  }\n  return adapter2;\n}\nvar adapters_default = {\n  /**\n   * Resolve an adapter from a list of adapter names or functions.\n   * @type {Function}\n   */\n  getAdapter,\n  /**\n   * Exposes all known adapters\n   * @type {Object<string, Function|Object>}\n   */\n  adapters: knownAdapters\n};\n\n// node_modules/axios/lib/core/dispatchRequest.js\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError_default(null, config);\n  }\n}\nfunction dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n  config.headers = AxiosHeaders_default.from(config.headers);\n  config.data = transformData.call(config, config.transformRequest);\n  if ([\"post\", \"put\", \"patch\"].indexOf(config.method) !== -1) {\n    config.headers.setContentType(\"application/x-www-form-urlencoded\", false);\n  }\n  const adapter2 = adapters_default.getAdapter(config.adapter || defaults_default.adapter, config);\n  return adapter2(config).then(\n    function onAdapterResolution(response) {\n      throwIfCancellationRequested(config);\n      response.data = transformData.call(config, config.transformResponse, response);\n      response.headers = AxiosHeaders_default.from(response.headers);\n      return response;\n    },\n    function onAdapterRejection(reason) {\n      if (!isCancel(reason)) {\n        throwIfCancellationRequested(config);\n        if (reason && reason.response) {\n          reason.response.data = transformData.call(\n            config,\n            config.transformResponse,\n            reason.response\n          );\n          reason.response.headers = AxiosHeaders_default.from(reason.response.headers);\n        }\n      }\n      return Promise.reject(reason);\n    }\n  );\n}\n\n// node_modules/axios/lib/helpers/validator.js\nvar validators = {};\n[\"object\", \"boolean\", \"number\", \"function\", \"string\", \"symbol\"].forEach((type, i) => {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || \"a\" + (i < 1 ? \"n \" : \" \") + type;\n  };\n});\nvar deprecatedWarnings = {};\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return \"[Axios v\" + VERSION + \"] Transitional option '\" + opt + \"'\" + desc + (message ? \". \" + message : \"\");\n  }\n  return (value, opt, opts) => {\n    if (validator === false) {\n      throw new AxiosError_default(\n        formatMessage(opt, \" has been removed\" + (version ? \" in \" + version : \"\")),\n        AxiosError_default.ERR_DEPRECATED\n      );\n    }\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      console.warn(\n        formatMessage(\n          opt,\n          \" has been deprecated since v\" + version + \" and will be removed in the near future\"\n        )\n      );\n    }\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\nvalidators.spelling = function spelling(correctSpelling) {\n  return (value, opt) => {\n    console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n    return true;\n  };\n};\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== \"object\") {\n    throw new AxiosError_default(\"options must be an object\", AxiosError_default.ERR_BAD_OPTION_VALUE);\n  }\n  const keys = Object.keys(options);\n  let i = keys.length;\n  while (i-- > 0) {\n    const opt = keys[i];\n    const validator = Object.prototype.hasOwnProperty.call(schema, opt) ? schema[opt] : void 0;\n    if (validator) {\n      const value = options[opt];\n      const result = value === void 0 || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError_default(\n          \"option \" + opt + \" must be \" + result,\n          AxiosError_default.ERR_BAD_OPTION_VALUE\n        );\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError_default(\"Unknown option \" + opt, AxiosError_default.ERR_BAD_OPTION);\n    }\n  }\n}\nvar validator_default = {\n  assertOptions,\n  validators\n};\n\n// node_modules/axios/lib/core/Axios.js\nvar validators2 = validator_default.validators;\nvar Axios = class {\n  constructor(instanceConfig) {\n    this.defaults = instanceConfig || {};\n    this.interceptors = {\n      request: new InterceptorManager_default(),\n      response: new InterceptorManager_default()\n    };\n  }\n  /**\n   * Dispatch a request\n   *\n   * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(configOrUrl, config) {\n    try {\n      return await this._request(configOrUrl, config);\n    } catch (err) {\n      if (err instanceof Error) {\n        let dummy = {};\n        Error.captureStackTrace ? Error.captureStackTrace(dummy) : dummy = new Error();\n        const stack = (() => {\n          if (!dummy.stack) {\n            return \"\";\n          }\n          const firstNewlineIndex = dummy.stack.indexOf(\"\\n\");\n          return firstNewlineIndex === -1 ? \"\" : dummy.stack.slice(firstNewlineIndex + 1);\n        })();\n        try {\n          if (!err.stack) {\n            err.stack = stack;\n          } else if (stack) {\n            const firstNewlineIndex = stack.indexOf(\"\\n\");\n            const secondNewlineIndex = firstNewlineIndex === -1 ? -1 : stack.indexOf(\"\\n\", firstNewlineIndex + 1);\n            const stackWithoutTwoTopLines = secondNewlineIndex === -1 ? \"\" : stack.slice(secondNewlineIndex + 1);\n            if (!String(err.stack).endsWith(stackWithoutTwoTopLines)) {\n              err.stack += \"\\n\" + stack;\n            }\n          }\n        } catch (e) {\n        }\n      }\n      throw err;\n    }\n  }\n  _request(configOrUrl, config) {\n    if (typeof configOrUrl === \"string\") {\n      config = config || {};\n      config.url = configOrUrl;\n    } else {\n      config = configOrUrl || {};\n    }\n    config = mergeConfig(this.defaults, config);\n    const { transitional: transitional2, paramsSerializer, headers } = config;\n    if (transitional2 !== void 0) {\n      validator_default.assertOptions(\n        transitional2,\n        {\n          silentJSONParsing: validators2.transitional(validators2.boolean),\n          forcedJSONParsing: validators2.transitional(validators2.boolean),\n          clarifyTimeoutError: validators2.transitional(validators2.boolean),\n          legacyInterceptorReqResOrdering: validators2.transitional(validators2.boolean)\n        },\n        false\n      );\n    }\n    if (paramsSerializer != null) {\n      if (utils_default.isFunction(paramsSerializer)) {\n        config.paramsSerializer = {\n          serialize: paramsSerializer\n        };\n      } else {\n        validator_default.assertOptions(\n          paramsSerializer,\n          {\n            encode: validators2.function,\n            serialize: validators2.function\n          },\n          true\n        );\n      }\n    }\n    if (config.allowAbsoluteUrls !== void 0) {\n    } else if (this.defaults.allowAbsoluteUrls !== void 0) {\n      config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n    } else {\n      config.allowAbsoluteUrls = true;\n    }\n    validator_default.assertOptions(\n      config,\n      {\n        baseUrl: validators2.spelling(\"baseURL\"),\n        withXsrfToken: validators2.spelling(\"withXSRFToken\")\n      },\n      true\n    );\n    config.method = (config.method || this.defaults.method || \"get\").toLowerCase();\n    let contextHeaders = headers && utils_default.merge(headers.common, headers[config.method]);\n    headers && utils_default.forEach([\"delete\", \"get\", \"head\", \"post\", \"put\", \"patch\", \"common\"], (method) => {\n      delete headers[method];\n    });\n    config.headers = AxiosHeaders_default.concat(contextHeaders, headers);\n    const requestInterceptorChain = [];\n    let synchronousRequestInterceptors = true;\n    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n      if (typeof interceptor.runWhen === \"function\" && interceptor.runWhen(config) === false) {\n        return;\n      }\n      synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n      const transitional3 = config.transitional || transitional_default;\n      const legacyInterceptorReqResOrdering = transitional3 && transitional3.legacyInterceptorReqResOrdering;\n      if (legacyInterceptorReqResOrdering) {\n        requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n      } else {\n        requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n      }\n    });\n    const responseInterceptorChain = [];\n    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n      responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n    });\n    let promise;\n    let i = 0;\n    let len;\n    if (!synchronousRequestInterceptors) {\n      const chain = [dispatchRequest.bind(this), void 0];\n      chain.unshift(...requestInterceptorChain);\n      chain.push(...responseInterceptorChain);\n      len = chain.length;\n      promise = Promise.resolve(config);\n      while (i < len) {\n        promise = promise.then(chain[i++], chain[i++]);\n      }\n      return promise;\n    }\n    len = requestInterceptorChain.length;\n    let newConfig = config;\n    while (i < len) {\n      const onFulfilled = requestInterceptorChain[i++];\n      const onRejected = requestInterceptorChain[i++];\n      try {\n        newConfig = onFulfilled(newConfig);\n      } catch (error) {\n        onRejected.call(this, error);\n        break;\n      }\n    }\n    try {\n      promise = dispatchRequest.call(this, newConfig);\n    } catch (error) {\n      return Promise.reject(error);\n    }\n    i = 0;\n    len = responseInterceptorChain.length;\n    while (i < len) {\n      promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n    }\n    return promise;\n  }\n  getUri(config) {\n    config = mergeConfig(this.defaults, config);\n    const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n    return buildURL(fullPath, config.params, config.paramsSerializer);\n  }\n};\nutils_default.forEach([\"delete\", \"get\", \"head\", \"options\"], function forEachMethodNoData(method) {\n  Axios.prototype[method] = function(url2, config) {\n    return this.request(\n      mergeConfig(config || {}, {\n        method,\n        url: url2,\n        data: (config || {}).data\n      })\n    );\n  };\n});\nutils_default.forEach([\"post\", \"put\", \"patch\"], function forEachMethodWithData(method) {\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url2, data, config) {\n      return this.request(\n        mergeConfig(config || {}, {\n          method,\n          headers: isForm ? {\n            \"Content-Type\": \"multipart/form-data\"\n          } : {},\n          url: url2,\n          data\n        })\n      );\n    };\n  }\n  Axios.prototype[method] = generateHTTPMethod();\n  Axios.prototype[method + \"Form\"] = generateHTTPMethod(true);\n});\nvar Axios_default = Axios;\n\n// node_modules/axios/lib/cancel/CancelToken.js\nvar CancelToken = class _CancelToken {\n  constructor(executor) {\n    if (typeof executor !== \"function\") {\n      throw new TypeError(\"executor must be a function.\");\n    }\n    let resolvePromise;\n    this.promise = new Promise(function promiseExecutor(resolve) {\n      resolvePromise = resolve;\n    });\n    const token = this;\n    this.promise.then((cancel) => {\n      if (!token._listeners) return;\n      let i = token._listeners.length;\n      while (i-- > 0) {\n        token._listeners[i](cancel);\n      }\n      token._listeners = null;\n    });\n    this.promise.then = (onfulfilled) => {\n      let _resolve;\n      const promise = new Promise((resolve) => {\n        token.subscribe(resolve);\n        _resolve = resolve;\n      }).then(onfulfilled);\n      promise.cancel = function reject() {\n        token.unsubscribe(_resolve);\n      };\n      return promise;\n    };\n    executor(function cancel(message, config, request) {\n      if (token.reason) {\n        return;\n      }\n      token.reason = new CanceledError_default(message, config, request);\n      resolvePromise(token.reason);\n    });\n  }\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason) {\n      throw this.reason;\n    }\n  }\n  /**\n   * Subscribe to the cancel signal\n   */\n  subscribe(listener) {\n    if (this.reason) {\n      listener(this.reason);\n      return;\n    }\n    if (this._listeners) {\n      this._listeners.push(listener);\n    } else {\n      this._listeners = [listener];\n    }\n  }\n  /**\n   * Unsubscribe from the cancel signal\n   */\n  unsubscribe(listener) {\n    if (!this._listeners) {\n      return;\n    }\n    const index = this._listeners.indexOf(listener);\n    if (index !== -1) {\n      this._listeners.splice(index, 1);\n    }\n  }\n  toAbortSignal() {\n    const controller = new AbortController();\n    const abort = (err) => {\n      controller.abort(err);\n    };\n    this.subscribe(abort);\n    controller.signal.unsubscribe = () => this.unsubscribe(abort);\n    return controller.signal;\n  }\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let cancel;\n    const token = new _CancelToken(function executor(c) {\n      cancel = c;\n    });\n    return {\n      token,\n      cancel\n    };\n  }\n};\nvar CancelToken_default = CancelToken;\n\n// node_modules/axios/lib/helpers/spread.js\nfunction spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n}\n\n// node_modules/axios/lib/helpers/isAxiosError.js\nfunction isAxiosError(payload) {\n  return utils_default.isObject(payload) && payload.isAxiosError === true;\n}\n\n// node_modules/axios/lib/helpers/HttpStatusCode.js\nvar HttpStatusCode = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  PayloadTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  UnprocessableEntity: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511,\n  WebServerIsDown: 521,\n  ConnectionTimedOut: 522,\n  OriginIsUnreachable: 523,\n  TimeoutOccurred: 524,\n  SslHandshakeFailed: 525,\n  InvalidSslCertificate: 526\n};\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n  HttpStatusCode[value] = key;\n});\nvar HttpStatusCode_default = HttpStatusCode;\n\n// node_modules/axios/lib/axios.js\nfunction createInstance(defaultConfig) {\n  const context = new Axios_default(defaultConfig);\n  const instance = bind(Axios_default.prototype.request, context);\n  utils_default.extend(instance, Axios_default.prototype, context, { allOwnKeys: true });\n  utils_default.extend(instance, context, null, { allOwnKeys: true });\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n  return instance;\n}\nvar axios = createInstance(defaults_default);\naxios.Axios = Axios_default;\naxios.CanceledError = CanceledError_default;\naxios.CancelToken = CancelToken_default;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData_default;\naxios.AxiosError = AxiosError_default;\naxios.Cancel = axios.CanceledError;\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = spread;\naxios.isAxiosError = isAxiosError;\naxios.mergeConfig = mergeConfig;\naxios.AxiosHeaders = AxiosHeaders_default;\naxios.formToJSON = (thing) => formDataToJSON_default(utils_default.isHTMLForm(thing) ? new FormData(thing) : thing);\naxios.getAdapter = adapters_default.getAdapter;\naxios.HttpStatusCode = HttpStatusCode_default;\naxios.default = axios;\nvar axios_default = axios;\n\n// node_modules/axios/index.js\nvar {\n  Axios: Axios2,\n  AxiosError: AxiosError2,\n  CanceledError: CanceledError2,\n  isCancel: isCancel2,\n  CancelToken: CancelToken2,\n  VERSION: VERSION2,\n  all: all2,\n  Cancel,\n  isAxiosError: isAxiosError2,\n  spread: spread2,\n  toFormData: toFormData2,\n  AxiosHeaders: AxiosHeaders2,\n  HttpStatusCode: HttpStatusCode2,\n  formToJSON,\n  getAdapter: getAdapter2,\n  mergeConfig: mergeConfig2\n} = axios_default;\n\n// src/api-class.ts\nvar Api = class {\n  constructor(params) {\n    this.appendHeaders = (headers) => {\n      if (this.personalAccessToken) headers[\"X-Figma-Token\"] = this.personalAccessToken;\n      if (this.oAuthToken) headers[\"Authorization\"] = `Bearer ${this.oAuthToken}`;\n    };\n    this.request = (url2, opts) => {\n      const headers = {};\n      this.appendHeaders(headers);\n      const axiosParams = {\n        url: url2,\n        ...opts,\n        headers\n      };\n      return axios_default(axiosParams).then((response) => response.data).catch((error) => {\n        throw new ApiError(error);\n      });\n    };\n    this.getFile = getFileApi;\n    this.getFileNodes = getFileNodesApi;\n    this.getFileMeta = getFileMetaApi;\n    this.getImages = getImagesApi;\n    this.getImageFills = getImageFillsApi;\n    this.getComments = getCommentsApi;\n    this.postComment = postCommentApi;\n    this.deleteComment = deleteCommentApi;\n    this.getCommentReactions = getCommentReactionsApi;\n    this.postCommentReaction = postCommentReactionApi;\n    this.deleteCommentReactions = deleteCommentReactionsApi;\n    this.getUserMe = getUserMeApi;\n    this.getFileVersions = getFileVersionsApi;\n    this.getTeamProjects = getTeamProjectsApi;\n    this.getProjectFiles = getProjectFilesApi;\n    this.getTeamComponents = getTeamComponentsApi;\n    this.getFileComponents = getFileComponentsApi;\n    this.getComponent = getComponentApi;\n    this.getTeamComponentSets = getTeamComponentSetsApi;\n    this.getFileComponentSets = getFileComponentSetsApi;\n    this.getComponentSet = getComponentSetApi;\n    this.getTeamStyles = getTeamStylesApi;\n    this.getFileStyles = getFileStylesApi;\n    this.getStyle = getStyleApi;\n    this.getWebhook = getWebhookApi;\n    this.postWebhook = postWebhookApi;\n    this.putWebhook = putWebhookApi;\n    this.deleteWebhook = deleteWebhookApi;\n    this.getTeamWebhooks = getTeamWebhooksApi;\n    this.getWebhookRequests = getWebhookRequestsApi;\n    this.getLocalVariables = getLocalVariablesApi;\n    this.getPublishedVariables = getPublishedVariablesApi;\n    this.postVariables = postVariablesApi;\n    this.getDevResources = getDevResourcesApi;\n    this.postDevResources = postDevResourcesApi;\n    this.putDevResources = putDevResourcesApi;\n    this.deleteDevResources = deleteDevResourcesApi;\n    this.getLibraryAnalyticsComponentActions = getLibraryAnalyticsComponentActionsApi;\n    this.getLibraryAnalyticsComponentUsages = getLibraryAnalyticsComponentUsagesApi;\n    this.getLibraryAnalyticsStyleActions = getLibraryAnalyticsStyleActionsApi;\n    this.getLibraryAnalyticsStyleUsages = getLibraryAnalyticsStyleUsagesApi;\n    this.getLibraryAnalyticsVariableActions = getLibraryAnalyticsVariableActionsApi;\n    this.getLibraryAnalyticsVariableUsages = getLibraryAnalyticsVariableUsagesApi;\n    if (\"personalAccessToken\" in params) {\n      this.personalAccessToken = params.personalAccessToken;\n    }\n    if (\"oAuthToken\" in params) {\n      this.oAuthToken = params.oAuthToken;\n    }\n  }\n};\nfunction oAuthLink(client_id, redirect_uri, scope, state, response_type) {\n  const queryParams = toQueryParams({\n    client_id,\n    redirect_uri,\n    scope: Array.isArray(scope) ? scope.join(\" \") : scope,\n    state,\n    response_type\n  });\n  return `https://www.figma.com/oauth?${queryParams}`;\n}\nasync function oAuthToken(client_id, client_secret, redirect_uri, code, grant_type) {\n  const headers = {\n    \"Authorization\": `Basic ${Buffer.from(`${client_id}:${client_secret}`).toString(\"base64\")}`\n  };\n  const queryParams = toQueryParams({\n    redirect_uri,\n    code,\n    grant_type\n  });\n  const url2 = `https://api.figma.com/v1/oauth/token?${queryParams}`;\n  const res = await axios_default.post(url2, null, { headers });\n  if (res.status !== 200) throw new ApiError(res);\n  return res.data;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  API_DOMAIN,\n  API_VER,\n  API_VER_WEBHOOKS,\n  Api,\n  oAuthLink,\n  oAuthToken\n});\n/*! Bundled license information:\n\nmime-db/index.js:\n  (*!\n   * mime-db\n   * Copyright(c) 2014 Jonathan Ong\n   * Copyright(c) 2015-2022 Douglas Christopher Wilson\n   * MIT Licensed\n   *)\n\nmime-types/index.js:\n  (*!\n   * mime-types\n   * Copyright(c) 2014 Jonathan Ong\n   * Copyright(c) 2015 Douglas Christopher Wilson\n   * MIT Licensed\n   *)\n*/\n"
  },
  {
    "path": "lib/utils.d.ts",
    "content": "import { AxiosResponse, Method as AxiosMethod, AxiosRequestConfig } from 'axios';\nexport declare function toQueryParams(x: any): string;\nexport type Disposer = () => void;\nexport declare class ApiError extends Error {\n    response: AxiosResponse;\n    constructor(response: AxiosResponse, message?: string);\n}\nexport type ApiRequestMethod = <T>(url: string, opts?: {\n    method: AxiosMethod;\n    data: AxiosRequestConfig[\"data\"];\n}) => Promise<T>;\n"
  },
  {
    "path": "lib/utils.js",
    "content": "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApiError = void 0;\nexports.toQueryParams = toQueryParams;\nfunction toQueryParams(x) {\n    if (!x)\n        return '';\n    return Object.entries(x).map(function (_a) {\n        var k = _a[0], v = _a[1];\n        return (k && v && \"\".concat(k, \"=\").concat(encodeURIComponent(v)));\n    }).filter(Boolean).join('&');\n}\nvar ApiError = /** @class */ (function (_super) {\n    __extends(ApiError, _super);\n    function ApiError(response, message) {\n        var _this = _super.call(this, message) || this;\n        _this.response = response;\n        _this.name = 'ApiError';\n        // Maintains proper stack trace for where our error was thrown (only available on V8)\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(_this, ApiError);\n        }\n        return _this;\n    }\n    return ApiError;\n}(Error));\nexports.ApiError = ApiError;\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"figma-api\",\n  \"version\": \"2.2.0-beta\",\n  \"description\": \"Thin typed wrapper around the Figma REST API\",\n  \"main\": \"lib/index.js\",\n  \"types\": \"lib/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"npm run build:node && npm run build:browser && npm run build:browser:min\",\n    \"build:node\": \"esbuild src/index.ts --bundle --platform=node --outfile=lib/index.js\",\n    \"build:browser\": \"esbuild src/index.ts --bundle --format=iife --global-name=Figma --outfile=lib/figma-api.js\",\n    \"build:browser:min\": \"esbuild src/index.ts --bundle --format=iife --global-name=Figma --minify --outfile=lib/figma-api.min.js\",\n    \"test\": \"jest\",\n    \"test:watch\": \"jest --watch\",\n    \"test:coverage\": \"jest --coverage\"\n  },\n  \"keywords\": [\n    \"figma\",\n    \"rest\",\n    \"api\",\n    \"typed\"\n  ],\n  \"author\": \"didoo\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"@figma/rest-api-spec\": \">=0.37.0 <1.0.0\",\n    \"axios\": \"^1.15.2\"\n  },\n  \"devDependencies\": {\n    \"@types/jest\": \"^30.0.0\",\n    \"@types/node\": \"^22.14.1\",\n    \"esbuild\": \"^0.25.10\",\n    \"jest\": \"^30.2.0\",\n    \"ts-jest\": \"^29.4.4\",\n    \"ts-node\": \"^10.9.2\",\n    \"typescript\": \"^5.8.3\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/didoo/figma-api\"\n  }\n}\n"
  },
  {
    "path": "src/api-class.ts",
    "content": "import * as ApiEndpoints from './api-endpoints';\nimport { ApiError, ApiRequestMethod, toQueryParams } from './utils';\n\nimport axios, { AxiosError, AxiosRequestConfig, Method as AxiosMethod } from 'axios';\n\nexport class Api {\n    personalAccessToken?: string;\n    oAuthToken?: string;\n\n    constructor(params: {\n        personalAccessToken: string,\n    } | {\n        oAuthToken: string,\n    }) {\n        if ('personalAccessToken' in params) {\n            this.personalAccessToken = params.personalAccessToken;\n        }\n        if ('oAuthToken' in params) {\n            this.oAuthToken = params.oAuthToken;\n        }\n    }\n\n    appendHeaders = (headers: { [x: string]: string }) => {\n        if (this.personalAccessToken) headers['X-Figma-Token'] = this.personalAccessToken;\n        if (this.oAuthToken) headers['Authorization'] =  `Bearer ${this.oAuthToken}`;\n    }\n\n    request: ApiRequestMethod = <T>(url: string, opts?: { method: AxiosMethod, data: AxiosRequestConfig[\"data\"] }) => {\n        const headers = {};\n        this.appendHeaders(headers);\n\n        const axiosParams: AxiosRequestConfig = {\n            url,\n            ...opts,\n            headers,\n        };\n\n        return axios<T>(axiosParams)\n            .then(response => response.data)\n            .catch((error: AxiosError) => {\n                throw new ApiError(error);\n            });\n    };\n\n    getFile = ApiEndpoints.getFileApi;\n    getFileNodes = ApiEndpoints.getFileNodesApi;\n    getFileMeta = ApiEndpoints.getFileMetaApi;\n    getImages = ApiEndpoints.getImagesApi;\n    getImageFills = ApiEndpoints.getImageFillsApi;\n    getComments = ApiEndpoints.getCommentsApi;\n    postComment = ApiEndpoints.postCommentApi;\n    deleteComment = ApiEndpoints.deleteCommentApi;\n    getCommentReactions = ApiEndpoints.getCommentReactionsApi;\n    postCommentReaction = ApiEndpoints.postCommentReactionApi;\n    deleteCommentReactions = ApiEndpoints.deleteCommentReactionsApi;\n    getUserMe = ApiEndpoints.getUserMeApi;\n    getFileVersions = ApiEndpoints.getFileVersionsApi;\n    getTeamProjects = ApiEndpoints.getTeamProjectsApi;\n    getProjectFiles = ApiEndpoints.getProjectFilesApi;\n    getTeamComponents = ApiEndpoints.getTeamComponentsApi;\n    getFileComponents = ApiEndpoints.getFileComponentsApi;\n    getComponent = ApiEndpoints.getComponentApi;\n    getTeamComponentSets = ApiEndpoints.getTeamComponentSetsApi;\n    getFileComponentSets = ApiEndpoints.getFileComponentSetsApi;\n    getComponentSet = ApiEndpoints.getComponentSetApi;\n    getTeamStyles = ApiEndpoints.getTeamStylesApi;\n    getFileStyles = ApiEndpoints.getFileStylesApi;\n    getStyle = ApiEndpoints.getStyleApi;\n    getWebhook = ApiEndpoints.getWebhookApi;\n    postWebhook = ApiEndpoints.postWebhookApi;\n    putWebhook = ApiEndpoints.putWebhookApi;\n    deleteWebhook = ApiEndpoints.deleteWebhookApi;\n    getTeamWebhooks = ApiEndpoints.getTeamWebhooksApi;\n    getWebhookRequests = ApiEndpoints.getWebhookRequestsApi;\n    getLocalVariables = ApiEndpoints.getLocalVariablesApi;\n    getPublishedVariables = ApiEndpoints.getPublishedVariablesApi;\n    postVariables = ApiEndpoints.postVariablesApi;\n    getDevResources = ApiEndpoints.getDevResourcesApi;\n    postDevResources = ApiEndpoints.postDevResourcesApi;\n    putDevResources = ApiEndpoints.putDevResourcesApi;\n    deleteDevResources = ApiEndpoints.deleteDevResourcesApi;\n    getLibraryAnalyticsComponentActions = ApiEndpoints.getLibraryAnalyticsComponentActionsApi;\n    getLibraryAnalyticsComponentUsages = ApiEndpoints.getLibraryAnalyticsComponentUsagesApi;\n    getLibraryAnalyticsStyleActions = ApiEndpoints.getLibraryAnalyticsStyleActionsApi;\n    getLibraryAnalyticsStyleUsages = ApiEndpoints.getLibraryAnalyticsStyleUsagesApi;\n    getLibraryAnalyticsVariableActions = ApiEndpoints.getLibraryAnalyticsVariableActionsApi;\n    getLibraryAnalyticsVariableUsages = ApiEndpoints.getLibraryAnalyticsVariableUsagesApi;\n}\n\n// see: https://www.figma.com/developers/api#auth-oauth2\nexport function oAuthLink(\n    client_id: string,\n    redirect_uri: string,\n    scope: string | string[],\n    state: string,\n    response_type: 'code',\n) {\n    const queryParams = toQueryParams({\n        client_id,\n        redirect_uri,\n        scope: Array.isArray(scope) ? scope.join(' ') : scope,\n        state,\n        response_type,\n    });\n    return `https://www.figma.com/oauth?${queryParams}`;\n}\n\ntype OAuthTokenResponseData = {\n    user_id: string,\n    access_token: string,\n    refresh_token: string,\n    expires_in: number,\n};\n\nexport async function oAuthToken(\n    client_id: string,\n    client_secret: string,\n    redirect_uri: string,\n    code: string,\n    grant_type: 'authorization_code',\n): Promise<OAuthTokenResponseData> {\n    // see: https://www.figma.com/developers/api#update-oauth-credentials-handling\n    const headers = {\n        'Authorization': `Basic ${Buffer.from(`${client_id}:${client_secret}`).toString('base64')}`,\n    };\n    const queryParams = toQueryParams({\n        redirect_uri,\n        code,\n        grant_type,\n    });\n    const url = `https://api.figma.com/v1/oauth/token?${queryParams}`;\n    const res = await axios.post<OAuthTokenResponseData>(url, null, { headers });\n    if (res.status !== 200) throw new ApiError(res as any);\n    return res.data;\n}\n"
  },
  {
    "path": "src/api-endpoints.ts",
    "content": "import { API_DOMAIN, API_VER, API_VER_WEBHOOKS } from \"./config\";\nimport { ApiRequestMethod, toQueryParams } from \"./utils\";\n\n// types\n\ntype ApiClass = {\n    request: ApiRequestMethod\n};\n\nimport type * as FigmaRestAPI from '@figma/rest-api-spec';\n\n\n// FILES\n// https://www.figma.com/developers/api#files-endpoints\n// -----------------------------------------------------------------\n\nexport function getFileApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetFilePathParams,\n    queryParams?: FigmaRestAPI.GetFileQueryParams\n): Promise<FigmaRestAPI.GetFileResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}?${encodedQueryParams}`);\n}\n\nexport function getFileNodesApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetFileNodesPathParams,\n    queryParams?: FigmaRestAPI.GetFileNodesQueryParams\n): Promise<FigmaRestAPI.GetFileNodesResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/nodes?${encodedQueryParams}`);\n}\n\nexport function getFileMetaApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetFileMetaPathParams,\n): Promise<FigmaRestAPI.GetFileMetaResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/meta`);\n}\n\nexport function getImagesApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetImagesPathParams,\n    queryParams?: FigmaRestAPI.GetImagesQueryParams,\n): Promise<FigmaRestAPI.GetImagesResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/images/${pathParams.file_key}?${encodedQueryParams}`);\n}\n\nexport function getImageFillsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetImageFillsPathParams,\n): Promise<FigmaRestAPI.GetImageFillsResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/images`);\n}\n\n// COMMENTS\n// https://www.figma.com/developers/api#comments-endpoints\n// -----------------------------------------------------------------\n\nexport function getCommentsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetCommentsPathParams\n): Promise<FigmaRestAPI.GetCommentsResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments`);\n}\n\nexport function postCommentApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.PostCommentPathParams,\n    requestBody?: FigmaRestAPI.PostCommentRequestBody,\n): Promise<FigmaRestAPI.PostCommentResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments`, {\n        method: 'POST',\n        data: requestBody,\n    });\n}\n\nexport function deleteCommentApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.DeleteCommentPathParams,\n): Promise<FigmaRestAPI.DeleteCommentResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments/${pathParams.comment_id}`, {\n        method: 'DELETE',\n        data: ''\n    });\n}\n\nexport function getCommentReactionsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetCommentReactionsPathParams,\n    queryParams?: FigmaRestAPI.GetCommentReactionsQueryParams,\n): Promise<FigmaRestAPI.GetCommentsResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments/${pathParams.comment_id}/reactions?${encodedQueryParams}`);\n}\n\nexport function postCommentReactionApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.PostCommentReactionPathParams,\n    requestBody?: FigmaRestAPI.PostCommentReactionRequestBody,\n): Promise<FigmaRestAPI.PostCommentResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments/${pathParams.comment_id}/reactions`, {\n        method: 'POST',\n        data: requestBody,\n    });\n}\n\nexport function deleteCommentReactionsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.DeleteCommentReactionPathParams,\n): Promise<FigmaRestAPI.DeleteCommentReactionResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/comments/${pathParams.comment_id}/reactions`, {\n        method: 'DELETE',\n        data: ''\n    });\n}\n\n\n// USERS\n// https://www.figma.com/developers/api#users-endpoints\n// -----------------------------------------------------------------\n\nexport function getUserMeApi(\n    this: ApiClass\n): Promise<FigmaRestAPI.User> {\n    return this.request(`${API_DOMAIN}/${API_VER}/me`);\n}\n\n\n// VERSION HISTORY (FILE VERSIONS)\n// https://www.figma.com/developers/api#version-history-endpoints\n// -----------------------------------------------------------------\n\nexport function getFileVersionsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetFileVersionsPathParams\n): Promise<FigmaRestAPI.GetFileVersionsResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/versions`);\n}\n\n\n// PROJECTS\n// https://www.figma.com/developers/api#projects-endpoints\n// -----------------------------------------------------------------\n\nexport function getTeamProjectsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetTeamProjectsPathParams\n): Promise<FigmaRestAPI.GetTeamProjectsResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/teams/${pathParams.team_id}/projects`);\n}\n\nexport function getProjectFilesApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetProjectFilesPathParams,\n    queryParams?: FigmaRestAPI.GetProjectFilesQueryParams,\n): Promise<FigmaRestAPI.GetProjectFilesResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/projects/${pathParams.project_id}/files?${encodedQueryParams}`);\n}\n\n\n// COMPONENTS AND STYLES (LIBRARY ITEMS)\n// https://www.figma.com/developers/api#library-items-endpoints\n// -----------------------------------------------------------------\n\nexport function getTeamComponentsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetTeamComponentsPathParams,\n    queryParams?: FigmaRestAPI.GetTeamComponentsQueryParams,\n): Promise<FigmaRestAPI.GetTeamComponentsResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/teams/${pathParams.team_id}/components?${encodedQueryParams}`);\n}\n\nexport function getFileComponentsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetFileComponentsPathParams,\n): Promise<FigmaRestAPI.GetFileComponentsResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/components`);\n}\n\nexport function getComponentApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetComponentPathParams,\n): Promise<FigmaRestAPI.GetComponentResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/components/${pathParams.key}`);\n}\n\nexport function getTeamComponentSetsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetTeamComponentSetsPathParams,\n    queryParams?: FigmaRestAPI.GetTeamComponentSetsQueryParams,\n): Promise<FigmaRestAPI.GetTeamComponentSetsResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/teams/${pathParams.team_id}/component_sets?${encodedQueryParams}`);\n}\n\nexport function getFileComponentSetsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetFileComponentSetsPathParams,\n): Promise<FigmaRestAPI.GetFileComponentSetsResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/component_sets`);\n}\n\nexport function getComponentSetApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetComponentSetPathParams,\n): Promise<FigmaRestAPI.GetComponentSetResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/component_sets/${pathParams.key}`);\n}\n\nexport function getTeamStylesApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetTeamStylesPathParams,\n    queryParams?: FigmaRestAPI.GetTeamStylesQueryParams,\n): Promise<FigmaRestAPI.GetTeamStylesResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/teams/${pathParams.team_id}/styles?${encodedQueryParams}`);\n}\n\nexport function getFileStylesApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetFileStylesPathParams,\n): Promise<FigmaRestAPI.GetFileStylesResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/styles`);\n}\n\nexport function getStyleApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetStylePathParams,\n): Promise<FigmaRestAPI.GetStyleResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/styles/${pathParams.key}`);\n}\n\n\n// WEBHOOKS\n// https://www.figma.com/developers/api#webhooks_v2\n// -----------------------------------------------------------------\n\nexport function getWebhookApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetWebhookPathParams,\n): Promise<FigmaRestAPI.GetWebhookResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks/${pathParams.webhook_id}`);\n}\n\nexport function postWebhookApi(\n    this: ApiClass,\n    requestBody?: FigmaRestAPI.PostWebhookRequestBody,\n): Promise<FigmaRestAPI.PostWebhookResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks`, {\n        method: 'POST',\n        data: requestBody,\n    });\n}\n\nexport function putWebhookApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.PutWebhookPathParams,\n    requestBody?: FigmaRestAPI.PutWebhookRequestBody,\n): Promise<FigmaRestAPI.PutWebhookResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks/${pathParams.webhook_id}`, {\n        method: 'PUT',\n        data: requestBody,\n    });\n}\n\nexport function deleteWebhookApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.DeleteWebhookPathParams,\n): Promise<FigmaRestAPI.DeleteWebhookResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks/${pathParams.webhook_id}/`, {\n        method: 'DELETE',\n        data: ''\n    });\n}\n\nexport function getTeamWebhooksApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetTeamWebhooksPathParams,\n): Promise<FigmaRestAPI.GetTeamWebhooksResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/teams/${pathParams.team_id}/webhooks`);\n}\n\nexport function getWebhookRequestsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetWebhookRequestsPathParams,\n): Promise<FigmaRestAPI.GetWebhookRequestsResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER_WEBHOOKS}/webhooks/${pathParams.webhook_id}/requests`);\n}\n\n\n// ACTIVITY LOGS\n// https://www.figma.com/developers/api#activity-logs-endpoints\n// -----------------------------------------------------------------\n\n// TODO - Open to contributions if someone is needs to use these endpoints\n\n\n// PAYMENTS\n// https://www.figma.com/developers/api#payments-endpoints\n// -----------------------------------------------------------------\n\n// TODO - Open to contributions if someone is needs to use these endpoints\n\n\n// VARIABLES\n// These APIs are available only to full members of Enterprise orgs.\n// https://www.figma.com/developers/api#variables-endpoints\n// -----------------------------------------------------------------\n\nexport function getLocalVariablesApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetLocalVariablesPathParams,\n): Promise<FigmaRestAPI.GetLocalVariablesResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/variables/local`);\n}\n\nexport function getPublishedVariablesApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetPublishedVariablesPathParams,\n): Promise<FigmaRestAPI.GetPublishedVariablesResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/variables/published`);\n}\n\nexport function postVariablesApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.PostVariablesPathParams,\n    requestBody?: FigmaRestAPI.PostVariablesRequestBody,\n): Promise<FigmaRestAPI.PostVariablesResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/variables`, {\n        method: 'POST',\n        data: requestBody,\n    });\n}\n\n\n// DEV RESOURCES\n// https://www.figma.com/developers/api#dev-resources-endpoints\n// -----------------------------------------------------------------\n\nexport function getDevResourcesApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetDevResourcesPathParams,\n    queryParams?: FigmaRestAPI.GetDevResourcesQueryParams,\n): Promise<FigmaRestAPI.GetDevResourcesResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/dev_resources`);\n}\n\nexport function postDevResourcesApi(\n    this: ApiClass,\n    requestBody?: FigmaRestAPI.PostDevResourcesRequestBody,\n): Promise<FigmaRestAPI.PostDevResourcesResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/dev_resources`, {\n        method: 'POST',\n        data: requestBody,\n    });\n}\n\nexport function putDevResourcesApi(\n    this: ApiClass,\n    requestBody?: FigmaRestAPI.PutDevResourcesRequestBody,\n): Promise<FigmaRestAPI.PutDevResourcesResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/dev_resources`, {\n        method: 'PUT',\n        data: requestBody,\n    });\n}\n\nexport function deleteDevResourcesApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.DeleteDevResourcePathParams,\n): Promise<FigmaRestAPI.DeleteDevResourceResponse> {\n    return this.request(`${API_DOMAIN}/${API_VER}/files/${pathParams.file_key}/dev_resources/${pathParams.dev_resource_id}`, {\n        method: 'DELETE',\n        data: ''\n    });\n}\n\n\n// ANALYTICS\n// https://www.figma.com/developers/api#library-analytics-endpoints\n// -----------------------------------------------------------------\n\nexport function getLibraryAnalyticsComponentActionsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetLibraryAnalyticsComponentActionsPathParams,\n    queryParams?: FigmaRestAPI.GetLibraryAnalyticsComponentActionsQueryParams,\n): Promise<FigmaRestAPI.GetLibraryAnalyticsComponentActionsResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/component/actions?${encodedQueryParams}`);\n}\n\nexport function getLibraryAnalyticsComponentUsagesApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetLibraryAnalyticsComponentUsagesPathParams,\n    queryParams?: FigmaRestAPI.GetLibraryAnalyticsComponentUsagesQueryParams,\n): Promise<FigmaRestAPI.GetLibraryAnalyticsComponentUsagesResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/component/usages?${encodedQueryParams}`);\n}\n\nexport function getLibraryAnalyticsStyleActionsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetLibraryAnalyticsStyleActionsPathParams,\n    queryParams?: FigmaRestAPI.GetLibraryAnalyticsStyleActionsQueryParams,\n): Promise<FigmaRestAPI.GetLibraryAnalyticsStyleActionsResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/style/actions?${encodedQueryParams}`);\n}\n\nexport function getLibraryAnalyticsStyleUsagesApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetLibraryAnalyticsStyleUsagesPathParams,\n    queryParams?: FigmaRestAPI.GetLibraryAnalyticsStyleUsagesQueryParams,\n): Promise<FigmaRestAPI.GetLibraryAnalyticsStyleUsagesResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/style/usages?${encodedQueryParams}`);\n}\n\nexport function getLibraryAnalyticsVariableActionsApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetLibraryAnalyticsVariableActionsPathParams,\n    queryParams?: FigmaRestAPI.GetLibraryAnalyticsVariableActionsQueryParams,\n): Promise<FigmaRestAPI.GetLibraryAnalyticsVariableActionsResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/variable/actions?${encodedQueryParams}`);\n}\n\nexport function getLibraryAnalyticsVariableUsagesApi(\n    this: ApiClass,\n    pathParams: FigmaRestAPI.GetLibraryAnalyticsVariableUsagesPathParams,\n    queryParams?: FigmaRestAPI.GetLibraryAnalyticsVariableUsagesQueryParams,\n): Promise<FigmaRestAPI.GetLibraryAnalyticsVariableUsagesResponse> {\n    const encodedQueryParams = toQueryParams(queryParams);\n    return this.request(`${API_DOMAIN}/${API_VER}/analytics/libraries/${pathParams.file_key}/variable/usages?${encodedQueryParams}`);\n}\n"
  },
  {
    "path": "src/config.ts",
    "content": "export const API_DOMAIN = 'https://api.figma.com';\nexport const API_VER = 'v1';\nexport const API_VER_WEBHOOKS = 'v2';\n"
  },
  {
    "path": "src/index.ts",
    "content": "export * from './config';\nexport * from './api-class';\n"
  },
  {
    "path": "src/utils.ts",
    "content": "import { AxiosError, Method as AxiosMethod, AxiosRequestConfig } from 'axios';\n\nexport function toQueryParams(x: any): string {\n    if (!x) return '';\n    return Object.entries(x).map(([ k, v ]) => (\n        // Keep explicit false/0 values (e.g. svg_outline_text=false), only omit undefined/null/empty-string.\n        k && v !== undefined && v !== null && v !== '' && `${k}=${encodeURIComponent(v as any)}`\n    )).filter(Boolean).join('&')\n}\n\nexport type Disposer = () => void;\n\nexport class ApiError extends Error {\n    constructor(\n        public error: AxiosError,\n    ) {\n        super(error.message);\n        this.name = 'ApiError';\n        // Maintains proper stack trace for where our error was thrown (only available on V8)\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, ApiError);\n        }\n    }\n}\n\nexport type ApiRequestMethod = <T>(url: string, opts?: { method: AxiosMethod, data: AxiosRequestConfig[\"data\"] }) => Promise<T>;\n"
  },
  {
    "path": "tests/api-class.test.ts",
    "content": "import { Api, oAuthLink, oAuthToken } from '../src/api-class';\nimport { ApiError } from '../src/utils';\nimport axios, { AxiosResponse } from 'axios';\n\n// Mock axios module\njest.mock('axios');\nconst mockedAxios = axios as jest.MockedFunction<typeof axios>;\nmockedAxios.post = jest.fn();\n\ndescribe('api-class', () => {\n  describe('Api class', () => {\n    beforeEach(() => {\n      jest.clearAllMocks();\n    });\n\n    describe('constructor', () => {\n      test('should create instance with personal access token', () => {\n        const api = new Api({ personalAccessToken: 'test-token' });\n        \n        expect(api.personalAccessToken).toBe('test-token');\n        expect(api.oAuthToken).toBeUndefined();\n      });\n\n      test('should create instance with OAuth token', () => {\n        const api = new Api({ oAuthToken: 'oauth-token' });\n        \n        expect(api.oAuthToken).toBe('oauth-token');\n        expect(api.personalAccessToken).toBeUndefined();\n      });\n    });\n\n    describe('appendHeaders', () => {\n      test('should append personal access token header', () => {\n        const api = new Api({ personalAccessToken: 'test-token' });\n        const headers: { [x: string]: string } = {};\n        \n        api.appendHeaders(headers);\n        \n        expect(headers['X-Figma-Token']).toBe('test-token');\n        expect(headers['Authorization']).toBeUndefined();\n      });\n\n      test('should append OAuth token header', () => {\n        const api = new Api({ oAuthToken: 'oauth-token' });\n        const headers: { [x: string]: string } = {};\n        \n        api.appendHeaders(headers);\n        \n        expect(headers['Authorization']).toBe('Bearer oauth-token');\n        expect(headers['X-Figma-Token']).toBeUndefined();\n      });\n    });\n\n    describe('request', () => {\n      test('should make successful request with personal access token', async () => {\n        const mockResponse: AxiosResponse = {\n          status: 200,\n          statusText: 'OK',\n          data: { test: 'data' },\n          headers: {},\n          config: {} as any,\n        };\n        mockedAxios.mockResolvedValueOnce(mockResponse);\n\n        const api = new Api({ personalAccessToken: 'test-token' });\n        const result = await api.request('https://api.figma.com/v1/test');\n\n        expect(mockedAxios).toHaveBeenCalledWith({\n          url: 'https://api.figma.com/v1/test',\n          headers: { 'X-Figma-Token': 'test-token' },\n        });\n        expect(result).toEqual({ test: 'data' });\n      });\n\n      test('should make successful request with OAuth token', async () => {\n        const mockResponse: AxiosResponse = {\n          status: 200,\n          statusText: 'OK',\n          data: { test: 'data' },\n          headers: {},\n          config: {} as any,\n        };\n        mockedAxios.mockResolvedValueOnce(mockResponse);\n\n        const api = new Api({ oAuthToken: 'oauth-token' });\n        const result = await api.request('https://api.figma.com/v1/test');\n\n        expect(mockedAxios).toHaveBeenCalledWith({\n          url: 'https://api.figma.com/v1/test',\n          headers: { 'Authorization': 'Bearer oauth-token' },\n        });\n        expect(result).toEqual({ test: 'data' });\n      });\n\n      test('should make request with custom method and data', async () => {\n        const mockResponse: AxiosResponse = {\n          status: 201,\n          statusText: 'Created',\n          data: { created: true },\n          headers: {},\n          config: {} as any,\n        };\n        mockedAxios.mockResolvedValueOnce(mockResponse);\n\n        const api = new Api({ personalAccessToken: 'test-token' });\n        const requestData = { name: 'test' };\n        \n        const result = await api.request('https://api.figma.com/v1/test', {\n          method: 'POST',\n          data: requestData,\n        });\n\n        expect(mockedAxios).toHaveBeenCalledWith({\n          url: 'https://api.figma.com/v1/test',\n          method: 'POST',\n          data: requestData,\n          headers: { 'X-Figma-Token': 'test-token' },\n        });\n        expect(result).toEqual({ created: true });\n      });\n\n      test('should throw ApiError for axios errors', async () => {\n        const mockAxiosError = {\n          message: 'Request failed with status code 404',\n          name: 'AxiosError',\n          response: {\n            status: 404,\n            statusText: 'Not Found',\n            data: {},\n            headers: {},\n            config: {} as any,\n          }\n        };\n        mockedAxios.mockRejectedValueOnce(mockAxiosError);\n\n        const api = new Api({ personalAccessToken: 'test-token' });\n        \n        try {\n          await api.request('https://api.figma.com/v1/test');\n          fail('Expected request to throw an error');\n        } catch (error) {\n          expect(error).toBeInstanceOf(ApiError);\n          expect((error as ApiError).error).toBe(mockAxiosError);\n        }\n      });\n    });\n\n    describe('endpoint methods', () => {\n      test('should have all expected endpoint methods', () => {\n        const api = new Api({ personalAccessToken: 'test-token' });\n        \n        // Test a few key endpoint methods exist\n        expect(typeof api.getFile).toBe('function');\n        expect(typeof api.getFileNodes).toBe('function');\n        expect(typeof api.getImages).toBe('function');\n        expect(typeof api.getFileMeta).toBe('function');\n        expect(typeof api.getUserMe).toBe('function');\n        expect(typeof api.getComments).toBe('function');\n        expect(typeof api.postComment).toBe('function');\n      });\n    });\n  });\n\n  describe('oAuthLink', () => {\n    test('should generate correct OAuth link', () => {\n      const link = oAuthLink(\n        'client123',\n        'https://example.com/callback',\n        'file_read',\n        'state123',\n        'code'\n      );\n\n      expect(link).toBe(\n        'https://www.figma.com/oauth?client_id=client123&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback&scope=file_read&state=state123&response_type=code'\n      );\n    });\n\n    test('should generate correct OAuth link for newer granular scopes', () => {\n      const link = oAuthLink(\n        'client123',\n        'https://example.com/callback',\n        'file_content:read',\n        'state123',\n        'code'\n      );\n\n      expect(link).toBe(\n        'https://www.figma.com/oauth?client_id=client123&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback&scope=file_content%3Aread&state=state123&response_type=code'\n      );\n    });\n\n    test('should generate correct OAuth link for multiple scopes', () => {\n      const link = oAuthLink(\n        'client123',\n        'https://example.com/callback',\n        ['file_content:read', 'file_comments:read'],\n        'state123',\n        'code'\n      );\n\n      expect(link).toBe(\n        'https://www.figma.com/oauth?client_id=client123&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback&scope=file_content%3Aread%20file_comments%3Aread&state=state123&response_type=code'\n      );\n    });\n  });\n\n  describe('oAuthToken', () => {\n    beforeEach(() => {\n      jest.clearAllMocks();\n    });\n\n    test('should exchange code for OAuth token', async () => {\n      const mockResponse: AxiosResponse = {\n        status: 200,\n        statusText: 'OK',\n        data: {\n          user_id: 'user123',\n          access_token: 'token123',\n          refresh_token: 'refresh123',\n          expires_in: 3600,\n        },\n        headers: {},\n        config: {} as any,\n      };\n      (mockedAxios.post as jest.MockedFunction<typeof axios.post>).mockResolvedValueOnce(mockResponse);\n\n      const result = await oAuthToken(\n        'client123',\n        'secret456',\n        'https://example.com/callback',\n        'code789',\n        'authorization_code'\n      );\n\n      expect(mockedAxios.post).toHaveBeenCalledWith(\n        'https://api.figma.com/v1/oauth/token?redirect_uri=https%3A%2F%2Fexample.com%2Fcallback&code=code789&grant_type=authorization_code',\n        null,\n        {\n          headers: {\n            'Authorization': `Basic ${Buffer.from('client123:secret456').toString('base64')}`,\n          },\n        }\n      );\n      expect(result).toEqual(mockResponse.data);\n    });\n\n    test('should throw ApiError for non-200 status', async () => {\n      const mockResponse: AxiosResponse = {\n        status: 400,\n        statusText: 'Bad Request',\n        data: {},\n        headers: {},\n        config: {} as any,\n      };\n      (mockedAxios.post as jest.MockedFunction<typeof axios.post>).mockResolvedValueOnce(mockResponse);\n\n      try {\n        await oAuthToken(\n          'client123',\n          'secret456',\n          'https://example.com/callback',\n          'invalid-code',\n          'authorization_code'\n        );\n        fail('Expected oAuthToken to throw an error');\n      } catch (error) {\n        expect(error).toBeInstanceOf(ApiError);\n      }\n    });\n  });\n});\n"
  },
  {
    "path": "tests/api-endpoints.test.ts",
    "content": "import * as apiEndpoints from '../src/api-endpoints';\nimport { API_DOMAIN, API_VER, API_VER_WEBHOOKS } from '../src/config';\n\ndescribe('api-endpoints', () => {\n  let mockApiClass: { request: jest.Mock };\n\n  beforeEach(() => {\n    mockApiClass = {\n      request: jest.fn(),\n    };\n  });\n\n  describe('Files endpoints', () => {\n    test('getFileApi should generate correct URL', () => {\n      const pathParams = { file_key: 'test-file-key' };\n      const queryParams = { version: '123', ids: '1,2,3' };\n\n      apiEndpoints.getFileApi.call(mockApiClass, pathParams, queryParams);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/files/test-file-key?version=123&ids=1%2C2%2C3`\n      );\n    });\n\n    test('getFileNodesApi should generate correct URL', () => {\n      const pathParams = { file_key: 'test-file-key' };\n      const queryParams = { ids: 'node1,node2' };\n\n      apiEndpoints.getFileNodesApi.call(mockApiClass, pathParams, queryParams);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/files/test-file-key/nodes?ids=node1%2Cnode2`\n      );\n    });\n\n    test('getFileMetaApi should generate correct URL', () => {\n      const pathParams = { file_key: 'test-file-key' };\n\n      apiEndpoints.getFileMetaApi.call(mockApiClass, pathParams);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/files/test-file-key/meta`\n      );\n    });\n\n    test('getImagesApi should generate correct URL', () => {\n      const pathParams = { file_key: 'test-file-key' };\n      const queryParams = { ids: 'node1,node2', format: 'png' as const };\n\n      apiEndpoints.getImagesApi.call(mockApiClass, pathParams, queryParams);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/images/test-file-key?ids=node1%2Cnode2&format=png`\n      );\n    });\n\n    test('getImagesApi should preserve false boolean query parameters', () => {\n      const pathParams = { file_key: 'test-file-key' };\n      const queryParams = { ids: 'node1,node2', format: 'svg' as const, svg_outline_text: false };\n\n      apiEndpoints.getImagesApi.call(mockApiClass, pathParams, queryParams);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/images/test-file-key?ids=node1%2Cnode2&format=svg&svg_outline_text=false`\n      );\n    });\n\n    test('getImageFillsApi should generate correct URL', () => {\n      const pathParams = { file_key: 'test-file-key' };\n\n      apiEndpoints.getImageFillsApi.call(mockApiClass, pathParams);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/files/test-file-key/images`\n      );\n    });\n  });\n\n  describe('Comments endpoints', () => {\n    test('getCommentsApi should generate correct URL', () => {\n      const pathParams = { file_key: 'test-file-key' };\n\n      apiEndpoints.getCommentsApi.call(mockApiClass, pathParams);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/files/test-file-key/comments`\n      );\n    });\n\n    test('postCommentApi should generate correct URL and method', () => {\n      const pathParams = { file_key: 'test-file-key' };\n      const requestBody = { message: 'Test comment' };\n\n      apiEndpoints.postCommentApi.call(mockApiClass, pathParams, requestBody);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/files/test-file-key/comments`,\n        {\n          method: 'POST',\n          data: requestBody,\n        }\n      );\n    });\n\n    test('deleteCommentApi should generate correct URL and method', () => {\n      const pathParams = { file_key: 'test-file-key', comment_id: 'comment123' };\n\n      apiEndpoints.deleteCommentApi.call(mockApiClass, pathParams);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/files/test-file-key/comments/comment123`,\n        {\n          method: 'DELETE',\n          data: '',\n        }\n      );\n    });\n\n    test('getCommentReactionsApi should generate correct URL', () => {\n      const pathParams = { file_key: 'test-file-key', comment_id: 'comment123' };\n      const queryParams = { cursor: 'abc123' };\n\n      apiEndpoints.getCommentReactionsApi.call(mockApiClass, pathParams, queryParams);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/files/test-file-key/comments/comment123/reactions?cursor=abc123`\n      );\n    });\n\n    test('postCommentReactionApi should generate correct URL and method', () => {\n      const pathParams = { file_key: 'test-file-key', comment_id: 'comment123' };\n      const requestBody = { emoji: '👍' };\n\n      apiEndpoints.postCommentReactionApi.call(mockApiClass, pathParams, requestBody);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/files/test-file-key/comments/comment123/reactions`,\n        {\n          method: 'POST',\n          data: requestBody,\n        }\n      );\n    });\n\n    test('deleteCommentReactionsApi should generate correct URL and method', () => {\n      const pathParams = { file_key: 'test-file-key', comment_id: 'comment123' };\n\n      apiEndpoints.deleteCommentReactionsApi.call(mockApiClass, pathParams);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/files/test-file-key/comments/comment123/reactions`,\n        {\n          method: 'DELETE',\n          data: '',\n        }\n      );\n    });\n  });\n\n  describe('Users endpoints', () => {\n    test('getUserMeApi should generate correct URL', () => {\n      apiEndpoints.getUserMeApi.call(mockApiClass);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/me`\n      );\n    });\n  });\n\n  describe('Version History endpoints', () => {\n    test('getFileVersionsApi should generate correct URL', () => {\n      const pathParams = { file_key: 'test-file-key' };\n\n      apiEndpoints.getFileVersionsApi.call(mockApiClass, pathParams);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/files/test-file-key/versions`\n      );\n    });\n  });\n\n  describe('Projects endpoints', () => {\n    test('getTeamProjectsApi should generate correct URL', () => {\n      const pathParams = { team_id: 'team123' };\n\n      apiEndpoints.getTeamProjectsApi.call(mockApiClass, pathParams);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/teams/team123/projects`\n      );\n    });\n  });\n\n  describe('Endpoint function existence', () => {\n    test('should export all expected endpoint functions', () => {\n      // Test that key endpoint functions are exported\n      expect(typeof apiEndpoints.getFileApi).toBe('function');\n      expect(typeof apiEndpoints.getFileNodesApi).toBe('function');\n      expect(typeof apiEndpoints.getImagesApi).toBe('function');\n      expect(typeof apiEndpoints.getImageFillsApi).toBe('function');\n      expect(typeof apiEndpoints.getFileMetaApi).toBe('function');\n      expect(typeof apiEndpoints.getCommentsApi).toBe('function');\n      expect(typeof apiEndpoints.postCommentApi).toBe('function');\n      expect(typeof apiEndpoints.deleteCommentApi).toBe('function');\n      expect(typeof apiEndpoints.getUserMeApi).toBe('function');\n      expect(typeof apiEndpoints.getFileVersionsApi).toBe('function');\n      expect(typeof apiEndpoints.getTeamProjectsApi).toBe('function');\n    });\n  });\n\n  describe('URL generation with empty/undefined query params', () => {\n    test('should handle undefined query params', () => {\n      const pathParams = { file_key: 'test-file-key' };\n\n      apiEndpoints.getFileApi.call(mockApiClass, pathParams, undefined);\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/files/test-file-key?`\n      );\n    });\n\n    test('should handle empty query params object', () => {\n      const pathParams = { file_key: 'test-file-key' };\n\n      apiEndpoints.getFileApi.call(mockApiClass, pathParams, {});\n\n      expect(mockApiClass.request).toHaveBeenCalledWith(\n        `${API_DOMAIN}/${API_VER}/files/test-file-key?`\n      );\n    });\n  });\n});\n"
  },
  {
    "path": "tests/config.test.ts",
    "content": "import { API_DOMAIN, API_VER, API_VER_WEBHOOKS } from '../src/config';\n\ndescribe('config', () => {\n  test('API_DOMAIN should be the correct Figma API domain', () => {\n    expect(API_DOMAIN).toBe('https://api.figma.com');\n  });\n\n  test('API_VER should be v1', () => {\n    expect(API_VER).toBe('v1');\n  });\n\n  test('API_VER_WEBHOOKS should be v2', () => {\n    expect(API_VER_WEBHOOKS).toBe('v2');\n  });\n\n  test('all exports should be strings', () => {\n    expect(typeof API_DOMAIN).toBe('string');\n    expect(typeof API_VER).toBe('string');\n    expect(typeof API_VER_WEBHOOKS).toBe('string');\n  });\n});"
  },
  {
    "path": "tests/index.test.ts",
    "content": "import * as FigmaAPI from '../src/index';\nimport { API_DOMAIN, API_VER, API_VER_WEBHOOKS } from '../src/config';\nimport { Api } from '../src/api-class';\n\ndescribe('index exports', () => {\n  test('should export config constants', () => {\n    expect(FigmaAPI.API_DOMAIN).toBe(API_DOMAIN);\n    expect(FigmaAPI.API_VER).toBe(API_VER);\n    expect(FigmaAPI.API_VER_WEBHOOKS).toBe(API_VER_WEBHOOKS);\n  });\n\n  test('should export Api class', () => {\n    expect(FigmaAPI.Api).toBe(Api);\n    expect(typeof FigmaAPI.Api).toBe('function');\n  });\n\n  test('should export oAuthLink and oAuthToken functions', () => {\n    expect(typeof FigmaAPI.oAuthLink).toBe('function');\n    expect(typeof FigmaAPI.oAuthToken).toBe('function');\n  });\n});"
  },
  {
    "path": "tests/utils.test.ts",
    "content": "import { toQueryParams, ApiError } from '../src/utils';\n\ndescribe('utils', () => {\n  describe('toQueryParams', () => {\n    test('should return empty string for null/undefined/falsy values', () => {\n      expect(toQueryParams(null)).toBe('');\n      expect(toQueryParams(undefined)).toBe('');\n      expect(toQueryParams(false)).toBe('');\n      expect(toQueryParams(0)).toBe('');\n      expect(toQueryParams('')).toBe('');\n    });\n\n    test('should convert object to query string', () => {\n      const params = { key1: 'value1', key2: 'value2' };\n      const result = toQueryParams(params);\n      expect(result).toBe('key1=value1&key2=value2');\n    });\n\n    test('should handle special characters by encoding them', () => {\n      const params = { search: 'hello world', special: 'a+b=c' };\n      const result = toQueryParams(params);\n      expect(result).toBe('search=hello%20world&special=a%2Bb%3Dc');\n    });\n\n    test('should filter out null/undefined/empty string values', () => {\n      const params = { key1: 'value1', key2: '', key3: null, key4: 'value4', key5: undefined };\n      const result = toQueryParams(params);\n      expect(result).toBe('key1=value1&key4=value4');\n    });\n\n    test('should handle numbers as values', () => {\n      const params = { page: 1, limit: 50 };\n      const result = toQueryParams(params);\n      expect(result).toBe('page=1&limit=50');\n    });\n\n    test('should handle boolean values', () => {\n      const params = { enabled: true, disabled: false };\n      const result = toQueryParams(params);\n      expect(result).toBe('enabled=true&disabled=false');\n    });\n\n    test('should preserve explicit false and zero values', () => {\n      const params = { svg_outline_text: false, scale: 0 };\n      const result = toQueryParams(params);\n      expect(result).toBe('svg_outline_text=false&scale=0');\n    });\n  });\n\n  describe('ApiError', () => {\n    test('should create ApiError instance', () => {\n      const mockAxiosError = {\n        message: 'Request failed with status code 404',\n        name: 'AxiosError',\n        response: {\n          status: 404,\n          statusText: 'Not Found',\n          data: {},\n          headers: {},\n          config: {},\n        }\n      } as any;\n      \n      const error = new ApiError(mockAxiosError);\n      \n      expect(error).toBeInstanceOf(Error);\n      expect(error.name).toBe('ApiError');\n      expect(error.message).toBe('Request failed with status code 404');\n      expect(error.error).toBe(mockAxiosError);\n    });\n\n    test('should create ApiError and maintain stack trace', () => {\n      const mockAxiosError = {\n        message: 'Network Error',\n        name: 'AxiosError',\n      } as any;\n      \n      const error = new ApiError(mockAxiosError);\n      \n      expect(error.name).toBe('ApiError');\n      expect(error.error).toBe(mockAxiosError);\n      expect(error.stack).toBeDefined();\n    });\n  });\n});\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"include\": [ \"src/**/*\" ],\n  \"exclude\": [ \"./playground\", \"./node_modules\", \"./lib\" ],\n  \"compilerOptions\": {\n    /* Basic Options */\n    \"target\": \"es2020\",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */\n    \"module\": \"esnext\",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */\n    \"lib\": [ \"es2020\", \"dom\" ],                             /* Specify library files to be included in the compilation. */\n    // \"allowJs\": true,                       /* Allow javascript files to be compiled. */\n    // \"checkJs\": true,                       /* Report errors in .js files. */\n    // \"jsx\": \"preserve\",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */\n    \"declaration\": true,                   /* Generates corresponding '.d.ts' file. */\n    // \"declarationMap\": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */\n    // \"sourceMap\": false,                     /* Generates corresponding '.map' file. */\n    // \"outFile\": \"./\",                       /* Concatenate and emit output to single file. */\n    \"outDir\": \"./lib\",                        /* Redirect output structure to the directory. */\n    \"rootDir\": \"./src\",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */\n    // \"composite\": true,                     /* Enable project compilation */\n    // \"removeComments\": true,                /* Do not emit comments to output. */\n    // \"noEmit\": true,                        /* Do not emit outputs. */\n    // \"importHelpers\": true,                 /* Import emit helpers from 'tslib'. */\n    // \"downlevelIteration\": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */\n    // \"isolatedModules\": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */\n\n    /* Strict Type-Checking Options */\n    \"strict\": true,                           /* Enable all strict type-checking options. */\n    // \"noImplicitAny\": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */\n    // \"strictNullChecks\": true,              /* Enable strict null checks. */\n    // \"strictFunctionTypes\": true,           /* Enable strict checking of function types. */\n    // \"strictPropertyInitialization\": true,  /* Enable strict checking of property initialization in classes. */\n    // \"noImplicitThis\": true,                /* Raise error on 'this' expressions with an implied 'any' type. */\n    // \"alwaysStrict\": true,                  /* Parse in strict mode and emit \"use strict\" for each source file. */\n\n    /* Additional Checks */\n    // \"noUnusedLocals\": true,                /* Report errors on unused locals. */\n    // \"noUnusedParameters\": true,            /* Report errors on unused parameters. */\n    // \"noImplicitReturns\": true,             /* Report error when not all code paths in function return a value. */\n    // \"noFallthroughCasesInSwitch\": true,    /* Report errors for fallthrough cases in switch statement. */\n\n    /* Module Resolution Options */\n    \"moduleResolution\": \"bundler\",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */\n    // \"baseUrl\": \"./\",                       /* Base directory to resolve non-absolute module names. */\n    // \"paths\": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */\n    // \"rootDirs\": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */\n    // \"typeRoots\": [],                       /* List of folders to include type definitions from. */\n    // \"types\": [],                           /* Type declaration files to be included in compilation. */\n    // \"allowSyntheticDefaultImports\": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */\n    \"esModuleInterop\": true                   /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */\n    // \"preserveSymlinks\": true,              /* Do not resolve the real path of symlinks. */\n\n    /* Source Map Options */\n    // \"sourceRoot\": \"./\",                    /* Specify the location where debugger should locate TypeScript files instead of source locations. */\n    // \"mapRoot\": \"./\",                       /* Specify the location where debugger should locate map files instead of generated locations. */\n    // \"inlineSourceMap\": true,               /* Emit a single file with source maps instead of having a separate file. */\n    // \"inlineSources\": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */\n\n    /* Experimental Options */\n    // \"experimentalDecorators\": true,        /* Enables experimental support for ES7 decorators. */\n    // \"emitDecoratorMetadata\": true,         /* Enables experimental support for emitting type metadata for decorators. */\n  }\n}"
  }
]