diff --git a/.eslintrc b/.eslintrc index acf0c0c34..3bb8aa5c2 100644 --- a/.eslintrc +++ b/.eslintrc @@ -10,6 +10,12 @@ "@typescript-eslint/ban-ts-comment": 1, "@typescript-eslint/ban-types": 1, "@typescript-eslint/interface-name-prefix": 0, - "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }] + "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], + "@typescript-eslint/explicit-member-accessibility": 1, + "no-underscore-dangle": 1, + "prefer-spread": 0 + }, + "parserOptions": { + "project": ["./packages/datx/tsconfig.json"] } } diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..c2bcf047d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,65 @@ +name: Bug report +description: Report a bug with the library +labels: bug +assignees: DarkoKukovec +body: + - type: input + id: libs + validations: + required: true + attributes: + label: Used libraries + description: Which `@datx` libraries are you using + placeholder: core, jsonapi, ... + - type: input + id: versions + validations: + required: true + attributes: + label: Library version(s) + description: Version of the `@datx` libraries you're using + placeholder: "@datx/core 2.3.1, @datx/jsonapi 2.3.0" + - type: textarea + id: api + attributes: + label: Sample API response (if relevant) + description: If the issue is network related, please provide a sample API response for the issue + - type: input + id: issue-envs + validations: + required: true + attributes: + label: Environments with the issue + description: Where does the issue happen + placeholder: iOS Safari 15, Node.js 14 + - type: input + id: ok-envs + attributes: + label: Environments without the issue + description: Environments that you've checked and work fine + placeholder: Chrome 99, Firefox 96, Node.js 16 + - type: textarea + id: current + attributes: + label: Current behavior + description: What is the issue - the behavior that you think doesn't work as expected + validations: + required: true + - type: textarea + id: ecpected + attributes: + label: Expected behavior + description: What do you expect to happen instead - the correct behavior + validations: + required: true + - type: textarea + id: steps + attributes: + label: Reproduction steps + description: "How do you trigger this bug? Please walk us through it step by step." + value: | + 1. + 2. + 3. + ... + render: bash diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 000000000..b22c7f960 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,47 @@ +name: Feature request +description: Describe a feature the lib is missing which you think should be added. +labels: enhancement +assignees: DarkoKukovec +body: + - type: checkboxes + id: major-version + validations: + required: true + attributes: + label: Relevant version + description: Which major version of `@datx` is relevant for you? + options: + - label: 0.x + - label: 1.x + - label: 2.x + - type: checkboxes + id: libs + validations: + required: true + attributes: + label: Relevant libraries + description: Which `@datx` libraries are relevant for this change? + options: + - label: utils + - label: core + - label: network + - label: jsonapi + - label: jsonapi-angular + - type: dropdown + id: breaking + validations: + required: true + attributes: + label: Breaking change + description: Would this change cause a breaking change (where some existing feature would break)? + options: + - "Yes" + - "No" + - I'm not sure + - type: textarea + id: description + validations: + required: true + attributes: + label: Description + description: Please describe the feature you're suggesting with as many details as possible diff --git a/.github/ISSUE_TEMPLATE/support_request.yml b/.github/ISSUE_TEMPLATE/support_request.yml new file mode 100644 index 000000000..73d4a9ff6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/support_request.yml @@ -0,0 +1,28 @@ +name: Support request +description: Have a question that isn't answered in the docs? Have an issue you're not able to resolve? +labels: support +assignees: DarkoKukovec +body: + - type: input + id: libs + validations: + required: true + attributes: + label: Used libraries + description: Which `@datx` libraries are you using + placeholder: core, jsonapi, ... + - type: input + id: versions + validations: + required: true + attributes: + label: Library version(s) + description: Version of the `@datx` libraries you're using + placeholder: "@datx/core 2.3.1, @datx/jsonapi 2.3.0" + - type: textarea + id: issue + attributes: + label: Issue description + description: Please describe your issue with as much details (and examples) as possible + validations: + required: true diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..150555c6f --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,21 @@ +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "daily" + labels: + - "maintenance" + assignees: + - "DarkoKukovec" + open-pull-requests-limit: 10 + - package-ecosystem: "npm" + directory: "/website" + schedule: + interval: "daily" + labels: + - "maintenance" + - "documentation" + assignees: + - "DarkoKukovec" + open-pull-requests-limit: 10 diff --git a/.github/issue_template.md b/.github/issue_template.md deleted file mode 100644 index a4f380244..000000000 --- a/.github/issue_template.md +++ /dev/null @@ -1,19 +0,0 @@ -Submitting a: - -* [ ] Bug report -* [ ] Feature suggestion -* [ ] Support request - --------------- - -If this is a bug report, please provide as many as possible of the following info: - -*(delete if not a bug report)* - -* datx version -* datx-jsonapi version (if used), sample API response -* environments (browsers?, versions) where the issue happens -* environments (browsers?, versions) where the issue doesn't happen -* steps to reproduce -* current behavior -* expected behavior diff --git a/.github/pull_request_ttemplate.md b/.github/pull_request_template.md similarity index 100% rename from .github/pull_request_ttemplate.md rename to .github/pull_request_template.md diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index bff24e34a..25a1d229d 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -38,7 +38,7 @@ jobs: # If this run was triggered by a pull request event, then checkout # the head of the pull request instead of the merge commit. - - run: git checkout HEAD^2 + - run: git checkout if: ${{ github.event_name == 'pull_request' }} # Initializes the CodeQL tools for scanning. diff --git a/.gitignore b/.gitignore index 528837435..e520739ba 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ typings/ # Optional npm cache directory .npm +.yarn # Optional eslint cache .eslintcache @@ -48,5 +49,4 @@ website/build website/.DS_Store .DS_Store -disable-mobx.d.ts -disable-mobx.js \ No newline at end of file +**/min/* \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..c83e26348 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["esbenp.prettier-vscode"] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index a214fca2c..8c211ffcd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,11 @@ { "typescript.tsdk": "node_modules/typescript/lib", - "workbench.colorCustomizations": {} -} \ No newline at end of file + "workbench.colorCustomizations": {}, + "editor.formatOnPaste": true, + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "angular.enable-strict-mode-prompt": false, + "i18n-ally.localesPaths": [ + "website/i18n" + ] +} diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 000000000..3186f3f07 --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a60ee86e4..996773b97 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,3 +15,26 @@ Please note we have a code of conduct, please follow it in all your interactions Pull Request would represent. The versioning scheme we use is [SemVer](https://semver.org/). 4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you do not have permission to do that, you may request the second reviewer to merge it for you. + +## Project setup + +1. Install lerna globally `yarn global add lerna` +2. Run `lerna bootstrap` +3. If you're getting errors for other datx package imports, also run `lerna run build` and `lerna link` + +## Updating local dependencies + +Example: If you have made a change in `@datx/utils` and need to use the new change in `@datx/core`, it should be enough to run `yarn build` in the `datx-utils` folder. If the editor doesn't detect the changes, you can try to cmd+click on the error (forcing the editor to reload the typings). + +## Testing + +To test a specific package, run `yarn test` in its folder. If you want to run all tests, you can run `lerna run test` in the root folder. This will run tests in one of the variants. Once you push the code to the repository, GHA will run tests on all variants (mobx version combinations). + +## Writing docs + +When writing docs, make sure your updates are writtern in `versioned_docs/{version}` and `versioned_sidebars/{version}` to be visible once docs are generated and published. Otherwise, only `next` version on the docs website will be updated and published. + +## Publishing + +1. `lerna publish` + diff --git a/README.md b/README.md index 011d5817f..57fce7fab 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ Want to make your own mixin? Check out [the guide](https://datx.dev/docs/mixins/ ## Troubleshooting -Having issues with the library? Check out the [troubleshooting](https://datx.dev/docs/troubleshooting/known-issues) page or [open](https://github.com/infinum/datx/issues/new) an issue. +Having issues with the library? Check out the [troubleshooting](https://datx.dev/docs/troubleshooting/known-issues) page or [open](https://github.com/infinum/datx/issues/new/choose) an issue. --- diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..8ad210eba --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,13 @@ +# Security Policy + +## Supported Versions + +| Version | Supported | +| ------- | ------------------ | +| 2.x.x | :white_check_mark: | +| 1.0.x | :white_check_mark: | +| < 1.0 | :x: | + +## Reporting a Vulnerability + +If a security issue is discovered, please report it to darko@infinum.com. We'll work on resolving the issue ASAP. diff --git a/docs/api-reference/attribute.md b/docs/api-reference/attribute.md index 92d7ba4b4..0944ef599 100644 --- a/docs/api-reference/attribute.md +++ b/docs/api-reference/attribute.md @@ -100,6 +100,17 @@ Example: Sometimes, you'll need to map your data in a way that might not be compatible with your API (or maybe for some other reason specific to your use case). This could range from renaming properties to converting them to other types (e.g. from a date string to a date object). This is where parsers and serializers can be used. The functions are passed as options to the `@Attribute` decorator. +### map + +The map property maps a single property from the input object to the model (before the parse call) and back (after the serialize call). + +Example: + +```typescript +@Attribute({ map: 'first_name' }) +public firstName: string; +``` + ### parse The parse function rceives the raw value (first argument is the eact property and the second value is the whole model). It should return the value which should be used to initialize the model. @@ -121,6 +132,20 @@ public createdBy: string; ``` +## Compound IDs + +Altrough there is no out-of-the-box solution for compound IDs in DatX, it is easy to achieve them using the `Attribute` features defined above: + +```typescript +@Attribute({ + // Set it as an identifier + isIdentifier: true, + // Combine two (userId, companyId) IDs into a single compound ID + parse: (_: never, data: Record) => `${data.userId}-${data.companyId}` +}) +public id: string; +``` + ## Using `Attribute` without decorators [In some cases](https://github.com/infinum/datx/issues/92), you might not be able to use the `@Attribute()` decorator, but you can still use it as a function. The function has two arguments: the class you're decorating and name of the property you're decorating. You can find the example in the [defining models](https://github.com/infinum/datx/wiki/Defining-models) section. diff --git a/docs/examples/angular-setup.md b/docs/examples/angular-setup.md index d442fda2d..da87f1f0b 100644 --- a/docs/examples/angular-setup.md +++ b/docs/examples/angular-setup.md @@ -7,10 +7,9 @@ title: Angular JSON:API setup Steps: -- (Optional) Disable MobX by importing `datx/disable-mobx` before any other datx imports +- (Optional) Disable MobX by importing `@datx/core/disable-mobx` before any other datx imports - Install `datx-jsonapi` and `datx-jsonapi-angular` - [Setup your collection and models](./basic-setup), use [`jsonapiAngular` mixin](../jsonapi-angular/mixin.md) when setting them up -- Set up the [`baseFetch`](../jsonapi-angular/base-fetch.md) ## Use your store @@ -23,165 +22,146 @@ First disable the MobX integration right away in the entrypoint: ```ts // src/main.ts -import 'datx/disable-mobx'; +import '@datx/core/disable-mobx'; // .. Rest of the file ``` -Next, we need a special implementation of `baseFetch`. This is needed to integrate with Angular network features like interceptors and request canceling: +## Configuration + +Create a collection, provide it under `APP_COLLECTION` token, import `DatxModule` in your `AppModule` and configure it: ```ts -// src/app/services/custom-fetch.ts - -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { config, IResponseObject } from '@datx/jsonapi'; -import { IResponseHeaders } from 'datx-jsonapi/dist/interfaces/IResponseHeaders'; -import { Observable } from 'rxjs'; -import { map, takeUntil } from 'rxjs/operators'; - -@Injectable({ providedIn: 'root' }) -export class CustomFetchService { - constructor(private httpClient: HttpClient) {} - - public async fetch( - method: string, - url: string, - body?: unknown, - headers: Record = {}, - fetchOptions?: { takeUntil$?: Observable }, - ): Promise { - const takeUntil$: Observable | undefined = fetchOptions?.takeUntil$; - - const requestHeaders = { - ...config.defaultFetchOptions.headers, - ...headers, - }; - - let request$ = this.httpClient.request(method, url, { - observe: 'response', - responseType: 'json', - headers: requestHeaders, - body, - }).pipe( - map((response) => { - return { - data: response.body, - headers: response.headers as unknown as IResponseHeaders, // The interface actually matches - requestHeaders, - status: response.status, - }; - }), - ); - - if (takeUntil$) { - request$ = request$.pipe(takeUntil(takeUntil$)); - } - - try { - const d = await request$.toPromise(); - if (d === undefined) { - return { status: -1 }; // Signal to DatX that it shouldn't fail, but shouldn't cache either - } - - return d; - } catch (e) { - console.error(e); - throw e; - } - } +import { InjectionToken } from '@angular/core'; +import { Collection } from '@datx/core'; +import { jsonapiAngular } from '@datx/jsonapi-angular'; + +export const APP_COLLECTION = new InjectionToken('App collection'); + +export class AppCollection extends jsonapiAngular(Collection) { + public static readonly types = [...]; } ``` -The last step is to initialize all the settings: +```ts +import { NgModule } from '@angular/core'; +import { DatxModule } from '@datx/jsonapi-angular'; +import { AppCollection, APP_COLLECTION } from './collections/app.collection'; + +@NgModule({ + imports: [ + DatxModule.forRoot({ + baseUrl: 'https://my-api.com/', + }), + ], + providers: [ + { + provide: APP_COLLECTION, + useValue: new AppCollection(), + }, + ], +}) +export class AppModule {} +``` + +You can also provide the config via DI if you need to set the config value based on data from some service: ```ts -// src/app/app/module.ts +import { NgModule } from '@angular/core'; +import { DatxModule, DATX_CONFIG } from '@datx/jsonapi-angular'; +import { AppCollection, APP_COLLECTION } from './collections/app.collection'; +import { EnvironmentVariablesService } from './services/...'; + +@NgModule({ + imports: [ + DatxModule.forRoot({ + cache: CachingStrategy.NetworkOnly, + }), + ], + provides: [ + { + provide: APP_COLLECTION, + useValue: new AppCollection(), + }, + { + provide: DATX_CONFIG, + useFactory: (environmentVariablesService: EnvironmentVariablesService) => { + return { + baseUrl: environmentVariablesService.get('MY_API'), + }; + }, + deps: [EnvironmentVariablesService], + }, + ], +}) +export class AppModule {} +``` -import { APP_INITIALIZER } from '@angular/core'; -import { CustomFetchService } from './services/custom-fetch.service'; -import { CachingStrategy, config } from '@datx/jsonapi'; +Config values passed via `forRoot` and via `DATX_CONFIG` and the default values will be merged together into a final configuration object. Values provided `DATX_CONFIG` DI token take precedence over values from `forRoot`, and default values have the lowest precedence. -function initDatx(customFetch: CustomFetchService): () => Promise { - return async () => { - config.baseFetch = customFetch.fetch.bind(customFetch); +In the example above, the final config will use some default values, NetworkOnly caching option (as defined in `forRoot`) and whatever value `environmentVariablesService.get('MY_API')` returns for `baseUrl` (as defined in `DATX_CONFIG` provider). - config.defaultFetchOptions = { - credentials: 'same-origin', - headers: { - 'Content-Type': 'application/vnd.api+json', - }, - }; +### Usage - // Use cache if not older than 10 seconds - config.maxCacheAge = 10; - config.cache = CachingStrategy.CacheFirst; - }; -} +Create the base model: -// ... in the module providers - { - provide: APP_INITIALIZER, - useFactory: initDatx, - multi: true, - deps: [CustomFetchService], - } +```ts +import { IType, Model } from '@datx/core'; +import { jsonapiAngular } from '@datx/jsonapi-angular'; +export class BaseModel extends jsonapiAngular(Model) { + public get id(): IType { + return this.meta.id; + } +} ``` -### Usage - -To use DatX in the app, inject your collection in your component or service and you can start using it. All the networking features will expose rxjs observables. +Create specific domain models and add them to `types` in `AppCollection` ```ts -// src/app/app.component.ts +import { Attribute } from '@datx/core'; +import { BaseModel } from './base-model'; -export class AppComponent implements OnInit { - public results$: Observable>; - public search$: BehaviorSubject = new BehaviorSubject(''); +export class Artist extends BaseModel { + public static endpoint = 'artists'; + public static type = 'project'; - constructor( - private collection: AppCollection, - ) {} + @Attribute() + public name!: string; +} +``` - public ngOnInit(): void { - this.results$ = this.setupSearch().pipe(map((result: Response) => result.data)); - } +```ts +export class AppCollection extends jsonapiAngular(Collection) { + public static readonly types = [Artist]; +} +``` - private setupSearch(): Observable { - return this.search$.pipe( - switchMap((query: string) => { - return this.collection.getMany({ queryParams: { filter: { query } } }); - }) - ); - } +Create services for managing the models (one service per model): - public onInputChanged(event: any): void { - this.search$.next(event.target.value); +```ts +import { Inject, Injectable } from '@angular/core'; +import { CollectionService } from '@datx/jsonapi-angular'; + +@Injectable({ + providedIn: 'root', +}) +export class ArtistsService extends CollectionService { + protected ctor = Artist; + + constructor(@Inject(APP_COLLECTION) protected readonly collection: AppCollection) { + super(collection); } } ``` -```html - -
- {{ result.name }} - {{ result.meta.id }} -
-``` +Inject the service in your component or other services and use methods like `getManyModels` and `getOneModel`: ---- +```ts +export class ArtistsComponent { + public artists$ = this.artistsService.getAllModels(); + + constructor(private readonly artistsService: ArtistsService) {} +} +``` -## Related - - - +That's it! diff --git a/docs/jsonapi-angular/base-fetch.md b/docs/jsonapi-angular/base-fetch.md deleted file mode 100644 index b7cc085bb..000000000 --- a/docs/jsonapi-angular/base-fetch.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -id: base-fetch -title: Angular JSON:API baseFetch ---- - -By default, the library will use the FetchAPI to do all the networking. This is not ideal when using Angular as it would remove some useful features like interceptors and request cancellation. - -`datx-jsonapi-angular` implements some hooks which can be used in combination with a custom `baseFetch` implementation to get those features back. - -Here is an example of the implementation, but you might have some other needs: - -```ts -// src/app/services/custom-fetch.ts - -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { config, IResponseObject } from '@datx/jsonapi'; -import { IResponseHeaders } from 'datx-jsonapi/dist/interfaces/IResponseHeaders'; -import { Observable } from 'rxjs'; -import { map, takeUntil } from 'rxjs/operators'; - -@Injectable({ providedIn: 'root' }) -export class CustomFetchService { - constructor(private httpClient: HttpClient) {} - - public async fetch( - method: string, - url: string, - body?: unknown, - headers: Record = {}, - fetchOptions?: { takeUntil$?: Observable }, - ): Promise { - const takeUntil$: Observable | undefined = fetchOptions?.takeUntil$; - - const requestHeaders = { - ...config.defaultFetchOptions.headers, - ...headers, - }; - - let request$ = this.httpClient.request(method, url, { - observe: 'response', - responseType: 'json', - headers: requestHeaders, - body, - }).pipe( - map((response) => { - return { - data: response.body, - headers: response.headers as unknown as IResponseHeaders, // The interface actually matches - requestHeaders, - status: response.status, - }; - }), - ); - - if (takeUntil$) { - request$ = request$.pipe(takeUntil(takeUntil$)); - } - - try { - const d = await request$.toPromise(); - if (d === undefined) { - return { status: -1 }; // Signal to DatX that it shouldn't fail, but shouldn't cache either - } - - return d; - } catch (e) { - console.error(e); - throw e; - } - } -} -``` - -The last step is to initialize all the settings: - -```ts -// src/app/app/module.ts - -import { APP_INITIALIZER } from '@angular/core'; -import { CustomFetchService } from './services/custom-fetch.service'; -import { CachingStrategy, config } from '@datx/jsonapi'; - -function initDatx(customFetch: CustomFetchService): () => Promise { - return async () => { - config.baseFetch = customFetch.fetch.bind(customFetch); - - config.defaultFetchOptions = { - credentials: 'same-origin', - headers: { - 'Content-Type': 'application/vnd.api+json', - }, - }; - - // Use cache if not older than 10 seconds - config.maxCacheAge = 10; - config.cache = CachingStrategy.CacheFirst; - }; -} - -// ... in the module providers - { - provide: APP_INITIALIZER, - useFactory: initDatx, - multi: true, - deps: [CustomFetchService], - } - -``` diff --git a/docs/jsonapi/jsonapi-collection.md b/docs/jsonapi/jsonapi-collection.md index 10f506bce..f2f48a1ce 100644 --- a/docs/jsonapi/jsonapi-collection.md +++ b/docs/jsonapi/jsonapi-collection.md @@ -45,6 +45,28 @@ The options can be used to send additional parameters to the server. If an error happens, the function will reject with the [`Response`](jsonapi-response) object with the `error` property set. +## getAll + +```typescript +getAll(type: IType | IModelConstructor, options?: IRequestOptions, maxRequests?: number = 50): Promise> +``` + +Fetches all records within the request limit of the given type from the server. +Generally you don't want to use this function if you are trying to load **a lot** of pages at once since it could lead to the huge response time. + +Unlike other collection methods that return a `Response` instance, `getAll` returns an object that contains: + +- data: array of all models +- responses: array of all responses that came from the server +- lastResponse: `Response` instance for easy acces to all `Response` properties + +See [`IGetAllResponse`](jsonapi-typescript-interfaces#igetallresponse) interface for detailed info. + +The options can be used to send additional parameters to the server. + +If an error happens, the function will reject with the [`Response`](jsonapi-response) object with the `error` property set. + + ## request ```typescript diff --git a/docs/jsonapi/jsonapi-spec-compliance.md b/docs/jsonapi/jsonapi-spec-compliance.md index 5ef1eed7a..ebe04b767 100644 --- a/docs/jsonapi/jsonapi-spec-compliance.md +++ b/docs/jsonapi/jsonapi-spec-compliance.md @@ -3,7 +3,7 @@ id: jsonapi-spec-compliance title: Spec compliance --- -Based on the official v1.0 [specification](http://jsonapi.org/format/), all the features should be implemented. If something is missing or not behaving correctly, feel free to [open an issue](https://github.com/infinum/datx/issues/new). +Based on the official v1.0 [specification](http://jsonapi.org/format/), all the features should be implemented. If something is missing or not behaving correctly, feel free to [open an issue](https://github.com/infinum/datx/issues/new/choose). ## Content Negotiation diff --git a/docs/jsonapi/jsonapi-typescript-interfaces.md b/docs/jsonapi/jsonapi-typescript-interfaces.md index d1712cb7c..4886e97ab 100644 --- a/docs/jsonapi/jsonapi-typescript-interfaces.md +++ b/docs/jsonapi/jsonapi-typescript-interfaces.md @@ -67,3 +67,15 @@ interface IRequestOptions { }; } ``` + +## IGetAllResponse + +Interface defining return type for `getAll` method on [collections](jsonapi-collection#getall) and [views](jsonapi-view#getall) + +```typescript +interface IGetAllResponse { + data: Array; + responses: Array>; + lastResponse: Response; +} +``` diff --git a/docs/jsonapi/jsonapi-view.md b/docs/jsonapi/jsonapi-view.md index 32a18b37e..bae8de2ed 100644 --- a/docs/jsonapi/jsonapi-view.md +++ b/docs/jsonapi/jsonapi-view.md @@ -36,3 +36,24 @@ Fetch multiple models of the view type from the server. This will either be all The options can be used to send additional parameters to the server. If an error happens, the function will reject with the [`Response`](jsonapi-response) object with the `error` property set. + +## getAll + +```typescript +getAll(type: IType | IModelConstructor, options?: IRequestOptions, maxRequests?: number = 50): Promise> +``` + +Fetches all records within the request limit of the given type from the server and saves it into the view. +Generally you don't want to use this function if you are trying to load **a lot** of pages at once since it could lead to the huge response time. + +Unlike other view methods that return a `Response` instance, `getAll` returns an object that contains: + +- data: array of all models +- responses: array of all responses that came from the server +- lastResponse: `Response` instance for easy acces to all `Response` properties + +See [`IGetAllResponse`](jsonapi-typescript-interfaces#igetallresponse) interface for detailed info. + +The options can be used to send additional parameters to the server. + +If an error happens, the function will reject with the [`Response`](jsonapi-response) object with the `error` property set. \ No newline at end of file diff --git a/docs/mixins/network-mixin.md b/docs/mixins/network-mixin.md index 2e7101ee3..96d188d34 100644 --- a/docs/mixins/network-mixin.md +++ b/docs/mixins/network-mixin.md @@ -27,6 +27,6 @@ The lib makes use of the following features that are not yet available everywher - [operators](../network/operators) - [caching](../network/caching) - [interceptors](../network/interceptors) -- [parse/serialize](../network/parse-serialize) +- [parser](../network/operators#parser) / [serializer](../network/operators#serializer) - [fetching](../network/fetching) - [TypeScript Interfaces](../network/typescript-interfaces) diff --git a/docs/mixins/what-are-mixins.md b/docs/mixins/what-are-mixins.md index 15a6dc9a6..6ed133de4 100644 --- a/docs/mixins/what-are-mixins.md +++ b/docs/mixins/what-are-mixins.md @@ -11,4 +11,4 @@ Other mixins that can be installed separately: There are some other mixins that are [planned](https://github.com/infinum/datx/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Amixins). -Have an idea for a mixin? [Open an issue](https://github.com/infinum/datx/issues/new) or [create your own](building-your-own-mixin). +Have an idea for a mixin? [Open an issue](https://github.com/infinum/datx/issues/new/choose) or [create your own](building-your-own-mixin). diff --git a/docs/troubleshooting/known-issues.md b/docs/troubleshooting/known-issues.md index 77164fb6e..7b3eabd83 100644 --- a/docs/troubleshooting/known-issues.md +++ b/docs/troubleshooting/known-issues.md @@ -19,4 +19,4 @@ The easiest way is to add a generic polyfill: ## Having other issues? -Feel free to [open an issue](https://github.com/infinum/datx/issues/new). +Feel free to [open an issue](https://github.com/infinum/datx/issues/new/choose). diff --git a/examples/datx-jsonapi/index.ts b/examples/datx-jsonapi/index.ts index 6cc5b6aa6..5f384d193 100644 --- a/examples/datx-jsonapi/index.ts +++ b/examples/datx-jsonapi/index.ts @@ -55,4 +55,4 @@ import state from './store'; await party2.destroy(); // Remove the model from the server and local store })(); -// Want more examples? Please open an issue with suggestions: https://github.com/infinum/datx/issues/new +// Want more examples? Please open an issue with suggestions: https://github.com/infinum/datx/issues/new/choose diff --git a/examples/datx/index.ts b/examples/datx/index.ts index 50d49475b..9fb1300b0 100644 --- a/examples/datx/index.ts +++ b/examples/datx/index.ts @@ -35,4 +35,4 @@ console.log(john.organizing); // [Party] party.organizers.pop(); console.log(john.organizing); // [] -// Want more examples? Please open an issue with suggestions: https://github.com/infinum/datx/issues/new +// Want more examples? Please open an issue with suggestions: https://github.com/infinum/datx/issues/new/choose diff --git a/lerna.json b/lerna.json index 69493a22a..554861c38 100644 --- a/lerna.json +++ b/lerna.json @@ -3,10 +3,11 @@ "packages": [ "packages/*" ], - "version": "2.0.0", + "version": "2.4.3", "npmClient": "yarn", "useWorkspaces": true, "publishConfig": { "access": "public" - } + }, + "exact": true } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..b29de86c3 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,11540 @@ +{ + "name": "datx", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "datx", + "workspaces": [ + "packages/*" + ], + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.27.1", + "@typescript-eslint/parser": "^5.27.1" + }, + "devDependencies": { + "@infinumjs/eslint-config-core-ts": "^3.3.1", + "eslint": "^8.26.0", + "husky": "^8.0.1", + "lerna": "^6.0.1", + "prettier": "2.7.1", + "typescript": "4.8.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ampproject/remapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.5", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.5", + "@babel/types": "^7.18.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.17.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.5", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx/node_modules/@babel/helper-plugin-utils": { + "version": "7.19.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.18.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@datx/schema": { + "resolved": "packages/datx", + "link": true + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.3", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.6", + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "license": "BSD-3-Clause" + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@infinumjs/eslint-config-core-js": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.14" + } + }, + "node_modules/@infinumjs/eslint-config-core-ts": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@infinumjs/eslint-config-core-js": "^3.3.1" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": ">=5", + "@typescript-eslint/parser": ">=5", + "eslint": ">=8.14", + "typescript": ">=3" + } + }, + "node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.3.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.3.1", + "jest-util": "^29.3.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/console/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/core": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.3.1", + "@jest/reporters": "^29.3.1", + "@jest/test-result": "^29.3.1", + "@jest/transform": "^29.3.1", + "@jest/types": "^29.3.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.2.0", + "jest-config": "^29.3.1", + "jest-haste-map": "^29.3.1", + "jest-message-util": "^29.3.1", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.3.1", + "jest-resolve-dependencies": "^29.3.1", + "jest-runner": "^29.3.1", + "jest-runtime": "^29.3.1", + "jest-snapshot": "^29.3.1", + "jest-util": "^29.3.1", + "jest-validate": "^29.3.1", + "jest-watcher": "^29.3.1", + "micromatch": "^4.0.4", + "pretty-format": "^29.3.1", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/core/node_modules/jest-config": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.3.1", + "@jest/types": "^29.3.1", + "babel-jest": "^29.3.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.3.1", + "jest-environment-node": "^29.3.1", + "jest-get-type": "^29.2.0", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.3.1", + "jest-runner": "^29.3.1", + "jest-util": "^29.3.1", + "jest-validate": "^29.3.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.3.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.3.1", + "@jest/types": "^29.3.1", + "@types/node": "*", + "jest-mock": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/expect": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.3.1", + "jest-snapshot": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.2.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.3.1", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^29.3.1", + "jest-mock": "^29.3.1", + "jest-util": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/globals": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.3.1", + "@jest/expect": "^29.3.1", + "@jest/types": "^29.3.1", + "jest-mock": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.3.1", + "@jest/test-result": "^29.3.1", + "@jest/transform": "^29.3.1", + "@jest/types": "^29.3.1", + "@jridgewell/trace-mapping": "^0.3.15", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.3.1", + "jest-util": "^29.3.1", + "jest-worker": "^29.3.1", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/schemas": { + "version": "29.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.15", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.3.1", + "@jest/types": "^29.3.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.3.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.3.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.3.1", + "@jridgewell/trace-mapping": "^0.3.15", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.3.1", + "jest-regex-util": "^29.2.0", + "jest-util": "^29.3.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/types": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@lerna/add": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/bootstrap": "6.0.1", + "@lerna/command": "6.0.1", + "@lerna/filter-options": "6.0.1", + "@lerna/npm-conf": "6.0.1", + "@lerna/validation-error": "6.0.1", + "dedent": "^0.7.0", + "npm-package-arg": "8.1.1", + "p-map": "^4.0.0", + "pacote": "^13.6.1", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/bootstrap": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "6.0.1", + "@lerna/filter-options": "6.0.1", + "@lerna/has-npm-version": "6.0.1", + "@lerna/npm-install": "6.0.1", + "@lerna/package-graph": "6.0.1", + "@lerna/pulse-till-done": "6.0.1", + "@lerna/rimraf-dir": "6.0.1", + "@lerna/run-lifecycle": "6.0.1", + "@lerna/run-topologically": "6.0.1", + "@lerna/symlink-binary": "6.0.1", + "@lerna/symlink-dependencies": "6.0.1", + "@lerna/validation-error": "6.0.1", + "@npmcli/arborist": "5.3.0", + "dedent": "^0.7.0", + "get-port": "^5.1.1", + "multimatch": "^5.0.0", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/changed": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/collect-updates": "6.0.1", + "@lerna/command": "6.0.1", + "@lerna/listable": "6.0.1", + "@lerna/output": "6.0.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/check-working-tree": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/collect-uncommitted": "6.0.1", + "@lerna/describe-ref": "6.0.1", + "@lerna/validation-error": "6.0.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/child-process": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/clean": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "6.0.1", + "@lerna/filter-options": "6.0.1", + "@lerna/prompt": "6.0.1", + "@lerna/pulse-till-done": "6.0.1", + "@lerna/rimraf-dir": "6.0.1", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/cli": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/global-options": "6.0.1", + "dedent": "^0.7.0", + "npmlog": "^6.0.2", + "yargs": "^16.2.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/collect-uncommitted": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "chalk": "^4.1.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/collect-updates": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "@lerna/describe-ref": "6.0.1", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/command": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "@lerna/package-graph": "6.0.1", + "@lerna/project": "6.0.1", + "@lerna/validation-error": "6.0.1", + "@lerna/write-log-file": "6.0.1", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^5.0.0", + "is-ci": "^2.0.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/conventional-commits": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/validation-error": "6.0.1", + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-core": "^4.2.4", + "conventional-recommended-bump": "^6.1.0", + "fs-extra": "^9.1.0", + "get-stream": "^6.0.0", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/create": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "@lerna/command": "6.0.1", + "@lerna/npm-conf": "6.0.1", + "@lerna/validation-error": "6.0.1", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "init-package-json": "^3.0.2", + "npm-package-arg": "8.1.1", + "p-reduce": "^2.1.0", + "pacote": "^13.6.1", + "pify": "^5.0.0", + "semver": "^7.3.4", + "slash": "^3.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^4.0.0", + "yargs-parser": "20.2.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/create-symlink": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cmd-shim": "^5.0.0", + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/create/node_modules/yargs-parser": { + "version": "20.2.4", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/describe-ref": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/diff": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "@lerna/command": "6.0.1", + "@lerna/validation-error": "6.0.1", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/exec": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "@lerna/command": "6.0.1", + "@lerna/filter-options": "6.0.1", + "@lerna/profiler": "6.0.1", + "@lerna/run-topologically": "6.0.1", + "@lerna/validation-error": "6.0.1", + "p-map": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/filter-options": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/collect-updates": "6.0.1", + "@lerna/filter-packages": "6.0.1", + "dedent": "^0.7.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/filter-packages": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/validation-error": "6.0.1", + "multimatch": "^5.0.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/get-npm-exec-opts": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/get-packed": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^9.1.0", + "ssri": "^9.0.1", + "tar": "^6.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/github-client": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^19.0.3", + "git-url-parse": "^13.1.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/gitlab-client": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.1", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/global-options": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/has-npm-version": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/import": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "@lerna/command": "6.0.1", + "@lerna/prompt": "6.0.1", + "@lerna/pulse-till-done": "6.0.1", + "@lerna/validation-error": "6.0.1", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "p-map-series": "^2.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/info": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "6.0.1", + "@lerna/output": "6.0.1", + "envinfo": "^7.7.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/init": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "@lerna/command": "6.0.1", + "@lerna/project": "6.0.1", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/link": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "6.0.1", + "@lerna/package-graph": "6.0.1", + "@lerna/symlink-dependencies": "6.0.1", + "@lerna/validation-error": "6.0.1", + "p-map": "^4.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/list": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "6.0.1", + "@lerna/filter-options": "6.0.1", + "@lerna/listable": "6.0.1", + "@lerna/output": "6.0.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/listable": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/query-graph": "6.0.1", + "chalk": "^4.1.0", + "columnify": "^1.6.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/log-packed": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "byte-size": "^7.0.0", + "columnify": "^1.6.0", + "has-unicode": "^2.0.1", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-conf": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "config-chain": "^1.1.12", + "pify": "^5.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-dist-tag": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/otplease": "6.0.1", + "npm-package-arg": "8.1.1", + "npm-registry-fetch": "^13.3.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/lru-cache": { + "version": "7.10.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/make-fetch-happen": { + "version": "10.1.7", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/npm-registry-fetch": { + "version": "13.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "9.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-install": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "@lerna/get-npm-exec-opts": "6.0.1", + "fs-extra": "^9.1.0", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "signal-exit": "^3.0.3", + "write-pkg": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-publish": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/otplease": "6.0.1", + "@lerna/run-lifecycle": "6.0.1", + "fs-extra": "^9.1.0", + "libnpmpublish": "^6.0.4", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "read-package-json": "^5.0.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-publish/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@lerna/npm-publish/node_modules/glob": { + "version": "8.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/npm-publish/node_modules/minimatch": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-publish/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-publish/node_modules/read-package-json": { + "version": "5.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-run-script": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "@lerna/get-npm-exec-opts": "6.0.1", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/otplease": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/prompt": "6.0.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/output": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/pack-directory": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/get-packed": "6.0.1", + "@lerna/package": "6.0.1", + "@lerna/run-lifecycle": "6.0.1", + "@lerna/temp-write": "6.0.1", + "npm-packlist": "^5.1.1", + "npmlog": "^6.0.2", + "tar": "^6.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/pack-directory/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@lerna/pack-directory/node_modules/glob": { + "version": "8.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/pack-directory/node_modules/minimatch": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/pack-directory/node_modules/npm-bundled": { + "version": "2.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/pack-directory/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/pack-directory/node_modules/npm-packlist": { + "version": "5.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/package": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^6.2.0", + "npm-package-arg": "8.1.1", + "write-pkg": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/package-graph": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/prerelease-id-from-version": "6.0.1", + "@lerna/validation-error": "6.0.1", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/prerelease-id-from-version": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/profiler": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "upath": "^2.0.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/project": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/package": "6.0.1", + "@lerna/validation-error": "6.0.1", + "cosmiconfig": "^7.0.0", + "dedent": "^0.7.0", + "dot-prop": "^6.0.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.2", + "js-yaml": "^4.1.0", + "load-json-file": "^6.2.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "resolve-from": "^5.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/prompt": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "inquirer": "^8.2.4", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/publish": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/check-working-tree": "6.0.1", + "@lerna/child-process": "6.0.1", + "@lerna/collect-updates": "6.0.1", + "@lerna/command": "6.0.1", + "@lerna/describe-ref": "6.0.1", + "@lerna/log-packed": "6.0.1", + "@lerna/npm-conf": "6.0.1", + "@lerna/npm-dist-tag": "6.0.1", + "@lerna/npm-publish": "6.0.1", + "@lerna/otplease": "6.0.1", + "@lerna/output": "6.0.1", + "@lerna/pack-directory": "6.0.1", + "@lerna/prerelease-id-from-version": "6.0.1", + "@lerna/prompt": "6.0.1", + "@lerna/pulse-till-done": "6.0.1", + "@lerna/run-lifecycle": "6.0.1", + "@lerna/run-topologically": "6.0.1", + "@lerna/validation-error": "6.0.1", + "@lerna/version": "6.0.1", + "fs-extra": "^9.1.0", + "libnpmaccess": "^6.0.3", + "npm-package-arg": "8.1.1", + "npm-registry-fetch": "^13.3.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "pacote": "^13.6.1", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/publish/node_modules/lru-cache": { + "version": "7.10.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@lerna/publish/node_modules/make-fetch-happen": { + "version": "10.1.7", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/publish/node_modules/npm-registry-fetch": { + "version": "13.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/publish/node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "9.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/pulse-till-done": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/query-graph": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/package-graph": "6.0.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/resolve-symlink": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "read-cmd-shim": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/rimraf-dir": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "6.0.1", + "npmlog": "^6.0.2", + "path-exists": "^4.0.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/run": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "6.0.1", + "@lerna/filter-options": "6.0.1", + "@lerna/npm-run-script": "6.0.1", + "@lerna/output": "6.0.1", + "@lerna/profiler": "6.0.1", + "@lerna/run-topologically": "6.0.1", + "@lerna/timer": "6.0.1", + "@lerna/validation-error": "6.0.1", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/run-lifecycle": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/npm-conf": "6.0.1", + "@npmcli/run-script": "^4.1.7", + "npmlog": "^6.0.2", + "p-queue": "^6.6.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/run-topologically": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/query-graph": "6.0.1", + "p-queue": "^6.6.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/symlink-binary": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/create-symlink": "6.0.1", + "@lerna/package": "6.0.1", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/symlink-dependencies": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/create-symlink": "6.0.1", + "@lerna/resolve-symlink": "6.0.1", + "@lerna/symlink-binary": "6.0.1", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/temp-write": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^8.3.2" + } + }, + "node_modules/@lerna/timer": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/validation-error": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/version": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/check-working-tree": "6.0.1", + "@lerna/child-process": "6.0.1", + "@lerna/collect-updates": "6.0.1", + "@lerna/command": "6.0.1", + "@lerna/conventional-commits": "6.0.1", + "@lerna/github-client": "6.0.1", + "@lerna/gitlab-client": "6.0.1", + "@lerna/output": "6.0.1", + "@lerna/prerelease-id-from-version": "6.0.1", + "@lerna/prompt": "6.0.1", + "@lerna/run-lifecycle": "6.0.1", + "@lerna/run-topologically": "6.0.1", + "@lerna/temp-write": "6.0.1", + "@lerna/validation-error": "6.0.1", + "@nrwl/devkit": ">=14.8.6 < 16", + "chalk": "^4.1.0", + "dedent": "^0.7.0", + "load-json-file": "^6.2.0", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "p-reduce": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4", + "slash": "^3.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/write-log-file": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^6.0.2", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/arborist": { + "version": "5.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^4.1.3", + "bin-links": "^3.0.0", + "cacache": "^16.0.6", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", + "walk-up-path": "^1.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { + "version": "9.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/fs": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.10.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/map-workspaces": { + "version": "2.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "8.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/metavuln-calculator": { + "version": "3.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/@npmcli/fs": { + "version": "1.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/@npmcli/move-file": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/@npmcli/run-script": { + "version": "3.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^8.4.1", + "read-package-json-fast": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/@tootallnate/once": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/make-fetch-happen": { + "version": "9.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/make-fetch-happen/node_modules/cacache": { + "version": "15.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/make-fetch-happen/node_modules/ssri": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/minipass-fetch": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/node-gyp": { + "version": "8.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/npm-package-arg": { + "version": "9.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/pacote": { + "version": "13.6.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^3.0.1", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/metavuln-calculator/node_modules/socks-proxy-agent": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/name-from-folder": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/node-gyp": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "infer-owner": "^1.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "4.2.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/node-gyp": { + "version": "9.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/nopt": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@nrwl/cli": { + "version": "15.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "nx": "15.0.3" + } + }, + "node_modules/@nrwl/devkit": { + "version": "15.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@phenomnomnominal/tsquery": "4.1.1", + "ejs": "^3.1.7", + "ignore": "^5.0.4", + "semver": "7.3.4", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 14 <= 16" + } + }, + "node_modules/@nrwl/devkit/node_modules/semver": { + "version": "7.3.4", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nrwl/devkit/node_modules/tslib": { + "version": "2.4.0", + "dev": true, + "license": "0BSD" + }, + "node_modules/@nrwl/tao": { + "version": "15.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "nx": "15.0.3" + }, + "bin": { + "tao": "index.js" + } + }, + "node_modules/@octokit/auth-token": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^8.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/core": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^8.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/endpoint": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^8.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/graphql": { + "version": "5.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^8.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "14.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^8.0.0" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=4" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "6.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^8.0.0", + "deprecation": "^2.3.1" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/request": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^8.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/request-error": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^8.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/rest": { + "version": "19.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/core": "^4.1.0", + "@octokit/plugin-paginate-rest": "^5.0.0", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^6.7.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/types": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^14.0.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.0.4", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@phenomnomnominal/tsquery": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "esquery": "^1.0.1" + }, + "peerDependencies": { + "typescript": "^3 || ^4" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@swc/core": { + "version": "1.3.24", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.24.tgz", + "integrity": "sha512-QMOTd0AgiUT3K1crxLRqd3gw0f3FC8hhH1vvlIlryvYqU4c+FJ/T2G4ZhMKLxQlZ/jX6Rhk0gKINZRBxy2GFyQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "swcx": "run_swcx.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.24", + "@swc/core-darwin-x64": "1.3.24", + "@swc/core-linux-arm-gnueabihf": "1.3.24", + "@swc/core-linux-arm64-gnu": "1.3.24", + "@swc/core-linux-arm64-musl": "1.3.24", + "@swc/core-linux-x64-gnu": "1.3.24", + "@swc/core-linux-x64-musl": "1.3.24", + "@swc/core-win32-arm64-msvc": "1.3.24", + "@swc/core-win32-ia32-msvc": "1.3.24", + "@swc/core-win32-x64-msvc": "1.3.24" + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.24", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.24.tgz", + "integrity": "sha512-rR+9UpWm+fGXcipsjCst2hIL1GYIbo0YTLhJZWdIpQD6KRHHJMFXiydMgQQkDj2Ml7HpqUVgxj6m4ZWYL8b0OA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.24", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.24.tgz", + "integrity": "sha512-px+5vkGtgPH0m3FkkTBHynlRdS5rRz+lK+wiXIuBZFJSySWFl6RkKbvwkD+sf0MpazQlqwlv/rTOGJBw6oDffg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.24.tgz", + "integrity": "sha512-jLs8ZOdTV4UW4J12E143QJ4mOMONQtqgAnuhBbRuWFzQ3ny1dfoC3P1jNWAJ2Xi59XdxAIXn0PggPNH4Kh34kw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.24.tgz", + "integrity": "sha512-A/v0h70BekrwGpp1DlzIFGcHQ3QQ2PexXcnnuIBZeMc9gNmHlcZmg3EcwAnaUDiokhNuSUFA/wV94yk1OqmSkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.24.tgz", + "integrity": "sha512-pbc9eArWPTiMrbpS/pJo0IiQNAKAQBcBIDjWBGP1tcw2iDXYLw4bruwz9kI/VjakbshWb8MoE4T5ClkeuULvSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.24.tgz", + "integrity": "sha512-pP5pOLlY1xd352qo7rTlpVPUI9/9VhOd4b3Lk+LzfZDq9bTL2NDlGfyrPiwa5DGHMSzrugH56K2J68eutkxYVA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.24.tgz", + "integrity": "sha512-phNbP7zGp+Wcyxq1Qxlpe5KkxO7WLT2kVQUC7aDFGlVdCr+xdXsfH1MzheHtnr0kqTVQX1aiM8XXXHfFxR0oNA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.24", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.24.tgz", + "integrity": "sha512-qhbiJTWAOqyR+K9xnGmCkOWSz2EmWpDBstEJCEOTc6FZiEdbiTscDmqTcMbCKaTHGu8t+6erVA4t65/Eg6uWPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.24", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.24.tgz", + "integrity": "sha512-JfghIlscE4Rz+Lc08lSoDh+R0cWxrISed5biogFfE6vZqhaDnw3E5Qshqw7O3pIaiq8L2u1nmzuyP581ZmpbRA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.24", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.24.tgz", + "integrity": "sha512-3AmJRr0hwciwDBbzUNqaftvppzS8v9X/iv/Wl7YaVLBVpPfQvaZzfqLycvNMGLZb5vIKXR/u58txg3dRBGsJtw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.19", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/@jest/expect-utils": { + "version": "29.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.2.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/@jest/types": { + "version": "29.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/expect": { + "version": "29.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.2.2", + "jest-get-type": "^29.2.0", + "jest-matcher-utils": "^29.2.2", + "jest-message-util": "^29.2.1", + "jest-util": "^29.2.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-diff": { + "version": "29.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.2.0", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.2.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-matcher-utils": { + "version": "29.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.2.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.2.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-message-util": { + "version": "29.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.2.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.2.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-util": { + "version": "29.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.2.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/jsdom/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "18.11.17", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prettier": { + "version": "2.6.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.28.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "5.28.0", + "@typescript-eslint/type-utils": "5.28.0", + "@typescript-eslint/utils": "5.28.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.27.1", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.27.1", + "@typescript-eslint/types": "5.27.1", + "@typescript-eslint/typescript-estree": "5.27.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "5.27.1", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.27.1", + "@typescript-eslint/visitor-keys": "5.27.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "5.27.1", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.27.1", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.27.1", + "@typescript-eslint/visitor-keys": "5.27.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.27.1", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.27.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.28.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/visitor-keys": "5.28.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.28.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "5.28.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.28.0", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.28.0", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/visitor-keys": "5.28.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.28.0", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.28.0", + "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/typescript-estree": "5.28.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.28.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.28.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.26", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + } + }, + "node_modules/@yarnpkg/parsers/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@yarnpkg/parsers/node_modules/tslib": { + "version": "2.4.0", + "dev": true, + "license": "0BSD" + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/abab": { + "version": "2.0.6", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.8.1", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/array-differ": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/async": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/axios": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-jest": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.3.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.2.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.2.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/before-after-hook": { + "version": "2.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/bin-links": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0", + "read-cmd-shim": "^3.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.20.4", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001349", + "electron-to-chromium": "^1.4.147", + "escalade": "^3.1.1", + "node-releases": "^2.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/builtins": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-require": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "load-tsconfig": "^0.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.13" + } + }, + "node_modules/byte-size": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache": { + "version": "16.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "8.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.10.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001352", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cmd-shim": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "mkdirp-infer-owner": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/columnify": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/compare-func": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/compare-func/node_modules/dot-prop": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core": { + "version": "4.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/find-up": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/locate-path": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/p-limit": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/p-locate": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/p-try": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/dargs": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/data-urls": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debuglog": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/dedent": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "dev": true, + "license": "ISC" + }, + "node_modules/detect-indent": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff-sequences": { + "version": "29.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.8", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.152", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.4.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.15.12", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.12", + "@esbuild/linux-loong64": "0.15.12", + "esbuild-android-64": "0.15.12", + "esbuild-android-arm64": "0.15.12", + "esbuild-darwin-64": "0.15.12", + "esbuild-darwin-arm64": "0.15.12", + "esbuild-freebsd-64": "0.15.12", + "esbuild-freebsd-arm64": "0.15.12", + "esbuild-linux-32": "0.15.12", + "esbuild-linux-64": "0.15.12", + "esbuild-linux-arm": "0.15.12", + "esbuild-linux-arm64": "0.15.12", + "esbuild-linux-mips64le": "0.15.12", + "esbuild-linux-ppc64le": "0.15.12", + "esbuild-linux-riscv64": "0.15.12", + "esbuild-linux-s390x": "0.15.12", + "esbuild-netbsd-64": "0.15.12", + "esbuild-openbsd-64": "0.15.12", + "esbuild-sunos-64": "0.15.12", + "esbuild-windows-32": "0.15.12", + "esbuild-windows-64": "0.15.12", + "esbuild-windows-arm64": "0.15.12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.12", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.26.0", + "license": "MIT", + "dependencies": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/espree": { + "version": "9.4.0", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.3.1", + "jest-get-type": "^29.2.0", + "jest-matcher-utils": "^29.3.1", + "jest-message-util": "^29.3.1", + "jest-util": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.13.0", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.5", + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/gauge": { + "version": "4.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-pkg-repo/node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/readable-stream": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/get-pkg-repo/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/git-raw-commits": { + "version": "2.0.11", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-semver-tags": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/git-up": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" + } + }, + "node_modules/git-url-parse": { + "version": "13.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "git-up": "^7.0.0" + } + }, + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "dev": true, + "license": "BSD", + "dependencies": { + "ini": "^1.3.2" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.15.0", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "dev": true, + "license": "ISC" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/hosted-git-info": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.10.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/humanize-ms/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/husky": { + "version": "8.0.1", + "dev": true, + "license": "MIT", + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.0", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^5.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" + }, + "node_modules/init-package-json": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^9.0.1", + "promzard": "^0.3.0", + "read": "^1.0.7", + "read-package-json": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/init-package-json/node_modules/npm-package-arg": { + "version": "9.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ip": { + "version": "1.1.8", + "dev": true, + "license": "MIT" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-ssh": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "protocols": "^2.0.1" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake": { + "version": "10.8.5", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.3.1", + "@jest/types": "^29.3.1", + "import-local": "^3.0.2", + "jest-cli": "^29.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.3.1", + "@jest/expect": "^29.3.1", + "@jest/test-result": "^29.3.1", + "@jest/types": "^29.3.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.3.1", + "jest-matcher-utils": "^29.3.1", + "jest-message-util": "^29.3.1", + "jest-runtime": "^29.3.1", + "jest-snapshot": "^29.3.1", + "jest-util": "^29.3.1", + "p-limit": "^3.1.0", + "pretty-format": "^29.3.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-cli": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.3.1", + "@jest/test-result": "^29.3.1", + "@jest/types": "^29.3.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.3.1", + "jest-util": "^29.3.1", + "jest-validate": "^29.3.1", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-config": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.3.1", + "@jest/types": "^29.3.1", + "babel-jest": "^29.3.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.3.1", + "jest-environment-node": "^29.3.1", + "jest-get-type": "^29.2.0", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.3.1", + "jest-runner": "^29.3.1", + "jest-util": "^29.3.1", + "jest-validate": "^29.3.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.3.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.3.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/diff-sequences": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.3.1", + "chalk": "^4.0.0", + "jest-get-type": "^29.2.0", + "jest-util": "^29.3.1", + "pretty-format": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.3.1", + "@jest/fake-timers": "^29.3.1", + "@jest/types": "^29.3.1", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.3.1", + "jest-util": "^29.3.1", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-environment-node": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.3.1", + "@jest/fake-timers": "^29.3.1", + "@jest/types": "^29.3.1", + "@types/node": "*", + "jest-mock": "^29.3.1", + "jest-util": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-get-type": { + "version": "29.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.3.1", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.2.0", + "jest-util": "^29.3.1", + "jest-worker": "^29.3.1", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-haste-map/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-leak-detector": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.2.0", + "pretty-format": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.3.1", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.3.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.3.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.3.1", + "@types/node": "*", + "jest-util": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.3.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.3.1", + "jest-validate": "^29.3.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.2.0", + "jest-snapshot": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.3.1", + "@jest/environment": "^29.3.1", + "@jest/test-result": "^29.3.1", + "@jest/transform": "^29.3.1", + "@jest/types": "^29.3.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.2.0", + "jest-environment-node": "^29.3.1", + "jest-haste-map": "^29.3.1", + "jest-leak-detector": "^29.3.1", + "jest-message-util": "^29.3.1", + "jest-resolve": "^29.3.1", + "jest-runtime": "^29.3.1", + "jest-util": "^29.3.1", + "jest-watcher": "^29.3.1", + "jest-worker": "^29.3.1", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runtime": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.3.1", + "@jest/fake-timers": "^29.3.1", + "@jest/globals": "^29.3.1", + "@jest/source-map": "^29.2.0", + "@jest/test-result": "^29.3.1", + "@jest/transform": "^29.3.1", + "@jest/types": "^29.3.1", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.3.1", + "jest-message-util": "^29.3.1", + "jest-mock": "^29.3.1", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.3.1", + "jest-snapshot": "^29.3.1", + "jest-util": "^29.3.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-snapshot": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.3.1", + "@jest/transform": "^29.3.1", + "@jest/types": "^29.3.1", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.3.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.3.1", + "jest-get-type": "^29.2.0", + "jest-haste-map": "^29.3.1", + "jest-matcher-utils": "^29.3.1", + "jest-message-util": "^29.3.1", + "jest-util": "^29.3.1", + "natural-compare": "^1.4.0", + "pretty-format": "^29.3.1", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.3.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-validate": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.3.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.2.0", + "leven": "^3.1.0", + "pretty-format": "^29.3.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.3.1", + "@jest/types": "^29.3.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.3.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.3.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/js-sdsl": { + "version": "4.1.5", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "20.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.0", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.9.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/json-stringify-nice": { + "version": "1.1.4", + "dev": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/just-diff": { + "version": "5.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/just-diff-apply": { + "version": "5.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lerna": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/add": "6.0.1", + "@lerna/bootstrap": "6.0.1", + "@lerna/changed": "6.0.1", + "@lerna/clean": "6.0.1", + "@lerna/cli": "6.0.1", + "@lerna/command": "6.0.1", + "@lerna/create": "6.0.1", + "@lerna/diff": "6.0.1", + "@lerna/exec": "6.0.1", + "@lerna/import": "6.0.1", + "@lerna/info": "6.0.1", + "@lerna/init": "6.0.1", + "@lerna/link": "6.0.1", + "@lerna/list": "6.0.1", + "@lerna/publish": "6.0.1", + "@lerna/run": "6.0.1", + "@lerna/version": "6.0.1", + "@nrwl/devkit": ">=14.8.6 < 16", + "import-local": "^3.0.2", + "inquirer": "^8.2.4", + "npmlog": "^6.0.2", + "nx": ">=14.8.6 < 16", + "typescript": "^3 || ^4" + }, + "bin": { + "lerna": "cli.js" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libnpmaccess": { + "version": "6.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/libnpmaccess/node_modules/npm-package-arg": { + "version": "9.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/libnpmpublish": { + "version": "6.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", + "semver": "^7.3.7", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/libnpmpublish/node_modules/npm-package-arg": { + "version": "9.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/load-json-file": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.6.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/load-tsconfig": { + "version": "0.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "10.1.8", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.10.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "dev": true, + "license": "MIT" + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/arrify": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minipass": { + "version": "3.1.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/modify-values": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/multimatch": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/mz": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.5.0", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "4.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "5.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/npm-package-arg": { + "version": "8.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^3.0.6", + "semver": "^7.0.0", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "3.0.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/npm-packlist": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^1.1.2", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm-packlist/node_modules/glob": { + "version": "8.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-packlist/node_modules/minimatch": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest": { + "version": "7.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "9.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "13.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.10.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "10.1.7", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "9.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nwsapi": { + "version": "2.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/nx": { + "version": "15.0.3", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@nrwl/cli": "15.0.3", + "@nrwl/tao": "15.0.3", + "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "^3.0.0-rc.18", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", + "chalk": "4.1.0", + "chokidar": "^3.5.1", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^10.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.3.4", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^3.9.0", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.4.0", + "yargs-parser": "21.0.1" + }, + "bin": { + "nx": "bin/nx.js" + }, + "peerDependencies": { + "@swc-node/register": "^1.4.2", + "@swc/core": "^1.2.173" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/nx/node_modules/chalk": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/nx/node_modules/cli-spinners": { + "version": "2.6.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nx/node_modules/fast-glob": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nx/node_modules/fs-extra": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/semver": { + "version": "7.3.4", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nx/node_modules/tmp": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/nx/node_modules/tslib": { + "version": "2.4.0", + "dev": true, + "license": "0BSD" + }, + "node_modules/nx/node_modules/yargs": { + "version": "17.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/nx/node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map-series": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-pipe": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-reduce": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-waterfall": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pacote": { + "version": "13.6.2", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "9.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-conflict-json": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.1", + "just-diff": "^5.0.1", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-path": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "protocols": "^2.0.0" + } + }, + "node_modules/parse-url": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-path": "^7.0.0" + } + }, + "node_modules/parse5": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/proc-log": { + "version": "2.0.1", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/promise-all-reject-late": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-call-limit": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/promzard": { + "version": "0.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "read": "1" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "dev": true, + "license": "ISC" + }, + "node_modules/protocols": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-is": { + "version": "18.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/read": { + "version": "1.0.7", + "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/read-cmd-shim": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/read-package-json": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "8.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg-up/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg/node_modules/load-json-file": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.8.1", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.5.7", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.4.0", + "dev": true, + "license": "0BSD" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "7.3.7", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sort-keys": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/split": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "9.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/string-length": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sucrase": { + "version": "3.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/tar": { + "version": "6.1.11", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/treeverse": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/json5/node_modules/minimist": { + "version": "1.2.6", + "dev": true, + "license": "MIT" + }, + "node_modules/tsconfig-paths/node_modules/minimist": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.4.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "3.4.0", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.8.4", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.16.0", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/universalify": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/validate-npm-package-name/node_modules/builtins": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/walk-up-path": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/walker": { + "version": "1.0.8", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url/node_modules/tr46": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/write-json-file": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-indent": "^6.0.0", + "graceful-fs": "^4.1.15", + "is-plain-obj": "^2.0.0", + "make-dir": "^3.0.0", + "sort-keys": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/write-json-file/node_modules/detect-indent": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/write-json-file/node_modules/is-plain-obj": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/write-json-file/node_modules/sort-keys": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "3.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/write-pkg": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-pkg/node_modules/make-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/write-file-atomic": { + "version": "2.4.3", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/write-pkg/node_modules/write-json-file": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ws": { + "version": "8.10.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/xtend": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "21.0.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/datx": { + "name": "@datx/schema", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "type-fest": "^3.4.0" + }, + "devDependencies": { + "@swc/core": "^1.3.24", + "@types/jest": "^29.2.4", + "@types/node": "^18.11.17", + "jest": "^29.3.1", + "jest-environment-jsdom": "^29.3.1", + "ts-jest": "^29.0.3", + "tslib": "~2.4.1", + "tsup": "^6.5.0", + "typescript": "~4.9.4" + } + }, + "packages/datx/node_modules/@jest/types": { + "version": "29.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/datx/node_modules/@jest/types/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "packages/datx/node_modules/jest-util": { + "version": "29.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.2.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "packages/datx/node_modules/jest-util/node_modules/@types/node": { + "version": "17.0.43", + "dev": true, + "license": "MIT" + }, + "packages/datx/node_modules/source-map": { + "version": "0.8.0-beta.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/datx/node_modules/tr46": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "packages/datx/node_modules/ts-jest": { + "version": "29.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.1", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "packages/datx/node_modules/tsup": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-require": "^3.1.2", + "cac": "^6.7.12", + "chokidar": "^3.5.1", + "debug": "^4.3.1", + "esbuild": "^0.15.1", + "execa": "^5.0.0", + "globby": "^11.0.3", + "joycon": "^3.0.1", + "postcss-load-config": "^3.0.1", + "resolve-from": "^5.0.0", + "rollup": "^3.2.5", + "source-map": "0.8.0-beta.0", + "sucrase": "^3.20.3", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": "^4.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "packages/datx/node_modules/typescript": { + "version": "4.9.4", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "packages/datx/node_modules/webidl-conversions": { + "version": "4.0.2", + "dev": true, + "license": "BSD-2-Clause" + }, + "packages/datx/node_modules/whatwg-url": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } +} diff --git a/package.json b/package.json index 39da8334b..207a93c5e 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,17 @@ { "name": "datx", "devDependencies": { - "@infinumjs/eslint-config-core-ts": "^2.2.0", - "eslint": "^7.18.0", - "husky": "^4.3.8", - "lerna": "^3.22.1", - "prettier": "^2.2.1", - "typescript": "^4.1.3" + "@infinumjs/eslint-config-core-ts": "^3.3.1", + "eslint": "^8.35.0", + "husky": "^8.0.3", + "lerna": "^6.5.1", + "prettier": "2.8.4", + "typescript": "4.9.5" }, "scripts": { "precommit": "npm run lint & lerna run test", "lint": "eslint packages/**/*.ts" }, - "dependencies": {}, "private": true, "workspaces": [ "packages/*" @@ -21,5 +20,9 @@ "hooks": { "pre-commit": "npm run precommit" } + }, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.27.1", + "@typescript-eslint/parser": "^5.27.1" } } diff --git a/packages/datx-jsonapi-angular/.npmignore b/packages/datx-jsonapi-angular/.npmignore deleted file mode 100644 index efc2c91c7..000000000 --- a/packages/datx-jsonapi-angular/.npmignore +++ /dev/null @@ -1,10 +0,0 @@ -docs -src -test -tsconfig.json -tsconfig.build.json -tslint.json -coverage -.rpt2_cache -node_modules -rollup.config.js \ No newline at end of file diff --git a/packages/datx-jsonapi-angular/LICENSE b/packages/datx-jsonapi-angular/LICENSE deleted file mode 100644 index b31ff02a7..000000000 --- a/packages/datx-jsonapi-angular/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Infinum - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/datx-jsonapi-angular/package.json b/packages/datx-jsonapi-angular/package.json deleted file mode 100644 index 232c80b31..000000000 --- a/packages/datx-jsonapi-angular/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "@datx/jsonapi-angular", - "version": "2.0.0", - "description": "DatX mixin for Angular JSON API support", - "main": "dist/index.cjs.js", - "module": "dist/index.esm.js", - "typings": "dist/index.d.ts", - "sideEffects": false, - "repository": { - "type": "git", - "url": "git+https://github.com/infinum/datx.git" - }, - "bugs": { - "url": "https://github.com/infinum/datx/issues" - }, - "homepage": "https://github.com/infinum/datx#readme", - "author": "Infinum JavaScript Team ", - "license": "MIT", - "keywords": [ - "datx", - "mobx", - "jsonapi", - "angular" - ], - "devDependencies": { - "@rollup/plugin-commonjs": "^17.0.0", - "@rollup/plugin-node-resolve": "^11.1.0", - "@types/jest": "^26.0.20", - "@types/lodash": "^4.14.168", - "@types/node": "^14.14.22", - "@types/uuid": "^8.3.0", - "isomorphic-fetch": "^3.0.0", - "jest": "^26.6.3", - "lodash": "^4.17.20", - "rollup": "^2.38.0", - "rollup-plugin-exclude-dependencies-from-bundle": "^1.1.17", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.29.0", - "rxjs": "^6.6.3", - "ts-jest": "^26.4.4", - "typescript": "^4.1.3", - "uuid": "^8.3.2" - }, - "peerDependencies": { - "rxjs": "^6.0.0" - }, - "scripts": { - "test": "jest --coverage", - "watch": "jest --watch --coverage", - "prepublish": "npm run build", - "build": "rollup -c" - }, - "jest": { - "coveragePathIgnorePatterns": [ - "/test/", - "/node_modules/" - ], - "moduleFileExtensions": [ - "ts", - "js" - ], - "testRegex": "test/(.*).test.ts$", - "globals": { - "ts-jest": { - "diagnostics": { - "warnOnly": true - } - } - }, - "preset": "ts-jest", - "testMatch": null, - "setupFilesAfterEnv": [ - "./test/setup.ts" - ] - }, - "dependencies": { - "@datx/core": "^2.0.0", - "@datx/jsonapi": "^2.0.0", - "@datx/utils": "^2.0.0" - } -} diff --git a/packages/datx-jsonapi-angular/rollup.config.js b/packages/datx-jsonapi-angular/rollup.config.js deleted file mode 100644 index c74990dd2..000000000 --- a/packages/datx-jsonapi-angular/rollup.config.js +++ /dev/null @@ -1,57 +0,0 @@ -import typescript from 'rollup-plugin-typescript2'; -import { terser } from 'rollup-plugin-terser'; -import commonjs from '@rollup/plugin-commonjs'; -import resolve from '@rollup/plugin-node-resolve'; -import excludeDependenciesFromBundle from 'rollup-plugin-exclude-dependencies-from-bundle'; - -import pkg from './package.json'; - -export default [ - { - input: './src/index.ts', - output: [{ file: pkg.main, format: 'cjs' }], - plugins: [ - resolve(), - commonjs(), - excludeDependenciesFromBundle(), - typescript({ - check: true, - typescript: require('typescript'), - tsconfig: './tsconfig.build.json', - }), - terser({ - toplevel: true, - compress: { - passes: 3, - }, - output: { - comments: false, - }, - }), - ], - onwarn(warning, rollupWarn) { - if (warning.code !== 'CIRCULAR_DEPENDENCY') { - rollupWarn(warning); - } - }, - }, - { - input: './src/index.ts', - output: [{ file: pkg.module, format: 'es' }], - plugins: [ - resolve(), - commonjs(), - excludeDependenciesFromBundle(), - typescript({ - check: true, - typescript: require('typescript'), - tsconfig: './tsconfig.build.json', - }), - ], - onwarn(warning, rollupWarn) { - if (warning.code !== 'CIRCULAR_DEPENDENCY') { - rollupWarn(warning); - } - }, - }, -]; diff --git a/packages/datx-jsonapi-angular/src/Response.ts b/packages/datx-jsonapi-angular/src/Response.ts deleted file mode 100644 index eae429333..000000000 --- a/packages/datx-jsonapi-angular/src/Response.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Response as PromiseResponse, fetchLink } from '@datx/jsonapi'; -import { IJsonapiModel } from './interfaces/IJsonapiModel'; -import { Observable } from 'rxjs'; -import { observableWrapper } from './helpers/wrapper'; - -type ILink = string | { href: string; meta: Record }; -type IAsync = Observable>; - -export class Response extends PromiseResponse> { - /** - * Function called when a link is being fetched. The returned value is cached - * - * @protected - * @param {string} name Link name - * @returns Observable that resolves with a Response object - * - * @memberOf Response - */ - protected __fetchLink(name: string): () => Observable> { - const ResponseConstructor: typeof Response = this.constructor as typeof Response; - if (!this.__cache[name]) { - const link: ILink | null = this.links && name in this.links ? this.links[name] : null; - - if (link) { - const options = Object.assign({}, this.__internal.options); - - options.networkConfig = options.networkConfig || {}; - options.networkConfig.headers = this.requestHeaders; - this.__cache[name] = (): Observable> => { - return observableWrapper((rxOptions): any => { - return fetchLink(link, this.collection, Object.assign({}, options, rxOptions), this.views, ResponseConstructor as any); - }); - } - } - } - - return this.__cache[name]; - } -} diff --git a/packages/datx-jsonapi-angular/src/decorateCollection.ts b/packages/datx-jsonapi-angular/src/decorateCollection.ts deleted file mode 100644 index 8fa618214..000000000 --- a/packages/datx-jsonapi-angular/src/decorateCollection.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { ICollectionConstructor, PureCollection, IModelConstructor, IType, PureModel, getModelType, getModelId } from '@datx/core'; -import { IRequestOptions, clearCacheByType } from '@datx/jsonapi'; -import { Observable, empty } from 'rxjs'; - -import { IJsonapiCollection } from './interfaces/IJsonapiCollection'; -import { IJsonapiModel } from './interfaces/IJsonapiModel'; -import { Response } from './Response'; -import { observableWrapper } from './helpers/wrapper'; -import { IRxFetchOptions } from './interfaces/IRxFetchOptions'; - -export function decorateCollection( - BaseClass: ICollectionConstructor, -): ICollectionConstructor { - class JsonapiCollection extends BaseClass { - public getOne(type: IType | IModelConstructor, id: string, options?: IRequestOptions): Observable> { - return observableWrapper>((rxOptions: IRxFetchOptions) => { - return super.getOne(type, id, Object.assign({}, options, rxOptions)); - }); - } - - public getMany(type: IType | IModelConstructor, options?: IRequestOptions): Observable> { - return observableWrapper>((rxOptions: IRxFetchOptions) => { - return super.getMany(type, Object.assign({}, options, rxOptions)); - }); - } - - public request(url: string, method?: string, data?: object, options?: IRequestOptions): Observable> { - return observableWrapper>((rxOptions: IRxFetchOptions) => { - return super.request(url, method, data, Object.assign({}, options, rxOptions)); - }); - } - - public removeOne(model: PureModel, options?: boolean | IRequestOptions): Observable; - public removeOne(type: IType | typeof PureModel, id: string, options?: boolean | IRequestOptions): Observable; - public removeOne( - obj: IType | typeof PureModel | PureModel, - id?: string | boolean | IRequestOptions, - options?: boolean | IRequestOptions, - ): Observable { - let remoteOp: boolean | IRequestOptions | undefined; - let modelId: string; - let model: IJsonapiModel | null; - const type = getModelType(obj); - - if (typeof id === 'object' || id === undefined || typeof id === 'boolean') { - remoteOp = id; - modelId = getModelId(obj).toString(); - model = obj as IJsonapiModel; - } else { - remoteOp = options; - modelId = getModelId(id).toString(); - model = modelId ? (this.findOne(type, modelId) as IJsonapiModel | null) : null; - } - - if (model && remoteOp) { - return model.destroy(remoteOp === true ? undefined : remoteOp); - } - - if (model) { - this.__removeModel(model); - } - clearCacheByType(type); - return empty(); - } - } - - return JsonapiCollection as unknown as ICollectionConstructor; -} diff --git a/packages/datx-jsonapi-angular/src/decorateModel.ts b/packages/datx-jsonapi-angular/src/decorateModel.ts deleted file mode 100644 index e1d329256..000000000 --- a/packages/datx-jsonapi-angular/src/decorateModel.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { IModelConstructor, PureModel } from '@datx/core'; -import { IRequestOptions } from '@datx/jsonapi'; -import { Observable } from 'rxjs'; - -import { IJsonapiModel } from './interfaces/IJsonapiModel'; -import { observableWrapper } from './helpers/wrapper'; -import { IRxFetchOptions } from './interfaces/IRxFetchOptions'; - -export function decorateModel( - BaseClass: IModelConstructor, -): IModelConstructor { - class JsonapiModel extends BaseClass { - public save(options?: IRequestOptions): Observable { - return observableWrapper((rxOptions: IRxFetchOptions) => { - return super.save(Object.assign({}, options, rxOptions)); - }); - } - - public destroy(options?: IRequestOptions): Observable { - return observableWrapper((rxOptions: IRxFetchOptions) => { - return super.destroy(Object.assign({}, options, rxOptions)) as any; - }); - } - } - - return JsonapiModel as unknown as IModelConstructor; -} diff --git a/packages/datx-jsonapi-angular/src/decorateView.ts b/packages/datx-jsonapi-angular/src/decorateView.ts deleted file mode 100644 index bb9bcea30..000000000 --- a/packages/datx-jsonapi-angular/src/decorateView.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { IViewConstructor, PureCollection } from '@datx/core'; -import { IRequestOptions } from '@datx/jsonapi'; -import { Observable } from 'rxjs'; - -import { IJsonapiView } from './interfaces/IJsonapiView'; -import { IJsonapiModel } from './interfaces/IJsonapiModel'; -import { Response } from './Response'; -import { IJsonapiCollection } from './interfaces/IJsonapiCollection'; -import { map } from 'rxjs/operators'; - -export function decorateView( - BaseClass: IViewConstructor, -): IViewConstructor { - class JsonapiView extends BaseClass { - protected __collection!: IJsonapiCollection & PureCollection; - - /** - * Fetch the records with the given type and id - * - * @param {string} type Record id - * @param {IRequestOptions} [options] Server options - * @returns {Observable} Resolves with the Response object or rejects with an error - */ - public getOne(id: string, options?: IRequestOptions): Observable> { - return this.__collection - .getOne(this.modelType, id, options) - .pipe(map(this['__addFromResponse'].bind(this))); - } - - /** - * Fetch the first page of records of the given type - * - * @param {IRequestOptions} [options] Server options - * @returns {Observable} Resolves with the Response object or rejects with an error - */ - public getMany(options?: IRequestOptions): Observable> { - return this.__collection - .getMany(this.modelType, options) - .pipe(map(this['__addFromResponse'].bind(this))); - } - } - - return JsonapiView as unknown as IViewConstructor; -} diff --git a/packages/datx-jsonapi-angular/src/helpers/wrapper.ts b/packages/datx-jsonapi-angular/src/helpers/wrapper.ts deleted file mode 100644 index fd3c2cb2f..000000000 --- a/packages/datx-jsonapi-angular/src/helpers/wrapper.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Observable, Subject } from 'rxjs'; - -import { IJsonapiModel } from '../interfaces/IJsonapiModel'; -import { IRxFetchOptions } from '../interfaces/IRxFetchOptions'; -import { Response } from '../Response'; - -export function observableWrapper>(fn: (options: IRxFetchOptions) => Promise | Observable): Observable { - return new Observable((subscriber) => { - const takeUntil$ = new Subject(); - - (fn({ - fetchOptions: { - takeUntil$, - Response, - }, - }) as Promise).then((response: U) => { - subscriber.next(response); - }, (error) => { - subscriber.error(error); - }); - - return (): void => { - takeUntil$.next(); - takeUntil$.complete(); - }; - }); -} \ No newline at end of file diff --git a/packages/datx-jsonapi-angular/src/index.ts b/packages/datx-jsonapi-angular/src/index.ts deleted file mode 100644 index 2ce8ae461..000000000 --- a/packages/datx-jsonapi-angular/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { jsonapiAngular } from './mixin'; - -export { Response } from './Response'; - -export { IJsonapiCollection } from './interfaces/IJsonapiCollection'; -export { IJsonapiModel } from './interfaces/IJsonapiModel'; -export { IJsonapiView } from './interfaces/IJsonapiView'; diff --git a/packages/datx-jsonapi-angular/src/interfaces/IJsonapiCollection.ts b/packages/datx-jsonapi-angular/src/interfaces/IJsonapiCollection.ts deleted file mode 100644 index 7c7407ffc..000000000 --- a/packages/datx-jsonapi-angular/src/interfaces/IJsonapiCollection.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { IRequestOptions, IResponse } from '@datx/jsonapi'; -import { IType, PureModel, IModelConstructor, PureCollection } from '@datx/core'; -import { Observable } from 'rxjs'; - -import { IJsonapiModel } from './IJsonapiModel'; -import { Response } from '../Response'; - -export interface IJsonapiCollection extends PureCollection { - sync(body?: IResponse): T | Array | null; - getOne(type: IType | IModelConstructor, id: string, options?: IRequestOptions): Observable>; - getMany(type: IType | IModelConstructor, options?: IRequestOptions): Observable>; - request(url: string, method?: string, data?: object, options?: IRequestOptions): Observable>; - removeOne(type: IType | typeof PureModel, id: string, options?: boolean | IRequestOptions): Observable; - removeOne(model: PureModel, options?: boolean | IRequestOptions): Observable; -} diff --git a/packages/datx-jsonapi-angular/src/interfaces/IJsonapiModel.ts b/packages/datx-jsonapi-angular/src/interfaces/IJsonapiModel.ts deleted file mode 100644 index c88b9e424..000000000 --- a/packages/datx-jsonapi-angular/src/interfaces/IJsonapiModel.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IRequestOptions } from '@datx/jsonapi'; -import { Observable } from 'rxjs'; - -export interface IJsonapiModel { - save(options?: IRequestOptions): Observable; - - destroy(options?: IRequestOptions): Observable; -} diff --git a/packages/datx-jsonapi-angular/src/interfaces/IJsonapiView.ts b/packages/datx-jsonapi-angular/src/interfaces/IJsonapiView.ts deleted file mode 100644 index 837fc4dca..000000000 --- a/packages/datx-jsonapi-angular/src/interfaces/IJsonapiView.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRequestOptions, IResponse } from '@datx/jsonapi'; -import { View } from '@datx/core'; -import { Observable } from 'rxjs'; - -import { IJsonapiModel } from './IJsonapiModel'; -import { Response } from '../Response'; - -export interface IJsonapiView extends View { - sync(body?: IResponse): T | Array | null; - - getOne(id: string, options?: IRequestOptions): Observable>; - getMany(options?: IRequestOptions): Observable>; -} diff --git a/packages/datx-jsonapi-angular/src/interfaces/IRxFetchOptions.ts b/packages/datx-jsonapi-angular/src/interfaces/IRxFetchOptions.ts deleted file mode 100644 index d1c6cc82d..000000000 --- a/packages/datx-jsonapi-angular/src/interfaces/IRxFetchOptions.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Subject } from 'rxjs'; -import { Response } from '../Response'; - -export interface IRxFetchOptions { - fetchOptions: { - takeUntil$: Subject; - Response?: typeof Response, - } -} \ No newline at end of file diff --git a/packages/datx-jsonapi-angular/src/mixin.ts b/packages/datx-jsonapi-angular/src/mixin.ts deleted file mode 100644 index dad887da2..000000000 --- a/packages/datx-jsonapi-angular/src/mixin.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { - ICollectionConstructor, - IModelConstructor, - isCollection, - isModel, - isView, - IViewConstructor, - PureCollection, - PureModel, -} from '@datx/core'; -import { jsonapi } from '@datx/jsonapi'; - -import { decorateCollection } from './decorateCollection'; -import { decorateModel } from './decorateModel'; -import { decorateView } from './decorateView'; -import { IJsonapiCollection } from './interfaces/IJsonapiCollection'; -import { IJsonapiModel } from './interfaces/IJsonapiModel'; -import { IJsonapiView } from './interfaces/IJsonapiView'; - -export function jsonapiAngular( - Base: IModelConstructor, -): IModelConstructor; - -export function jsonapiAngular( - Base: ICollectionConstructor, -): ICollectionConstructor; - -export function jsonapiAngular( - Base: IViewConstructor, -): IViewConstructor; - -export function jsonapiAngular( - Base: IModelConstructor | ICollectionConstructor | IViewConstructor, -): - | IModelConstructor - | ICollectionConstructor - | IViewConstructor { - if (isModel(Base)) { - // @ts-ignore - return decorateModel(jsonapi(Base)); - } - - if (isCollection(Base)) { - // @ts-ignore - return decorateCollection(jsonapi(Base)); - } - - if (isView(Base)) { - // @ts-ignore - return decorateView(jsonapi(Base)); - } - - throw new Error('The instance needs to be a model, collection or a view'); -} diff --git a/packages/datx-jsonapi-angular/test/general.test.ts b/packages/datx-jsonapi-angular/test/general.test.ts deleted file mode 100644 index 896cb9205..000000000 --- a/packages/datx-jsonapi-angular/test/general.test.ts +++ /dev/null @@ -1,718 +0,0 @@ -import { Collection, getModelId, getModelType, Model } from '@datx/core'; -import { mobx } from '@datx/utils'; - -import { getModelRefLinks, modelToJsonApi } from '@datx/jsonapi'; -import { Event, Image, Photo, TestStore, User } from './utils/setup'; -import { jsonapiAngular } from '../src'; - -describe('General', () => { - it('should initialize', () => { - const store = new TestStore(); - - expect(store).toBeTruthy(); - }); - - it('should sync an event', () => { - const store = new TestStore(); - const event = store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - type: 'event', - }, - }) as Event; - - expect(event.name).toBe('Demo'); - }); - - it('should handle empty array reference', () => { - const store = new TestStore(); - const event = store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - images: { - data: [], - }, - }, - type: 'event', - }, - }) as Event; - - expect(event.name).toBe('Demo'); - }); - - it('should handle empty reference', () => { - const store = new TestStore(); - const event = store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - image: {}, - }, - type: 'event', - }, - }) as Event; - - expect(event.name).toBe('Demo'); - }); - - it('should handle missing reference', () => { - const store = new TestStore(); - const event = store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - image: { - data: { - id: '1', - type: 'image', - }, - }, - }, - type: 'event', - }, - }) as Event; - - expect(event.name).toBe('Demo'); - if (event.meta.refs.image instanceof Array) { - expect(event.meta.refs.image).not.toBeInstanceOf(Array); - } else { - expect(event.meta.refs.image?.id).toBe('1'); - } - expect(event.image).toBeNull(); - }); - - it('should find an event', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - type: 'event', - }, - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - if (event) { - expect(event.meta.id).toBe('1'); - expect(event.meta.type).toBe('event'); - expect(event.name).toBe('Demo'); - } - }); - - it('should trigger autorun on change', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - type: 'event', - }, - }); - - const event = store.findOne(Event, '1'); - - expect(event).toBeInstanceOf(Event); - if (event) { - let name = 'Demo'; - let autorunCount = 0; - - mobx.autorun(() => { - expect(event.name).toBe(name); - autorunCount++; - }); - - mobx.runInAction(() => { - name = 'Foo'; - event.name = 'Foo'; - }); - expect(autorunCount).toBe(mobx.useRealMobX ? 2 : 1); - } - }); - - it('should handle relationships with duplicates', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - images: { - data: [ - { - id: '2', - type: 'image', - }, - ], - }, - }, - type: 'event', - }, - included: [ - { - attributes: { - name: 'Header', - }, - id: '2', - type: 'image', - }, - { - attributes: { - name: 'Header', - }, - id: '2', - type: 'image', - }, - ], - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - if (event) { - expect(event.name).toBe('Demo'); - expect(event.images.length).toBe(1); - } - - const images = store.findAll(Image); - - expect(images.length).toBe(1); - - const foo = store.findAll('foo'); - - expect(foo.length).toBe(0); - }); - - it('should handle relationship elements without links attribute', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - image: { - data: { - id: '2', - type: 'images', - }, - }, - }, - type: 'event', - }, - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - if (event) { - expect(event.name).toBe('Demo'); - expect(event.image).toBe(null); - } - }); - - it('should handle basic circular relations', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - images: { - data: [ - { - id: '2', - type: 'image', - }, - ], - }, - }, - type: 'event', - }, - included: [ - { - attributes: { - name: 'Header', - }, - id: '2', - relationships: { - event: { - data: { - id: '1', - type: 'event', - }, - }, - }, - type: 'image', - }, - ], - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - if (event) { - expect(event.name).toBe('Demo'); - expect(event.images[0].name).toBe('Header'); - expect(event.images[0].event.meta.id).toBe('1'); - } - }); - - it('should return a event with all associated objects', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Meetup', - slug: 'meetup-1', - }, - id: '1', - relationships: { - images: { - data: [ - { type: 'image', id: '1' }, - { type: 'image', id: '2' }, - { type: 'image', id: '3' }, - ], - }, - organizers: { - data: [ - { type: 'organizers', id: '1' }, - { type: 'organizers', id: '2' }, - ], - }, - }, - type: 'event', - }, - included: [ - { - attributes: { - firstName: 'John', - }, - id: '1', - relationships: { - event: { - data: { type: 'event', id: '1' }, - }, - image: { - data: { type: 'image', id: '2' }, - }, - }, - type: 'organizers', - }, - { - attributes: { - firstName: 'Jane', - }, - id: '2', - relationships: { - event: { - data: { type: 'event', id: '1' }, - }, - image: { - data: { type: 'image', id: '3' }, - }, - }, - type: 'organizers', - }, - { - attributes: { - name: 'Sam', - }, - id: '1', - relationships: { - event: { - data: { type: 'event', id: '1' }, - }, - }, - type: 'image', - }, - { - attributes: { - name: 'Organizer Sam', - }, - id: '2', - relationships: { - event: { - data: { type: 'event', id: '1' }, - }, - }, - type: 'image', - }, - { - attributes: { - name: 'Organizer Jane', - }, - id: '3', - relationships: { - event: { - data: { type: 'event', id: '1' }, - }, - }, - type: 'image', - }, - ], - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - if (event) { - expect(event.organizers.length).toBe(2); - expect(event.images.length).toBe(3); - expect(event.organizers[0].image.meta.id).toBe('2'); - } - }); - - it('should remove an event', () => { - const store = new TestStore(); - - store.sync({ - data: [ - { id: '1', type: 'event', attributes: {} }, - { id: '2', type: 'event', attributes: {} }, - ], - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - if (event) { - expect(event.meta.id).toBe('1'); - } - store.removeOne(Event, '1'); - const events = store.findAll(Event); - expect(events.length).toBe(1); - }); - - it('should remove all events', () => { - const store = new TestStore(); - - store.sync({ - data: [ - { id: '1', type: 'event', attributes: {} }, - { id: '2', type: 'event', attributes: {} }, - ], - }); - - const events = store.findAll(Event); - - expect(events.length).toBe(2); - store.removeAll(Event); - const events2 = store.findAll(Event); - - expect(events2).toHaveLength(0); - }); - - it('should reset', () => { - const store = new TestStore(); - - store.sync({ - data: [ - { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - images: { - data: [ - { - id: '2', - type: 'image', - }, - ], - }, - }, - type: 'event', - }, - { - attributes: { - name: 'Demo 2', - }, - id: '2', - type: 'event', - }, - ], - included: [ - { - attributes: { - name: 'Header', - }, - id: '2', - relationships: { - event: { - data: { type: 'event', id: '1' }, - }, - }, - type: 'image', - }, - ], - }); - - const events = store.findAll(Event); - const images = store.findAll(Image); - - expect(events.length).toBe(2); - expect(images.length).toBe(1); - - store.reset(); - - const events2 = store.findAll(Event); - const images2 = store.findAll(Image); - - expect(events2).toHaveLength(0); - expect(images2).toHaveLength(0); - }); - - it('should handle circular relations', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - images: { - links: { - self: 'https://example.com/events/1/relationships/images', - }, - }, - }, - type: 'event', - }, - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - - if (event) { - expect(event.name).toBe('Demo'); - expect(getModelRefLinks(event).images).toEqual({ - self: 'https://example.com/events/1/relationships/images', - }); - } - }); - - it('should handle serialization/deserialization with circular relations', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - images: { - links: { - self: 'https://example.com/events/1/relationships/images', - }, - }, - }, - type: 'event', - }, - }); - - const data = JSON.stringify(store.toJSON()); - - const newStore = new TestStore(JSON.parse(data)); - - const event = newStore.findOne(Event, '1'); - - expect(event).not.toBeNull(); - - if (event) { - expect(event.name).toBe('Demo'); - expect(getModelRefLinks(event).images).toEqual({ - self: 'https://example.com/events/1/relationships/images', - }); - } - }); - - it('should support custom models', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - firstName: 'John', - lastName: 'Doe', - }, - id: '1', - type: 'user', - }, - }); - - const user = store.findOne(User, '1'); - - expect(user).not.toBeNull(); - - if (user) { - expect(user.fullName).toBe('John Doe'); - } - }); - - it('should support default properties', () => { - const store = new TestStore(); - - store.sync({ - data: [ - { - attributes: { - firstName: 'John', - lastName: 'Doe', - }, - id: '1', - type: 'user', - }, - { - attributes: { - filename: 'foo.jpg', - }, - id: '1', - type: 'photo', - }, - { - attributes: { - filename: 'bar.png', - selected: true, - }, - id: '2', - type: 'photo', - }, - { - attributes: { - filename: 'baz.png', - selected: false, - }, - id: '3', - type: 'photo', - }, - ], - }); - - const user = store.findOne(User, '1'); - - expect(user).not.toBeNull(); - - if (user) { - expect(user['selected']).toBeUndefined(); - } - - const photo1 = store.findOne(Photo, '1'); - - expect(photo1).not.toBeNull(); - if (photo1) { - expect(photo1.selected).toBe(false); - expect(photo1['foo']).not.toBe(false); - expect(photo1['foo']).toBeUndefined(); - } - - const photo2 = store.findOne(Photo, '2'); - - expect(photo2).not.toBeNull(); - if (photo2) { - expect(photo2.selected).toBe(true); - } - - const photo3 = store.findOne(Photo, '3'); - - expect(photo3).not.toBeNull(); - if (photo3) { - expect(photo3.selected).toBe(false); - } - - const photos = store.findAll(Photo); - const selected = photos.filter((photo) => photo.selected); - - expect(selected.length).toBe(1); - expect(selected[0].meta.id).toBe('2'); - }); - - it('should support generic records', () => { - const JsonapiCollection = jsonapiAngular(Collection); - const store = new JsonapiCollection(); - const user = store.sync({ - data: { - attributes: { - name: 'John', - }, - id: '1', - relationships: { - self: { - data: { - id: '1', - type: 'user', - }, - }, - }, - type: 'user', - }, - }); - - if (user instanceof Model) { - expect(user['name']).toBe('John'); - expect(getModelId(user['self'])).toBe('1'); - expect(getModelType(user)).toBe('user'); - expect(store.findAll('user').length).toBe(1); - } - }); - - it('should serialize empty relationships', () => { - const event = new Event({ name: 'Foo' }); - - const data = modelToJsonApi(event as any); - - expect(data.attributes && 'id' in data.attributes).toBe(false); - expect(data.relationships).not.toBeUndefined(); - if (data.relationships) { - expect(data.relationships.images.data).toHaveLength(0); - expect(data.relationships.image.data).toBeNull(); - } - }); - - it('should serialize model id correctly', () => { - const event = new Event({ id: '1234', name: 'Foo' }); - - const data = modelToJsonApi(event as any); - - expect(data.attributes && 'id' in data.attributes).toBe(false); - if (data.relationships) { - expect(data.relationships.images.data).toHaveLength(0); - expect(data.relationships.image.data).toBeNull(); - } - }); -}); diff --git a/packages/datx-jsonapi-angular/test/mobx.ts b/packages/datx-jsonapi-angular/test/mobx.ts deleted file mode 100644 index d8c818f5f..000000000 --- a/packages/datx-jsonapi-angular/test/mobx.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { mobx } from '@datx/utils'; - -let testMobx = mobx; - -Object.assign(mobx, { - configure() { - // noop - }, - isComputedProp(_val: any): boolean { - return false; - } -}); - -// @ts-ignore -mobx.configure = () => { /**/ }; - -if (!['-1', '0'].includes(process.env.MOBX_VERSION || '0')) { - testMobx = require('mobx'); - testMobx.makeObservable = testMobx.makeObservable || mobx.makeObservable; -} - -export default testMobx; diff --git a/packages/datx-jsonapi-angular/test/mock/empty.json b/packages/datx-jsonapi-angular/test/mock/empty.json deleted file mode 100644 index 3356af5ff..000000000 --- a/packages/datx-jsonapi-angular/test/mock/empty.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "data": null -} diff --git a/packages/datx-jsonapi-angular/test/mock/event-1.json b/packages/datx-jsonapi-angular/test/mock/event-1.json deleted file mode 100644 index 1008d0857..000000000 --- a/packages/datx-jsonapi-angular/test/mock/event-1.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "data": { - "id": "12345", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "links": { - "image": "https://example.com/images/1" - }, - "meta": { - "name": "event-1" - } - } -} diff --git a/packages/datx-jsonapi-angular/test/mock/event-1b.json b/packages/datx-jsonapi-angular/test/mock/event-1b.json deleted file mode 100644 index 2db6bbb71..000000000 --- a/packages/datx-jsonapi-angular/test/mock/event-1b.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "data": { - "id": "1", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "links": { - "self": "https://example.com/event/1234" - } - } -} diff --git a/packages/datx-jsonapi-angular/test/mock/events-1.json b/packages/datx-jsonapi-angular/test/mock/events-1.json deleted file mode 100644 index 0b0098276..000000000 --- a/packages/datx-jsonapi-angular/test/mock/events-1.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "data": [ - { - "id": "1", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "meta": { - "createdAt": "2017-03-19T16:00:00.000Z" - }, - "relationships": { - "images": { - "data": [ - { - "type": "image", - "id": "1" - } - ], - "links": { - "self": "https://example.com/event/1/images" - }, - "meta": { - "foo": "bar" - } - } - } - }, - { - "id": "2", - "type": "event", - "attributes": { - "title": "Test 2", - "date": "2017-03-20" - } - }, - { - "id": "3", - "type": "event", - "attributes": { - "title": "Test 3", - "date": "2017-03-21" - } - }, - { - "id": "4", - "type": "event", - "attributes": { - "title": "Test 4", - "date": "2017-03-22" - } - } - ], - "links": { - "self": "https://example.com/event", - "next": { - "href": "https://example.com/event?page=2", - "meta": { - "foo": "bar" - } - } - } -} diff --git a/packages/datx-jsonapi-angular/test/mock/events-2.json b/packages/datx-jsonapi-angular/test/mock/events-2.json deleted file mode 100644 index 24e4ebd44..000000000 --- a/packages/datx-jsonapi-angular/test/mock/events-2.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "data": [ - { - "id": "5", - "type": "event", - "attributes": { - "title": "Test 5", - "date": "2017-03-23" - } - }, - { - "id": "6", - "type": "event", - "attributes": { - "title": "Test 6", - "date": "2017-03-24" - } - } - ], - "links": { - "prev": "https://example.com/event" - } -} diff --git a/packages/datx-jsonapi-angular/test/mock/invalid.json b/packages/datx-jsonapi-angular/test/mock/invalid.json deleted file mode 100644 index c14890c93..000000000 --- a/packages/datx-jsonapi-angular/test/mock/invalid.json +++ /dev/null @@ -1 +0,0 @@ -

Not found

diff --git a/packages/datx-jsonapi-angular/test/network/basic.test.ts b/packages/datx-jsonapi-angular/test/network/basic.test.ts deleted file mode 100644 index e7735df4d..000000000 --- a/packages/datx-jsonapi-angular/test/network/basic.test.ts +++ /dev/null @@ -1,187 +0,0 @@ -import { - getModelMeta, - getModelRefMeta, - modelToJsonApi, - config, - CachingStrategy, - getModelLinks, -} from '@datx/jsonapi'; - -import { setRequest, setupNetwork, confirmNetwork } from '../utils/api'; -import { Event, TestStore } from '../utils/setup'; -import { switchMap } from 'rxjs/operators'; -import { Response, IJsonapiModel } from '../../src'; - -const baseTransformRequest = config.transformRequest; -const baseTransformResponse = config.transformResponse; - -describe('Network basics', () => { - beforeEach(() => { - config.baseUrl = 'https://example.com/'; - config.transformRequest = baseTransformRequest; - config.transformResponse = baseTransformResponse; - config.cache = CachingStrategy.NetworkOnly; - setupNetwork(); - }); - - afterEach(confirmNetwork); - - it('should fetch the basic data', (done) => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - const store = new TestStore(); - store.getMany(Event).subscribe((events) => { - try { - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - if (events.data instanceof Array) { - const event = events.data[0]; - - expect(event['title']).toBe('Test 1'); - expect(getModelMeta(event).createdAt).toBe('2017-03-19T16:00:00.000Z'); - expect(event.meta.refs.images).toBeInstanceOf(Array); - if (event.meta.refs.images instanceof Array) { - expect(event.meta.refs.images.map((image) => image.id)).toContain('1'); - } - expect(event.meta.refs.images).toHaveLength(1); - expect(getModelRefMeta(event).images.foo).toBe('bar'); - - const data = modelToJsonApi(event); - - expect(data.id).toBe('1'); - expect(data.type).toBe('event'); - expect(data.attributes && data.attributes.title).toBe('Test 1'); - expect( - data.relationships && data.relationships.images.data && data.relationships.images.data[0], - ).toEqual({ type: 'image', id: '1' }); - expect(data.attributes && 'images' in data.attributes).toBe(false); - } - done(); - } catch(e) { - done(e); - } - }); - }); - - it('return null if no data in response', (done) => { - setRequest({ - name: 'empty', - url: 'event', - }); - - const store = new TestStore(); - store.getMany(Event).subscribe((events) => { - try { - expect(events.data).toBeNull(); - done(); - } catch(e) { - done(e); - } - }); - }); - - it('should fetch one item', (done) => { - setRequest({ - name: 'event-1b', - url: 'event/1', - }); - - const store = new TestStore(); - store.getOne(Event, '1').subscribe((events) => { - try { - const record = events.data; - - expect(record).toBeInstanceOf(Object); - if (record) { - expect(record['title']).toBe('Test 1'); - expect(getModelLinks(record)).toBeInstanceOf(Object); - expect(getModelLinks(record).self).toBe('https://example.com/event/1234'); - } - done(); - } catch(e) { - done(e); - } - }); - }); - - it('should support pagination', (done) => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - let events; - let events2; - let events1; - - const store = new TestStore(); - store.getMany(Event).pipe( - switchMap((ev) => { - events = ev; - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - if (events.data instanceof Array) { - expect(events.data instanceof Array && events.data[0]['title']).toBe('Test 1'); - expect(events.links).toBeInstanceOf(Object); - if (events.links instanceof Object && typeof events.links.next === 'object') { - expect(events.links.next.href).toBe('https://example.com/event?page=2'); - expect(events.links.next.meta.foo).toBe('bar'); - } - } - - setRequest({ - name: 'events-2', - query: { - page: 2, - }, - url: 'event', - }); - - return events.next?.() as any; - }), - switchMap((ev2: Response) => { - events2 = ev2; - expect(events2).toBeInstanceOf(Object); - if (events2) { - expect(events2.data).toBeInstanceOf(Array); - expect(events2.data).toHaveLength(2); - expect(events2.data instanceof Array && events2.data[0]['title']).toBe('Test 5'); - - setRequest({ - name: 'events-1', - url: 'event', - }); - - return events2.prev?.() as any; - } - }), - switchMap((ev1: Response) => { - events1 = ev1; - expect(events1).toBeInstanceOf(Object); - if (events1) { - expect(events1.data).toBeInstanceOf(Array); - expect(events1.data).toHaveLength(4); - expect(events1.data instanceof Array && events1.data[0]['title']).toBe('Test 1'); - - setRequest({ - name: 'events-1', - url: 'event', - }); - - return events2.prev?.() as any; - } - }), - ).subscribe((events1b: Response) => { - try { - expect(events1.snapshot).toEqual(events.snapshot); - expect(events1.snapshot).toEqual(events1b?.snapshot); - done(); - } catch(e) { - done(e); - } - }); - }); -}); diff --git a/packages/datx-jsonapi-angular/test/network/error-handlint.test.ts b/packages/datx-jsonapi-angular/test/network/error-handlint.test.ts deleted file mode 100644 index 1e43f518e..000000000 --- a/packages/datx-jsonapi-angular/test/network/error-handlint.test.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { config, CachingStrategy } from '@datx/jsonapi'; -import { setupNetwork, confirmNetwork, setRequest } from '../utils/api'; -import { TestStore } from '../utils/setup'; - -describe('error handling', () => { - beforeEach(() => { - config.baseUrl = 'https://example.com/'; - config.cache = CachingStrategy.NetworkOnly; - setupNetwork(); - }); - - afterEach(confirmNetwork); - - it('should handle network failure', (done) => { - const store = new TestStore(); - - setRequest({ - name: 'events-1', - status: 404, - url: 'event', - }); - - store.getMany('event').subscribe(() => { - done(new Error('Should have failed')); - }, (err) => { - expect(err).toBeInstanceOf(Object); - expect(err.status).toBe(404); - expect(err.message).toBe('Invalid HTTP status: 404'); - done(); - }); - }); - - it('should handle invalid responses', (done) => { - const store = new TestStore(); - - setRequest({ - name: 'invalid', - url: 'event', - }); - - store.getMany('event').subscribe(() => { - done(new Error('Should have failed')); - }, (response) => { - expect(response.error).toBeInstanceOf(Error); - done(); - }); - }); -}); \ No newline at end of file diff --git a/packages/datx-jsonapi-angular/test/network/updates.test.ts b/packages/datx-jsonapi-angular/test/network/updates.test.ts deleted file mode 100644 index 63fcb473a..000000000 --- a/packages/datx-jsonapi-angular/test/network/updates.test.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { modelToJsonApi, config, CachingStrategy } from '@datx/jsonapi'; -import { switchMap } from 'rxjs/operators'; - -import { setupNetwork, setRequest, confirmNetwork } from '../utils/api'; -import { Event, TestStore } from '../utils/setup'; -import { Response } from '../../src'; -import { throwError } from 'rxjs'; - -describe('updates', () => { - beforeEach(() => { - config.baseUrl = 'https://example.com/'; - config.cache = CachingStrategy.NetworkOnly; - setupNetwork(); - }); - - afterEach(confirmNetwork); - - describe('adding record', () => { - it('should add a record', (done) => { - const store = new TestStore(); - const record = new Event({ - title: 'Example title', - }); - - store.add(record); - - setRequest({ - data: JSON.stringify({ - data: modelToJsonApi(record as any), - }), - method: 'POST', - name: 'event-1', - url: 'event', - }); - - const data = modelToJsonApi(record as any); - - expect(record['title']).toBe('Example title'); - expect(data.id).toBeUndefined(); - expect(data.type).toBe('event'); - expect(data.attributes && data.attributes.id).toBeUndefined(); - expect(data.attributes && data.attributes.type).toBeUndefined(); - - record.save().subscribe((updated) => { - try { - expect(updated['title']).toBe('Test 1'); - expect(updated).toBe(record); - done(); - } catch(e) { - done(e); - } - }); - - }); - - it('should add a record if not in store', (done) => { - const record = new Event({ - title: 'Example title', - }); - - setRequest({ - data: JSON.stringify({ - data: modelToJsonApi(record as any), - }), - method: 'POST', - name: 'event-1', - url: 'event', - }); - - const data = modelToJsonApi(record as any); - - expect(record['title']).toBe('Example title'); - expect(data.id).toBeUndefined(); - expect(data.type).toBe('event'); - expect(data.attributes && data.attributes.id).toBeUndefined(); - expect(data.attributes && data.attributes.type).toBeUndefined(); - - record.save().subscribe((updated) => { - try { - expect(updated['title']).toBe('Test 1'); - expect(updated).toBe(record); - done(); - } catch(e) { - done(e); - } - }); - }); - }); - - describe('updating record', () => { - it('should update a record', (done) => { - setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - let record; - - const store = new TestStore(); - store.getOne('event', '12345').pipe( - switchMap((events: Response) => { - record = events.data; - - expect(record).toBeInstanceOf(Event); - if (record instanceof Event) { - setRequest({ - data: JSON.stringify({ - data: { - attributes: { - title: 'Updated title', - }, - id: '12345', - type: 'event', - relationships: { - organizers: { data: [] }, - images: { data: [] }, - image: { data: null }, - }, - }, - }), - method: 'PATCH', - name: 'event-1b', - url: 'event/12345', - }); - - record.title = 'Updated title'; - expect(record.meta.dirty.title).toBe(true); - - return record.save(); - } - return throwError(new Error('Wrong path')); - }), - ).subscribe((updated) => { - try { - expect(record.meta.dirty.title).toBe(false); - expect(updated['title']).toBe('Test 1'); - expect(updated).toBe(record); - done(); - } catch(e) { - done(e); - } - }); - }); - }); - - describe('removing record', () => { - it('should remove a record', (done) => { - setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - const store = new TestStore(); - - store.add({ id: '1' }, Event); - store.getOne(Event, '12345').pipe( - switchMap((events) => { - store.add({ id: '2' }, Event); - - const record = events.data as Event; - - setRequest({ - method: 'DELETE', - name: 'event-1', - url: 'event/12345', - }); - - expect(store.findAll(Event).length).toBe(3); - return record.destroy(); - }), - ).subscribe(() => { - try { - const remainingEvents = store.findAll(Event); - expect(remainingEvents.length).toBe(2); - - expect(remainingEvents[0] && remainingEvents[0].meta.id).toBe('1'); - expect(remainingEvents[1] && remainingEvents[1].meta.id).toBe('2'); - done(); - } catch(e) { - done(e); - } - }); - }); - - it('should remove a record from store', (done) => { - setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - const store = new TestStore(); - - store.add({ id: '1' }, Event); - store.getOne(Event, '12345').pipe( - switchMap((events) => { - store.add({ id: '2' }, Event); - - const record = events.data as Event; - - setRequest({ - method: 'DELETE', - name: 'event-1', - url: 'event/12345', - }); - - expect(store.findAll(Event).length).toBe(3); - return store.removeOne(record, true); - }), - ).subscribe(() => { - try { - const remainingEvents = store.findAll(Event); - expect(remainingEvents.length).toBe(2); - - expect(remainingEvents[0] && remainingEvents[0].meta.id).toBe('1'); - expect(remainingEvents[1] && remainingEvents[1].meta.id).toBe('2'); - done(); - } catch(e) { - done(e); - } - }); - }); - }); -}); diff --git a/packages/datx-jsonapi-angular/test/setup.ts b/packages/datx-jsonapi-angular/test/setup.ts deleted file mode 100644 index 59270981f..000000000 --- a/packages/datx-jsonapi-angular/test/setup.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { mobx } from '@datx/utils'; - -import mobxInstance from './mobx'; - -if (parseInt(process.env.MOBX_VERSION || '0', 10) < 0) { - mobx.useMobx(false); -} - -if ('configure' in mobxInstance) { - // @ts-ignores - mobxInstance.configure({ - enforceActions: 'observed', - // computedRequiresReaction: true, - }); -} diff --git a/packages/datx-jsonapi-angular/test/utils/api.ts b/packages/datx-jsonapi-angular/test/utils/api.ts deleted file mode 100644 index c667e85d9..000000000 --- a/packages/datx-jsonapi-angular/test/utils/api.ts +++ /dev/null @@ -1,197 +0,0 @@ -import * as fs from 'fs'; -import { isFunction } from 'lodash'; -import * as path from 'path'; -import * as nodeUrl from 'url'; -import { v1 } from 'uuid'; - -import { config, IHeaders, IRawResponse } from '@datx/jsonapi'; -import { Observable } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; - -function getMockStream(name: string): string { - const testPath = path.join(__dirname, `../mock/${name}.json`); - - return fs.existsSync(testPath) ? fs.readFileSync(testPath, 'utf-8') : 'null'; -} - -interface IRequestOptions { - id: string; - name?: string; - url: string; - method: string; - data?: any; - headers?: Record; - reqheaders?: Record; - status: number; - responseFn?(url: RequestInfo, body?: string): void; -} - -export interface IMockArgs extends Partial { - hostname?: string; - query?: boolean | string | (() => boolean) | object; -} - -const expectedRequests: Array = []; - -const executedRequests: Array<{ - url: RequestInfo; - id: string; -}> = []; - - -function fetchInterceptor(method: string, url: string, body: any, requestHeaders: IHeaders, fetchOptions: any): Promise { - const takeUntil$: Observable | undefined = fetchOptions?.takeUntil$; - - let request$ = new Observable((subscriber) => { - const request = expectedRequests.find( - (req) => req.url === url && req.method === (method || 'GET') && !req.done, - ); - - if (!request) { - subscriber.error({ - data: {}, - headers: new Headers(), - requestHeaders, - status: 0, - error: new Error(`Unexpected request: ${method || 'GET'} ${url}`), - }); - throw new Error(`Unexpected request: ${method || 'GET'} ${url}`); - } - - executedRequests.push({ url, id: request.id }); - request.done = true; - - if (request.reqheaders) { - expect(Object.assign({}, config.defaultFetchOptions?.headers, requestHeaders)).toMatchObject(request.reqheaders); - } - - if (request.data) { - const expected = typeof request.data === 'string' ? request.data : JSON.stringify(request.data); - const received = - body && typeof body === 'string' - ? body - : JSON.stringify(body); - - expect(received).toBe(expected); - } - - const data = getMockStream(request.name || request.url); - - try { - const parsed = JSON.parse(data); - let response; - - if (request.responseFn) { - response = request.responseFn(url, body as string); - } - - if (request.status >= 200 && request.status < 300) { - subscriber.next({ - data: response === undefined ? parsed : response, - headers: new Headers(), - requestHeaders, - status: request.status, - }); - } else { - subscriber.error({ - message: `Invalid HTTP status: ${request.status}`, - status: request.status, - }); - } - } catch (e) { - subscriber.error({ - error: e, - headers: new Headers(), - requestHeaders, - status: 0, - }); - } - subscriber.complete(); - }); - - if (takeUntil$) { - request$ = request$.pipe(takeUntil(takeUntil$)); - } - - return request$.toPromise().then((d) => { - if (d === undefined) { - throw new Error('Request canceled'); - } - - return d; - }); -} - -export function setupNetwork(): void { - expectedRequests.length = 0; - executedRequests.length = 0; - config.baseFetch = fetchInterceptor; -} - -export function confirmNetwork(): void { - expect(expectedRequests).toHaveLength(executedRequests.length); -} - -/** - * Prepare a mock API call - * - * @param {object} param - Param object - * @param {String} param.name - Name of the mock API call - * @param {String} [param.method=requestType.READ] - HTTP method to be used - * @param {String} [param.hostname=config.root] - Hostname to be mocked - * @param {String} [param.url='/'] - URL to be mocked - * @param {any} [param.data] - Expected body - * @param {Function} [param.query=true] - Function to be called during the query step - * @param {Function} param.responseFn - Function to be called when response should be sent - * @param {object} [param.headers={'content-type': 'application/vnd.api+json'}] - * HTTP headers to be used in the mock response - * @param {object} [reqheaders={'content-type': 'application/vnd.api+json'}] - * Expected request headers - * @param {Number} status - HTTP status code that should be returned - * @return {undefined} - */ -export function setRequest({ - name, - method = 'GET', - url = '/', - data, - query = true, - responseFn, - headers = { 'content-type': 'application/vnd.api+json' }, - reqheaders = { 'content-type': 'application/vnd.api+json' }, - status = 200, -}: IMockArgs): { isDone(): boolean } { - const apiUrl = nodeUrl.parse(config.baseUrl); - const hostname = `${apiUrl.protocol}//${apiUrl.hostname}`; - const pathname = apiUrl.pathname || ''; - - let queryString = ''; - - if (typeof query === 'object' && !isFunction(query)) { - queryString = `?${Object.keys(query).map((key) => `${key}=${query[key]}`)}`; - } else if (typeof query === 'string') { - queryString = `?${query}`; - } - - const id = v1(); - const targetUrl = `${hostname}${pathname}${url}${queryString}`; - - expectedRequests.push({ - id, - name, - method, - url: targetUrl, - data, - headers, - reqheaders, - status, - responseFn, - done: false, - }); - - return { - isDone(): boolean { - return Boolean(executedRequests.find((req) => req.id === id)); - }, - }; -} diff --git a/packages/datx-jsonapi-angular/test/utils/models/Event.ts b/packages/datx-jsonapi-angular/test/utils/models/Event.ts deleted file mode 100644 index 1faf8f6cb..000000000 --- a/packages/datx-jsonapi-angular/test/utils/models/Event.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { IType, Model, prop } from '@datx/core'; - -import { jsonapiAngular } from '../../../src'; -import { Image } from './Image'; -import { Organizer } from './Organizer'; - -export class Event extends jsonapiAngular(Model) { - public static type: IType = 'event'; - - @prop.identifier - public id!: string; - - @prop - public name!: string; - - @prop - public title!: string; - - @prop.toMany(Organizer) - public organizers!: Array; - - @prop.toMany(Image) - public images!: Array; - - @prop.toOne(Image) - public image!: Image; - - @prop - public imagesLinks!: Record; -} diff --git a/packages/datx-jsonapi-angular/test/utils/models/Image.ts b/packages/datx-jsonapi-angular/test/utils/models/Image.ts deleted file mode 100644 index 24ee0e027..000000000 --- a/packages/datx-jsonapi-angular/test/utils/models/Image.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { IType, Model, prop } from '@datx/core'; -import { mobx } from '@datx/utils'; - -import { jsonapiAngular } from '../../../src'; -import { Event } from './Event'; - -export class Image extends jsonapiAngular(Model) { - public static type: IType = 'image'; - - @prop - public name!: string; - - @prop.toOne('event') - public event!: Event; - - @mobx.computed - get id(): string { - return this.meta.id.toString(); - } -} diff --git a/packages/datx-jsonapi-angular/test/utils/models/LineItem.ts b/packages/datx-jsonapi-angular/test/utils/models/LineItem.ts deleted file mode 100644 index c37583ca8..000000000 --- a/packages/datx-jsonapi-angular/test/utils/models/LineItem.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IType, Model } from '@datx/core'; - -import { jsonapiAngular } from '../../../src'; - -export class LineItem extends jsonapiAngular(Model) { - public static type: IType = 'line_items'; -} diff --git a/packages/datx-jsonapi-angular/test/utils/models/Organizer.ts b/packages/datx-jsonapi-angular/test/utils/models/Organizer.ts deleted file mode 100644 index cd3a755f4..000000000 --- a/packages/datx-jsonapi-angular/test/utils/models/Organizer.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { IType, prop } from '@datx/core'; - -import { Image } from './Image'; -import { User } from './User'; - -export class Organizer extends User { - public static type: IType = 'organizers'; - - @prop.toOne(Image) - public image!: Image; -} diff --git a/packages/datx-jsonapi-angular/test/utils/models/Photo.ts b/packages/datx-jsonapi-angular/test/utils/models/Photo.ts deleted file mode 100644 index dca3d1d9e..000000000 --- a/packages/datx-jsonapi-angular/test/utils/models/Photo.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { IType, Model, prop } from '@datx/core'; - -import { jsonapiAngular } from '../../../src'; - -export class Photo extends jsonapiAngular(Model) { - public static type: IType = 'photo'; - - @prop.defaultValue(false) - public selected!: boolean; -} diff --git a/packages/datx-jsonapi-angular/test/utils/models/ProductVariant.ts b/packages/datx-jsonapi-angular/test/utils/models/ProductVariant.ts deleted file mode 100644 index 607af8ed7..000000000 --- a/packages/datx-jsonapi-angular/test/utils/models/ProductVariant.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IType, Model } from '@datx/core'; - -import { jsonapiAngular } from '../../../src'; - -export class ProductVariant extends jsonapiAngular(Model) { - public static type: IType = 'product_variants'; -} diff --git a/packages/datx-jsonapi-angular/test/utils/models/User.ts b/packages/datx-jsonapi-angular/test/utils/models/User.ts deleted file mode 100644 index 0a8d77d92..000000000 --- a/packages/datx-jsonapi-angular/test/utils/models/User.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { IType, Model, prop } from '@datx/core'; -import { mobx } from '@datx/utils'; - -import { jsonapiAngular } from '../../../src'; - -export class User extends jsonapiAngular(Model) { - public static type: IType = 'user'; - - @prop - public firstName!: string; - - @prop - public lastName!: string; - - @mobx.computed - get fullName(): string { - return `${this.firstName} ${this.lastName}`; - } -} diff --git a/packages/datx-jsonapi-angular/test/utils/setup.ts b/packages/datx-jsonapi-angular/test/utils/setup.ts deleted file mode 100644 index 15a53e930..000000000 --- a/packages/datx-jsonapi-angular/test/utils/setup.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Collection } from '@datx/core'; - -import { jsonapiAngular } from '../../src'; -import { Event } from './models/Event'; -import { Image } from './models/Image'; -import { LineItem } from './models/LineItem'; -import { Organizer } from './models/Organizer'; -import { Photo } from './models/Photo'; -import { ProductVariant } from './models/ProductVariant'; -import { User } from './models/User'; - -export { Event, Image, Organizer, Photo, User, ProductVariant, LineItem }; - -export class TestStore extends jsonapiAngular(Collection) { - public static types = [User, Event, Image, Organizer, Photo, ProductVariant, LineItem]; -} diff --git a/packages/datx-jsonapi-angular/test/views.test.ts b/packages/datx-jsonapi-angular/test/views.test.ts deleted file mode 100644 index 7316babab..000000000 --- a/packages/datx-jsonapi-angular/test/views.test.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { View, IViewConstructor, PureModel } from '@datx/core'; - -import { jsonapiAngular } from '../src'; -import { setupNetwork, setRequest, confirmNetwork } from './utils/api'; -import { Event, TestStore } from './utils/setup'; -import { config, CachingStrategy } from '@datx/jsonapi'; - -const baseTransformRequest = config.transformRequest; -const baseTransformResponse = config.transformResponse; - -describe('Views', () => { - it('should sync an event', () => { - const store = new TestStore(); - const JsonapiView = jsonapiAngular(View as IViewConstructor); - const view = new JsonapiView(Event, store); - - const event = view.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - type: 'event', - }, - }) as Event; - - expect(event.name).toBe('Demo'); - expect(view.length).toBe(1); - }); - - describe('Network basics', () => { - beforeEach(() => { - config.baseUrl = 'https://example.com/'; - config.transformRequest = baseTransformRequest; - config.transformResponse = baseTransformResponse; - config.cache = CachingStrategy.NetworkOnly; - setupNetwork(); - }); - - afterEach(confirmNetwork); - - it('should fetch the basic data', (done) => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - const store = new TestStore(); - const JsonapiView = jsonapiAngular(View as IViewConstructor); - const view = new JsonapiView(Event, store); - view.getMany().subscribe((events) => { - try { - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - expect(view.length).toBe(4); - done(); - } catch(e) { - done(e); - } - }); - - }); - - // it('should support pagination', async () => { - // setRequest({ - // name: 'events-1', - // url: 'event', - // }); - - // const store = new TestStore(); - // const JsonapiView = jsonapiAngular(View as IViewConstructor); - // const view = new JsonapiView(Event, store); - // const events = await view.getMany(); - - // expect(events.data).toBeInstanceOf(Array); - // expect(events.data).toHaveLength(4); - // expect(view.length).toBe(4); - - // setRequest({ - // name: 'events-2', - // query: { - // page: 2, - // }, - // url: 'event', - // }); - - // const events2 = await events.next?.(); - - // expect(events2).toBeInstanceOf(Object); - // if (events2) { - // expect(events2.data).toBeInstanceOf(Array); - // expect(events2.data).toHaveLength(2); - // expect(view.length).toBe(6); - // } - // }); - - // it('should support collection views with mixins', async () => { - // setRequest({ - // name: 'events-1', - // url: 'event', - // }); - - // class NewStore extends TestStore { - // public static views = { - // test: { - // mixins: [jsonapiAngular], - // modelType: Event, - // }, - // }; - - // public test!: IJsonapiView; - // } - - // const store = new NewStore(); - // const events = await store.test.getMany(); - - // expect(events.data).toBeInstanceOf(Array); - // expect(events.data).toHaveLength(4); - // expect(store.test.length).toBe(4); - - // setRequest({ - // name: 'events-2', - // query: { - // page: 2, - // }, - // url: 'event', - // }); - - // const events2 = await events.next?.(); - - // expect(events2).toBeInstanceOf(Object); - // if (events2) { - // expect(events2.data).toBeInstanceOf(Array); - // expect(events2.data).toHaveLength(2); - // expect(store.test.length).toBe(6); - // } - // }); - }); -}); diff --git a/packages/datx-jsonapi-angular/tsconfig.build.json b/packages/datx-jsonapi-angular/tsconfig.build.json deleted file mode 100644 index 7d3d6601b..000000000 --- a/packages/datx-jsonapi-angular/tsconfig.build.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "allowJs": false, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "declaration": true, - "experimentalDecorators": true, - "forceConsistentCasingInFileNames": true, - "sourceMap": true, - "inlineSources": true, - "lib": ["es2015", "es2016", "es2017", "dom"], - "module": "esnext", - "noImplicitAny": false, - "noImplicitReturns": true, - "noUnusedParameters": true, - "outDir": "./dist", - "strict": true, - "strictFunctionTypes": false, - "target": "es5", - "resolveJsonModule": true - }, - "exclude": ["node_modules", "examples"], - "include": ["src/**/*"] -} diff --git a/packages/datx-jsonapi-angular/tsconfig.json b/packages/datx-jsonapi-angular/tsconfig.json deleted file mode 100644 index 8abff69b8..000000000 --- a/packages/datx-jsonapi-angular/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.build.json", - "include": ["src/**/*", "test/**/*"], - "compilerOptions": { - "moduleResolution": "node", - "noUnusedLocals": true, - "resolveJsonModule": true, - "esModuleInterop": true - } -} diff --git a/packages/datx-jsonapi/.npmignore b/packages/datx-jsonapi/.npmignore deleted file mode 100644 index efc2c91c7..000000000 --- a/packages/datx-jsonapi/.npmignore +++ /dev/null @@ -1,10 +0,0 @@ -docs -src -test -tsconfig.json -tsconfig.build.json -tslint.json -coverage -.rpt2_cache -node_modules -rollup.config.js \ No newline at end of file diff --git a/packages/datx-jsonapi/.vscode/settings.json b/packages/datx-jsonapi/.vscode/settings.json deleted file mode 100644 index 6649301f6..000000000 --- a/packages/datx-jsonapi/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "workbench.colorCustomizations": {} -} \ No newline at end of file diff --git a/packages/datx-jsonapi/LICENSE b/packages/datx-jsonapi/LICENSE deleted file mode 100644 index b31ff02a7..000000000 --- a/packages/datx-jsonapi/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Infinum - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/datx-jsonapi/README.md b/packages/datx-jsonapi/README.md deleted file mode 100644 index b8c3b99c2..000000000 --- a/packages/datx-jsonapi/README.md +++ /dev/null @@ -1,103 +0,0 @@ -# @datx/jsonapi - -DatX is an opinionated data store for use with the [MobX](https://mobx.js.org/) state management library. It features support for simple observable property definition, references to other models and first-class TypeScript support. - -`@datx/jsonapi` is a datx mixin that adds [JSON API](https://jsonapi.org/) support. - ---- - -## Basic usage - -```typescript -import { Collection, Model, Attribute } from '@datx/core'; -import { jsonapi } from '@datx/jsonapi'; -import { computed } from 'mobx'; - -class Person extends jsonapi(Model) { - public static type = 'person'; // Unique name of the model class - - @Attribute() - public name: string; // A normal observable property without a default value - - @Attribute() - public surname: string; - - @Attribute({ toOne: Person }) - public spouse?: Person; // A reference to a Person model - - @computed - public get fullName() { - // Standard MobX computed props - return `${this.name} ${this.surname}`; - } -} - -class AppData extends jsonapi(Collection) { - public static types = [Person]; // A list of models available in the collection -} - -const store = new AppData(); -const john = store.add(new Person({ name: 'John', surname: 'Smith' })); // Add a model instance to the store -const jane = store.add({ name: 'Jane', surname: 'Smith', spouse: john }, Person); // Add a model to the store - -await john.save(); // POST to the server -const people = await store.fetchAll(Person); // Get all people from the server -``` - -## Getting started - -Note: `@datx/jsonapi` has a peer dependency to `mobx@^4.2.0` or `mobx@^5.5.0`, so don't forget to install the latest MobX version: - -```bash -npm install --save @datx/jsonapi mobx -``` - -- [Basic configuration](https://datx.dev/docs/jsonapi/jsonapi-basic-configuration) -- [Network configuration](https://datx.dev/docs/jsonapi/jsonapi-network-configuration) -- [Network usage](https://datx.dev/docs/jsonapi/jsonapi-network-usage) -- [Spec compliance](https://datx.dev/docs/jsonapi/jsonapi-spec-compliance) - -### Polyfilling - -The lib makes use of the following features that are not yet available everywhere. Based on your browser support, you might want to polyfill them: - -- [Symbol.for](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) -- [Object.assign](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -- [Array.prototype.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find) -- [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) -- [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) - -[How to add the polyfills](https://datx.dev/docs/troubleshooting/known-issues#the-library-doesnt-work-in-internet-explorer-11). -Note: Fetch API is not included in the polyfills mentioned in the Troubleshooting page. Instead, you need to add it as a separate library. If you don't have any special requirements (like server-side rendering), you can use the [window.fetch polyfill](https://github.com/github/fetch#installation). - -## API reference - -- [Model](https://datx.dev/docs/jsonapi/jsonapi-model) -- [Collection](https://datx.dev/docs/jsonapi/jsonapi-collection) -- [View](https://datx.dev/docs/jsonapi/jsonapi-view) -- [Response](https://datx.dev/docs/jsonapi/jsonapi-response) -- [Config](https://datx.dev/docs/jsonapi/jsonapi-config) -- [Utils](https://datx.dev/docs/jsonapi/jsonapi-utils) -- [TypeScript Interfaces](https://datx.dev/docs/jsonapi/jsonapi-typescript-interfaces) - -## Troubleshooting - -Having issues with the library? Check out the [troubleshooting](https://datx.dev/docs/troubleshooting/known-issues) page or [open](https://github.com/infinum/datx/issues/new) an issue. - ---- - -[![Build Status](https://travis-ci.org/infinum/datx.svg?branch=master)](https://travis-ci.org/infinum/datx) -[![npm version](https://badge.fury.io/js/@datx/jsonapi.svg)](https://badge.fury.io/js/@datx/jsonapi) -[![Dependency Status](https://david-dm.org/infinum/datx.svg?path=packages/@datx/jsonapi)](https://david-dm.org/infinum/datx?path=packages/@datx/jsonapi) -[![devDependency Status](https://david-dm.org/infinum/datx/dev-status.svg?path=packages/@datx/jsonapi)](https://david-dm.org/infinum/datx?path=packages/@datx/jsonapi#info=devDependencies) - -## License - -The [MIT License](LICENSE) - -## Credits - -datx-jsonapi is maintained and sponsored by -[Infinum](https://www.infinum.com). - - diff --git a/packages/datx-jsonapi/package.json b/packages/datx-jsonapi/package.json deleted file mode 100644 index a2ea29b6e..000000000 --- a/packages/datx-jsonapi/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "@datx/jsonapi", - "version": "2.0.0", - "description": "DatX mixin for JSON API support", - "main": "dist/index.cjs.js", - "module": "dist/index.esm.js", - "typings": "dist/index.d.ts", - "sideEffects": false, - "repository": { - "type": "git", - "url": "git+https://github.com/infinum/datx.git" - }, - "bugs": { - "url": "https://github.com/infinum/datx/issues" - }, - "homepage": "https://github.com/infinum/datx#readme", - "author": "Infinum JavaScript Team ", - "license": "MIT", - "keywords": [ - "datx", - "mobx", - "jsonapi" - ], - "devDependencies": { - "@rollup/plugin-commonjs": "^17.0.0", - "@rollup/plugin-node-resolve": "^11.1.0", - "@types/jest": "^26.0.20", - "@types/lodash": "^4.14.168", - "@types/node": "^14.14.22", - "@types/uuid": "^8.3.0", - "isomorphic-fetch": "^3.0.0", - "jest": "^26.6.3", - "lodash": "^4.17.20", - "rollup": "^2.38.0", - "rollup-plugin-exclude-dependencies-from-bundle": "^1.1.17", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.29.0", - "ts-jest": "^26.4.4", - "typescript": "^4.1.3", - "uuid": "^8.3.2" - }, - "scripts": { - "test": "jest --coverage", - "watch": "jest --watch --coverage", - "prepublish": "npm run build", - "build": "rollup -c" - }, - "jest": { - "coveragePathIgnorePatterns": [ - "/test/", - "/node_modules/" - ], - "moduleFileExtensions": [ - "ts", - "js" - ], - "testRegex": "test/(.*).test.ts$", - "globals": { - "ts-jest": { - "diagnostics": { - "warnOnly": true - } - } - }, - "preset": "ts-jest", - "testMatch": null, - "setupFilesAfterEnv": [ - "./test/setup.ts" - ] - }, - "dependencies": { - "@datx/core": "^2.0.0", - "@datx/network": "^2.0.0", - "@datx/utils": "^2.0.0" - } -} diff --git a/packages/datx-jsonapi/rollup.config.js b/packages/datx-jsonapi/rollup.config.js deleted file mode 100644 index c74990dd2..000000000 --- a/packages/datx-jsonapi/rollup.config.js +++ /dev/null @@ -1,57 +0,0 @@ -import typescript from 'rollup-plugin-typescript2'; -import { terser } from 'rollup-plugin-terser'; -import commonjs from '@rollup/plugin-commonjs'; -import resolve from '@rollup/plugin-node-resolve'; -import excludeDependenciesFromBundle from 'rollup-plugin-exclude-dependencies-from-bundle'; - -import pkg from './package.json'; - -export default [ - { - input: './src/index.ts', - output: [{ file: pkg.main, format: 'cjs' }], - plugins: [ - resolve(), - commonjs(), - excludeDependenciesFromBundle(), - typescript({ - check: true, - typescript: require('typescript'), - tsconfig: './tsconfig.build.json', - }), - terser({ - toplevel: true, - compress: { - passes: 3, - }, - output: { - comments: false, - }, - }), - ], - onwarn(warning, rollupWarn) { - if (warning.code !== 'CIRCULAR_DEPENDENCY') { - rollupWarn(warning); - } - }, - }, - { - input: './src/index.ts', - output: [{ file: pkg.module, format: 'es' }], - plugins: [ - resolve(), - commonjs(), - excludeDependenciesFromBundle(), - typescript({ - check: true, - typescript: require('typescript'), - tsconfig: './tsconfig.build.json', - }), - ], - onwarn(warning, rollupWarn) { - if (warning.code !== 'CIRCULAR_DEPENDENCY') { - rollupWarn(warning); - } - }, - }, -]; diff --git a/packages/datx-jsonapi/src/BaseRequest.ts b/packages/datx-jsonapi/src/BaseRequest.ts deleted file mode 100644 index 5cb45bc32..000000000 --- a/packages/datx-jsonapi/src/BaseRequest.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { BaseRequest as BaseNetworkRequest } from '@datx/network'; -import { isJsonapi } from './operators'; - -export class BaseJsonapiRequest extends BaseNetworkRequest { - constructor(baseUrl: string) { - super(baseUrl); - isJsonapi()(this); - } -} diff --git a/packages/datx-jsonapi/src/GenericModel.ts b/packages/datx-jsonapi/src/GenericModel.ts deleted file mode 100644 index 0eacc7671..000000000 --- a/packages/datx-jsonapi/src/GenericModel.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { PureModel } from '@datx/core'; - -import { decorateModel } from './decorateModel'; - -export const DecoratedModel = decorateModel(PureModel); - -export class GenericModel extends DecoratedModel {} diff --git a/packages/datx-jsonapi/src/NetworkResponse.ts b/packages/datx-jsonapi/src/NetworkResponse.ts deleted file mode 100644 index 27840f875..000000000 --- a/packages/datx-jsonapi/src/NetworkResponse.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { View, PureCollection } from '@datx/core'; -import { Response as BaseResponse, IResponseObject } from '@datx/network'; -import { assignComputed } from '@datx/utils'; - -import { IJsonapiModel } from './interfaces/IJsonapiModel'; -import { IJsonApiObject, ILink } from './interfaces/JsonApi'; -import { IResponseInternal } from './interfaces/IResponseInternal'; - -import { fetchLink } from './NetworkUtils'; -import { IJsonapiCollection } from './interfaces/IJsonapiCollection'; - -export class NetworkResponse extends BaseResponse { - /** - * API response metadata - * - * @type {object} - * @memberOf Response - */ - public get meta(): object | undefined { - return (this.__internal as IResponseInternal).meta; - } - - /** - * API response links - * - * @type {object} - * @memberOf Response - */ - public get links(): Record | undefined { - return (this.__internal as IResponseInternal).links; - } - - /** - * The JSON API object returned by the server - * - * @type {JsonApi.IJsonApiObject} - * @memberOf Response - */ - public get jsonapi(): IJsonApiObject | undefined { - return (this.__internal as IResponseInternal).jsonapi; - } - - /** - * First data page - * - * @type {Promise} - * @memberOf Response - */ - public first?: () => Promise>; // Handled by the __fetchLink - - /** - * Previous data page - * - * @type {Promise} - * @memberOf Response - */ - public prev?: () => Promise>; // Handled by the __fetchLink - - /** - * Next data page - * - * @type {Promise} - * @memberOf Response - */ - public next?: () => Promise>; // Handled by the __fetchLink - - /** - * Last data page - * - * @type {Promise} - * @memberOf Response - */ - public last?: () => Promise>; // Handled by the __fetchLink - - public get views(): Array { - return this.__internal.views; - } - - constructor( - response: IResponseObject, - collection?: PureCollection, - overrideData?: T, - views?: Array, - ) { - super(response, collection, overrideData, views); - - if (this.links) { - Object.keys(this.links).forEach((link: string) => { - assignComputed(this, link, () => this.__fetchLink(link)); - }); - } - } - - /** - * Function called when a link is being fetched. The returned value is cached - * - * @private - * @param {string} name Link name - * @returns Promise that resolves with a Response object - * - * @memberOf NetworkResponse - */ - private __fetchLink(name: string): () => Promise> { - if (!this.__cache[name]) { - const link: ILink | null = this.links && name in this.links ? this.links[name] : null; - - if (link) { - const options = Object.assign({}, this.__internal.options); - - options.networkConfig = options.networkConfig || {}; - options.networkConfig.headers = this.requestHeaders; - this.__cache[name] = (): Promise> => - fetchLink(link, this.collection as IJsonapiCollection, options, this.views).then( - (response) => - new NetworkResponse( - response['__internal'].response, - response.collection, - undefined, - response.views, - ), - ); - } - } - - return this.__cache[name] as () => Promise>; - } -} diff --git a/packages/datx-jsonapi/src/NetworkUtils.ts b/packages/datx-jsonapi/src/NetworkUtils.ts deleted file mode 100644 index 175126a90..000000000 --- a/packages/datx-jsonapi/src/NetworkUtils.ts +++ /dev/null @@ -1,502 +0,0 @@ -import { View, commitModel } from '@datx/core'; -import { setMeta, mobx, IResponseHeaders } from '@datx/utils'; - -import { - MODEL_PERSISTED_FIELD, - MODEL_PROP_FIELD, - MODEL_QUEUE_FIELD, - MODEL_RELATED_FIELD, -} from './consts'; -import { isBrowser } from './helpers/utils'; -import { ICollectionFetchOpts } from './interfaces/ICollectionFetchOpts'; -import { IHeaders } from './interfaces/IHeaders'; -import { IJsonapiCollection } from './interfaces/IJsonapiCollection'; -import { IJsonapiModel } from './interfaces/IJsonapiModel'; -import { IRawResponse } from './interfaces/IRawResponse'; -import { IRequestOptions } from './interfaces/IRequestOptions'; -import { ILink, IResponse } from './interfaces/JsonApi'; -import { Response as LibResponse } from './Response'; -import { CachingStrategy, ParamArrayType } from '@datx/network'; -import { saveCache, getCache } from './cache'; - -export type FetchType = ( - method: string, - url: string, - body?: object, - requestHeaders?: IHeaders, - fetchOptions?: object, -) => Promise; - -export type CollectionFetchType = ( - options: ICollectionFetchOpts, -) => Promise>; - -export interface IResponseObject { - data: IResponse; - error?: Error; - headers: IResponseHeaders; - requestHeaders: IHeaders; - status: number; -} - -export interface IConfigType { - baseFetch: FetchType; - baseUrl: string; - cache: CachingStrategy; - maxCacheAge: number; - defaultFetchOptions: Record; - fetchReference?: typeof fetch; - paramArrayType: ParamArrayType; - encodeQueryString?: boolean; - onError(IResponseObject): IResponseObject; - transformRequest(options: ICollectionFetchOpts): ICollectionFetchOpts; - transformResponse(response: IRawResponse): IRawResponse; -} - -export const config: IConfigType = { - // Base URL for all API calls - baseUrl: '/', - - // Enable caching by default in the browser - cache: isBrowser ? CachingStrategy.CacheFirst : CachingStrategy.NetworkOnly, - maxCacheAge: Infinity, - - // Default options that will be passed to the fetch function - defaultFetchOptions: { - headers: { - 'content-type': 'application/vnd.api+json', - }, - }, - - encodeQueryString: false, - - // Reference of the fetch method that should be used - fetchReference: - (isBrowser && - 'fetch' in window && - typeof window.fetch === 'function' && - window.fetch.bind(window)) || - undefined, - - // Determines how will the request param arrays be stringified - paramArrayType: ParamArrayType.CommaSeparated, // As recommended by the spec - - /** - * Base implementation of the fetch function (can be overridden) - * - * @param {string} method API call method - * @param {string} url API call URL - * @param {object} [body] API call body - * @param {IHeaders} [requestHeaders] Headers that will be sent - * @param {object} [fetchOptions] Options that can be passed from the fetch function call - * @returns {Promise} Resolves with a raw response object - */ - baseFetch( - method: string, - url: string, - body?: object, - requestHeaders?: IHeaders, - _fetchOptions?: object, - ): Promise { - let data: IResponse; - let status: number; - let headers: IResponseHeaders; - - const request: Promise = Promise.resolve(); - - const uppercaseMethod = method.toUpperCase(); - const isBodySupported = uppercaseMethod !== 'GET' && uppercaseMethod !== 'HEAD'; - - return request - .then(() => { - const defaultHeaders = config.defaultFetchOptions.headers || {}; - const reqHeaders: IHeaders = Object.assign({}, defaultHeaders, requestHeaders) as IHeaders; - const options = Object.assign({}, config.defaultFetchOptions, { - body: (isBodySupported && JSON.stringify(body)) || undefined, - headers: reqHeaders, - method, - }); - - if (this.fetchReference) { - return this.fetchReference(url, options); - } - throw new Error('Fetch reference needs to be defined before using the network'); - }) - .then((response: Response) => { - status = response.status; - headers = response.headers; - - return response.json(); - }) - .catch((error: Error) => { - if (status === 204) { - return null; - } - throw error; - }) - .then((responseData: IResponse) => { - data = responseData; - if (status >= 400) { - throw { - message: `Invalid HTTP status: ${status}`, - status, - }; - } - - return { data, headers, requestHeaders, status }; - }) - .catch((error) => { - return this.onError({ data, error, headers, requestHeaders, status }); - }); - }, - - onError(resp: IResponseObject) { - return resp; - }, - - transformRequest(options: ICollectionFetchOpts): ICollectionFetchOpts { - return options; - }, - - transformResponse(response: IRawResponse): IRawResponse { - return response; - }, -}; - -function getLocalNetworkError( - message: string, - reqOptions: ICollectionFetchOpts, - collection?: IJsonapiCollection, -): LibResponse { - const ResponseConstructor: typeof LibResponse = reqOptions.options?.fetchOptions?.['Response'] || LibResponse; - return new ResponseConstructor( - { - error: new Error(message), - // collection, - requestHeaders: reqOptions.options?.networkConfig?.headers, - }, - collection, - reqOptions.options, - ); -} - -function makeNetworkCall( - params: ICollectionFetchOpts, - fetchOptions?: object, - doCacheResponse = false, - existingResponse?: LibResponse, -): Promise> { - const ResponseConstructor: typeof LibResponse = fetchOptions?.['Response'] || LibResponse; - return config - .baseFetch(params.method, params.url, params.data, params?.options?.networkConfig?.headers, fetchOptions) - .then((response: IRawResponse) => { - const collectionResponse = Object.assign({}, response, { collection: params.collection }); - const payload = config.transformResponse(collectionResponse); - - if (existingResponse) { - existingResponse.update(payload, params.views); - return existingResponse; - } - - return new ResponseConstructor( - payload, - params.collection, - params.options, - undefined, - params.views, - ); - }) - .then((response: LibResponse) => { - if (doCacheResponse) { - saveCache(params.url, response); - } - return response; - }); -} - -/** - * Base implementation of the stateful fetch function (can be overridden) - * - * @param {ICollectionFetchOpts} reqOptions API request options - * @returns {Promise} Resolves with a response object - */ -function collectionFetch( - reqOptions: ICollectionFetchOpts, -): Promise> { - const ResponseConstructor: typeof LibResponse = reqOptions.options?.fetchOptions?.['Response'] || LibResponse; - - const params = config.transformRequest(reqOptions); - // const { url, options, data, method = 'GET', collection, views } = params; - - const staticCollection = (params?.collection?.constructor as unknown) as { - maxCacheAge?: number; - cache: CachingStrategy; - }; - const collectionCache = staticCollection && staticCollection.cache; - const isCacheSupported = params.method.toUpperCase() === 'GET'; - - const cacheStrategy = - reqOptions.options?.cacheOptions?.skipCache || !isCacheSupported - ? CachingStrategy.NetworkOnly - : reqOptions.options?.cacheOptions?.cachingStrategy || collectionCache || config.cache; - - let maxCacheAge: number = config.maxCacheAge || Infinity; - - if (staticCollection && staticCollection.maxCacheAge !== undefined) { - maxCacheAge = staticCollection.maxCacheAge; - } - if (reqOptions.options?.cacheOptions?.maxAge !== undefined) { - maxCacheAge = reqOptions.options?.cacheOptions?.maxAge; - } - - // NetworkOnly - Ignore cache - if (cacheStrategy === CachingStrategy.NetworkOnly) { - return makeNetworkCall(params, reqOptions.options?.fetchOptions); - } - - const cacheContent: { response: LibResponse } | undefined = (getCache( - params.url, - maxCacheAge, - ResponseConstructor, - ) as unknown) as { response: LibResponse } | undefined; - - // NetworkFirst - Fallback to cache only on network error - if (cacheStrategy === CachingStrategy.NetworkFirst) { - return makeNetworkCall(params, reqOptions.options?.fetchOptions, true).catch((errorResponse) => { - if (cacheContent) { - return cacheContent.response; - } - throw errorResponse; - }); - } - - // StaleWhileRevalidate - Use cache and update it in background - if (cacheStrategy === CachingStrategy.StaleWhileRevalidate) { - const network = makeNetworkCall(params, reqOptions.options?.fetchOptions, true); - - if (cacheContent) { - network.catch(() => { - // Ignore the failure - }); - return Promise.resolve(cacheContent.response); - } - - return network; - } - - // CacheOnly - Fail if nothing in cache - if (cacheStrategy === CachingStrategy.CacheOnly) { - if (cacheContent) { - return Promise.resolve(cacheContent.response); - } - - return Promise.reject( - getLocalNetworkError('No cache for this request', reqOptions, params?.collection), - ); - } - - // PREFER_CACHE - Use cache if available - if (cacheStrategy === CachingStrategy.CacheFirst) { - return cacheContent - ? Promise.resolve(cacheContent.response) - : makeNetworkCall(params, reqOptions.options?.fetchOptions, true); - } - - // StaleAndUpdate - Use cache and update response once network is complete - if (cacheStrategy === CachingStrategy.StaleAndUpdate) { - const existingResponse = cacheContent?.response?.clone() as LibResponse; - - const network = makeNetworkCall(params, reqOptions.options?.fetchOptions, true, existingResponse); - - if (existingResponse) { - network.catch(() => { - // Ignore the failure - }); - return Promise.resolve(existingResponse); - } - - return network; - } - - return Promise.reject( - getLocalNetworkError('Invalid caching strategy', reqOptions, params?.collection), - ); -} - -export function libFetch( - options: ICollectionFetchOpts, -): Promise> { - return collectionFetch(options); -} - -/** - * API call used to get data from the server - * - * @export - * @param {IJsonapiCollection} collection Related collection - * @param {string} url API call URL - * @param {IRequestOptions} [options] Server options - * @param {Array} [views] Request view - * @returns {Promise} Resolves with a Response object - */ -export function read( - url: string, - collection?: IJsonapiCollection, - options?: IRequestOptions, - views?: Array, -): Promise> { - return collectionFetch({ - collection, - data: undefined, - method: 'GET', - options, - url, - views, - }); -} - -/** - * API call used to create data on the server - * - * @export - * @param {IJsonapiCollection} collection Related collection - * @param {string} url API call URL - * @param {object} [data] Request body - * @param {IRequestOptions} [options] Server options - * @param {Array} [views] Request view - * @returns {Promise} Resolves with a Response object - */ -export function create( - url: string, - data?: object, - collection?: IJsonapiCollection, - options?: IRequestOptions, - views?: Array, -): Promise> { - return collectionFetch({ - collection, - data, - method: 'POST', - options, - url, - views, - }); -} - -/** - * API call used to update data on the server - * - * @export - * @param {IJsonapiCollection} collection Related collection - * @param {string} url API call URL - * @param {object} [data] Request body - * @param {IRequestOptions} [options] Server options - * @param {Array} [views] Request view - * @returns {Promise} Resolves with a Response object - */ -export function update( - url: string, - data?: object, - collection?: IJsonapiCollection, - options?: IRequestOptions, - views?: Array, -): Promise> { - return collectionFetch({ - collection, - data, - method: 'PATCH', - options, - url, - views, - }); -} - -/** - * API call used to remove data from the server - * - * @export - * @param {IJsonapiCollection} collection Related collection - * @param {string} url API call URL - * @param {IRequestOptions} [options] Server options - * @param {Array} [views] Request view - * @returns {Promise} Resolves with a Response object - */ -export function remove( - url: string, - collection?: IJsonapiCollection, - options?: IRequestOptions, - views?: Array, -): Promise> { - return collectionFetch({ - collection, - data: undefined, - method: 'DELETE', - options, - url, - views, - }); -} - -/** - * Fetch a link from the server - * - * @export - * @param {JsonApi.ILink} link Link URL or a link object - * @param {IJsonapiCollection} collection Store that will be used to save the response - * @param {IRequestOptions} [options] Server options - * @param {Array} [views] Request view - * @returns {Promise} Response promise - */ -export function fetchLink( - link: ILink, - collection?: IJsonapiCollection, - options?: IRequestOptions, - views?: Array, - ResponseConstructor: typeof LibResponse = LibResponse, -): Promise> { - if (link) { - const href: string = typeof link === 'object' ? link.href : link; - - if (href) { - return read(href, collection, options, views); - } - } - - return Promise.resolve(new ResponseConstructor({ data: undefined }, collection)); -} - -export function handleResponse( - record: T, - prop?: string, -): (response: LibResponse) => T { - return mobx.action( - (response: LibResponse): T => { - if (response.error) { - throw response.error; - } - - if (response.status === 204) { - setMeta(record, MODEL_PERSISTED_FIELD, true); - - return record; - } - - if (response.status === 202) { - const responseRecord = response.data as T; - - setMeta(responseRecord, MODEL_PROP_FIELD, prop); - setMeta(responseRecord, MODEL_QUEUE_FIELD, true); - setMeta(responseRecord, MODEL_RELATED_FIELD, record); - - return responseRecord; - } - setMeta(record, MODEL_PERSISTED_FIELD, true); - - const data = response.replaceData(record).data as T; - - commitModel(data); - - return data; - }, - ); -} diff --git a/packages/datx-jsonapi/src/Response.ts b/packages/datx-jsonapi/src/Response.ts deleted file mode 100644 index 63b5b673f..000000000 --- a/packages/datx-jsonapi/src/Response.ts +++ /dev/null @@ -1,371 +0,0 @@ -import { - Bucket, - getModelId, - getModelType, - modelToJSON, - PureModel, - updateModel, - updateModelId, - View, -} from '@datx/core'; -import { assignComputed, Headers, IResponseHeaders } from '@datx/utils'; - -import { IHeaders } from './interfaces/IHeaders'; -import { IJsonapiModel } from './interfaces/IJsonapiModel'; -import { IRawResponse } from './interfaces/IRawResponse'; -import { IRequestOptions } from './interfaces/IRequestOptions'; -import { IError, IJsonApiObject, ILink } from './interfaces/JsonApi'; -import { IResponseInternal } from './interfaces/IResponseInternal'; - -import { GenericModel } from './GenericModel'; -import { flattenModel } from './helpers/model'; -import { IJsonapiCollection } from './interfaces/IJsonapiCollection'; -import { fetchLink } from './NetworkUtils'; -import { IResponseSnapshot } from './interfaces/IResponseSnapshot'; - -function serializeHeaders( - headers: Array<[string, string]> | IResponseHeaders, -): Array<[string, string]> { - if (headers instanceof Array) { - return headers; - } - - const list: Array<[string, string]> = []; - - headers.forEach((value: string, key: string) => { - list.push([key, value]); - }); - - return list; -} - -function initHeaders(headers: Array<[string, string]> | IResponseHeaders): IResponseHeaders { - if (headers instanceof Array) { - return new Headers(headers); - } - - return headers; -} - -function initData( - response: IRawResponse, - collection?: IJsonapiCollection, - overrideData?: T | Array, -): any { - if (collection && response.data) { - const data = overrideData || collection.sync(response.data); - - return new Bucket.ToOneOrMany(data, collection as any, true); - } - - if (response.data) { - // The case when a record is not in a store and save/remove are used - const resp = response.data; - - if (resp.data) { - if (resp.data instanceof Array) { - throw new Error('A save/remove operation should not return an array of results'); - } - - return { - value: overrideData || (new GenericModel(flattenModel(undefined, resp.data)) as T), - }; - } - } - - return new Bucket.ToOneOrMany(null, collection as any, true); -} - -type IAsync = Promise>; - -export class Response> { - private __data; - - protected __internal: IResponseInternal = { - response: {}, - views: [], - }; - - /** - * API response metadata - * - * @type {object} - * @memberOf Response - */ - public get meta(): object | undefined { - return this.__internal.meta; - } - - /** - * API response links - * - * @type {object} - * @memberOf Response - */ - public get links(): Record | undefined { - return this.__internal.links; - } - - /** - * The JSON API object returned by the server - * - * @type {JsonApi.IJsonApiObject} - * @memberOf Response - */ - public get jsonapi(): IJsonApiObject | undefined { - return this.__internal.jsonapi; - } - - /** - * Headers received from the API call - * - * @type {IResponseHeaders} - * @memberOf Response - */ - public get headers(): IResponseHeaders | undefined { - return this.__internal.headers; - } - - /** - * Headers sent to the server - * - * @type {IHeaders} - * @memberOf Response - */ - public get requestHeaders(): IHeaders | undefined { - return this.__internal.requestHeaders; - } - - /** - * Request error - * - * @type {(Array|Error)} - * @memberOf Response - */ - public get error(): Array | Error | undefined { - return this.__internal.error; - } - - /** - * First data page - * - * @type {P} - * @memberOf Response - */ - public first?: () => P; // Handled by the __fetchLink - - /** - * Previous data page - * - * @type {P} - * @memberOf Response - */ - public prev?: () => P; // Handled by the __fetchLink - - /** - * Next data page - * - * @type {P} - * @memberOf Response - */ - public next?: () => P; // Handled by the __fetchLink - - /** - * Last data page - * - * @type {P} - * @memberOf Response - */ - public last?: () => P; // Handled by the __fetchLink - - /** - * Received HTTP status - * - * @type {number} - * @memberOf Response - */ - public get status(): number | undefined { - return this.__internal.status; - } - - public get views(): Array { - return this.__internal.views; - } - - /** - * Related Store - * - * @type {IJsonapiCollection} - * @memberOf Response - */ - public readonly collection?: IJsonapiCollection; - - /** - * Cache used for the link requests - * - * @protected - * @type {Record>} - * @memberOf Response - */ - protected readonly __cache: Record P> = {}; - - constructor( - response: IRawResponse, - collection?: IJsonapiCollection, - options?: IRequestOptions, - overrideData?: T | Array, - views?: Array, - ) { - this.collection = collection; - this.__updateInternal(response, options, views); - this.__data = initData(response, collection, overrideData); - - this.views.forEach((view) => { - if (this.__data.value) { - view.add(this.__data.value); - } - }); - - Object.freeze(this); - - if (this.error) { - throw this; - } - } - - public get isSuccess(): boolean { - return !this.error; - } - - public get data(): T | Array | null { - return this.__data.value; - } - - private __updateInternal( - response: IRawResponse, - options?: IRequestOptions, - views?: Array, - ): void { - if (options) { - this.__internal.options = options; - } - - this.__internal.response = response; - this.__internal.meta = response.data?.meta || {}; - this.__internal.links = response.data?.links || {}; - this.__internal.jsonapi = response.data?.jsonapi || {}; - this.__internal.headers = response.headers && initHeaders(response.headers); - this.__internal.requestHeaders = response.requestHeaders; - this.__internal.error = response.data?.errors || response.error; - this.__internal.status = response.status; - - if (views) { - this.__internal.views = views; - } - - if (!this.error && !this.status) { - this.__internal.error = new Error('Network not available'); - } - - if (this.links) { - Object.keys(this.links).forEach((link: string) => { - assignComputed(this, link, () => this.__fetchLink(link)); - }); - } - } - - /** - * Replace the response record with a different record. Used to replace a record while keeping the same reference - * - * @param {PureModel} data New data - * @returns {Response} - * - * @memberOf Response - */ - public replaceData(data: T): Response { - const record: PureModel = this.data as PureModel; - - if (record === data) { - return this; - } - - const newId = getModelId(record).toString(); - const type = getModelType(record); - - const viewIndexes = this.views.map((view) => view.list.indexOf(record)); - - if (this.collection) { - this.collection.removeOne(type, newId); - this.collection.add(data); - } - - updateModel(data, modelToJSON(record)); - updateModelId(data, newId); - - this.views.forEach((view, index) => { - if (viewIndexes[index] !== -1) { - view.list[viewIndexes[index]] = data; - } - }); - - const ResponseConstructor: typeof Response = this.constructor as typeof Response; - return new ResponseConstructor(this.__internal.response, this.collection, this.__internal.options, data); - } - - public clone(): Response { - const ResponseConstructor: typeof Response = this.constructor as typeof Response; - return new ResponseConstructor( - this.__internal.response, - this.collection, - this.__internal.options, - this.data || undefined, - ); - } - - public get snapshot(): IResponseSnapshot { - return { - response: Object.assign({}, this.__internal.response, { - headers: - this.__internal.response.headers && serializeHeaders(this.__internal.response.headers), - collection: undefined, - }), - options: this.__internal.options, - }; - } - - public update(response: IRawResponse, views?: Array): Response { - this.__updateInternal(response, undefined, views); - const newData = initData(response, this.collection); - - this.__data.__readonlyValue = newData.value; - - return this; - } - - /** - * Function called when a link is being fetched. The returned value is cached - * - * @protected - * @param {string} name Link name - * @returns P that resolves with a Response object - * - * @memberOf Response - */ - protected __fetchLink(name: string): () => P { - const ResponseConstructor: typeof Response = this.constructor as typeof Response; - if (!this.__cache[name]) { - const link: ILink | null = this.links && name in this.links ? this.links[name] : null; - - if (link) { - const options = Object.assign({}, this.__internal.options); - - options.networkConfig = options.networkConfig || {}; - options.networkConfig.headers = this.requestHeaders; - this.__cache[name] = (): P => - fetchLink(link, this.collection, options, this.views, ResponseConstructor) as unknown as P; - } - } - - return this.__cache[name]; - } -} diff --git a/packages/datx-jsonapi/src/cache.ts b/packages/datx-jsonapi/src/cache.ts deleted file mode 100644 index 1a5ad587b..000000000 --- a/packages/datx-jsonapi/src/cache.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { getModelType, IType } from '@datx/core'; -import { mapItems } from '@datx/utils'; - -import { IJsonapiModel } from './interfaces/IJsonapiModel'; -import { Response } from './Response'; -import { IResponseSnapshot } from './interfaces/IResponseSnapshot'; -import { IJsonapiCollection } from './interfaces/IJsonapiCollection'; - -export interface ICache { - response: Response; - time: number; - types: Array; - url: string; -} - -export interface ICacheInternal { - response: IResponseSnapshot; - collection?: IJsonapiCollection; - time: number; - types: Array; - url: string; -} - -let cacheStorage: Array = []; - -export function saveCache(url: string, response: Response): void { - if (response?.isSuccess && response.status !== -1 && (response.data || response.data === null)) { - const types = mapItems(response.data || [], getModelType) as IType | Array; - - cacheStorage = cacheStorage.filter((item) => item.url !== url); - - cacheStorage.unshift({ - response: response.snapshot, - collection: response.collection, - time: Date.now(), - types: ([] as Array).concat(types), - url, - }); - } -} - -export function getCache(url: string, maxAge: number, ResponseConstructor: typeof Response = Response): ICache | undefined { - const ageLimit = Date.now() - maxAge * 1000; - const cache = cacheStorage.find((item) => item.url === url && item.time > ageLimit); - - if (cache) { - const data = cache.response; - - return { - // @ts-ignore Array headers that are supported but shouldn't be exposed in types - response: new ResponseConstructor(data.response, cache.collection, data.options), - time: cache.time, - types: cache.types, - url: cache.url, - }; - } - - return undefined; -} - -export function clearAllCache(): void { - cacheStorage.length = 0; -} - -export function clearCacheByType(type: IType): void { - cacheStorage = cacheStorage.filter((item) => !item.types.includes(type)); -} - -export function getCacheByCollection( - collection: IJsonapiCollection, -): Array> { - return cacheStorage - .filter((item) => item.collection === collection) - .map((item) => Object.assign({}, item, { collection: undefined })); -} - -export function saveCacheForCollection( - cacheItems: Array>, - collection: IJsonapiCollection, -): void { - // eslint-disable-next-line prefer-spread - cacheStorage.push.apply( - cacheStorage, - cacheItems.map((item) => Object.assign({ collection }, item)), - ); -} diff --git a/packages/datx-jsonapi/src/consts.ts b/packages/datx-jsonapi/src/consts.ts deleted file mode 100644 index e85f3360b..000000000 --- a/packages/datx-jsonapi/src/consts.ts +++ /dev/null @@ -1,11 +0,0 @@ -export const MODEL_LINKS_FIELD = 'jsonapiLinks'; -export const MODEL_REF_LINKS_FIELD = 'jsonapiRefLinks'; -export const MODEL_REF_META_FIELD = 'jsonapiRefMeta'; -export const MODEL_META_FIELD = 'jsonapiMeta'; -export const MODEL_PERSISTED_FIELD = 'networkPersisted'; // Needs to be the same as in datx-network -export const MODEL_PROP_FIELD = 'jsonapiProp'; -export const MODEL_QUEUE_FIELD = 'jsonapiQueue'; -export const MODEL_RELATED_FIELD = 'jsonapiRelated'; - -// eslint-disable-next-line no-useless-escape -export const URL_REGEX = /^((https?\:)?\/\/)/; diff --git a/packages/datx-jsonapi/src/decorateCollection.ts b/packages/datx-jsonapi/src/decorateCollection.ts deleted file mode 100644 index c44465658..000000000 --- a/packages/datx-jsonapi/src/decorateCollection.ts +++ /dev/null @@ -1,332 +0,0 @@ -import { - getModelId, - getModelType, - ICollectionConstructor, - IModelConstructor, - initModelRef, - IRawCollection, - IReferenceOptions, - IType, - PureCollection, - PureModel, - ReferenceType, - updateModel, - commitModel, -} from '@datx/core'; -import { getMeta, IRawModel, mapItems, deprecated, isArrayLike } from '@datx/utils'; - -import { - clearAllCache, - clearCacheByType, - ICacheInternal, - getCacheByCollection, - saveCacheForCollection, -} from './cache'; -import { GenericModel } from './GenericModel'; -import { flattenModel, removeModel } from './helpers/model'; -import { buildUrl, prepareQuery } from './helpers/url'; -import { getModelClassRefs, isBrowser } from './helpers/utils'; -import { IHeaders } from './interfaces/IHeaders'; -import { IJsonapiCollection } from './interfaces/IJsonapiCollection'; -import { IJsonapiModel } from './interfaces/IJsonapiModel'; -import { IRequestOptions } from './interfaces/IRequestOptions'; -import { IDefinition, IRecord, IRelationship, IRequest, IResponse } from './interfaces/JsonApi'; -import { libFetch, read } from './NetworkUtils'; -import { Response } from './Response'; -import { CachingStrategy } from '@datx/network'; - -type TSerialisedStore = IRawCollection & { cache?: Array> }; - -function handleErrors(response: Response): Response { - if (response.error) { - throw response.error; - } - - return response; -} - -function iterateEntries( - body: IResponse, - fn: (item: IRecord) => T, -): T | Array; - -function iterateEntries( - body: IResponse, - fn: (item: IRecord) => void, -): void; - -function iterateEntries( - body: IResponse, - fn: (item: IRecord) => T, -): T | Array | null { - mapItems((body && body.included) || [], fn); - - return mapItems((body && body.data) || null, fn); -} - -export function decorateCollection( - BaseClass: typeof PureCollection, -): ICollectionConstructor { - class JsonapiCollection extends BaseClass { - public static types = - BaseClass.types && BaseClass.types.length - ? BaseClass.types.concat(GenericModel) - : [GenericModel]; - - public static maxCacheAge: number = BaseClass['maxCacheAge']; - public static cache?: CachingStrategy = BaseClass['cache']; - - public static defaultModel = BaseClass['defaultModel'] || GenericModel; - - constructor(data: Array | TSerialisedStore = []) { - super(data); - - if (!(data instanceof Array) && data?.cache) { - saveCacheForCollection(data.cache, this); - } - } - - public sync(body?: IResponse): T | Array | null { - if (!body) { - return null; - } - const data: T | Array | null = iterateEntries(body, (obj: IRecord) => - this.__addRecord(obj), - ); - - iterateEntries(body, this.__updateRelationships.bind(this)); - - return data; - } - - /** - * Fetch the records with the given type and id - * - * @param {string} type Record type - * @param {string} type Record id - * @param {IRequestOptions} [options] Server options - * @returns {Promise} Resolves with the Response object or rejects with an error - */ - public fetch( - type: IType | IModelConstructor, - id: string, - options?: IRequestOptions, - ): Promise> { - deprecated('fetch is deprecated, use getOne instead'); - return this.getOne( - type, - id, - Object.assign({}, options, { - cacheOptions: Object.assign({}, options?.cacheOptions || {}, { - cachingStrategy: isBrowser ? CachingStrategy.CacheFirst : CachingStrategy.NetworkOnly, - }), - }), - ); - } - - /** - * Fetch the first page of records of the given type - * - * @param {string} type Record type - * @param {IRequestOptions} [options] Server options - * @returns {Promise} Resolves with the Response object or rejects with an error - */ - public fetchAll( - type: IType | IModelConstructor, - options?: IRequestOptions, - ): Promise> { - deprecated('fetchAll is deprecated, use getMany instead'); - return this.getMany( - type, - Object.assign({}, options, { - cacheOptions: Object.assign({}, options?.cacheOptions || {}, { - cachingStrategy: isBrowser ? CachingStrategy.CacheFirst : CachingStrategy.NetworkOnly, - }), - }), - ); - } - - public getOne( - type: IType | IModelConstructor, - id: string, - options?: IRequestOptions, - ): Promise> { - const modelType = getModelType(type); - const query = this.__prepareQuery(modelType, id, undefined, options); - const reqOptions = options || {}; - - reqOptions.networkConfig = reqOptions.networkConfig || {}; - reqOptions.networkConfig.headers = query.headers; - - return read(query.url, this, reqOptions).then(handleErrors); - } - - public getMany( - type: IType | IModelConstructor, - options?: IRequestOptions, - ): Promise> { - const modelType = getModelType(type); - const query = this.__prepareQuery(modelType, undefined, undefined, options); - const reqOptions = options || {}; - - reqOptions.networkConfig = reqOptions.networkConfig || {}; - reqOptions.networkConfig.headers = query.headers; - - return read(query.url, this, reqOptions).then(handleErrors); - } - - public request( - url: string, - method = 'GET', - data?: object, - options?: IRequestOptions, - ): Promise> { - const query = buildUrl(url, data, options); - - return libFetch({ url: query.url, options, data, method, collection: this }); - } - - public removeOne( - type: IType | typeof PureModel, - id: string, - options?: boolean | IRequestOptions, - ): Promise; - - public removeOne(model: PureModel, options?: boolean | IRequestOptions): Promise; - - public removeOne( - obj: IType | typeof PureModel | PureModel, - id?: string | boolean | IRequestOptions, - options?: boolean | IRequestOptions, - ): Promise { - let remoteOp: boolean | IRequestOptions | undefined; - let modelId: string; - let model: IJsonapiModel | null; - const type = getModelType(obj); - - if (typeof id === 'object' || id === undefined || typeof id === 'boolean') { - remoteOp = id; - modelId = getModelId(obj).toString(); - model = obj as IJsonapiModel; - } else { - remoteOp = options; - modelId = getModelId(id).toString(); - model = modelId ? (this.findOne(type, modelId) as IJsonapiModel | null) : null; - } - - if (model && remoteOp) { - return removeModel(model, typeof remoteOp === 'object' ? remoteOp : undefined); - } - - if (model) { - this.__removeModel(model); - } - clearCacheByType(type); - - return Promise.resolve(); - } - - public removeAll(type: string | number | typeof PureModel): void { - super.removeAll(type); - clearCacheByType(getModelType(type)); - } - - public reset(): void { - super.reset(); - clearAllCache(); - } - - private __addRecord(obj: IRecord): T { - const staticCollection = this.constructor as typeof PureCollection; - const { type, id } = obj; - let record: T | null = id === undefined ? null : (this.findOne(type, id) as T | null); - const Type = - staticCollection.types.find((item) => getModelType(item) === type) || GenericModel; - const classRefs = getModelClassRefs(Type); - const flattened: IRawModel = flattenModel(classRefs, obj); - - if (record) { - updateModel(record, flattened); - commitModel(record); - } else if (staticCollection.types.filter((item) => item.type === type).length) { - record = this.add(flattened, type); - } else { - record = this.add(new GenericModel(flattened, this)) as T; - } - - return record; - } - - private __updateRelationships(obj: IRecord): void { - const record: PureModel | null = obj.id === undefined ? null : this.findOne(obj.type, obj.id); - const refs: Array = obj.relationships ? Object.keys(obj.relationships) : []; - - refs.forEach((ref: string) => { - const refData = (obj.relationships as Record)[ref]; - - if (!refData || !('data' in refData)) { - return; - } - const items = refData.data; - - if (isArrayLike(items) && (items as Array).length < 1) { - // it's only possible to update items with one ore more refs. Early exit - return; - } - - if (record) { - if (items) { - const models: PureModel | Array | string | null = - mapItems( - items, - (def: IDefinition) => - (def.id === undefined ? null : this.findOne(def.type, def.id)) || def, - ) || null; - - const itemType: string = isArrayLike(items) - ? items[0].type - : (items as IDefinition).type; - - if (ref in record) { - record[ref] = models; - } else { - initModelRef( - record, - ref, - { model: itemType, type: ReferenceType.TO_ONE_OR_MANY }, - models, - ); - } - } else { - const refsDef = getMeta(record, 'refs') as Record; - - if (refsDef && ref in refsDef) { - record[ref] = refsDef[ref].type === ReferenceType.TO_MANY ? [] : null; - } - } - } - }); - } - - private __prepareQuery( - type: IType, - id?: number | string, - data?: IRequest, - options?: IRequestOptions, - ): { - url: string; - data?: object; - headers: IHeaders; - } { - return prepareQuery(type, id, data, options, this); - } - - public toJSON(): TSerialisedStore { - return Object.assign({}, super.toJSON(), { - cache: getCacheByCollection(this), - }); - } - } - - return JsonapiCollection as ICollectionConstructor; -} diff --git a/packages/datx-jsonapi/src/decorateModel.ts b/packages/datx-jsonapi/src/decorateModel.ts deleted file mode 100644 index fd7adf9ad..000000000 --- a/packages/datx-jsonapi/src/decorateModel.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { PureCollection, PureModel } from '@datx/core'; -import { IRawModel, META_FIELD, setMeta } from '@datx/utils'; - -import { - MODEL_LINKS_FIELD, - MODEL_META_FIELD, - MODEL_PERSISTED_FIELD, - MODEL_REF_LINKS_FIELD, - MODEL_REF_META_FIELD, -} from './consts'; -import { flattenModel, removeModel, saveModel } from './helpers/model'; -import { getModelClassRefs } from './helpers/utils'; -import { IRequestOptions } from './interfaces/IRequestOptions'; -import { IRecord } from './interfaces/JsonApi'; -import { IJsonapiModel } from './interfaces/IJsonapiModel'; - -const HYDRATIZATION_KEYS = [ - MODEL_LINKS_FIELD, - MODEL_META_FIELD, - MODEL_PERSISTED_FIELD, - MODEL_REF_LINKS_FIELD, - MODEL_REF_META_FIELD, -]; - -export function decorateModel(BaseClass: typeof PureModel): typeof PureModel { - class JsonapiModel extends BaseClass { - /** - * Should the autogenerated ID be sent to the server when creating a record - * - * @static - * @type {boolean} - * @memberOf Record - */ - public static useAutogeneratedIds: boolean = BaseClass['useAutogeneratedIds'] || false; - - /** - * Endpoint for API requests if there is no self link - * - * @static - * @type {string|() => string} - * @memberOf Record - */ - public static endpoint: string | (() => string); - - public static getAutoId(): string { - return super.getAutoId().toString(); - } - - constructor(rawData: IRawModel | IRecord = {}, collection?: PureCollection) { - let data = rawData; - - if (rawData && 'type' in rawData && ('attributes' in rawData || 'relationships' in rawData)) { - const classRefs = getModelClassRefs(BaseClass); - - data = flattenModel(classRefs, rawData as IRecord); - } - super(data, collection); - - const modelMeta = data?.[META_FIELD] || {}; - - HYDRATIZATION_KEYS.forEach((key) => { - if (key in modelMeta) { - setMeta(this, key, modelMeta[key]); - } - }); - } - - public save(options?: IRequestOptions): Promise { - return saveModel((this as unknown) as IJsonapiModel, options); - } - - public destroy(options?: IRequestOptions): Promise { - return removeModel(this, options); - } - } - - return JsonapiModel as typeof PureModel; -} diff --git a/packages/datx-jsonapi/src/decorateView.ts b/packages/datx-jsonapi/src/decorateView.ts deleted file mode 100644 index 8ae5b9bac..000000000 --- a/packages/datx-jsonapi/src/decorateView.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { IModelConstructor, IType, IViewConstructor, PureCollection, PureModel, View } from '@datx/core'; - -import { IJsonapiCollection } from './interfaces/IJsonapiCollection'; -import { IJsonapiModel } from './interfaces/IJsonapiModel'; -import { IJsonapiView } from './interfaces/IJsonapiView'; -import { IRequestOptions } from './interfaces/IRequestOptions'; -import { IResponse } from './interfaces/JsonApi'; -import { Response } from './Response'; - -export function decorateView( - BaseClass: typeof View, -): IViewConstructor { - class JsonapiView extends BaseClass { - protected __collection: IJsonapiCollection & PureCollection; - - constructor( - modelType: IModelConstructor | IType, - collection: IJsonapiCollection & PureCollection, - sortMethod?: string | ((item: M) => any), - models: Array = [], - unique = false, - ) { - super(modelType, collection, sortMethod, models, unique); - this.__collection = collection; - } - - public sync(body?: IResponse): M | Array | null { - const data = this.__collection.sync(body); - - if (data) { - this.add(data); - } - - return data as M | Array | null; - } - - /** - * Fetch the records with the given type and id - * - * @param {string} type Record id - * @param {IRequestOptions} [options] Server options - * @returns {Promise} Resolves with the Response object or rejects with an error - */ - public getOne(id: string, options?: IRequestOptions): Promise> { - return this.__collection - .getOne(this.modelType, id, options) - .then(this.__addFromResponse.bind(this)); - } - - /** - * Fetch the first page of records of the given type - * - * @param {IRequestOptions} [options] Server options - * @returns {Promise} Resolves with the Response object or rejects with an error - */ - public getMany(options?: IRequestOptions): Promise> { - return this.__collection - .getMany(this.modelType, options) - .then(this.__addFromResponse.bind(this)); - } - - protected __addFromResponse(response: Response): Response { - if (response.data) { - this.add(response.data); - } - response.views.push(this); - - return response; - } - } - - // @ts-ignore - return JsonapiView as IViewConstructor; -} diff --git a/packages/datx-jsonapi/src/helpers/model.ts b/packages/datx-jsonapi/src/helpers/model.ts deleted file mode 100644 index 1c20867b0..000000000 --- a/packages/datx-jsonapi/src/helpers/model.ts +++ /dev/null @@ -1,335 +0,0 @@ -import { - getModelCollection, - getModelId, - getModelType, - getRefId, - IFieldDefinition, - IModelRef, - IReferenceOptions, - modelToJSON, - PureModel, - ReferenceType, - modelToDirtyJSON, -} from '@datx/core'; -import { getMeta, IRawModel, mapItems, META_FIELD, setMeta } from '@datx/utils'; - -import { clearCacheByType } from '../cache'; -import { - MODEL_LINKS_FIELD, - MODEL_META_FIELD, - MODEL_PERSISTED_FIELD, - MODEL_PROP_FIELD, - MODEL_QUEUE_FIELD, - MODEL_REF_LINKS_FIELD, - MODEL_REF_META_FIELD, - MODEL_RELATED_FIELD, -} from '../consts'; -import { IJsonapiCollection } from '../interfaces/IJsonapiCollection'; -import { IJsonapiModel } from '../interfaces/IJsonapiModel'; -import { IRequestOptions } from '../interfaces/IRequestOptions'; -import { IDefinition, ILink, IRecord, IRelationship } from '../interfaces/JsonApi'; -import { create, fetchLink, handleResponse, remove, update } from '../NetworkUtils'; -import { Response } from '../Response'; -import { prepareQuery } from './url'; -import { error, getModelClassRefs } from './utils'; -import { GenericModel } from '../GenericModel'; - -export function flattenModel(classRefs): null; -export function flattenModel(classRefs, data?: IRecord): IRawModel; -export function flattenModel( - classRefs: Record>, - data?: IRecord, -): IRawModel | null { - if (!data) { - return null; - } - - const rawData = { - [META_FIELD]: { - fields: Object.keys(data.attributes || {}).reduce((obj, key) => { - obj[key] = { referenceDef: false }; - - return obj; - }, {}), - id: data.id, - [MODEL_LINKS_FIELD]: data.links, - [MODEL_META_FIELD]: data.meta, - [MODEL_PERSISTED_FIELD]: Boolean(data.id), - type: data.type, - }, - }; - - if (data.relationships) { - const refLinks = {}; - const refMeta = {}; - const refs: Record = {}; - - Object.keys(data.relationships).forEach((key) => { - const ref = (data.relationships as Record)[key]; - - if (ref && 'data' in ref && (ref.data || ref.data === null)) { - if (!(ref.data instanceof Array) || ref.data.length > 0) { - rawData[key] = ref.data; - if (!classRefs || !(key in classRefs)) { - refs[key] = { - referenceDef: { - model: - (ref.data instanceof Array ? ref.data[0].type : ref.data?.type) || - GenericModel.type, - type: ref.data instanceof Array ? ReferenceType.TO_MANY : ReferenceType.TO_ONE, - }, - }; - } - } else { - rawData[key] = []; - } - } - if (ref && 'links' in ref) { - refLinks[key] = ref.links; - } - if (ref && 'meta' in ref) { - refMeta[key] = ref.meta; - } - }); - - Object.assign(rawData[META_FIELD].fields, refs); - rawData[META_FIELD][MODEL_REF_LINKS_FIELD] = refLinks; - rawData[META_FIELD][MODEL_REF_META_FIELD] = refMeta; - } - - return Object.assign(rawData, data.attributes); -} - -export function getModelMeta(model: PureModel): Record { - return getMeta(model, MODEL_META_FIELD, {}); -} - -export function getModelLinks(model: PureModel): Record { - return getMeta(model, MODEL_LINKS_FIELD, {}); -} - -export function fetchModelLink( - model: PureModel, - key: string, - options?: IRequestOptions, -): Promise> { - const collection = getModelCollection(model); - const links = getModelLinks(model); - - if (!links || !(key in links)) { - throw error(`Link ${key} doesn't exist on the model`); - } - const link = links[key]; - const responseObj = fetchLink(link, (collection as unknown) as IJsonapiCollection, options); - - if (getMeta(model, MODEL_QUEUE_FIELD)) { - return responseObj.then((response) => { - const related = getMeta(model, MODEL_RELATED_FIELD); - const prop = getMeta(model, MODEL_PROP_FIELD); - const record = response.data; - const recordType = record && getModelType(record); - - if (record && recordType !== getModelType(model) && recordType === getModelType(related)) { - if (prop) { - related[prop] = record; - - return response; - } - setMeta(related, MODEL_PERSISTED_FIELD, true); - - return response.replaceData(related) as Response; - } - - return response; - }); - } - - return responseObj; -} - -export function getModelRefLinks(model: PureModel): Record> { - return getMeta(model, MODEL_REF_LINKS_FIELD, {}); -} - -function getLink(model: PureModel, ref: string, key: string): ILink { - const collection = getModelCollection(model); - - if (!collection) { - throw error('The model needs to be in a collection'); - } - const links = getModelRefLinks(model); - - if (!links || !(ref in links)) { - throw error(`The reference ${ref} doesn't have any links`); - } - const refLinks = links[ref]; - - if (!refLinks || !(key in refLinks)) { - throw error(`Link ${key} doesn't exist on the model`); - } - - return refLinks[key]; -} - -export function fetchModelRefLink( - model: PureModel, - ref: string, - key: string, - options?: IRequestOptions, -): Promise> { - const collection = getModelCollection(model); - const link = getLink(model, ref, key); - - return fetchLink(link, (collection as unknown) as IJsonapiCollection, options); -} - -export function getModelRefMeta(model: PureModel): Record { - return getMeta(model, MODEL_REF_META_FIELD, {}); -} - -export function isModelPersisted(model: PureModel): boolean { - return getMeta(model, MODEL_PERSISTED_FIELD, false); -} - -function setModelPersisted(model: PureModel, status: boolean): void { - setMeta(model, MODEL_PERSISTED_FIELD, status); -} - -export function modelToJsonApi(model: IJsonapiModel, onlyDirty?: boolean): IRecord { - const staticModel = model.constructor as typeof PureModel; - const attributes: Record = onlyDirty ? modelToDirtyJSON(model) : modelToJSON(model); - - const useAutogenerated: boolean = staticModel['useAutogeneratedIds']; - const isPersisted = isModelPersisted(model); - - const data: IRecord = { - attributes, - id: isPersisted || useAutogenerated ? getModelId(model).toString() : undefined, - type: getModelType(model) as string, - }; - - const refs = getModelClassRefs(model); - - Object.keys(refs).forEach((key) => { - if (refs[key].property) { - return; - } - data.relationships = data.relationships || {}; - const refsList: IModelRef | Array | null = getRefId(model, key); - - data.relationships[key] = { - data: mapItems(refsList, (refItem: IModelRef) => ({ - id: refItem.id.toString(), - type: refItem.type, - })) as IDefinition | Array, - }; - if (data.attributes) { - delete data.attributes[key]; - } - }); - - if (data.attributes) { - delete data.attributes.id; - delete data.attributes[META_FIELD]; - } - - return data; -} - -export function getModelEndpointUrl(model: IJsonapiModel, options?: IRequestOptions): string { - const queryData = prepareQuery( - getModelType(model), - isModelPersisted(model) ? getModelId(model) : undefined, - undefined, - options, - undefined, - model, - ); - - return queryData.url; -} - -export function saveModel(model: IJsonapiModel, options?: IRequestOptions): Promise { - const collection = (getModelCollection(model) as unknown) as IJsonapiCollection; - - const isPersisted = isModelPersisted(model); - const data: IRecord = modelToJsonApi(model, isPersisted); - const requestMethod = isPersisted ? update : create; - const url = getModelEndpointUrl(model, options); - - return requestMethod( - url, - { data }, - collection, - options && options.networkConfig && options.networkConfig.headers, - ) - .then(handleResponse(model)) - .then((response) => { - clearCacheByType(getModelType(model)); - - return response; - }); -} - -export function removeModel( - model: T, - options?: IRequestOptions, -): Promise { - const collection = (getModelCollection(model) as unknown) as IJsonapiCollection; - - const isPersisted = isModelPersisted(model); - const url = getModelEndpointUrl(model); - - if (isPersisted) { - return remove( - url, - collection, - options && options.networkConfig && options.networkConfig.headers, - ).then((response: Response) => { - if (response.error) { - throw response.error; - } - - setModelPersisted(model, false); - - if (collection) { - // @ts-ignore - collection.__removeModel(model); - } - }); - } - - if (collection) { - // @ts-ignore - collection.__removeModel(model); - } - - return Promise.resolve(); -} - -export function saveRelationship( - model: T, - ref: string, - options?: IRequestOptions, -): Promise { - const collection = (getModelCollection(model) as unknown) as IJsonapiCollection; - const link = getLink(model, ref, 'self'); - const href: string = typeof link === 'object' ? link.href : link; - - const modelRefs = getRefId(model, ref); - const fields: IFieldDefinition = getMeta(model, 'fields')?.[ref]; - const type = fields?.referenceDef ? fields.referenceDef.model : null; - - type ID = IDefinition | Array; - const data: ID = mapItems(modelRefs, (refItem: IModelRef) => ({ - id: refItem.id, - type: refItem.type || type, - })) as ID; - - return update( - href, - { data }, - collection, - options && options.networkConfig && options.networkConfig.headers, - ).then(handleResponse(model, ref)); -} diff --git a/packages/datx-jsonapi/src/helpers/url.ts b/packages/datx-jsonapi/src/helpers/url.ts deleted file mode 100644 index 6e1f07a9e..000000000 --- a/packages/datx-jsonapi/src/helpers/url.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { getModelType, IType, PureCollection, PureModel } from '@datx/core'; - -import { URL_REGEX } from '../consts'; -import { IFilters } from '../interfaces/IFilters'; -import { IHeaders } from '../interfaces/IHeaders'; -import { IJsonapiModel } from '../interfaces/IJsonapiModel'; -import { IRequestOptions } from '../interfaces/IRequestOptions'; -import { IRequest } from '../interfaces/JsonApi'; -import { config } from '../NetworkUtils'; -import { ParamArrayType } from '@datx/network'; - -function parametrize(params: object, scope = ''): Array<{ key: string; value: string }> { - const list: Array<{ key: string; value: string }> = []; - - Object.keys(params).forEach((key) => { - if (params[key] instanceof Array) { - if (config.paramArrayType === ParamArrayType.CommaSeparated) { - list.push({ key: `${scope}${key}`, value: params[key].join(',') }); - } else if (config.paramArrayType === ParamArrayType.MultipleParams) { - // eslint-disable-next-line prefer-spread - list.push.apply( - list, - params[key].map((param) => ({ key: `${scope}${key}`, value: param })), - ); - } else if (config.paramArrayType === ParamArrayType.ParamArray) { - // eslint-disable-next-line prefer-spread - list.push.apply( - list, - params[key].map((param) => ({ key: `${scope}${key}][`, value: param })), - ); - } - } else if (typeof params[key] === 'object') { - // eslint-disable-next-line prefer-spread - list.push.apply(list, parametrize(params[key], `${key}.`)); - } else { - list.push({ key: `${scope}${key}`, value: params[key] }); - } - }); - - return list; -} - -function prepareFilters(filters: IFilters): Array { - return parametrize(filters).map((item) => `filter[${item.key}]=${item.value}`); -} - -function prepareSort(sort?: string | Array): Array { - return sort ? [`sort=${sort}`] : []; -} - -function prepareIncludes(include?: string | Array): Array { - return include ? [`include=${include}`] : []; -} - -function prepareFields(fields: Record>): Array { - const list: Array = []; - - Object.keys(fields).forEach((key) => { - list.push(`fields[${key}]=${fields[key]}`); - }); - - return list; -} - -function prepareRawParams(params: Array<{ key: string; value: string } | string>): Array { - return params.map((param) => { - if (typeof param === 'string') { - return param; - } - - return `${param.key}=${param.value}`; - }); -} - -function prefixUrl(url: string, containsBase?: boolean): string { - if (URL_REGEX.test(url) || containsBase) { - return url; - } - - return `${config.baseUrl}${url}`; -} - -function appendParams(url: string, params: Array): string { - let newUrl = url; - - if (params.length) { - const separator = newUrl.indexOf('?') === -1 ? '?' : '&'; - - newUrl += separator + params.join('&'); - } - - return newUrl; -} - -function encodeParam(param: string): string { - // Manually decode field-value separator (=) - only the first one - return encodeURIComponent(param).replace(/%3D/, '='); -} - -export function buildUrl( - url: string, - data?: IRequest, - options?: IRequestOptions, - containsBase?: boolean, -): { - url: string; - data?: object; - headers: IHeaders; -} { - const headers: Record = - (options && options.networkConfig && options.networkConfig.headers) || {}; - let params: Array = ([] as Array).concat( - prepareFilters((options && options.queryParams && options.queryParams.filter) || {}), - prepareSort(options && options.queryParams && options.queryParams.sort), - prepareIncludes(options && options.queryParams && options.queryParams.include), - prepareFields((options && options.queryParams && options.queryParams.fields) || {}), - prepareRawParams((options && options.queryParams && options.queryParams.custom) || []), - ); - - if (config.encodeQueryString) { - params = params.map(encodeParam); - } - - const baseUrl: string = appendParams(prefixUrl(url, containsBase), params); - - return { data, headers, url: baseUrl }; -} - -export function prepareQuery( - type: IType, - id?: number | string, - data?: IRequest, - options?: IRequestOptions, - collection?: PureCollection, - model?: IJsonapiModel, -): { - url: string; - data?: object; - headers: IHeaders; -} { - let queryModel: typeof PureModel | IJsonapiModel | undefined = - model && (model.constructor as typeof PureModel); - - if (!queryModel && collection) { - const staticCollection = collection.constructor as typeof PureCollection; - - [queryModel] = staticCollection.types.filter((item) => item.type === type); - } - - let containsBase = false; - let path: string; - - if (!queryModel) { - path = type.toString(); - } else if (queryModel['endpoint'] && typeof queryModel['endpoint'] === 'function') { - containsBase = true; - path = queryModel['endpoint'](config.baseUrl); - } else { - path = queryModel['endpoint'] || queryModel['baseUrl'] || getModelType(queryModel); - } - - const url: string = id ? `${path}/${id}` : `${path}`; - - return buildUrl(url, data, options, containsBase); -} diff --git a/packages/datx-jsonapi/src/helpers/utils.ts b/packages/datx-jsonapi/src/helpers/utils.ts deleted file mode 100644 index 50dd8a748..000000000 --- a/packages/datx-jsonapi/src/helpers/utils.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { IFieldDefinition, IReferenceDefinition, PureModel } from '@datx/core'; -import { getMeta } from '@datx/utils'; - -// eslint-disable-next-line no-var -declare var window: object; - -export const isBrowser: boolean = typeof window !== 'undefined'; - -/** - * Returns the value if it's not a function. If it's a function - * it calls it. - * - * @export - * @template T - * @param {(T|(() => T))} target can be anything or function - * @returns {T} value - */ -export function getValue(target: T | (() => T)): T { - if (typeof target === 'function') { - // @ts-ignore - return target(); - } - - return target; -} - -export function error(message: string): Error { - return new Error(`[datx exception] ${message}`); -} - -export function getModelClassRefs( - type: typeof PureModel | PureModel, -): Record { - const fields: Record = getMeta(type, 'fields', {}, true, true); - const refs: Record = {}; - - Object.keys(fields).forEach((key) => { - if (fields[key].referenceDef) { - refs[key] = fields[key].referenceDef as IReferenceDefinition; - } - }); - - return refs; -} diff --git a/packages/datx-jsonapi/src/index.ts b/packages/datx-jsonapi/src/index.ts deleted file mode 100644 index 1cb8cdafa..000000000 --- a/packages/datx-jsonapi/src/index.ts +++ /dev/null @@ -1,59 +0,0 @@ -export { jsonapi } from './mixin'; -export { Response } from './Response'; -export { NetworkResponse } from './NetworkResponse'; -export { GenericModel } from './GenericModel'; - -export { - fetchModelLink, - fetchModelRefLink, - getModelLinks, - getModelMeta, - getModelRefLinks, - getModelRefMeta, - getModelEndpointUrl, - modelToJsonApi, - saveRelationship, - isModelPersisted, - saveModel, -} from './helpers/model'; - -export { BaseJsonapiRequest } from './BaseRequest'; - -export { ICollectionFetchOpts } from './interfaces/ICollectionFetchOpts'; -export { IJsonapiCollection } from './interfaces/IJsonapiCollection'; -export { IJsonapiModel } from './interfaces/IJsonapiModel'; -export { IJsonapiView } from './interfaces/IJsonapiView'; -export { IRawResponse } from './interfaces/IRawResponse'; -export { IRequestOptions } from './interfaces/IRequestOptions'; -export { IResponse } from './interfaces/JsonApi'; - -export { config, fetchLink } from './NetworkUtils'; - -export { - BaseRequest, - addInterceptor, - cache, - method, - setUrl, - body, - query, - header, - params, - fetchReference, - encodeQueryString, - paramArrayType, - serializer, - parser, - collection, - ParamArrayType, - CachingStrategy, - HttpMethod, - IFetchOptions, - IHeaders, - IInterceptor, - INetworkHandler, - IPipeOperator, - IResponseObject, - clearAllCache, - clearCacheByType, -} from '@datx/network'; diff --git a/packages/datx-jsonapi/src/interfaces/ICollectionFetchOpts.ts b/packages/datx-jsonapi/src/interfaces/ICollectionFetchOpts.ts deleted file mode 100644 index a48c12341..000000000 --- a/packages/datx-jsonapi/src/interfaces/ICollectionFetchOpts.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { View } from '@datx/core'; - -import { IJsonapiCollection } from './IJsonapiCollection'; -import { IRequestOptions } from './IRequestOptions'; - -export interface ICollectionFetchOpts { - url: string; - options?: IRequestOptions; - data?: object; - method: string; - collection?: IJsonapiCollection; - skipCache?: boolean; - views?: Array; -} diff --git a/packages/datx-jsonapi/src/interfaces/IFilters.ts b/packages/datx-jsonapi/src/interfaces/IFilters.ts deleted file mode 100644 index fa806ee4d..000000000 --- a/packages/datx-jsonapi/src/interfaces/IFilters.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IFilters { - [key: string]: string | Array | IFilters; -} diff --git a/packages/datx-jsonapi/src/interfaces/IHeaders.ts b/packages/datx-jsonapi/src/interfaces/IHeaders.ts deleted file mode 100644 index f3723bef0..000000000 --- a/packages/datx-jsonapi/src/interfaces/IHeaders.ts +++ /dev/null @@ -1 +0,0 @@ -export type IHeaders = Record; diff --git a/packages/datx-jsonapi/src/interfaces/IJsonapiCollection.ts b/packages/datx-jsonapi/src/interfaces/IJsonapiCollection.ts deleted file mode 100644 index 13f9fab34..000000000 --- a/packages/datx-jsonapi/src/interfaces/IJsonapiCollection.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { IModelConstructor, IType, PureCollection, PureModel } from '@datx/core'; - -import { Response } from '../Response'; -import { IJsonapiModel } from './IJsonapiModel'; -import { IRequestOptions } from './IRequestOptions'; -import { IResponse } from './JsonApi'; - -export interface IJsonapiCollection extends PureCollection { - sync(body?: IResponse): T | Array | null; - - /** - * Fetch the records with the given type and id - * - * @param {string} type Record type - * @param {string} type Record id - * @param {IRequestOptions} [options] Server options - * @returns {Promise} Resolves with the Response object or rejects with an error - */ - fetch( - type: IType | IModelConstructor, - id: string, - options?: IRequestOptions, - ): Promise>; - - /** - * Fetch the first page of records of the given type - * - * @param {string} type Record type - * @param {IRequestOptions} [options] Server options - * @returns {Promise} Resolves with the Response object or rejects with an error - */ - fetchAll( - type: IType | IModelConstructor, - options?: IRequestOptions, - ): Promise>; - - getOne( - type: IType | IModelConstructor, - id: string, - options?: IRequestOptions, - ): Promise>; - - getMany( - type: IType | IModelConstructor, - options?: IRequestOptions, - ): Promise>; - - request( - url: string, - method?: string, - data?: object, - options?: IRequestOptions, - ): Promise>; - - removeOne( - type: IType | typeof PureModel, - id: string, - options?: boolean | IRequestOptions, - ): Promise; - removeOne(model: PureModel, options?: boolean | IRequestOptions): Promise; -} diff --git a/packages/datx-jsonapi/src/interfaces/IJsonapiModel.ts b/packages/datx-jsonapi/src/interfaces/IJsonapiModel.ts deleted file mode 100644 index a716b0555..000000000 --- a/packages/datx-jsonapi/src/interfaces/IJsonapiModel.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PureModel } from '@datx/core'; - -import { IRequestOptions } from './IRequestOptions'; - -export interface IJsonapiModel extends PureModel { - save(options?: IRequestOptions): Promise; - - destroy(options?: IRequestOptions): Promise; -} diff --git a/packages/datx-jsonapi/src/interfaces/IJsonapiView.ts b/packages/datx-jsonapi/src/interfaces/IJsonapiView.ts deleted file mode 100644 index 24787d577..000000000 --- a/packages/datx-jsonapi/src/interfaces/IJsonapiView.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { View } from '@datx/core'; - -import { Response } from '../Response'; -import { IJsonapiModel } from './IJsonapiModel'; -import { IRequestOptions } from './IRequestOptions'; -import { IResponse } from './JsonApi'; - -export interface IJsonapiView extends View { - sync(body?: IResponse): T | Array | null; - - getOne(id: string, options?: IRequestOptions): Promise>; - getMany(options?: IRequestOptions): Promise>; -} diff --git a/packages/datx-jsonapi/src/interfaces/IRawResponse.ts b/packages/datx-jsonapi/src/interfaces/IRawResponse.ts deleted file mode 100644 index ade08637a..000000000 --- a/packages/datx-jsonapi/src/interfaces/IRawResponse.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Collection } from '@datx/core'; -import { IResponseHeaders } from '@datx/utils'; - -import { IHeaders } from './IHeaders'; -import { IJsonApiObject, IResponse } from './JsonApi'; - -export interface IRawResponse { - data?: IResponse; - error?: Error; - headers?: IResponseHeaders; - requestHeaders?: IHeaders; - status?: number; - jsonapi?: IJsonApiObject; - collection?: Collection; -} diff --git a/packages/datx-jsonapi/src/interfaces/IRequestOptions.ts b/packages/datx-jsonapi/src/interfaces/IRequestOptions.ts deleted file mode 100644 index 077277137..000000000 --- a/packages/datx-jsonapi/src/interfaces/IRequestOptions.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { IFilters } from './IFilters'; -import { IHeaders } from './IHeaders'; -import { CachingStrategy } from '@datx/network'; - -export interface IRequestOptions { - queryParams?: { - include?: string | Array; - filter?: IFilters; - sort?: string | Array; - fields?: Record>; - custom?: Array<{ key: string; value: string } | string>; - }; - cacheOptions?: { - cachingStrategy?: CachingStrategy; - maxAge?: number; - skipCache?: boolean; - }; - networkConfig?: { - headers?: IHeaders; - }; - - /** If you don't know what this is for, you should probably not use it */ - fetchOptions?: object; -} diff --git a/packages/datx-jsonapi/src/interfaces/IResponseInternal.ts b/packages/datx-jsonapi/src/interfaces/IResponseInternal.ts deleted file mode 100644 index 2f0495525..000000000 --- a/packages/datx-jsonapi/src/interfaces/IResponseInternal.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { View } from '@datx/core'; -import { IResponseHeaders } from '@datx/utils'; - -import { IHeaders } from './IHeaders'; -import { IRawResponse } from './IRawResponse'; -import { IRequestOptions } from './IRequestOptions'; -import { IError, IJsonApiObject, ILink } from './JsonApi'; - -export interface IResponseInternal { - meta?: object; - links?: Record; - jsonapi?: IJsonApiObject; - headers?: IResponseHeaders; - requestHeaders?: IHeaders; - error?: Array | Error; - status?: number; - options?: IRequestOptions; - response: IRawResponse; - views: Array; -} diff --git a/packages/datx-jsonapi/src/interfaces/IResponseSnapshot.ts b/packages/datx-jsonapi/src/interfaces/IResponseSnapshot.ts deleted file mode 100644 index aaa2d2fe1..000000000 --- a/packages/datx-jsonapi/src/interfaces/IResponseSnapshot.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IRawResponse } from './IRawResponse'; -import { IRequestOptions } from './IRequestOptions'; - -export interface IResponseSnapshot { - response: Omit & { headers?: Array<[string, string]> }; - options?: IRequestOptions; -} diff --git a/packages/datx-jsonapi/src/interfaces/JsonApi.ts b/packages/datx-jsonapi/src/interfaces/JsonApi.ts deleted file mode 100644 index 73b97f81c..000000000 --- a/packages/datx-jsonapi/src/interfaces/JsonApi.ts +++ /dev/null @@ -1,56 +0,0 @@ -interface IDefinition { - id?: string; - type: string; -} - -interface IJsonApiObject { - version?: string; - meta?: Record; -} - -type ILink = string | { href: string; meta: Record }; - -interface IError { - id?: string | number; - links?: { - about: ILink; - }; - status?: number; - code?: string; - title?: string; - detail?: string; - source?: { - pointer?: string; - parameter?: string; - }; - meta?: Record; -} - -interface IRelationship { - data?: IDefinition | Array | null; - links?: Record; - meta?: Record; -} - -interface IRecord extends IDefinition { - attributes?: Record; - - relationships?: Record; - links?: Record; - meta?: Record; -} - -interface IResponse { - data?: IRecord | Array; - errors?: Array; - - included?: Array; - - meta?: Record; - links?: Record; - jsonapi?: IJsonApiObject; -} - -type IRequest = IResponse; // Not sure if this is correct, but it's ok for now - -export { IDefinition, IJsonApiObject, ILink, IError, IRelationship, IRecord, IResponse, IRequest }; diff --git a/packages/datx-jsonapi/src/mixin.ts b/packages/datx-jsonapi/src/mixin.ts deleted file mode 100644 index f8e89598d..000000000 --- a/packages/datx-jsonapi/src/mixin.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { - ICollectionConstructor, - IModelConstructor, - isCollection, - isModel, - isView, - IViewConstructor, - PureCollection, - PureModel, -} from '@datx/core'; - -import { decorateCollection } from './decorateCollection'; -import { decorateModel } from './decorateModel'; -import { decorateView } from './decorateView'; -import { IJsonapiCollection } from './interfaces/IJsonapiCollection'; -import { IJsonapiModel } from './interfaces/IJsonapiModel'; -import { IJsonapiView } from './interfaces/IJsonapiView'; - -export function jsonapi( - Base: IModelConstructor, -): IModelConstructor; - -export function jsonapi( - Base: ICollectionConstructor, -): ICollectionConstructor; - -export function jsonapi( - Base: IViewConstructor, -): IViewConstructor; - -export function jsonapi( - Base: IModelConstructor | ICollectionConstructor | IViewConstructor, -): - | IModelConstructor - | ICollectionConstructor - | IViewConstructor { - if (isModel(Base)) { - // @ts-ignore - return decorateModel(Base); - } - - if (isCollection(Base)) { - // @ts-ignore - return decorateCollection(Base); - } - - if (isView(Base)) { - // @ts-ignore - return decorateView(Base); - } - - throw new Error('The instance needs to be a model, collection or a view'); -} diff --git a/packages/datx-jsonapi/src/operators.ts b/packages/datx-jsonapi/src/operators.ts deleted file mode 100644 index 48bfa4713..000000000 --- a/packages/datx-jsonapi/src/operators.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { - BaseRequest, - header, - parser, - IResponseObject, - IFetchOptions, - serializer, - query, - paramArrayType, - ParamArrayType, - encodeQueryString, -} from '@datx/network'; -import { IJsonapiCollection } from './interfaces/IJsonapiCollection'; -import { mapItems } from '@datx/utils'; -import { PureModel } from '@datx/core'; -import { modelToJsonApi } from './helpers/model'; -import { IJsonapiModel } from './interfaces/IJsonapiModel'; -import { NetworkResponse } from './NetworkResponse'; - -function jsonapiParser(data: object, response: IResponseObject): object { - return ( - (data && response.collection - ? ((response.collection as unknown) as IJsonapiCollection).sync(data) - : data) || {} - ); -} - -function jsonapiSerializer(request: IFetchOptions): IFetchOptions { - return { - ...request, - data: { - data: - mapItems(request.data, (obj) => - obj instanceof PureModel ? modelToJsonApi(obj as IJsonapiModel, true) : obj, - ) || undefined, - }, - }; -} - -export function isJsonapi() { - return (pipeline: BaseRequest): void => { - pipeline['_config'].Response = NetworkResponse; - header('content-type', 'application/vnd.api+json')(pipeline); - parser(jsonapiParser)(pipeline); - serializer(jsonapiSerializer)(pipeline); - paramArrayType(ParamArrayType.CommaSeparated)(pipeline); - encodeQueryString(false)(pipeline); - }; -} - -export function filter(filter: Record) { - return (pipeline: BaseRequest): void => { - query('filter', filter)(pipeline); - }; -} - -export enum Direction { - Asc = '', - Desc = '-', -} - -export function sort(...params: Array) { - return (pipeline: BaseRequest): void => { - query( - 'sort', - params.map((item) => (typeof item === 'string' ? item : item.reverse().join(''))), - )(pipeline); - }; -} - -export function page(page: Record) { - return (pipeline: BaseRequest): void => { - query('page', page)(pipeline); - }; -} - -export function include(...included: Array) { - return (pipeline: BaseRequest): void => { - query('include', included)(pipeline); - }; -} - -export function sparse(sparse: Record>) { - return (pipeline: BaseRequest): void => { - query('fields', sparse)(pipeline); - }; -} diff --git a/packages/datx-jsonapi/test/general.test.ts b/packages/datx-jsonapi/test/general.test.ts deleted file mode 100644 index 6caaad6e2..000000000 --- a/packages/datx-jsonapi/test/general.test.ts +++ /dev/null @@ -1,718 +0,0 @@ -import { Collection, getModelId, getModelType, Model } from '@datx/core'; -import { mobx } from '@datx/utils'; - -import { getModelRefLinks, jsonapi, modelToJsonApi } from '../src'; -import { Event, Image, Photo, TestStore, User } from './utils/setup'; - -describe('General', () => { - it('should initialize', () => { - const store = new TestStore(); - - expect(store).toBeTruthy(); - }); - - it('should sync an event', () => { - const store = new TestStore(); - const event = store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - type: 'event', - }, - }) as Event; - - expect(event.name).toBe('Demo'); - }); - - it('should handle empty array reference', () => { - const store = new TestStore(); - const event = store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - images: { - data: [], - }, - }, - type: 'event', - }, - }) as Event; - - expect(event.name).toBe('Demo'); - }); - - it('should handle empty reference', () => { - const store = new TestStore(); - const event = store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - image: {}, - }, - type: 'event', - }, - }) as Event; - - expect(event.name).toBe('Demo'); - }); - - it('should handle missing reference', () => { - const store = new TestStore(); - const event = store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - image: { - data: { - id: '1', - type: 'image', - }, - }, - }, - type: 'event', - }, - }) as Event; - - expect(event.name).toBe('Demo'); - if (event.meta.refs.image instanceof Array) { - expect(event.meta.refs.image).not.toBeInstanceOf(Array); - } else { - expect(event.meta.refs.image?.id).toBe('1'); - } - expect(event.image).toBeNull(); - }); - - it('should find an event', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - type: 'event', - }, - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - if (event) { - expect(event.meta.id).toBe('1'); - expect(event.meta.type).toBe('event'); - expect(event.name).toBe('Demo'); - } - }); - - it('should trigger autorun on change', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - type: 'event', - }, - }); - - const event = store.findOne(Event, '1'); - - expect(event).toBeInstanceOf(Event); - if (event) { - let name = 'Demo'; - let autorunCount = 0; - - mobx.autorun(() => { - expect(event.name).toBe(name); - autorunCount++; - }); - - mobx.runInAction(() => { - name = 'Foo'; - event.name = 'Foo'; - }); - expect(autorunCount).toBe(mobx.useRealMobX ? 2 : 1); - } - }); - - it('should handle relationships with duplicates', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - images: { - data: [ - { - id: '2', - type: 'image', - }, - ], - }, - }, - type: 'event', - }, - included: [ - { - attributes: { - name: 'Header', - }, - id: '2', - type: 'image', - }, - { - attributes: { - name: 'Header', - }, - id: '2', - type: 'image', - }, - ], - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - if (event) { - expect(event.name).toBe('Demo'); - expect(event.images.length).toBe(1); - } - - const images = store.findAll(Image); - - expect(images.length).toBe(1); - - const foo = store.findAll('foo'); - - expect(foo.length).toBe(0); - }); - - it('should handle relationship elements without links attribute', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - image: { - data: { - id: '2', - type: 'images', - }, - }, - }, - type: 'event', - }, - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - if (event) { - expect(event.name).toBe('Demo'); - expect(event.image).toBe(null); - } - }); - - it('should handle basic circular relations', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - images: { - data: [ - { - id: '2', - type: 'image', - }, - ], - }, - }, - type: 'event', - }, - included: [ - { - attributes: { - name: 'Header', - }, - id: '2', - relationships: { - event: { - data: { - id: '1', - type: 'event', - }, - }, - }, - type: 'image', - }, - ], - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - if (event) { - expect(event.name).toBe('Demo'); - expect(event.images[0].name).toBe('Header'); - expect(event.images[0].event.meta.id).toBe('1'); - } - }); - - it('should return a event with all associated objects', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Meetup', - slug: 'meetup-1', - }, - id: '1', - relationships: { - images: { - data: [ - { type: 'image', id: '1' }, - { type: 'image', id: '2' }, - { type: 'image', id: '3' }, - ], - }, - organizers: { - data: [ - { type: 'organizers', id: '1' }, - { type: 'organizers', id: '2' }, - ], - }, - }, - type: 'event', - }, - included: [ - { - attributes: { - firstName: 'John', - }, - id: '1', - relationships: { - event: { - data: { type: 'event', id: '1' }, - }, - image: { - data: { type: 'image', id: '2' }, - }, - }, - type: 'organizers', - }, - { - attributes: { - firstName: 'Jane', - }, - id: '2', - relationships: { - event: { - data: { type: 'event', id: '1' }, - }, - image: { - data: { type: 'image', id: '3' }, - }, - }, - type: 'organizers', - }, - { - attributes: { - name: 'Sam', - }, - id: '1', - relationships: { - event: { - data: { type: 'event', id: '1' }, - }, - }, - type: 'image', - }, - { - attributes: { - name: 'Organizer Sam', - }, - id: '2', - relationships: { - event: { - data: { type: 'event', id: '1' }, - }, - }, - type: 'image', - }, - { - attributes: { - name: 'Organizer Jane', - }, - id: '3', - relationships: { - event: { - data: { type: 'event', id: '1' }, - }, - }, - type: 'image', - }, - ], - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - if (event) { - expect(event.organizers.length).toBe(2); - expect(event.images.length).toBe(3); - expect(event.organizers[0].image.meta.id).toBe('2'); - } - }); - - it('should remove an event', () => { - const store = new TestStore(); - - store.sync({ - data: [ - { id: '1', type: 'event', attributes: {} }, - { id: '2', type: 'event', attributes: {} }, - ], - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - if (event) { - expect(event.meta.id).toBe('1'); - } - store.removeOne(Event, '1'); - const event2 = store.findOne(Event, '1'); - - expect(event2).toBe(null); - }); - - it('should remove all events', () => { - const store = new TestStore(); - - store.sync({ - data: [ - { id: '1', type: 'event', attributes: {} }, - { id: '2', type: 'event', attributes: {} }, - ], - }); - - const events = store.findAll(Event); - - expect(events.length).toBe(2); - store.removeAll(Event); - const events2 = store.findAll(Event); - - expect(events2).toHaveLength(0); - }); - - it('should reset', () => { - const store = new TestStore(); - - store.sync({ - data: [ - { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - images: { - data: [ - { - id: '2', - type: 'image', - }, - ], - }, - }, - type: 'event', - }, - { - attributes: { - name: 'Demo 2', - }, - id: '2', - type: 'event', - }, - ], - included: [ - { - attributes: { - name: 'Header', - }, - id: '2', - relationships: { - event: { - data: { type: 'event', id: '1' }, - }, - }, - type: 'image', - }, - ], - }); - - const events = store.findAll(Event); - const images = store.findAll(Image); - - expect(events.length).toBe(2); - expect(images.length).toBe(1); - - store.reset(); - - const events2 = store.findAll(Event); - const images2 = store.findAll(Image); - - expect(events2).toHaveLength(0); - expect(images2).toHaveLength(0); - }); - - it('should handle circular relations', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - images: { - links: { - self: 'https://example.com/events/1/relationships/images', - }, - }, - }, - type: 'event', - }, - }); - - const event = store.findOne(Event, '1'); - - expect(event).not.toBeNull(); - - if (event) { - expect(event.name).toBe('Demo'); - expect(getModelRefLinks(event).images).toEqual({ - self: 'https://example.com/events/1/relationships/images', - }); - } - }); - - it('should handle serialization/deserialization with circular relations', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - relationships: { - images: { - links: { - self: 'https://example.com/events/1/relationships/images', - }, - }, - }, - type: 'event', - }, - }); - - const data = JSON.stringify(store.toJSON()); - - const newStore = new TestStore(JSON.parse(data)); - - const event = newStore.findOne(Event, '1'); - - expect(event).not.toBeNull(); - - if (event) { - expect(event.name).toBe('Demo'); - expect(getModelRefLinks(event).images).toEqual({ - self: 'https://example.com/events/1/relationships/images', - }); - } - }); - - it('should support custom models', () => { - const store = new TestStore(); - - store.sync({ - data: { - attributes: { - firstName: 'John', - lastName: 'Doe', - }, - id: '1', - type: 'user', - }, - }); - - const user = store.findOne(User, '1'); - - expect(user).not.toBeNull(); - - if (user) { - expect(user.fullName).toBe('John Doe'); - } - }); - - it('should support default properties', () => { - const store = new TestStore(); - - store.sync({ - data: [ - { - attributes: { - firstName: 'John', - lastName: 'Doe', - }, - id: '1', - type: 'user', - }, - { - attributes: { - filename: 'foo.jpg', - }, - id: '1', - type: 'photo', - }, - { - attributes: { - filename: 'bar.png', - selected: true, - }, - id: '2', - type: 'photo', - }, - { - attributes: { - filename: 'baz.png', - selected: false, - }, - id: '3', - type: 'photo', - }, - ], - }); - - const user = store.findOne(User, '1'); - - expect(user).not.toBeNull(); - - if (user) { - expect(user['selected']).toBeUndefined(); - } - - const photo1 = store.findOne(Photo, '1'); - - expect(photo1).not.toBeNull(); - if (photo1) { - expect(photo1.selected).toBe(false); - expect(photo1['foo']).not.toBe(false); - expect(photo1['foo']).toBeUndefined(); - } - - const photo2 = store.findOne(Photo, '2'); - - expect(photo2).not.toBeNull(); - if (photo2) { - expect(photo2.selected).toBe(true); - } - - const photo3 = store.findOne(Photo, '3'); - - expect(photo3).not.toBeNull(); - if (photo3) { - expect(photo3.selected).toBe(false); - } - - const photos = store.findAll(Photo); - const selected = photos.filter((photo) => photo.selected); - - expect(selected.length).toBe(1); - expect(selected[0].meta.id).toBe('2'); - }); - - it('should support generic records', () => { - const JsonapiCollection = jsonapi(Collection); - const store = new JsonapiCollection(); - const user = store.sync({ - data: { - attributes: { - name: 'John', - }, - id: '1', - relationships: { - self: { - data: { - id: '1', - type: 'user', - }, - }, - }, - type: 'user', - }, - }); - - if (user instanceof Model) { - expect(user['name']).toBe('John'); - expect(getModelId(user['self'])).toBe('1'); - expect(getModelType(user)).toBe('user'); - expect(store.findAll('user').length).toBe(1); - } - }); - - it('should serialize empty relationships', () => { - const event = new Event({ name: 'Foo' }); - - const data = modelToJsonApi(event); - - expect(data.attributes && 'id' in data.attributes).toBe(false); - expect(data.relationships).not.toBeUndefined(); - if (data.relationships) { - expect(data.relationships.images.data).toHaveLength(0); - expect(data.relationships.image.data).toBeNull(); - } - }); - - it('should serialize model id correctly', () => { - const event = new Event({ id: '1234', name: 'Foo' }); - - const data = modelToJsonApi(event); - - expect(data.attributes && 'id' in data.attributes).toBe(false); - if (data.relationships) { - expect(data.relationships.images.data).toHaveLength(0); - expect(data.relationships.image.data).toBeNull(); - } - }); -}); diff --git a/packages/datx-jsonapi/test/issues.test.ts b/packages/datx-jsonapi/test/issues.test.ts deleted file mode 100644 index b112e9c0d..000000000 --- a/packages/datx-jsonapi/test/issues.test.ts +++ /dev/null @@ -1,272 +0,0 @@ -import { Collection, Model, prop, Attribute } from '@datx/core'; -import { mobx } from '@datx/utils'; -import * as fetch from 'isomorphic-fetch'; -import { getModelMeta, getModelRefMeta, jsonapi, modelToJsonApi, config } from '../src'; - -import { setupNetwork, setRequest, confirmNetwork } from './utils/api'; -import { Event, LineItem, TestStore } from './utils/setup'; -import { clearAllCache } from '../src/cache'; - -describe('Issues', () => { - beforeEach(() => { - config.fetchReference = fetch; - config.baseUrl = 'https://example.com/'; - clearAllCache(); - setupNetwork(); - }); - - afterEach(confirmNetwork); - - it('should handle models without attributes (#78)', () => { - const store = new TestStore(); - const event = store.sync({ - data: { - id: '1', - type: 'event', - }, - }) as Event; - - expect(event.name).toBe(undefined); - expect(event.meta.id).toBe('1'); - }); - - describe('should handle server response with null reference (#47)', () => { - it('should remove the reference if null', async () => { - class ImageRecord extends jsonapi(Model) { - public static type = 'image'; - - @prop - public name!: string; - - @prop - public event!: Array; - } - - class EventRecord extends jsonapi(Model) { - public static type = 'event'; - - @prop.toOneOrMany(ImageRecord) - public image!: ImageRecord | Array; - } - - class ApiStore extends jsonapi(Collection) { - public static types = [ImageRecord, EventRecord]; - - @mobx.computed - get image(): Array { - return this.findAll(ImageRecord); - } - } - - const store = new ApiStore(); - - setRequest({ - name: 'issue-47a', - url: 'event/1', - }); - - const response = await store.fetch('event', '1'); - const event = response.data as EventRecord; - - expect(event.image).toBe(store.image[0]); - - setRequest({ - name: 'issue-47b', - url: 'event/1', - }); - await store.fetch('event', '1', { cacheOptions: { skipCache: true } }); - expect(event.image).toBe(null); - - setRequest({ - name: 'issue-47a', - url: 'event/1', - }); - await store.fetch('event', '1', { cacheOptions: { skipCache: true } }); - expect(event.image).toBe(store.image[0]); - - setRequest({ - name: 'issue-47d', - url: 'event/1', - }); - await store.fetch('event', '1', { cacheOptions: { skipCache: true } }); - expect(event.image['length']).toBe(1); - expect(event.image[0]).toBe(store.image[1]); - - setRequest({ - name: 'issue-47e', - url: 'event/1', - }); - await store.fetch('event', '1', { cacheOptions: { skipCache: true } }); - expect(event.image['length']).toBe(0); - }); - - it('should update the reference if not null', async () => { - class ImageRecord extends jsonapi(Model) { - public static type = 'image'; - - @prop - public name!: string; - - @prop - public event!: Array; - } - - class EventRecord extends jsonapi(Model) { - public static type = 'event'; - - @prop.toOneOrMany(ImageRecord) - public image!: ImageRecord | Array; - } - - class ApiStore extends jsonapi(Collection) { - public static types = [ImageRecord, EventRecord]; - - @mobx.computed - get image(): Array { - return this.findAll(ImageRecord); - } - } - - const store = new ApiStore(); - - setRequest({ - name: 'issue-47a', - url: 'event/1', - }); - const response = await store.fetch('event', '1'); - const event = response.data as EventRecord; - - expect(event.image).toBe(store.image[0]); - - setRequest({ - name: 'issue-47c', - url: 'event/1', - }); - await store.fetch('event', '1', { cacheOptions: { skipCache: true } }); - expect(event.image).toBe(store.image[1]); - - setRequest({ - name: 'issue-47a', - url: 'event/1', - }); - await store.fetch('event', '1', { cacheOptions: { skipCache: true } }); - expect(event.image).toBe(store.image[0]); - }); - }); - - it('should update the meta on model update', async () => { - const store = new TestStore(); - - setRequest({ - name: 'event-1d', - url: 'event/1', - }); - const response1 = await store.fetch('event', '1'); - const event1 = response1.data as Event; - const meta1 = getModelMeta(event1); - const refMeta1 = getModelRefMeta(event1); - - expect(meta1.name).toBe('event-1d'); - expect(refMeta1.images.foo).toBe('bar'); - - setRequest({ - name: 'event-1e', - url: 'event/1', - }); - - const response2 = await store.fetch('event', '1', { cacheOptions: { skipCache: true } }); - const event2 = response2.data as Event; - const meta2 = getModelMeta(event2); - const refMeta2 = getModelRefMeta(event2); - - expect(meta2.name).toBe('event-1e'); - expect(refMeta2.images.foo).toBe('baz'); - - expect(event1).toBe(event2); - }); - - it('should remove a reference when the model is destroyed', async () => { - const store = new TestStore(); - - setRequest({ - name: 'event-1f', - url: 'event/1', - }); - - const eventResp = await store.fetch(Event, '1'); - const event = eventResp.data as Event; - - expect(event.images).toHaveLength(2); - - const toRemove = event.images[0]; - - setRequest({ - method: 'DELETE', - responseFn: () => null, - status: 204, - url: 'image/1', - }); - - await toRemove.destroy(); - expect(event.images).toHaveLength(1); - }); - - it('should not exceed maximum call stack', async () => { - const store = new TestStore(); - - setRequest({ - method: 'POST', - name: 'issue-maximum-call-stack-exceeded-b', - url: 'line_items', - }); - - const lineItem1 = new LineItem({}, store); - - await lineItem1.save(); - - setRequest({ - method: 'POST', - name: 'issue-maximum-call-stack-exceeded-c', - url: 'line_items', - }); - - const lineItem2 = new LineItem({}, store); - - await lineItem2.save(); - }); - - it('should serialize the right relationships', () => { - class Foo extends jsonapi(Model) { - public static type = 'foo'; - - @Attribute({ toOne: 'bar' }) - public bar!: Bar; - - @Attribute({ toMany: 'bar', referenceProperty: 'foo' }) - public bars!: Array; - } - - class Bar extends jsonapi(Model) { - public static type = 'bar'; - - @Attribute({ toOne: 'foo' }) - public foo!: Foo; - } - - class Store extends jsonapi(Collection) { - public static types = [Foo, Bar]; - } - - const store = new Store(); - - const bar1 = store.add({}, Bar); - const foo1 = store.add({ bar: bar1 }, Foo); - bar1.foo = foo1; - - expect(foo1.bars).toEqual([bar1]); - - const jsonapiData = modelToJsonApi(foo1); - expect(jsonapiData.relationships?.bar).toEqual({ data: { id: bar1.meta.id, type: 'bar' } }); - expect(jsonapiData.relationships?.bars).toBeUndefined(); - }); -}); diff --git a/packages/datx-jsonapi/test/mobx.ts b/packages/datx-jsonapi/test/mobx.ts deleted file mode 100644 index d8c818f5f..000000000 --- a/packages/datx-jsonapi/test/mobx.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { mobx } from '@datx/utils'; - -let testMobx = mobx; - -Object.assign(mobx, { - configure() { - // noop - }, - isComputedProp(_val: any): boolean { - return false; - } -}); - -// @ts-ignore -mobx.configure = () => { /**/ }; - -if (!['-1', '0'].includes(process.env.MOBX_VERSION || '0')) { - testMobx = require('mobx'); - testMobx.makeObservable = testMobx.makeObservable || mobx.makeObservable; -} - -export default testMobx; diff --git a/packages/datx-jsonapi/test/mock/empty.json b/packages/datx-jsonapi/test/mock/empty.json deleted file mode 100644 index 3356af5ff..000000000 --- a/packages/datx-jsonapi/test/mock/empty.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "data": null -} diff --git a/packages/datx-jsonapi/test/mock/error.json b/packages/datx-jsonapi/test/mock/error.json deleted file mode 100644 index 829f31475..000000000 --- a/packages/datx-jsonapi/test/mock/error.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "errors": [ - { - "title": "Unknown error", - "status": "123" - } - ] -} diff --git a/packages/datx-jsonapi/test/mock/event-1.json b/packages/datx-jsonapi/test/mock/event-1.json deleted file mode 100644 index 1008d0857..000000000 --- a/packages/datx-jsonapi/test/mock/event-1.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "data": { - "id": "12345", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "links": { - "image": "https://example.com/images/1" - }, - "meta": { - "name": "event-1" - } - } -} diff --git a/packages/datx-jsonapi/test/mock/event-1b.json b/packages/datx-jsonapi/test/mock/event-1b.json deleted file mode 100644 index 2db6bbb71..000000000 --- a/packages/datx-jsonapi/test/mock/event-1b.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "data": { - "id": "1", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "links": { - "self": "https://example.com/event/1234" - } - } -} diff --git a/packages/datx-jsonapi/test/mock/event-1c.json b/packages/datx-jsonapi/test/mock/event-1c.json deleted file mode 100644 index 7c4dcb09b..000000000 --- a/packages/datx-jsonapi/test/mock/event-1c.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "data": { - "id": "110ec58a-a0f2-4ac4-8393-c866d813b8d1", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - } - } -} diff --git a/packages/datx-jsonapi/test/mock/event-1d.json b/packages/datx-jsonapi/test/mock/event-1d.json deleted file mode 100644 index 429b80658..000000000 --- a/packages/datx-jsonapi/test/mock/event-1d.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "data": { - "id": "12345", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "meta": { - "createdAt": "2017-03-19T16:00:00.000Z", - "name": "event-1d" - }, - "relationships": { - "images": { - "data": [ - { - "type": "image", - "id": "1" - }, - { - "type": "image", - "id": "2" - } - ], - "links": { - "self": "https://example.com/images/1" - }, - "meta": { - "foo": "bar" - } - } - } - } -} diff --git a/packages/datx-jsonapi/test/mock/event-1e.json b/packages/datx-jsonapi/test/mock/event-1e.json deleted file mode 100644 index 222ce0169..000000000 --- a/packages/datx-jsonapi/test/mock/event-1e.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "data": { - "id": "12345", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "meta": { - "createdAt": "2017-03-19T16:00:00.000Z", - "name": "event-1e" - }, - "relationships": { - "images": { - "data": [ - { - "type": "image", - "id": "1" - }, - { - "type": "image", - "id": "2" - } - ], - "links": { - "self": "https://example.com/images/1" - }, - "meta": { - "foo": "baz" - } - } - } - } -} diff --git a/packages/datx-jsonapi/test/mock/event-1f.json b/packages/datx-jsonapi/test/mock/event-1f.json deleted file mode 100644 index 2b903094e..000000000 --- a/packages/datx-jsonapi/test/mock/event-1f.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "data": { - "id": "12345", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "relationships": { - "images": { - "data": [ - { - "type": "image", - "id": "1" - }, - { - "type": "image", - "id": "2" - } - ] - } - } - }, - "included": [ - { - "id": "1", - "type": "image", - "attributes": { - "url": "https://example.com/1.jpg" - } - }, - { - "id": "2", - "type": "image", - "attributes": { - "url": "https://example.com/2.jpg" - } - } - ] -} diff --git a/packages/datx-jsonapi/test/mock/events-1.json b/packages/datx-jsonapi/test/mock/events-1.json deleted file mode 100644 index 0b0098276..000000000 --- a/packages/datx-jsonapi/test/mock/events-1.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "data": [ - { - "id": "1", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "meta": { - "createdAt": "2017-03-19T16:00:00.000Z" - }, - "relationships": { - "images": { - "data": [ - { - "type": "image", - "id": "1" - } - ], - "links": { - "self": "https://example.com/event/1/images" - }, - "meta": { - "foo": "bar" - } - } - } - }, - { - "id": "2", - "type": "event", - "attributes": { - "title": "Test 2", - "date": "2017-03-20" - } - }, - { - "id": "3", - "type": "event", - "attributes": { - "title": "Test 3", - "date": "2017-03-21" - } - }, - { - "id": "4", - "type": "event", - "attributes": { - "title": "Test 4", - "date": "2017-03-22" - } - } - ], - "links": { - "self": "https://example.com/event", - "next": { - "href": "https://example.com/event?page=2", - "meta": { - "foo": "bar" - } - } - } -} diff --git a/packages/datx-jsonapi/test/mock/events-2.json b/packages/datx-jsonapi/test/mock/events-2.json deleted file mode 100644 index 24e4ebd44..000000000 --- a/packages/datx-jsonapi/test/mock/events-2.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "data": [ - { - "id": "5", - "type": "event", - "attributes": { - "title": "Test 5", - "date": "2017-03-23" - } - }, - { - "id": "6", - "type": "event", - "attributes": { - "title": "Test 6", - "date": "2017-03-24" - } - } - ], - "links": { - "prev": "https://example.com/event" - } -} diff --git a/packages/datx-jsonapi/test/mock/image-1.json b/packages/datx-jsonapi/test/mock/image-1.json deleted file mode 100644 index ff0a53d36..000000000 --- a/packages/datx-jsonapi/test/mock/image-1.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "data": { - "id": "1", - "type": "image", - "attributes": { - "url": "https://example.com/1.jpg" - } - } -} diff --git a/packages/datx-jsonapi/test/mock/invalid.json b/packages/datx-jsonapi/test/mock/invalid.json deleted file mode 100644 index c14890c93..000000000 --- a/packages/datx-jsonapi/test/mock/invalid.json +++ /dev/null @@ -1 +0,0 @@ -

Not found

diff --git a/packages/datx-jsonapi/test/mock/issue-29.json b/packages/datx-jsonapi/test/mock/issue-29.json deleted file mode 100644 index 46ca9334e..000000000 --- a/packages/datx-jsonapi/test/mock/issue-29.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "jsonapi": { - "version": "1.0" - }, - "meta": { - "page": { - "offset": 0, - "limit": 50, - "total": 1 - } - }, - "links": { - "self": "https://localhost:5000/organizations?include=units" - }, - "data": [ - { - "type": "organizations", - "id": "ORG-A", - "attributes": { - "name": "Organization A" - }, - "links": { - "self": "https://localhost:5000/organizations/ORG-A" - }, - "relationships": { - "units": { - "meta": { - "relation": "foreign", - "belongsTo": "units", - "as": "organization", - "many": true, - "readOnly": true - }, - "links": { - "self": "https://localhost:5000/units/relationships/?organization=ORG-A", - "related": "https://localhost:5000/units/?filter[organization]=ORG-A" - }, - "data": [] - } - } - } - ], - "included": [ - { - "type": "units", - "id": "ORG-A-01", - "attributes": { - "name": "Unit 01" - }, - "links": { - "self": "https://localhost:5000/units/ORG-A-01" - }, - "relationships": { - "organization": { - "meta": { - "relation": "primary", - "readOnly": false - }, - "links": { - "self": "https://localhost:5000/units/ORG-A-01/relationships/organization", - "related": "https://localhost:5000/units/ORG-A-01/organization" - }, - "data": { - "type": "organizations", - "id": "ORG-A" - } - }, - "orders": { - "meta": { - "relation": "foreign", - "belongsTo": "orders", - "as": "unit", - "many": true, - "readOnly": true - }, - "links": { - "self": "https://localhost:5000/orders/relationships/?unit=ORG-A-01", - "related": "https://localhost:5000/orders/?filter[unit]=ORG-A-01" - } - } - } - }, - { - "type": "units", - "id": "ORG-A-02", - "attributes": { - "name": "Unit 02" - }, - "links": { - "self": "https://localhost:5000/units/ORG-A-02" - }, - "relationships": { - "organization": { - "meta": { - "relation": "primary", - "readOnly": false - }, - "links": { - "self": "https://localhost:5000/units/ORG-A-02/relationships/organization", - "related": "https://localhost:5000/units/ORG-A-02/organization" - }, - "data": { - "type": "organizations", - "id": "ORG-A" - } - }, - "orders": { - "meta": { - "relation": "foreign", - "belongsTo": "orders", - "as": "unit", - "many": true, - "readOnly": true - }, - "links": { - "self": "https://localhost:5000/orders/relationships/?unit=ORG-A-02", - "related": "https://localhost:5000/orders/?filter[unit]=ORG-A-02" - } - } - } - } - ] -} diff --git a/packages/datx-jsonapi/test/mock/issue-47a.json b/packages/datx-jsonapi/test/mock/issue-47a.json deleted file mode 100644 index c3ba214ae..000000000 --- a/packages/datx-jsonapi/test/mock/issue-47a.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "data": { - "id": "12345", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "meta": { - "createdAt": "2017-03-19T16:00:00.000Z" - }, - "relationships": { - "image": { - "data": { - "type": "image", - "id": "1" - } - } - } - }, - "included": [ - { - "id": "1", - "type": "image", - "attributes": { - "url": "https://example.com/1.jpg" - } - } - ] -} diff --git a/packages/datx-jsonapi/test/mock/issue-47b.json b/packages/datx-jsonapi/test/mock/issue-47b.json deleted file mode 100644 index 281a4171c..000000000 --- a/packages/datx-jsonapi/test/mock/issue-47b.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "data": { - "id": "12345", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "meta": { - "createdAt": "2017-03-19T16:00:00.000Z" - }, - "relationships": { - "image": { - "data": null - } - } - } -} diff --git a/packages/datx-jsonapi/test/mock/issue-47c.json b/packages/datx-jsonapi/test/mock/issue-47c.json deleted file mode 100644 index 5fe20bd67..000000000 --- a/packages/datx-jsonapi/test/mock/issue-47c.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "data": { - "id": "12345", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "meta": { - "createdAt": "2017-03-19T16:00:00.000Z" - }, - "relationships": { - "image": { - "data": { - "type": "image", - "id": "2" - } - } - } - }, - "included": [ - { - "id": "2", - "type": "image", - "attributes": { - "url": "https://example.com/3.jpg" - } - } - ] -} diff --git a/packages/datx-jsonapi/test/mock/issue-47d.json b/packages/datx-jsonapi/test/mock/issue-47d.json deleted file mode 100644 index bc45c79f3..000000000 --- a/packages/datx-jsonapi/test/mock/issue-47d.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "data": { - "id": "12345", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "meta": { - "createdAt": "2017-03-19T16:00:00.000Z" - }, - "relationships": { - "image": { - "data": [ - { - "type": "image", - "id": "3" - } - ] - } - } - }, - "included": [ - { - "id": "3", - "type": "image", - "attributes": { - "url": "https://example.com/4.jpg" - } - } - ] -} diff --git a/packages/datx-jsonapi/test/mock/issue-47e.json b/packages/datx-jsonapi/test/mock/issue-47e.json deleted file mode 100644 index 2473d9802..000000000 --- a/packages/datx-jsonapi/test/mock/issue-47e.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "data": { - "id": "12345", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "meta": { - "createdAt": "2017-03-19T16:00:00.000Z" - }, - "relationships": { - "image": { - "data": [] - } - } - }, - "included": [ - { - "id": "4", - "type": "image", - "attributes": { - "url": "https://example.com/5.jpg" - } - } - ] -} diff --git a/packages/datx-jsonapi/test/mock/issue-maximum-call-stack-exceeded-b.json b/packages/datx-jsonapi/test/mock/issue-maximum-call-stack-exceeded-b.json deleted file mode 100644 index de4ecdc44..000000000 --- a/packages/datx-jsonapi/test/mock/issue-maximum-call-stack-exceeded-b.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "data": { - "id": "606213", - "type": "line_items", - "attributes": {} - } -} diff --git a/packages/datx-jsonapi/test/mock/issue-maximum-call-stack-exceeded-c.json b/packages/datx-jsonapi/test/mock/issue-maximum-call-stack-exceeded-c.json deleted file mode 100644 index ae21be32d..000000000 --- a/packages/datx-jsonapi/test/mock/issue-maximum-call-stack-exceeded-c.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "data": { - "id": "606213", - "type": "line_items", - "attributes": {}, - "relationships": { - "multitrack_product_variant": { - "data": { - "type": "product_variants", - "id": "19074" - } - } - } - }, - "included": [ - { - "id": "19074", - "type": "product_variants", - "attributes": {} - } - ] -} diff --git a/packages/datx-jsonapi/test/mock/jsonapi-object.json b/packages/datx-jsonapi/test/mock/jsonapi-object.json deleted file mode 100644 index da768ad38..000000000 --- a/packages/datx-jsonapi/test/mock/jsonapi-object.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "jsonapi": { - "version": "1.0", - "meta": { - "foo": "bar" - } - }, - "data": [ - { - "id": "1", - "type": "event", - "attributes": { - "title": "Test 1", - "date": "2017-03-19" - }, - "meta": { - "createdAt": "2017-03-19T16:00:00.000Z" - } - }, - { - "id": "2", - "type": "event", - "attributes": { - "title": "Test 2", - "date": "2017-03-20" - } - }, - { - "id": "3", - "type": "event", - "attributes": { - "title": "Test 3", - "date": "2017-03-21" - } - }, - { - "id": "4", - "type": "event", - "attributes": { - "title": "Test 4", - "date": "2017-03-22" - } - } - ], - "links": { - "self": "https://example.com/event", - "next": "https://example.com/event?page=2" - } -} diff --git a/packages/datx-jsonapi/test/mock/queue-1.json b/packages/datx-jsonapi/test/mock/queue-1.json deleted file mode 100644 index a8710cef9..000000000 --- a/packages/datx-jsonapi/test/mock/queue-1.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "data": { - "type": "queue", - "id": "5234", - "attributes": { - "status": "Pending request, waiting other process" - }, - "links": { - "self": "https://example.com/events/queue-jobs/123" - } - } -} diff --git a/packages/datx-jsonapi/test/mock/session-1.json b/packages/datx-jsonapi/test/mock/session-1.json deleted file mode 100644 index 49325dc11..000000000 --- a/packages/datx-jsonapi/test/mock/session-1.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "data": { - "id": "12345", - "type": "sessions", - "attributes": { - "token": "test123" - }, - "links": { - "image": "https://example.com/user/1" - } - } -} diff --git a/packages/datx-jsonapi/test/network/basics.test.ts b/packages/datx-jsonapi/test/network/basics.test.ts deleted file mode 100644 index 3d10ff046..000000000 --- a/packages/datx-jsonapi/test/network/basics.test.ts +++ /dev/null @@ -1,444 +0,0 @@ -import { Collection, Model } from '@datx/core'; -import * as fetch from 'isomorphic-fetch'; - -import { - fetchModelLink, - fetchModelRefLink, - getModelLinks, - getModelMeta, - getModelRefMeta, - jsonapi, - modelToJsonApi, - config, -} from '../../src'; -import { clearAllCache } from '../../src/cache'; - -import { setRequest, setupNetwork, confirmNetwork } from '../utils/api'; -import { Event, Image, TestStore } from '../utils/setup'; - -const baseTransformRequest = config.transformRequest; -const baseTransformResponse = config.transformResponse; - -describe('Network basics', () => { - beforeEach(() => { - config.fetchReference = fetch; - config.baseUrl = 'https://example.com/'; - config.transformRequest = baseTransformRequest; - config.transformResponse = baseTransformResponse; - clearAllCache(); - setupNetwork(); - }); - - afterEach(confirmNetwork); - - it('should fetch the basic data', async () => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll(Event); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - if (events.data instanceof Array) { - const event = events.data[0]; - - expect(event['title']).toBe('Test 1'); - expect(getModelMeta(event).createdAt).toBe('2017-03-19T16:00:00.000Z'); - expect(event.meta.refs.images).toBeInstanceOf(Array); - if (event.meta.refs.images instanceof Array) { - expect(event.meta.refs.images.map((image) => image.id)).toContain('1'); - } - expect(event.meta.refs.images).toHaveLength(1); - expect(getModelRefMeta(event).images.foo).toBe('bar'); - - const data = modelToJsonApi(event); - - expect(data.id).toBe('1'); - expect(data.type).toBe('event'); - expect(data.attributes && data.attributes.title).toBe('Test 1'); - expect( - data.relationships && data.relationships.images.data && data.relationships.images.data[0], - ).toEqual({ type: 'image', id: '1' }); - expect(data.attributes && 'images' in data.attributes).toBe(false); - } - }); - - it('return null if no data in response', async () => { - setRequest({ - name: 'eempty', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll(Event); - - expect(events.data).toBeNull(); - }); - - it('should handle id changes correctly', async () => { - const store = new TestStore(); - const image1 = store.add({}, Image); - const image2 = new Image({}); - - setRequest({ - method: 'POST', - name: 'image-1', - url: 'image', - responseFn(_path: string, req: string) { - const request = JSON.parse(req); - - expect(request['data'].relationships.event.data).toBeNull(); - }, - }); - expect(parseInt(image1.id, 10)).toBeLessThan(0); // Temporary id, negative autoincrement - await image1.save(); // Load the image-1.json data - expect(image1.id).toBe('1'); - expect(image1.id).toBe(image1.meta.id); - - const images = store.findAll(Image); - - expect(images).toHaveLength(1); - - setRequest({ - method: 'POST', - name: 'image-1', - url: 'image', - }); - expect(parseInt(image2.id, 10)).toBeLessThan(0); // Temporary id, negative autoincrement - await image2.save(); // Load the image-1.json data - expect(image2.id).toBe('1'); - expect(image2.id).toBe(image2.meta.id); - }); - - it('should serialize existing relationships', async () => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll(Event); - - expect(events.data).toBeInstanceOf(Array); - if (events.data) { - const event = events.data[0]; - const data = modelToJsonApi(event); - - expect(data.attributes && 'id' in data.attributes).toBe(false); - expect(data.relationships).not.toBeUndefined(); - if (data.relationships) { - expect(data.relationships.images.data).toHaveLength(1); - expect(data.relationships.image.data).toBeNull(); - } - } - }); - - it('should support transformRequest hook', async () => { - setRequest({ - name: 'events-1', - url: 'event/all', - }); - let hasTransformRequestHookBeenCalled = false; - const store = new TestStore(); - config.transformRequest = (opts): any => { - expect(opts.collection).toBe(store); - hasTransformRequestHookBeenCalled = true; - return { ...opts, url: `${opts.url}/all` }; - }; - const events = await store.fetchAll('event'); - expect(events.data).toBeInstanceOf(Array); - expect(hasTransformRequestHookBeenCalled).toBe(true); - }); - - it('should support transformResponse hook', async () => { - setRequest({ - name: 'events-1', - url: 'event', - }); - let hasTransformResponseHookBeenCalled = false; - config.transformResponse = (opts): any => { - expect(opts.status).toBe(200); - hasTransformResponseHookBeenCalled = true; - return { ...opts, status: 201 }; - }; - const store = new TestStore(); - const events = await store.fetchAll('event'); - expect(events.data).toBeInstanceOf(Array); - expect(events.status).toBe(201); - expect(hasTransformResponseHookBeenCalled).toBe(true); - }); - - it('should save the jsonapi data', async () => { - setRequest({ - name: 'jsonapi-object', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event'); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - expect(events.jsonapi).toBeInstanceOf(Object); - if (events.jsonapi) { - expect(events.jsonapi.version).toBe('1.0'); - expect(events.jsonapi.meta && events.jsonapi.meta.foo).toBe('bar'); - } - }); - - it('should fetch one item', async () => { - setRequest({ - name: 'event-1b', - url: 'event/1', - }); - - const store = new TestStore(); - const events = await store.fetch(Event, '1'); - - const record = events.data; - - expect(record).toBeInstanceOf(Object); - if (record) { - expect(record['title']).toBe('Test 1'); - expect(getModelLinks(record)).toBeInstanceOf(Object); - expect(getModelLinks(record).self).toBe('https://example.com/event/1234'); - } - }); - - it('should support pagination', async () => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll(Event); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - if (events.data instanceof Array) { - expect(events.data instanceof Array && events.data[0]['title']).toBe('Test 1'); - expect(events.links).toBeInstanceOf(Object); - if (events.links instanceof Object && typeof events.links.next === 'object') { - expect(events.links.next.href).toBe('https://example.com/event?page=2'); - expect(events.links.next.meta.foo).toBe('bar'); - } - } - - setRequest({ - name: 'events-2', - query: { - page: 2, - }, - url: 'event', - }); - - const events2 = await events.next?.(); - - expect(events2).toBeInstanceOf(Object); - if (events2) { - expect(events2.data).toBeInstanceOf(Array); - expect(events2.data).toHaveLength(2); - expect(events2.data instanceof Array && events2.data[0]['title']).toBe('Test 5'); - - const events1 = await events2.prev?.(); - - expect(events1).toBeInstanceOf(Object); - if (events1) { - expect(events1.data).toBeInstanceOf(Array); - expect(events1.data).toHaveLength(4); - expect(events1.data instanceof Array && events1.data[0]['title']).toBe('Test 1'); - - const events1b = await events2.prev?.(); - - expect(events1.snapshot).toEqual(events.snapshot); - expect(events1.snapshot).toEqual(events1b?.snapshot); - } - } - }); - - it('should support record links', async () => { - setRequest({ - name: 'event-1', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event'); - const event = events.data; - - setRequest({ - name: 'image-1', - url: 'images/1', - }); - - if (event) { - const image = await fetchModelLink(event, 'image'); - - const imageData = image.data as Image; - - expect(imageData.meta.id).toBe('1'); - expect(imageData.meta.type).toBe('image'); - expect(imageData['url']).toBe('https://example.com/1.jpg'); - } - }); - - it('should recover if no link defined', async () => { - setRequest({ - name: 'event-1', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll(Event); - - const event = events.data; - - expect(event).toBeInstanceOf(Event); - if (event instanceof Event) { - let hasThrown = false; - - try { - const foobar = await fetchModelLink(event, 'foobar'); - - expect(foobar.data).toBeInstanceOf(Array); - expect(foobar.data).toHaveLength(0); - } catch (e) { - hasThrown = true; - expect(e.message).toBe("[datx exception] Link foobar doesn't exist on the model"); - } - expect(hasThrown).toBe(true); - } - }); - - it('should support relationship link fetch', async () => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll(Event); - const event = events.data && events.data instanceof Array && events.data[0]; - - setRequest({ - name: 'image-1', - url: 'event/1/images', - }); - - expect(event).toBeInstanceOf(Event); - if (event) { - const image = await fetchModelRefLink(event, 'images', 'self'); - const imageData = image.data as Image; - - expect(imageData.meta.id).toBe('1'); - expect(imageData.meta.type).toBe('image'); - expect(imageData['url']).toBe('https://example.com/1.jpg'); - } - }); - - it('should support endpoint', async () => { - class TestEvent extends jsonapi(Model) { - public static type = 'event'; - - public static endpoint = 'foo/event'; - } - - class TestCollection extends Collection { - public static types = [TestEvent]; - } - - const store = new (jsonapi(TestCollection))(); - - setRequest({ - name: 'event-1', - url: 'foo/event', - }); - - const response = await store.fetchAll(TestEvent); - const event = response.data as TestEvent; - - expect(event.meta.type).toBe('event'); - - const req = setRequest({ - method: 'PATCH', - name: 'event-1', - url: 'foo/event/12345', - }); - - await event.save(); - expect(req.isDone()).toBe(true); - }); - - it('should support functional endpoint', async () => { - class TestEvent extends jsonapi(Model) { - public static type = 'event'; - - public static endpoint = (baseUrl: string): string => { - return `${baseUrl}foo/event`; - }; - } - - class TestCollection extends Collection { - public static types = [TestEvent]; - } - - const store = new (jsonapi(TestCollection))(); - - setRequest({ - name: 'event-1', - url: 'foo/event', - }); - - const response = await store.fetchAll(TestEvent); - const event = response.data as TestEvent; - - expect(event.meta.type).toBe('event'); - }); - - it('should prepend config.baseUrl to the request url', async () => { - setRequest({ - name: 'event-1b', - url: 'event/1', - }); - - const store = new TestStore(); - const events = await store.request('event/1'); - - const record = events.data as Event; - - expect(record['title']).toBe('Test 1'); - }); - - it('should prepend config.baseUrl to the request url with special characters', async () => { - setRequest({ - name: 'event-1b', - url: 'event/1?test=hello%20world', - }); - - const store = new TestStore(); - const events = await store.request('event/1?test=hello%20world'); - - const record = events.data as Event; - - expect(record['title']).toBe('Test 1'); - }); - - it('should handle the request methods', async () => { - setRequest({ - method: 'PUT', - name: 'event-1b', - url: 'event/1', - }); - - const store = new TestStore(); - const events = await store.request('event/1', 'PUT'); - - const record = events.data as Event; - - expect(record['title']).toBe('Test 1'); - }); -}); diff --git a/packages/datx-jsonapi/test/network/caching.test.ts b/packages/datx-jsonapi/test/network/caching.test.ts deleted file mode 100644 index 3b5b6f281..000000000 --- a/packages/datx-jsonapi/test/network/caching.test.ts +++ /dev/null @@ -1,835 +0,0 @@ -import { mobx } from '@datx/utils'; - -import { setupNetwork, setRequest } from '../utils/api'; -import { Event, TestStore } from '../utils/setup'; -import { CachingStrategy, config } from '../../src'; -import { clearAllCache } from '../../src/cache'; - -function sleep(duration: number): Promise { - return new Promise((resolve) => setTimeout(resolve, duration)); -} - -describe('caching', () => { - beforeEach(() => { - config.baseUrl = 'https://example.com/'; - config.cache = CachingStrategy.CacheFirst; - clearAllCache(); - setupNetwork(); - }); - - describe('fetch caching', () => { - beforeEach(() => { - clearAllCache(); - setupNetwork(); - }); - - it('should cache fetch requests', async () => { - setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - const store = new TestStore(); - const events = await store.fetch(Event, '12345'); - const event = events.data as Event; - - expect(event).toBeInstanceOf(Object); - expect(event.meta.id).toBe('12345'); - - const events2 = await store.fetch(Event, '12345'); - - expect(events2.snapshot).toEqual(events.snapshot); - }); - - it('should clear fetch cache on removeAll', async () => { - setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - const store = new TestStore(); - const events = await store.fetch('event', '12345'); - const event = events.data as Event; - - expect(event.meta.id).toBe('12345'); - - store.removeAll(Event); - - const req2 = setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - const events2 = await store.fetch(Event, '12345'); - const event2 = events2.data as Event; - - expect(event2.meta.id).toBe('12345'); - expect(req2.isDone()).toBe(true); - }); - - it('should ignore fetch cache if skipCache is true', async () => { - setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - const store = new TestStore(); - const events = await store.fetch('event', '12345'); - const event = events.data as Event; - - expect(event).toBeInstanceOf(Object); - expect(event.meta.id).toBe('12345'); - - const req = setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - const events2 = await store.fetch(Event, '12345', { cacheOptions: { skipCache: true } }); - const event2 = events2.data as Event; - - expect(events2).not.toEqual(events); - expect(event2).toBeInstanceOf(Object); - expect(event2.meta.id).toBe('12345'); - expect(req.isDone()).toBe(true); - }); - - it('should not cache fetch if the response was an jsonapi error', async () => { - setRequest({ - name: 'error', - url: 'event/12345', - }); - - const store = new TestStore(); - let hasFailed = false; - - try { - await store.fetch(Event, '12345'); - } catch (resp) { - expect(resp.error).toBeInstanceOf(Array); - hasFailed = true; - } - expect(hasFailed).toBe(true); - - setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - const events2 = await store.fetch(Event, '12345'); - const event2 = events2.data as Event; - - expect(event2).toBeInstanceOf(Object); - expect(event2.meta.id).toBe('12345'); - }); - - it('should not cache fetch if the response was an http error', async () => { - setRequest({ - name: 'event-1', - status: 500, - url: 'event/12345', - }); - - const store = new TestStore(); - let hasFailed = false; - - try { - await store.fetch('event', '12345'); - } catch (e) { - hasFailed = true; - expect(e).toBeInstanceOf(Object); - } - expect(hasFailed).toBe(true); - - setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - const events2 = await store.fetch(Event, '12345'); - const event2 = events2.data as Event; - - expect(event2).toBeInstanceOf(Object); - expect(event2.meta.id).toBe('12345'); - }); - }); - - describe('fetchAll caching', () => { - beforeEach(() => { - clearAllCache(); - setupNetwork(); - }); - - it('should cache fetchAll requests', async () => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll(Event); - // TODO: Fix array typing - // @ts-ignore - const event = events.data as Array; - - expect(event).toBeInstanceOf(Array); - expect(event.length).toBe(4); - - const events2 = await store.fetchAll(Event); - - expect(events2.snapshot).toEqual(events.snapshot); - }); - - it('should clear fetchAll cache on removeAll', async () => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll(Event); - // TODO: Fix array typing - // @ts-ignore - const event = events.data as Array; - - expect(event).toBeInstanceOf(Array); - expect(event.length).toBe(4); - - store.removeAll(Event); - - const req2 = setRequest({ - name: 'events-1', - url: 'event', - }); - - const events2 = await store.fetchAll(Event); - - expect(events2.data).toHaveLength(4); - expect(req2.isDone()).toBe(true); - }); - - it('should ignore fetchAll cache if force is true', async () => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event'); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - - setRequest({ - name: 'events-1', - url: 'event', - }); - - const events2 = await store.fetchAll('event', { cacheOptions: { skipCache: true } }); - - expect(events2).not.toEqual(events); - expect(events2.data).toBeInstanceOf(Array); - expect(events2.data).toHaveLength(4); - }); - - it('should not cache fetchAll if the response was an jsonapi error', async () => { - setRequest({ - name: 'error', - url: 'event', - }); - - const store = new TestStore(); - let hasFailed = false; - - try { - await store.fetchAll('event'); - } catch (resp) { - hasFailed = true; - expect(resp.error).toBeInstanceOf(Array); - } - expect(hasFailed).toBe(true); - - setRequest({ - name: 'events-1', - url: 'event', - }); - - const events2 = await store.fetchAll('event'); - - expect(events2.data).toBeInstanceOf(Array); - expect(events2.data).toHaveLength(4); - }); - - it('should not cache fetchAll if the response was an http error', async () => { - setRequest({ - name: 'events-1', - status: 500, - url: 'event', - }); - - const store = new TestStore(); - let hasFailed = false; - - try { - await store.fetchAll('event'); - } catch (e) { - hasFailed = true; - expect(e).toBeInstanceOf(Object); - } - expect(hasFailed).toBe(true); - - setRequest({ - name: 'events-1', - url: 'event', - }); - - const events2 = await store.fetchAll('event'); - - expect(events2.data).toBeInstanceOf(Array); - expect(events2.data).toHaveLength(4); - }); - - it('should reset cache when resetting the store', async () => { - const store = new TestStore(); - - setRequest({ name: 'event-1', url: 'event' }); - await store.fetchAll('event'); - - store.reset(); - - const mockedApi = setRequest({ name: 'event-1', url: 'event' }); - - await store.fetchAll('event'); - - expect(mockedApi.isDone()).toBe(true); - }); - }); - - describe('caching strategies', () => { - describe('NetworkOnly', () => { - beforeEach(() => { - config.cache = CachingStrategy.NetworkOnly; - }); - - it('should fail if no network', async () => { - const store = new TestStore(); - - setRequest({ - url: 'image', - status: 0, - responseFn: () => '', - }); - - try { - await store.getMany('image'); - throw Error('The request should fail'); - } catch (response) { - expect(response?.error?.toString()).toBe('Error: Network not available'); - } - }); - - it('should use network in all calls', async () => { - const store = new TestStore(); - - setRequest({ - url: 'image', - responseFn: () => '{data: []}', - }); - - setRequest({ - url: 'image', - responseFn: () => '{data: []}', - }); - - await store.getMany('image'); - const response = await store.getMany('image'); - - expect(response.isSuccess).toBeTruthy(); - }); - }); - - describe('NetworkFirst', () => { - beforeEach(() => { - config.cache = CachingStrategy.NetworkFirst; - }); - - it('should use network if available', async () => { - const store = new TestStore(); - - setRequest({ - url: 'image', - responseFn: () => '{data: []}', - }); - - const response = await store.getMany('image'); - - expect(response.isSuccess).toBeTruthy(); - }); - - it('should fall back to cache if network not available', async () => { - const store = new TestStore(); - - setRequest({ - url: 'image', - responseFn: () => '{data: []}', - }); - - await store.getMany('image'); - const response = await store.getMany('image'); - - expect(response.isSuccess).toBeTruthy(); - }); - - it('should fail if network and cache not available', async () => { - const store = new TestStore(); - - setRequest({ - url: 'image', - status: 0, - responseFn: () => '', - }); - - try { - await store.getMany('image'); - throw Error('The request should fail'); - } catch (response) { - expect(response?.error?.toString()).toBe('Error: Network not available'); - } - }); - }); - - describe('StaleWhileRevalidate', () => { - beforeEach(() => { - config.cache = CachingStrategy.StaleWhileRevalidate; - }); - - it('should show new data if no cache', async () => { - const store = new TestStore(); - - setRequest({ - url: 'event/1', - name: 'event-1', - }); - - const response = await store.getOne(Event, '1'); - const event = response?.data; - - if (event instanceof Event) { - expect(event?.title).toBe('Test 1'); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should use cached data if available', async () => { - const store = new TestStore(); - - setRequest({ - url: 'event/1', - name: 'event-1', - }); - - setRequest({ - url: 'event/1', - status: 0, - responseFn: () => '', - }); - - await store.getOne(Event, '1'); - const response = await store.getOne(Event, '1'); - const event = response?.data; - - if (event instanceof Event) { - expect(event?.title).toBe('Test 1'); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should update the cache after call is done', async () => { - const store = new TestStore(); - - setRequest({ - url: 'event/1', - name: 'event-1', - }); - - setRequest({ - url: 'event/1', - name: 'event-1b', - }); - - setRequest({ - url: 'event/1', - status: 0, - responseFn: () => '', - }); - - const response1 = await store.getOne(Event, '1'); - - // Initial response - const event1 = response1?.data; - - if (event1 instanceof Event) { - expect(event1?.meta.id).toBe('12345'); - } else { - throw new Error('Response is wrong'); - } - - const response2 = await store.getOne(Event, '1'); - // Cached 1st response - const event2 = response2?.data; - - if (event2 instanceof Event) { - expect(event2?.meta.id).toBe('12345'); - } else { - throw new Error('Response is wrong'); - } - - await sleep(1); - const response3 = await store.getOne(Event, '1'); - - // Cached 2nd response - const event3 = response3?.data; - - if (event3 instanceof Event) { - expect(event3?.meta.id).toBe('1'); - } else { - throw new Error('Response is wrong'); - } - }); - }); - - describe('CacheOnly', () => { - beforeEach(() => { - config.cache = CachingStrategy.CacheOnly; - }); - - it('should fail if no cache', async () => { - const store = new TestStore(); - - try { - await store.getMany(Event); - throw Error('The request should fail'); - } catch (response) { - expect(response?.error?.toString()).toBe('Error: No cache for this request'); - } - }); - - it('should use cache in all calls', async () => { - const store = new TestStore(); - - setRequest({ - url: 'event/1', - name: 'event-1', - }); - - await store.getOne(Event, '1', { - cacheOptions: { cachingStrategy: CachingStrategy.NetworkFirst }, - }); - - await store.getOne(Event, '1'); - await store.getOne(Event, '1'); - await store.getOne(Event, '1'); - const response = await store.getOne(Event, '1'); - const event = response?.data; - - if (event instanceof Event) { - expect(event?.title).toBe('Test 1'); - } else { - throw new Error('Response is wrong'); - } - }); - }); - - describe('CacheFirst', () => { - beforeEach(() => { - config.cache = CachingStrategy.CacheFirst; - }); - - it('should use cache if available', async () => { - const store = new TestStore(); - - setRequest({ - url: 'event/1', - name: 'event-1', - }); - - await store.getOne(Event, '1', { - cacheOptions: { cachingStrategy: CachingStrategy.NetworkFirst }, - }); - - await store.getOne(Event, '1'); - await store.getOne(Event, '1'); - await store.getOne(Event, '1'); - const response = await store.getOne(Event, '1'); - const event = response?.data; - - if (event instanceof Event) { - expect(event?.title).toBe('Test 1'); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should fall back to network if cache not available', async () => { - const store = new TestStore(); - - setRequest({ - url: 'event/1', - name: 'event-1', - }); - - await store.getOne(Event, '1'); - - await store.getOne(Event, '1'); - await store.getOne(Event, '1'); - await store.getOne(Event, '1'); - const response = await store.getOne(Event, '1'); - const event = response?.data; - - if (event instanceof Event) { - expect(event?.title).toBe('Test 1'); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should fail if network and cache not available', async () => { - const store = new TestStore(); - - setRequest({ - url: 'image', - status: 0, - responseFn: () => '', - }); - - try { - await store.getMany('image'); - throw Error('The request should fail'); - } catch (response) { - expect(response?.error?.toString()).toBe('Error: Network not available'); - } - }); - - it('should not use a dirty model for caching', async () => { - const store = new TestStore(); - - setRequest({ - url: 'event/1', - name: 'event-1', - }); - - const eventResponse = await store.getOne(Event, '1', { - cacheOptions: { cachingStrategy: CachingStrategy.NetworkFirst }, - }); - - const originalEvent = eventResponse.data as Event; - - originalEvent.title = 'Modified title'; - - const response = await store.getOne(Event, '1'); - const event = response?.data; - - if (event instanceof Event) { - expect(event?.title).toBe('Test 1'); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should support cache serialization', async () => { - const store = new TestStore(); - - setRequest({ - url: 'event/1', - name: 'event-1', - }); - - await store.getOne(Event, '1', { - cacheOptions: { cachingStrategy: CachingStrategy.NetworkFirst }, - }); - - const storeJson = store.toJSON(); - - const rawStore = JSON.parse(JSON.stringify(storeJson)); - - clearAllCache(); - - try { - await store.getOne(Event, '1'); - throw Error('The request should fail'); - } catch (e) { - expect(e.error.message).toBe('Unexpected request: GET https://example.com/event/1'); - } - - const store2 = new TestStore(rawStore); - - const response1 = await store.getOne(Event, '1'); - const event1 = response1?.data; - - if (event1 instanceof Event) { - expect(event1?.title).toBe('Test 1'); - } else { - throw new Error('Response is wrong'); - } - - const response = await store2.getOne(Event, '1'); - const event = response?.data; - - if (event instanceof Event) { - expect(event?.title).toBe('Test 1'); - } else { - throw new Error('Response is wrong'); - } - }); - }); - - describe('StaleAndUpdate', () => { - beforeEach(() => { - config.cache = CachingStrategy.StaleAndUpdate; - }); - - it('should show new data if no cache', async () => { - const store = new TestStore(); - - setRequest({ - url: 'event/1', - name: 'event-1', - }); - - const response = await store.getOne(Event, '1'); - const event = response?.data; - - if (event instanceof Event) { - expect(event?.title).toBe('Test 1'); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should use cached data if available', async () => { - const store = new TestStore(); - - setRequest({ - url: 'event/1', - name: 'event-1', - }); - - await store.getOne(Event, '1'); - await store.getOne(Event, '1'); - await store.getOne(Event, '1'); - const response = await store.getOne(Event, '1'); - const event = response?.data; - - if (event instanceof Event) { - expect(event?.title).toBe('Test 1'); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should update the cache and response after call is done', async () => { - const store = new TestStore(); - - setRequest({ - url: 'event/1', - name: 'event-1', - }); - - const response = await store.getOne(Event, '1'); - - let autorunCounter1 = 0; - let autorunCounter2 = 0; - - mobx.autorun(() => { - const event = response?.data as Event; - - autorunCounter1++; - expect(event.id).toBe('12345'); - }); - - const req = setRequest({ - url: 'event/1', - name: 'event-1b', - }); - - const response2 = await store.getOne(Event, '1'); - let expectedId = '12345'; - - mobx.autorun(() => { - const event2 = response2?.data as Event; - - autorunCounter2++; - expect(event2.id).toBe(expectedId); - expectedId = '1'; - }); - - expect(autorunCounter1).toBe(1); - - await sleep(0); - - const event3 = response2?.data as Event; - - expect(req.isDone()).toBe(true); - expect(event3.id).toBe('1'); - expect(autorunCounter2).toBe(mobx.useRealMobX ? 2 : 1); - }); - }); - - it('should use maxAge', async () => { - config.cache = CachingStrategy.CacheFirst; - - const store = new TestStore(); - - setRequest({ - url: 'event/1', - name: 'event-1', - }); - - await store.getOne(Event, '1', { - cacheOptions: { cachingStrategy: CachingStrategy.NetworkFirst }, - }); - - await store.getOne(Event, '1'); - await store.getOne(Event, '1'); - await store.getOne(Event, '1'); - const response = await store.getOne(Event, '1'); - const event = response?.data; - - if (event instanceof Event) { - expect(event?.title).toBe('Test 1'); - } else { - throw new Error('Response is wrong'); - } - - setRequest({ - url: 'event/1', - status: 0, - responseFn: () => '', - }); - - await sleep(1); - - try { - await store.getOne(Event, '1', { cacheOptions: { maxAge: 0 } }); - throw Error('The request should fail'); - } catch (errorResponse) { - expect(errorResponse?.error?.toString()).toBe('Error: Network not available'); - } - }); - - it('should fail if invalid strategy', async () => { - // @ts-expect-error - config.cache = 'invalid-strategy'; - const store = new TestStore(); - - try { - await store.getMany(Event, { cacheOptions: { cachingStrategy: 123 } }); - throw Error('The request should fail'); - } catch (response) { - expect(response?.error?.toString()).toBe('Error: Invalid caching strategy'); - } - }); - }); -}); diff --git a/packages/datx-jsonapi/test/network/error-handling.test.ts b/packages/datx-jsonapi/test/network/error-handling.test.ts deleted file mode 100644 index b7356a3ca..000000000 --- a/packages/datx-jsonapi/test/network/error-handling.test.ts +++ /dev/null @@ -1,138 +0,0 @@ -import * as fetch from 'isomorphic-fetch'; - -import { setupNetwork, setRequest, confirmNetwork } from '../utils/api'; -import { Event, TestStore } from '../utils/setup'; -import { clearAllCache } from '../../src/cache'; -import { config } from '../../src/NetworkUtils'; - -describe('error handling', () => { - beforeEach(() => { - config.fetchReference = fetch; - config.baseUrl = 'https://example.com/'; - clearAllCache(); - setupNetwork(); - }); - - afterEach(confirmNetwork); - - it('should handle network failure', async () => { - const store = new TestStore(); - - setRequest({ - name: 'events-1', - status: 404, - url: 'event', - }); - - let hasFailed = false; - - try { - await store.fetchAll('event'); - } catch (response) { - hasFailed = true; - const err = response.error; - - expect(err).toBeInstanceOf(Object); - expect(err.status).toBe(404); - expect(err.message).toBe('Invalid HTTP status: 404'); - } - expect(hasFailed).toBe(true); - }); - - it('should handle invalid responses', async () => { - const store = new TestStore(); - - setRequest({ - name: 'invalid', - url: 'event', - }); - - let hasFailed = false; - - try { - await store.fetchAll('event'); - } catch (response) { - hasFailed = true; - expect(Object.keys(response.error)).toEqual(['name', 'message', 'type']); - } - expect(hasFailed).toBe(true); - }); - - it('should handle api error', async () => { - const store = new TestStore(); - - setRequest({ - name: 'error', - url: 'event', - }); - - let hasFailed = false; - - try { - await store.fetchAll('event'); - } catch (response) { - hasFailed = true; - expect(response.error[0]).toBeInstanceOf(Object); - expect(response.data).toBeNull(); - } - expect(hasFailed).toBe(true); - }); - - it('should handle api error on save', async () => { - const store = new TestStore(); - - const record = new Event({ - title: 'Test', - }); - - store.add(record); - - setRequest({ - method: 'POST', - name: 'error', - url: 'event', - }); - - let hasFailed = false; - - try { - await record.save(); - } catch (response) { - hasFailed = true; - expect(response.error[0]).toBeInstanceOf(Object); - } - expect(hasFailed).toBe(true); - }); - - it('should handle api error on remove', async () => { - const store = new TestStore(); - - setRequest({ - name: 'events-1', - url: 'event', - }); - - const response = await store.fetchAll('event'); - - setRequest({ - method: 'DELETE', - name: 'error', - url: 'event/1', - }); - - const event = response.data && (response.data[0] as Event); - - expect(event).toBeInstanceOf(Event); - if (event) { - let hasFailed = false; - - try { - await event.destroy(); - } catch (responseWithError) { - hasFailed = true; - expect(responseWithError.error[0]).toBeInstanceOf(Object); - } - expect(hasFailed).toBe(true); - } - }); -}); diff --git a/packages/datx-jsonapi/test/network/headers.test.ts b/packages/datx-jsonapi/test/network/headers.test.ts deleted file mode 100644 index 84f9403d6..000000000 --- a/packages/datx-jsonapi/test/network/headers.test.ts +++ /dev/null @@ -1,75 +0,0 @@ -import * as fetch from 'isomorphic-fetch'; - -import { setupNetwork, setRequest, confirmNetwork } from '../utils/api'; -import { TestStore } from '../utils/setup'; -import { config } from '../../src/NetworkUtils'; -import { clearAllCache } from '../../src/cache'; - -describe('headers', () => { - beforeEach(() => { - config.fetchReference = fetch; - config.baseUrl = 'https://example.com/'; - config.defaultFetchOptions = { - headers: { - 'X-Auth': '12345', - 'content-type': 'application/vnd.api+json', - }, - }; - clearAllCache(); - setupNetwork(); - }); - - afterEach(confirmNetwork); - - it('should send the default headers', async () => { - setRequest({ - name: 'events-1', - reqheaders: { - 'X-Auth': '12345', - }, - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event'); - - expect(events.data).toBeInstanceOf(Array); - }); - - it('should send custom headers', async () => { - setRequest({ - name: 'events-1', - reqheaders: { - 'X-Auth': '54321', - }, - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event', { - networkConfig: { - headers: { - 'X-Auth': '54321', - }, - }, - }); - - expect(events.data).toBeInstanceOf(Array); - }); - - it('should receive headers', async () => { - setRequest({ - headers: { - 'X-Auth': '98765', - }, - name: 'events-1', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event'); - - expect(events.data).toBeInstanceOf(Array); - expect(events.headers && events.headers.get('X-Auth')).toBe('98765'); - }); -}); diff --git a/packages/datx-jsonapi/test/network/params.test.ts b/packages/datx-jsonapi/test/network/params.test.ts deleted file mode 100644 index dff30362f..000000000 --- a/packages/datx-jsonapi/test/network/params.test.ts +++ /dev/null @@ -1,294 +0,0 @@ -import * as fetch from 'isomorphic-fetch'; - -import { setupNetwork, setRequest, confirmNetwork } from '../utils/api'; -import { TestStore, Event } from '../utils/setup'; -import { ParamArrayType } from '../../src'; -import { clearAllCache } from '../../src/cache'; -import { config } from '../../src/NetworkUtils'; - -describe('params', () => { - beforeEach(() => { - config.fetchReference = fetch; - config.baseUrl = 'https://example.com/'; - clearAllCache(); - setupNetwork(); - }); - - afterEach(confirmNetwork); - - it('should support basic filtering', async () => { - setRequest({ - name: 'events-1', - query: { 'filter[name]': 'foo' }, - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event', { queryParams: { filter: { name: 'foo' } } }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - - it('should support advanced filtering', async () => { - setRequest({ - name: 'events-1', - query: 'filter[name]=foo&filter[bar.id]=2', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event', { - queryParams: { filter: { name: 'foo', bar: { id: '2' } } }, - }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - - it('should support sorting', async () => { - setRequest({ - name: 'events-1', - query: { sort: 'name' }, - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event', { queryParams: { sort: 'name' } }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - - it('should support advanced sorting', async () => { - setRequest({ - name: 'events-1', - query: { sort: '-name,bar.id' }, - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event', { queryParams: { sort: ['-name', 'bar.id'] } }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - - it('should support inclusion of related resources', async () => { - setRequest({ - name: 'events-1', - query: { include: 'bar' }, - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event', { queryParams: { include: 'bar' } }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - - it('should support advanced inclusion of related resources', async () => { - setRequest({ - name: 'events-1', - query: { include: 'bar,bar.baz' }, - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event', { queryParams: { include: ['bar', 'bar.baz'] } }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - - it('should support inclusion of related resources on save', async () => { - setRequest({ - method: 'POST', - name: 'event-1', - query: { include: 'bar' }, - url: 'event', - }); - const store = new TestStore(); - const event = store.add({}, Event); - await event.save({ queryParams: { include: 'bar' } }); - }); - - it('should support sparse fields', async () => { - setRequest({ - name: 'events-1', - query: 'fields[foo]=name&fields[bar]=name', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event', { - queryParams: { fields: { foo: 'name', bar: 'name' } }, - }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - - it('should support advanced sparse fields', async () => { - setRequest({ - name: 'events-1', - query: 'fields[bar]=name&fields[bar.baz]=foo,bar&fields[foo]=name', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event', { - queryParams: { - fields: { - bar: 'name', - 'bar.baz': ['foo', 'bar'], - foo: 'name', - }, - }, - }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - - it('should support raw params', async () => { - setRequest({ - name: 'events-1', - query: 'sort=name&a=1&b=2&c=3', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event', { - queryParams: { - custom: ['a=1', 'b=2', { key: 'c', value: '3' }], - sort: 'name', - }, - }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - - describe('Param array types', () => { - afterEach(() => { - config.paramArrayType = ParamArrayType.CommaSeparated; - }); - - it('should work with coma separated values', async () => { - setRequest({ - name: 'events-1', - query: 'filter[a]=1,2&filter[b]=3', - url: 'event', - }); - - config.paramArrayType = ParamArrayType.CommaSeparated; - const store = new TestStore(); - const events = await store.fetchAll('event', { - queryParams: { filter: { a: ['1', '2'], b: '3' } }, - }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - - it('should work with multiple params', async () => { - setRequest({ - name: 'events-1', - query: 'filter[a]=1&filter[a]=2&filter[b]=3', - url: 'event', - }); - - config.paramArrayType = ParamArrayType.MultipleParams; - const store = new TestStore(); - const events = await store.fetchAll('event', { - queryParams: { filter: { a: ['1', '2'], b: '3' } }, - }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - - it('should work with param array', async () => { - setRequest({ - name: 'events-1', - query: 'filter[a][]=1&filter[a][]=2&filter[b]=3', - url: 'event', - }); - - config.paramArrayType = ParamArrayType.ParamArray; - const store = new TestStore(); - const events = await store.fetchAll('event', { - queryParams: { filter: { a: ['1', '2'], b: '3' } }, - }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - }); - - it('should support request params', async () => { - setRequest({ - name: 'events-1', - query: 'filter[name]=foo', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.request('event', 'GET', undefined, { - queryParams: { filter: { name: 'foo' } }, - }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - - it('should support request params with other params', async () => { - setRequest({ - name: 'events-1', - query: 'foo=1&filter[name]=foo', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.request('event?foo=1', 'GET', undefined, { - queryParams: { filter: { name: 'foo' } }, - }); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - }); - - describe('query string encoding', () => { - afterEach(() => { - config.encodeQueryString = false; - }); - - it("shouldn't encode params by default", async () => { - setRequest({ - name: 'events-1', - query: false, - url: 'event?filter[name]=ć', - }); - - const store = new TestStore(); - - await store.request('event', 'GET', undefined, { queryParams: { filter: { name: 'ć' } } }); - }); - - it('should encode params when enabled', async () => { - config.encodeQueryString = true; - - setRequest({ - name: 'events-1', - query: false, - url: 'event?filter%5Bname%5D=%C4%87%3D', - }); - - const store = new TestStore(); - - await store.request('event', 'GET', undefined, { queryParams: { filter: { name: 'ć=' } } }); - }); - }); -}); diff --git a/packages/datx-jsonapi/test/network/pipeline.test.ts b/packages/datx-jsonapi/test/network/pipeline.test.ts deleted file mode 100644 index 6bee68d3f..000000000 --- a/packages/datx-jsonapi/test/network/pipeline.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -import * as fs from 'fs'; -import { MockBaseRequest } from '../utils/MockBaseRequest'; -import { filter, sort, Direction, page, include, sparse } from '../../src/operators'; -import { setUrl, collection } from '../../src'; -import { TestStore, Event, Image } from '../utils/setup'; - -describe('pipeline', () => { - it('should work for a basic filter', async () => { - const request = new MockBaseRequest('foobar').pipe(setUrl('/test'), filter({ test: '123' })); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test?filter[test]=123'); - }); - - it('should work for a complex filter', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test'), - filter({ test: '123', foo: { bar: '321', baz: '456' } }), - ); - - await request.fetch(); - expect(request['lastUrl']).toBe( - 'foobar/test?filter[test]=123&filter[foo][bar]=321&filter[foo][baz]=456', - ); - }); - - it('should work for sorting', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test'), - sort('foo', ['bar', Direction.Asc], ['baz', Direction.Desc]), - ); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test?sort=foo,bar,-baz'); - }); - - it('should work for pagination', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test'), - page({ size: '123', offset: '0' }), - ); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test?page[size]=123&page[offset]=0'); - }); - - it('should work for include', async () => { - const request = new MockBaseRequest('foobar').pipe(setUrl('/test'), include('foo', 'bar.baz')); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test?include=foo,bar.baz'); - }); - - it('should work for sparse fields', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test'), - sparse({ foo: ['a', 'b'], bar: ['baz'] }), - ); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test?fields[foo]=a,b&fields[bar]=baz'); - }); - - it('should parse data correctly', async () => { - const store = new TestStore(); - - const request = new MockBaseRequest('foobar').pipe( - collection(store), - setUrl('/events/12345'), - ); - const mockEventWithRelationships = JSON.parse( - fs.readFileSync('./test/mock/event-1f.json', 'utf-8'), - ); - request['resetMock']({ status: 200, json: async () => mockEventWithRelationships }); - - const response = await request.fetch(); - - expect(response.data).toBeInstanceOf(Event); - expect(response.data?.images).toHaveLength(2); - expect(response.data?.images[0]).toBeInstanceOf(Image); - }); -}); diff --git a/packages/datx-jsonapi/test/network/updates.test.ts b/packages/datx-jsonapi/test/network/updates.test.ts deleted file mode 100644 index 484dc8026..000000000 --- a/packages/datx-jsonapi/test/network/updates.test.ts +++ /dev/null @@ -1,656 +0,0 @@ -import { - Collection, - getModelId, - getModelType, - initModelRef, - Model, - prop, - ReferenceType, -} from '@datx/core'; -import * as fetch from 'isomorphic-fetch'; - -import { fetchModelLink, jsonapi, modelToJsonApi, saveRelationship, config } from '../../src'; -import { clearAllCache } from '../../src/cache'; - -import { setupNetwork, setRequest, confirmNetwork } from '../utils/api'; -import { Event, TestStore } from '../utils/setup'; - -describe('updates', () => { - beforeEach(() => { - config.fetchReference = fetch; - config.baseUrl = 'https://example.com/'; - clearAllCache(); - setupNetwork(); - }); - - afterEach(confirmNetwork); - - describe('adding record', () => { - it('should add a record', async () => { - const store = new TestStore(); - const record = new Event({ - title: 'Example title', - }); - - store.add(record); - - setRequest({ - data: JSON.stringify({ - data: modelToJsonApi(record), - }), - method: 'POST', - name: 'event-1', - url: 'event', - }); - - const data = modelToJsonApi(record); - - expect(record['title']).toBe('Example title'); - expect(data.id).toBeUndefined(); - expect(data.type).toBe('event'); - expect(data.attributes && data.attributes.id).toBeUndefined(); - expect(data.attributes && data.attributes.type).toBeUndefined(); - - const updated = await record.save(); - - expect(updated['title']).toBe('Test 1'); - expect(updated).toBe(record); - }); - - it('should add a record if not in store', async () => { - const record = new Event({ - title: 'Example title', - }); - - setRequest({ - data: JSON.stringify({ - data: modelToJsonApi(record), - }), - method: 'POST', - name: 'event-1', - url: 'event', - }); - - const data = modelToJsonApi(record); - - expect(record['title']).toBe('Example title'); - expect(data.id).toBeUndefined(); - expect(data.type).toBe('event'); - expect(data.attributes && data.attributes.id).toBeUndefined(); - expect(data.attributes && data.attributes.type).toBeUndefined(); - - const updated = await record.save(); - - expect(updated['title']).toBe('Test 1'); - expect(updated).toBe(record); - }); - - it('should add a referenced record', async () => { - class Foo extends jsonapi(Event) { - public static type = 'event'; - - @prop.identifier - public id!: string; - } - - class Bar extends jsonapi(Model) { - public static type = 'bar'; - - @prop.toOne(Foo) - public foo!: Foo; - } - - class Test extends Collection { - public static types = [Foo, Bar]; - } - - const store = new (jsonapi(Test))(); - const foo = new Foo({ - title: 'Example title', - }); - - store.add(foo); - const bar = store.add({ foo }, Bar); - const baz = store.add({}, 'baz'); - - expect(bar.foo).toBe(foo); - const barRef = bar.foo; - - if (barRef && 'id' in barRef) { - expect(barRef.id).toBe(foo.meta.id); - } else { - expect(true).toBe(false); - } - - initModelRef(baz, 'foo', { model: Foo.type, type: ReferenceType.TO_ONE }, foo); - expect(baz['foo']).toBe(foo); - - const bazRef = baz['foo']; - - if (bazRef && 'id' in bazRef) { - expect(bazRef.id).toBe(foo.meta.id); - } else { - expect(true).toBe(false); - } - - setRequest({ - data: JSON.stringify({ - data: modelToJsonApi(foo), - }), - method: 'POST', - name: 'event-1', - url: 'event', - }); - - const data = modelToJsonApi(foo); - - expect(foo['title']).toBe('Example title'); - expect(data.id).toBeUndefined(); - expect(data.type).toBe('event'); - expect(data.attributes && data.attributes.id).toBeUndefined(); - expect(data.attributes && data.attributes.type).toBeUndefined(); - - const updated = await foo.save(); - - expect(updated['title']).toBe('Test 1'); - expect(updated).toBe(foo); - expect(foo.meta.id).toBe('12345'); - - const barRef2 = bar.foo; - - if (barRef2 && 'id' in barRef2) { - expect(barRef2.id).toBe(foo.meta.id); - } else { - expect(true).toBe(false); - } - expect(bar.foo).toBe(foo); - - expect(baz['foo']).toBe(foo); - const bazRef2 = baz['foo']; - - if (bazRef2 && 'id' in bazRef2) { - expect(bazRef2.id).toBe(foo.meta.id); - } else { - expect(true).toBe(false); - } - }); - - it('should add a record with queue (202)', async () => { - const store = new TestStore(); - const record = new Event({ - title: 'Example title', - }); - - store.add(record); - - setRequest({ - data: JSON.stringify({ - data: modelToJsonApi(record), - }), - method: 'POST', - name: 'queue-1', - status: 202, - url: 'event', - }); - - const data = modelToJsonApi(record); - - expect(record['title']).toBe('Example title'); - expect(data.id).toBeUndefined(); - expect(data.type).toBe('event'); - expect(data.attributes && data.attributes.id).toBeUndefined(); - expect(data.attributes && data.attributes.type).toBeUndefined(); - - const queue = await record.save(); - - expect(getModelType(queue)).toBe('queue'); - - setRequest({ - name: 'queue-1', - url: 'events/queue-jobs/123', - }); - - const queue2 = await fetchModelLink(queue, 'self', { cacheOptions: { skipCache: true } }); - const queueRecord = queue2.data; - - expect(queueRecord).not.toBeNull(); - if (queueRecord) { - expect(getModelType(queueRecord)).toBe('queue'); - } - - setRequest({ - name: 'event-1', - url: 'events/queue-jobs/123', - }); - - const updatedRes = await fetchModelLink(queue, 'self', { cacheOptions: { skipCache: true } }); - const updated = updatedRes.data as Event; - - expect(updated.meta.type).toBe('event'); - - expect(updated['title']).toBe('Test 1'); - expect(updated.meta.id).toBe('12345'); - expect(updated).toBe(record); - }); - - it('should add a record with queue (202) if not in store', async () => { - const record = new Event({ - title: 'Example title', - }); - // const store = new TestStore(); - // store.add(record); - - setRequest({ - data: JSON.stringify({ - data: modelToJsonApi(record), - }), - method: 'POST', - name: 'queue-1', - status: 202, - url: 'event', - }); - - const data = modelToJsonApi(record); - - expect(record['title']).toBe('Example title'); - expect(data.id).toBeUndefined(); - expect(data.type).toBe('event'); - expect(data.attributes && data.attributes.id).toBeUndefined(); - expect(data.attributes && data.attributes.type).toBeUndefined(); - - const queue = await record.save(); - - expect(getModelType(queue)).toBe('queue'); - - setRequest({ - name: 'queue-1', - url: 'events/queue-jobs/123', - }); - - const queue2 = await fetchModelLink(queue, 'self', { cacheOptions: { skipCache: true } }); - const queueRecord = queue2.data; - - expect(queueRecord).not.toBeNull(); - if (queueRecord) { - expect(getModelType(queueRecord)).toBe('queue'); - } - - setRequest({ - name: 'event-1', - url: 'events/queue-jobs/123', - }); - - const updatedRes = await fetchModelLink(queue, 'self', { cacheOptions: { skipCache: true } }); - const updated = updatedRes.data; - - expect(updated).not.toBeNull(); - if (updated) { - expect(getModelType(updated)).toBe('event'); - - expect(updated['title']).toBe('Test 1'); - expect(getModelId(updated)).toBe('12345'); - expect(updated).toBe(record); - } - }); - - it('should add a record with response 204', async () => { - const store = new TestStore(); - const record = new Event({ - __meta__: { id: 123 }, - title: 'Example title', - }); - - store.add(record); - - setRequest({ - data: JSON.stringify({ - data: modelToJsonApi(record), - }), - method: 'POST', - responseFn: () => null, - status: 204, - url: 'event', - }); - - const data = modelToJsonApi(record); - - expect(record['title']).toBe('Example title'); - expect(data.type).toBe('event'); - expect(data.attributes && data.attributes.id).toBeUndefined(); - expect(data.attributes && data.attributes.type).toBeUndefined(); - - const updated = await record.save(); - - expect(updated['title']).toBe('Example title'); - expect(updated).toBe(record); - }); - - it('should add a record with response 204 if not in store', async () => { - const record = new Event({ - __meta__: { id: 123 }, - title: 'Example title', - }); - - setRequest({ - data: JSON.stringify({ - data: modelToJsonApi(record), - }), - method: 'POST', - responseFn: () => null, - status: 204, - url: 'event', - }); - - const data = modelToJsonApi(record); - - expect(record['title']).toBe('Example title'); - expect(data.type).toBe('event'); - expect(data.attributes && data.attributes.id).toBeUndefined(); - expect(data.attributes && data.attributes.type).toBeUndefined(); - - const updated = await record.save(); - - expect(updated['title']).toBe('Example title'); - expect(updated).toBe(record); - }); - - it('should add a record with client-generated id', async () => { - const store = new TestStore(); - - class GenRecord extends Event { - public static useAutogeneratedIds = true; - - public static getAutoId = (): string => '110ec58a-a0f2-4ac4-8393-c866d813b8d1'; - } - - const record = new GenRecord({ - title: 'Example title', - }); - - store.add(record); - - setRequest({ - data: JSON.stringify({ - data: modelToJsonApi(record), - }), - method: 'POST', - name: 'event-1c', - url: 'event', - }); - - const data = modelToJsonApi(record); - - expect(record['title']).toBe('Example title'); - expect(typeof data.id).toBe('string'); - expect(data.id).toHaveLength(36); - expect(data.type).toBe('event'); - expect(data.attributes && data.attributes.id).toBeUndefined(); - expect(data.attributes && data.attributes.type).toBeUndefined(); - - const updated = await record.save(); - - expect(updated['title']).toBe('Test 1'); - expect(updated).toBe(record); - }); - - it('should add a record with client-generated id if not in store', async () => { - class GenRecord extends Event { - public static useAutogeneratedIds = true; - - public static getAutoId = (): string => '110ec58a-a0f2-4ac4-8393-c866d813b8d1'; - } - - const record = new GenRecord({ - title: 'Example title', - }); - - setRequest({ - data: JSON.stringify({ - data: modelToJsonApi(record), - }), - method: 'POST', - name: 'event-1c', - url: 'event', - }); - - const data = modelToJsonApi(record); - - expect(record['title']).toBe('Example title'); - expect(typeof data.id).toBe('string'); - expect(data.id).toHaveLength(36); - expect(data.type).toBe('event'); - expect(data.attributes && data.attributes.id).toBeUndefined(); - expect(data.attributes && data.attributes.type).toBeUndefined(); - - const updated = await record.save(); - - expect(updated['title']).toBe('Test 1'); - expect(updated).toBe(record); - }); - }); - - describe('updating record', () => { - it('should update a record', async () => { - setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - const store = new TestStore(); - const events = await store.fetch('event', '12345'); - - const record = events.data; - - expect(record).toBeInstanceOf(Event); - if (record instanceof Event) { - setRequest({ - data: JSON.stringify({ - data: { - attributes: { - title: 'Updated title', - }, - id: '12345', - type: 'event', - relationships: { - organizers: { data: [] }, - images: { data: [] }, - image: { data: null }, - }, - }, - }), - method: 'PATCH', - name: 'event-1b', - url: 'event/12345', - }); - - record.title = 'Updated title'; - expect(record.meta.dirty.title).toBe(true); - - const updated = await record.save(); - - expect(record.meta.dirty.title).toBe(false); - expect(updated['title']).toBe('Test 1'); - expect(updated).toBe(record); - } - }); - - it('should support updating relationships', async () => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - const store = new TestStore(); - const events = await store.fetchAll('event'); - const event = events.data && (events.data[0] as Event); - - expect(event).toBeInstanceOf(Event); - if (event) { - event.images = [ - // @ts-ignore - { type: 'image', id: '1' }, - // @ts-ignore - { type: 'image', id: '2' }, - ]; - - store.sync({ - data: [ - { id: '1', type: 'image' }, - { id: '2', type: 'image' }, - ], - }); - - setRequest({ - data: { - data: [ - { - id: '1', - type: 'image', - }, - { - id: '2', - type: 'image', - }, - ], - }, - method: 'PATCH', - name: 'event-1d', - url: 'event/1/images', - }); - - const event2 = await saveRelationship(event, 'images'); - - expect(event2.meta.id).toBe('12345'); - expect(event2.meta.type).toBe('event'); - const { images } = event2; - - expect(images).toHaveLength(2); - if (images instanceof Array) { - expect(images.map((image) => image.id)).toContain('1'); - expect(images.map((image) => image.id)).toContain('2'); - } - expect(event).toBe(event2); - } - }); - }); - - describe('removing record', () => { - it('should remove a record', async () => { - setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - const store = new TestStore(); - - store.add({ id: '1' }, Event); - const events = await store.fetch('event', '12345'); - - store.add({ id: '2' }, Event); - - const record = events.data as Event; - - setRequest({ - method: 'DELETE', - name: 'event-1', - url: 'event/12345', - }); - - expect(store.findAll('event').length).toBe(3); - await record.destroy(); - expect(store.findAll('event').length).toBe(2); - const remainingEvents = store.findAll(Event); - - expect(remainingEvents[0] && remainingEvents[0].meta.id).toBe('1'); - expect(remainingEvents[1] && remainingEvents[1].meta.id).toBe('2'); - }); - - it('should remove a record if not in store', async () => { - setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - const store = new TestStore(); - const events = await store.fetch(Event, '12345'); - - const record = events.data as Event; - - expect(store.findAll(Event)).toHaveLength(1); - store.removeOne(record.meta.type, record.meta.id); - expect(store.findAll(Event)).toHaveLength(0); - - setRequest({ - method: 'DELETE', - name: 'event-1', - url: 'event/12345', - responseFn: () => null, - status: 204, - }); - - await record.destroy(); - expect(store.findAll(Event)).toHaveLength(0); - }); - - it('should remove a local record without api calls', async () => { - const store = new TestStore(); - const record = new Event({ - title: 'Example title', - }); - - store.add(record); - - expect(record['title']).toBe('Example title'); - - expect(store.findAll('event').length).toBe(1); - await record.destroy(); - expect(store.findAll('event').length).toBe(0); - }); - - it('should remove a record from the store', async () => { - setRequest({ - name: 'event-1', - url: 'event/12345', - }); - - const store = new TestStore(); - const events = await store.fetch('event', '12345'); - - const record = events.data as Event; - - const req = setRequest({ - method: 'DELETE', - name: 'event-1', - url: 'event/12345', - }); - - expect(store.findAll('event').length).toBe(1); - await store.removeOne(record.meta.type as string, record.meta.id as string, true); - expect(store.findAll('event').length).toBe(0); - expect(req.isDone()).toBe(true); - }); - - it('should remove a local record from store without api calls', async () => { - const store = new TestStore(); - const record = new Event({ - title: 'Example title', - }); - - store.add(record); - - expect(record['title']).toBe('Example title'); - - expect(store.findAll('event').length).toBe(1); - await store.removeOne(record.meta.type as string, record.meta.id as string, true); - expect(store.findAll('event').length).toBe(0); - }); - - it('should silently remove an unexisting record', async () => { - const store = new TestStore(); - - expect(store.findAll('event').length).toBe(0); - await store.removeOne('event', '1', true); - expect(store.findAll('event').length).toBe(0); - }); - }); -}); diff --git a/packages/datx-jsonapi/test/setup.ts b/packages/datx-jsonapi/test/setup.ts deleted file mode 100644 index 59270981f..000000000 --- a/packages/datx-jsonapi/test/setup.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { mobx } from '@datx/utils'; - -import mobxInstance from './mobx'; - -if (parseInt(process.env.MOBX_VERSION || '0', 10) < 0) { - mobx.useMobx(false); -} - -if ('configure' in mobxInstance) { - // @ts-ignores - mobxInstance.configure({ - enforceActions: 'observed', - // computedRequiresReaction: true, - }); -} diff --git a/packages/datx-jsonapi/test/utils/MockBaseRequest.ts b/packages/datx-jsonapi/test/utils/MockBaseRequest.ts deleted file mode 100644 index d83262062..000000000 --- a/packages/datx-jsonapi/test/utils/MockBaseRequest.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { fetchReference, BaseJsonapiRequest } from '../../src'; - -export class MockBaseRequest extends BaseJsonapiRequest { - constructor(baseUrl: string) { - super(baseUrl); - this.resetMock({ - status: 200, - json: async () => ({}), - }); - } - - protected resetMock(mockResponse: any, success = true): void { - fetchReference( - success - ? jest.fn().mockResolvedValue(mockResponse) - : jest.fn().mockRejectedValue(mockResponse), - )(this); - } - - private get lastRequest(): [ - string, - { method: string; body: string | FormData | undefined; headers: Record }, - ] { - const mockFetch = (this['_config'].fetchReference as jest.Mock).mock.calls; - return mockFetch[mockFetch.length - 1]; - } - - protected get lastMethod(): string { - return this.lastRequest[1].method; - } - - protected get lastUrl(): string { - return this.lastRequest[0]; - } - - protected get lastBody(): string | FormData | undefined { - return this.lastRequest[1].body; - } - - protected get lastHeaders(): Record { - return this.lastRequest[1].headers; - } -} diff --git a/packages/datx-jsonapi/test/utils/api.ts b/packages/datx-jsonapi/test/utils/api.ts deleted file mode 100644 index 95c39658f..000000000 --- a/packages/datx-jsonapi/test/utils/api.ts +++ /dev/null @@ -1,167 +0,0 @@ -import * as fs from 'fs'; -import { isFunction } from 'lodash'; -import * as path from 'path'; -import * as nodeUrl from 'url'; -import { v1 } from 'uuid'; - -import { config } from '../../src/NetworkUtils'; - -function getMockStream(name: string): string { - const testPath = path.join(__dirname, `../mock/${name}.json`); - - return fs.existsSync(testPath) ? fs.readFileSync(testPath, 'utf-8') : 'null'; -} - -interface IRequestOptions { - id: string; - name?: string; - url: string; - method: string; - data?: any; - headers?: Record; - reqheaders?: Record; - status: number; - responseFn?(url: RequestInfo, body?: string): void; -} - -export interface IMockArgs extends Partial { - hostname?: string; - query?: boolean | string | (() => boolean) | object; -} - -const expectedRequests: Array = []; - -const executedRequests: Array<{ - url: RequestInfo; - options: RequestInit | undefined; - id: string; -}> = []; - -function fetchInterceptor(url: RequestInfo, options?: RequestInit | undefined): Promise { - const request = expectedRequests.find( - (req) => req.url === url && req.method === (options?.method || 'GET') && !req.done, - ); - - if (!request) { - throw new Error(`Unexpected request: ${options?.method || 'GET'} ${url}`); - } - - executedRequests.push({ url, options, id: request.id }); - request.done = true; - - if (request.reqheaders) { - expect(options?.headers).toMatchObject(request.reqheaders); - } - - if (request.data) { - const expected = typeof request.data === 'string' ? request.data : JSON.stringify(request.data); - const received = - options && options.body && typeof options.body === 'string' - ? options?.body - : JSON.stringify(options?.body); - - expect(received).toBe(expected); - } - - return new Promise((resolve, reject) => { - const data = getMockStream(request.name || request.url); - - try { - const parsed = JSON.parse(data); - - resolve({ - ok: request.status >= 200 && request.status < 300, - status: request.status, - headers: new Headers(request.headers), - json() { - let response; - - if (request.responseFn) { - response = request.responseFn(url, options?.body as string); - } - return Promise.resolve(response === undefined ? parsed : response); - }, - } as any); - } catch (e) { - reject({ - name: 'JSON.parse', - message: 'JSON parse failed', - type: 'error', - }); - } - }); -} - -export function setupNetwork(): void { - expectedRequests.length = 0; - executedRequests.length = 0; - config.fetchReference = fetchInterceptor; -} - -export function confirmNetwork(): void { - expect(expectedRequests).toHaveLength(executedRequests.length); -} - -/** - * Prepare a mock API call - * - * @param {object} param - Param object - * @param {String} param.name - Name of the mock API call - * @param {String} [param.method=requestType.READ] - HTTP method to be used - * @param {String} [param.hostname=config.root] - Hostname to be mocked - * @param {String} [param.url='/'] - URL to be mocked - * @param {any} [param.data] - Expected body - * @param {Function} [param.query=true] - Function to be called during the query step - * @param {Function} param.responseFn - Function to be called when response should be sent - * @param {object} [param.headers={'content-type': 'application/vnd.api+json'}] - * HTTP headers to be used in the mock response - * @param {object} [reqheaders={'content-type': 'application/vnd.api+json'}] - * Expected request headers - * @param {Number} status - HTTP status code that should be returned - * @return {undefined} - */ -export function setRequest({ - name, - method = 'GET', - url = '/', - data, - query = true, - responseFn, - headers = { 'content-type': 'application/vnd.api+json' }, - reqheaders = { 'content-type': 'application/vnd.api+json' }, - status = 200, -}: IMockArgs): { isDone(): boolean } { - const apiUrl = nodeUrl.parse(config.baseUrl); - const hostname = `${apiUrl.protocol}//${apiUrl.hostname}`; - const pathname = apiUrl.pathname || ''; - - let queryString = ''; - - if (typeof query === 'object' && !isFunction(query)) { - queryString = `?${Object.keys(query).map((key) => `${key}=${query[key]}`)}`; - } else if (typeof query === 'string') { - queryString = `?${query}`; - } - - const id = v1(); - const targetUrl = `${hostname}${pathname}${url}${queryString}`; - - expectedRequests.push({ - id, - name, - method, - url: targetUrl, - data, - headers, - reqheaders, - status, - responseFn, - done: false, - }); - - return { - isDone(): boolean { - return Boolean(executedRequests.find((req) => req.id === id)); - }, - }; -} diff --git a/packages/datx-jsonapi/test/utils/models/Event.ts b/packages/datx-jsonapi/test/utils/models/Event.ts deleted file mode 100644 index 59f9bf955..000000000 --- a/packages/datx-jsonapi/test/utils/models/Event.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { IType, Model, prop } from '@datx/core'; - -import { jsonapi } from '../../../src'; -import { Image } from './Image'; -import { Organizer } from './Organizer'; - -export class Event extends jsonapi(Model) { - public static type: IType = 'event'; - - @prop.identifier - public id!: string; - - @prop - public name!: string; - - @prop - public title!: string; - - @prop.toMany(Organizer) - public organizers!: Array; - - @prop.toMany(Image) - public images!: Array; - - @prop.toOne(Image) - public image!: Image; - - @prop - public imagesLinks!: Record; -} diff --git a/packages/datx-jsonapi/test/utils/models/Image.ts b/packages/datx-jsonapi/test/utils/models/Image.ts deleted file mode 100644 index 155ba5656..000000000 --- a/packages/datx-jsonapi/test/utils/models/Image.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { IType, Model, prop } from '@datx/core'; -import { mobx } from '@datx/utils'; - -import { jsonapi } from '../../../src'; -import { Event } from './Event'; - -export class Image extends jsonapi(Model) { - public static type: IType = 'image'; - - @prop - public name!: string; - - @prop.toOne('event') - public event!: Event; - - @mobx.computed - get id(): string { - return this.meta.id.toString(); - } -} diff --git a/packages/datx-jsonapi/test/utils/models/LineItem.ts b/packages/datx-jsonapi/test/utils/models/LineItem.ts deleted file mode 100644 index d28dbb8d4..000000000 --- a/packages/datx-jsonapi/test/utils/models/LineItem.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IType, Model } from '@datx/core'; - -import { jsonapi } from '../../../src'; - -export class LineItem extends jsonapi(Model) { - public static type: IType = 'line_items'; -} diff --git a/packages/datx-jsonapi/test/utils/models/Organizer.ts b/packages/datx-jsonapi/test/utils/models/Organizer.ts deleted file mode 100644 index cd3a755f4..000000000 --- a/packages/datx-jsonapi/test/utils/models/Organizer.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { IType, prop } from '@datx/core'; - -import { Image } from './Image'; -import { User } from './User'; - -export class Organizer extends User { - public static type: IType = 'organizers'; - - @prop.toOne(Image) - public image!: Image; -} diff --git a/packages/datx-jsonapi/test/utils/models/Photo.ts b/packages/datx-jsonapi/test/utils/models/Photo.ts deleted file mode 100644 index 2c03a2c66..000000000 --- a/packages/datx-jsonapi/test/utils/models/Photo.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { IType, Model, prop } from '@datx/core'; - -import { jsonapi } from '../../../src'; - -export class Photo extends jsonapi(Model) { - public static type: IType = 'photo'; - - @prop.defaultValue(false) - public selected!: boolean; -} diff --git a/packages/datx-jsonapi/test/utils/models/ProductVariant.ts b/packages/datx-jsonapi/test/utils/models/ProductVariant.ts deleted file mode 100644 index f2ed4e63f..000000000 --- a/packages/datx-jsonapi/test/utils/models/ProductVariant.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IType, Model } from '@datx/core'; - -import { jsonapi } from '../../../src'; - -export class ProductVariant extends jsonapi(Model) { - public static type: IType = 'product_variants'; -} diff --git a/packages/datx-jsonapi/test/utils/models/User.ts b/packages/datx-jsonapi/test/utils/models/User.ts deleted file mode 100644 index 8e08b1da8..000000000 --- a/packages/datx-jsonapi/test/utils/models/User.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { IType, Model, prop } from '@datx/core'; -import { mobx } from '@datx/utils'; - -import { jsonapi } from '../../../src'; - -export class User extends jsonapi(Model) { - public static type: IType = 'user'; - - @prop - public firstName!: string; - - @prop - public lastName!: string; - - @mobx.computed - get fullName(): string { - return `${this.firstName} ${this.lastName}`; - } -} diff --git a/packages/datx-jsonapi/test/utils/setup.ts b/packages/datx-jsonapi/test/utils/setup.ts deleted file mode 100644 index 3b6ab8a32..000000000 --- a/packages/datx-jsonapi/test/utils/setup.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Collection } from '@datx/core'; - -import { jsonapi } from '../../src'; -import { Event } from './models/Event'; -import { Image } from './models/Image'; -import { LineItem } from './models/LineItem'; -import { Organizer } from './models/Organizer'; -import { Photo } from './models/Photo'; -import { ProductVariant } from './models/ProductVariant'; -import { User } from './models/User'; - -export { Event, Image, Organizer, Photo, User, ProductVariant, LineItem }; - -export class TestStore extends jsonapi(Collection) { - public static types = [User, Event, Image, Organizer, Photo, ProductVariant, LineItem]; -} diff --git a/packages/datx-jsonapi/test/views.test.ts b/packages/datx-jsonapi/test/views.test.ts deleted file mode 100644 index c35b74cb6..000000000 --- a/packages/datx-jsonapi/test/views.test.ts +++ /dev/null @@ -1,135 +0,0 @@ -import { View, IViewConstructor, PureModel } from '@datx/core'; -import * as fetch from 'isomorphic-fetch'; - -import { IJsonapiView, jsonapi, config } from '../src'; -import { setupNetwork, setRequest, confirmNetwork } from './utils/api'; -import { Event, TestStore } from './utils/setup'; -import { clearAllCache } from '../src/cache'; - -const baseTransformRequest = config.transformRequest; -const baseTransformResponse = config.transformResponse; - -describe('Views', () => { - it('should sync an event', () => { - const store = new TestStore(); - const JsonapiView = jsonapi(View as IViewConstructor); - const view = new JsonapiView(Event, store); - - const event = view.sync({ - data: { - attributes: { - name: 'Demo', - }, - id: '1', - type: 'event', - }, - }) as Event; - - expect(event.name).toBe('Demo'); - expect(view.length).toBe(1); - }); - - describe('Network basics', () => { - beforeEach(() => { - config.fetchReference = fetch; - config.baseUrl = 'https://example.com/'; - config.transformRequest = baseTransformRequest; - config.transformResponse = baseTransformResponse; - clearAllCache(); - setupNetwork(); - }); - - afterEach(confirmNetwork); - - it('should fetch the basic data', async () => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - const store = new TestStore(); - const JsonapiView = jsonapi(View as IViewConstructor); - const view = new JsonapiView(Event, store); - const events = await view.getMany(); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - expect(view.length).toBe(4); - }); - - it('should support pagination', async () => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - const store = new TestStore(); - const JsonapiView = jsonapi(View as IViewConstructor); - const view = new JsonapiView(Event, store); - const events = await view.getMany(); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - expect(view.length).toBe(4); - - setRequest({ - name: 'events-2', - query: { - page: 2, - }, - url: 'event', - }); - - const events2 = await events.next?.(); - - expect(events2).toBeInstanceOf(Object); - if (events2) { - expect(events2.data).toBeInstanceOf(Array); - expect(events2.data).toHaveLength(2); - expect(view.length).toBe(6); - } - }); - - it('should support collection views with mixins', async () => { - setRequest({ - name: 'events-1', - url: 'event', - }); - - class NewStore extends TestStore { - public static views = { - test: { - mixins: [jsonapi], - modelType: Event, - }, - }; - - public test!: IJsonapiView; - } - - const store = new NewStore(); - const events = await store.test.getMany(); - - expect(events.data).toBeInstanceOf(Array); - expect(events.data).toHaveLength(4); - expect(store.test.length).toBe(4); - - setRequest({ - name: 'events-2', - query: { - page: 2, - }, - url: 'event', - }); - - const events2 = await events.next?.(); - - expect(events2).toBeInstanceOf(Object); - if (events2) { - expect(events2.data).toBeInstanceOf(Array); - expect(events2.data).toHaveLength(2); - expect(store.test.length).toBe(6); - } - }); - }); -}); diff --git a/packages/datx-jsonapi/tsconfig.build.json b/packages/datx-jsonapi/tsconfig.build.json deleted file mode 100644 index 7d3d6601b..000000000 --- a/packages/datx-jsonapi/tsconfig.build.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "allowJs": false, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "declaration": true, - "experimentalDecorators": true, - "forceConsistentCasingInFileNames": true, - "sourceMap": true, - "inlineSources": true, - "lib": ["es2015", "es2016", "es2017", "dom"], - "module": "esnext", - "noImplicitAny": false, - "noImplicitReturns": true, - "noUnusedParameters": true, - "outDir": "./dist", - "strict": true, - "strictFunctionTypes": false, - "target": "es5", - "resolveJsonModule": true - }, - "exclude": ["node_modules", "examples"], - "include": ["src/**/*"] -} diff --git a/packages/datx-jsonapi/tsconfig.json b/packages/datx-jsonapi/tsconfig.json deleted file mode 100644 index 06d157e74..000000000 --- a/packages/datx-jsonapi/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.build.json", - "include": ["src/**/*", "test/**/*"], - "compilerOptions": { - "moduleResolution": "node", - "noUnusedLocals": true, - "resolveJsonModule": true - } -} diff --git a/packages/datx-network/.npmignore b/packages/datx-network/.npmignore deleted file mode 100644 index efc2c91c7..000000000 --- a/packages/datx-network/.npmignore +++ /dev/null @@ -1,10 +0,0 @@ -docs -src -test -tsconfig.json -tsconfig.build.json -tslint.json -coverage -.rpt2_cache -node_modules -rollup.config.js \ No newline at end of file diff --git a/packages/datx-network/LICENSE b/packages/datx-network/LICENSE deleted file mode 100644 index b31ff02a7..000000000 --- a/packages/datx-network/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Infinum - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/datx-network/README.md b/packages/datx-network/README.md deleted file mode 100644 index e19d77cff..000000000 --- a/packages/datx-network/README.md +++ /dev/null @@ -1,116 +0,0 @@ -# @datx/network - -DatX is an opinionated data store for use with the [MobX](https://mobx.js.org/) state management library. It features support for simple observable property definition, references to other models and first-class TypeScript support. - -`@datx/network` is a datx mixin that adds a networking layer support. It can be used with any REST-like API and probably also other types of an API. - ---- - -## Basic usage - -```tsx -import { Collection, Model, Attribute } from '@datx/core'; -import { BaseRequest, collection, setUrl } from '@datx/network'; - -class Person extends Model { - public static type = 'person'; // Unique name of the model class - - @Attribute() - public name: string; // A normal observable property without a default value - - @Attribute() - public surname: string; - - @Attribute({ toOne: Person }) - public spouse?: Person; // A reference to a Person model - - @computed - public get fullName() { - // Standard MobX computed props - return `${this.name} ${this.surname}`; - } -} - -class AppData extends Collection { - public static types = [Person]; // A list of models available in the collection -} - -const store = new AppData(); - -// Create a base request with a basic configuration (baseUrl and linked collection) -const baseRequest = new BaseRequest('https://example.com').pipe(collection(store)); - -// Create separate request points -const getPerson = baseRequest.pipe(setUrl('/people/{id}', Person)); -const getPeople = baseRequest.pipe>(setUrl('/people', Person)); - -// Pure JS loading -const peopleResponse = await getPeople.fetch(); - -// Loading in a React component -const PersonInfo = ({ userId }) => { - const [response, loading, error] = getPerson.useHook({ id: userId }); - - if (loading || error) { - return null; - } - - const user = response.data; - - return
{user.fullName}
; -}; -``` - -## Getting started - -Note: `@datx/network` has a peer dependency to `mobx@^4.2.0` or `mobx@^5.5.0`, so don't forget to install the latest MobX version: - -```bash -npm install --save @datx/network mobx -``` - -### Polyfilling - -The lib makes use of the following features that are not yet available everywhere. Based on your browser support, you might want to polyfill them: - -- [Symbol.for](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) -- [Object.assign](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) -- [Array.prototype.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find) -- [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) -- [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) - -[How to add the polyfills](https://datx.dev/docs/troubleshooting/known-issues#the-library-doesnt-work-in-internet-explorer-11). -Note: Fetch API is not included in the polyfills mentioned in the Troubleshooting page. Instead, you need to add it as a separate library. If you don't have any special requirements (like server-side rendering), you can use the [window.fetch polyfill](https://github.com/github/fetch#installation). - -## API reference - -- [BaseRequest](https://datx.dev/docs/network/base-request) -- [Response](https://datx.dev/docs/network/response) -- [operators](https://datx.dev/docs/network/operators) -- [caching](https://datx.dev/docs/network/caching) -- [interceptors](https://datx.dev/docs/network/interceptors) -- [parse/serialize](https://datx.dev/docs/network/parse-serialize) -- [fetching](https://datx.dev/docs/network/fetching) -- [TypeScript Interfaces](https://datx.dev/docs/network/typescript-interfaces) - -## Troubleshooting - -Having issues with the library? Check out the [troubleshooting](https://datx.dev/docs/troubleshooting/known-issues) page or [open](https://github.com/infinum/datx/issues/new) an issue. - ---- - -[![Build Status](https://travis-ci.org/infinum/datx.svg?branch=master)](https://travis-ci.org/infinum/datx) -[![npm version](https://badge.fury.io/js/@datx/network.svg)](https://badge.fury.io/js/@datx/network) -[![Dependency Status](https://david-dm.org/infinum/datx.svg?path=packages/@datx/network)](https://david-dm.org/infinum/datx?path=packages/@datx/network) -[![devDependency Status](https://david-dm.org/infinum/datx/dev-status.svg?path=packages/@datx/network)](https://david-dm.org/infinum/datx?path=packages/@datx/network#info=devDependencies) - -## License - -The [MIT License](LICENSE) - -## Credits - -@datx/network is maintained and sponsored by -[Infinum](https://www.infinum.com). - - diff --git a/packages/datx-network/package.json b/packages/datx-network/package.json deleted file mode 100644 index d6ee4de4d..000000000 --- a/packages/datx-network/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "@datx/network", - "version": "2.0.0", - "description": "DatX network layer", - "main": "dist/index.cjs.js", - "module": "dist/index.esm.js", - "typings": "dist/index.d.ts", - "sideEffects": false, - "repository": { - "type": "git", - "url": "git+https://github.com/infinum/datx.git" - }, - "bugs": { - "url": "https://github.com/infinum/datx/issues" - }, - "homepage": "https://github.com/infinum/datx#readme", - "author": "Infinum JavaScript Team ", - "license": "MIT", - "keywords": [ - "datx", - "mobx" - ], - "devDependencies": { - "@rollup/plugin-commonjs": "^17.0.0", - "@rollup/plugin-node-resolve": "^11.1.0", - "@types/jest": "^26.0.20", - "@types/node": "^14.14.22", - "@types/react": "^17.0.0", - "jest": "^26.6.3", - "rollup": "^2.38.0", - "rollup-plugin-exclude-dependencies-from-bundle": "^1.1.17", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.29.0", - "ts-jest": "^26.4.4", - "typescript": "^4.1.3" - }, - "scripts": { - "test": "jest --coverage", - "watch": "jest --watch --coverage", - "prepublish": "npm run build", - "build": "rollup -c" - }, - "jest": { - "coveragePathIgnorePatterns": [ - "/test/", - "/node_modules/" - ], - "moduleFileExtensions": [ - "ts", - "js" - ], - "testRegex": "test/(.*).test.ts$", - "globals": { - "ts-jest": { - "diagnostics": { - "warnOnly": true - } - } - }, - "preset": "ts-jest", - "testMatch": null, - "setupFilesAfterEnv": [ - "./test/setup.ts" - ] - }, - "dependencies": { - "@datx/core": "^2.0.0", - "@datx/utils": "^2.0.0" - } -} diff --git a/packages/datx-network/rollup.config.js b/packages/datx-network/rollup.config.js deleted file mode 100644 index c74990dd2..000000000 --- a/packages/datx-network/rollup.config.js +++ /dev/null @@ -1,57 +0,0 @@ -import typescript from 'rollup-plugin-typescript2'; -import { terser } from 'rollup-plugin-terser'; -import commonjs from '@rollup/plugin-commonjs'; -import resolve from '@rollup/plugin-node-resolve'; -import excludeDependenciesFromBundle from 'rollup-plugin-exclude-dependencies-from-bundle'; - -import pkg from './package.json'; - -export default [ - { - input: './src/index.ts', - output: [{ file: pkg.main, format: 'cjs' }], - plugins: [ - resolve(), - commonjs(), - excludeDependenciesFromBundle(), - typescript({ - check: true, - typescript: require('typescript'), - tsconfig: './tsconfig.build.json', - }), - terser({ - toplevel: true, - compress: { - passes: 3, - }, - output: { - comments: false, - }, - }), - ], - onwarn(warning, rollupWarn) { - if (warning.code !== 'CIRCULAR_DEPENDENCY') { - rollupWarn(warning); - } - }, - }, - { - input: './src/index.ts', - output: [{ file: pkg.module, format: 'es' }], - plugins: [ - resolve(), - commonjs(), - excludeDependenciesFromBundle(), - typescript({ - check: true, - typescript: require('typescript'), - tsconfig: './tsconfig.build.json', - }), - ], - onwarn(warning, rollupWarn) { - if (warning.code !== 'CIRCULAR_DEPENDENCY') { - rollupWarn(warning); - } - }, - }, -]; diff --git a/packages/datx-network/src/BaseRequest.ts b/packages/datx-network/src/BaseRequest.ts deleted file mode 100644 index bbf90c5be..000000000 --- a/packages/datx-network/src/BaseRequest.ts +++ /dev/null @@ -1,164 +0,0 @@ -import { PureModel } from '@datx/core'; - -import { getDefaultConfig } from './defaults'; -import { IConfigType } from './interfaces/IConfigType'; -import { IHeaders } from './interfaces/IHeaders'; -import { IInterceptor } from './interfaces/IInterceptor'; -import { IPipeOperator } from './interfaces/IPipeOperator'; -import { Response } from './Response'; -import { IFetchOptions } from './interfaces/IFetchOptions'; -import { deepCopy, interpolateParams, appendQueryParams, isBrowser } from './helpers/utils'; -import { HttpMethod } from './enums/HttpMethod'; -import { cacheInterceptor } from './interceptors/cache'; -import { BodyType } from './enums/BodyType'; -import { CachingStrategy } from './enums/CachingStrategy'; -import { fetchInterceptor } from './interceptors/fetch'; -import { body as bodyOperator } from './operators'; - -interface IRequestOptions { - method: HttpMethod; - url?: string; - params: Record; - query: Record | object | undefined>; - headers: IHeaders; - body?: any; - bodyType: BodyType; -} - -export class BaseRequest { - private _config: IConfigType = getDefaultConfig(); - private _options: IRequestOptions = { - method: HttpMethod.Get, - headers: {}, - query: {}, - params: {}, - bodyType: BodyType.Json, - }; - - public interceptors: Array<{ name: string; fn: IInterceptor }> = [ - { - fn: fetchInterceptor(this._config.fetchReference, this._config.serialize, this._config.parse), - name: 'fetch', - }, - { - fn: cacheInterceptor( - isBrowser ? CachingStrategy.CacheFirst : CachingStrategy.NetworkOnly, - ), - name: 'cache', - }, - ]; - - constructor(baseUrl: string) { - this._config.baseUrl = baseUrl; - } - - public pipe< - TNewModel extends PureModel | Array = TModel, - TNewParams extends object = TParams - >(...operators: Array): BaseRequest { - const destinationPipeline = this.clone(); - operators - .filter(Boolean) - .forEach((operator) => (operator as IPipeOperator)(destinationPipeline)); - - return destinationPipeline as BaseRequest; - } - - private processBody(): object | string | FormData | undefined { - if (!this._options.body) { - return; - } - - if (this._options.bodyType === BodyType.Json) { - this._options.headers['content-type'] = - this._options.headers['content-type'] || 'application/json'; - return this._options.body; - } else if (this._options.bodyType === BodyType.Urlencoded) { - this._options.headers['content-type'] = - this._options.headers['content-type'] || 'application/x-www-form-urlencoded'; - return typeof this._options.body === 'string' - ? this._options.body - : appendQueryParams( - '', - this._options.body, - this._config.paramArrayType, - this._config.encodeQueryString, - ).slice(1); - } else if (this._options.bodyType === BodyType.Multipart) { - this._options.headers['content-type'] = - this._options.headers['content-type'] || 'multipart/form-data'; - return this._options.body instanceof FormData - ? this._options.body - : new FormData(this._options.body); - } else { - return this._options.body; - } - } - - public fetch( - params?: TParams | null, - queryParams?: Record | object> | null, - body?: any, - bodyType?: BodyType, - ): Promise> { - const request = body === undefined ? this : this.pipe(bodyOperator(body, bodyType)); - - if (!request._options.url) { - throw new Error('URL should be defined'); - } - const urlParams = Object.assign({}, request._options.params, params || {}); - const url = interpolateParams(`${request._config.baseUrl}${request._options.url}`, urlParams); - const processedUrl = appendQueryParams( - url, - Object.assign({}, request._options.query, queryParams), - request._config.paramArrayType, - request._config.encodeQueryString, - ); - - const requestRef: IFetchOptions = { - url: processedUrl, - method: request._options.method, - data: request.processBody(), - collection: request._config.collection, - params, - options: { - networkConfig: { - headers: request._options.headers, - }, - }, - views: request._config.views, - type: request._config.type, - }; - - const interceptorChain = request.interceptors.reduce((next, interceptor) => { - return (options: IFetchOptions): Promise> => interceptor.fn(options, next); - }, undefined); - - if (!interceptorChain) { - throw new Error('Something went wrong'); - } - - return interceptorChain(requestRef); - } - - public clone( - BaseRequestConstructor: typeof BaseRequest = this.constructor as typeof BaseRequest, - ): BaseRequest { - // Can't use `new BaseRequest`, because we would lose the overridden methods - const clone = new BaseRequestConstructor(this._config.baseUrl); - - clone.interceptors = deepCopy(this.interceptors) as unknown as Array<{ name: string, fn: IInterceptor }>; - - clone._config = deepCopy(this._config); - clone._options = deepCopy(this._options); - - // Manually copy complex objects - clone._config.collection = this._config.collection; - clone._config.fetchInterceptor = this._config.fetchInterceptor; - clone._config.fetchReference = this._config.fetchReference; - clone._config.Response = this._config.Response; - clone._config.type = this._config.type; - - return clone as BaseRequest; - } -} diff --git a/packages/datx-network/src/Response.ts b/packages/datx-network/src/Response.ts deleted file mode 100644 index 44d90afcf..000000000 --- a/packages/datx-network/src/Response.ts +++ /dev/null @@ -1,252 +0,0 @@ -import { - PureModel, - PureCollection, - View, - Bucket, - getModelId, - getModelType, - updateModel, - modelToJSON, - updateModelId, -} from '@datx/core'; -import { IHeaders } from './interfaces/IHeaders'; -import { IResponseInternal } from './interfaces/IResponseInternal'; -import { IResponseSnapshot } from './interfaces/IResponseSnapshot'; -import { IResponseObject } from './interfaces/IResponseObject'; -import { mapItems, mobx, Headers, IResponseHeaders } from '@datx/utils'; - -function serializeHeaders( - headers: Array<[string, string]> | IResponseHeaders, -): Array<[string, string]> { - if (headers instanceof Array) { - return headers; - } - - const list: Array<[string, string]> = []; - - headers.forEach((value: string, key: string) => { - list.push([key, value]); - }); - - return list; -} - -function initHeaders(headers: Array<[string, string]> | IResponseHeaders): IResponseHeaders { - if (headers instanceof Array) { - return new Headers(headers); - } - - return headers; -} - -function initData>( - response: IResponseObject, - collection?: PureCollection, - overrideData?: T, -): any { - let data: any = null; - const hasData = Boolean(response.data && Object.keys(response.data).length); - if (collection && response.data && hasData) { - data = - overrideData || - (response.type - ? collection.add(response.data, response.type) - : collection.add(response.data)); - } else if (hasData) { - const ModelConstructor = - response.type === PureModel || Object.isPrototypeOf.call(PureModel, response.type || {}) - ? (response.type as typeof PureModel) - : PureModel; - - data = overrideData || mapItems(response.data, (item) => new ModelConstructor(item)); - return { value: data }; - } - - return new Bucket.ToOneOrMany(data, collection as any, true); -} - -export class Response> { - protected __data; - - protected __internal: IResponseInternal = { - response: {}, - views: [], - }; - - /** - * Headers received from the API call - * - * @type {IResponseHeaders} - * @memberOf Response - */ - public get headers(): IResponseHeaders | undefined { - return this.__internal.headers; - } - - /** - * Headers sent to the server - * - * @type {IHeaders} - * @memberOf Response - */ - public get requestHeaders(): IHeaders | undefined { - return this.__internal.requestHeaders; - } - - /** - * Request error - * - * @type {(Array|Error)} - * @memberOf Response - */ - public get error(): Array | Error | undefined { - return this.__internal.error; - } - - /** - * Received HTTP status - * - * @type {number} - * @memberOf Response - */ - public get status(): number | undefined { - return this.__internal.status; - } - - public get views(): Array { - return this.__internal.views; - } - - /** - * Related Store - * - * @type {PureCollection} - * @memberOf Response - */ - public readonly collection?: PureCollection; - - /** - * Cache used for the link requests - * - * @protected - * @type {Record>} - * @memberOf Response - */ - protected readonly __cache: Record Promise>> = {}; - - public get isSuccess(): boolean { - return !this.error; - } - - public get data(): T | null { - return this.__data.value; - } - - constructor( - response: IResponseObject, - collection?: PureCollection, - overrideData?: T, - views?: Array, - ) { - this.collection = collection; - mobx.runInAction(() => { - this.__updateInternal(response, views); - try { - this.__data = initData(response, collection, overrideData); - } catch (e) { - this.__internal.error = e; - } - - this.views.forEach((view) => { - if (this.__data.value) { - view.add(this.__data.value); - } - }); - - Object.freeze(this); - - if (this.error) { - throw this; - } - }); - } - - private __updateInternal(response: IResponseObject, views?: Array): void { - this.__internal.response = response; - this.__internal.headers = response.headers && initHeaders(response.headers); - this.__internal.requestHeaders = response.requestHeaders; - this.__internal.error = response.error; - this.__internal.status = response.status; - - if (views) { - this.__internal.views = views; - } - - if (!this.error && !this.status) { - this.__internal.error = new Error('Network not available'); - } - } - - /** - * Replace the response record with a different record. Used to replace a record while keeping the same reference - * - * @param {PureModel} data New data - * @returns {Response} - * - * @memberOf Response - */ - @mobx.action - public replaceData(data: T): Response { - const record: PureModel = this.data as PureModel; - - if (record === data) { - return this; - } - - const newId = getModelId(record).toString(); - const type = getModelType(record); - - const viewIndexes = this.views.map((view) => view.list.indexOf(record)); - - if (this.collection) { - this.collection.removeOne(type, newId); - this.collection.add(data); - } - - updateModel(data, modelToJSON(record)); - updateModelId(data, newId); - - this.views.forEach((view, index) => { - if (viewIndexes[index] !== -1) { - view.list[viewIndexes[index]] = data; - } - }); - - return new Response(this.__internal.response, this.collection, data); - } - - public clone(): Response { - return new Response(this.__internal.response, this.collection, this.data || undefined); - } - - public get snapshot(): IResponseSnapshot { - return { - response: Object.assign({}, this.__internal.response, { - headers: - this.__internal.response.headers && serializeHeaders(this.__internal.response.headers), - collection: undefined, - }), - }; - } - - @mobx.action - public update(response: IResponseObject | Response, views?: Array): Response { - const responseData = response instanceof Response ? response.__internal.response : response; - this.__updateInternal(responseData, views); - const newData = initData(responseData, this.collection); - - this.__data.__readonlyValue = newData.value; - - return this; - } -} diff --git a/packages/datx-network/src/consts.ts b/packages/datx-network/src/consts.ts deleted file mode 100644 index 6e63f0c8b..000000000 --- a/packages/datx-network/src/consts.ts +++ /dev/null @@ -1 +0,0 @@ -export const NETWORK_PERSISTED = 'networkPersisted'; diff --git a/packages/datx-network/src/decorateCollection.ts b/packages/datx-network/src/decorateCollection.ts deleted file mode 100644 index d26f9042b..000000000 --- a/packages/datx-network/src/decorateCollection.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { PureCollection, PureModel, IType, getModelType, IRawModel, IRawCollection } from '@datx/core'; - -import { IRequestOptions } from './interfaces/IRequestOptions'; -import { INetworkCollection } from './interfaces/INetworkCollection'; -import { INetworkModel } from './interfaces/INetworkModel'; -import { Response } from './Response'; -import { INetworkModelConstructor } from './interfaces/INetworkModelConstructor'; -import { BaseRequest } from './BaseRequest'; -import { setUrl, requestOptions } from './operators'; -import { INetworkCollectionConstructor } from './interfaces/INetworkCollectionConstructor'; -import { - saveCacheForCollection, - ICacheInternal, - getCacheByCollection, - clearCacheByType, -} from './interceptors/cache'; - -type TSerialisedStore = IRawCollection & { cache?: Array> }; - -function addOptionsToRequest( - request: BaseRequest, - options?: IRequestOptions, -): BaseRequest { - return request.pipe(requestOptions(options)); -} - -export function decorateCollection( - BaseClass: typeof PureCollection, -): INetworkCollectionConstructor { - class NetworkCollection extends BaseClass implements INetworkCollection { - constructor(data: Array | TSerialisedStore = []) { - super(data); - - if (!(data instanceof Array) && data?.cache) { - saveCacheForCollection(data.cache, this); - } - } - - protected getConstructor( - type: IType | INetworkModel | INetworkModelConstructor, - ): INetworkModelConstructor { - const Collection = this.constructor as INetworkCollectionConstructor; - const modelType = getModelType(type); - return ( - // @ts-ignore - Collection.types.find((item) => getModelType(item) === modelType) || Collection.defaultModel - ); - } - - public getOne( - type: IType | INetworkModelConstructor, - id: string, - options?: IRequestOptions, - ): Promise> { - const root = this.getConstructor(type); - - if (!root || !root.network) { - throw new Error('The network configuration is wrong for the given model'); - } - - if (root.network instanceof BaseRequest) { - return root.network - .pipe( - requestOptions(options), - setUrl(`${root.network['_options'].url}/{id}`, (root as unknown) as typeof PureModel), - ) - .fetch({ - id, - }); - } - - if (!root.network.getOne) { - throw new Error('The getOne network request was not defined on the given model'); - } - - return addOptionsToRequest(root.network.getOne as any, options).fetch({ - id, - }); - } - - public getMany( - type: IType | INetworkModelConstructor, - options?: IRequestOptions, - ): Promise> { - const root = this.getConstructor(type); - - if (!root || !root.network) { - throw new Error('The network configuration is wrong for the given model'); - } - - if (root.network instanceof BaseRequest) { - return addOptionsToRequest(root.network as any, options).fetch(); - } - - if (!root.network.getMany) { - throw new Error('The getMany network request was not defined on the given model'); - } - - return addOptionsToRequest(root.network.getMany as any, options).fetch(); - } - - public removeOne( - type: IType | typeof PureModel, - id: string, - options?: boolean | IRequestOptions, - ): Promise; - public removeOne(model: INetworkModel, options?: boolean | IRequestOptions): Promise; - public removeOne( - type: IType | typeof PureModel | INetworkModel, - id?: string | boolean | IRequestOptions, - options?: boolean | IRequestOptions, - ): Promise { - const realType = getModelType(type); - const realId = - typeof id !== 'object' && typeof id !== 'undefined' && typeof id !== 'boolean' ? id : null; - const realOptions: boolean | IRequestOptions | undefined = (realId !== null - ? options - : id) as boolean | IRequestOptions | undefined; - const model = realId ? this.findOne(realType, realId) : realType; - - if (!model) { - throw new Error('The model was not found'); - } - - if (realOptions === false || realOptions === undefined) { - return Promise.resolve(super.removeOne(model)); - } - - clearCacheByType(getModelType(type)); - - return (model as INetworkModel) - .destroy(typeof realOptions === 'object' ? realOptions : {}) - .then(() => { - super.removeOne(model); - }); - } - - public toJSON(): TSerialisedStore { - return Object.assign({}, super.toJSON(), { - cache: getCacheByCollection(this), - }); - } - } - - return (NetworkCollection as unknown) as INetworkCollectionConstructor & typeof PureCollection; -} diff --git a/packages/datx-network/src/decorateModel.ts b/packages/datx-network/src/decorateModel.ts deleted file mode 100644 index 79799eb26..000000000 --- a/packages/datx-network/src/decorateModel.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { PureModel, PureCollection } from '@datx/core'; -import { META_FIELD, IRawModel, setMeta } from '@datx/utils'; - -import { IRequestOptions } from './interfaces/IRequestOptions'; -import { INetworkModel } from './interfaces/INetworkModel'; -import { NETWORK_PERSISTED } from './consts'; -import { saveModel, removeModel } from './helpers/model'; -import { IModelNetworkConfig } from './interfaces/IModelNetworkConfig'; -import { INetworkModelConstructor } from './interfaces/INetworkModelConstructor'; - -const HYDRATIZATION_KEYS = [NETWORK_PERSISTED]; - -export function decorateModel(BaseClass: typeof PureModel): INetworkModelConstructor { - class NetworkModel extends BaseClass { - public static network?: IModelNetworkConfig; - - constructor(data: IRawModel = {}, collection?: PureCollection) { - super(data, collection); - - const modelMeta = data?.[META_FIELD] || {}; - - HYDRATIZATION_KEYS.forEach((key) => { - if (key in modelMeta) { - setMeta(this, key, modelMeta[key]); - } - }); - } - - public save(options?: IRequestOptions): Promise { - return saveModel((this as unknown) as INetworkModel, options); - } - - public destroy(options?: IRequestOptions): Promise { - return removeModel(this, options); - } - } - - return NetworkModel; -} diff --git a/packages/datx-network/src/defaults.ts b/packages/datx-network/src/defaults.ts deleted file mode 100644 index 52e76c7b6..000000000 --- a/packages/datx-network/src/defaults.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { IConfigType } from './interfaces/IConfigType'; -import { ParamArrayType } from './enums/ParamArrayType'; -import { isBrowser } from './helpers/utils'; -import { fetchInterceptor } from './interceptors/fetch'; -import { mapItems } from '@datx/utils'; -import { PureModel, modelToJSON } from '@datx/core'; -import { IFetchOptions } from './interfaces/IFetchOptions'; -import { Response } from './Response'; - -export function getDefaultConfig(): IConfigType { - return { - // Base URL for all API calls - baseUrl: '/', - - encodeQueryString: true, - - // Determines how will the request param arrays be stringified - paramArrayType: ParamArrayType.ParamArray, - - fetchReference: isBrowser ? window.fetch?.bind?.(window) : undefined, - - fetchInterceptor, - - serialize: (request: IFetchOptions): IFetchOptions => { - return { - ...request, - data: - mapItems(request.data, (obj) => (obj instanceof PureModel ? modelToJSON(obj) : obj)) || - undefined, - }; - }, - - Response, - }; -} diff --git a/packages/datx-network/src/enums/BodyType.ts b/packages/datx-network/src/enums/BodyType.ts deleted file mode 100644 index 64ab90f09..000000000 --- a/packages/datx-network/src/enums/BodyType.ts +++ /dev/null @@ -1,6 +0,0 @@ -export enum BodyType { - Raw, - Json, - Multipart, - Urlencoded, -} diff --git a/packages/datx-network/src/enums/CachingStrategy.ts b/packages/datx-network/src/enums/CachingStrategy.ts deleted file mode 100644 index 4352b8e43..000000000 --- a/packages/datx-network/src/enums/CachingStrategy.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Based on service worker strategies https://developers.google.com/web/tools/workbox/modules/workbox-strategies - -export enum CachingStrategy { - NetworkOnly = 1, // Ignore cache - NetworkFirst = 2, // Fallback to cache only on network error - StaleWhileRevalidate = 3, // Use cache and update it in background - CacheOnly = 4, // Fail if nothing in cache - CacheFirst = 5, // Use cache if available - StaleAndUpdate = 6, // Use cache and update response once network is complete -} diff --git a/packages/datx-network/src/enums/HttpMethod.ts b/packages/datx-network/src/enums/HttpMethod.ts deleted file mode 100644 index 365fe62fa..000000000 --- a/packages/datx-network/src/enums/HttpMethod.ts +++ /dev/null @@ -1,9 +0,0 @@ -export enum HttpMethod { - Get = 'GET', - Post = 'POST', - Put = 'PUT', - Patch = 'Patch', - Delete = 'Delete', - Options = 'Options', - Head = 'Head', -} diff --git a/packages/datx-network/src/enums/ParamArrayType.ts b/packages/datx-network/src/enums/ParamArrayType.ts deleted file mode 100644 index 28582aa22..000000000 --- a/packages/datx-network/src/enums/ParamArrayType.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum ParamArrayType { - MultipleParams, // filter[a]=1&filter[a]=2 - CommaSeparated, // filter[a]=1,2 - ParamArray, // filter[a][]=1&filter[a][]=2 -} diff --git a/packages/datx-network/src/helpers/model.ts b/packages/datx-network/src/helpers/model.ts deleted file mode 100644 index a30c0a8eb..000000000 --- a/packages/datx-network/src/helpers/model.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { INetworkModel } from '../interfaces/INetworkModel'; -import { IRequestOptions } from '../interfaces/IRequestOptions'; -import { getMeta, setMeta, mobx } from '@datx/utils'; -import { NETWORK_PERSISTED } from '../consts'; -import { INetworkModelConstructor } from '../interfaces/INetworkModelConstructor'; -import { BaseRequest } from '../BaseRequest'; -import { method, setUrl, query, header, cache, body } from '../operators'; -import { HttpMethod } from '../enums/HttpMethod'; -import { Response } from '../Response'; -import { PureModel, commitModel, getModelCollection, getModelId } from '@datx/core'; - -function handleResponse( - record: T, -): (response: Response) => T { - return mobx.action( - (response: Response): T => { - if (response.error) { - throw response.error; - } - - if (response.status === 204) { - setMeta(record, NETWORK_PERSISTED, true); - - return record; - } - - setMeta(record, NETWORK_PERSISTED, true); - - const data = (response.replaceData(record).data as T) || record; - - commitModel(data); - - return data; - }, - ); -} - -export function saveModel( - model: TModel, - options?: IRequestOptions, -): Promise { - const ModelConstructor = model.constructor as INetworkModelConstructor; - if (!ModelConstructor.network) { - throw new Error('The network property needs to be defined on the model'); - } - const isPersisted = getMeta(model, NETWORK_PERSISTED, false); - - let baseRequest: BaseRequest | undefined; - if (ModelConstructor.network instanceof BaseRequest) { - baseRequest = isPersisted - ? ModelConstructor.network.pipe( - method(HttpMethod.Put), - setUrl( - `${ModelConstructor.network['_options'].url}/{id}`, - (ModelConstructor as unknown) as typeof PureModel, - ), - ) - : ModelConstructor.network.pipe(method(HttpMethod.Post)); - } else { - baseRequest = isPersisted ? ModelConstructor.network.update : ModelConstructor.network.create; - } - - if (!baseRequest) { - throw new Error('The base request has not been defined'); - } - - const request = baseRequest.pipe( - options?.query && query(options?.query), - options?.networkConfig?.headers && header(options?.networkConfig?.headers), - options?.cacheOptions?.cachingStrategy && - cache(options?.cacheOptions?.cachingStrategy, options?.cacheOptions?.maxAge), - body(model), - ); - - return request.fetch({ id: getModelId(model) }).then(handleResponse(model)); -} - -export function removeModel( - model: TModel, - options?: IRequestOptions, -): Promise { - const ModelConstructor = model.constructor as INetworkModelConstructor; - if (!ModelConstructor.network) { - throw new Error('The network property needs to be defined on the model'); - } - const isPersisted = getMeta(model, NETWORK_PERSISTED, false); - - let baseRequest: BaseRequest | false | undefined; - if (ModelConstructor.network instanceof BaseRequest) { - baseRequest = isPersisted - ? ModelConstructor.network.pipe( - method(HttpMethod.Delete), - setUrl( - `${ModelConstructor.network['_options'].url}/{id}`, - (ModelConstructor as unknown) as typeof PureModel, - ), - ) - : false; - } else { - baseRequest = isPersisted ? ModelConstructor.network.destroy : false; - } - - if (!baseRequest && baseRequest !== false) { - throw new Error('The base request has not been defined'); - } - - if (baseRequest) { - baseRequest - .pipe( - options?.query && query(options?.query), - options?.networkConfig?.headers && header(options?.networkConfig?.headers), - options?.cacheOptions?.cachingStrategy && - cache(options?.cacheOptions?.cachingStrategy, options?.cacheOptions?.maxAge), - ) - .fetch({ id: getModelId(model) }) - .then(() => { - const collection = getModelCollection(model); - if (collection) { - collection.removeOne(model); - } - }); - } - - return Promise.resolve(); -} diff --git a/packages/datx-network/src/helpers/utils.ts b/packages/datx-network/src/helpers/utils.ts deleted file mode 100644 index eac5199da..000000000 --- a/packages/datx-network/src/helpers/utils.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { ParamArrayType } from '../enums/ParamArrayType'; -import { PureModel, IFieldDefinition, IReferenceDefinition } from '@datx/core'; -import { getMeta } from '@datx/utils'; - -export const isBrowser: boolean = typeof window !== 'undefined'; - -export function deepCopy(inObject: T): T { - let value: any; - let key: string | number | symbol; - - if (typeof inObject !== 'object' || inObject === null) { - return inObject; // Return the value if inObject is not an object - } - - // Create an array or object to hold the values - const outObject: object = Array.isArray(inObject) ? [] : {}; - - for (key in inObject) { - value = inObject[key]; - - // Recursively (deep) copy for nested objects, including arrays - outObject[key] = deepCopy(value); - } - - return outObject as T; -} - -const interpolationRegex = /\{\s*([a-zA-Z0-9\-_]+)\s*\}/g; - -export function interpolateParams(url: string, params: Record): string { - let newUrl = url; - let match = interpolationRegex.exec(newUrl); - let lastIndex = 0; - while (match) { - let param = params[match[1]]; - if (param === undefined) { - param = match[0]; - lastIndex = interpolationRegex.lastIndex; - } - newUrl = newUrl.replace(match[0], param); - interpolationRegex.lastIndex = lastIndex; - match = interpolationRegex.exec(newUrl); - } - return newUrl; -} - -function parametrize( - paramArrayType: ParamArrayType, - params: object, - scope = '', -): Array<{ key: string; value: string }> { - const list: Array<{ key: string; value: string }> = []; - - Object.keys(params).forEach((key) => { - const scoped = `${scope}${scope ? `[${key}]` : key}`; - if (params[key] instanceof Array) { - if (paramArrayType === ParamArrayType.CommaSeparated) { - list.push({ key: scoped, value: params[key].join(',') }); - } else if (paramArrayType === ParamArrayType.MultipleParams) { - list.push(...params[key].map((param: string) => ({ key: scoped, value: param }))); - } else if (paramArrayType === ParamArrayType.ParamArray) { - list.push( - ...params[key].map((param: string) => ({ - key: `${scoped}[]`, - value: param, - })), - ); - } - } else if (typeof params[key] === 'object') { - list.push(...parametrize(paramArrayType, params[key], scoped)); - } else if (params[key] !== undefined) { - list.push({ key: scoped, value: params[key] }); - } - }); - - return list; -} - -function appendParams(url: string, params: Array): string { - let newUrl = url; - - if (params.length) { - let separator = ''; - if (newUrl.indexOf('?') === -1) { - separator = '?'; - } else if (!newUrl.endsWith('&') && !newUrl.endsWith('?')) { - separator = '&'; - } - - newUrl += separator + params.join('&'); - } - - return newUrl; -} - -export function appendQueryParams( - url: string, - query: Record | object>, - paramArrayType: ParamArrayType, - encodeQueryString: boolean, -): string { - const processedParams = parametrize(paramArrayType, query) - .map(({ key, value }) => ({ - key, - value: encodeQueryString ? encodeURIComponent(value) : value, - })) - .map(({ key, value }) => `${key}=${value}`); - - return appendParams(url, processedParams); -} - -export function getModelClassRefs( - type: typeof PureModel | PureModel, -): Record { - const fields: Record = getMeta(type, 'fields', {}, true, true); - const refs: Record = {}; - - Object.keys(fields).forEach((key) => { - if (fields[key].referenceDef) { - refs[key] = fields[key].referenceDef as IReferenceDefinition; - } - }); - - return refs; -} diff --git a/packages/datx-network/src/index.ts b/packages/datx-network/src/index.ts deleted file mode 100644 index 78d9dc7f9..000000000 --- a/packages/datx-network/src/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -export { BaseRequest } from './BaseRequest'; -export { Response } from './Response'; - -export { - addInterceptor, - cache, - method, - setUrl, - body, - query, - header, - params, - fetchReference, - encodeQueryString, - paramArrayType, - serializer, - parser, - collection, - requestOptions, - upsertInterceptor, -} from './operators'; - -export { IResponseHeaders } from '@datx/utils'; - -export { clearAllCache, clearCacheByType } from './interceptors/cache'; - -export { CachingStrategy } from './enums/CachingStrategy'; -export { HttpMethod } from './enums/HttpMethod'; -export { ParamArrayType } from './enums/ParamArrayType'; - -export { IFetchOptions } from './interfaces/IFetchOptions'; -export { IHeaders } from './interfaces/IHeaders'; -export { IInterceptor } from './interfaces/IInterceptor'; -export { INetworkHandler } from './interfaces/INetworkHandler'; -export { IPipeOperator } from './interfaces/IPipeOperator'; -export { IResponseObject } from './interfaces/IResponseObject'; - -export { withNetwork } from './withNetwork'; - -export { INetworkCollection } from './interfaces/INetworkCollection'; -export { INetworkCollectionConstructor } from './interfaces/INetworkCollectionConstructor'; -export { INetworkModel } from './interfaces/INetworkModel'; -export { INetworkModelConstructor } from './interfaces/INetworkModelConstructor'; diff --git a/packages/datx-network/src/interceptors/cache.ts b/packages/datx-network/src/interceptors/cache.ts deleted file mode 100644 index 91245f9b9..000000000 --- a/packages/datx-network/src/interceptors/cache.ts +++ /dev/null @@ -1,215 +0,0 @@ -import { getModelType, IType, PureModel, PureCollection } from '@datx/core'; -import { mapItems } from '@datx/utils'; - -import { Response } from '../Response'; -import { IResponseSnapshot } from '../interfaces/IResponseSnapshot'; -import { CachingStrategy } from '../enums/CachingStrategy'; -import { IFetchOptions } from '../interfaces/IFetchOptions'; -import { HttpMethod } from '../enums/HttpMethod'; -import { INetworkHandler } from '../interfaces/INetworkHandler'; - -export interface ICache { - response: Response; - time: number; - types: Array; - url: string; -} - -export interface ICacheInternal { - response: IResponseSnapshot; - collection?: PureCollection; - time: number; - types: Array; - url: string; -} - -let cacheStorage: Array = []; - -export function saveCache(url: string, response: Response): void { - if (response && response.isSuccess && (response.data || response.data === null)) { - const types = mapItems(response.data || [], getModelType) as IType | Array; - - cacheStorage = cacheStorage.filter((item) => item.url !== url); - - cacheStorage.unshift({ - response: response.snapshot, - collection: response.collection, - time: Date.now(), - types: ([] as Array).concat(types), - url, - }); - } -} - -export function getCache(url: string, maxAge: number): ICache | undefined { - const ageLimit = Date.now() - maxAge * 1000; - const cache = cacheStorage.find((item) => item.url === url && item.time > ageLimit); - - if (cache) { - const data = cache.response; - - return { - // @ts-ignore Array headers that are supported but shouldn't be exposed in types - response: new Response(data.response, cache.collection, data.options), - time: cache.time, - types: cache.types, - url: cache.url, - }; - } - - return undefined; -} - -export function clearAllCache(): void { - cacheStorage.length = 0; -} - -export function clearCacheByType(type: IType): void { - cacheStorage = cacheStorage.filter((item) => !item.types.includes(type)); -} - -export function getCacheByCollection( - collection?: PureCollection, -): Array> { - return cacheStorage - .filter((item) => item.collection === collection) - .map((item) => Object.assign({}, item, { collection: undefined })); -} - -export function saveCacheForCollection( - cacheItems: Array>, - collection?: PureCollection, -): void { - cacheStorage.push( - ...cacheStorage, - ...cacheItems.map((item) => Object.assign({ collection }, item)), - ); -} - -function makeNetworkCall( - params: IFetchOptions, - next: INetworkHandler, - doCacheResponse = false, - existingResponse?: Response, -): Promise> { - return next(params).then( - (response: Response) => { - let finalResponse = response; - if (existingResponse) { - finalResponse = existingResponse.update(response, params.views); - } - if (doCacheResponse) { - saveCache(params.url, finalResponse); - } - return finalResponse; - }, - (response: Response) => { - throw response; - }, - ); -} - -function getLocalNetworkError( - message: string, - reqOptions: IFetchOptions, - collection?: PureCollection, -): Response { - return new Response( - { - error: new Error(message), - collection, - requestHeaders: reqOptions.options?.networkConfig?.headers, - }, - collection, - ); -} - -export function cacheInterceptor( - cache: CachingStrategy, - maxCacheAge = Infinity, -) { - return (request: IFetchOptions, next?: INetworkHandler): Promise> => { - if (!next) { - throw new Error("Cache interceptor can't be the last interceptor"); - } - - const isCacheSupported = request.method.toUpperCase() === HttpMethod.Get; - - const cacheStrategy = - request.options?.cacheOptions?.skipCache || !isCacheSupported - ? CachingStrategy.NetworkOnly - : request.options?.cacheOptions?.cachingStrategy || cache; - - // NetworkOnly - Ignore cache - if (cacheStrategy === CachingStrategy.NetworkOnly) { - return makeNetworkCall(request, next); - } - - const cacheContent: { response: Response } | undefined = (getCache( - request.url, - maxCacheAge, - ) as unknown) as { response: Response } | undefined; - - // NetworkFirst - Fallback to cache only on network error - if (cacheStrategy === CachingStrategy.NetworkFirst) { - return makeNetworkCall(request, next, true).catch((errorResponse) => { - if (cacheContent) { - return cacheContent.response; - } - throw errorResponse; - }); - } - - // StaleWhileRevalidate - Use cache and update it in background - if (cacheStrategy === CachingStrategy.StaleWhileRevalidate) { - const network = makeNetworkCall(request, next, true); - - if (cacheContent) { - network.catch(() => { - // Ignore the failure - }); - return Promise.resolve(cacheContent.response); - } - - return network; - } - - // CacheOnly - Fail if nothing in cache - if (cacheStrategy === CachingStrategy.CacheOnly) { - if (cacheContent) { - return Promise.resolve(cacheContent.response); - } - - return Promise.reject( - getLocalNetworkError('No cache for this request', request, request?.collection), - ); - } - - // CacheFirst - Use cache if available - if (cacheStrategy === CachingStrategy.CacheFirst) { - return cacheContent - ? Promise.resolve(cacheContent.response) - : makeNetworkCall(request, next, true); - } - - // StaleAndUpdate - Use cache and update response once network is complete - if (cacheStrategy === CachingStrategy.StaleAndUpdate) { - const existingResponse = cacheContent?.response?.clone(); - - const network = makeNetworkCall(request, next, true, existingResponse); - - if (existingResponse) { - network.catch(() => { - // Ignore the failure - }); - return Promise.resolve(existingResponse); - } - - return network; - } - - return Promise.reject( - getLocalNetworkError('Invalid caching strategy', request, request?.collection), - ); - }; -} diff --git a/packages/datx-network/src/interceptors/fetch.ts b/packages/datx-network/src/interceptors/fetch.ts deleted file mode 100644 index 5b330a831..000000000 --- a/packages/datx-network/src/interceptors/fetch.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { PureModel } from '@datx/core'; -import { IResponseHeaders } from '@datx/utils'; - -import { IFetchOptions } from '../interfaces/IFetchOptions'; -import { INetworkHandler } from '../interfaces/INetworkHandler'; -import { IResponseObject } from '../interfaces/IResponseObject'; -import { IHeaders } from '../interfaces/IHeaders'; -import { Response as ResponseClass } from '../Response'; - -function parseResponse( - response: IResponseObject, - parse: (data: object, options: IResponseObject) => object, -): IResponseObject { - if (response.data) { - return { - ...response, - data: parse(response.data, response), - }; - } - - return response; -} - -export function fetchInterceptor( - fetchReference?: typeof fetch, - serialize: (options: IFetchOptions) => IFetchOptions = (options): IFetchOptions => options, - parse: (data: object, options: IResponseObject) => object = (data): object => data, - Response: typeof ResponseClass = ResponseClass, -) { - return (request: IFetchOptions, _next?: INetworkHandler): Promise> => { - if (!fetchReference) { - throw new Error('The fetch reference must be defined'); - } - - const payload = serialize ? serialize(request) : request; - - let data: object; - let status = 0; - let headers: IResponseHeaders; - - const uppercaseMethod = payload.method.toUpperCase(); - const isBodySupported = uppercaseMethod !== 'GET' && uppercaseMethod !== 'HEAD'; - const bodyContent = - typeof payload.data === 'object' && !(payload.data instanceof FormData) - ? JSON.stringify(payload.data) - : payload.data; - const body = isBodySupported ? bodyContent : undefined; - - const requestHeaders: IHeaders = Object.assign( - {}, - payload.options?.networkConfig?.headers, - ) as IHeaders; - const options = Object.assign({ - body, - headers: requestHeaders, - method: payload.method, - }); - - return fetchReference(payload.url, options) - .then((response: globalThis.Response) => { - status = response.status; - headers = response.headers; - - return response.json(); - }) - .catch((error: Error) => { - if (status === 204) { - return null; - } - if (status === 0) { - throw new Error('Network not available'); - } - throw error; - }) - .then((responseData: object) => { - data = responseData; - if (status >= 400) { - throw { - message: `Invalid HTTP status: ${status}`, - status, - }; - } - - const response = parseResponse( - { - data, - headers, - requestHeaders, - status, - collection: request.collection, - type: request.type, - }, - parse, - ); - return new Response(response, request.collection, undefined, request.views); - }) - .catch((error) => { - const response = parseResponse( - { - data, - error, - headers, - requestHeaders, - status, - collection: request.collection, - type: request.type, - }, - parse, - ); - throw new Response(response, request.collection, undefined, request.views); - }); - }; -} diff --git a/packages/datx-network/src/interfaces/FetchType.ts b/packages/datx-network/src/interfaces/FetchType.ts deleted file mode 100644 index d66cca65c..000000000 --- a/packages/datx-network/src/interfaces/FetchType.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IHeaders } from './IHeaders'; - -export type FetchType = ( - method: string, - url: string, - body?: object, - requestHeaders?: IHeaders, -) => Promise; diff --git a/packages/datx-network/src/interfaces/IConfigType.ts b/packages/datx-network/src/interfaces/IConfigType.ts deleted file mode 100644 index d98479c28..000000000 --- a/packages/datx-network/src/interfaces/IConfigType.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { PureCollection, IType, PureModel, View } from '@datx/core'; - -import { ParamArrayType } from '../enums/ParamArrayType'; -import { IFetchOptions } from './IFetchOptions'; -import { IResponseObject } from './IResponseObject'; -import { fetchInterceptor } from '../interceptors/fetch'; -import { Response } from '../Response'; - -export interface IConfigType { - baseUrl: string; - paramArrayType: ParamArrayType; - encodeQueryString: boolean; - collection?: PureCollection; - type?: IType | typeof PureModel; - views?: Array; - fetchReference?: typeof fetch; - serialize?: (options: IFetchOptions) => IFetchOptions; - parse?: (data: object, options: IResponseObject) => object; - fetchInterceptor: typeof fetchInterceptor; - Response: typeof Response; -} diff --git a/packages/datx-network/src/interfaces/IFetchOptions.ts b/packages/datx-network/src/interfaces/IFetchOptions.ts deleted file mode 100644 index 754908b5e..000000000 --- a/packages/datx-network/src/interfaces/IFetchOptions.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { View, PureCollection, IType, PureModel } from '@datx/core'; - -import { IRequestOptions } from './IRequestOptions'; -import { HttpMethod } from '../enums/HttpMethod'; - -export interface IFetchOptions { - url: string; - options?: IRequestOptions; - params?: object | null; - data?: string | object | FormData; - method: HttpMethod; - collection?: PureCollection; - skipCache?: boolean; - views?: Array; - type?: IType | typeof PureModel; -} diff --git a/packages/datx-network/src/interfaces/IHeaders.ts b/packages/datx-network/src/interfaces/IHeaders.ts deleted file mode 100644 index f3723bef0..000000000 --- a/packages/datx-network/src/interfaces/IHeaders.ts +++ /dev/null @@ -1 +0,0 @@ -export type IHeaders = Record; diff --git a/packages/datx-network/src/interfaces/IInterceptor.ts b/packages/datx-network/src/interfaces/IInterceptor.ts deleted file mode 100644 index 4cbface40..000000000 --- a/packages/datx-network/src/interfaces/IInterceptor.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IFetchOptions } from './IFetchOptions'; -import { Response } from '../Response'; -import { INetworkHandler } from './INetworkHandler'; -import { PureModel } from '@datx/core'; - -export type IInterceptor = ( - request: IFetchOptions, - next?: INetworkHandler, -) => Promise>; diff --git a/packages/datx-network/src/interfaces/IModelNetworkConfig.ts b/packages/datx-network/src/interfaces/IModelNetworkConfig.ts deleted file mode 100644 index 0fe0a4ea6..000000000 --- a/packages/datx-network/src/interfaces/IModelNetworkConfig.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { BaseRequest } from '../BaseRequest'; - -export type IModelNetworkConfig = - | BaseRequest - | { - getMany?: BaseRequest; - getOne?: BaseRequest; - create?: BaseRequest; - update?: BaseRequest; - destroy?: BaseRequest; - }; diff --git a/packages/datx-network/src/interfaces/INetworkCollection.ts b/packages/datx-network/src/interfaces/INetworkCollection.ts deleted file mode 100644 index 19024f1a6..000000000 --- a/packages/datx-network/src/interfaces/INetworkCollection.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { PureModel, PureCollection, IType } from '@datx/core'; - -import { IRequestOptions } from './IRequestOptions'; -import { Response } from '../Response'; -import { INetworkModel } from './INetworkModel'; -import { INetworkModelConstructor } from './INetworkModelConstructor'; - -export interface INetworkCollection extends PureCollection { - getOne( - type: IType | INetworkModelConstructor, - id: string, - options?: IRequestOptions, - ): Promise>; - - getMany( - type: IType | INetworkModelConstructor, - options?: IRequestOptions, - ): Promise>; - - removeOne( - type: IType | typeof PureModel, - id: string, - options?: boolean | IRequestOptions, - ): Promise; - removeOne(model: INetworkModel, options?: boolean | IRequestOptions): Promise; -} diff --git a/packages/datx-network/src/interfaces/INetworkCollectionConstructor.ts b/packages/datx-network/src/interfaces/INetworkCollectionConstructor.ts deleted file mode 100644 index 0f8864f3f..000000000 --- a/packages/datx-network/src/interfaces/INetworkCollectionConstructor.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { PureCollection, IRawModel, IRawCollection } from '@datx/core'; - -import { INetworkCollection } from './INetworkCollection'; - -export interface INetworkCollectionConstructor extends PureCollection { - new (data?: Array | IRawCollection): INetworkCollection; -} diff --git a/packages/datx-network/src/interfaces/INetworkHandler.ts b/packages/datx-network/src/interfaces/INetworkHandler.ts deleted file mode 100644 index e305e6cc9..000000000 --- a/packages/datx-network/src/interfaces/INetworkHandler.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IFetchOptions } from './IFetchOptions'; -import { PureModel } from '@datx/core'; - -import { Response } from '../Response'; - -export type INetworkHandler = ( - request: IFetchOptions, -) => Promise>; diff --git a/packages/datx-network/src/interfaces/INetworkModel.ts b/packages/datx-network/src/interfaces/INetworkModel.ts deleted file mode 100644 index fff94813d..000000000 --- a/packages/datx-network/src/interfaces/INetworkModel.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PureModel } from '@datx/core'; - -import { IRequestOptions } from './IRequestOptions'; - -export interface INetworkModel extends PureModel { - save(options?: IRequestOptions): Promise; - - destroy(options?: IRequestOptions): Promise; -} diff --git a/packages/datx-network/src/interfaces/INetworkModelConstructor.ts b/packages/datx-network/src/interfaces/INetworkModelConstructor.ts deleted file mode 100644 index 4870966de..000000000 --- a/packages/datx-network/src/interfaces/INetworkModelConstructor.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { INetworkModel } from './INetworkModel'; -import { IModelNetworkConfig } from './IModelNetworkConfig'; -import { IModelConstructor } from '@datx/core'; - -export interface INetworkModelConstructor extends IModelConstructor { - network?: IModelNetworkConfig; - new (): INetworkModel; -} diff --git a/packages/datx-network/src/interfaces/INetworkView.ts b/packages/datx-network/src/interfaces/INetworkView.ts deleted file mode 100644 index 6c27d725b..000000000 --- a/packages/datx-network/src/interfaces/INetworkView.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { View } from '@datx/core'; - -import { IRequestOptions } from './IRequestOptions'; -import { Response } from '../Response'; -import { INetworkModel } from './INetworkModel'; - -export interface INetworkView extends View { - sync(body?: Response): T | Array | null; - - getOne(id: string, options?: IRequestOptions): Promise>; - getMany(options?: IRequestOptions): Promise>; -} diff --git a/packages/datx-network/src/interfaces/IPipeOperator.ts b/packages/datx-network/src/interfaces/IPipeOperator.ts deleted file mode 100644 index 89cb2a2e8..000000000 --- a/packages/datx-network/src/interfaces/IPipeOperator.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { BaseRequest } from '../BaseRequest'; - -export type IPipeOperator = (request: BaseRequest) => void; diff --git a/packages/datx-network/src/interfaces/IRequestOptions.ts b/packages/datx-network/src/interfaces/IRequestOptions.ts deleted file mode 100644 index 867a2b2bd..000000000 --- a/packages/datx-network/src/interfaces/IRequestOptions.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { IHeaders } from './IHeaders'; -import { CachingStrategy } from '../enums/CachingStrategy'; - -export interface IRequestOptions { - query?: Record | object>; - cacheOptions?: { - cachingStrategy?: CachingStrategy; - maxAge?: number; - skipCache?: boolean; - }; - networkConfig?: { - headers?: IHeaders; - }; -} diff --git a/packages/datx-network/src/interfaces/IResponseInternal.ts b/packages/datx-network/src/interfaces/IResponseInternal.ts deleted file mode 100644 index b4484ee0a..000000000 --- a/packages/datx-network/src/interfaces/IResponseInternal.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { View } from '@datx/core'; -import { IResponseHeaders } from '@datx/utils'; - -import { IHeaders } from './IHeaders'; -import { IRequestOptions } from './IRequestOptions'; -import { IResponseObject } from './IResponseObject'; - -export interface IResponseInternal { - headers?: IResponseHeaders; - requestHeaders?: IHeaders; - error?: Array | Error; - status?: number; - options?: IRequestOptions; - response: IResponseObject; - views: Array; -} diff --git a/packages/datx-network/src/interfaces/IResponseObject.ts b/packages/datx-network/src/interfaces/IResponseObject.ts deleted file mode 100644 index bdf9ef0da..000000000 --- a/packages/datx-network/src/interfaces/IResponseObject.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { PureCollection, IType, PureModel } from '@datx/core'; -import { IResponseHeaders } from '@datx/utils'; - -import { IHeaders } from './IHeaders'; - -export interface IResponseObject { - data?: object; - error?: Error; - headers?: IResponseHeaders; - requestHeaders?: IHeaders; - status?: number; - collection?: PureCollection; - type?: IType | typeof PureModel; -} diff --git a/packages/datx-network/src/interfaces/IResponseSnapshot.ts b/packages/datx-network/src/interfaces/IResponseSnapshot.ts deleted file mode 100644 index e98d33616..000000000 --- a/packages/datx-network/src/interfaces/IResponseSnapshot.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { IRequestOptions } from './IRequestOptions'; - -export interface IResponseSnapshot { - response: Omit & { headers?: Array<[string, string]> }; - options?: IRequestOptions; -} diff --git a/packages/datx-network/src/operators.ts b/packages/datx-network/src/operators.ts deleted file mode 100644 index 41ca5c3a0..000000000 --- a/packages/datx-network/src/operators.ts +++ /dev/null @@ -1,202 +0,0 @@ -import { BaseRequest } from './BaseRequest'; -import { IInterceptor } from './interfaces/IInterceptor'; -import { CachingStrategy } from './enums/CachingStrategy'; -import { HttpMethod } from './enums/HttpMethod'; -import { BodyType } from './enums/BodyType'; -import { ParamArrayType } from './enums/ParamArrayType'; -import { PureCollection, IType, PureModel } from '@datx/core'; -import { cacheInterceptor } from './interceptors/cache'; -import { IResponseObject } from './interfaces/IResponseObject'; -import { IFetchOptions } from './interfaces/IFetchOptions'; -import { IRequestOptions } from './interfaces/IRequestOptions'; - -export function setUrl(url: string, type: IType | typeof PureModel = PureModel) { - return (pipeline: BaseRequest): void => { - pipeline['_options'].url = url; - pipeline['_config'].type = type; - }; -} - -export function addInterceptor(fn: IInterceptor, name: string = fn.name) { - return (pipeline: BaseRequest): void => { - pipeline.interceptors = pipeline.interceptors.filter( - (interceptor) => interceptor.name !== name, - ); - - pipeline.interceptors.push({ name, fn }); - }; -} - -export function upsertInterceptor(fn: IInterceptor, name: string = fn.name) { - return (pipeline: BaseRequest): void => { - const interceptor = pipeline.interceptors.find((interceptor) => interceptor.name === name); - - if (interceptor) { - interceptor.fn = fn; - } else { - pipeline.interceptors.push({ name, fn }); - } - }; -} - -export function removeInterceptor(name: string) { - return (pipeline: BaseRequest): void => { - pipeline.interceptors = pipeline.interceptors.filter( - (interceptor) => interceptor.name !== name, - ); - }; -} - -export function cache( - strategy: CachingStrategy, - maxAge = Infinity, -): (pipeline: BaseRequest) => void { - return upsertInterceptor(cacheInterceptor(strategy, maxAge), 'cache'); -} - -export function method(method: HttpMethod) { - return (pipeline: BaseRequest): void => { - pipeline['_options'].method = method; - }; -} - -export function body(body: unknown, bodyType?: BodyType) { - return (pipeline: BaseRequest): void => { - if (bodyType || bodyType === 0) { - pipeline['_options'].bodyType = bodyType; - } else if (body instanceof FormData) { - pipeline['_options'].bodyType = BodyType.Multipart; - } else if (typeof body === 'object') { - pipeline['_options'].bodyType = BodyType.Json; - } else { - pipeline['_options'].bodyType = BodyType.Raw; - } - pipeline['_options'].body = body; - }; -} - -export function query( - name: string, - value: string | Array | object | undefined, -): (pipeline: BaseRequest) => void; -export function query( - params: Record | object | undefined>, -): (pipeline: BaseRequest) => void; -export function query( - name: string | Record | object | undefined>, - value?: string | Array | object | undefined, -) { - return (pipeline: BaseRequest): void => { - if (typeof name === 'string') { - pipeline['_options'].query[name] = value; - } else { - Object.assign(pipeline['_options'].query, name); - } - }; -} - -export function header(name: string, value: string): (pipeline: BaseRequest) => void; -export function header(params: Record): (pipeline: BaseRequest) => void; -export function header(name: string | Record, value?: string) { - return (pipeline: BaseRequest): void => { - if (typeof name === 'string') { - pipeline['_options'].headers[name] = value || ''; - } else { - Object.assign(pipeline['_options'].headers, name); - } - }; -} - -export function params(name: string, value: string): (pipeline: BaseRequest) => void; -export function params(params: Record): (pipeline: BaseRequest) => void; -export function params(name: string | Record, value?: string) { - return (pipeline: BaseRequest): void => { - if (typeof name === 'string') { - pipeline['_options'].params[name] = value as string; - } else { - Object.assign(pipeline['_options'].params, name); - } - }; -} - -export function encodeQueryString(encodeQueryString: boolean) { - return (pipeline: BaseRequest): void => { - pipeline['_config'].encodeQueryString = encodeQueryString; - }; -} - -export function paramArrayType(paramArrayType: ParamArrayType) { - return (pipeline: BaseRequest): void => { - pipeline['_config'].paramArrayType = paramArrayType; - }; -} - -export function fetchReference(fetchReference: typeof fetch) { - return (pipeline: BaseRequest): void => { - const config = pipeline['_config']; - config.fetchReference = fetchReference; - upsertInterceptor( - config.fetchInterceptor( - config.fetchReference, - config.serialize, - config.parse, - config.Response, - ), - 'fetch', - )(pipeline); - }; -} - -export function serializer(serialize: (request: IFetchOptions) => IFetchOptions) { - return (pipeline: BaseRequest): void => { - const config = pipeline['_config']; - config.serialize = serialize; - upsertInterceptor( - config.fetchInterceptor( - config.fetchReference, - config.serialize, - config.parse, - config.Response, - ), - 'fetch', - )(pipeline); - }; -} - -export function parser(parse: (data: object, response: IResponseObject) => object) { - return (pipeline: BaseRequest): void => { - const config = pipeline['_config']; - config.parse = parse; - upsertInterceptor( - config.fetchInterceptor( - config.fetchReference, - config.serialize, - config.parse, - config.Response, - ), - 'fetch', - )(pipeline); - }; -} - -export function collection(collection?: PureCollection) { - return (pipeline: BaseRequest): void => { - pipeline['_config'].collection = collection; - }; -} - -export function requestOptions(options?: IRequestOptions) { - return (pipeline: BaseRequest): void => { - if (options?.query) { - query(options?.query)(pipeline); - } - - if (options?.networkConfig?.headers) { - header(options?.networkConfig?.headers)(pipeline); - } - - if (options?.cacheOptions?.cachingStrategy) { - cache(options?.cacheOptions?.cachingStrategy, options?.cacheOptions?.maxAge)(pipeline); - } - }; -} diff --git a/packages/datx-network/src/withNetwork.ts b/packages/datx-network/src/withNetwork.ts deleted file mode 100644 index ccf007c16..000000000 --- a/packages/datx-network/src/withNetwork.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { isCollection, isModel, PureCollection, PureModel, View } from '@datx/core'; - -import { decorateCollection } from './decorateCollection'; -import { decorateModel } from './decorateModel'; -// import { decorateView } from './decorateView'; -import { INetworkCollection } from './interfaces/INetworkCollection'; -import { INetworkModel } from './interfaces/INetworkModel'; -import { INetworkView } from './interfaces/INetworkView'; -import { BaseRequest } from './BaseRequest'; -import { INetworkCollectionConstructor } from './interfaces/INetworkCollectionConstructor'; - -interface INetwork { - network?: BaseRequest; - - new (): T; -} - -export function withNetwork(Base: T): T & INetwork; - -export function withNetwork( - Base: T, -): T & INetworkCollectionConstructor; - -export function withNetwork(Base: T): T & INetwork; - -export function withNetwork( - Base: T, -): (T & INetworkModel) | (T & INetworkCollection) | (T & INetworkView) { - if (isModel(Base)) { - // @ts-ignore - return decorateModel(Base); - } - - if (isCollection(Base)) { - // @ts-ignore - return decorateCollection(Base); - } - - // if (isView(Base)) { - // // @ts-ignore - // return decorateView(Base); - // } - - throw new Error('The instance needs to be a model, collection or a view'); -} diff --git a/packages/datx-network/test/basic.test.ts b/packages/datx-network/test/basic.test.ts deleted file mode 100644 index ec63ce65a..000000000 --- a/packages/datx-network/test/basic.test.ts +++ /dev/null @@ -1,485 +0,0 @@ -import { MockBaseRequest } from './mock/MockBaseRequest'; -import { - addInterceptor, - setUrl, - fetchReference, - collection, - parser, - method, - HttpMethod, - body, - serializer, - IFetchOptions, - INetworkHandler, - Response, -} from '../src'; -import { PureModel, Attribute, Collection } from '@datx/core'; -import { clearAllCache } from '../src/interceptors/cache'; - -describe('Request', () => { - it('should initialize', () => { - const request = new MockBaseRequest('foobar'); - expect(request).toBeTruthy(); - expect(request['_config'].baseUrl).toBe('foobar'); - expect(request).toBeInstanceOf(MockBaseRequest); - }); - - it('throw if no url is set', async () => { - const request = new MockBaseRequest('foobar'); - try { - await request.fetch(); - expect(true).toBe(false); - } catch (e) { - expect(e).toEqual(new Error('URL should be defined')); - } - }); - - it('throw on server error', async () => { - const store = new Collection(); - const request = new MockBaseRequest('foobar').pipe( - setUrl('foobar'), - collection(store), - ); - request['resetMock']({ - status: 404, - json: async () => ({}), - }); - try { - await request.fetch(); - expect(true).toBe(false); - } catch (e) { - expect(store.length).toBe(0); - expect(e.error).toEqual({ message: 'Invalid HTTP status: 404', status: 404 }); - } - }); - - it('should clone the request', () => { - class FooRequest extends MockBaseRequest {} - const request1 = new MockBaseRequest('foobar'); - const request2 = request1.clone(FooRequest as any); - const request3 = request1.pipe(); - - expect(request1).not.toBe(request2); - expect(request1['_config']).not.toBe(request2['_config']); - - expect(request1).not.toBe(request3); - expect(request1['_config']).not.toBe(request3['_config']); - - expect(request3).not.toBe(request2); - expect(request3['_config']).not.toBe(request2['_config']); - - expect(request1).toBeInstanceOf(MockBaseRequest); - expect(request1).not.toBeInstanceOf(FooRequest); - - expect(request2).toBeInstanceOf(MockBaseRequest); - expect(request2).toBeInstanceOf(FooRequest); - - expect(request3).toBeInstanceOf(MockBaseRequest); - expect(request3).not.toBeInstanceOf(FooRequest); - }); - - it('should run the pipes in the right order', () => { - const request1 = new MockBaseRequest('foobar'); - - const request2 = request1.pipe(setUrl('foo'), setUrl('bar')); - - expect(request1['_options'].url).toBe(undefined); - expect(request2['_options'].url).toBe('bar'); - }); - - it('should pass params data to interceptors', async () => { - async function mockInterceptor (request: IFetchOptions, next: INetworkHandler): Promise> { - expect(request.params).toEqual({ foo: 1 }); - - return next(request); - } - - const request1 = new MockBaseRequest('foobar'); - - const request2 = request1.pipe( - setUrl('/foobar'), - addInterceptor(mockInterceptor), - ); - - await request2.fetch({ foo: 1 }); - - expect(request2['_config'].fetchReference).toHaveBeenCalledTimes(1); - }); - - it('should call interceptors in the correct order', async () => { - let counter = 0; - - function mockInterceptor(expected: number) { - return async (request: IFetchOptions, next: INetworkHandler): Promise> => { - expect(counter).toBe(expected); - counter++; - return next(request); - }; - } - - const request1 = new MockBaseRequest('foobar'); - - const request2 = request1.pipe( - setUrl('foobar'), - addInterceptor(mockInterceptor(2), 'int2'), - addInterceptor(mockInterceptor(1), 'int1'), - addInterceptor(mockInterceptor(0), 'int0'), - ); - - await request2.fetch(); - - expect(request2['_config'].fetchReference).toHaveBeenCalledTimes(1); - expect(request1['_config'].fetchReference).toHaveBeenCalledTimes(1); - expect(counter).toBe(3); - }); - - it('should use the correct fetcher reference', async () => { - const request1 = new MockBaseRequest('foobar'); - - const request2 = request1.pipe( - setUrl('foobar'), - fetchReference( - jest.fn().mockResolvedValue( - Promise.resolve({ - status: 200, - json() { - return Promise.resolve({}); - }, - }), - ), - ), - ); - - await request2.fetch(); - - expect(request2['_config'].fetchReference).toHaveBeenCalledTimes(1); - expect(request1['_config'].fetchReference).toHaveBeenCalledTimes(0); - }); - - describe('model initialization', () => { - beforeEach(() => { - clearAllCache(); - }); - - it('default - PureModel, single model', async () => { - const request1 = new MockBaseRequest('foobar'); - - const request2 = request1.pipe( - setUrl('foobar'), - fetchReference( - jest.fn().mockResolvedValue( - Promise.resolve({ - status: 200, - json() { - return Promise.resolve({ - title: 'Test', - }); - }, - }), - ), - ), - ); - - const response = await request2.fetch(); - - expect(response.data).toBeInstanceOf(PureModel); - expect(response.data?.['title']).toBe('Test'); - }); - - it('default - PureModel, array', async () => { - const request1 = new MockBaseRequest('foobar'); - - const request2 = request1.pipe( - setUrl('foobar'), - fetchReference( - jest.fn().mockResolvedValue( - Promise.resolve({ - status: 200, - json() { - return Promise.resolve([ - { - title: 'Test', - }, - ]); - }, - }), - ), - ), - ); - - const response = await request2.fetch(); - - expect(response.data?.[0]).toBeInstanceOf(PureModel); - expect(response.data?.[0]['title']).toBe('Test'); - }); - - it('FooModel, single model', async () => { - const request1 = new MockBaseRequest('foobar'); - class Foo extends PureModel { - @Attribute() - public title!: string; - } - - const request2 = request1.pipe( - setUrl('foobar', Foo), - fetchReference( - jest.fn().mockResolvedValue( - Promise.resolve({ - status: 200, - json() { - return Promise.resolve({ - title: 'Test', - }); - }, - }), - ), - ), - ); - - const response = await request2.fetch(); - - expect(response.data).toBeInstanceOf(Foo); - expect(response.data?.title).toBe('Test'); - }); - - it('FooModel, array', async () => { - const request1 = new MockBaseRequest('foobar'); - class Foo extends PureModel { - @Attribute() - public title!: string; - } - - const request2 = request1.pipe>( - setUrl('foobar', Foo), - fetchReference( - jest.fn().mockResolvedValue( - Promise.resolve({ - status: 200, - json() { - return Promise.resolve([ - { - title: 'Test', - }, - ]); - }, - }), - ), - ), - ); - - const response = await request2.fetch(); - - expect(response.data?.[0]).toBeInstanceOf(Foo); - expect(response.data?.[0]['title']).toBe('Test'); - }); - - it('collection, single model', async () => { - const request1 = new MockBaseRequest('foobar'); - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public title!: string; - } - class TestStore extends Collection { - public static types = [Foo]; - } - - const store = new TestStore(); - - const request2 = request1.pipe( - setUrl('foobar', 'foo'), - collection(store), - fetchReference( - jest.fn().mockResolvedValue( - Promise.resolve({ - status: 200, - json() { - return Promise.resolve({ - title: 'Test', - }); - }, - }), - ), - ), - ); - - const response = await request2.fetch(); - - expect(response.data).toBeInstanceOf(Foo); - expect(response.data?.title).toBe('Test'); - }); - - it('collection, array', async () => { - const request1 = new MockBaseRequest('foobar'); - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public title!: string; - } - class TestStore extends Collection { - public static types = [Foo]; - } - - const store = new TestStore(); - - const request2 = request1.pipe>( - setUrl('foobar', 'foo'), - collection(store), - fetchReference( - jest.fn().mockResolvedValue( - Promise.resolve({ - status: 200, - json() { - return Promise.resolve([ - { - title: 'Test', - }, - ]); - }, - }), - ), - ), - ); - - const response = await request2.fetch(); - - expect(response.data?.[0]).toBeInstanceOf(Foo); - expect(response.data?.[0]['title']).toBe('Test'); - }); - - it('collection default, single model', async () => { - const request1 = new MockBaseRequest('foobar'); - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public title!: string; - } - class TestStore extends Collection { - public static types = [Foo]; - } - - const store = new TestStore(); - - const request2 = request1.pipe( - setUrl('foobar'), - collection(store), - fetchReference( - jest.fn().mockResolvedValue( - Promise.resolve({ - status: 200, - json() { - return Promise.resolve({ - title: 'Test', - }); - }, - }), - ), - ), - ); - - const response = await request2.fetch(); - - expect(response.data).not.toBeInstanceOf(Foo); - expect(response.data?.title).toBe('Test'); - }); - - it('collection default, array', async () => { - const request1 = new MockBaseRequest('foobar'); - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public title!: string; - } - class TestStore extends Collection { - public static types = [Foo]; - } - - const store = new TestStore(); - - const request2 = request1.pipe>( - setUrl('foobar'), - collection(store), - fetchReference( - jest.fn().mockResolvedValue( - Promise.resolve({ - status: 200, - json() { - return Promise.resolve([ - { - title: 'Test', - }, - ]); - }, - }), - ), - ), - ); - - const response = await request2.fetch(); - - expect(response.data?.[0]).not.toBeInstanceOf(Foo); - expect(response.data?.[0]['title']).toBe('Test'); - }); - }); - - it('should work with parsers', async () => { - const request1 = new MockBaseRequest('foobar'); - - const request2 = request1.pipe( - setUrl('foobar'), - parser((data) => data['data']), - fetchReference( - jest.fn().mockResolvedValue( - Promise.resolve({ - status: 200, - json() { - return Promise.resolve({ - data: { - title: 'Test', - }, - }); - }, - }), - ), - ), - ); - - const response = await request2.fetch(); - - expect(response.data).toBeInstanceOf(PureModel); - expect(response.data?.['title']).toBe('Test'); - }); - - it('should work with serializers', async () => { - const request1 = new MockBaseRequest('foobar'); - - const request2 = request1.pipe( - setUrl('foobar'), - method(HttpMethod.Post), - body({ test: true }), - serializer((req) => ({ ...req, data: { data: req.data } })), - fetchReference( - jest.fn().mockResolvedValue( - Promise.resolve({ - status: 200, - json() { - return Promise.resolve({ - title: 'Test', - }); - }, - }), - ), - ), - ); - - const response = await request2.fetch(); - - expect(response.data).toBeInstanceOf(PureModel); - expect(response.data?.['title']).toBe('Test'); - expect(request2['lastBody']).toBe(JSON.stringify({ data: { test: true } })); - }); -}); diff --git a/packages/datx-network/test/body.test.ts b/packages/datx-network/test/body.test.ts deleted file mode 100644 index e4f9f2bf1..000000000 --- a/packages/datx-network/test/body.test.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { MockBaseRequest } from './mock/MockBaseRequest'; -import { body, setUrl, method, HttpMethod, header } from '../src'; -import { BodyType } from '../src/enums/BodyType'; - -describe('body', () => { - it('should not send anything for get', async () => { - const request = new MockBaseRequest('foobar').pipe(setUrl('foobar'), body('sdasdsad')); - - await request.fetch(); - - expect(request['lastBody']).toBeUndefined(); - }); - - it('should send something if the method is supported', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('foobar'), - body('sdasdsad'), - method(HttpMethod.Post), - ); - - await request.fetch(); - - expect(request['lastBody']).toBe('sdasdsad'); - expect(request['lastMethod']).toBe('POST'); - }); - - it('should send something in fetch if the method is supported', async () => { - const request = new MockBaseRequest('foobar').pipe(setUrl('foobar'), method(HttpMethod.Post)); - - await request.fetch(null, null, 'sdasdsad'); - - expect(request['lastBody']).toBe('sdasdsad'); - expect(request['lastMethod']).toBe('POST'); - }); - - it('should send the no content type if body type is raw', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('foobar'), - body('sdasdsad', BodyType.Raw), - method(HttpMethod.Post), - ); - - await request.fetch(); - - expect(request['lastBody']).toBe('sdasdsad'); - expect(request['lastMethod']).toBe('POST'); - expect(request['lastHeaders']).toEqual({}); - }); - - it('should send the correct urlencoded data', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('foobar'), - body({ foo: 1, bar: 2 }, BodyType.Urlencoded), - method(HttpMethod.Post), - ); - - await request.fetch(); - - expect(request['lastBody']).toBe('foo=1&bar=2'); - expect(request['lastMethod']).toBe('POST'); - expect(request['lastHeaders']).toEqual({ 'content-type': 'application/x-www-form-urlencoded' }); - }); - - it('should send the correct json data', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('foobar'), - body({ foo: 1, bar: 2 }), - method(HttpMethod.Post), - ); - - await request.fetch(); - - expect(request['lastBody']).toBe('{"foo":1,"bar":2}'); - expect(request['lastMethod']).toBe('POST'); - expect(request['lastHeaders']).toEqual({ 'content-type': 'application/json' }); - }); - - it('should use the custom content-type header if set', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('foobar'), - header('content-type', 'foobar'), - body({ foo: 1, bar: 2 }), - method(HttpMethod.Post), - ); - - await request.fetch(); - - expect(request['lastBody']).toBe('{"foo":1,"bar":2}'); - expect(request['lastMethod']).toBe('POST'); - expect(request['lastHeaders']).toEqual({ 'content-type': 'foobar' }); - }); - - it('should send the correct FormData', async () => { - const data = new FormData(); - data.append('foo', '1'); - - const request = new MockBaseRequest('foobar').pipe( - setUrl('foobar'), - body(data), - method(HttpMethod.Post), - ); - - await request.fetch(); - - expect(request['lastBody']).toBe(data); - expect(request['lastMethod']).toBe('POST'); - expect(request['lastHeaders']).toEqual({ 'content-type': 'multipart/form-data' }); - }); -}); diff --git a/packages/datx-network/test/caching.test.ts b/packages/datx-network/test/caching.test.ts deleted file mode 100644 index 9b59ac1ed..000000000 --- a/packages/datx-network/test/caching.test.ts +++ /dev/null @@ -1,352 +0,0 @@ -import { MockBaseRequest } from './mock/MockBaseRequest'; -import { setUrl, cache, CachingStrategy, Response, BaseRequest } from '../src'; -import { PureModel } from '@datx/core'; -import { - getCacheByCollection, - saveCacheForCollection, - clearAllCache, -} from '../src/interceptors/cache'; - -const sleep = (duration: number): Promise => - new Promise((resolve) => setTimeout(resolve, duration)); - -describe('caching', () => { - it('should fail if no cache with CacheOnly strategy', async () => { - const request1 = new MockBaseRequest('foobar'); - - const request2 = request1.pipe(setUrl('foobar'), cache(CachingStrategy.CacheOnly)); - - try { - await request2.fetch(); - expect(true).toBe(false); - } catch (resp) { - expect(resp).toBeInstanceOf(Response); - } - - expect(request2['_config'].fetchReference).toHaveBeenCalledTimes(0); - }); - - describe('caching strategies', () => { - let request: BaseRequest = new MockBaseRequest('foobar').pipe(setUrl('/test')); - - describe('NetworkOnly', () => { - beforeEach(() => { - request = request.pipe(cache(CachingStrategy.NetworkOnly)); - }); - - it('should fail if no network', async () => { - request['resetMock']({ status: 0 }, false); - try { - await request.fetch(); - throw Error('The request should fail'); - } catch (response) { - expect(response?.error).toEqual(new Error('Network not available')); - } - }); - - it('should use network in all calls', async () => { - request['resetMock']({ status: 200, json: async () => ({}) }); - - await request.fetch(); - const response = await request.fetch(); - - expect(response.isSuccess).toBeTruthy(); - expect(request['_config'].fetchReference).toBeCalledTimes(2); - }); - }); - - describe('NetworkFirst', () => { - beforeEach(() => { - request = request.pipe(cache(CachingStrategy.NetworkFirst)); - }); - - it('should use network if available', async () => { - request['resetMock']({ status: 200, json: async () => ({}) }); - - const response = await request.fetch(); - - expect(response.isSuccess).toBeTruthy(); - }); - - it('should fall back to cache if network not available', async () => { - request['resetMock']({ status: 200, json: async () => ({}) }); - await request.fetch(); - - request['resetMock']({ status: 0 }, false); - const response = await request.fetch(); - - expect(response.isSuccess).toBeTruthy(); - }); - - it('should fail if network and cache not available', async () => { - request['resetMock']({ status: 0 }, false); - - try { - await request.fetch(); - throw Error('The request should fail'); - } catch (response) { - expect(response?.error).toEqual(new Error('Network not available')); - } - }); - }); - - describe('StaleWhileRevalidate', () => { - beforeEach(() => { - request = request.pipe(cache(CachingStrategy.StaleWhileRevalidate)); - }); - - it('should show new data if no cache', async () => { - request['resetMock']({ status: 200, json: async () => ({ foo: 1 }) }); - - const response = await request.fetch(); - const test = response?.data; - - if (test instanceof PureModel) { - expect(test['foo']).toBe(1); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should use cached data if available', async () => { - request['resetMock']({ status: 200, json: async () => ({ foo: 1 }) }); - await request.fetch(); - - request['resetMock']({ status: 0 }, false); - const response = await request.fetch(); - - const test = response?.data; - - if (test instanceof PureModel) { - expect(test['foo']).toBe(1); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should update the cache after call is done', async () => { - request['resetMock']({ status: 200, json: async () => ({ foo: 1 }) }); - const response1 = await request.fetch(); - - // Initial response - const test1 = response1?.data; - - if (test1 instanceof PureModel) { - expect(test1['foo']).toBe(1); - } else { - throw new Error('Response is wrong'); - } - - request['resetMock']({ status: 200, json: async () => ({ foo: 2 }) }); - const response2 = await request.fetch(); - - // Cached 1st response - const test2 = response2?.data; - - if (test2 instanceof PureModel) { - expect(test2['foo']).toBe(1); - } else { - throw new Error('Response is wrong'); - } - - await sleep(1); - request['resetMock']({ status: 0 }, false); - const response3 = await request.fetch(); - - // Cached 2nd response - const test3 = response3?.data; - - if (test3 instanceof PureModel) { - expect(test3['foo']).toBe(2); - } else { - throw new Error('Response is wrong'); - } - }); - }); - - describe('CacheOnly', () => { - beforeEach(() => { - request = request.pipe(cache(CachingStrategy.CacheOnly)); - }); - - it('should fail if no cache', async () => { - request['resetMock']({ status: 0 }, false); - - try { - await request.fetch(); - throw Error('The request should fail'); - } catch (response) { - expect(response?.error?.toString()).toBe('Error: No cache for this request'); - } - }); - - it('should use cache in all calls', async () => { - const requestNetwork = request.pipe(cache(CachingStrategy.NetworkFirst)); - requestNetwork['resetMock']({ status: 200, json: async () => ({ foo: 1 }) }); - await requestNetwork.fetch(); - - request['resetMock']({ status: 0 }, false); - await request.fetch(); - await request.fetch(); - await request.fetch(); - const response = await request.fetch(); - - const test = response?.data; - - if (test instanceof PureModel) { - expect(test['foo']).toBe(1); - } else { - throw new Error('Response is wrong'); - } - }); - }); - - describe('CacheFirst', () => { - beforeEach(() => { - request = request.pipe(cache(CachingStrategy.CacheFirst)); - }); - - it('should use cache if available', async () => { - request['resetMock']({ status: 200, json: async () => ({ foo: 1 }) }); - await request.pipe(cache(CachingStrategy.NetworkFirst)).fetch(); - - request['resetMock']({ status: 0 }, false); - await request.fetch(); - await request.fetch(); - await request.fetch(); - const response = await request.fetch(); - - const test = response?.data; - - if (test instanceof PureModel) { - expect(test['foo']).toBe(1); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should fall back to network if cache not available', async () => { - request['resetMock']({ status: 200, json: async () => ({ foo: 1 }) }); - await request.fetch(); - - request['resetMock']({ status: 0 }, false); - await request.fetch(); - await request.fetch(); - const response = await request.fetch(); - - const test = response?.data; - - if (test instanceof PureModel) { - expect(test['foo']).toBe(1); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should fail if network and cache not available', async () => { - request['resetMock']({ status: 0 }, false); - - try { - await request.fetch(); - throw Error('The request should fail'); - } catch (response) { - expect(response?.error?.toString()).toBe('Error: Network not available'); - } - }); - - it('should not use a dirty model for caching', async () => { - request['resetMock']({ status: 200, json: async () => ({ foo: 1 }) }); - const firstResponse = await request.fetch(); - const firstTest = firstResponse.data; - firstTest.foo = 2; - - request['resetMock']({ status: 0 }, false); - const response = await request.fetch(); - const test = response?.data; - - if (test instanceof PureModel) { - expect(test['foo']).toBe(1); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should support cache serialization', async () => { - request['resetMock']({ status: 200, json: async () => ({ foo: 1 }) }); - - await request.pipe(cache(CachingStrategy.NetworkFirst)).fetch(); - - const cacheJson = getCacheByCollection(); - - const rawCache = JSON.parse(JSON.stringify(cacheJson)); - - clearAllCache(); - - request['resetMock']({ status: 0 }, false); - try { - await request.fetch(); - throw Error('The request should fail'); - } catch (e) { - expect(e?.error?.toString()).toBe('Error: Network not available'); - } - - saveCacheForCollection(rawCache); - - const response = await request.fetch(); - const test = response?.data; - - if (test instanceof PureModel) { - expect(test['foo']).toBe(1); - } else { - throw new Error('Response is wrong'); - } - }); - }); - - describe('StaleAndUpdate', () => { - beforeEach(() => { - request = request.pipe(cache(CachingStrategy.StaleAndUpdate)); - }); - - it('should show new data if no cache', async () => { - request['resetMock']({ status: 200, json: async () => ({ foo: 1 }) }); - const response1 = await request.fetch(); - - const test1 = response1?.data; - if (test1 instanceof PureModel) { - expect(test1['foo']).toBe(1); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should use cached data if available', async () => { - request['resetMock']({ status: 200, json: async () => ({ foo: 1 }) }); - await request.fetch(); - - request['resetMock']({ status: 0 }, false); - await request.fetch(); - await request.fetch(); - const response = await request.fetch(); - const test = response?.data; - - if (test instanceof PureModel) { - expect(test['foo']).toBe(1); - } else { - throw new Error('Response is wrong'); - } - }); - - it('should fail if invalid strategy', async () => { - request = request.pipe(cache(-9999)); - - try { - await request.fetch(); - throw Error('The request should fail'); - } catch (response) { - expect(response?.error?.toString()).toBe('Error: Invalid caching strategy'); - } - }); - }); - }); -}); diff --git a/packages/datx-network/test/headers.test.ts b/packages/datx-network/test/headers.test.ts deleted file mode 100644 index 96486d89d..000000000 --- a/packages/datx-network/test/headers.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { MockBaseRequest } from './mock/MockBaseRequest'; -import { setUrl, header } from '../src'; - -describe('headers', () => { - it('should work with basic headers', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test'), - header('foo', '1'), - header('bar', '2'), - ); - - await request.fetch(); - - expect(request['lastHeaders']).toEqual({ - foo: '1', - bar: '2', - }); - }); -}); diff --git a/packages/datx-network/test/mobx.ts b/packages/datx-network/test/mobx.ts deleted file mode 100644 index d8c818f5f..000000000 --- a/packages/datx-network/test/mobx.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { mobx } from '@datx/utils'; - -let testMobx = mobx; - -Object.assign(mobx, { - configure() { - // noop - }, - isComputedProp(_val: any): boolean { - return false; - } -}); - -// @ts-ignore -mobx.configure = () => { /**/ }; - -if (!['-1', '0'].includes(process.env.MOBX_VERSION || '0')) { - testMobx = require('mobx'); - testMobx.makeObservable = testMobx.makeObservable || mobx.makeObservable; -} - -export default testMobx; diff --git a/packages/datx-network/test/mock/MockBaseRequest.ts b/packages/datx-network/test/mock/MockBaseRequest.ts deleted file mode 100644 index 8c688685e..000000000 --- a/packages/datx-network/test/mock/MockBaseRequest.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { BaseRequest, fetchReference } from '../../src'; -import { PureModel } from '@datx/core'; - -export class MockBaseRequest extends BaseRequest { - constructor(baseUrl: string) { - super(baseUrl); - this.resetMock({ - status: 200, - json: async () => ({}), - }); - } - - protected resetMock(mockResponse: any, success = true): void { - fetchReference( - success - ? jest.fn().mockResolvedValue(mockResponse) - : jest.fn().mockRejectedValue(mockResponse), - )(this); - } - - private get lastRequest(): [ - string, - { method: string; body: string | FormData | undefined; headers: Record }, - ] { - const mockFetch = (this['_config'].fetchReference as jest.Mock).mock.calls; - return mockFetch[mockFetch.length - 1]; - } - - protected get lastMethod(): string { - return this.lastRequest[1].method; - } - - protected get lastUrl(): string { - return this.lastRequest[0]; - } - - protected get lastBody(): string | FormData | undefined { - return this.lastRequest[1].body; - } - - protected get lastHeaders(): Record { - return this.lastRequest[1].headers; - } -} diff --git a/packages/datx-network/test/params.test.ts b/packages/datx-network/test/params.test.ts deleted file mode 100644 index a0e0158c9..000000000 --- a/packages/datx-network/test/params.test.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { MockBaseRequest } from './mock/MockBaseRequest'; -import { setUrl, params } from '../src'; - -describe('params', () => { - it('should work for a basic params case', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test/{testId}/{mockId}'), - params('testId', '123'), - params('mockId', '456'), - ); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test/123/456'); - }); - - it('should work for object params', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test/{testId}/{mockId}'), - params({ - testId: '234', - mockId: '345', - }), - ); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test/234/345'); - }); - - it('should work with missing params', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test/{testId}/{mockId}'), - params('testId', '123'), - ); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test/123/{mockId}'); - }); - - it('should work with fetch addon', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test/{testId}/{mockId}'), - params('testId', '123'), - ); - - await request.fetch({ mockId: '321' }); - expect(request['lastUrl']).toBe('foobar/test/123/321'); - }); - - it('should work with partial fetch addon', async () => { - const request = new MockBaseRequest('foobar').pipe(setUrl('/test/{testId}/{mockId}')); - - await request.fetch({ mockId: '321' }); - expect(request['lastUrl']).toBe('foobar/test/{testId}/321'); - }); - - it('should work with full fetch params', async () => { - const request = new MockBaseRequest('foobar').pipe(setUrl('/test/{testId}/{mockId}')); - - await request.fetch({ testId: '432', mockId: '321' }); - expect(request['lastUrl']).toBe('foobar/test/432/321'); - }); - - it('should work with multiple pipes', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test/{testId}/{mockId}'), - params('testId', '123'), - ); - - const request2 = request.pipe(params('testId', '321')); - - await request2.fetch(); - expect(request2['lastUrl']).toBe('foobar/test/321/{mockId}'); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test/123/{mockId}'); - }); -}); diff --git a/packages/datx-network/test/query-params.test.ts b/packages/datx-network/test/query-params.test.ts deleted file mode 100644 index d02dc683e..000000000 --- a/packages/datx-network/test/query-params.test.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { query, setUrl, paramArrayType, ParamArrayType, encodeQueryString } from '../src'; -import { MockBaseRequest } from './mock/MockBaseRequest'; - -describe('query params', () => { - it('should work for a basic params case', async () => { - const request = new MockBaseRequest('foobar').pipe(setUrl('/test'), query('test', '123')); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test?test=123'); - }); - - it('should skip the undefined params', async () => { - const request = new MockBaseRequest('foobar').pipe(setUrl('/test'), query('test', undefined)); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test'); - }); - - it('should work for a basic params case and existing queryparams', async () => { - const request = new MockBaseRequest('foobar').pipe(setUrl('/test?foo=1'), query('test', '123')); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test?foo=1&test=123'); - }); - - it('should work for a basic params case and empty query params', async () => { - const request = new MockBaseRequest('foobar').pipe(setUrl('/test?'), query('test', '123')); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test?test=123'); - }); - - it('should work for a basic params case and next query params', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test?foo=1&'), - query('test', '123'), - ); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test?foo=1&test=123'); - }); - - it('should work for a multiple params case', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test'), - query('test', '123'), - query('foo', '1'), - ); - - await request.fetch(); - expect(request['lastUrl']).toBe('foobar/test?test=123&foo=1'); - }); - - it('should work for complex query and ParamArray', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test'), - query('test', ['123', '234']), - query('foo', { - bar: '1', - baz: ['2', '3'], - test: { - foo: { - bar: ['4', '5'], - }, - }, - }), - ); - - await request.fetch(); - expect(request['lastUrl']).toBe( - 'foobar/test?test[]=123&test[]=234&foo[bar]=1&foo[baz][]=2&foo[baz][]=3&foo[test][foo][bar][]=4&foo[test][foo][bar][]=5', - ); - }); - - it('should work for complex query and ParamArray', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test'), - query('test', ['123', '234']), - query('foo', { - bar: '1', - baz: ['2', '3'], - test: { - foo: { - bar: ['4', '5'], - }, - }, - }), - paramArrayType(ParamArrayType.MultipleParams), - ); - - await request.fetch(); - expect(request['lastUrl']).toBe( - 'foobar/test?test=123&test=234&foo[bar]=1&foo[baz]=2&foo[baz]=3&foo[test][foo][bar]=4&foo[test][foo][bar]=5', - ); - }); - - it('should work for complex query and ParamArray', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test'), - query('test', ['123', '234']), - query('foo', { - bar: '1', - baz: ['2', '3'], - test: { - foo: { - bar: ['4', '5'], - }, - }, - }), - paramArrayType(ParamArrayType.CommaSeparated), - ); - - const request2 = request.pipe(encodeQueryString(false)); - - await request.fetch(); - expect(request['lastUrl']).toBe( - 'foobar/test?test=123%2C234&foo[bar]=1&foo[baz]=2%2C3&foo[test][foo][bar]=4%2C5', - ); - - await request2.fetch(); - expect(request2['lastUrl']).toBe( - 'foobar/test?test=123,234&foo[bar]=1&foo[baz]=2,3&foo[test][foo][bar]=4,5', - ); - }); - - it('should work for complex query in fetch and ParamArray', async () => { - const request = new MockBaseRequest('foobar').pipe( - setUrl('/test'), - query('test', ['123', '234']), - paramArrayType(ParamArrayType.CommaSeparated), - ); - - const request2 = request.pipe(encodeQueryString(false)); - - await request.fetch(null, { - foo: { - bar: '1', - baz: ['2', '3'], - test: { - foo: { - bar: ['4', '5'], - }, - }, - }, - }); - expect(request['lastUrl']).toBe( - 'foobar/test?test=123%2C234&foo[bar]=1&foo[baz]=2%2C3&foo[test][foo][bar]=4%2C5', - ); - - await request2.fetch(null, { - foo: { - bar: '1', - baz: ['2', '3'], - test: { - foo: { - bar: ['4', '5'], - }, - }, - }, - }); - expect(request2['lastUrl']).toBe( - 'foobar/test?test=123,234&foo[bar]=1&foo[baz]=2,3&foo[test][foo][bar]=4,5', - ); - }); -}); diff --git a/packages/datx-network/test/setup.ts b/packages/datx-network/test/setup.ts deleted file mode 100644 index 8389ae799..000000000 --- a/packages/datx-network/test/setup.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { mobx } from '@datx/utils'; - -if (parseInt(process.env.MOBX_VERSION || '0', 10) < 0) { - mobx.useMobx(false); -} - -// eslint-disable-next-line @typescript-eslint/no-var-requires -const mobxInstance = require('./mobx'); - -// eslint-disable-next-line @typescript-eslint/no-var-requires -const { clearAllCache } = require('../src/interceptors/cache'); - -if ('configure' in mobxInstance) { - mobxInstance.configure({ - enforceActions: 'observed', - // computedRequiresReaction: true, - }); -} - -beforeEach(() => { - clearAllCache(); -}); diff --git a/packages/datx-network/tsconfig.build.json b/packages/datx-network/tsconfig.build.json deleted file mode 100644 index 4a5f84a25..000000000 --- a/packages/datx-network/tsconfig.build.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "allowJs": false, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "declaration": true, - "experimentalDecorators": true, - "forceConsistentCasingInFileNames": true, - "sourceMap": true, - "inlineSources": true, - "lib": ["es2015", "es2016", "es2017", "dom"], - "module": "esnext", - "noImplicitAny": false, - "noImplicitReturns": true, - "noUnusedParameters": true, - "outDir": "./dist", - "strict": true, - "strictFunctionTypes": false, - "target": "es5" - }, - "exclude": ["node_modules", "examples"], - "include": ["src/**/*"] -} diff --git a/packages/datx-network/tsconfig.json b/packages/datx-network/tsconfig.json deleted file mode 100644 index 672dc912a..000000000 --- a/packages/datx-network/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.build.json", - "include": ["src/**/*", "test/**/*"], - "compilerOptions": { - "moduleResolution": "node", - "noUnusedLocals": true, - "esModuleInterop": true - } -} diff --git a/packages/datx-utils/.npmignore b/packages/datx-utils/.npmignore deleted file mode 100644 index efc2c91c7..000000000 --- a/packages/datx-utils/.npmignore +++ /dev/null @@ -1,10 +0,0 @@ -docs -src -test -tsconfig.json -tsconfig.build.json -tslint.json -coverage -.rpt2_cache -node_modules -rollup.config.js \ No newline at end of file diff --git a/packages/datx-utils/package.json b/packages/datx-utils/package.json deleted file mode 100644 index b930aefe8..000000000 --- a/packages/datx-utils/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "@datx/utils", - "version": "2.0.0", - "description": "DatX lib utils for mixins", - "main": "dist/index.cjs.js", - "module": "dist/index.esm.js", - "typings": "dist/index.d.ts", - "sideEffects": false, - "repository": { - "type": "git", - "url": "git+https://github.com/infinum/datx.git" - }, - "bugs": { - "url": "https://github.com/infinum/datx/issues" - }, - "homepage": "https://github.com/infinum/datx#readme", - "author": "Infinum JavaScript Team ", - "license": "MIT", - "keywords": [ - "datx", - "mobx" - ], - "devDependencies": { - "@rollup/plugin-commonjs": "^17.0.0", - "@rollup/plugin-node-resolve": "^11.1.0", - "@types/jest": "^26.0.20", - "@types/node": "^14.14.22", - "jest": "^26.6.3", - "mobx": "^6.0.4", - "rollup": "^2.38.0", - "rollup-plugin-exclude-dependencies-from-bundle": "^1.1.17", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.29.0", - "ts-jest": "^26.4.4", - "typescript": "^4.1.3" - }, - "scripts": { - "test": "jest --coverage", - "watch": "jest --watch --coverage", - "prepublish": "npm run build", - "build": "rollup -c" - }, - "jest": { - "coveragePathIgnorePatterns": [ - "/test/", - "/node_modules/" - ], - "moduleFileExtensions": [ - "ts", - "js" - ], - "testRegex": "test/(.*).test.ts$", - "globals": { - "ts-jest": { - "diagnostics": { - "warnOnly": true - } - } - }, - "preset": "ts-jest", - "testMatch": null, - "setupFilesAfterEnv": [ - "./test/setup.ts" - ] - } -} diff --git a/packages/datx-utils/rollup.config.js b/packages/datx-utils/rollup.config.js deleted file mode 100644 index c74990dd2..000000000 --- a/packages/datx-utils/rollup.config.js +++ /dev/null @@ -1,57 +0,0 @@ -import typescript from 'rollup-plugin-typescript2'; -import { terser } from 'rollup-plugin-terser'; -import commonjs from '@rollup/plugin-commonjs'; -import resolve from '@rollup/plugin-node-resolve'; -import excludeDependenciesFromBundle from 'rollup-plugin-exclude-dependencies-from-bundle'; - -import pkg from './package.json'; - -export default [ - { - input: './src/index.ts', - output: [{ file: pkg.main, format: 'cjs' }], - plugins: [ - resolve(), - commonjs(), - excludeDependenciesFromBundle(), - typescript({ - check: true, - typescript: require('typescript'), - tsconfig: './tsconfig.build.json', - }), - terser({ - toplevel: true, - compress: { - passes: 3, - }, - output: { - comments: false, - }, - }), - ], - onwarn(warning, rollupWarn) { - if (warning.code !== 'CIRCULAR_DEPENDENCY') { - rollupWarn(warning); - } - }, - }, - { - input: './src/index.ts', - output: [{ file: pkg.module, format: 'es' }], - plugins: [ - resolve(), - commonjs(), - excludeDependenciesFromBundle(), - typescript({ - check: true, - typescript: require('typescript'), - tsconfig: './tsconfig.build.json', - }), - ], - onwarn(warning, rollupWarn) { - if (warning.code !== 'CIRCULAR_DEPENDENCY') { - rollupWarn(warning); - } - }, - }, -]; diff --git a/packages/datx-utils/src/consts.ts b/packages/datx-utils/src/consts.ts deleted file mode 100644 index 2bda8d818..000000000 --- a/packages/datx-utils/src/consts.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const DEFAULT_TYPE = '__DEFAULT_TYPE__'; -export const META_FIELD = '__META__'; // Note: Hardcoded in interfaces/IRawModel -export const DATX_META: unique symbol = Symbol.for('datx administration'); diff --git a/packages/datx-utils/src/helpers.ts b/packages/datx-utils/src/helpers.ts deleted file mode 100644 index 59ddfeb92..000000000 --- a/packages/datx-utils/src/helpers.ts +++ /dev/null @@ -1,227 +0,0 @@ -import { DATX_META } from './consts'; -import { IObservableArray } from './interfaces/IMobX'; -import { mobx } from './mobx'; -import { IResponseHeaders } from './interfaces/IResponseHeaders'; - -export function isArrayLike(value: any): value is Array | IObservableArray { - return Array.isArray(value) || mobx.isObservableArray(value); -} - -export function reducePrototypeChain( - obj: U, - reduceFn: (state: T, item: U) => T, - initialValue: T, -): T { - let value = initialValue; - let model = obj; - - while (model) { - value = reduceFn(value, model); - model = Object.getPrototypeOf(model); - } - - return value; -} - -/** - * Map a single item or an array of items - * - * @export - * @template T - * @template U - * @param {(T|Array)} data Data to iterate over - * @param {(item: T) => U} fn Function called for every data item - * @returns {(U|Array|null)} Return value of the callback function - */ -export function mapItems(data: Array, fn: (item: T) => U): Array; -export function mapItems(data: T, fn: (item: T) => U): U | null; -export function mapItems(data: T | Array, fn: (item: T) => U): U | Array | null { - if (isArrayLike(data)) { - return (data as Array).map((item) => fn(item)); - } - - return data === null ? null : fn(data as T); -} - -function undefinedGetter(): any { - return undefined; -} - -function defaultSetter(): void { - throw new Error('The setter is not defined for this property'); -} - -export function getMetaObj(obj: Record): Record { - if (!Object.prototype.hasOwnProperty.call(obj, DATX_META)) { - Object.defineProperty(obj, DATX_META, { - configurable: false, - enumerable: false, - value: mobx.observable.object({}, {}, { deep: false }), - }); - } - // @ts-ignore https://github.com/microsoft/TypeScript/issues/1863 - return obj[DATX_META]; -} - -export function setMeta(obj: Record, key: string, value: T): void { - const meta = getMetaObj(obj); - - mobx.set(meta, key, value); -} - -export function getMeta( - obj: Record, - key: string, - defaultValue: T, - includeChain?: boolean, - mergeChain?: boolean, -): T; -export function getMeta( - obj: Record, - key: string, - defaultValue?: T, - includeChain?: boolean, - mergeChain?: boolean, -): T | undefined; -export function getMeta( - obj: Record, - key: string, - defaultValue?: T, - includeChain?: boolean, - mergeChain?: boolean, -): T | undefined { - if (includeChain) { - return ( - reducePrototypeChain( - obj, - (value, model): T => { - const meta = getMeta(model, key, mergeChain ? {} : undefined); - - return mergeChain ? Object.assign({}, meta, value) : ((value || meta) as T); - }, - (mergeChain ? {} : undefined) as T, - ) || defaultValue - ); - } - const meta = getMetaObj(obj); - - return meta[key] === undefined ? defaultValue : meta[key]; -} - -export function mergeMeta( - obj: Record, - newMeta: Record, -): Record { - const meta = getMetaObj(obj); - - Object.assign(meta, newMeta); - - return meta; -} - -type Getter = () => T; -type Setter = (value: T) => void; - -/** - * Add a computed property to an observable object - * - * @export - * @param {Record} obj Observable object - * @param {string} key Property to add - * @param {() => any} getter Getter function - * @param {(value: any) => void} [setter] Setter function - */ -export function assignComputed( - obj: Record, - key: string, - getter: Getter = undefinedGetter, - setter: Setter = defaultSetter, -): void { - // if (isObservable(obj)) { - // throw new Error(`[datx exception] This object shouldn't be an observable`); - // } - - const computedObj = mobx.extendObservable( - {}, - { - get getter() { - return getter.call(obj); - }, - }, - ); - - Object.defineProperty(obj, key, { - get() { - return computedObj.getter; - }, - set(val: T) { - setter.call(obj, val); - }, - enumerable: true, - configurable: true, - }); -} - -export function error(...args: Array): void { - // eslint-disable-next-line no-console - console.error(`[datx error]`, ...args); -} - -export function warn(...args: Array): void { - if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'test') { - return; - } - - // eslint-disable-next-line no-console - console.warn(`[datx warning]`, ...args); -} - -export function deprecated(...args: Array): void { - if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'test') { - return; - } - - // eslint-disable-next-line no-console - console.warn(`[datx deprecated]`, ...args); -} - -export function info(...args: Array): void { - if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'test') { - return; - } - - // eslint-disable-next-line no-console - console.info(`[datx info]`, ...args); -} - -export function replaceInArray(arr: Array, data: Array): Array { - if (mobx.isObservableArray(arr)) { - return (arr as IObservableArray).replace(data); - } else { - arr.length = 0; - arr.push(...data); - return arr; - } -} - -export function removeFromArray(arr: Array, item: T): Array { - if (mobx.isObservableArray(arr)) { - return (arr as IObservableArray).remove(item); - } else { - const pos = arr.indexOf(item); - return arr.splice(pos, 1); - } -} - -export class Headers implements IResponseHeaders { - constructor(private headers: Array<[string, string]>) {} - - public get(name: string): string | null { - const matches = this.headers.filter(([key, _value]) => key === name); - return matches.map(([_key, value]) => value).join(',') || null; - } - - public forEach(cb: (value: string, key: string) => void): void { - this.headers.forEach(([key, value]) => cb(value, key)); - } -} diff --git a/packages/datx-utils/src/index.ts b/packages/datx-utils/src/index.ts deleted file mode 100644 index 92ad69642..000000000 --- a/packages/datx-utils/src/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -export { DEFAULT_TYPE, META_FIELD } from './consts'; - -export { IRawModel } from './interfaces/IRawModel'; -export { IResponseHeaders } from './interfaces/IResponseHeaders'; - -export { - assignComputed, - mapItems, - error, - warn, - deprecated, - info, - getMeta, - setMeta, - mergeMeta, - getMetaObj, - isArrayLike, - replaceInArray, - removeFromArray, - Headers, -} from './helpers'; - -export { mobx } from './mobx'; - -export * from './interfaces/IMobX'; diff --git a/packages/datx-utils/src/interfaces/IMobX.ts b/packages/datx-utils/src/interfaces/IMobX.ts deleted file mode 100644 index 661f7c4aa..000000000 --- a/packages/datx-utils/src/interfaces/IMobX.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* eslint-disable @typescript-eslint/no-empty-interface */ - -export interface IObservable {} - -export interface IObservableArray extends Array { - replace(data: Array): Array; - remove(data: T): Array; -} - -interface IArrayBaseChange { - object: IObservableArray; - observableKind: "array"; - debugObjectName: string; - index: number; -} - -export interface IArraySplice extends IArrayBaseChange { - type: "splice"; - added: T[]; - addedCount: number; - removed: T[]; - removedCount: number; -} -export interface IArrayChange extends IArrayBaseChange { - type: "change"; - newValue: T; - index: number; -} - -export interface IReactionDisposer { - (): void; -} diff --git a/packages/datx-utils/src/interfaces/IRawModel.ts b/packages/datx-utils/src/interfaces/IRawModel.ts deleted file mode 100644 index efa365d0b..000000000 --- a/packages/datx-utils/src/interfaces/IRawModel.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IRawModel extends Record { - __META__?: Record; -} diff --git a/packages/datx-utils/src/interfaces/IResponseHeaders.ts b/packages/datx-utils/src/interfaces/IResponseHeaders.ts deleted file mode 100644 index 6ccb81efa..000000000 --- a/packages/datx-utils/src/interfaces/IResponseHeaders.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface IResponseHeaders { - get(name: string): string | null; - forEach(cb: (value: string, key: string) => void): void; -} diff --git a/packages/datx-utils/src/mobx.ts b/packages/datx-utils/src/mobx.ts deleted file mode 100644 index c7904ab56..000000000 --- a/packages/datx-utils/src/mobx.ts +++ /dev/null @@ -1,147 +0,0 @@ -import { warn } from "./helpers"; -import { IObservableArray, IReactionDisposer } from "./interfaces/IMobX"; - -const noop = (): void => { - // Nothing to do -}; - -const noopMobX = { - autorun(fn: Function): IReactionDisposer { - fn(); // Call it the first time - return noop; - }, - - isObservableArray(_obj: any): boolean { - return false; - }, - - set(obj: Record, key: string | Record, value?: any): void { - if (typeof key === 'string') { - obj[key] = value; - } else { - Object.assign(obj, key); - } - }, - - extendObservable(obj: T, prop: U): T & U { - const desc = Object.getOwnPropertyDescriptors(prop); - return Object.defineProperties(obj, desc); - }, - - observable(_obj: T, ..._params: Array): void { - // return obj; - }, - - computed(...params: Array): any { - return params[2]; - }, - - action(...params: Array): any { - if (params.length === 1) { - return params[0]; - } - return params[2]; - }, - - makeObservable(_target: any, _annotations?: any): void { - // noop by default - }, - - runInAction(fn: Function): void { - fn(); - }, - - toJS(val: T): T { - return val; - }, - - reaction(data: Function, action: Function): IReactionDisposer { - data(); - action(); - return noop; - }, - - intercept(target: T, propertyName: keyof T | Function, _interceptor?: Function): IReactionDisposer { - Object.freeze(typeof propertyName === 'string' ? target[propertyName] : target); - return noop; - }, -}; - -// @ts-ignore -noopMobX.observable.object = (obj: T): T => obj; - -// @ts-ignore -noopMobX.observable.array = (obj: T): T => obj; - -class MobXProxy { - private _useRealMobX = true; - private access = false; - private hasMobX = false; - - constructor() { - try { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const mobx = require('mobx'); - this.hasMobX = Boolean(mobx?.observable); - } catch { - // Nothing to do - } - - // eslint-disable-next-line @typescript-eslint/no-this-alias - const mobxProxyInstance = this; - - Object.keys(noopMobX).forEach((key) => { - if (key in this) { - return; - } - Object.defineProperty(this, key, { - get() { - /* eslint-disable @typescript-eslint/no-var-requires */ - if (!mobxProxyInstance.hasMobX && mobxProxyInstance._useRealMobX) { - warn('MobX not installed. Falling back to the static approach. Import `datx/disable-mobx` before the first `datx` import to disable this warning'); - } - - mobxProxyInstance.access = true; - if (mobxProxyInstance.useRealMobX) { - return require('mobx')[key]; - } - // @ts-ignore - return noopMobX[key]; - } - }); - }); - } - - useMobx(enabled: boolean): void { - if (this.access) { - throw new Error('[datx] MobX was already used. Please move this function call to somewhere earlier.'); - } - this._useRealMobX = enabled; - } - - public get useRealMobX(): boolean { - return this._useRealMobX && this.hasMobX; - } - - public get makeObservable(): any { - if (this.useRealMobX) { - try { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const mobx = require('mobx'); - return mobx.makeObservable || noopMobX.makeObservable; - } catch { - // no mobx installed - return noopMobX.makeObservable; - } - } - return noopMobX.makeObservable; - } -} - -type TObservableDecorator = (obj: T, ..._params: Array) => void; -type TObservable = { - object: (obj: T, decorators?: object, opts?: object) => T; - array: (obj: Array, decorators?: object, opts?: object) => IObservableArray; -} & TObservableDecorator; - -export const mobx = new MobXProxy() as unknown as typeof noopMobX & { useRealMobX: boolean, useMobx: (enabled: boolean) => void, observable: TObservable }; \ No newline at end of file diff --git a/packages/datx-utils/test/basic.test.ts b/packages/datx-utils/test/basic.test.ts deleted file mode 100644 index 8641097e2..000000000 --- a/packages/datx-utils/test/basic.test.ts +++ /dev/null @@ -1,293 +0,0 @@ -import testMobx from './mobx'; - -import { assignComputed, mapItems, setMeta, getMeta, isArrayLike, mobx, replaceInArray, removeFromArray } from '../src'; - -// @ts-ignore -testMobx.configure({ enforceActions: 'observed' }); - -describe('@datx/utils', () => { - describe('mapItems', () => { - it('should work for null', () => { - expect(mapItems(null, () => 1)).toBe(null); - }); - - it('should work for a single item', () => { - expect(mapItems(1, (i) => i * 2)).toBe(2); - }); - - it('should work for an array', () => { - expect(mapItems([1, 2], (i) => i * 2)).toEqual([2, 4]); - }); - }); - - describe('assignComputed', () => { - it('should set a computed prop', () => { - const expectedCount = mobx.useRealMobX ? 2 : 1; - const obj1 = {}; - const obj2 = {}; - - const data = testMobx.observable.object({ - data: 1, - }); - - assignComputed(obj1, 'foo', () => 1); - expect(Object.prototype.propertyIsEnumerable.call(obj1, 'foo')).toBe(true); - // @ts-ignore - expect(testMobx.isComputedProp(obj1, 'foo')).toBe(false); - - assignComputed(obj2, 'foo', () => 2); - expect(Object.prototype.propertyIsEnumerable.call(obj2, 'foo')).toBe(true); - assignComputed( - obj1, - 'bar', - () => obj2, - // eslint-disable-next-line @typescript-eslint/no-empty-function - () => {}, - ); - assignComputed( - obj2, - 'bar', - () => obj1, - // eslint-disable-next-line @typescript-eslint/no-empty-function - () => {}, - ); - assignComputed( - obj1, - 'baz', - () => data.data, - (a) => { - data.data = a; - }, - ); - - // @ts-ignore - expect(obj1.foo).toBe(1); - - // @ts-ignore - expect(obj2.foo).toBe(2); - - // @ts-ignore - expect(obj1.bar).toBe(obj2); - - // @ts-ignore - expect(obj2.bar).toBe(obj1); - - // @ts-ignore - expect(obj1.baz).toBe(1); - // @ts-ignore - obj1.baz = 6; - // @ts-ignore - expect(obj1.baz).toBe(6); - expect(data.data).toBe(6); - - let autorunCounter1 = 0; - let autorunCounter2 = 0; - let autorunCounter3 = 0; - let expectedData = 6; - - testMobx.autorun(() => { - autorunCounter1++; - // @ts-ignore - expect(obj1.baz).toBe(expectedData); - }); - - testMobx.autorun(() => { - autorunCounter2++; - // @ts-ignore - expect(obj2.bar.baz).toBe(expectedData); - }); - - testMobx.autorun(() => { - autorunCounter3++; - // @ts-ignore - expect(data.data).toBe(expectedData); - }); - - testMobx.runInAction(() => { - expectedData = 42; - data.data = 42; - }); - - expect(autorunCounter3).toBe(expectedCount); - expect(autorunCounter1).toBe(expectedCount); - expect(autorunCounter2).toBe(expectedCount); - }); - - it('should handle dynamic computed props', () => { - let counter = 0; - const expectedCount1 = mobx.useRealMobX ? 2 : 106; - const expectedCount2 = mobx.useRealMobX ? 2 : 1; - - class Data { - @testMobx.observable - public data = 1; - - public foo!: number; - - public bar!: number; - - constructor() { - mobx.makeObservable(this); - assignComputed( - this, - 'foo', - () => { - counter++; - - return this.data; - }, - (val) => (this.data = val), - ); - assignComputed( - this, - 'bar', - () => -this.foo, - (val) => (this.foo = -val), - ); - } - } - const data = new Data(); - - testMobx.autorun(() => { - // @ts-ignore - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const tmp = data.foo; - }); - - expect(data.foo).toBe(1); - expect(data.bar).toBe(-1); - - testMobx.runInAction(() => { - data.bar--; - }); - expect(data.foo).toBe(2); - expect(data.bar).toBe(-2); - - for (let i = 0; i < 100; i++) { - expect(data.foo).toBe(2); - } - - expect(counter).toBe(expectedCount1); - - let autorunCounter = 0; - let expectedData = 2; - - testMobx.autorun(() => { - autorunCounter++; - expect(data.foo).toBe(expectedData); - }); - - testMobx.runInAction(() => { - expectedData = 3; - data.foo++; - }); - - expect(autorunCounter).toBe(expectedCount2); - expect(Object.prototype.propertyIsEnumerable.call(data, 'foo')).toBe(true); - }); - - it('should handle computed reassignment', () => { - const obj: any = {}; - - assignComputed(obj, 'foo', () => 1); - assignComputed(obj, 'foo', () => 2); - - expect(obj['foo']).toBe(2); - }); - }); - - describe('meta getter/setter', () => { - it('should save the exact data, not be enumerable', () => { - const obj = {}; - const metaData = { foo: 1 }; - - setMeta(obj, 'test', metaData); - const savedMeta = getMeta(obj, 'test'); - - expect(savedMeta).toBe(metaData); - expect(Object.keys(obj)).toEqual([]); - }); - - it('should work for chains', () => { - const obj1 = {}; - const obj2 = Object.create(obj1); - const obj3 = Object.create(obj2); - const metaData = { foo: 1 }; - - setMeta(obj1, 'test', metaData); - - expect(getMeta(obj3, 'test', {}, true)).toBe(metaData); - }); - - it('should work for chain merging', () => { - const obj1 = {}; - const obj2 = Object.create(obj1); - const obj3 = Object.create(obj2); - - setMeta(obj1, 'test', { foo: 1 }); - setMeta(obj2, 'test', { bar: 2 }); - setMeta(obj3, 'test', { baz: 3 }); - - expect(getMeta(obj3, 'test', {}, true)).toEqual({ baz: 3 }); - expect(getMeta(obj3, 'test', {}, true, true)).toEqual({ foo: 1, bar: 2, baz: 3 }); - }); - - it('should work with default data', () => { - const obj = {}; - const metaData = { foo: 1 }; - - expect(getMeta(obj, 'test', metaData)).toBe(metaData); - expect(getMeta(obj, 'test')).toBe(undefined); - expect(Object.keys(obj)).toEqual([]); - }); - }); - - describe('isArrayLike', () => { - it('should work with regular arrays', () => { - expect(isArrayLike([])).toBe(true); - expect(isArrayLike([1, true, 'three', {}])).toBe(true); - }); - - it('should work with observable arrays', () => { - expect(isArrayLike(testMobx.observable.array([]))).toBe(true); - expect(isArrayLike(testMobx.observable.array([1, true, 'three', {}]))).toBe(true); - }); - - it('should fail for sets', () => { - expect(isArrayLike(new Set([]))).toBe(false); - expect(isArrayLike(new Set([1, true, 'three', {}]))).toBe(false); - }); - - it('should fail for other values', () => { - expect(isArrayLike({})).toBe(false); - expect(isArrayLike({ length: 3 })).toBe(false); - expect(isArrayLike(true)).toBe(false); - expect(isArrayLike('array')).toBe(false); - expect(isArrayLike(Symbol('test'))).toBe(false); - }); - }); - - describe('replaceInArray', () => { - it('should replace the values', () => { - const test = [{}, {}, {}]; - const newTest = [{}, {}, {}]; - - replaceInArray(test, newTest); - - expect(test[0]).toBe(newTest[0]); - expect(test.length).toBe(newTest.length); - }); - }); - - describe('removeFromArray', () => { - it('should remove the specific value', () => { - const test = [{}, {}, {}]; - const toRemove = test[1]; - - removeFromArray(test, toRemove); - - expect(test).not.toContain(toRemove); - expect(test.length).toBe(2); - }); - }); -}); diff --git a/packages/datx-utils/test/mobx.ts b/packages/datx-utils/test/mobx.ts deleted file mode 100644 index 4a6f4c1c2..000000000 --- a/packages/datx-utils/test/mobx.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { mobx } from '../src'; - -let testMobx = mobx; - -Object.assign(mobx, { - configure() { - // noop - }, - isComputedProp(_val: any): boolean { - return false; - } -}); - -if (!['-1', '0'].includes(process.env.MOBX_VERSION || '0')) { - testMobx = require('mobx'); - testMobx.makeObservable = testMobx.makeObservable || mobx.makeObservable; -} - -export default testMobx; diff --git a/packages/datx-utils/test/setup.ts b/packages/datx-utils/test/setup.ts deleted file mode 100644 index e6f2e2295..000000000 --- a/packages/datx-utils/test/setup.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { mobx } from '@datx/utils'; - -if (parseInt(process.env.MOBX_VERSION || '0', 10) < 0) { - mobx.useMobx(false); -} \ No newline at end of file diff --git a/packages/datx-utils/tsconfig.build.json b/packages/datx-utils/tsconfig.build.json deleted file mode 100644 index d955bf24b..000000000 --- a/packages/datx-utils/tsconfig.build.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "compilerOptions": { - "allowJs": false, - "alwaysStrict": true, - "declaration": true, - "experimentalDecorators": true, - "forceConsistentCasingInFileNames": true, - "sourceMap": true, - "inlineSources": true, - "lib": ["es2015", "es2016", "es2017"], - "module": "esnext", - "outDir": "./dist", - "strict": true, - "target": "es5" - }, - "exclude": ["node_modules", "examples"], - "include": ["src/**/*"] -} diff --git a/packages/datx-utils/tsconfig.json b/packages/datx-utils/tsconfig.json deleted file mode 100644 index f6002d9ac..000000000 --- a/packages/datx-utils/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.build.json", - "include": ["src/**/*", "test/**/*"], - "compilerOptions": { - "moduleResolution": "node", - "noUnusedLocals": true - } -} diff --git a/packages/datx/README.md b/packages/datx/README.md index 84b71da94..4d8f5b78b 100644 --- a/packages/datx/README.md +++ b/packages/datx/README.md @@ -2,106 +2,20 @@ DatX is an opinionated JS/TS data store. It features support for simple property definition, references to other models and first-class TypeScript support. -By default, it uses the [MobX](https://mobx.js.org/) state management library, but this is optional and can be used as a pure JS library. - -*** - -## Basic usage - -```typescript -import { Collection, Model, Attribute } from '@datx/core'; -import { computed } from 'mobx'; - -class Person extends Model { - public static type = 'person'; // Unique name of the model class - - @Attribute() - public name!: string; // A normal property without a default value - - @Attribute() - public surname!: string; - - @Attribute({ toOne: Person }) - public spouse?: Person; // A reference to a Person model - - @computed - public get fullName() { // Standard MobX computed props - return `${this.name} ${this.surname}`; - } -} - -class AppData extends Collection { - public static types = [Person]; // A list of models available in the collection -} - -const store = new AppData(); -const john = store.add(new Person({ name: 'John', surname: 'Smith' })); // Add a model instance to the store -const jane = store.add({ name: 'Jane', surname: 'Smith', spouse: john }, Person); // Add a model to the store -``` - -## Getting started - -```bash -npm install --save @datx/core -``` - - * [Installation](https://datx.dev/docs/getting-started/installation) - * [Defining models](https://datx.dev/docs/getting-started/defining-models) - * [References](https://datx.dev/docs/getting-started/references) - * [Configuring the collection](https://datx.dev/docs/getting-started/configuring-the-collection) - * [Using the collection](https://datx.dev/docs/getting-started/using-the-collection) - * [Persisting data locally](https://datx.dev/docs/getting-started/persisting-data-locally) - -### Polyfilling - -The lib makes use of the following features that are not yet available everywhere. Based on your browser support, you might want to polyfill them: - - * [Symbol.for](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) - * [Object.assign](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - * [Array.prototype.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find) - -[How to add the polyfills](https://datx.dev/docs/troubleshooting/known-issues#the-library-doesnt-work-in-internet-explorer-11). - -## Concepts - -The library contains two main classes - [`Model`](https://datx.dev/docs/api-reference/model) and [`Collection`](https://datx.dev/docs/api-reference/collection). - -A collection contains models of any kind (they should however be listed in the `types` property), while a model can be in a single collection (but doesn't need to be in any). - -Models also include some useful [methods](https://datx.dev/docs/mixins/with-actions) and [properties](https://datx.dev/docs/mixins/with-meta), but if they're in collision with your data/logic, you can use a [`PureModel`](https://datx.dev/docs/api-reference/pure-model) class. - -## Mixins - -Mixins are additional plugins that can enhance the regular models and collections. Available mixins: -* [`withActions`](https://datx.dev/docs/mixins/with-actions) (model) - Adds some helper methods to the model - already included in the `Model` class, but not in the `PureModel` class -* [`withMeta`](https://datx.dev/docs/mixins/with-meta) (model) - Adds some helpful meta data to the model - already included in the `Model` class, but not in the `PureModel` class -* [`withPatches`](https://datx.dev/docs/mixins/with-patches) (model, collection) - Adds patch support to models and collections -* [`datx-jsonapi`](https://datx.dev/docs/mixins/jsonapi-mixin) (model, collection and view) - Adds the [JSON API](https://jsonapi.org/) features to the model, collection and view - -To check out what are the planed future mixins, check out [the issues](https://github.com/infinum/datx/labels/mixins). - -Want to make your own mixin? Check out [the guide](https://datx.dev/docs/mixins/building-your-own-mixin). - -## API reference - - * [Collection](https://datx.dev/docs/api-reference/collection) - * [Model](https://datx.dev/docs/api-reference/model) - * [View](https://datx.dev/docs/api-reference/view) - * [prop](https://datx.dev/docs/api-reference/prop) - * [PureModel](https://datx.dev/docs/api-reference/pure-model) - * [CompatModel](https://datx.dev/docs/migration-guide/compat-model) - * [CompatCollection](https://datx.dev/docs/migration-guide/compat-collection) - * [Model utils](https://datx.dev/docs/api-reference/model-utils) - * [Lib utils](https://datx.dev/docs/api-reference/lib-utils) - * [TypeScript interfaces](https://datx.dev/docs/api-reference/typescript-interfaces) - -## Troubleshooting - -Having issues with the library? Check out the [troubleshooting](https://datx.dev/docs/troubleshooting/known-issues) page or [open](https://github.com/infinum/datx/issues/new) an issue. - -*** - -[![Build Status](https://travis-ci.org/infinum/datx.svg?branch=master)](https://travis-ci.org/infinum/datx) +# TODOs + +- [x] Schema support +- [x] Schema validation +- [x] Schema typings +- [x] Schema parsing/serialization +- [x] Custom types +- [x] Circular types +- [x] Collection / cyclical serialization +- [ ] Custom transformers +- [x] Optional custom types +- [ ] Polymorphic types +- [ ] Property mapping +- [ ] Efficient snapshots ## License diff --git a/packages/datx/package.json b/packages/datx/package.json index c4b494c79..834b2c4b9 100644 --- a/packages/datx/package.json +++ b/packages/datx/package.json @@ -1,11 +1,10 @@ { - "name": "@datx/core", - "version": "2.0.4", + "name": "@datx/schema", + "version": "0.0.1", "description": "A MobX data store", - "main": "dist/index.cjs.js", - "module": "dist/index.esm.js", + "main": "dist/index.js", + "module": "dist/index.mjs", "typings": "dist/index.d.ts", - "sideEffects": false, "repository": { "type": "git", "url": "git+https://github.com/infinum/datx.git" @@ -17,22 +16,37 @@ "author": "Infinum JavaScript Team ", "license": "MIT", "devDependencies": { - "@rollup/plugin-commonjs": "^17.0.0", - "@rollup/plugin-node-resolve": "^11.1.0", - "@types/jest": "^26.0.20", - "@types/node": "^14.14.22", - "jest": "^26.6.3", - "rollup": "^2.38.0", - "rollup-plugin-exclude-dependencies-from-bundle": "^1.1.17", - "rollup-plugin-typescript2": "^0.29.0", - "ts-jest": "^26.4.4", - "typescript": "^4.1.3" + "@swc/core": "^1.3.36", + "@types/jest": "^29.4.0", + "@types/node": "^18.14.2", + "jest": "^29.4.3", + "jest-environment-jsdom": "^29.4.3", + "ts-jest": "^29.0.5", + "tslib": "~2.5.0", + "tsup": "^6.6.3", + "typescript": "~4.9.5" + }, + "dependencies": { + "type-fest": "^3.6.1" }, "scripts": { "test": "jest --coverage", "watch": "jest --watch --coverage", "prepublish": "npm run build", - "build": "rollup -c" + "build": "tsup src/index.ts src/min.ts" + }, + "tsup": { + "clean": true, + "dts": true, + "format": [ + "cjs", + "esm" + ], + "tsconfig": "tsconfig.build.json", + "platform": "neutral", + "splitting": false, + "treeshake": true, + "minify": true }, "jest": { "coveragePathIgnorePatterns": [ @@ -43,21 +57,22 @@ "ts", "js" ], - "testRegex": "test/(.*).test.ts$", - "globals": { - "ts-jest": { - "diagnostics": { - "warnOnly": true + "testEnvironment": "jsdom", + "testRegex": "(.*).test.ts$", + "transform": { + "(.*).test.ts$": [ + "ts-jest", + { + "diagnostics": { + "warnOnly": true + } } - } + ] }, "preset": "ts-jest", "testMatch": null, "setupFilesAfterEnv": [ "./test/setup.ts" ] - }, - "dependencies": { - "@datx/utils": "^2.0.0" } } diff --git a/packages/datx/rollup.config.js b/packages/datx/rollup.config.js deleted file mode 100644 index 82e256012..000000000 --- a/packages/datx/rollup.config.js +++ /dev/null @@ -1,85 +0,0 @@ -import typescript from 'rollup-plugin-typescript2'; -import { terser } from 'rollup-plugin-terser'; -import commonjs from '@rollup/plugin-commonjs'; -import resolve from '@rollup/plugin-node-resolve'; -import excludeDependenciesFromBundle from 'rollup-plugin-exclude-dependencies-from-bundle'; - -import pkg from './package.json'; - -export default [ - { - input: './src/index.ts', - output: [{ file: pkg.main, format: 'cjs' }], - plugins: [ - resolve(), - commonjs(), - excludeDependenciesFromBundle(), - typescript({ - check: true, - typescript: require('typescript'), - tsconfig: './tsconfig.build.json', - }), - terser({ - toplevel: true, - compress: { - passes: 3, - }, - output: { - comments: false, - }, - }), - ], - onwarn(warning, rollupWarn) { - if (warning.code !== 'CIRCULAR_DEPENDENCY') { - rollupWarn(warning); - } - }, - }, - { - input: './src/index.ts', - output: [{ file: pkg.module, format: 'es' }], - plugins: [ - resolve(), - commonjs(), - excludeDependenciesFromBundle(), - typescript({ - check: true, - typescript: require('typescript'), - tsconfig: './tsconfig.build.json', - }), - ], - onwarn(warning, rollupWarn) { - if (warning.code !== 'CIRCULAR_DEPENDENCY') { - rollupWarn(warning); - } - }, - }, - { - input: './src/disable-mobx.ts', - output: [{ file: './disable-mobx.js', format: 'cjs' }], - plugins: [ - resolve(), - commonjs(), - excludeDependenciesFromBundle(), - typescript({ - check: true, - typescript: require('typescript'), - tsconfig: './tsconfig.mobx.json', - }), - terser({ - toplevel: true, - compress: { - passes: 3, - }, - output: { - comments: false, - }, - }), - ], - onwarn(warning, rollupWarn) { - if (warning.code !== 'CIRCULAR_DEPENDENCY') { - rollupWarn(warning); - } - }, - }, -]; diff --git a/packages/datx/src/Attribute.ts b/packages/datx/src/Attribute.ts deleted file mode 100644 index 38b2ed669..000000000 --- a/packages/datx/src/Attribute.ts +++ /dev/null @@ -1,232 +0,0 @@ -import { getMeta, setMeta, deprecated } from '@datx/utils'; - -import { PureModel } from './PureModel'; -import { IType } from './interfaces/IType'; -import { MetaClassField } from './enums/MetaClassField'; -import { ReferenceType } from './enums/ReferenceType'; -import { getModelType, isModelReference } from './helpers/model/utils'; -import { IModelConstructor } from './interfaces/IModelConstructor'; -import { IIdentifier } from './interfaces/IIdentifier'; -import { PureCollection } from './PureCollection'; -import { isModel } from './helpers/mixin'; - -export function getClass(obj: T): typeof PureModel { - return (typeof obj === 'function' ? obj : obj.constructor) as typeof PureModel; -} - -function prepareDecorator(_obj: T, _key: string, opts?: object): void { - if (opts && 'initializer' in opts) { - opts['initializer'] = undefined; - - // Babel 7 + Decorators fix - // Required to prevent the initializerDefineProperty call in babel-runtime - // If initializer is undefined, the descriptor will be null and therefore - // the initializerDefineProperty will be skipped - - // https://github.com/babel/babel/blob/3aaafae053fa75febb3aa45d45b6f00646e30ba4/packages/babel-helpers/src/helpers.js#L1019 - } -} - -type BasicRefModel = typeof PureModel | IType; -export type FunctionRefModel = ( - data: object, - parentModel: PureModel, - key: string, - collection?: PureCollection, -) => BasicRefModel; -export type ParsedRefModel = IType | FunctionRefModel; -export type DynamicRefModel = BasicRefModel | FunctionRefModel; - -interface IAttributeFieldOptions { - defaultValue?: any; - isIdentifier?: true; - isType?: true; - parse?: (value: any, data: object) => any; - serialize?: (value: any, data: object) => any; -} - -interface IAttributeNoReference { - toOne?: undefined; - toOneOrMany?: undefined; - toMany?: undefined; - referenceProperty?: undefined; -} - -interface IAttributeToOne { - toOne: DynamicRefModel; - toOneOrMany?: undefined; - toMany?: undefined; - referenceProperty?: undefined; -} - -interface IAttributeToOneOrMany { - toOne?: undefined; - toOneOrMany: DynamicRefModel; - toMany?: undefined; - referenceProperty?: undefined; -} - -interface IAttributeToMany { - toOne?: undefined; - toOneOrMany?: undefined; - toMany: DynamicRefModel; - referenceProperty?: string; -} - -type IAttributeOptions = IAttributeFieldOptions & - (IAttributeNoReference | IAttributeToOne | IAttributeToOneOrMany | IAttributeToMany); - -export interface IReferenceDefinition { - type: ReferenceType; - model: ParsedRefModel; - property?: string; -} - -export interface IFieldDefinition { - referenceDef: IReferenceDefinition | false; - defaultValue?: any; -} - -function parseModelRef(ref: DynamicRefModel): ParsedRefModel { - if (ref instanceof PureModel || isModel(ref) || isModelReference(ref)) { - return getModelType(ref); - } - - if (typeof ref === 'string' || typeof ref === 'number') { - return ref; - } - - return ref as FunctionRefModel; -} - -function getReferenceDef( - toOne?: DynamicRefModel, - toOneOrMany?: DynamicRefModel, - toMany?: DynamicRefModel, - referenceProperty?: string, -): IReferenceDefinition | false { - if (toOne) { - return { - type: ReferenceType.TO_ONE, - model: parseModelRef(toOne), - }; - } - - if (toOneOrMany) { - return { - type: ReferenceType.TO_ONE_OR_MANY, - model: parseModelRef(toOneOrMany), - }; - } - - if (toMany) { - return { - type: ReferenceType.TO_MANY, - model: parseModelRef(toMany), - property: referenceProperty, - }; - } - - return false; -} - -/** - * Set a model attribute as tracked - */ -export function Attribute({ - defaultValue, - isIdentifier, - isType, - toOne, - toOneOrMany, - toMany, - referenceProperty, - parse, - serialize, -}: IAttributeOptions = {}) { - return (obj: T, key: string, opts?: object): void => { - prepareDecorator(obj, key, opts); - const modelClass = getClass(obj); - - const modelClassFields = getMeta>( - modelClass, - MetaClassField.Fields, - {}, - ); - - modelClassFields[key] = { - referenceDef: getReferenceDef(toOne, toOneOrMany, toMany, referenceProperty), - defaultValue, - }; - setMeta(modelClass, MetaClassField.Fields, modelClassFields); - setMeta(modelClass, `${MetaClassField.MapParse}_${key}`, parse); - setMeta(modelClass, `${MetaClassField.MapSerialize}_${key}`, serialize); - - if (isIdentifier) { - setMeta(modelClass, MetaClassField.IdField, key); - } - - if (isType) { - setMeta(modelClass, MetaClassField.TypeField, key); - } - }; -} - -export function ViewAttribute( - modelType: IModelConstructor | IType, - options: { - sortMethod?: string | ((item: TModel) => any); - models?: Array; - unique?: boolean; - mixins?: Array<(view: any) => any>; - } = {}, -) { - return (obj: TCollection, key: string, opts?: object): void => { - prepareDecorator(obj, key, opts); - if (!Object.hasOwnProperty.call(obj.constructor, 'views')) { - obj.constructor['views'] = {}; - } - obj.constructor['views'][key] = Object.assign( - { - modelType, - }, - options, - ); - }; -} - -const propDeprecation = '@prop was deprecated, use @Attribute instead'; - -// Compatibility implementation -function propFn(obj: T, key: string, opts?: object): void { - deprecated(propDeprecation); - Attribute()(obj, key, opts); -} - -export const prop = Object.assign(propFn, { - defaultValue(value: any) { - deprecated(propDeprecation); - return Attribute({ defaultValue: value }); - }, - - toOne(refModel: typeof PureModel | IType) { - deprecated(propDeprecation); - return Attribute({ toOne: refModel }); - }, - - toMany(refModel: typeof PureModel | IType, property?: string) { - deprecated(propDeprecation); - return Attribute({ toMany: refModel, referenceProperty: property }); - }, - - toOneOrMany(refModel: typeof PureModel | IType) { - deprecated(propDeprecation); - return Attribute({ toOneOrMany: refModel }); - }, - - identifier: Attribute({ isIdentifier: true }), - - type: Attribute({ isType: true }), -}); - -export const view = ViewAttribute; diff --git a/packages/datx/src/Client.ts b/packages/datx/src/Client.ts new file mode 100644 index 000000000..f77bb060d --- /dev/null +++ b/packages/datx/src/Client.ts @@ -0,0 +1,21 @@ +// import { IResource } from './interfaces/IResource'; +// import { ISchemaData } from './interfaces/ISchemaData'; +// import { Schema } from './Schema'; + +// class QueryBuilder, TData extends ISchemaData> { +// constructor(public readonly type: TSchema) {} + +// getWhere(_query: any): Array> { +// return []; +// } + +// get(_id: string | number): IResource | null { +// return null; +// } +// } + +// export class Client { +// for, TData extends ISchemaData>(schema: TSchema) { +// return new QueryBuilder(schema); +// } +// } diff --git a/packages/datx/src/Collection.ts b/packages/datx/src/Collection.ts index ad6c93dc2..170b07de1 100644 --- a/packages/datx/src/Collection.ts +++ b/packages/datx/src/Collection.ts @@ -1,8 +1,68 @@ -import { withPatches } from './mixins/withPatches'; -import { Model } from './Model'; -import { PureCollection } from './PureCollection'; -import { PureModel } from './PureModel'; +import { IResource } from './interfaces/IResource'; +import { parseSchema } from './utils/schema/parse'; +import { Schema } from './Schema'; +import { SchemaMeta } from './SchemaMeta'; -export class Collection extends withPatches(PureCollection) { - public static defaultModel?: typeof PureModel = Model; +export class Collection { + private readonly types: Array = []; + private readonly data: Array> = []; + public readonly byType: Record>> = {}; + public readonly byId: Record> = {}; + + private readonly listeners: Record< + string, + Array<{ model: IResource; key: string | number }> + > = {}; + + public add(data: IResource): IResource; + public add( + data: IResource, + type: TSchema, + ): IResource; + public add( + data: IResource | IResource, + type?: TSchema, + ): IResource { + const item = type + ? parseSchema(type, data as IResource) + : (data as IResource); + + if (this.data.includes(item)) { + return item; + } + + const meta = SchemaMeta.get(item); + + if (type && !this.types.includes(type)) { + this.types.push(type); + } else if (meta?.schema && !this.types.includes(meta?.schema)) { + this.types.push(meta?.schema); + } + + this.data.push(item); + + if (meta) { + meta.collection = this; + this.byId[meta.id] = item; + + if (this.listeners[meta.id]?.length) { + this.listeners[meta.id].forEach(({ model, key }) => { + model[key] = item; + }); + this.listeners[meta.id].length = 0; + } + + this.byType[meta.type] = this.byType[meta.type] || []; + this.byType[meta.type].push(item); + + return item as IResource; + } + + throw new Error('SchemaMeta not found'); + } + + public addReferenceListener(model: IResource, key: string | number, id: string | number) { + this.listeners[id] = this.listeners[id] || []; + this.listeners[id].push({ model, key }); + } } diff --git a/packages/datx/src/Model.ts b/packages/datx/src/Model.ts deleted file mode 100644 index 9cfcecb92..000000000 --- a/packages/datx/src/Model.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { META_FIELD } from '@datx/utils'; - -import { PureModel } from './PureModel'; -import { withMeta } from './mixins/withMeta'; -import { withActions } from './mixins/withActions'; -import { IModelRef } from './interfaces/IModelRef'; -import { withPatches } from './mixins/withPatches'; - -export class Model extends withPatches(withActions(withMeta(PureModel))) { - public valueOf(): Record & { meta: IModelRef } { - const raw: Record = this.meta.snapshot; - - delete raw[META_FIELD]; - - return Object.assign({}, raw, { - meta: { - id: this.meta.id, - type: this.meta.type, - }, - }); - } - - public toString(): string { - return JSON.stringify(this.valueOf(), null, 2); - } -} diff --git a/packages/datx/src/PureCollection.ts b/packages/datx/src/PureCollection.ts deleted file mode 100644 index efa9929f5..000000000 --- a/packages/datx/src/PureCollection.ts +++ /dev/null @@ -1,468 +0,0 @@ -import { IRawModel, getMeta, setMeta, isArrayLike, mobx, IObservable, IObservableArray, removeFromArray, replaceInArray } from '@datx/utils'; - -import { PureModel } from './PureModel'; -import { IType } from './interfaces/IType'; -import { TFilterFn } from './interfaces/TFilterFn'; -import { IIdentifier } from './interfaces/IIdentifier'; -import { IModelRef } from './interfaces/IModelRef'; -import { IModelConstructor } from './interfaces/IModelConstructor'; -import { - isModelReference, - getModelType, - getModelId, - getModelCollection, - updateModel, - updateModelCollection, - modelToJSON, -} from './helpers/model/utils'; -import { PatchType } from './enums/PatchType'; -import { triggerAction } from './helpers/patch'; -import { upsertModel, initModels } from './helpers/collection'; -import { MetaClassField } from './enums/MetaClassField'; -import { IFieldDefinition } from './Attribute'; -import { IBucket } from './interfaces/IBucket'; -import { MetaModelField } from './enums/MetaModelField'; -import { IRawView } from './interfaces/IRawView'; -import { IRawCollection } from './interfaces/IRawCollection'; -import { View } from './View'; -import { error } from './helpers/format'; - -export class PureCollection { - public static types: Array = []; - - public static defaultModel?: typeof PureModel = PureModel; - - public static views: Record< - string, - { - modelType: IType | PureModel; - sortMethod?: string | ((PureModel) => any); - unique?: boolean; - mixins?: Array<(view: any) => any>; - } - > = {}; - - private readonly __data: IObservableArray = mobx.observable.array([], { deep: false }); - - private readonly __views: Array = []; - - private __dataMap: Record> = (mobx.observable.object({}, undefined, { - deep: false, - }) as unknown) as Record>; - - private __dataList: Record> = (mobx.observable.object({}, undefined, { - deep: false, - }) as unknown) as Record>; - - constructor(data: Array | IRawCollection = []) { - mobx.extendObservable(this, {}); - if (isArrayLike(data)) { - this.insert(data as Array); - } else if (data && 'models' in data) { - this.insert(data.models); - } - - const staticCollection = this.constructor as typeof PureCollection; - const initViews = data && 'views' in data ? data.views : {}; - - Object.keys(staticCollection.views).forEach((key) => { - const view = staticCollection.views[key]; - const init = initViews[key] || view; - - this.addView(key, init.modelType, { - mixins: view.mixins, - models: init.models || [], - sortMethod: view.sortMethod, - unique: init.unique, - }); - }); - } - - public addView( - name: string, - type: IModelConstructor | IType, - { - sortMethod, - models = [], - unique, - mixins, - }: { - sortMethod?: string | ((item: T) => any); - models?: Array; - unique?: boolean; - mixins?: Array<(view: any) => any>; - } = {}, - ): View { - if (name in this && this[name]) { - throw error('The name is already taken'); - } - - const ViewConstructor = mixins - ? (mixins.reduce((view: any, mixin: (view: any) => any) => { - return mixin(view); - }, View) as typeof View) - : View; - - this.__views.push(name); - this[name] = new ViewConstructor(type, this, sortMethod, models, unique); - - return this[name]; - } - - /** - * Function for inserting raw models into the collection. Used when hydrating the collection - * - * @param {Array} data Raw model data - * @returns {Array} A list of initialized models - * @memberof Collection - */ - public insert(data: Array>): Array { - const models = initModels(this, data); - - this.__insertModel(models); - - return models; - } - - public hasItem(model: PureModel): boolean { - const id = getModelId(model); - - return Boolean(this.findOne(model, id)); - } - - public add(data: T): T; - - public add(data: Array): Array; - - public add( - data: Array>, - model: IType | IModelConstructor, - ): Array; - - public add( - data: IRawModel | Record, - model: IType | IModelConstructor, - ): T; - - public add( - data: - | PureModel - | IRawModel - | Record - | Array>, - model?: IType | IModelConstructor, - ): PureModel | Array { - return isArrayLike(data) - ? this.__addArray(data as Array>, model) - : this.__addSingle(data, model); - } - - public filter(test: TFilterFn): Array { - return this.__data.filter(test); - } - - public findOne( - type: IType | T | IModelConstructor, - id: IIdentifier | PureModel, - ): T | null; - - public findOne(ref: IModelRef): T | null; - - public findOne( - model: IType | typeof PureModel | IModelRef, - id?: IIdentifier | PureModel, - ): PureModel | null { - if (id instanceof PureModel) { - return id; - } - - if (isModelReference(model)) { - return this.__findOneByType((model as IModelRef).type, (model as IModelRef).id); - } - - if (id === null || id === undefined) { - // ID mybe `""` or `0` - throw new Error('The identifier is missing'); - } - - return this.__findOneByType(model as typeof PureModel, id); - } - - public findAll(model?: IType | IModelConstructor): IObservableArray { - if (model) { - const type = getModelType(model); - - if (!(type in this.__dataList)) { - mobx.runInAction(() => { - mobx.set(this.__dataList, { [type]: mobx.observable.array([]) }); - }); - } - - return this.__dataList[type] as IObservableArray; - } - - return this.__data as IObservableArray; - } - - public find(test: TFilterFn): PureModel | null { - return this.__data.find(test) || null; - } - - public removeOne(type: IType | typeof PureModel, id: IIdentifier): void; - - public removeOne(model: PureModel | IModelRef): void; - - public removeOne(obj: IType | typeof PureModel | PureModel | IModelRef, id?: IIdentifier): void { - let model: PureModel | null = null; - - if (typeof obj === 'object') { - model = obj; - } else if (id) { - model = this.findOne(obj, id); - } - if (model) { - this.__removeModel(model); - } - } - - public removeAll(type: IType | typeof PureModel): void { - this.__removeModel(this.findAll(type).slice()); - } - - public reset(): void { - this.__data.forEach((model) => { - setMeta(model, MetaModelField.Collection, undefined); - - triggerAction( - { - oldValue: modelToJSON(model) as Record, - patchType: PatchType.REMOVE, - }, - model, - ); - }); - replaceInArray(this.__data, []); - this.__dataList = (mobx.observable.object({}, {}, { deep: false }) as unknown) as IObservable & - Record>; - this.__dataMap = (mobx.observable.object({}, {}, { deep: false }) as unknown) as IObservable & - Record>; - } - - public toJSON(): IRawCollection { - const views: Record = {}; - - this.__views.forEach((key) => { - views[key] = this[key].toJSON(); - }); - - return { - models: this.__data.map(modelToJSON), - views, - }; - } - - public get snapshot(): IRawCollection { - return this.toJSON(); - } - - @mobx.computed - public get length(): number { - return this.__data.length; - } - - public getAllModels(): Array { - return this.__data.slice(); - } - - private __findOneByType( - model: IType | typeof PureModel | PureModel, - id: IIdentifier, - ): PureModel | null { - const type = getModelType(model); - - if (!type) { - return null; - } - const stringType = type.toString(); - const stringId = id.toString(); - - mobx.runInAction(() => { - if (!(type in this.__dataMap)) { - mobx.set( - this.__dataMap, - stringType, - mobx.observable.object({ [stringId]: null }, {}, { deep: false }), - ); - } else if (!(stringId in this.__dataMap[stringType])) { - mobx.set(this.__dataMap[stringType], stringId, null); - } - }); - - return this.__dataMap[stringType][stringId] || null; - } - - private __addArray(data: Array): Array; - - private __addArray( - data: Array>, - model?: IType | IModelConstructor, - ): Array; - - private __addArray( - data: Array>, - model?: IType | IModelConstructor, - ): Array { - return data.filter(Boolean).map((item) => this.__addSingle(item, model)); - } - - private __addSingle(data: T): T; - - private __addSingle( - data: Record, - model?: IType | IModelConstructor, - ): T; - - private __addSingle( - data: PureModel | Record | IIdentifier | IModelRef, - model?: number | IType | IModelConstructor, - ): PureModel { - if (!data || typeof data === 'number' || typeof data === 'string' || isModelReference(data)) { - return data; - } - - if (data instanceof PureModel) { - if (!this.hasItem(data)) { - this.__insertModel(data); - } - - return data; - } - - if (!model && model !== 0) { - throw error('The type needs to be defined if the object is not an instance of the model.'); - } - - const type = getModelType(model as IType | typeof PureModel); - const modelInstance = upsertModel(data, type, this); - - this.__insertModel(modelInstance, type); - - return modelInstance; - } - - protected __removeModel(model: PureModel | Array, type?: IType, id?: IIdentifier): void { - if (isArrayLike(model)) { - (model as Array).forEach((item) => { - this.__removeModel(item, type, id); - }); - - return; - } - - const modelType = type || getModelType(model); - const modelId = id || getModelId(model); - - triggerAction( - { - oldValue: mobx.toJS(modelToJSON(model)) as Record, - patchType: PatchType.REMOVE, - }, - model, - ); - - mobx.runInAction(() => { - removeFromArray(this.__data, model); - removeFromArray(this.__dataList[modelType], model); - mobx.set(this.__dataMap[modelType], modelId.toString(), undefined); - }); - - this.__data.forEach((item) => { - const fields = getMeta>( - item, - MetaClassField.Fields, - {}, - true, - true, - ); - const refKeys = Object.keys(fields || {}); - - refKeys - .map((key) => getMeta(item, `ref_${key}`)) - .filter(Boolean) - .forEach((bucket: IBucket) => { - if (isArrayLike(bucket.value) && (bucket.value as Array).includes(item)) { - bucket.value = (bucket.value as Array).filter( - (bucketModel) => bucketModel !== item, - ); - } else if (bucket.value === item) { - bucket.value = null; - } - }); - }); - - updateModelCollection(model, undefined); - } - - private __insertModel(model: PureModel | Array, type?: IType, id?: IIdentifier): void { - if (isArrayLike(model)) { - (model as Array).forEach((item) => { - this.__insertModel(item, type, id); - }); - - return; - } - - const collection = getModelCollection(model); - - if (collection && collection !== this) { - throw error('A model can be in a single collection at once'); - } - - const modelType = type || getModelType(model); - const modelId = id || getModelId(model); - const stringType = modelType.toString(); - - const existingModel = this.findOne(modelType, modelId); - - if (existingModel) { - if (existingModel !== model) { - updateModel(existingModel, model); - } - return; - } - - mobx.runInAction(() => { - this.__data.push(model); - if (modelType in this.__dataList) { - this.__dataList[modelType].push(model); - } else { - mobx.set(this.__dataList, stringType, mobx.observable.array([model], { deep: false })); - } - - if (modelType in this.__dataMap) { - mobx.set(this.__dataMap[modelType], modelId.toString(), model); - } else { - mobx.set( - this.__dataMap, - stringType, - mobx.observable.object({ [modelId]: model }, {}, { deep: false }), - ); - } - updateModelCollection(model, this); - }); - - triggerAction( - { - newValue: modelToJSON(model) as Record, - patchType: PatchType.CRATE, - }, - model, - ); - } - - // @ts-ignore - Used outside of the class, but marked as private to avoid undocumented use - private __changeModelId(oldId: IIdentifier, newId: IIdentifier, type: IType): void { - this.__dataMap[type][newId] = this.__dataMap[type][oldId]; - delete this.__dataMap[type][oldId]; - } -} diff --git a/packages/datx/src/PureModel.ts b/packages/datx/src/PureModel.ts deleted file mode 100644 index d4c6013ab..000000000 --- a/packages/datx/src/PureModel.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { DEFAULT_TYPE, IRawModel } from '@datx/utils'; - -import { PureCollection } from './PureCollection'; -import { initModel } from './helpers/model/init'; -import { IIdentifier } from './interfaces/IIdentifier'; -import { IType } from './interfaces/IType'; -import { startAction, endAction } from './helpers/patch'; -import { PatchType } from './enums/PatchType'; - -export class PureModel { - public static type: IType = DEFAULT_TYPE; - - public static autoIdValue: IIdentifier = 0; - - public static enableAutoId = true; - - public static preprocess(data: object): object { - return data; - } - - public static getAutoId(): IIdentifier { - return typeof this.autoIdValue === 'number' ? --this.autoIdValue : this.autoIdValue; - } - - public static toJSON(): IType { - return this.type; - } - - constructor(rawData: IRawModel = {}, collection?: PureCollection) { - startAction(this); - initModel(this, rawData, collection); - endAction(this, PatchType.CRATE); - } -} diff --git a/packages/datx/src/Schema.ts b/packages/datx/src/Schema.ts new file mode 100644 index 000000000..f2c6675f7 --- /dev/null +++ b/packages/datx/src/Schema.ts @@ -0,0 +1,68 @@ +import { parseSchema } from './utils/schema/parse'; +import { serializeSchema } from './utils/schema/serialize'; +import { ISchemaData } from './interfaces/ISchemaData'; +import { IPlainResource, IResource } from './interfaces/IResource'; +import { IFlattenedResource } from './interfaces/IFlattenedResource'; + +export class Schema { + constructor( + public readonly type: string | number, + public readonly definition: T, + public readonly id: (data: IResource) => string | number, + ) {} + + public parse(data: IPlainResource): IResource; + public parse(data: Array>): Array>; + public parse( + data: IPlainResource | Array>, + ): IResource | Array> { + return parseSchema(this, data as IPlainResource); + } + + public serialize( + data: IResource, + depth?: number, + flatten?: false, + contained?: Array, + ): IPlainResource; + public serialize( + data: Array>, + depth?: number, + flatten?: false, + contained?: Array, + ): Array>; + public serialize( + data: IResource, + depth: number, + flatten: true, + contained?: Array, + ): IFlattenedResource; + public serialize( + data: Array>, + depth: number, + flatten: true, + contained?: Array, + ): IFlattenedResource; + public serialize( + data: IResource | Array>, + depth?: number, + flatten?: boolean, + contained?: Array, + ): + | IPlainResource + | IFlattenedResource + | Array> + | IFlattenedResource; + public serialize( + data: IResource | Array>, + depth?: number, + flatten?: boolean, + contained?: Array, + ): + | IPlainResource + | IFlattenedResource + | Array> + | IFlattenedResource { + return serializeSchema(this, data as IResource, depth, flatten, contained); + } +} diff --git a/packages/datx/src/SchemaMeta.ts b/packages/datx/src/SchemaMeta.ts new file mode 100644 index 000000000..ae85d935a --- /dev/null +++ b/packages/datx/src/SchemaMeta.ts @@ -0,0 +1,5 @@ +import { IResource } from './interfaces/IResource'; +import { ISchemaMeta } from './interfaces/ISchemaMeta'; +import { Schema } from './Schema'; + +export const SchemaMeta = new WeakMap, ISchemaMeta>(); diff --git a/packages/datx/src/View.ts b/packages/datx/src/View.ts deleted file mode 100644 index c66d4ddc4..000000000 --- a/packages/datx/src/View.ts +++ /dev/null @@ -1,200 +0,0 @@ -import { IArraySplice, IRawModel, mapItems, mobx, removeFromArray, replaceInArray } from '@datx/utils'; - -import { ToMany } from './buckets/ToMany'; -import { error } from './helpers/format'; -import { getModelId, getModelType, isReference } from './helpers/model/utils'; -import { IIdentifier } from './interfaces/IIdentifier'; -import { IModelConstructor } from './interfaces/IModelConstructor'; -import { IModelRef } from './interfaces/IModelRef'; -import { IRawView } from './interfaces/IRawView'; -import { IType } from './interfaces/IType'; -import { TChange } from './interfaces/TChange'; -import { PureCollection } from './PureCollection'; -import { PureModel } from './PureModel'; - -export class View extends ToMany { - public readonly modelType: IType; - - @mobx.observable - public sortMethod?: string | ((item: T) => any); - - constructor( - modelType: IModelConstructor | IType, - protected __collection: PureCollection, - sortMethod?: string | ((item: T) => any), - models: Array = [], - public unique: boolean = false, - ) { - super( - models.map((model) => - model instanceof PureModel ? model : { id: model, type: getModelType(modelType) }, - ), - __collection, - ); - this.modelType = getModelType(modelType); - this.sortMethod = sortMethod; - mobx.makeObservable(this, { - sortMethod: mobx.observable, - length: mobx.computed, - list: mobx.computed, - }); - } - - @mobx.computed - public get length(): number { - return this.value.length; - } - - @mobx.computed - public get list(): Array { - const list: Array = this.value.slice(); - - if (this.sortMethod) { - const sortFn = - typeof this.sortMethod === 'string' - ? (item): any => item[this.sortMethod as 'string'] - : this.sortMethod; - - list.sort((a: T, b: T) => (sortFn(a) === sortFn(b) ? 0 : sortFn(a) > sortFn(b) ? 1 : -1)); - } - - const instances = mobx.observable.array(list, { deep: false }); - - mobx.intercept(instances, this.__partialListUpdate.bind(this)); - - return instances; - } - - public set list(list: Array) { - this.__partialListUpdate({ - type: 'splice', - index: 0, - removed: this.list, - removedCount: this.__rawList.length, - added: list, - addedCount: list.length, - } as unknown as IArraySplice); - } - - public toJSON(): IRawView { - return { - modelType: this.modelType, - models: this.__rawList.map(getModelId).slice(), - unique: this.unique, - }; - } - - public add(data: T | IRawModel | Record): T; - - public add(data: Array>): Array; - - public add( - data: T | IRawModel | Record | Array>, - ): T | Array { - const models = mapItems(data, (item) => this.__collection.add(item, this.modelType)) as - | T - | Array; - - mobx.runInAction(() => { - mapItems(models, (instance: T) => { - if (!this.unique || this.__indexOf(instance) === -1) { - this.__rawList.push(instance); - } - }); - }); - - return models; - } - - public hasItem(model: T | IIdentifier): boolean { - const id = getModelId(model); - - return Boolean(this.__getList().find((item) => getModelId(item) === id)); - } - - public remove(model: IIdentifier | T): void { - mobx.runInAction(() => { - const item = this.__getModel(this.__normalizeModel(model)); - - if (item) { - removeFromArray(this.__rawList, item); - } - }); - } - - public removeAll(): void { - mobx.runInAction(() => { - replaceInArray(this.__rawList, []); - }); - } - - private __partialListUpdate(change: TChange): null { - if (change.type === 'splice') { - if (this.sortMethod && change.added.length > 0) { - throw error("New models can't be added directly to a sorted view list"); - } - const added = (change.added as Array).map(this.__normalizeModel.bind(this)); - - const toRemove = this.__rawList.slice(change.index, change.removedCount); - - if (this.unique) { - added.forEach((newItem, index) => { - if ( - this.__indexOf(newItem) !== -1 && - (this.__indexOf(newItem, toRemove) === -1 || this.__indexOf(newItem, added) !== index) - ) { - throw error('The models in this view need to be unique'); - } - }); - } - - mobx.runInAction(() => { - // eslint-disable-next-line prefer-spread - this.__rawList.splice.apply( - this.__rawList, - ([change.index, change.removedCount] as Array).concat(added), - ); - }); - - return null; - } - - mobx.runInAction(() => { - if (this.sortMethod && change.newValue) { - throw error("New models can't be added directly to a sorted view list"); - } - - const newModel = this.__getModel(this.__normalizeModel(change.newValue as any)); - - if (newModel) { - const idIndex = this.__indexOf(newModel); - - if (this.unique && idIndex !== -1 && idIndex !== change.index) { - throw error('The models in this view need to be unique'); - } - - this.__rawList[change.index] = newModel; - } - }); - - return null; - } - - private __normalizeModel(model: T | IIdentifier): T | IModelRef { - return model instanceof PureModel ? model : { id: model, type: this.modelType }; - } - - private __indexOf(model: T | IModelRef, target: Array = this.__rawList): number { - return target.findIndex((item) => { - if (item instanceof PureModel && model instanceof PureModel) { - return item === model; - } - - if (isReference(item) && !(model instanceof PureModel)) { - return (item as IModelRef).id === model.id && (item as IModelRef).type === model.type; - } - - return false; - }); - } -} diff --git a/packages/datx/src/buckets/ToMany.ts b/packages/datx/src/buckets/ToMany.ts deleted file mode 100644 index 93c4129b9..000000000 --- a/packages/datx/src/buckets/ToMany.ts +++ /dev/null @@ -1,172 +0,0 @@ -import { isArrayLike, mobx, IObservableArray, IReactionDisposer, replaceInArray } from '@datx/utils'; - -import { error } from '../helpers/format'; -import { getModelCollection, getModelRef, isReference } from '../helpers/model/utils'; -import { IModelRef } from '../interfaces/IModelRef'; -import { TChange } from '../interfaces/TChange'; -import { PureCollection } from '../PureCollection'; -import { PureModel } from '../PureModel'; -import { updateSingleAction } from '../helpers/patch'; - -export class ToMany { - protected readonly __rawList: IObservableArray = mobx.observable.array([]); - - protected __collection?: PureCollection; - - private __disposer?: IReactionDisposer; - - constructor( - data: Array = [], - collection?: PureCollection, - protected __readonly: boolean = false, - protected __model?: PureModel, - protected __key?: string, - protected __skipMissing = true, - ) { - mobx.makeObservable(this); - if (data?.length > 0 && !collection) { - throw error('The model needs to be in a collection to be referenceable'); - } else if (data && !isArrayLike(data)) { - throw error('The reference must be an array of values.'); - } - - mobx.runInAction(() => { - replaceInArray(this.__rawList, data || []); - this.setCollection(collection); - }); - } - - public setCollection(collection: PureCollection | undefined): void { - this.__collection = collection; - - if (this.__disposer) { - this.__disposer(); - } - - if (collection) { - this.__rawList.forEach((item, index) => { - const model = this.__getModel(item); - - if (model) { - this.__rawList[index] = model; - } - }); - this.__disposer = mobx.reaction(() => { - const references = this.__rawList.filter(isReference); - const check = references - .filter(Boolean) - .filter((model: IModelRef) => collection.findOne(model.type, model.id)); - - return check.length > 0; - }, this.__reMap.bind(this)); - } - } - - @mobx.computed - public get value(): Array { - return this.__getList(); - } - - public set value(data: Array) { - if (this.__readonly) { - throw error('This is a read-only bucket'); - } else if (data === null) { - data = []; - } else if (!isArrayLike(data)) { - throw error('The reference must be an array of values.'); - } - - mobx.runInAction(() => { - replaceInArray(this.__rawList, data); - if (this.__model && this.__key) { - updateSingleAction(this.__model, this.__key, data); - } - }); - } - - @mobx.computed - public get length(): number { - return this.value.length; - } - - @mobx.computed - public get refValue(): Array { - return this.__rawList.map(getModelRef); - } - - public toJSON(): any { - return this.refValue.slice(); - } - - @mobx.computed - public get snapshot(): any { - return this.toJSON(); - } - - protected __getList(): IObservableArray { - const list = this.__rawList - .map(this.__getModel.bind(this)) - .filter((item) => (this.__skipMissing ? Boolean(item) : true)) - .filter((model) => Boolean(model && getModelCollection(model))) as any; - const instances = mobx.observable.array(list, { deep: false }); - - mobx.intercept(instances, this.__partialRawListUpdate.bind(this)); - - return instances; - } - - protected __getModel(model: T | IModelRef | null): T | null { - if (model instanceof PureModel || model === null) { - return model; - } - - if (!this.__collection) { - throw error('The model needs to be in a collection to be referenceable'); - } - - return this.__collection.findOne(model.type, model.id); - } - - private __partialRawListUpdate(change: TChange): null { - if (this.__readonly) { - throw error('This is a read-only bucket'); - } - - if (change.type === 'splice') { - const added = change.added as Array; - - mobx.runInAction(() => { - this.__rawList.slice(change.index, change.removedCount); - // eslint-disable-next-line prefer-spread - this.__rawList.splice.apply( - this.__rawList, - ([change.index, change.removedCount] as Array).concat(added), - ); - }); - - return null; - } - - mobx.runInAction(() => { - const newModel = this.__getModel(change.newValue as T); - - if (newModel) { - this.__rawList[change.index] = newModel; - } - }); - - return null; - } - - private __reMap(): void { - for (let i = 0; i < this.__rawList.length; i++) { - if (isReference(this.__rawList[i])) { - const model = this.__getModel(this.__rawList[i]); - - if (model) { - this.__rawList[i] = model; - } - } - } - } -} diff --git a/packages/datx/src/buckets/ToOne.ts b/packages/datx/src/buckets/ToOne.ts deleted file mode 100644 index e170d6a59..000000000 --- a/packages/datx/src/buckets/ToOne.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { isArrayLike, mobx } from '@datx/utils'; - -import { error } from '../helpers/format'; -import { getModelRef, isModelReference } from '../helpers/model/utils'; -import { updateSingleAction } from '../helpers/patch'; -import { IModelRef } from '../interfaces/IModelRef'; -import { PureCollection } from '../PureCollection'; -import { PureModel } from '../PureModel'; - -export class ToOne { - @mobx.observable - private __rawValue: T | IModelRef | null = null; - - constructor( - data: T | IModelRef | null, - protected __collection?: PureCollection, - protected __readonly: boolean = false, - protected __model?: PureModel, - protected __key?: string, - protected __skipMissing = true, - ) { - mobx.makeObservable(this); - if (data && !this.__collection) { - throw error('The model needs to be in a collection to be referenceable'); - } else if (isArrayLike(data)) { - throw error("The reference can't be an array of values."); - } else if (!isModelReference(data) && !(data instanceof PureModel) && data !== null) { - throw error('The value needs to be a reference'); - } - - this.__rawValue = data; - } - - public setCollection(value: PureCollection | undefined): void { - this.__collection = value; - } - - @mobx.computed - public get value(): T | null { - return this.__rawValue ? this.__getModel(this.__rawValue) : null; - } - - public set value(data: T | null) { - if (!this.__collection) { - throw error('The model needs to be in a collection to be referenceable'); - } else if (this.__readonly) { - throw error('This is a read-only bucket'); - } else if (isArrayLike(data)) { - throw error("The reference can't be an array of values."); - } else if (!isModelReference(data) && !(data instanceof PureModel) && data !== null) { - throw error('The value needs to be a reference'); - } - this.__rawValue = data; - if (this.__model && this.__key) { - updateSingleAction(this.__model, this.__key, data); - } - } - - @mobx.computed - public get refValue(): IModelRef | null { - return this.__rawValue ? getModelRef(this.__rawValue) : null; - } - - public toJSON(): IModelRef | null { - return this.refValue; - } - - @mobx.computed - public get snapshot(): IModelRef | null { - return this.toJSON(); - } - - protected __getModel(model: T | IModelRef | null): T | null { - if (model instanceof PureModel || model === null) { - return model; - } - - if (!this.__collection) { - throw error('The model needs to be in a collection to be referenceable'); - } - - const item = this.__collection.findOne(model.type, model.id); - - if (item) { - return item; - } - - if (!this.__skipMissing) { - return model as any; - } - return null; - } -} diff --git a/packages/datx/src/buckets/ToOneOrMany.ts b/packages/datx/src/buckets/ToOneOrMany.ts deleted file mode 100644 index 5432d44a7..000000000 --- a/packages/datx/src/buckets/ToOneOrMany.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { isArrayLike, mobx } from '@datx/utils'; - -import { IModelRef } from '../interfaces/IModelRef'; -import { PureCollection } from '../PureCollection'; -import { PureModel } from '../PureModel'; -import { ToMany } from './ToMany'; -import { ToOne } from './ToOne'; - -export class ToOneOrMany { - private __toManyBucket!: ToMany; - - private __toOneBucket!: ToOne; - - @mobx.observable - private __isList = true; - - constructor( - data: Array | T | IModelRef | null, - protected __collection?: PureCollection, - protected __readonly: boolean = false, - protected __model?: PureModel, - protected __key?: string, - protected __skipMissing = true, - ) { - mobx.makeObservable(this); - mobx.runInAction(() => { - this.__isList = isArrayLike(data); - if (this.__isList) { - this.__toManyBucket = new ToMany( - data as Array, - __collection, - __readonly, - __model, - __key, - __skipMissing, - ); - } else { - this.__toOneBucket = new ToOne( - data as T, - __collection, - __readonly, - __model, - __key, - __skipMissing, - ); - } - }); - } - - public setCollection(value: PureCollection | undefined): void { - this.__collection = value; - if (this.__toManyBucket) { - this.__toManyBucket.setCollection(value); - } - if (this.__toOneBucket) { - this.__toOneBucket.setCollection(value); - } - } - - @mobx.computed - public get value(): T | Array | null { - return this.__isList ? this.__toManyBucket.value : this.__toOneBucket.value; - } - - public set value(data: T | Array | null) { - mobx.runInAction(() => { - this.__isList = isArrayLike(data); - if (this.__isList) { - if (this.__toManyBucket) { - this.__toManyBucket.value = data as Array; - } else { - this.__toManyBucket = new ToMany(data as Array, this.__collection); - } - } else if (this.__toOneBucket) { - this.__toOneBucket.value = data as T; - } else { - this.__toOneBucket = new ToOne(data as T, this.__collection); - } - }); - } - - // An ugly workaround to still be able to update the response buckets - // @ts-ignore - private set __readonlyValue(data: T | Array | null) { - mobx.runInAction(() => { - this.__isList = isArrayLike(data); - if (this.__isList) { - if (this.__toManyBucket) { - // @ts-ignore - const readonlyStatus = this.__toManyBucket.__readonly; - - // @ts-ignore - this.__toManyBucket.__readonly = false; - this.__toManyBucket.value = data as Array; - // @ts-ignore - this.__toManyBucket.__readonly = readonlyStatus; - } else { - this.__toManyBucket = new ToMany(data as Array, this.__collection); - } - } else if (this.__toOneBucket) { - // @ts-ignore - const readonlyStatus = this.__toOneBucket.__readonly; - - // @ts-ignore - this.__toOneBucket.__readonly = false; - this.__toOneBucket.value = data as T; - // @ts-ignore - this.__toOneBucket.__readonly = readonlyStatus; - } else { - this.__toOneBucket = new ToOne(data as T, this.__collection); - } - }); - } - - @mobx.computed - public get refValue(): Array | IModelRef | null { - return this.__isList ? this.__toManyBucket.refValue : this.__toOneBucket.refValue; - } - - public toJSON(): Array | IModelRef | null { - return this.refValue; - } - - @mobx.computed - public get snapshot(): Array | IModelRef | null { - return this.toJSON(); - } -} diff --git a/packages/datx/src/buckets/index.ts b/packages/datx/src/buckets/index.ts deleted file mode 100644 index b40095450..000000000 --- a/packages/datx/src/buckets/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { error } from '@datx/utils'; - -import { ReferenceType } from '../enums/ReferenceType'; -import { ToMany } from './ToMany'; -import { ToOne } from './ToOne'; -import { ToOneOrMany } from './ToOneOrMany'; - -export function getBucketConstructor(type: ReferenceType.TO_ONE): typeof ToOne; -export function getBucketConstructor(type: ReferenceType.TO_ONE_OR_MANY): typeof ToOneOrMany; -export function getBucketConstructor(type: ReferenceType.TO_MANY): typeof ToMany; -export function getBucketConstructor( - type: ReferenceType, -): typeof ToOne | typeof ToOneOrMany | typeof ToMany; -export function getBucketConstructor( - type: ReferenceType, -): typeof ToOne | typeof ToOneOrMany | typeof ToMany { - if (type === ReferenceType.TO_ONE) { - return ToOne; - } - - if (type === ReferenceType.TO_ONE_OR_MANY) { - return ToOneOrMany; - } - - if (type === ReferenceType.TO_MANY) { - return ToMany; - } - - throw error('Unknown reference type'); -} - -export { ToOne, ToOneOrMany, ToMany }; diff --git a/packages/datx/src/commonTypes.ts b/packages/datx/src/commonTypes.ts new file mode 100644 index 000000000..389f7ccb9 --- /dev/null +++ b/packages/datx/src/commonTypes.ts @@ -0,0 +1,64 @@ +import { JsonValue } from 'type-fest'; +import { ICustomScalar } from './interfaces/ICustomScalar'; + +export const Date: ICustomScalar = { + serialize(date: Date): string { + return date.toISOString(); + }, + + parseValue(value: string): Date { + return new globalThis.Date(value); + }, + test: (item: unknown): item is Date => item instanceof globalThis.Date, +}; + +export const Json: ICustomScalar = { + serialize(data: object): string { + return JSON.stringify(data); + }, + + parseValue(value: string): object { + return JSON.parse(value); + }, + test: (item: unknown): item is object => typeof item === 'object' && item !== null, +}; + +export const Pojo: ICustomScalar = { + serialize(data: JsonValue): JsonValue { + return data; + }, + parseValue(value: JsonValue): JsonValue { + return value; + }, + test: (item: unknown): item is JsonValue => typeof item !== 'function', +}; + +export const String: ICustomScalar = { + serialize(data: string): string { + return data; + }, + parseValue(value: string): string { + return value; + }, + test: (item: unknown): item is string => typeof item === 'string', +}; + +export const Number: ICustomScalar = { + serialize(data: number): number { + return data; + }, + parseValue(value: number): number { + return value; + }, + test: (item: unknown): item is number => typeof item === 'number', +}; + +export const Boolean: ICustomScalar = { + serialize(data: boolean): boolean { + return data; + }, + parseValue(value: boolean): boolean { + return value; + }, + test: (item: unknown): item is boolean => typeof item === 'boolean', +}; diff --git a/packages/datx/src/consts.ts b/packages/datx/src/consts.ts deleted file mode 100644 index 3bfa6a75f..000000000 --- a/packages/datx/src/consts.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const DEFAULT_TYPE_FIELD = '__datx__type__'; -export const DEFAULT_ID_FIELD = '__datx__id__'; diff --git a/packages/datx/src/disable-mobx.ts b/packages/datx/src/disable-mobx.ts deleted file mode 100644 index a94a25dae..000000000 --- a/packages/datx/src/disable-mobx.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { mobx } from '@datx/utils'; - -mobx.useMobx(false); - -export {} diff --git a/packages/datx/src/enums/MetaClassField.ts b/packages/datx/src/enums/MetaClassField.ts deleted file mode 100644 index 6aeee28a8..000000000 --- a/packages/datx/src/enums/MetaClassField.ts +++ /dev/null @@ -1,7 +0,0 @@ -export enum MetaClassField { - Fields = 'fields', - IdField = 'idField', - TypeField = 'typeField', - MapParse = 'parse', - MapSerialize = 'serialize', -} diff --git a/packages/datx/src/enums/MetaModelField.ts b/packages/datx/src/enums/MetaModelField.ts deleted file mode 100644 index fe14e5b09..000000000 --- a/packages/datx/src/enums/MetaModelField.ts +++ /dev/null @@ -1,10 +0,0 @@ -export enum MetaModelField { - Fields = 'fields', - IdField = 'id', - TypeField = 'type', - Collection = 'collection', - OriginalId = 'originalId', - Patch = 'patch', - PatchListeners = 'patchListeners', - Commit = 'commit', -} diff --git a/packages/datx/src/enums/PatchType.ts b/packages/datx/src/enums/PatchType.ts deleted file mode 100644 index 3a5ec4c06..000000000 --- a/packages/datx/src/enums/PatchType.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum PatchType { - CRATE, - UPDATE, - REMOVE, -} diff --git a/packages/datx/src/enums/ReferenceType.ts b/packages/datx/src/enums/ReferenceType.ts deleted file mode 100644 index 58f48e928..000000000 --- a/packages/datx/src/enums/ReferenceType.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum ReferenceType { - TO_ONE, - TO_MANY, - TO_ONE_OR_MANY, -} diff --git a/packages/datx/src/helpers/collection.ts b/packages/datx/src/helpers/collection.ts deleted file mode 100644 index 8255be0b8..000000000 --- a/packages/datx/src/helpers/collection.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { IRawModel, META_FIELD, getMeta } from '@datx/utils'; - -import { IType } from '../interfaces/IType'; -import { PureCollection } from '../PureCollection'; -import { PureModel } from '../PureModel'; -import { error } from './format'; -import { modelMapParse, updateModel } from './model/utils'; -import { MetaModelField } from '../enums/MetaModelField'; -import { MetaClassField } from '../enums/MetaClassField'; - -export function upsertModel( - data: IRawModel, - type: number | IType | typeof PureModel, - collection: PureCollection, -): PureModel { - if (!type && type !== 0) { - throw error('The type needs to be defined if the object is not an instance of the model.'); - } - - const staticCollection = collection.constructor as typeof PureCollection; - const TypeModel = staticCollection.types.find((item) => item.type === type); - - if (!TypeModel) { - const DefaultModel = staticCollection.defaultModel; - - if (DefaultModel) { - return new DefaultModel( - Object.assign({}, data, { - [META_FIELD]: Object.assign({}, data[META_FIELD] || {}, { type }), - }), - collection, - ); - } - throw error(`No model is defined for the type ${type}.`); - } - - const metaId = data?.[META_FIELD]?.[MetaModelField.IdField]; - const idField = getMeta(TypeModel, MetaClassField.IdField); - const id = idField ? data?.[idField] ?? metaId : metaId; - const existingModel = id && collection.findOne(type, id); - - if (existingModel) { - const fields = getMeta(TypeModel, MetaClassField.Fields); - const keys = Object.keys({ ...data, ...fields }); - const parsedData = {}; - - keys.forEach((key: string) => { - const isBackRefKey = Boolean(fields[key]?.referenceDef?.property); - const result = modelMapParse(TypeModel, data, key); - if (!(isBackRefKey && result === undefined && !(key in data))) { - parsedData[key] = result; - } - }); - return updateModel(existingModel, parsedData); - } - - return new TypeModel(TypeModel.preprocess(data), collection); -} - -function initCollectionModel(collection: PureCollection, data: IRawModel): PureModel { - const type = data?.[META_FIELD]?.[MetaModelField.TypeField]; - - return upsertModel(data, type, collection); -} - -export function isSelectorFunction(fn: any): boolean { - return typeof fn === 'function' && fn !== PureModel && !(fn.prototype instanceof PureModel); -} - -export function initModels(collection: PureCollection, data: Array): Array { - return data.map((item) => initCollectionModel(collection, item)); -} diff --git a/packages/datx/src/helpers/format.ts b/packages/datx/src/helpers/format.ts deleted file mode 100644 index 311d32403..000000000 --- a/packages/datx/src/helpers/format.ts +++ /dev/null @@ -1,17 +0,0 @@ -const REGEX = /\$\{\s*([a-zA-Z0-9\-_]+)\s*\}/g; - -function msg(str: string, keys: Record): string { - let msgStr = str; - let match = REGEX.exec(msgStr); - - while (match) { - msgStr = msgStr.replace(match[0], keys[match[1]]); - match = REGEX.exec(msgStr); - } - - return msgStr; -} - -export function error(message: string, keys: Record = {}): Error { - return new Error(`[datx exception] ${msg(message, keys)}`.replace(/\s+/g, ' ')); -} diff --git a/packages/datx/src/helpers/mixin.ts b/packages/datx/src/helpers/mixin.ts deleted file mode 100644 index dc0475a89..000000000 --- a/packages/datx/src/helpers/mixin.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { ICollectionConstructor } from '../interfaces/ICollectionConstructor'; -import { IModelConstructor } from '../interfaces/IModelConstructor'; -import { IViewConstructor } from '../interfaces/IViewConstructor'; -import { PureCollection } from '../PureCollection'; -import { PureModel } from '../PureModel'; -import { View } from '../View'; - -/** - * Check if a class is of a certain type - * - * @export - * @param {Function} obj Class to check - * @param {Function} type Type to check - * @returns {boolean} Class is of the given type - */ -function isOfType(obj: any, type: T): obj is T { - let model = obj; - - while (model) { - if (model === type) { - return true; - } - model = Object.getPrototypeOf(model); - } - - return false; -} - -/** - * Check if a class is a model - * - * @export - * @param {any} obj Class to check - * @returns {boolean} Class is a model - */ -export function isModel(obj: typeof PureModel | IModelConstructor): true; -export function isModel(obj: any): false; -export function isModel(obj: any): boolean { - return isOfType(obj, PureModel); -} - -/** - * Check if a class is a collection - * - * @export - * @param {any} obj Class to check - * @returns {boolean} Class is a collection - */ -export function isCollection(obj: typeof PureCollection | ICollectionConstructor): true; -export function isCollection(obj: any): false; -export function isCollection(obj: any): boolean { - return isOfType(obj, PureCollection); -} - -/** - * Check if a class is a collection - * - * @export - * @param {any} obj Class to check - * @returns {boolean} Class is a collection - */ -export function isView(obj: typeof View | IViewConstructor): true; -export function isView(obj: any): false; -export function isView(obj: any): boolean { - return isOfType(obj, View); -} diff --git a/packages/datx/src/helpers/model/fields.ts b/packages/datx/src/helpers/model/fields.ts deleted file mode 100644 index 42d561454..000000000 --- a/packages/datx/src/helpers/model/fields.ts +++ /dev/null @@ -1,245 +0,0 @@ -import { getMeta, setMeta, warn, mapItems, isArrayLike, mobx, IArraySplice, IObservableArray } from '@datx/utils'; - -import { PureModel } from '../../PureModel'; -import { IBucket } from '../../interfaces/IBucket'; -import { TRefValue } from '../../interfaces/TRefValue'; -import { IIdentifier } from '../../interfaces/IIdentifier'; -import { getModelRefType } from './init'; -import { getModelCollection, getModelId, getModelRef, getModelType, isIdentifier } from './utils'; -import { IFieldDefinition, IReferenceDefinition } from '../../Attribute'; -import { MetaModelField } from '../../enums/MetaModelField'; -import { MetaClassField } from '../../enums/MetaClassField'; -import { IType } from '../../interfaces/IType'; -import { TChange } from '../../interfaces/TChange'; -import { error } from '../format'; -import { IModelRef } from '../../interfaces/IModelRef'; - -interface IArrayChange { - index: number; - newValue: T; -} - -export function getRef(model: PureModel, key: string): PureModel | Array | null { - const value: IBucket | undefined = getMeta(model, `ref_${key}`); - - return value ? value.value : null; -} - -export function getRefId(model: PureModel, key: string): IModelRef | Array | null { - const value: IBucket | undefined = getMeta(model, `ref_${key}`); - - return value ? value.refValue : null; -} - -export function updateRef( - model: PureModel, - key: string, - value: TRefValue, -): PureModel | Array | null { - const bucket: IBucket | undefined = getMeta(model, `ref_${key}`); - - if (isIdentifier(value) || isArrayLike(value)) { - const fieldDef = getMeta(model, MetaModelField.Fields, {})[key]; - const type = getModelRefType( - fieldDef.referenceDef.model, - fieldDef.referenceDef.defaultValue, - model, - key, - getModelCollection(model), - ); - value = mapItems(value, (v: IIdentifier | IModelRef | PureModel) => - isIdentifier(v) ? { id: v, type } : getModelRef(v), - ); - } - - return bucket ? (bucket.value = value) : null; -} - -function getModelRefsByType(model: PureModel, type: IType): Array { - const fields = getMeta>( - model, - MetaClassField.Fields, - {}, - true, - true, - ); - - return Object.keys(fields) - .filter((key) => fields[key].referenceDef) - .filter((key) => !(fields[key].referenceDef as IReferenceDefinition).property) - .filter((key) => (fields[key].referenceDef as IReferenceDefinition).model === type); -} - -function updateModelReferences( - model: PureModel, - newId: IIdentifier, - oldId: IIdentifier, - type: IType, -): void { - const collection = getModelCollection(model); - - if (collection) { - collection.getAllModels().forEach((item) => { - getModelRefsByType(item, type) - .map((ref) => getMeta(item, `ref_${ref}`)) - .filter(Boolean) - .forEach((bucket: IBucket) => { - if (isArrayLike(bucket.value)) { - const targetIndex = (bucket.value as Array).findIndex( - (modelItem) => getModelId(modelItem) === oldId && getModelType(modelItem) === type, - ); - - if (targetIndex !== -1) { - (bucket.value as Array)[targetIndex] = newId; - } - } else if ( - bucket.value && - getModelId(bucket.value) === oldId && - getModelType(bucket.value) === type - ) { - bucket.value = { - id: newId, - type, - }; - } - }); - }); - } -} - -export function updateModelId(model: PureModel, newId: IIdentifier): void { - mobx.runInAction(() => { - const collection = getModelCollection(model); - - const oldId = getModelId(model); - const type = getModelType(model); - - setMeta(model, MetaModelField.IdField, newId); - - if (collection) { - // @ts-ignore - I'm bad and I should feel bad... - collection.__changeModelId(oldId, newId, type); - } - - updateModelReferences(model, newId, oldId, type); - }); -} - -function modelAddReference(model: PureModel, key: string, newReference: PureModel): void { - const fields = getMeta>(model, MetaModelField.Fields, {}); - const refOptions = fields[key]?.referenceDef; - - if (!refOptions) { - return; - } - if (isArrayLike(model[key])) { - if (!model[key].includes(newReference)) { - model[key].push(newReference); - } - } else { - model[key] = newReference; - } -} - -function modelRemoveReference(model: PureModel, key: string, oldReference: PureModel): void { - if (isArrayLike(model[key])) { - model[key].remove(oldReference); - } else if (model[key] === oldReference) { - model[key] = null; - } -} - -function hasBackRef(item: PureModel, property: string, target: PureModel): boolean { - if (item[property] === null || item[property] === undefined) { - return false; - } - - if (item[property] instanceof PureModel) { - return item[property] === target; - } - - return item[property].includes(target); -} - -function backRefSplice( - model: PureModel, - key: string, - change: IArraySplice, - refOptions: IReferenceDefinition, -): null { - const property = refOptions.property as string; - - change.added.forEach((item) => modelAddReference(item, property, model)); - const removed = model[key].slice(change.index, change.index + change.removedCount); - - removed.forEach((item: PureModel) => modelRemoveReference(item, property, model)); - - return null; -} - -function backRefChange( - model: PureModel, - key: string, - change: IArrayChange, - refOptions: IReferenceDefinition, -): null { - const property = refOptions.property as string; - const oldValue = model[key].length > change.index ? model[key][change.index] : null; - - if (change.newValue) { - modelAddReference(change.newValue, property, model); - } - if (oldValue) { - modelRemoveReference(oldValue, property, model); - } - - warn( - `This shouldn't have happened. Please open an issue: https://github.com/infinum/datx/issues/new`, - ); - - return null; -} - -function partialBackRefUpdate(model: PureModel, key: string, change: TChange): null { - const fields = getMeta>(model, MetaModelField.Fields, {}); - const refOptions = fields[key]?.referenceDef; - - if (!refOptions) { - return null; - } - - if (change.type === 'splice') { - return backRefSplice(model, key, change, refOptions); - } - - return backRefChange(model, key, change, refOptions); -} - -export function getBackRef(model: PureModel, key: string): PureModel | Array | null { - const fields = getMeta>(model, MetaModelField.Fields, {}); - const refOptions = fields[key]?.referenceDef; - - if (!refOptions || !refOptions.property) { - return null; - } - - const collection = getModelCollection(model); - - if (!collection) { - return null; - } - - const backModels = collection - .getAllModels() - .filter((item) => hasBackRef(item, refOptions.property as string, model)); - - const backData: IObservableArray = mobx.observable.array(backModels, { deep: false }); - - mobx.intercept(backData, (change: TChange) => partialBackRefUpdate(model, key, change)); - - return backData; -} - -export function updateBackRef(_model: PureModel, _key: string, _value: TRefValue): void { - throw error('Back references are read only'); -} diff --git a/packages/datx/src/helpers/model/init.ts b/packages/datx/src/helpers/model/init.ts deleted file mode 100644 index 4995275e0..000000000 --- a/packages/datx/src/helpers/model/init.ts +++ /dev/null @@ -1,279 +0,0 @@ -import { - assignComputed, - IRawModel, - getMeta, - mapItems, - setMeta, - META_FIELD, - isArrayLike, - mobx, -} from '@datx/utils'; - -import { PureModel } from '../../PureModel'; -import { PureCollection } from '../../PureCollection'; -import { MetaClassField } from '../../enums/MetaClassField'; -import { MetaModelField } from '../../enums/MetaModelField'; -import { IFieldDefinition, IReferenceDefinition, ParsedRefModel } from '../../Attribute'; -import { ReferenceType } from '../../enums/ReferenceType'; -import { - getModelType, - getModelCollection, - getModelId, - isModelReference, - modelMapParse, - commitModel, - peekNonNullish, -} from './utils'; -import { getBucketConstructor } from '../../buckets'; -import { getRef, updateRef, getBackRef, updateBackRef } from './fields'; -import { TRefValue } from '../../interfaces/TRefValue'; -import { error } from '../format'; -import { DEFAULT_ID_FIELD, DEFAULT_TYPE_FIELD } from '../../consts'; -import { updateSingleAction } from '../patch'; -import { IModelRef } from '../../interfaces/IModelRef'; -import { IType } from '../../interfaces/IType'; - -type ModelFieldDefinitions = Record; - -export function getModelRefType( - model: ParsedRefModel | IType, - data: any, - parentModel: PureModel, - key: string, - collection?: PureCollection, -): IType { - if (typeof model === 'function') { - return getModelType(model(data, parentModel, key, collection)); - } - - return model; -} - -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -function getRefValue( - value: TRefValue, - collection: PureCollection, - fieldDef: any, - model: T, - key: string, -): TRefValue { - return mapItems(value, (item) => { - if (item === null || item === undefined) return null; - - if (typeof item === 'object' && !isModelReference(item)) { - return ( - collection?.add( - item, - getModelRefType(fieldDef.referenceDef.model, item, model, key, collection), - ) || null - ); - } - - if (typeof item === 'object' && isModelReference(item)) { - return collection?.findOne(item as IModelRef) || (item as IModelRef); - } - - return ( - collection?.findOne( - getModelRefType(fieldDef.referenceDef.model, item, model, key, collection), - item, - ) || - ({ - id: item, - type: getModelRefType(fieldDef.referenceDef.model, item, model, key, collection), - } as IModelRef) - ); - }); -} - -export function initModelRef( - model: T, - key: string, - referenceDef?: IReferenceDefinition, - initialVal?: TRefValue, -): void { - const fields = getMeta(model, MetaModelField.Fields, {}); - const fieldDef = fields[key] || { referenceDef }; - const collection = getModelCollection(model); - - if (!collection && initialVal) { - throw error('The model needs to be in a collection to be referenceable'); - } - - if (referenceDef) { - fields[key] = { - referenceDef, - }; - } - - if (fieldDef.referenceDef.property) { - assignComputed( - model, - key, - () => getBackRef(model, key), - (value: TRefValue) => { - updateBackRef(model, key, value); - }, - ); - } else { - const Bucket = getBucketConstructor(fieldDef.referenceDef.type); - let value: TRefValue = fieldDef.referenceDef.type === ReferenceType.TO_MANY ? [] : null; - - if (initialVal !== null && initialVal !== undefined) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - value = getRefValue(initialVal, collection!, fieldDef, model, key); - } - - const bucket = new Bucket(value, collection, false, model, key, true); - - updateSingleAction(model, key, bucket.value); - setMeta(model, `ref_${key}`, bucket); - - assignComputed( - model, - key, - () => getRef(model, key), - (newValue: TRefValue) => { - updateSingleAction(model, key, newValue); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - updateRef(model, key, getRefValue(newValue, collection!, fieldDef, model, key)); - }, - ); - } -} - -function isPojo(val: any): boolean { - return typeof val === 'object' && val !== null && !(val instanceof PureModel); -} - -export function initModelField(model: T, key: string, value: any): void { - const fields = getMeta(model, MetaModelField.Fields, {}); - const fieldDef = fields[key]; - - const typeField = getMeta(model.constructor, MetaClassField.TypeField, DEFAULT_TYPE_FIELD, true); - const idField = getMeta(model.constructor, MetaClassField.IdField, DEFAULT_ID_FIELD, true); - - if (key === typeField) { - assignComputed( - model, - key, - () => getModelType(model), - () => { - throw error("Model type can't be changed after initialization."); - }, - ); - } else if (key === idField) { - assignComputed( - model, - key, - () => getModelId(model), - () => { - throw error( - "Model ID can't be updated directly. Use the `updateModelId` helper function instead.", - ); - }, - ); - } else if (fieldDef.referenceDef) { - initModelRef(model, key, undefined, value); - } else { - // Make sure we have the value we can track (MobX 4) - setMeta(model, `data__${key}`, undefined); - - assignComputed( - model, - key, - () => getMeta(model, `data__${key}`), - (newValue: any) => { - // Make sure nested properties are observable - const packedValue = isPojo(newValue) - ? isArrayLike(newValue) - ? mobx.observable.array(newValue) - : mobx.observable.object(newValue) - : newValue; - - updateSingleAction(model, key, newValue); - setMeta(model, `data__${key}`, packedValue); - }, - ); - model[key] = value; - } -} - -export function initModel( - instance: PureModel, - rawData: IRawModel, - collection?: PureCollection, -): void { - const modelClass = instance.constructor as typeof PureModel; - const modelClassFields: ModelFieldDefinitions = getMeta( - instance.constructor, - MetaClassField.Fields, - {}, - true, - true, - ); - const modelMeta: ModelFieldDefinitions | undefined = rawData?.[META_FIELD]; - const fields: ModelFieldDefinitions = Object.assign({}, modelClassFields, modelMeta?.fields); - - setMeta(instance, MetaModelField.Collection, collection); - - const typeField = getMeta( - instance.constructor, - MetaClassField.TypeField, - DEFAULT_TYPE_FIELD, - true, - ); - - setMeta( - instance, - MetaModelField.TypeField, - peekNonNullish(rawData[typeField], modelMeta?.type, modelClass.type), - ); - - const idField = getMeta(instance.constructor, MetaClassField.IdField, DEFAULT_ID_FIELD, true); - - setMeta( - instance, - MetaModelField.IdField, - peekNonNullish(rawData[idField], modelMeta?.id, () => modelClass.getAutoId()), - ); - - setMeta(instance, MetaModelField.OriginalId, modelMeta?.originalId); - - Object.keys(rawData) - .filter((field) => field !== META_FIELD) - .filter((field) => !(field in fields)) // Only new fields - .forEach((field) => { - const value = rawData[field]; - const isRef = - value instanceof PureModel || - (isArrayLike(value) && - value.length && - (value[0] instanceof PureModel || isModelReference(value[0]))) || - isModelReference(value); - - fields[field] = { - referenceDef: isRef - ? { - type: ReferenceType.TO_ONE_OR_MANY, - model: getModelType(value), - } - : false, - }; - }); - - setMeta(instance, MetaModelField.Fields, fields); - - Object.keys(fields).forEach((fieldName) => { - const fieldDef = fields[fieldName]; - - const data = { - [fieldName]: fieldDef.defaultValue, - ...rawData, - }; - - initModelField(instance, fieldName, modelMapParse(modelClass, data, fieldName)); - }); - - commitModel(instance); -} diff --git a/packages/datx/src/helpers/model/utils.ts b/packages/datx/src/helpers/model/utils.ts deleted file mode 100644 index 67712c0ef..000000000 --- a/packages/datx/src/helpers/model/utils.ts +++ /dev/null @@ -1,375 +0,0 @@ -import { - getMeta, - IRawModel, - META_FIELD, - warn, - setMeta, - mergeMeta, - getMetaObj, - mapItems, - isArrayLike, - mobx, -} from '@datx/utils'; - -import { IModelRef } from '../../interfaces/IModelRef'; -import { IType } from '../../interfaces/IType'; -import { MetaModelField } from '../../enums/MetaModelField'; -import { PureModel } from '../../PureModel'; -import { PureCollection } from '../../PureCollection'; -import { IIdentifier } from '../../interfaces/IIdentifier'; -import { startAction, endAction } from '../patch'; -import { MetaClassField } from '../../enums/MetaClassField'; -import { initModelField } from './init'; -import { IFieldDefinition } from '../../Attribute'; -import { IBucket } from '../../interfaces/IBucket'; -import { error } from '../format'; -import { ReferenceType } from '../../enums/ReferenceType'; -import { DEFAULT_ID_FIELD, DEFAULT_TYPE_FIELD } from '../../consts'; - -const defaultParseSerializeFn = (value: any, _data: any): any => value; - -export function modelMapParse(modelClass: typeof PureModel, data: object, key: string): any { - const parseFn = getMeta( - modelClass, - `${MetaClassField.MapParse}_${key}`, - defaultParseSerializeFn, - true, - ); - - return parseFn(data[key], data); -} - -export function modelMapSerialize(modelClass: typeof PureModel, data: object, key: string): any { - const parseFn = getMeta( - modelClass, - `${MetaClassField.MapSerialize}_${key}`, - defaultParseSerializeFn, - true, - ); - - return parseFn(data[key], data); -} - -export function isModelReference(value: IModelRef | Array): true; -export function isModelReference(value: unknown): false; -export function isModelReference(value: unknown): boolean { - if (isArrayLike(value)) { - return (value as Array).every(isModelReference); - } - - return ( - typeof value === 'object' && - value !== null && - 'type' in value && - 'id' in value && - Object.keys(value).length === 2 - ); -} - -export function isIdentifier(value: any): boolean { - return typeof value === 'string' || typeof value === 'number'; -} - -export function peekNonNullish(...args: any[]): any { - if (args.length === 0) return null; - - let i = -1; - while (++i < args.length) { - let arg = args[i]; - - if (typeof arg === 'function') { - arg = arg(); - } - if (arg !== null && arg !== undefined) { - return arg; - } - } - return null; -} - -/** - * Get the type of the given model - * - * @export - * @param {(IType|typeof PureModel|PureModel)} model Model to be checked - * @returns {IType} Model type - */ -export function getModelType(model: IType | IModelRef | typeof PureModel | PureModel): IType { - if (typeof model === 'function') { - return (model as typeof PureModel).type; - } - - if (isModelReference(model)) { - return (model as IModelRef).type; - } - - if (typeof model === 'object') { - return getMeta(model, MetaModelField.TypeField) || (model.constructor as typeof PureModel).type; - } - - return model; -} - -export function getModelId(model: PureModel | IIdentifier): IIdentifier { - if (model instanceof PureModel) { - const id = getMeta(model, MetaModelField.IdField); - - if (id !== undefined) { - return id; - } - throw error('Model without an ID'); - } - - return model; -} - -export function getModelCollection(model: PureModel): PureCollection | undefined { - return getMeta(model, MetaModelField.Collection); -} - -export function isReference(model: PureModel | IModelRef): boolean { - return !(model instanceof PureModel); -} - -export function getModelRef(model: PureModel | IModelRef): IModelRef { - if (model instanceof PureModel) { - return { - id: getModelId(model), - type: getModelType(model), - }; - } - - return model; -} - -const INTERNAL_META = [ - MetaModelField.Patch, - MetaModelField.PatchListeners, - MetaModelField.Collection, - MetaModelField.Commit, - MetaModelField.OriginalId, - 'get__', - 'set__', - 'data__', - 'ref_', -]; - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries -function fromEntries(entries: Array<[string, any]>): Record { - const data = {}; - - entries.forEach(([key, value]: [string, any]) => { - data[key] = value; - }); - - return data; -} - -export function modelToJSON(model: PureModel): IRawModel { - const meta = getMetaObj(model); - const fields = getMeta>(model, MetaModelField.Fields, {}); - const metaKeys = Object.keys(meta).filter( - (key) => !INTERNAL_META.some((match) => key.startsWith(match)), - ); - const raw = { - [META_FIELD]: Object.assign({}, fromEntries(metaKeys.map((key) => [key, meta[key]])), { - [MetaModelField.IdField]: getModelId(model), - [MetaModelField.TypeField]: getModelType(model), - [MetaModelField.Collection]: undefined, - }), - }; - - Object.keys(fields).forEach((fieldName) => { - const fieldDef = fields[fieldName]; - - if (fieldDef.referenceDef) { - const bucket = getMeta>(model, `ref_${fieldName}`); - - raw[fieldName] = bucket?.snapshot || null; - } else { - raw[fieldName] = modelMapSerialize(model.constructor as typeof PureModel, model, fieldName); - } - }); - - return mobx.toJS(raw); -} - -export function cloneModel(model: T): T { - const rawData = modelToJSON(model); - const meta = rawData[META_FIELD] || {}; - - meta[MetaModelField.OriginalId] = meta[MetaModelField.IdField]; - delete meta[MetaModelField.IdField]; - - const collection = getModelCollection(model); - - if (collection) { - const modelType = getModelType(model); - - return collection.add(rawData, modelType); - } - const TypeModel = model.constructor as typeof PureModel; - - warn(`The model is not in the collection. Referencing the original model won't be possible`); - - return new TypeModel(rawData) as T; -} - -export function getOriginalModel(model: T): T { - const collection = getModelCollection(model); - const originalId = getMeta(model, MetaModelField.OriginalId); - - if (originalId) { - if (!collection) { - throw error('The model needs to be in a collection to be referenceable'); - } - - return collection.findOne(model, originalId) as T; - } - throw error('The given model is not a clone.'); -} - -const READ_ONLY_META: Array = [ - MetaModelField.Fields, - MetaModelField.IdField, - MetaModelField.TypeField, -]; - -function omitKeys(obj: object, keys: Array): object { - const newObj = {}; - - Object.keys(obj) - .filter((key) => !keys.includes(key)) - .forEach((key) => { - newObj[key] = obj[key]; - }); - - return newObj; -} - -export function assignModel(model: T, key: string, value: any): void { - mobx.runInAction(() => { - if (!(model instanceof PureModel)) { - throw error('The given parameter is not a valid model'); - } - const fields: Record = getMeta(model, MetaModelField.Fields, {}); - const shouldBeReference = - (isArrayLike(value) && value.length > 0 && value[0] instanceof PureModel) || - value instanceof PureModel; - - if (key in fields) { - if (shouldBeReference && !fields[key].referenceDef) { - throw error('You should save this value as a reference.'); - } - model[key] = value; - } else { - if (shouldBeReference) { - mobx.extendObservable(fields, { - [key]: { - referenceDef: { - type: ReferenceType.TO_ONE_OR_MANY, - models: Array.from(new Set(mapItems(value, getModelType))), - }, - }, - }); - } else { - mobx.extendObservable(fields, { - [key]: { - referenceDef: false, - }, - }); - } - setMeta(model, MetaModelField.Fields, fields); - initModelField(model, key, value); - } - }); -} - -export function updateModel(model: T, data: Record): T { - startAction(model); - const modelId = getMeta(model.constructor, MetaClassField.IdField, DEFAULT_ID_FIELD); - const modelType = getMeta(model.constructor, MetaClassField.TypeField, DEFAULT_TYPE_FIELD); - - const keys = Object.keys(data instanceof PureModel ? modelToJSON(data) : data); - - mergeMeta(model, omitKeys(data[META_FIELD] || {}, READ_ONLY_META)); - - keys.forEach((key) => { - if (key !== META_FIELD && key !== modelId && key !== modelType) { - assignModel(model, key, data[key]); - } else if (key === META_FIELD) { - const metaKeys = Object.keys(data[key] || {}); - - metaKeys.forEach((metaKey) => { - if (!READ_ONLY_META.includes(metaKey)) { - setMeta(model, metaKey, data[key][metaKey]); - } - }); - } - }); - endAction(model); - - return model; -} - -export function updateModelCollection(model: PureModel, collection?: PureCollection): void { - setMeta(model, MetaModelField.Collection, collection); - - const fields = getMeta>(model, MetaModelField.Fields, {}); - - startAction(model); - Object.keys(fields).forEach((key) => { - const bucket = getMeta(model, `ref_${key}`); - - if (bucket) { - bucket.setCollection(collection); - } - }); - endAction(model); -} - -export function commitModel(model: PureModel): void { - setMeta(model, MetaModelField.Commit, { ...modelToJSON(model), __META__: undefined }); -} - -export function revertModel(model: PureModel): void { - const prevCommit: IRawModel | undefined = getMeta(model, MetaModelField.Commit); - - if (prevCommit) { - updateModel(model, prevCommit); - } -} - -function isSame(valA: any, valB: any): boolean { - return JSON.stringify(valA) === JSON.stringify(valB); // TODO: better comparison? -} - -export function isAttributeDirty(model: T, key: keyof T): boolean { - const prevCommit: IRawModel | undefined = getMeta(model, MetaModelField.Commit); - - if (prevCommit) { - const fields: Record = getMeta(model, MetaModelField.Fields, {}); - const field = fields[key as string]; - - if(field === undefined) { - return false; - } - - const value = field.referenceDef ? mapItems(model[key], getModelRef) : model[key]; - return !isSame(value, prevCommit[key as string]); - } - - return true; -} - -export function modelToDirtyJSON(model: T): IRawModel { - const raw = { ...modelToJSON(model) }; - - Object.keys(model).forEach((key) => { - if (!isAttributeDirty(model, key as keyof T)) { - delete raw[key]; - } - }); - - return raw; -} diff --git a/packages/datx/src/helpers/patch.ts b/packages/datx/src/helpers/patch.ts deleted file mode 100644 index 487021789..000000000 --- a/packages/datx/src/helpers/patch.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { getMeta, setMeta, mobx } from '@datx/utils'; -import { PatchType } from '../enums/PatchType'; -import { IPatch } from '../interfaces/IPatch'; -import { PureModel } from '../PureModel'; -import { getModelCollection, getModelId, getModelRef, getModelType } from './model/utils'; -import { MetaModelField } from '../enums/MetaModelField'; -import { IFieldDefinition } from '../Attribute'; - -function isEmptyObject(data: object): boolean { - return Object.keys(data).length === 0; -} - -export function reverseAction(type: PatchType): PatchType { - switch (type) { - case PatchType.CRATE: - return PatchType.REMOVE; - case PatchType.REMOVE: - return PatchType.CRATE; - default: - return PatchType.UPDATE; - } -} - -interface IPatchMeta { - patchType: PatchType; - oldValue?: Partial; - newValue?: Partial; -} - -export function triggerAction(patchMeta: IPatchMeta, model: PureModel): void { - const patch: IPatch = Object.assign({}, patchMeta, { - model: { - id: getModelId(model), - type: getModelType(model), - }, - }); - - const listeners = getMeta void>>( - model, - MetaModelField.PatchListeners, - [], - ).slice(); - - const collection = getModelCollection(model); - - if (collection && '__patchListeners' in collection) { - ((collection['__patchListeners'] || []) as Array<(patch: IPatch) => void>).forEach((item) => { - listeners.push(item); - }); - } - - listeners.forEach((listener) => { - listener(patch); - }); -} - -export function startAction(model: PureModel): void { - const patchData = getMeta(model, MetaModelField.Patch, { - count: 0, - newValue: {}, - oldValue: {}, - }); - - patchData.count++; - setMeta(model, MetaModelField.Patch, patchData); -} - -export function updateAction( - model: PureModel, - key: string, - value: any, - oldValue?: { value: any }, -): void { - const patchData = getMeta(model, MetaModelField.Patch, { - count: 0, - newValue: {}, - oldValue: {}, - }); - - if ((model[key] === value && !oldValue) || (oldValue && value === oldValue.value)) { - return; - } - const fields = getMeta>(model, MetaModelField.Fields, {}); - - if (!(key in patchData.oldValue)) { - if (oldValue) { - patchData.oldValue[key] = oldValue.value; - } else if (key in fields && fields[key].referenceDef) { - patchData.oldValue[key] = getModelRef(model[key]); - } else { - patchData.oldValue[key] = model[key]; - } - } - patchData.newValue[key] = key in fields && fields[key].referenceDef ? getModelRef(value) : value; - setMeta(model, MetaModelField.Patch, patchData); -} - -export function endAction(model: PureModel, patchType: PatchType = PatchType.UPDATE): void { - const patchData = getMeta(model, MetaModelField.Patch, { - count: 0, - newValue: {}, - oldValue: {}, - }); - - patchData.count--; - if (patchData.count === 0) { - const newValue = mobx.toJS(patchData.newValue); - const oldValue = mobx.toJS(patchData.oldValue); - - if (!isEmptyObject(newValue) || !isEmptyObject(oldValue)) { - triggerAction({ newValue, oldValue, patchType }, model); - } - setMeta(model, MetaModelField.Patch, { count: 0, oldValue: {}, newValue: {} }); - } else { - setMeta(model, MetaModelField.Patch, patchData); - } -} - -export function updateSingleAction( - model: PureModel, - key: string, - value: any, - oldValue?: { value: any }, -): void { - startAction(model); - updateAction(model, key, value, oldValue); - endAction(model); -} diff --git a/packages/datx/src/index.ts b/packages/datx/src/index.ts index e90b1dca4..53b1ddc04 100644 --- a/packages/datx/src/index.ts +++ b/packages/datx/src/index.ts @@ -1,61 +1,2 @@ -import { ToMany, ToOne, ToOneOrMany } from './buckets'; - -export { IRawModel } from '@datx/utils'; - -export const Bucket = { ToMany, ToOne, ToOneOrMany }; - -export { - Attribute, - ViewAttribute, - prop, - view, - IFieldDefinition, - IReferenceDefinition, -} from './Attribute'; -export { Collection } from './Collection'; -export { Model } from './Model'; -export { PureCollection } from './PureCollection'; -export { PureModel } from './PureModel'; -export { View } from './View'; - -export { updateModelId, getRef, getRefId } from './helpers/model/fields'; - -export { initModelRef } from './helpers/model/init'; - -export { - assignModel, - cloneModel, - getModelCollection, - getModelId, - getModelType, - getOriginalModel, - modelToJSON, - updateModel, - modelMapParse, - modelMapSerialize, - commitModel, - revertModel, - isAttributeDirty, - modelToDirtyJSON, -} from './helpers/model/utils'; - -export { isCollection, isModel, isView } from './helpers/mixin'; - -export { IModelRef } from './interfaces/IModelRef'; -export { ICollectionConstructor } from './interfaces/ICollectionConstructor'; -export { IIdentifier } from './interfaces/IIdentifier'; -export { IModelConstructor } from './interfaces/IModelConstructor'; -export { IPatch } from './interfaces/IPatch'; -export { IType } from './interfaces/IType'; -export { IRawCollection } from './interfaces/IRawCollection'; -export { IReferenceOptions } from './interfaces/IReferenceOptions'; -export { IViewConstructor } from './interfaces/IViewConstructor'; -export { IActionsMixin } from './interfaces/IActionsMixin'; -export { IMetaMixin } from './interfaces/IMetaMixin'; - -export { PatchType } from './enums/PatchType'; -export { ReferenceType } from './enums/ReferenceType'; - -export { withActions } from './mixins/withActions'; -export { withMeta } from './mixins/withMeta'; -export { withPatches } from './mixins/withPatches'; +export * from './min'; +export { validateSchema } from './utils/schema/validate'; diff --git a/packages/datx/src/interfaces/IActionsMixin.ts b/packages/datx/src/interfaces/IActionsMixin.ts deleted file mode 100644 index 89b4d10d4..000000000 --- a/packages/datx/src/interfaces/IActionsMixin.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { IRawModel } from '@datx/utils'; - -import { PureModel } from '../PureModel'; -import { IReferenceOptions } from './IReferenceOptions'; -import { TRefValue } from './TRefValue'; - -export interface IActionsMixin { - assign(key: string, value: any): void; - update(data: Record): void; - clone(): IActionsMixin & T; - addReference( - key: string, - value: TRefValue, - options: IReferenceOptions, - ); - commit(): void; - revert(): void; - toJSON(): IRawModel; -} diff --git a/packages/datx/src/interfaces/IBucket.ts b/packages/datx/src/interfaces/IBucket.ts deleted file mode 100644 index 20d0ebe30..000000000 --- a/packages/datx/src/interfaces/IBucket.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ToMany, ToOne, ToOneOrMany } from '../buckets'; -import { PureModel } from '../PureModel'; - -export type IBucket = ToMany | ToOne | ToOneOrMany; diff --git a/packages/datx/src/interfaces/ICollectionConstructor.ts b/packages/datx/src/interfaces/ICollectionConstructor.ts deleted file mode 100644 index 2ac9d9ea4..000000000 --- a/packages/datx/src/interfaces/ICollectionConstructor.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { IRawModel } from '@datx/utils'; - -import { PureCollection } from '../PureCollection'; -import { PureModel } from '../PureModel'; -import { IModelConstructor } from './IModelConstructor'; -import { IRawCollection } from './IRawCollection'; -import { IType } from './IType'; - -export interface ICollectionConstructor { - types: Array; - views: Record< - string, - { - modelType: IType | PureModel; - sortMethod?: string | ((PureModel) => any); - unique?: boolean; - mixins?: Array<(view: any) => any>; - } - >; - - new (data?: Array | IRawCollection): T; -} diff --git a/packages/datx/src/interfaces/ICustomScalar.ts b/packages/datx/src/interfaces/ICustomScalar.ts new file mode 100644 index 000000000..361161833 --- /dev/null +++ b/packages/datx/src/interfaces/ICustomScalar.ts @@ -0,0 +1,18 @@ +import { JsonValue } from 'type-fest'; +import { Collection } from '../Collection'; + +export interface ICustomScalar { + serialize( + value: TInstance, + depth?: number, + flatten?: boolean, + contained?: Array, + ): TPlain; + parseValue( + value: TPlain, + key: string | number, + item: Partial, + collection?: Collection, + ): TInstance; + test?: (item: unknown) => item is TInstance; +} diff --git a/packages/datx/src/interfaces/IFlattenedResource.ts b/packages/datx/src/interfaces/IFlattenedResource.ts new file mode 100644 index 000000000..8d66150b6 --- /dev/null +++ b/packages/datx/src/interfaces/IFlattenedResource.ts @@ -0,0 +1,7 @@ +import { Schema } from '../Schema'; +import { IPlainResource } from './IResource'; + +export interface IFlattenedResource { + data: TIsArray extends true ? Array> : IPlainResource; + linked: Array>; +} diff --git a/packages/datx/src/interfaces/IIdentifier.ts b/packages/datx/src/interfaces/IIdentifier.ts deleted file mode 100644 index 20237e3b0..000000000 --- a/packages/datx/src/interfaces/IIdentifier.ts +++ /dev/null @@ -1 +0,0 @@ -export type IIdentifier = number | string; diff --git a/packages/datx/src/interfaces/IInnerType.ts b/packages/datx/src/interfaces/IInnerType.ts new file mode 100644 index 000000000..398169a11 --- /dev/null +++ b/packages/datx/src/interfaces/IInnerType.ts @@ -0,0 +1,9 @@ +import { TResourceProp } from './TResourceProp'; +import { TResourceType } from './TResourceType'; + +// Define the type options object format +export interface IInnerType { + type: T; + optional?: boolean; + defaultValue?: TResourceProp, false>; +} diff --git a/packages/datx/src/interfaces/IMetaMixin.ts b/packages/datx/src/interfaces/IMetaMixin.ts deleted file mode 100644 index 03ab68469..000000000 --- a/packages/datx/src/interfaces/IMetaMixin.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { IRawModel } from '@datx/utils'; - -import { PureCollection } from '../PureCollection'; -import { PureModel } from '../PureModel'; -import { IIdentifier } from './IIdentifier'; -import { IType } from './IType'; -import { IModelRef } from './IModelRef'; - -export interface IMetaMixin { - meta: { - collection?: PureCollection; - id: IIdentifier; - original?: T; - refs: Record | null>; - dirty: Record; - snapshot: IRawModel; - type: IType; - }; -} diff --git a/packages/datx/src/interfaces/IMetaPatchesCollection.ts b/packages/datx/src/interfaces/IMetaPatchesCollection.ts deleted file mode 100644 index 232387a57..000000000 --- a/packages/datx/src/interfaces/IMetaPatchesCollection.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PureModel } from '../PureModel'; -import { IPatch } from './IPatch'; - -export interface IMetaPatchesCollection { - applyPatch(patch: IPatch): void; - undoPatch(patch: IPatch): void; - - onPatch(listener: (patch: IPatch) => void): () => void; -} diff --git a/packages/datx/src/interfaces/IMetaPatchesModel.ts b/packages/datx/src/interfaces/IMetaPatchesModel.ts deleted file mode 100644 index a2243b948..000000000 --- a/packages/datx/src/interfaces/IMetaPatchesModel.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PureModel } from '../PureModel'; -import { IPatch } from './IPatch'; - -export interface IMetaPatchesModel { - applyPatch(patch: IPatch): void; - undoPatch(patch: IPatch): void; - - onPatch(listener: (patch: IPatch) => void): () => void; -} diff --git a/packages/datx/src/interfaces/IModelConstructor.ts b/packages/datx/src/interfaces/IModelConstructor.ts deleted file mode 100644 index 0b2692ea9..000000000 --- a/packages/datx/src/interfaces/IModelConstructor.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { IRawModel } from '@datx/utils'; - -import { PureCollection } from '../PureCollection'; -import { PureModel } from '../PureModel'; -import { IIdentifier } from './IIdentifier'; -import { IType } from './IType'; - -export interface IModelConstructor { - type: IType; - autoIdValue: IIdentifier; - enableAutoId: boolean; - - new (data?: IRawModel, collection?: PureCollection): T; - - preprocess(data: object, collection?: PureCollection): object; - getAutoId(): IIdentifier; - toJSON(): IType; -} diff --git a/packages/datx/src/interfaces/IModelRef.ts b/packages/datx/src/interfaces/IModelRef.ts deleted file mode 100644 index c794914d2..000000000 --- a/packages/datx/src/interfaces/IModelRef.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IIdentifier } from './IIdentifier'; -import { IType } from './IType'; - -export interface IModelRef { - id: IIdentifier; - type: IType; -} diff --git a/packages/datx/src/interfaces/IOuterType.ts b/packages/datx/src/interfaces/IOuterType.ts new file mode 100644 index 000000000..ede0b89b2 --- /dev/null +++ b/packages/datx/src/interfaces/IOuterType.ts @@ -0,0 +1,7 @@ +import { IInnerType } from './IInnerType'; +import { TResourceType } from './TResourceType'; + +export interface IOuterType { + type: IInnerType; + optional(defaultValue?: T): IOuterType; +} diff --git a/packages/datx/src/interfaces/IPatch.ts b/packages/datx/src/interfaces/IPatch.ts deleted file mode 100644 index adaecb318..000000000 --- a/packages/datx/src/interfaces/IPatch.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { PatchType } from '../enums/PatchType'; -import { PureModel } from '../PureModel'; -import { IIdentifier } from './IIdentifier'; -import { IType } from './IType'; - -export interface IPatch { - patchType: PatchType; - model: { - type: IType; - id: IIdentifier; - }; - oldValue?: Partial; - newValue?: Partial; -} diff --git a/packages/datx/src/interfaces/IRawCollection.ts b/packages/datx/src/interfaces/IRawCollection.ts deleted file mode 100644 index 539b86117..000000000 --- a/packages/datx/src/interfaces/IRawCollection.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IRawModel } from '@datx/utils'; - -import { IRawView } from './IRawView'; - -export interface IRawCollection { - models: Array; - views: Record; -} diff --git a/packages/datx/src/interfaces/IRawView.ts b/packages/datx/src/interfaces/IRawView.ts deleted file mode 100644 index 1769c7505..000000000 --- a/packages/datx/src/interfaces/IRawView.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IIdentifier } from './IIdentifier'; -import { IType } from './IType'; - -export interface IRawView { - modelType: IType; - models: Array; - unique: boolean; -} diff --git a/packages/datx/src/interfaces/IReferenceOptions.ts b/packages/datx/src/interfaces/IReferenceOptions.ts deleted file mode 100644 index f5418ded5..000000000 --- a/packages/datx/src/interfaces/IReferenceOptions.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ReferenceType } from '../enums/ReferenceType'; -import { PureModel } from '../PureModel'; -import { IType } from './IType'; - -export interface IReferenceOptions { - model: T | IType | Array; - property?: string; - type: ReferenceType; -} diff --git a/packages/datx/src/interfaces/IResource.ts b/packages/datx/src/interfaces/IResource.ts new file mode 100644 index 000000000..484cc939d --- /dev/null +++ b/packages/datx/src/interfaces/IResource.ts @@ -0,0 +1,30 @@ +import { SetOptional } from 'type-fest'; +import { Schema } from '../Schema'; +import { ISchemaData } from './ISchemaData'; +import { TResourceProp } from './TResourceProp'; + +type TOptionalKey< + TSchema extends Record, + TKey extends keyof TSchema, + TValue = TSchema[TKey], +> = Exclude> extends never ? never : TKey; + +type TOptionalKeys< + TSchema extends Record, + U extends keyof TSchema = keyof TSchema, +> = U extends any ? TOptionalKey : never; + +type IRecord = { + [P in keyof TSchema['definition']]: TResourceProp; +}; + +export type IResource< + TSchema extends Schema, + TPlain extends boolean = false, + TRecord extends Record = IRecord, +> = SetOptional>; + +export type IPlainResource< + TSchema extends Schema, + TRecord extends ISchemaData = IRecord, +> = SetOptional>; diff --git a/packages/datx/src/interfaces/ISchemaData.ts b/packages/datx/src/interfaces/ISchemaData.ts new file mode 100644 index 000000000..21fa5c7dc --- /dev/null +++ b/packages/datx/src/interfaces/ISchemaData.ts @@ -0,0 +1,6 @@ +import { IOuterType } from './IOuterType'; +import { TResourceType } from './TResourceType'; + +export interface ISchemaData { + [key: string]: IOuterType; +} diff --git a/packages/datx/src/interfaces/ISchemaMeta.ts b/packages/datx/src/interfaces/ISchemaMeta.ts new file mode 100644 index 000000000..5c3638302 --- /dev/null +++ b/packages/datx/src/interfaces/ISchemaMeta.ts @@ -0,0 +1,9 @@ +import { Collection } from '../Collection'; +import { Schema } from '../Schema'; + +export interface ISchemaMeta { + id: string | number; + type: string | number; + schema: Schema; + collection?: Collection; +} diff --git a/packages/datx/src/interfaces/IType.ts b/packages/datx/src/interfaces/IType.ts deleted file mode 100644 index 71174707d..000000000 --- a/packages/datx/src/interfaces/IType.ts +++ /dev/null @@ -1 +0,0 @@ -export type IType = number | string; diff --git a/packages/datx/src/interfaces/IValidationError.ts b/packages/datx/src/interfaces/IValidationError.ts new file mode 100644 index 000000000..49759a31a --- /dev/null +++ b/packages/datx/src/interfaces/IValidationError.ts @@ -0,0 +1,4 @@ +export interface IValidationError { + message: string; + pointer: string; +} diff --git a/packages/datx/src/interfaces/IValidationOptions.ts b/packages/datx/src/interfaces/IValidationOptions.ts new file mode 100644 index 000000000..2e150f034 --- /dev/null +++ b/packages/datx/src/interfaces/IValidationOptions.ts @@ -0,0 +1,22 @@ +export interface IValidationOptions { + /** + * If true, will return an error if extra keys exist in the data + * + * @default true + */ + strict?: boolean; + + /** + * If true, will throw an error if the data is invalid (with only the first found issue) + * + * @default true + */ + throw?: boolean; + + /** + * If true, will check a plain object instead of a resource + * + * @default false + */ + plain?: boolean; +} diff --git a/packages/datx/src/interfaces/IViewConstructor.ts b/packages/datx/src/interfaces/IViewConstructor.ts deleted file mode 100644 index e28434458..000000000 --- a/packages/datx/src/interfaces/IViewConstructor.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { PureCollection } from '../PureCollection'; -import { PureModel } from '../PureModel'; -import { View } from '../View'; -import { IIdentifier } from './IIdentifier'; -import { IModelConstructor } from './IModelConstructor'; -import { IType } from './IType'; - -export type IViewConstructor = new ( - modelType: IModelConstructor | IType, - collection: PureCollection, - sortMethod?: string | ((item: T) => any), - models?: Array, - unique?: boolean, -) => View & V; diff --git a/packages/datx/src/interfaces/TChange.ts b/packages/datx/src/interfaces/TChange.ts deleted file mode 100644 index be490dde2..000000000 --- a/packages/datx/src/interfaces/TChange.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { IArrayChange, IArraySplice } from '@datx/utils'; -import { PureModel } from '../PureModel'; - -export type TChange = IArraySplice | IArrayChange; diff --git a/packages/datx/src/interfaces/TFilterFn.ts b/packages/datx/src/interfaces/TFilterFn.ts deleted file mode 100644 index 76b028cf7..000000000 --- a/packages/datx/src/interfaces/TFilterFn.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { PureModel } from '../PureModel'; - -export type TFilterFn = (item: PureModel, index: number, arr: Array) => boolean; diff --git a/packages/datx/src/interfaces/TRefValue.ts b/packages/datx/src/interfaces/TRefValue.ts deleted file mode 100644 index 91fe9c1aa..000000000 --- a/packages/datx/src/interfaces/TRefValue.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { PureModel } from '../PureModel'; -import { IIdentifier } from './IIdentifier'; -import { IModelRef } from './IModelRef'; - -export type TRefValue = - | Array - | IIdentifier - | IModelRef - | T - | null; diff --git a/packages/datx/src/interfaces/TResourceProp.ts b/packages/datx/src/interfaces/TResourceProp.ts new file mode 100644 index 000000000..3d8932044 --- /dev/null +++ b/packages/datx/src/interfaces/TResourceProp.ts @@ -0,0 +1,36 @@ +import { Schema } from '../Schema'; +import { ICustomScalar } from './ICustomScalar'; +import { IResource } from './IResource'; +import { IInnerType } from './IInnerType'; +import { TResourceType } from './TResourceType'; + +type TSchemaProp = TInner extends Schema + ? IResource + : never; + +type TScalarProp< + TInner extends TResourceType, + TPlain extends boolean, +> = TInner extends ICustomScalar + ? TPlain extends true + ? TPlainProp + : TInnerProp + : never; + +type TArrayProp = TInner extends Array< + infer TInnerProp +> + ? // Array of types + TInnerProp extends IInnerType + ? Array> + : never + : never; + +export type TResourceProp< + TProp extends IInnerType | TResourceType, + TPlain extends boolean, +> = TProp extends IInnerType + ? TSchemaProp | TScalarProp | TArrayProp + : TProp extends TResourceType + ? TSchemaProp | TScalarProp | TArrayProp + : never; diff --git a/packages/datx/src/interfaces/TResourceType.ts b/packages/datx/src/interfaces/TResourceType.ts new file mode 100644 index 000000000..959297d34 --- /dev/null +++ b/packages/datx/src/interfaces/TResourceType.ts @@ -0,0 +1,7 @@ +import { Schema } from '../Schema'; +import { ICustomScalar } from './ICustomScalar'; + +export type TResourceType = + | ICustomScalar + | Schema + | Array | Schema>; diff --git a/packages/datx/src/min.ts b/packages/datx/src/min.ts new file mode 100644 index 000000000..06672a322 --- /dev/null +++ b/packages/datx/src/min.ts @@ -0,0 +1,11 @@ +export { Schema } from './Schema'; +export type { ICustomScalar } from './interfaces/ICustomScalar'; +export type { ISchemaData } from './interfaces/ISchemaData'; +export type { IPlainResource, IResource } from './interfaces/IResource'; +export type { TResourceProp } from './interfaces/TResourceProp'; +export { parseSchema } from './utils/schema/parse'; +export { serializeSchema } from './utils/schema/serialize'; + +export { type } from './type'; + +export { Date, Pojo, Json, String, Number, Boolean } from './commonTypes'; diff --git a/packages/datx/src/mixins/withActions.ts b/packages/datx/src/mixins/withActions.ts deleted file mode 100644 index 1a7d9649b..000000000 --- a/packages/datx/src/mixins/withActions.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { error } from '../helpers/format'; -import { isModel } from '../helpers/mixin'; -import { initModelRef } from '../helpers/model/init'; -import { - assignModel, - cloneModel, - modelToJSON, - updateModel, - getModelType, - commitModel, - revertModel, -} from '../helpers/model/utils'; -import { IActionsMixin } from '../interfaces/IActionsMixin'; -import { IModelConstructor } from '../interfaces/IModelConstructor'; -import { IReferenceOptions } from '../interfaces/IReferenceOptions'; -import { TRefValue } from '../interfaces/TRefValue'; -import { PureModel } from '../PureModel'; - -/** - * Extends the model with some handy actions - * - * @export - * @template T - * @param {IModelConstructor} Base Model to extend - * @returns Extended model - */ -export function withActions( - Base: IModelConstructor, -): IModelConstructor & T> { - const BaseClass = Base as typeof PureModel; - - if (!isModel(Base)) { - throw error('This mixin can only decorate models'); - } - - class WithActions extends BaseClass implements IActionsMixin { - public update(data: Record): void { - updateModel(this, data); - } - - public clone(): IActionsMixin & T { - // @ts-ignore - return cloneModel(this); - } - - public assign(key: string, value: any): void { - assignModel(this, key, value); - } - - public addReference( - key: string, - value: TRefValue, - options: IReferenceOptions, - ): void { - initModelRef( - this, - key, - { - type: options.type, - model: getModelType(options.model), - }, - value, - ); - } - - public commit(): void { - commitModel(this); - } - - public revert(): void { - revertModel(this); - } - - public toJSON(): any { - return modelToJSON(this); - } - } - - return WithActions as IModelConstructor & T>; -} diff --git a/packages/datx/src/mixins/withMeta.ts b/packages/datx/src/mixins/withMeta.ts deleted file mode 100644 index 8f174091c..000000000 --- a/packages/datx/src/mixins/withMeta.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { getMeta, IRawModel, mobx } from '@datx/utils'; - -import { error } from '../helpers/format'; -import { isModel } from '../helpers/mixin'; -import { - getModelCollection, - getModelId, - getModelType, - modelToJSON, - isAttributeDirty, -} from '../helpers/model/utils'; -import { IBucket } from '../interfaces/IBucket'; -import { IMetaMixin } from '../interfaces/IMetaMixin'; -import { IModelConstructor } from '../interfaces/IModelConstructor'; -import { PureModel } from '../PureModel'; -import { MetaModelField } from '../enums/MetaModelField'; -import { IFieldDefinition } from '../Attribute'; -import { IIdentifier } from '../interfaces/IIdentifier'; -import { IType } from '../interfaces/IType'; -import { PureCollection } from '../PureCollection'; -import { IModelRef } from '../interfaces/IModelRef'; - -/** - * Extends the model with the exposed meta data - * - * @export - * @template T - * @param {IModelConstructor} Base Model to extend - * @returns Extended model - */ -export function withMeta( - Base: IModelConstructor, -): IModelConstructor & T> { - const BaseClass = Base as typeof PureModel; - - if (!isModel(BaseClass)) { - throw error('This mixin can only decorate models'); - } - - class MetaClass { - private readonly __instance: T; - - constructor(instance: T) { - this.__instance = instance; - } - - @mobx.computed - public get collection(): PureCollection | undefined { - return getModelCollection(this.__instance); - } - - @mobx.computed - public get id(): IIdentifier { - return getModelId(this.__instance); - } - - @mobx.computed - public get original(): T | undefined { - const originalId = getMeta(this.__instance, MetaModelField.OriginalId); - const collection = getModelCollection(this.__instance); - - return (originalId && collection?.findOne(this.__instance, originalId)) || undefined; - } - - @mobx.computed - public get refs(): Record | null> { - const fields = getMeta>( - this.__instance, - MetaModelField.Fields, - {}, - ); - - const refs = {}; - - Object.keys(fields) - .filter((field) => fields[field].referenceDef) - .forEach((key) => { - const bucket: IBucket | undefined = getMeta(this.__instance, `ref_${key}`); - - if (bucket) { - refs[key] = (bucket && bucket.refValue) || null; - } - }); - - return refs; - } - - @mobx.computed - public get dirty(): Record { - const fields = getMeta>( - this.__instance, - MetaModelField.Fields, - {}, - ); - - const dirty = {}; - - Object.keys(fields).forEach((key) => { - dirty[key] = isAttributeDirty(this.__instance, key as any); - }); - - return dirty; - } - - @mobx.computed - public get snapshot(): any { - return modelToJSON(this.__instance); - } - - @mobx.computed - public get type(): IType { - return getModelType(this.__instance); - } - } - - class WithMeta extends BaseClass implements IMetaMixin { - // @ts-ignore - public readonly meta = new MetaClass(this); - - constructor(rawData?: IRawModel, collection?: PureCollection) { - super(rawData, collection); - Object.defineProperty(this, 'meta', { - enumerable: false, - }); - } - } - - return (WithMeta as unknown) as IModelConstructor & T>; -} diff --git a/packages/datx/src/mixins/withPatches.ts b/packages/datx/src/mixins/withPatches.ts deleted file mode 100644 index 5a199c777..000000000 --- a/packages/datx/src/mixins/withPatches.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { setMeta, getMeta, IRawModel } from '@datx/utils'; - -import { PatchType } from '../enums/PatchType'; -import { error } from '../helpers/format'; -import { isCollection, isModel } from '../helpers/mixin'; -import { getModelId, getModelType, updateModel } from '../helpers/model/utils'; -import { reverseAction } from '../helpers/patch'; -import { ICollectionConstructor } from '../interfaces/ICollectionConstructor'; -import { IMetaPatchesCollection } from '../interfaces/IMetaPatchesCollection'; -import { IMetaPatchesModel } from '../interfaces/IMetaPatchesModel'; -import { IModelConstructor } from '../interfaces/IModelConstructor'; -import { IPatch } from '../interfaces/IPatch'; -import { PureCollection } from '../PureCollection'; -import { PureModel } from '../PureModel'; -import { MetaModelField } from '../enums/MetaModelField'; -import { IRawCollection } from '../interfaces/IRawCollection'; - -function inversePatch(patch: IPatch): IPatch { - const patchType: PatchType = reverseAction(patch.patchType); - - return { - model: patch.model, - newValue: patch.oldValue, - oldValue: patch.newValue, - patchType, - }; -} - -export function withPatches( - Base: IModelConstructor, -): IModelConstructor; - -export function withPatches( - Base: ICollectionConstructor, -): ICollectionConstructor; - -export function withPatches( - Base: ICollectionConstructor | IModelConstructor, -): IModelConstructor | ICollectionConstructor { - if (isCollection(Base)) { - const BaseClass = Base as typeof PureCollection; - - class WithPatches extends BaseClass implements IMetaPatchesCollection { - private __patchListeners: Array<(patch: IPatch) => void> = []; - - constructor(data?: Array | IRawCollection) { - super(data); - Object.defineProperty(this, '__patchListeners', { - enumerable: false, - }); - } - - public applyPatch(patch: IPatch): void { - const model = this.findOne(patch.model.type, patch.model.id); - - if (patch.patchType === PatchType.REMOVE) { - if (model) { - this.removeOne(model); - } else { - // console.log('The model should already exist for a remove patch. Ignoring...'); - } - } else if (patch.patchType === PatchType.UPDATE) { - if (model && patch.newValue) { - updateModel(model, patch.newValue); - } else if (!model) { - throw error('The model should already exist for an update patch'); - } else { - throw error("New patch value isn't set for an update patch"); - } - } else if (model) { - throw error("The model shouldn't exist before a create patch"); - } else if (!patch.newValue) { - throw error("New patch value isn't set for a create patch"); - } else { - this.add(patch.newValue, patch.model.type); - } - } - - public undoPatch(patch: IPatch): void { - this.applyPatch(inversePatch(patch)); - } - - public onPatch(listener: (patch: IPatch) => void): () => void { - this.__patchListeners.push(listener); - - return (): void => { - this.__patchListeners = this.__patchListeners.filter((item) => item !== listener); - }; - } - } - - return (WithPatches as any) as ICollectionConstructor; - } - if (isModel(Base)) { - const BaseClass = Base as typeof PureModel; - - class WithPatches extends BaseClass { - constructor(rawData?: IRawModel, collection?: PureCollection) { - super(rawData, collection); - setMeta(this, MetaModelField.PatchListeners, []); - } - - public applyPatch(patch: IPatch): void { - if (patch.model.type === getModelType(this) && patch.model.id === getModelId(this)) { - updateModel(this, patch.newValue || {}); - } else { - // console.log('Wrong match model'); - } - } - - public undoPatch(patch: IPatch): void { - this.applyPatch(inversePatch(patch)); - } - - public onPatch(listener: (patch: IPatch) => void): () => void { - const listeners = getMeta void>>( - this, - MetaModelField.PatchListeners, - [], - ); - - listeners.push(listener); - - return (): void => { - setMeta( - this, - MetaModelField.PatchListeners, - listeners.filter((item) => item !== listener), - ); - }; - } - } - - return (WithPatches as any) as IModelConstructor; - } - throw error('Only Models and Collections can be decorated with patches'); -} diff --git a/packages/datx/src/type.ts b/packages/datx/src/type.ts new file mode 100644 index 000000000..bb14c992b --- /dev/null +++ b/packages/datx/src/type.ts @@ -0,0 +1,34 @@ +import { JsonValue } from 'type-fest'; +import { ICustomScalar } from './interfaces/ICustomScalar'; +import { Date, Json, Pojo, String, Number, Boolean } from './commonTypes'; + +export function type( + type: ICustomScalar, +): { innerType: ICustomScalar } { + const outerType = { innerType: type }; + + return outerType; +} + +type.Date = type(Date); +type.Json = type(Json); +type.Pojo = type(Pojo); +type.String = type(String); +type.Number = type(Number); +type.Boolean = type(Boolean); + +// type.oneOf = function oneOf( +// ...types: Array>, +// ): { innerType: ICustomScalar } { +// const outerType = { innerType: [types] }; + +// return outerType; +// } + +// type.arrayOf = function arrayOf( +// type: ICustomScalar, +// ): { innerType: ICustomScalar } { +// const outerType = { innerType: [type] }; + +// return outerType; +// } diff --git a/packages/datx/src/utils/helpers.test.ts b/packages/datx/src/utils/helpers.test.ts new file mode 100644 index 000000000..106e0018f --- /dev/null +++ b/packages/datx/src/utils/helpers.test.ts @@ -0,0 +1,19 @@ +import { mapObjectValues } from './helpers'; + +describe('helpers', () => { + describe('mapObjectValues', () => { + it('should map object values', () => { + const obj = { + a: String, + b: Number, + c: Boolean, + }; + const result = mapObjectValues(obj, (key, value) => `${key}-${value.name}`); + expect(result).toEqual({ + a: 'a-String', + b: 'b-Number', + c: 'c-Boolean', + }); + }); + }); +}); diff --git a/packages/datx/src/utils/helpers.ts b/packages/datx/src/utils/helpers.ts new file mode 100644 index 000000000..ba281417b --- /dev/null +++ b/packages/datx/src/utils/helpers.ts @@ -0,0 +1,78 @@ +import { ICustomScalar } from '../interfaces/ICustomScalar'; +import { ISchemaData } from '../interfaces/ISchemaData'; +import { TResourceProp } from '../interfaces/TResourceProp'; +import { Schema } from '../Schema'; +import { parseSchema } from './schema/parse'; +import { serializeSchema } from './schema/serialize'; + +export function mapObjectValues>( + obj: T, + fn: (key: keyof T, value: typeof obj[typeof key], item: Partial) => TReturn | undefined, +): TReturn { + const item: Record = {}; + (Object.entries(obj) as Array<[keyof T, typeof obj[keyof T]]>).map(([key, value]) => { + item[key as string] = fn(key, value, item as Partial); + }); + + return item as TReturn; +} + +export function wrapSchema(schemaFn: () => Schema): ICustomScalar { + return { + serialize: (data, depth, flatten, contained) => + serializeSchema(schemaFn(), data, depth, flatten, contained), + parseValue: (data, _key, _model, collection) => parseSchema(schemaFn(), data, collection), + }; +} + +export function schemaOrReference(schemaFn: () => Schema): ICustomScalar & { + id?: (value: any) => string | number; +} { + return { + id: (data) => schemaFn().id(data), + serialize: (data, depth, flatten, contained) => { + const ModelSchema = schemaFn(); + const id = ModelSchema.id(data); + + if (contained?.includes(id) || depth === 0) { + return id; + } + contained?.push(id); + + return serializeSchema(ModelSchema, data, depth, flatten, contained); + }, + parseValue: (data, key, model, collection) => { + if (typeof data === 'string' || typeof data === 'number') { + const ref = collection?.byId[data]; + + if (ref) { + return ref; + } + collection?.addReferenceListener(model, key, data); + + return undefined; + } + + return parseSchema(schemaFn(), data, collection); + }, + }; +} + +export function mapItems( + items: TItem, + fn: (item: TItem, index: number) => TResult, +): TResult; +export function mapItems( + items: Array, + fn: (item: TItem, index: number) => TResult, +): Array; +export function mapItems( + items: TItem | Array, + fn: (item: TItem, index: number) => TResult, +): TResult | Array { + if (!Array.isArray(items)) { + return fn(items, 0); + } + + return items.map(fn); +} diff --git a/packages/datx/src/utils/schema/merge.test.ts b/packages/datx/src/utils/schema/merge.test.ts new file mode 100644 index 000000000..b04510056 --- /dev/null +++ b/packages/datx/src/utils/schema/merge.test.ts @@ -0,0 +1,53 @@ +import { IResource } from '../../interfaces/IResource'; +import { Schema } from '../../Schema'; +import { mergeSchema } from './merge'; +import { String, Number } from '../../commonTypes'; + +describe('merge', () => { + it('should do basic merging', () => { + const Foo = new Schema( + 'foo', + { + name: String, + age: Number, + }, + (data: IResource) => `foo/${data.name}`, + ); + + const target = { + name: 'Foo', + }; + + const source = { + age: 10, + }; + + const merged = mergeSchema(Foo, target, source); + expect(merged).toEqual({ name: 'Foo', age: 10 }); + expect(target).toEqual({ name: 'Foo' }); + }); + + it('should do merging with same props', () => { + const Foo = new Schema( + 'foo', + { + name: String, + age: Number, + }, + (data: IResource) => `foo/${data.name}`, + ); + + const target = { + name: 'Foo', + }; + + const source = { + name: 'Bar', + age: 10, + }; + + const merged = mergeSchema(Foo, target, source); + expect(merged).toEqual({ name: 'Bar', age: 10 }); + expect(target).toEqual({ name: 'Foo' }); + }); +}); diff --git a/packages/datx/src/utils/schema/merge.ts b/packages/datx/src/utils/schema/merge.ts new file mode 100644 index 000000000..63782efe0 --- /dev/null +++ b/packages/datx/src/utils/schema/merge.ts @@ -0,0 +1,35 @@ +import { IResource } from '../../interfaces/IResource'; +import { TResourceProp } from '../../interfaces/TResourceProp'; +import { Schema } from '../../Schema'; +import { mapObjectValues } from '../helpers'; + +function mergeProp( + target: Partial>, + source: Partial>, +) { + return ( + key: keyof TSchema['definition'], + outerDef: TSchema['definition'][typeof key], + ): TResourceProp<(typeof outerDef)['type']['type'], true> => { + const def = outerDef.type.type; + if (def instanceof Schema) { + // @ts-ignore Figure out why this doesn't work here, but otherwise it's OK + return mergeSchema( + def, + target?.[key as keyof typeof target] as IResource, + source?.[key as keyof typeof source] as IResource, + ); + } + + return (source[key as keyof typeof source] ?? + target[key as keyof typeof target]) as TResourceProp; + }; +} + +export function mergeSchema( + schema: TSchema, + target: Partial>, + source: Partial>, +): IResource { + return mapObjectValues(schema.definition, mergeProp(target, source)); +} diff --git a/packages/datx/src/utils/schema/parse.test.ts b/packages/datx/src/utils/schema/parse.test.ts new file mode 100644 index 000000000..dc59956e9 --- /dev/null +++ b/packages/datx/src/utils/schema/parse.test.ts @@ -0,0 +1,75 @@ +import { User, Comment, CustomType } from '../../../test/mock'; +import { Collection } from '../../Collection'; +import { parseSchema } from './parse'; + +describe('parse', () => { + it('should do basic parsing', () => { + const user = User.parse({ + username: 'FooBar', + age: 27, + }); + + expect(user.username).toBe('FooBar'); + expect(user.age).toBe(27); + }); + + it('should do nested parsing with custom types', () => { + const comment = parseSchema(Comment, { + date: '2022-07-01T00:00:00.000Z', + upvotes: [ + { + username: 'FooBar', + }, + ], + author: { + username: 'FooBar', + }, + post: { + title: 'foobar', + date: '2022-07-01T00:00:00.000Z', + text: 'Lorem ipsum', + }, + text: 'This is a test', + test: 2, + }); + + expect(comment.date.toISOString()).toBe('2022-07-01T00:00:00.000Z'); + expect(comment.post?.date).toBeInstanceOf(Date); + expect(comment.text).toBe('This is a test'); + expect(comment.test).toBeInstanceOf(CustomType); + }); + + it('should reuse instances when using a collection', () => { + const collection = new Collection(); + + const comment = parseSchema( + Comment, + { + date: '2022-07-01T00:00:00.000Z', + upvotes: [ + { + username: 'FooBar', + }, + ], + author: { + username: 'FooBar', + }, + post: { + title: 'foobar', + date: '2022-07-01T00:00:00.000Z', + text: 'Lorem ipsum', + }, + text: 'This is a test', + test: 2, + }, + collection, + ); + + expect(Object.keys(collection.byId)).toHaveLength(3); + + expect(comment.author?.username).toBe('FooBar'); + expect(comment.author).toEqual({ username: 'FooBar', age: 0 }); + expect(comment.author).toBe(comment.upvotes[0]); + expect(comment.featured).toBe(undefined); + }); +}); diff --git a/packages/datx/src/utils/schema/parse.ts b/packages/datx/src/utils/schema/parse.ts new file mode 100644 index 000000000..b8fda03d0 --- /dev/null +++ b/packages/datx/src/utils/schema/parse.ts @@ -0,0 +1,90 @@ +import { Collection } from '../../Collection'; +import { IPlainResource, IResource } from '../../interfaces/IResource'; +import { TResourceProp } from '../../interfaces/TResourceProp'; +import { Schema } from '../../Schema'; +import { SchemaMeta } from '../../SchemaMeta'; +import { mapObjectValues } from '../helpers'; +import { mergeSchema } from './merge'; + +function parseProp(data: IPlainResource, collection?: Collection) { + return ( + key: keyof TSchema['definition'], + outerDef: TSchema['definition'][typeof key], + item: Partial>, + ): TResourceProp => { + const innerDef = outerDef.type; + const def = innerDef.type; + if ('parseValue' in def) { + return def.parseValue( + data[key as keyof typeof data], + key as string | number, + item, + collection, + ) as TResourceProp; + } else if (def instanceof Schema) { + return parseSchema( + def, + data[key as keyof typeof data] as IPlainResource, + collection, + ); + } else if ('defaultValue' in innerDef) { + return (data[key as keyof typeof data] ?? innerDef.defaultValue) as TResourceProp< + typeof def, + true + >; + } else if (def instanceof Array) { + return ( + (data[key as keyof typeof data] || []) as Array + ).map((item) => parseSchema(def[0] as Schema, item, collection)) as TResourceProp< + typeof def, + true + >; + } + + return data[key as keyof typeof data] as TResourceProp; + }; +} + +export function parseSchema( + schema: TSchema, + data: IPlainResource, + extCollection?: Collection, +): IResource; +export function parseSchema( + schema: TSchema, + data: Array>, + extCollection?: Collection, +): Array>; +export function parseSchema( + schema: TSchema, + data: IPlainResource | Array>, + extCollection?: Collection, +): IResource | Array> { + if (!data) { + return data; + } else if (Array.isArray(data)) { + return data.map((item) => parseSchema(schema, item, extCollection)); + } + const collection = extCollection || new Collection(); + const item = mapObjectValues( + schema.definition, + parseProp(data, collection), + ); + + const id = schema.id(item); + const collectionItem = collection?.byId[id]; + + if (collectionItem) { + const merged = mergeSchema(schema, collectionItem as IResource, item); + + return Object.assign(collectionItem, merged); + } + + SchemaMeta.set(item, { id, type: schema.type, schema }); + + if (collection) { + return collection.add(item) as IResource; + } + + return item; +} diff --git a/packages/datx/src/utils/schema/serialize.test.ts b/packages/datx/src/utils/schema/serialize.test.ts new file mode 100644 index 000000000..ffc8c758a --- /dev/null +++ b/packages/datx/src/utils/schema/serialize.test.ts @@ -0,0 +1,156 @@ +import { IResource } from '../..'; +import { Comment } from '../../../test/mock'; +import { Collection } from '../../Collection'; +import { Schema } from '../../Schema'; +import { schemaOrReference, wrapSchema } from '../helpers'; +import { parseSchema } from './parse'; +import { serializeSchema } from './serialize'; +import { String } from '../../commonTypes'; + +describe('serialization', () => { + it('should do nested serialization with custom types', () => { + const comment = parseSchema(Comment, { + date: '2022-07-01T00:00:00.000Z', + upvotes: [ + { + username: 'FooBar', + }, + ], + author: { + username: 'FooBar', + }, + post: { + title: 'foobar', + date: '2022-07-01T00:00:00.000Z', + text: 'Lorem ipsum', + }, + text: 'This is a test', + test: 2, + }); + + // This is ok in the test because it will fail if the type is wrong + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + comment.post!.date = new Date('2022-08-01T00:00:00.000Z'); + + const rawComment = serializeSchema(Comment, comment); + + expect(rawComment.date).toBe('2022-07-01T00:00:00.000Z'); + expect(rawComment.post?.date).toBe('2022-08-01T00:00:00.000Z'); + expect(rawComment.text).toBe('This is a test'); + expect(rawComment.test).toBe(2); + }); + + it('should work for circular references and fixed depth', () => { + const Foo: Schema = new Schema( + 'foo', + { + name: String, + bar: wrapSchema(() => Bar), + }, + (data: IResource) => `foo/${data.name}`, + ); + + const Bar = new Schema( + 'bar', + { + name: String, + foo: Foo, + }, + (data: IResource) => `bar/${data.name}`, + ); + + const collection = new Collection(); + + const foo = parseSchema( + Foo, + { + name: 'foo', + bar: { + name: 'bar', + foo: { + name: 'foo', + bar: { + name: 'bar', + foo: { + name: 'foo', + }, + }, + }, + }, + }, + collection, + ); + + expect(Object.keys(collection.byId)).toHaveLength(2); + + const rawFoo = serializeSchema(Foo, foo, 2); + + expect(rawFoo?.bar?.foo).toHaveProperty('name', 'foo'); + }); + + it('should work for references', () => { + const Foo = new Schema( + 'foo', + { + name: String, + bar: schemaOrReference(() => Bar), + }, + (data: IResource) => `foo/${data.name}`, + ); + const Bar = new Schema( + 'bar', + { + name: String, + foo: schemaOrReference(() => Foo), + }, + (data: IResource) => `bar/${data.name}`, + ); + + const foo: IResource = { + name: 'foo', + bar: undefined, + }; + const bar: IResource = { + name: 'bar', + foo, + }; + foo.bar = bar; + + const rawFoo = serializeSchema(Foo, foo); + const cloneFoo = parseSchema(Foo, rawFoo); + expect(cloneFoo.bar.foo).toBe(cloneFoo); + }); + + it('should work for references when flattening', () => { + const Foo = new Schema( + 'foo', + { + name: String, + bar: schemaOrReference(() => Bar), + }, + (data: IResource) => `foo/${data.name}`, + ); + const Bar = new Schema( + 'bar', + { + name: String, + foo: schemaOrReference(() => Foo), + }, + (data: IResource) => `bar/${data.name}`, + ); + + const foo: IResource = { + name: 'foo', + bar: undefined, + }; + const bar: IResource = { + name: 'bar', + foo, + }; + foo.bar = bar; + + const rawFoo = serializeSchema(Foo, foo, 4, true); + expect(rawFoo.data).toEqual({ name: 'foo', bar: 'bar/bar' }); + expect(rawFoo.linked).toEqual([{ name: 'bar', foo: 'foo/foo' }]); + }); +}); diff --git a/packages/datx/src/utils/schema/serialize.ts b/packages/datx/src/utils/schema/serialize.ts new file mode 100644 index 000000000..d2d173cc5 --- /dev/null +++ b/packages/datx/src/utils/schema/serialize.ts @@ -0,0 +1,115 @@ +import { IFlattenedResource } from '../../interfaces/IFlattenedResource'; +import { IPlainResource, IResource } from '../../interfaces/IResource'; +import { TResourceProp } from '../../interfaces/TResourceProp'; +import { Schema } from '../../Schema'; +import { mapObjectValues } from '../helpers'; + +export function serializeSchema( + schema: TSchema, + data: IResource, + depth?: number, + flatten?: false, + contained?: Array, +): IPlainResource; +export function serializeSchema( + schema: TSchema, + data: Array>, + depth?: number, + flatten?: false, + contained?: Array, +): Array>; +export function serializeSchema( + schema: TSchema, + data: IResource, + depth: number, + flatten: true, + contained?: Array, +): IFlattenedResource; +export function serializeSchema( + schema: TSchema, + data: Array>, + depth: number, + flatten: true, + contained?: Array, +): IFlattenedResource; +export function serializeSchema( + schema: TSchema, + data: IResource, + depth?: number, + flatten?: boolean, + contained?: Array, +): + | IPlainResource + | IFlattenedResource + | Array> + | IFlattenedResource; +export function serializeSchema( + schema: TSchema, + data: IResource | Array>, + depth = Infinity, + flatten = false, + contained: Array = [], +): + | IPlainResource + | IFlattenedResource + | Array> + | IFlattenedResource { + if (!data) { + return data; + } else if (Array.isArray(data)) { + const items = data.map((item) => serializeSchema(schema, item, depth, flatten, contained)); + + return flatten + ? ({ + data: (items as Array>).map((item) => item.data).flat(), + linked: (items as Array>).map((item) => item.linked).flat(), + } as IFlattenedResource) + : (items as Array>); + } + contained.push(schema.id(data)); + const linked: Array> = []; + const item = mapObjectValues< + TSchema['definition'], + TResourceProp + >( + schema.definition, + ( + key: keyof TSchema['definition'], + outerDef: TSchema['definition'][typeof key], + ): TResourceProp<(typeof outerDef)['type']['type'], false> | undefined => { + const innerDef = outerDef.type; + const def = innerDef.type; + const innerData = data[key as keyof typeof data]; + + if ('serialize' in def) { + const id = 'id' in def ? (def.id?.(innerData) as any) : undefined; // TODO: Add string|number as a valid type for plain relations + + if (depth === 0) { + return id; + } + + const innerItem = def.serialize(innerData, depth - 1, flatten, contained) as TResourceProp< + typeof def, + false + >; + + if (flatten) { + linked.push(innerItem.data); + linked.push.apply(linked, innerItem.linked); + + return id; + } else { + return innerItem; + } + } + + return innerData as TResourceProp; + }, + ); + + if (flatten) { + return { data: item, linked: linked.filter(Boolean) } as IFlattenedResource; + } + + return item; +} diff --git a/packages/datx/src/utils/schema/validate.test.ts b/packages/datx/src/utils/schema/validate.test.ts new file mode 100644 index 000000000..48c8fff78 --- /dev/null +++ b/packages/datx/src/utils/schema/validate.test.ts @@ -0,0 +1,225 @@ +import { validateSchema, validatePlainSchema } from './validate'; +import { Comment, User } from '../../../test/mock'; + +describe('instance', () => { + describe('validation', () => { + it('should check for missing properties', () => { + // @ts-expect-error Wrong on purpose + const [isError, errors] = validateSchema(User, {}); + expect(isError).toBe(true); + expect(errors).toEqual([ + { + message: 'Missing required property username', + pointer: 'username', + }, + ]); + }); + + it('should report an error for extra fields in strict mode', () => { + const [isError, errors] = validateSchema( + User, + { + username: 'FooBar', + // @ts-expect-error Wrong on purpose + foobar: true, + }, + { strict: true }, + ); + expect(isError).toBe(true); + expect(errors).toEqual([ + { + message: 'Extra key foobar found', + pointer: 'foobar', + }, + ]); + }); + + it('should not report an error for extra fields in non-strict mode', () => { + const [isError, errors] = validateSchema( + User, + { + username: 'FooBar', + // @ts-expect-error Wrong on purpose + foobar: true, + }, + { strict: false }, + ); + expect(isError).toBe(false); + expect(errors).toEqual([]); + }); + + it('should check for wrong primitive types', () => { + const [isError, errors] = validateSchema(User, { + // @ts-expect-error Wrong on purpose + username: 42, + // @ts-expect-error Wrong on purpose + age: 'old', + }); + expect(isError).toBe(true); + expect(errors).toEqual([ + { + message: 'Wrong property type for username', + pointer: 'username', + }, + { + message: 'Wrong property type for age', + pointer: 'age', + }, + ]); + }); + + it('should throw first error if throw flag is set', () => { + expect(() => + validateSchema( + User, + { + // @ts-expect-error Wrong on purpose + username: 42, + // @ts-expect-error Wrong on purpose + age: 'old', + }, + { throw: true }, + ), + ).toThrowError('Wrong property type for username'); + }); + + it('should check for invalid custom types (primitive)', () => { + const [isError, errors] = validateSchema(Comment, { + date: new Date(), + upvotes: [], + author: { + username: 'FooBar', + }, + post: { + title: 'foobar', + date: new Date(), + text: 'Lorem ipsum', + }, + text: 'This is a test', + // @ts-expect-error Wrong on purpose + test: 2, + }); + + expect(isError).toBe(true); + expect(errors).toEqual([ + { + message: 'Wrong property type for test', + pointer: 'test', + }, + ]); + }); + + it('should check for invalid custom types (custom)', () => { + // Same name and signature on purpose + class CustomType { + public foo = 1; + } + + const [isError, errors] = validateSchema(Comment, { + date: new Date(), + upvotes: [], + author: { + username: 'FooBar', + }, + post: { + title: 'foobar', + date: new Date(), + text: 'Lorem ipsum', + }, + text: 'This is a test', + // TODO: this should be a TS error // @ts-expect-error Wrong on purpose + test: new CustomType(), + }); + + expect(isError).toBe(true); + expect(errors).toEqual([ + { + message: 'Wrong property type for test', + pointer: 'test', + }, + ]); + }); + + it('should check nested schemas', () => { + const [isError, errors] = validateSchema(Comment, { + date: new Date(), + upvotes: [], + author: { + // @ts-expect-error Wrong on purpose + username: 42, + // @ts-expect-error Wrong on purpose + age: 'old', + }, + post: { + // @ts-expect-error Wrong on purpose + title: true, + // @ts-expect-error Wrong on purpose + date: 'today', + // @ts-expect-error Wrong on purpose + text: true, + }, + text: 'This is a test', + }); + + expect(isError).toBe(true); + expect(errors).toEqual([ + { + message: 'Wrong property type for username', + pointer: 'author.username', + }, + { + message: 'Wrong property type for age', + pointer: 'author.age', + }, + { + message: 'Wrong property type for title', + pointer: 'post.title', + }, + { + message: 'Wrong property type for date', + pointer: 'post.date', + }, + { + message: 'Wrong property type for text', + pointer: 'post.text', + }, + ]); + }); + + it('should check custom types and schemas in plain objects', () => { + const [isError, errors] = validatePlainSchema(Comment, { + // @ts-expect-error Wrong on purpose + date: new Date(), + upvotes: [], + author: { + username: 'FooBar', + }, + post: { + title: 'foobar', + // @ts-expect-error Wrong on purpose + date: 123, + text: 'Lorem ipsum', + }, + text: 'This is a test', + // @ts-expect-error Wrong on purpose + test: true, + }); + + expect(isError).toBe(true); + expect(errors).toEqual([ + { + message: 'Wrong property type for date', + pointer: 'post.date', + }, + { + message: 'Wrong property type for date', + pointer: 'date', + }, + { + message: 'Wrong property type for test', + pointer: 'test', + }, + ]); + }); + }); +}); diff --git a/packages/datx/src/utils/schema/validate.ts b/packages/datx/src/utils/schema/validate.ts new file mode 100644 index 000000000..5afa9acc1 --- /dev/null +++ b/packages/datx/src/utils/schema/validate.ts @@ -0,0 +1,127 @@ +import { IInnerType } from '../../interfaces/IInnerType'; +import { IResource } from '../../interfaces/IResource'; +import { IValidationError } from '../../interfaces/IValidationError'; +import { IValidationOptions } from '../../interfaces/IValidationOptions'; +import { Schema } from '../../Schema'; +import { mapObjectValues } from '../helpers'; + +export function validatePlainSchema( + schema: TSchema, + data: IResource, + options?: IValidationOptions, + path = '', +): [boolean, Array] { + return validateSchema( + schema, + // Some cheating to avoid a mess of types + data as unknown as IResource, + { ...options, plain: true }, + path, + ); +} + +export function validateSchema( + schema: TSchema, + data: IResource, + options?: IValidationOptions, + path = '', +): [boolean, Array] { + let dataKeys = Object.keys(data); + const errors: Array = []; + mapObjectValues( + schema.definition, + (key: keyof TSchema['definition'], def: TSchema['definition'][typeof key]) => { + dataKeys = dataKeys.filter((k) => k !== key); + + const typeObj = + 'type' in def && !(def instanceof Schema) + ? (def as IInnerType) + : ({ type: def, optional: def?.['optional'] ?? false } as IInnerType); + + const type = typeObj.type; + const optional = typeObj?.['optional'] ?? false; + const value = data[key as keyof IResource]; + + if (typeof value === 'undefined' && !optional) { + errors.push({ + message: `Missing required property ${key as string}`, + pointer: `${path}${key as string}`, + }); + } else if (type instanceof Schema) { + const [hasErrors, subErrors] = validateSchema( + type, + value as IResource, + options, + `${path}${key as string}.`, + ); + + if (hasErrors) { + errors.push(...subErrors); + } + } else if (typeof type === 'function') { + if (value !== type(value)) { + if (typeof value === 'undefined' && optional) { + return; + } + errors.push({ + message: `Wrong property type for ${key as string}`, + pointer: `${path}${key as string}`, + }); + } + } else if ('parseValue' in def) { + if (typeof value === 'undefined' && optional) { + return; + } + try { + if (options?.plain) { + const clone = def.serialize(def.parseValue(value, key as string | number, data)); + + if (value !== clone) { + errors.push({ + message: `Wrong property type for ${key as string}`, + pointer: `${path}${key as string}`, + }); + } + } else { + let correctType = false; + if (def.test) { + correctType = def.test(value); + } else if (def instanceof Schema) { + correctType = (value as unknown) instanceof def.constructor; + } else { + correctType = (value as unknown) instanceof (def as any); + } + + if (!correctType) { + console.log(value, typeof value, key); + errors.push({ + message: `Wrong property type for ${key as string}`, + pointer: `${path}${key as string}`, + }); + } + } + } catch (e) { + errors.push({ + message: `Wrong property type for ${key as string}`, + pointer: `${path}${key as string}`, + }); + } + } + }, + ); + + if (options?.strict) { + errors.push( + ...dataKeys.map((key) => ({ + message: `Extra key ${path}${key} found`, + pointer: `${path}${key}`, + })), + ); + } + + if (options?.throw && errors.length > 0) { + throw new Error(errors[0].message); + } + + return [errors.length !== 0, errors]; +} diff --git a/packages/datx/test/__snapshots__/model.test.ts.snap b/packages/datx/test/__snapshots__/model.test.ts.snap deleted file mode 100644 index 75ee726e1..000000000 --- a/packages/datx/test/__snapshots__/model.test.ts.snap +++ /dev/null @@ -1,24 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Model Basic features should work with valueOf and toString 1`] = ` -Object { - "bar": 2, - "baz": undefined, - "foo": 1, - "meta": Object { - "id": -1, - "type": "__DEFAULT_TYPE__", - }, -} -`; - -exports[`Model Basic features should work with valueOf and toString 2`] = ` -"{ - \\"foo\\": 1, - \\"bar\\": 2, - \\"meta\\": { - \\"id\\": -1, - \\"type\\": \\"__DEFAULT_TYPE__\\" - } -}" -`; diff --git a/packages/datx/test/__snapshots__/patches.test.ts.snap b/packages/datx/test/__snapshots__/patches.test.ts.snap deleted file mode 100644 index fded83cf4..000000000 --- a/packages/datx/test/__snapshots__/patches.test.ts.snap +++ /dev/null @@ -1,361 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`patch collection with initial data should trigger on add, replace and remove 1`] = ` -Array [ - Object { - "model": Object { - "id": 1, - "type": "foo", - }, - "newValue": Object { - "name": "FooBar", - }, - "oldValue": Object { - "name": "Foo", - }, - "patchType": 1, - }, - Object { - "model": Object { - "id": 1, - "type": "foo", - }, - "newValue": Object { - "age": 42, - }, - "oldValue": Object { - "age": undefined, - }, - "patchType": 1, - }, - Object { - "model": Object { - "id": 1, - "type": "foo", - }, - "newValue": Object { - "nick": undefined, - }, - "oldValue": Object { - "nick": "Bar", - }, - "patchType": 1, - }, - Object { - "model": Object { - "id": 1, - "type": "foo", - }, - "newValue": Object { - "height": 180, - "name": "Bar", - }, - "oldValue": Object { - "height": undefined, - "name": "FooBar", - }, - "patchType": 1, - }, - Object { - "model": Object { - "id": 1, - "type": "foo", - }, - "oldValue": Object { - "__META__": Object { - "collection": undefined, - "fields": Object { - "age": Object { - "referenceDef": false, - }, - "height": Object { - "referenceDef": false, - }, - "name": Object { - "referenceDef": false, - }, - "nick": Object { - "referenceDef": false, - }, - }, - "id": 1, - "type": "foo", - }, - "age": 42, - "height": 180, - "name": "Bar", - "nick": undefined, - }, - "patchType": 2, - }, -] -`; - -exports[`patch model should be able to undo 1`] = ` -Array [ - Object { - "model": Object { - "id": -3, - "type": "__DEFAULT_TYPE__", - }, - "newValue": Object { - "age": 42, - }, - "oldValue": Object { - "age": undefined, - }, - "patchType": 1, - }, - Object { - "model": Object { - "id": -3, - "type": "__DEFAULT_TYPE__", - }, - "newValue": Object { - "height": 180, - "name": "FooBar", - }, - "oldValue": Object { - "height": undefined, - "name": "Foo", - }, - "patchType": 1, - }, - Object { - "model": Object { - "id": -3, - "type": "__DEFAULT_TYPE__", - }, - "newValue": Object { - "nick": undefined, - }, - "oldValue": Object { - "nick": "Bar", - }, - "patchType": 1, - }, -] -`; - -exports[`patch model should ignore noop changes 1`] = ` -Array [ - Object { - "model": Object { - "id": -4, - "type": "__DEFAULT_TYPE__", - }, - "newValue": Object { - "age": 42, - }, - "oldValue": Object { - "age": undefined, - }, - "patchType": 1, - }, -] -`; - -exports[`patch model should trigger on add, replace and remove 1`] = ` -Array [ - Object { - "model": Object { - "id": -1, - "type": "__DEFAULT_TYPE__", - }, - "newValue": Object { - "name": "FooBar", - }, - "oldValue": Object { - "name": "Foo", - }, - "patchType": 1, - }, - Object { - "model": Object { - "id": -1, - "type": "__DEFAULT_TYPE__", - }, - "newValue": Object { - "age": 42, - }, - "oldValue": Object { - "age": undefined, - }, - "patchType": 1, - }, - Object { - "model": Object { - "id": -1, - "type": "__DEFAULT_TYPE__", - }, - "newValue": Object { - "nick": undefined, - }, - "oldValue": Object { - "nick": "Bar", - }, - "patchType": 1, - }, - Object { - "model": Object { - "id": -1, - "type": "__DEFAULT_TYPE__", - }, - "newValue": Object { - "height": 180, - "name": "Bar", - }, - "oldValue": Object { - "height": undefined, - "name": "FooBar", - }, - "patchType": 1, - }, -] -`; - -exports[`patch references should trigger correct patches for ref changes 1`] = ` -Array [ - Object { - "model": Object { - "id": 2, - "type": "bar", - }, - "newValue": Object { - "__META__": Object { - "collection": undefined, - "fields": Object { - "id": Object { - "defaultValue": undefined, - "referenceDef": false, - }, - }, - "id": 2, - "type": "bar", - }, - "id": 2, - }, - "patchType": 0, - }, - Object { - "model": Object { - "id": 1, - "type": "foo", - }, - "newValue": Object { - "bar": Object { - "id": 2, - "type": "bar", - }, - }, - "oldValue": Object { - "bar": undefined, - }, - "patchType": 0, - }, - Object { - "model": Object { - "id": 1, - "type": "foo", - }, - "newValue": Object { - "__META__": Object { - "collection": undefined, - "fields": Object { - "bar": Object { - "defaultValue": undefined, - "referenceDef": Object { - "model": "bar ", - "type": 0, - }, - }, - "id": Object { - "defaultValue": undefined, - "referenceDef": false, - }, - }, - "id": 1, - "type": "foo", - }, - "bar": Object { - "id": 2, - "type": "bar", - }, - "id": 1, - }, - "patchType": 0, - }, - Object { - "model": Object { - "id": 1, - "type": "foo", - }, - "newValue": Object { - "bar": Object { - "id": 3, - "type": "bar", - }, - }, - "oldValue": Object { - "bar": Object { - "id": 2, - "type": "bar", - }, - }, - "patchType": 1, - }, - Object { - "model": Object { - "id": 3, - "type": "bar", - }, - "newValue": Object { - "__META__": Object { - "collection": undefined, - "fields": Object { - "id": Object { - "defaultValue": undefined, - "referenceDef": false, - }, - }, - "id": 3, - "type": "bar", - }, - "id": 3, - }, - "patchType": 0, - }, - Object { - "model": Object { - "id": 1, - "type": "foo", - }, - "newValue": Object { - "bar": null, - }, - "oldValue": Object { - "bar": Object { - "id": 3, - "type": "bar", - }, - }, - "patchType": 1, - }, - Object { - "model": Object { - "id": 1, - "type": "foo", - }, - "newValue": Object { - "bar": Object { - "id": 3, - "type": "bar", - }, - }, - "oldValue": Object { - "bar": null, - }, - "patchType": 1, - }, -] -`; diff --git a/packages/datx/test/collection.test.ts b/packages/datx/test/collection.test.ts deleted file mode 100644 index 6c273be19..000000000 --- a/packages/datx/test/collection.test.ts +++ /dev/null @@ -1,729 +0,0 @@ -import testMobx from './mobx'; - -import { - Collection, - PureModel, - Attribute, - updateModelId, - Model, - getRefId, - modelToJSON, -} from '../src'; -import { isCollection, isModel } from '../src/helpers/mixin'; -import { getModelCollection, getModelId } from '../src/helpers/model/utils'; -import { mobx } from '@datx/utils'; - -// @ts-ignore -testMobx.configure({ enforceActions: 'observed' }); - -describe('Collection', () => { - describe('Basic features', () => { - it('should initialize', () => { - const collection = new Collection(); - - expect(collection.length).toBe(0); - - expect(isCollection(Collection)).toBe(true); - expect(isModel(Collection)).toBe(false); - }); - - it('should work with models', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public foo!: number; - - @Attribute() - public bar!: number; - - @Attribute() - public baz!: number; - } - - class Baz extends PureModel { - public static type = 'baz'; - } - - class FooBar {} - - class Store extends Collection { - public static types = [Foo]; - - public static defaultModel = undefined; - } - - const store = new Store(); - const store2 = new Store(); - const foo1 = store.add({ foo: 1 }, Foo); - const foo2 = store.add({ foo: 2 }, 'foo'); - const foo3 = store.add(new Foo({ foo: 3 })); - const foo4 = new Foo({ foo: 4 }); - - expect(store.length).toBe(3); - expect(foo1.foo).toBe(1); - expect(foo2.foo).toBe(2); - expect(foo3.foo).toBe(3); - - store.add(foo1); - expect(store.length).toBe(3); - - expect(() => store2.add(foo1)).toThrowError('A model can be in a single collection at once'); - - expect(() => store.add({ foo: 4 })).toThrowError( - 'The type needs to be defined if the object is not an instance of the model.', - ); - - expect(() => store.add({ foo: 4 }, 'bar')).toThrowError( - 'No model is defined for the type bar.', - ); - - expect(() => store.add({ foo: 4 }, Baz)).toThrowError( - 'No model is defined for the type baz.', - ); - - // @ts-expect-error - expect(() => store.add({ foo: 4 }, FooBar)).toThrowError( - 'The type needs to be defined if the object is not an instance of the model.', - ); - - expect(() => store.add([{ foo: 4 }, { foo: 5 }])).toThrowError( - 'The type needs to be defined if the object is not an instance of the model.', - ); - - expect(store.hasItem(foo1)).toBe(true); - expect(store.hasItem(foo4)).toBe(false); - - expect(getModelCollection(foo1)).toBe(store); - store.removeOne(foo1); - expect(getModelCollection(foo1)).toBe(undefined); - expect(store.findOne(Foo, 'unexisting')).toBeNull(); - expect(store.findOne('unexisting', 1)).toBeNull(); - - expect(getModelCollection(foo2)).toBe(store); - store.removeOne(Foo, getModelId(foo2)); - expect(getModelCollection(foo2)).toBe(undefined); - store.removeOne(Foo, 'unexisting'); // Should not do anything - - expect(store.filter((item: Foo) => item.foo > 2).length).toBe(1); - expect(store.length).toBe(store.findAll().length); - expect(store.findAll('unexisting').length).toBe(0); - - store.removeOne([foo3, foo4]); // Remove foo3, ignore foo4 - expect(store.length).toBe(0); - }); - - it('should work with property parsers/serializers', () => { - class Foo extends Model { - @Attribute({ - parse: (value: string) => parseInt(value, 10), - serialize: (value: number) => `TEST:${value}`, - }) - public value!: number; - - @Attribute({ - parse: (_value: string, data: Record) => parseInt(data.value, 10) * 2, - serialize: (value: number, data: Record) => `TEST:${value}:${data.value}`, - }) - public double!: number; - - @Attribute({ isIdentifier: true }) - public id!: number; - } - - class Store extends Collection { - public static types = [Foo]; - } - - const store = new Store(); - - const foo = store.add({ value: '123', id: 1 }, Foo); - - expect(foo.value).toBe(123); - expect(foo.double).toBe(246); - - foo.value = 321; - expect(foo.value).toBe(321); - expect(foo.double).toBe(246); - - const snapshot = foo.toJSON(); - - expect(snapshot.value).toBe('TEST:321'); - expect(snapshot.double).toBe('TEST:246:321'); - - // Make sure it doesn't trigger for other models - store.add({ value: '234', id: 2 }, Foo); - expect(foo.value).toBe(321); - expect(foo.double).toBe(246); - - // Make sure it works with upsert - store.add({ value: '345', id: 1 }, Foo); - expect(foo.value).toBe(345); - expect(foo.double).toBe(690); - }); - - it('should work with preprocess', () => { - class Foo extends PureModel { - public static type = 'foo'; - - static preprocess(data: object): object { - return { - ...data, - baz: 100, - }; - } - - @Attribute() - public foo!: number; - - @Attribute() - public bar!: number; - - @Attribute() - public baz!: number; - } - - class Store extends Collection { - public static types = [Foo]; - } - - const store = new Store(); - - const model = store.add({ foo: 1, bar: 2 }, Foo); - - expect(model.baz).toBe(100); - }); - - it('should work with removing all models of a certain type', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public foo!: number; - - @Attribute() - public bar!: number; - - @Attribute() - public baz!: number; - } - - class Baz extends PureModel { - public static type = 'baz'; - } - - class Store extends Collection { - public static types = [Foo, Baz]; - } - - const store = new Store(); - - store.add([{}, {}, {}], Foo); - store.add([{}, {}], Baz); - store.add({}, Foo); - store.removeAll(Foo); - expect(store.length).toBe(2); - }); - - it('should reset the collection', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public foo!: number; - } - - class Store extends Collection { - public static types = [Foo]; - } - - const store = new Store(); - const foo1 = store.add({ foo: 1 }, Foo); - const foo2 = store.add({ foo: 2 }, 'foo'); - - expect(store.findOne('foo', getModelId(foo2))).toBeTruthy(); - expect(getModelCollection(foo1)).toBe(store); - - store.reset(); - - expect(store.findOne('foo', getModelId(foo2))).toBeFalsy(); - expect(getModelCollection(foo1)).toBe(undefined); - - store.add(foo1); - expect(getModelCollection(foo1)).toBe(store); - }); - - it('Should support serialization/deserialization', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public foo!: number; - - @Attribute() - public bar!: number; - - @Attribute() - public baz!: number; - } - - class Store extends Collection { - public static types = [Foo]; - } - - const store = new Store(); - const foo1 = store.add({ foo: 1 }, Foo); - - store.add({ foo: 2 }, 'foo'); - store.add(new Foo({ foo: 3 })); - - const raw = store.toJSON(); - - const store2 = new Store(raw); - - expect(store2.length).toBe(3); - const foo1b = store2.find((item: Foo) => item.foo === 1); - - expect(foo1b).toBeInstanceOf(Foo); - expect(foo1b && getModelId(foo1b)).toBe(getModelId(foo1)); - expect(foo1b).not.toBe(foo1); - - const fooB = store2.findAll(Foo)[0]; - - expect(fooB).toBeInstanceOf(Foo); - }); - - it('should upsert existing models', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public foo!: number; - - @Attribute() - public bar!: number; - - @Attribute() - public baz!: number; - } - - class Store extends Collection { - public static types = [Foo]; - } - - const store = new Store(); - const foo = store.add({ foo: 1 }, Foo); - - expect(store.length).toBe(1); - expect(store.findAll(Foo)).toHaveLength(1); - - store.add(foo); - - expect(store.length).toBe(1); - expect(store.findAll(Foo)).toHaveLength(1); - - updateModelId(foo, '123'); - - store.add(foo); - - expect(store.length).toBe(1); - expect(store.findAll(Foo)).toHaveLength(1); - }); - - it('should make model snapshots immutable', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public foo!: number; - - @Attribute() - public bar!: number; - - @Attribute() - public baz!: number; - } - - class Store extends Collection { - public static types = [Foo]; - } - - const store = new Store(); - const foo1 = store.add({ foo: 1 }, Foo); - - store.add({ foo: 2 }, 'foo'); - store.add(new Foo({ foo: 3 })); - expect(foo1.foo).toBe(1); - - const raw = store.toJSON(); - - raw.models[0].foo = 4; - expect(foo1.foo).toBe(1); - - const store2 = new Store(raw); - - expect(store2.length).toBe(3); - const foo1b = store2.find((item: Foo) => item.foo === 1); - const foo1c = store2.find((item: Foo) => item.foo === 4); - - expect(foo1b).toBeNull(); - expect(foo1c).not.toBe(foo1); - expect(foo1.foo).toBe(1); - }); - - it('should trigger autorun after a model is added', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ isIdentifier: true }) - public id!: number; - - @Attribute() - public foo!: number; - - @Attribute() - public bar!: number; - - @Attribute() - public baz!: number; - } - - class Store extends Collection { - public static types = [Foo]; - } - - const store = new Store(); - - let autorunLengthCount = 0; - let fooLength; - - testMobx.autorun(() => { - autorunLengthCount++; - fooLength = store.findAll(Foo).length; - }); - - let autorunModelCount = 0; - let foo; - - testMobx.autorun(() => { - autorunModelCount++; - foo = store.findOne(Foo, 123); - }); - - const foo2 = store.add({ id: 123 }, Foo); - - if (mobx.useRealMobX) { - expect(autorunModelCount).toBe(2); - expect(foo).toBe(foo2); - - expect(autorunLengthCount).toBe(2); - expect(fooLength).toBe(1); - } - // The test doesn't make sense if MobX is not used - }); - - it('should auto set ref value at be a model is added', () => { - class Pet extends Model { - static type = 'pet'; - @Attribute({ isIdentifier: true }) public id!: number; - } - - class Toy extends Model { - static type = 'toy'; - @Attribute({ isIdentifier: true }) public id!: number; - } - - class Person extends Model { - static type = 'person'; - @Attribute({ isIdentifier: true }) public id!: number; - @Attribute({ toOne: Person }) public spouse!: Person; - @Attribute({ toMany: Pet }) public pets!: Pet[]; - @Attribute({ toOneOrMany: Toy }) public toy!: Toy | Toy[]; - } - - class Store extends Collection { - static types = [Person, Pet, Toy]; - } - - const store = new Store(); - const steve = store.add({ spouse: 1111, id: 200, pets: [1, 2, 3] }, Person); - const jane = store.add({ id: 1111, spouse: 200, toy: 10 }, Person); - store.add([{ id: 1 }, { id: 2 }, { id: 3 }], Pet); - - expect(steve.spouse).toBe(jane); - expect(jane.spouse).toBe(steve); - expect(steve.pets).toBeInstanceOf(Array); - expect(steve.pets.map((d) => d.id)).toEqual([1, 2, 3]); - const toy10 = store.add({ id: 10 }, Toy); - expect(jane.toy).toBe(toy10); - jane.toy = store.add([{ id: 11 }, { id: 12 }], Toy); - expect(jane.toy.map((d) => d.id)).toEqual([11, 12]); - - const store2 = new Store(); - const steve2 = store2.add({ spouse: { id: 1, type: 'person' }, id: 1 }, Person); - expect(getRefId(steve2, 'spouse')).toEqual({ id: 1, type: 'person' }); - }); - - it('should upgrade ref fields by id or id[]', () => { - class Foo extends Model { - static type = 'foo'; - @Attribute({ isIdentifier: true }) public id!: string; - @Attribute({ toOne: Foo }) public parent!: Foo; - @Attribute({ toMany: Foo }) public children!: Foo[]; - } - - class Store extends Collection { - static types = [Foo]; - } - - const store = new Store(); - store.add( - [ - { id: '1', parent: null, children: ['2', '3', '4'] }, - { id: '1', parent: null, children: ['2', '3', '5'] }, - ], - Foo, - ); - - const foo1 = store.findOne(Foo, '1'); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const refId = getRefId(foo1!, 'children'); - expect(refId).toBeInstanceOf(Array); - expect((refId as any[]).map((d) => d.id)).toEqual(['2', '3', '5']); - }); - - it('should initialize data with id is `0`', () => { - class Foo extends Model { - static type = 'foo'; - - @Attribute({ isIdentifier: true }) public id!: number; - @Attribute() public name!: string; - } - - class Store extends Collection { - static types = [Foo]; - } - - const store = new Store(); - const foo = store.add({ id: 0, name: '99999' }, Foo); - expect(foo.id).toBe(0); - const fooData = modelToJSON(foo); - expect(fooData.id).toBe(0); - // @ts-ignore - expect(fooData.__META__.id).toBe(0); - }); - - it('should be set nested data as ref', () => { - class Bar extends Model { - static type = 'bar'; - - @Attribute({ isIdentifier: true }) public id!: number; - @Attribute() public name!: string; - } - - class Foo extends Model { - static type = 'foo'; - @Attribute({ isIdentifier: true }) public id!: number; - @Attribute() public name!: string; - @Attribute({ toOne: Bar }) public bar!: Bar; - } - - class Store extends Collection { - static types = [Foo, Bar]; - } - - const store = new Store(); - store.add( - { - id: 1, - name: 'foo0', - bar: { id: 1, name: 'bar0' }, - }, - Foo, - ); - store.add( - { - id: 1, - name: 'foo0', - bar: { id: 1, name: 'bar1' }, - }, - Foo, - ); - - expect(store.findAll(Foo).length).toBe(1); - expect(store.findAll(Bar).length).toBe(1); - }); - - it('should be set raw (ref) data multi times', () => { - class Foo extends Model { - static type = 'foo'; - @Attribute({ isIdentifier: true }) public key!: string; - @Attribute() public name!: string; - @Attribute({ toMany: Foo }) public children!: Foo[]; - } - - class Store extends Collection { - static types = [Foo]; - } - - const store = new Store(); - store.add( - { - key: '0', - name: 'foo0', - }, - Foo, - ); - store.add( - { - key: '0', - name: 'foo1', - }, - Foo, - ); - expect(store.findAll(Foo).length).toBe(1); - const foo = store.findOne(Foo, '0'); - expect(foo?.name).toBe('foo1'); - expect(foo?.children).toEqual([]); - }); - }); - - describe('Indirect references', () => { - class Person extends Model { - static type = 'person'; - - @Attribute({ isIdentifier: true }) id!: number; - - @Attribute() public firstName!: string; - @Attribute() public lastName!: string; - - // eslint-disable-next-line @typescript-eslint/no-use-before-define - @Attribute({ toMany: () => Pet, referenceProperty: 'owner' }) pets!: Array; - // eslint-disable-next-line @typescript-eslint/no-use-before-define - @Attribute({ toMany: () => Toy, referenceProperty: 'owners' }) toys!: Array; - } - - class Pet extends Model { - static type = 'pet'; - - @Attribute() public name!: string; - @Attribute({ toOne: () => Person }) public owner!: Person; - } - - class Toy extends Model { - static type = 'toy'; - - @Attribute() public name!: string; - @Attribute({ toMany: () => Person }) public owners!: Person[]; - } - - it('should be use model for indirect references', () => { - class MyCollection extends Collection { - static types = [Person, Pet]; - } - - const collection = new MyCollection(); - - collection.add({ firstName: 'Jane', id: 1 }, Person); - const steve = collection.add({ firstName: 'Steve', spouse: 1 }, Person); - const fido = collection.add({ name: 'Fido', owner: steve }, Pet); - - expect(fido.owner).toBe(steve); - expect(steve.pets.length).toBe(1); - expect(steve.pets[0].name).toBe(fido.name); - }); - - it('should be use id for indirect references', () => { - class MyCollection extends Collection { - static types = [Person, Pet]; - } - - const collection = new MyCollection(); - - collection.add({ firstName: 'Jane', id: 1 }, Person); - const steve = collection.add({ firstName: 'Steve', spouse: 1 }, Person); - const fido = collection.add({ name: 'Fido', owner: steve.id }, Pet); - const wufi = collection.add({ name: 'wufi', owner: steve.id }, Pet); - - expect(fido.owner).toBe(steve); - expect(steve.pets.length).toBe(2); - expect(steve.pets[0].name).toBe(fido.name); - expect(steve.pets[1].name).toBe(wufi.name); - collection.removeOne(wufi); - expect(steve.pets.length).toBe(1); - expect(steve.pets[0].name).toBe(fido.name); - }); - - it('should be use ids for indirect references', () => { - class MyCollection extends Collection { - static types = [Person, Pet, Toy]; - } - - const collection = new MyCollection(); - - collection.add({ firstName: 'Jane', id: 1 }, Person); - const steve = collection.add({ firstName: 'Steve', spouse: 1 }, Person); - const jane = collection.add({ firstName: 'Jane', spouse: 1 }, Person); - const fido = collection.add({ name: 'Fido', owners: [steve.id, jane.id] }, Toy); - - expect(fido.owners.length).toBe(2); - expect(fido.owners[0]).toBe(steve); - expect(fido.owners[1]).toBe(jane); - expect(steve.toys.length).toBe(1); - expect(jane.toys.length).toBe(1); - expect(steve.toys[0].name).toBe(fido.name); - expect(jane.toys[0].name).toBe(fido.name); - }); - - it('should be use ids for indirect references before references existed', () => { - class MyCollection extends Collection { - static types = [Person, Pet, Toy]; - } - - const collection = new MyCollection(); - - collection.add({ firstName: 'Jane', id: 1 }, Person); - const fido = collection.add({ name: 'Fido', owners: [1, 2] }, Toy); - const steve = collection.add({ firstName: 'Steve', spouse: 2, id: 1 }, Person); - const jane = collection.add({ firstName: 'Jane', spouse: 1, id: 2 }, Person); - - expect(fido.owners.length).toBe(2); - expect(fido.owners[0]).toBe(steve); - expect(fido.owners[1]).toBe(jane); - expect(steve.toys.length).toBe(1); - expect(jane.toys.length).toBe(1); - expect(steve.toys[0].name).toBe(fido.name); - expect(jane.toys[0].name).toBe(fido.name); - }); - - it('should be use modelRefs for indirect references', () => { - class MyCollection extends Collection { - static types = [Person, Pet, Toy]; - } - - const collection = new MyCollection(); - - collection.add({ firstName: 'Jane', id: 1 }, Person); - const steve = collection.add({ firstName: 'Steve', spouse: 1 }, Person); - const jane = collection.add({ firstName: 'Jane', spouse: 1 }, Person); - const fido = collection.add( - { - name: 'Fido', - owners: [ - { type: 'person', id: steve.id }, - { type: 'person', id: jane.id }, - ], - }, - Toy, - ); - - expect(fido.owners.length).toBe(2); - expect(fido.owners[0]).toBe(steve); - expect(fido.owners[1]).toBe(jane); - expect(steve.toys.length).toBe(1); - expect(jane.toys.length).toBe(1); - expect(steve.toys[0].name).toBe(fido.name); - expect(jane.toys[0].name).toBe(fido.name); - }); - }); -}); diff --git a/packages/datx/test/issues.test.ts b/packages/datx/test/issues.test.ts deleted file mode 100644 index 358252159..000000000 --- a/packages/datx/test/issues.test.ts +++ /dev/null @@ -1,37 +0,0 @@ -import testMobx from './mobx'; - -import { Collection, PureModel, Attribute } from '../src'; - -// @ts-ignore -testMobx.configure({ enforceActions: 'observed' }); - -describe('issues', () => { - it('should remove references on collection remove', () => { - class Bar extends PureModel { - public static type = 'bar'; - } - - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ toMany: Bar }) - public bar!: Array; - } - - class Store extends Collection { - public static types = [Foo, Bar]; - } - - const store = new Store(); - const foo = store.add({ bar: [{}, {}] }, Foo); - - expect(foo.bar).toHaveLength(2); - expect(store.length).toBe(3); - - const toRemove = foo.bar[0]; - - store.removeOne(toRemove); - expect(store.length).toBe(2); - expect(foo.bar).toHaveLength(1); - }); -}); diff --git a/packages/datx/test/mixins/withActions.test.ts b/packages/datx/test/mixins/withActions.test.ts deleted file mode 100644 index 69282fe74..000000000 --- a/packages/datx/test/mixins/withActions.test.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { META_FIELD } from '@datx/utils'; -import testMobx from '../mobx'; - -import { Collection, PureModel, ReferenceType, Attribute, isAttributeDirty } from '../../src'; -import { withMeta } from '../../src/mixins/withMeta'; -import { withActions } from '../../src/mixins/withActions'; - -// @ts-ignore -testMobx.configure({ enforceActions: 'observed' }); - -describe('withActions', () => { - it('should work with initial data', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public foo!: number; - - @Attribute() - public bar!: number; - - @Attribute() - public baz!: number; - } - - const FooMeta = withMeta(Foo); - const FooActions = withActions(FooMeta); - - const foo = new FooActions({ foo: 1, bar: 2 }); - - expect(foo.meta.type).toBe('foo'); - expect(foo.foo).toBe(1); - - class TestCollection extends Collection { - public static types = [FooActions]; - } - const collection = new TestCollection(); - - collection.add(foo); - - const foo2 = foo.clone(); - - expect(foo2).not.toBe(foo); - expect(foo2).toBeInstanceOf(Foo); - expect(foo2.meta.original).toBe(foo); - expect(foo2.foo).toBe(1); - - foo2.update({ foo: 3, baz: 4 }); - expect(foo2.foo).toBe(3); - expect(foo.foo).toBe(1); - expect(foo2.baz).toBe(4); - - foo2.assign('foobar', 5); - // @ts-ignore - A new value not defined in typings - expect(foo2.foobar).toBe(5); - - const rawFoo2 = foo2.toJSON(); - - expect(rawFoo2).toHaveProperty(META_FIELD); - - foo2.addReference('parent', foo.meta.id, { - model: FooActions as typeof Foo, - type: ReferenceType.TO_ONE, - }); - }); - - it('should fail for collections', () => { - // @ts-expect-error - expect(() => withActions(Collection)).toThrowError('This mixin can only decorate models'); - }); - - it('should fail for other classes', () => { - class A {} - - // @ts-expect-error - expect(() => withActions(A)).toThrowError('This mixin can only decorate models'); - }); - - it('should work with actions', () => { - class Foo extends PureModel { - @Attribute() - public foo?: number; - - @Attribute() - public bar?: number; - } - const FooMeta = withActions(Foo); - - const foo = new FooMeta({ foo: 1 }); - expect(isAttributeDirty(foo, 'foo')).toBe(false); - expect(isAttributeDirty(foo, 'bar')).toBe(false); - - foo.foo = 5; - foo.commit(); - - foo.foo = 2; - foo.bar = 3; - expect(isAttributeDirty(foo, 'foo')).toBe(true); - expect(isAttributeDirty(foo, 'bar')).toBe(true); - - foo.revert(); - expect(isAttributeDirty(foo, 'foo')).toBe(false); - expect(foo.foo).toBe(5); - expect(isAttributeDirty(foo, 'bar')).toBe(false); - expect(foo.bar).toBeUndefined(); - }); -}); diff --git a/packages/datx/test/mixins/withMeta.test.ts b/packages/datx/test/mixins/withMeta.test.ts deleted file mode 100644 index a691c05e5..000000000 --- a/packages/datx/test/mixins/withMeta.test.ts +++ /dev/null @@ -1,137 +0,0 @@ -import testMobx from '../mobx'; - -import { Collection, PureModel, Attribute } from '../../src'; -import { withMeta } from '../../src/mixins/withMeta'; -import { cloneModel, getModelRef, revertModel } from '../../src/helpers/model/utils'; -import { mobx } from '@datx/utils'; - -// @ts-ignore -testMobx.configure({ enforceActions: 'observed' }); - -describe('withMeta', () => { - it('should work with initial data', () => { - const expectedCount = mobx.useRealMobX ? 2 : 1; - - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public foo!: number; - - @Attribute() - public bar!: number; - - @Attribute() - public baz!: number; - } - - const FooMeta = withMeta(Foo); - - const foo = new FooMeta({ foo: 1, bar: 2 }); - - expect(foo.foo).toBe(1); - expect(foo.bar).toBe(2); - expect(foo.baz).toBe(undefined); - expect(foo.meta.type).toBe('foo'); - expect(foo.meta.original).toBe(undefined); - expect(foo.meta.collection).toBeFalsy(); - - let bazValue: number | undefined = undefined; - let autorunCount = 0; - - testMobx.autorun(() => { - expect(foo.baz).toBe(bazValue); - autorunCount++; - }); - - bazValue = 3; - - testMobx.runInAction(() => { - foo.baz = 3; - }); - - expect(autorunCount).toBe(expectedCount); - - class TestCollection extends Collection { - public static types = [FooMeta]; - } - const collection = new TestCollection(); - - collection.add(foo); - - const foo2 = cloneModel(foo); - - expect(foo2).not.toBe(foo); - expect(foo2.meta.original).toBe(foo); - - expect(() => { - foo2.meta.type = 'bar'; - }).toThrowError(); - - expect(Object.prototype.propertyIsEnumerable.call(foo2, 'meta')).toBe(false); - }); - - it('should fail for collections', () => { - // @ts-expect-error - expect(() => withMeta(Collection)).toThrowError('This mixin can only decorate models'); - }); - - it('should fail for other classes', () => { - class A {} - - // @ts-expect-error - expect(() => withMeta(A)).toThrowError('This mixin can only decorate models'); - }); - - it('should support meta ref ids', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ toOne: Foo }) - public parent?: Foo; - - @Attribute({ defaultValue: 1 }) - public foo!: number; - } - - const FooMeta = withMeta(Foo); - - class TestCollection extends Collection { - public static types = [FooMeta]; - } - const collection = new TestCollection(); - - const foo1 = new FooMeta({ foo: 2 }); - - collection.add(foo1); - - const foo2 = collection.add({ foo: 3, parent: foo1 }, FooMeta); - - expect(foo2.meta.refs.parent).toEqual(getModelRef(foo1)); - }); - - it('should work with meta', () => { - class Foo extends withMeta(PureModel) { - @Attribute() - public foo?: number; - - @Attribute() - public bar?: number; - } - - const foo = new Foo({ foo: 1 }); - expect(foo.meta.dirty.foo).toBe(false); - expect(foo.meta.dirty.bar).toBe(false); - - foo.foo = 2; - foo.bar = 3; - expect(foo.meta.dirty.foo).toBe(true); - expect(foo.meta.dirty.bar).toBe(true); - - revertModel(foo); - expect(foo.meta.dirty.foo).toBe(false); - expect(foo.foo).toBe(1); - expect(foo.meta.dirty.bar).toBe(false); - expect(foo.bar).toBeUndefined(); - }); -}); diff --git a/packages/datx/test/mobx.ts b/packages/datx/test/mobx.ts deleted file mode 100644 index a70ebb220..000000000 --- a/packages/datx/test/mobx.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { mobx } from '@datx/utils'; - -let testMobx = mobx; - -Object.assign(mobx, { - configure() { - // noop - }, - isComputedProp(_val: any): boolean { - return false; - } -}); - -if (!['-1', '0'].includes(process.env.MOBX_VERSION || '0')) { - testMobx = require('mobx'); - testMobx.makeObservable = testMobx.makeObservable || mobx.makeObservable; -} - -export default testMobx; diff --git a/packages/datx/test/mock.ts b/packages/datx/test/mock.ts new file mode 100644 index 000000000..a94493a1f --- /dev/null +++ b/packages/datx/test/mock.ts @@ -0,0 +1,51 @@ +import { IResource, Schema, type } from '../src'; + +export class CustomType { + public foo = 1; +} + +export const User = new Schema( + 'user', + { + username: type.String, + age: { type: type.Number, optional: true, defaultValue: 0 }, + }, + (data: IResource) => `user/${data.username}`, +); + +export const Post = new Schema( + 'post', + { + title: type.String, + date: type.Date, + text: type.String, + }, + (data: IResource) => `post/${data.title}`, +); + +export const Comment = new Schema( + 'comment', + { + author: User, + post: Post, + date: type.Date, + text: type.String, + upvotes: [User], + featured: { type: type.Boolean, optional: true }, + test: { + serialize(value: CustomType) { + return value.foo; + }, + parseValue(value: number) { + if (typeof value !== 'number') { + throw new Error('Invalid custom type'); + } + const c = new CustomType(); + c.foo = value; + return c; + }, + optional: true, + }, + }, + (data: IResource) => `comment/${data.text}`, +); diff --git a/packages/datx/test/model.test.ts b/packages/datx/test/model.test.ts deleted file mode 100644 index bd97fabd0..000000000 --- a/packages/datx/test/model.test.ts +++ /dev/null @@ -1,1347 +0,0 @@ -import testMobx from './mobx'; - -import { Model, Attribute, PureModel, Collection, ReferenceType, IRawModel } from '../src'; -import { updateModelId } from '../src/helpers/model/fields'; -import { initModelRef } from '../src/helpers/model/init'; -import { - modelToJSON, - getModelRef, - getModelType, - getModelId, - getModelCollection, - cloneModel, - assignModel, - getOriginalModel, - isAttributeDirty, - commitModel, - revertModel, - modelToDirtyJSON, -} from '../src/helpers/model/utils'; -import { mobx } from '@datx/utils'; - -// @ts-ignore -testMobx.configure({ enforceActions: 'observed' }); - -describe('Model', () => { - describe('Basic features', () => { - it('should work with initial data', () => { - class Foo extends PureModel { - @Attribute() - public foo!: number; - - @Attribute() - public bar!: number; - - public baz!: number; - } - - Attribute()(Foo, 'baz'); - - const foo1 = new Foo({ foo: 1, bar: 2 }); - - expect(Object.prototype.propertyIsEnumerable.call(foo1, 'foo')).toBe(true); - expect(JSON.stringify(Object.keys(foo1))).toBe(JSON.stringify(['foo', 'bar', 'baz'])); - - expect(foo1.foo).toBe(1); - expect(foo1.bar).toBe(2); - expect(foo1.baz).toBe(undefined); - - const foo2 = new Foo(); - let bazValue: number | undefined = undefined; - let autorunCount = 0; - - testMobx.autorun(() => { - expect(foo2.baz).toBe(bazValue); - autorunCount++; - }); - - bazValue = 3; - testMobx.runInAction(() => { - foo2.baz = 3; - }); - - expect(autorunCount).toBe(mobx.useRealMobX ? 2 : 1); - - expect(() => { - assignModel(foo1, 'foo', foo2); - }).toThrowError('You should save this value as a reference.'); - }); - - it('should work with array properties', () => { - class Foo extends Model { - @Attribute() - public list!: Array; - } - - const foo1 = new Foo({ list: [1, 2, 3] }); - const foo2 = new Foo(); - foo2.list = [3, 2, 1]; - - expect(foo1.list.map).toBeTruthy(); - expect(foo2.list.map).toBeTruthy(); - }); - - it('should work with array assignment', () => { - class Foo extends Model { - @Attribute() - public list!: Array; - } - - class Bar extends Model {} - - const foo = new Foo(); - const bar = new Bar(); - - foo.list = [3, 2, 1]; - bar.assign('list', [1, 2, 3]); - - expect(foo.list.map).toBeTruthy(); - expect(bar['list'].map).toBeTruthy(); - }); - - it('should work with property parsers/serializers', () => { - class Foo extends Model { - @Attribute({ - parse: (value: string) => parseInt(value, 10), - serialize: (value: number) => `TEST:${value}`, - }) - public value!: number; - - @Attribute({ - parse: (_value: string, data: Record) => parseInt(data.value, 10) * 2, - serialize: (value: number, data: Record) => `TEST:${value}:${data.value}`, - }) - public double!: number; - } - - const foo = new Foo({ value: '123' }); - - expect(foo.value).toBe(123); - expect(foo.double).toBe(246); - - foo.value = 321; - expect(foo.value).toBe(321); - expect(foo.double).toBe(246); - - const snapshot = foo.toJSON(); - - expect(snapshot.value).toBe('TEST:321'); - expect(snapshot.double).toBe('TEST:246:321'); - }); - - it('should work with property parsers/serializers for extended classes', () => { - class Foo extends Model { - @Attribute({ - parse: (value: string) => parseInt(value, 10), - serialize: (value: number) => `TEST:${value}`, - }) - public value!: number; - - @Attribute({ - parse: (_value: string, data: Record) => parseInt(data.value, 10) * 2, - serialize: (value: number, data: Record) => `TEST:${value}:${data.value}`, - }) - public double!: number; - - @Attribute({ defaultValue: 1 }) - public one!: number; - } - - class Bar extends Foo {} - - const foo = new Bar({ value: '123' }); - - expect(foo.one).toBe(1); - expect(foo.value).toBe(123); - expect(foo.double).toBe(246); - - foo.value = 321; - expect(foo.value).toBe(321); - expect(foo.double).toBe(246); - - const snapshot = foo.toJSON(); - - expect(snapshot.value).toBe('TEST:321'); - expect(snapshot.double).toBe('TEST:246:321'); - }); - - it('should work with valueOf and toString', () => { - class Foo extends Model { - @Attribute() - public foo!: number; - - @Attribute() - public bar!: number; - - @Attribute() - public baz!: number; - } - - const foo1 = new Foo({ foo: 1, bar: 2 }); - - expect(foo1.valueOf()).toMatchSnapshot(); - expect(foo1.toString()).toMatchSnapshot(); - }); - - it('should work with initial data and no decorators', () => { - class Foo extends PureModel { - public static type = 'foo'; - - public foo!: number; - - public bar!: number; - - public baz!: number; - } - - Attribute()(Foo, 'foo'); - Attribute()(Foo, 'bar'); - Attribute()(Foo, 'baz'); - - const foo = new Foo({ foo: 1, bar: 2 }); - - expect(foo.foo).toBe(1); - expect(foo.bar).toBe(2); - expect(foo.baz).toBe(undefined); - - let bazValue: number | undefined = undefined; - let autorunCount = 0; - - testMobx.autorun(() => { - expect(foo.baz).toBe(bazValue); - autorunCount++; - }); - - bazValue = 3; - testMobx.runInAction(() => { - foo.baz = 3; - }); - - expect(autorunCount).toBe(mobx.useRealMobX ? 2 : 1); - }); - - it('should work with id getters', () => { - class Foo extends Model { - @Attribute() - public foo!: number; - - @Attribute() - public bar!: number; - - @Attribute() - public baz!: number; - - @testMobx.computed - get id(): number | string { - return this.meta.id; - } - - @testMobx.computed - get id2(): number | string { - return getModelId(this); - } - } - const foo1 = new Foo({ foo: 1, bar: 2 }); - const foo2 = new Foo({ foo: 2, bar: 4 }); - const foo3 = new Foo({ foo: 3, bar: 3 }); - - expect(foo1.meta.id).toBe(getModelId(foo1)); - expect(foo1.id).toBe(getModelId(foo1)); - expect(foo1.id2).toBe(getModelId(foo1)); - expect(foo2.meta.id).toBe(getModelId(foo2)); - expect(foo2.id).toBe(getModelId(foo2)); - expect(foo2.id2).toBe(getModelId(foo2)); - expect(foo3.meta.id).toBe(getModelId(foo3)); - expect(foo3.id).toBe(getModelId(foo3)); - expect(foo3.id2).toBe(getModelId(foo3)); - expect(foo1.id).not.toBe(foo2.id); - expect(foo1.id).not.toBe(foo3.id); - expect(foo2.id).not.toBe(foo3.id); - }); - - it('should work with nested data', () => { - class Foo extends PureModel { - @Attribute() - public foo!: number; - - @Attribute() - public bar!: number; - - @Attribute() - public baz!: { foobar: number }; - } - - const foo = new Foo({ foo: 1, bar: 2, baz: { foobar: 3 } }); - - let foobarValue = 3; - let autorunCount = 0; - let autorunSnapshotCount = 0; - - testMobx.autorun(() => { - expect(foo.baz.foobar).toBe(foobarValue); - autorunCount++; - }); - - testMobx.autorun(() => { - expect(modelToJSON(foo).baz.foobar).toBe(foobarValue); - autorunSnapshotCount++; - }); - - // Trigger both autoruns - foobarValue = 4; - testMobx.runInAction(() => { - foo.baz.foobar = 4; - }); - - testMobx.runInAction(() => { - // Trigger the snapshot autorun - foo.bar++; - }); - - // Trigger both autoruns - foobarValue = 5; - testMobx.runInAction(() => { - foo.baz.foobar = 5; - }); - - expect(autorunCount).toBe(mobx.useRealMobX ? 3 : 1); - expect(autorunSnapshotCount).toBe(mobx.useRealMobX ? 4 : 1); - }); - - it('should work with default data', () => { - class Foo extends PureModel { - @Attribute({ defaultValue: 4 }) - public foo!: number; - - @Attribute({ defaultValue: 5 }) - public bar!: number; - } - - const foo = new Foo({ bar: 2 }); - - expect(foo.foo).toBe(4); - expect(foo.bar).toBe(2); - - let fooValue = 4; - let autorunCount = 0; - - testMobx.autorun(() => { - expect(foo.foo).toBe(fooValue); - autorunCount++; - }); - - testMobx.runInAction(() => { - fooValue = 3; - foo.foo = 3; - }); - - expect(autorunCount).toBe(mobx.useRealMobX ? 2 : 1); - }); - - it('should work with two models', () => { - class Bar extends PureModel { - public foo!: number; - - public bar!: number; - } - - const bar = new Bar({ bar: 2 }); - - expect(bar.foo).toBe(undefined); - expect(bar.bar).toBe(2); - }); - - it('should work with extended models', () => { - class Foo extends PureModel { - @Attribute({ defaultValue: 4 }) - public foo!: number; - - @Attribute({ defaultValue: 5 }) - public bar!: number; - } - - class Bar extends Foo { - @Attribute({ defaultValue: 9 }) - public baz!: number; - } - - const bar = new Bar({ bar: 2 }); - - expect(bar.foo).toBe(4); - expect(bar.bar).toBe(2); - expect(bar.baz).toBe(9); - }); - - it('should support cloning', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public foo!: number; - } - class AppStore extends Collection { - public static types = [Foo]; - } - const foo = new Foo({ foo: 1 }); - - expect(foo.foo).toBe(1); - const collection = new AppStore(); - - collection.add(foo); - const foo2 = cloneModel(foo); - - expect(foo2.foo).toBe(1); - expect(foo2).toBeInstanceOf(Foo); - expect(getModelId(foo)).not.toBe(getModelId(foo2)); - expect(getOriginalModel(foo2)).toBe(foo); - expect(() => getOriginalModel(foo)).toThrowError('The given model is not a clone.'); - collection.removeOne(foo2); - expect(() => getOriginalModel(foo2)).toThrowError( - 'The model needs to be in a collection to be referenceable', - ); - }); - - it('should support cloning with additional fields', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public foo!: number; - - public bar!: number; // Not observable - } - class AppStore extends Collection { - public static types = [Foo]; - } - const foo = new Foo({ foo: 1 }); - - assignModel(foo, 'bar', 2); - expect(foo.foo).toBe(1); - expect(foo.bar).toBe(2); - const collection = new AppStore(); - - collection.add(foo); - const foo2 = cloneModel(foo); - - expect(foo2.foo).toBe(1); - expect(foo2.bar).toBe(2); - expect(foo2).toBeInstanceOf(Foo); - expect(getModelId(foo)).not.toBe(getModelId(foo2)); - expect(getOriginalModel(foo2)).toBe(foo); - }); - }); - - describe('References', () => { - it('should support basic references', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ toOne: Foo }) - public parent?: Foo | null; - - @Attribute({ defaultValue: 1 }) - public foo!: number; - } - - class TestCollection extends Collection { - public static types = [Foo]; - } - const collection = new TestCollection(); - - expect(Foo.toJSON()).toBe('foo'); - - const foo1 = new Foo({ foo: 2 }); - - collection.add(foo1); - - const foo2 = collection.add({ foo: 3, parent: foo1 }, Foo); - - expect(foo2.parent).toBe(foo1); - expect(foo2.parent && foo2.parent.foo).toBe(2); - const raw2 = modelToJSON(foo2); - const rawDirty = modelToDirtyJSON(foo2); - - expect(raw2.parent).toEqual(getModelRef(foo1)); - expect(rawDirty).not.toHaveProperty('parent'); - expect(rawDirty).not.toHaveProperty('foo'); - - const foo3 = collection.add({ foo: 4, parent: { foo: 5 } }, Foo); - - expect(foo3.parent).toBeInstanceOf(Foo); - expect(foo3.parent && foo3.parent.foo).toBe(5); - - let autorunCount = 0; - let { parent } = foo3; - - testMobx.autorun(() => { - autorunCount++; - expect(foo3.parent).toBe(parent); - }); - - parent = null; - testMobx.runInAction(() => { - foo3.parent = null; - }); - - expect(autorunCount).toBe(mobx.useRealMobX ? 2 : 1); - }); - - it('should support basic references with primitive type', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ toOne: 'foo' }) - public parent?: Foo; - - @Attribute({ defaultValue: 1 }) - public foo!: number; - } - - class TestCollection extends Collection { - public static types = [Foo]; - } - const collection = new TestCollection(); - - const foo1 = new Foo({ foo: 2 }); - - collection.add(foo1); - - const foo2 = collection.add({ foo: 3, parent: foo1 }, Foo); - - expect(foo2.parent).toBe(foo1); - expect(foo2.parent && foo2.parent.foo).toBe(2); - const raw2 = modelToJSON(foo2); - - expect(raw2.parent).toEqual(getModelRef(foo1)); - - const foo3 = collection.add({ foo: 4, parent: { foo: 5 } }, Foo); - - expect(foo3.parent).toBeInstanceOf(Foo); - expect(foo3.parent && foo3.parent.foo).toBe(5); - }); - - it('should throw if model is not in a collection', () => { - class Foo extends PureModel { - @Attribute({ toOne: Foo }) - public parent?: Foo; - - @Attribute({ defaultValue: 1 }) - public foo!: number; - } - - const foo1 = new Foo({ foo: 2 }); - - expect(() => { - new Foo({ foo: 3, parent: foo1 }); - }).toThrowError('The model needs to be in a collection to be referenceable'); - - expect( - testMobx.action(() => { - foo1.parent = foo1; - }), - ).toThrowError('The model needs to be in a collection to be referenceable'); - }); - - it('should throw if array is given', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ toOne: Foo }) - public parent?: Foo; - - @Attribute({ defaultValue: 1 }) - public foo!: number; - } - - class TestCollection extends Collection { - public static types = [Foo]; - } - const collection = new TestCollection(); - - const foo1 = new Foo({ foo: 2 }); - - collection.add(foo1); - - expect(() => collection.add({ foo: 3, parent: [foo1] }, Foo)).toThrowError( - "[datx exception] The reference can't be an array of values.", - ); - - expect(() => new Foo({ foo: 3, parent: [foo1] })).toThrowError( - '[datx exception] The model needs to be in a collection to be referenceable', - ); - }); - - it('should support array references', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ toMany: Foo }) - public parent!: Array; - - @Attribute({ defaultValue: 1 }) - public foo!: number; - } - - class TestCollection extends Collection { - public static types = [Foo]; - } - const collection = new TestCollection(); - - const foo1 = collection.add(new Foo({ foo: 2 })); - const foo2 = collection.add({ foo: 3, parent: [foo1] }, Foo); - - expect(foo2.parent.length).toBe(1); - expect(foo2.parent && foo2.parent[0].foo).toBe(2); - const raw2 = modelToJSON(foo2); - - expect(raw2.parent[0]).toEqual(getModelRef(foo1)); - }); - - it('should support array reference modification', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ toMany: Foo }) - public parent!: Array; - - @Attribute({ defaultValue: 1 }) - public foo!: number; - } - class TestCollection extends Collection { - public static types = [Foo]; - } - const collection = new TestCollection(); - - const foo1 = collection.add({ foo: 2 }, Foo); - const foo2 = collection.add({ foo: 3, parent: [foo1] }, Foo); - const foo3 = collection.add({ foo: 4 }, Foo); - - expect(foo2.parent.length).toBe(1); - expect(foo2.parent && foo2.parent[0].foo).toBe(2); - const raw2 = modelToJSON(foo2); - - expect(raw2.parent[0]).toEqual(getModelRef(foo1)); - - if (mobx.useRealMobX) { - foo2.parent.push(foo3); - } else { - foo2.parent = [...foo2.parent, foo3]; - } - - const raw2b = modelToJSON(foo2); - - expect(raw2b.parent[1]).toEqual(getModelRef(foo3)); - - if (mobx.useRealMobX) { - foo2.parent[2] = foo2; - } else { - foo2.parent = [...foo2.parent.slice(0, 2), foo2]; - } - - const raw2c = modelToJSON(foo2); - - expect(raw2c.parent[2]).toEqual(getModelRef(foo2)); - - if (mobx.useRealMobX) { - foo2.parent.pop(); - } else { - foo2.parent = foo2.parent.slice(0, -1); - } - - const raw2d = modelToJSON(foo2); - - expect(raw2d.parent).toHaveLength(2); - }); - - it('should throw if single item is given', () => { - class Foo extends PureModel { - @Attribute({ toMany: Foo }) - public parent!: Array; - - @Attribute({ defaultValue: 1 }) - public foo!: number; - } - - class TestCollection extends Collection { - public static types = [Foo]; - } - - const store = new TestCollection(); - - const foo1 = store.add({ foo: 2 }, Foo); - - expect(() => store.add({ foo: 3, parent: foo1 }, Foo)).toThrowError( - '[datx exception] The reference must be an array of values.', - ); - - const foo2 = store.add({ foo: 3, parent: null }, Foo); - - expect(testMobx.isObservableArray(foo2.parent)).toBe(mobx.useRealMobX); - expect(foo2.parent).toHaveLength(0); - - const foo3 = store.add({ foo: 3, parent: undefined }, Foo); - - expect(testMobx.isObservableArray(foo3.parent)).toBe(mobx.useRealMobX); - expect(foo3.parent).toHaveLength(0); - }); - - it('should support single/array references', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ toOneOrMany: Foo }) - public parent!: Foo | Array; - - @Attribute({ defaultValue: 1 }) - public foo!: number; - } - class TestCollection extends Collection { - public static types = [Foo]; - } - const collection = new TestCollection(); - - const foo1 = collection.add({ foo: 2 }, Foo); - const foo2 = collection.add({ foo: 3, parent: [foo1] }, Foo); - - expect(testMobx.isObservableArray(foo2.parent)).toBe(mobx.useRealMobX); - expect(foo2.parent && foo2.parent[0].foo).toBe(2); - const raw2 = modelToJSON(foo2); - - expect(raw2.parent[0]).toEqual(getModelRef(foo1)); - - foo2.parent = foo1; - expect(testMobx.isObservableArray(foo2.parent)).toBe(false); - expect(foo2.parent && foo2.parent.foo).toBe(2); - const raw2b = modelToJSON(foo2); - - expect(raw2b.parent).toEqual(getModelRef(foo1)); - - testMobx.runInAction(() => { - foo1.foo = 4; - }); - expect(foo2.parent && foo2.parent.foo).toBe(4); - - assignModel(foo1, 'parent', foo2); - expect(foo1.parent).toBe(foo2); - }); - - it('should support reference serialization/deserialization', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ toMany: Foo }) - public parent!: Array; - - @Attribute({ defaultValue: 1 }) - public foo!: number; - } - - class TestCollection extends Collection { - public static types = [Foo]; - } - const collection = new TestCollection(); - - const foo1 = collection.add(new Foo({ foo: 2 })); - const foo2 = collection.add({ foo: 3, parent: [foo1] }, Foo); - - expect(foo2.parent.length).toBe(1); - expect(foo2.parent && foo2.parent[0].foo).toBe(2); - - const raw2 = modelToJSON(foo2); - - expect(raw2.parent[0]).toEqual(getModelRef(foo1)); - - delete raw2.__META__?.id; - const foo3 = collection.add(raw2, Foo); - - expect(foo3.parent.length).toBe(1); - expect(foo3.parent && foo3.parent[0].foo).toBe(2); - - const foo4 = cloneModel(foo2); - - expect(foo4.parent.length).toBe(1); - expect(foo4.parent && foo4.parent[0].foo).toBe(2); - - if (mobx.useRealMobX) { - foo4.parent[0] = foo1; - } else { - foo4.parent = [foo1, ...foo4.parent.slice(1)]; - } - - expect(foo4.parent).toContain(foo1); - }); - - it('should support custom reference serialization/deserialization', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ defaultValue: 1 }) - public foo!: number; - - public parent!: Array; - } - - class TestCollection extends Collection { - public static types = [Foo]; - } - const collection = new TestCollection(); - - const foo1 = new Foo({ foo: 2 }); - const foo2 = new Foo({ foo: 3 }); - - collection.add([foo1, foo2]); - - initModelRef(foo2, 'parent', { model: Foo.type, type: ReferenceType.TO_MANY }, [foo1]); - expect(foo2.parent.length).toBe(1); - expect(foo2.parent && foo2.parent[0].foo).toBe(2); - - const raw2: IRawModel = JSON.parse(JSON.stringify(modelToJSON(foo2))); - - expect(raw2.parent[0]).toEqual(getModelRef(foo1)); - - delete raw2.__META__?.id; - const foo3 = collection.add(raw2, Foo); - - expect(foo3.parent.length).toBe(1); - expect(foo3.parent && foo3.parent[0].foo).toBe(2); - - const foo4 = cloneModel(foo2); - - expect(foo4.parent.length).toBe(1); - expect(foo4.parent && foo4.parent[0].foo).toBe(2); - }); - - it('should support default references', () => { - class Bar extends PureModel { - public static type = 'bar'; - } - - const bar = new Bar({}); - - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ defaultValue: bar }) - @Attribute({ toOne: Bar }) - public bar?: Bar; - - @Attribute() - public foo!: number; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const collection = new TestCollection(); - - collection.add(bar); - - collection.add({ foo: 2 }, Foo); - }); - - it('should work if an independent type is defined', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute() - public type!: string; - } - - class TestCollection extends Collection { - public static types = [Foo]; - } - - const collection = new TestCollection(); - const foo = collection.add({ type: 'foobar' }, Foo); - - expect(getModelType(foo)).toBe('foo'); - expect(foo.type).toBe('foobar'); - }); - - it('should support deep model nesting', () => { - class Bar extends PureModel { - public static type = 'bar'; - - @Attribute({ isIdentifier: true }) - public id!: number; - - @Attribute({ toOne: 'foo' }) - public foo?: Foo; - - @Attribute() - public key!: number; - } - - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ isIdentifier: true }) - public id!: number; - - @Attribute({ toMany: Bar }) - public bars?: Array; - - @Attribute() - public key!: number; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const collection = new TestCollection(); - - collection.add( - { - bars: [ - { - foo: { - id: 4, - key: 4, - }, - key: 2, - }, - { - foo: { - bars: [{ id: 6, key: 6 }], - id: 5, - key: 5, - }, - key: 3, - }, - ], - id: 1, - key: 1, - }, - Foo, - ); - - expect(collection.length).toBe(6); - - const foo5 = collection.findOne(Foo, 5); - - expect(foo5).toBeTruthy(); - if (foo5) { - expect(foo5.key).toBe(5); - } - - const bar6 = collection.findOne(Bar, 6); - - expect(bar6).toBeTruthy(); - if (bar6) { - expect(bar6.key).toBe(6); - } - }); - - describe('Back references', () => { - it('should support basic back references', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ toOne: Foo }) - public parent!: Foo; - - @Attribute({ defaultValue: 1 }) - public foo!: number; - - @Attribute({ toMany: Foo, referenceProperty: 'parent' }) - public children!: Array; - - @Attribute({ toMany: Foo }) - public foos!: Array; - - @Attribute({ toMany: Foo, referenceProperty: 'foos' }) - public backFoos!: Array; - - @Attribute({ toOneOrMany: Foo }) - public fooRef!: Foo | Array; - - @Attribute({ toMany: Foo, referenceProperty: 'fooRef' }) - public fooBackRef!: Array; - } - - class TestCollection extends Collection { - public static types = [Foo]; - } - const collection = new TestCollection(); - - const foo1 = collection.add({ foo: 1 }, Foo); - const foo2 = collection.add({ foo: 2, parent: foo1 }, Foo); - const foo3 = collection.add({ foo: 3, parent: foo1 }, Foo); - const foo4 = collection.add({ foo: 4, parent: foo2 }, Foo); - - let autorunCount = 0; - let expectedCount = 2; - - testMobx.autorun(() => { - autorunCount++; - expect(foo1.children).toHaveLength(expectedCount); - }); - - expect(foo1.children).toHaveLength(2); - expect(foo2.children).toHaveLength(1); - expect(foo3.children).toHaveLength(0); - - expectedCount = 1; - testMobx.runInAction(() => { - if (mobx.useRealMobX) { - foo1.children.pop(); - } else { - // Back reference can't be replaced - // @ts-ignore - foo3.parent = null; - } - }); - - expect(foo1.children).toHaveLength(1); - expect(foo3.parent).toBeNull(); - expect(autorunCount).toBe(mobx.useRealMobX ? 2 : 1); - - expectedCount = mobx.useRealMobX ? 2 : 1; - testMobx.runInAction(() => { - if (mobx.useRealMobX) { - foo1.children[1] = foo4; - } else { - foo4.parent = foo1; - } - }); - expect(foo1.children).toHaveLength(2); - expect(foo4.parent).toBe(foo1); - expect(foo2.children).toHaveLength(0); - - testMobx.runInAction(() => { - if (mobx.useRealMobX) { - foo1.children[1] = foo3; - } else { - foo3.parent = foo1; - // @ts-ignore - foo4.parent = null; - } - }); - expect(foo1.children).toHaveLength(2); - expect(foo3.parent).toBe(foo1); - expect(foo4.parent).toBeNull(); - expect(autorunCount).toBe(mobx.useRealMobX ? 4 : 1); - - updateModelId(foo1, '123'); - expect(modelToJSON(foo3).parent).toEqual({ id: '123', type: 'foo' }); - - expect(() => { - foo4.children = [foo1]; - }).toThrowError('Back references are read only'); - - testMobx.runInAction(() => { - foo1.foos = [foo2, foo3]; - foo2.foos = [foo1, foo3, foo4]; - }); - expect(foo1.backFoos).toHaveLength(1); - expect(foo1.backFoos).toContain(foo2); - expect(foo3.backFoos).toHaveLength(2); - expect(foo3.backFoos).toContain(foo1); - expect(foo3.backFoos).toContain(foo2); - - // No point to test this without MobX - if (mobx.useRealMobX) { - foo3.backFoos.push(foo4); - expect(foo4.foos).toHaveLength(1); - expect(foo4.foos).toContain(foo3); - - foo3.backFoos.shift(); - expect(foo1.foos).toHaveLength(1); - expect(foo1.foos).toContain(foo2); - - foo3.fooRef = [foo4]; - expect(foo4.fooBackRef).toHaveLength(1); - expect(foo4.fooBackRef).toContain(foo3); - - foo3.fooRef.push(foo1); - foo3.fooRef.shift(); - expect(foo3.fooRef).toHaveLength(1); - expect(foo3.fooRef).toContain(foo1); - - foo4.fooBackRef.push(foo1); - expect(foo1.fooRef).toBe(foo4); - foo4.fooBackRef.pop(); - expect(foo1.fooRef).toBeNull(); - - foo4.fooRef = foo1; - foo3.fooRef = foo1; - foo2.fooRef = foo1; - expect(foo1.fooBackRef).toHaveLength(3); - - const toRemove = foo1.fooBackRef[1]; - - // @ts-expect-error - foo1.fooBackRef[1] = undefined; - expect(foo1.fooBackRef).not.toContain(toRemove); - - foo1.fooBackRef[1] = foo1; - expect(foo1.fooRef).toBe(foo1); - } - }); - }); - - describe('Custom id & type', () => { - it('Should work for the basic use case', () => { - class Foo extends PureModel { - public static type = 'foo'; - - @Attribute({ isIdentifier: true }) - public id!: string; - - @Attribute({ isType: true }) - public type!: string; - - @Attribute({ toOne: Foo }) - public parent!: Foo; - - @Attribute({ toMany: Foo }) - public foos!: Array; - - @Attribute({ toMany: Foo, referenceProperty: 'parent' }) - public children!: Array; - } - - class TestCollection extends Collection { - public static types = [Foo]; - } - - const store = new TestCollection(); - - const foo = new Foo({ id: '123', type: '456' }); - - expect(foo.id).toBe('123'); - expect(getModelId(foo)).toBe(foo.id); - expect(foo.type).toBe('456'); - expect(getModelType(foo)).toBe(foo.type); - - expect( - testMobx.action(() => { - foo.type = 'bar'; - }), - ).toThrowError("Model type can't be changed after initialization."); - expect( - testMobx.action(() => { - foo.id = '789'; - }), - ).toThrowError( - "Model ID can't be updated directly. Use the `updateModelId` helper function instead.", - ); - - const foo1 = store.add(new Foo({ id: '234' })); - - expect(store.length).toBe(1); - expect(foo1.id).toBe('234'); - expect(getModelCollection(foo1)).toBe(store); - - const foo2 = store.add({ parent: foo1, foos: [foo1] }, Foo); - - expect(store.length).toBe(2); - expect(getModelCollection(foo2)).toBe(store); - expect(foo2.id).toBeLessThan(0); - expect(getModelId(foo2)).toBe(foo2.id); - expect(foo2.type).toBe('foo'); - expect(getModelType(foo2)).toBe('foo'); - expect(modelToJSON(foo2).parent).toEqual(getModelRef(foo1)); - expect(modelToJSON(foo2).foos).toContainEqual(getModelRef(foo1)); - - expect(modelToJSON(foo1).__META__?.id).toBe(foo1.id); - expect(modelToJSON(foo1).id).toBe(foo1.id); - - updateModelId(foo1, '345'); - expect(foo1.id).toBe('345'); - expect(getModelId(foo1)).toBe(foo1.id); - expect(store.findOne(Foo, foo1.id)).toBe(foo1); - expect(foo2.parent).toBe(foo1); - expect(foo2.foos).toContain(foo1); - expect(modelToJSON(foo2).parent).toEqual(getModelRef(foo1)); - expect(modelToJSON(foo2).foos).toContainEqual(getModelRef(foo1)); - - expect(modelToJSON(foo1).__META__?.id).toBe(foo1.id); - expect(modelToJSON(foo1).id).toBe(foo1.id); - }); - - it('should work without decorators', () => { - class Foo extends PureModel { - public id!: number; - - public type!: string; - } - Foo.type = 'foo'; - - Attribute({ toMany: Foo, referenceProperty: 'parent' })(Foo, 'children'); - Attribute({ toOneOrMany: 'bar' })(Foo, 'bars'); - Attribute({ toMany: Foo })(Foo, 'foos'); - Attribute({ toOne: Foo })(Foo, 'parent'); - Attribute({ isType: true })(Foo, 'type'); - Attribute({ isIdentifier: true })(Foo, 'id'); - - class TestCollection extends Collection { - public static types = [Foo]; - } - - const store = new TestCollection(); - - const foo = new Foo({ id: 123, type: '456' }); - - expect(foo.id).toBe(123); - expect(getModelId(foo)).toBe(foo.id); - expect(foo.type).toBe('456'); - expect(getModelType(foo)).toBe(foo.type); - - expect( - testMobx.action(() => { - foo.type = 'bar'; - }), - ).toThrowError("Model type can't be changed after initialization."); - expect(() => { - foo.id = 789; - }).toThrowError( - "Model ID can't be updated directly. Use the `updateModelId` helper function instead.", - ); - - const foo1 = store.add(new Foo({ id: 234 })); - - expect(foo1.id).toBe(234); - - const foo2 = store.add({ parent: foo1, foos: [foo1] }, Foo); - - expect(foo2.id).toBeLessThan(0); - expect(getModelId(foo2)).toBe(foo2.id); - expect(foo2.type).toBe('foo'); - expect(getModelType(foo2)).toBe('foo'); - expect(modelToJSON(foo2).parent).toEqual(getModelRef(foo1)); - expect(modelToJSON(foo2).foos).toContainEqual(getModelRef(foo1)); - }); - }); - }); - - describe('Dirty status', () => { - it('should show as dirty on any change of a new model', () => { - class Foo extends Model { - @Attribute() - public foo?: number; - - @Attribute() - public bar?: number; - } - - const foo = new Foo({ foo: 1 }); - expect(isAttributeDirty(foo, 'foo')).toBe(false); - expect(isAttributeDirty(foo, 'bar')).toBe(false); - - foo.bar = 2; - expect(isAttributeDirty(foo, 'foo')).toBe(false); - expect(isAttributeDirty(foo, 'bar')).toBe(true); - const raw = modelToDirtyJSON(foo); - expect(raw).not.toHaveProperty('foo'); - expect(raw).toHaveProperty('bar'); - - foo.foo = 3; - expect(isAttributeDirty(foo, 'foo')).toBe(true); - expect(isAttributeDirty(foo, 'bar')).toBe(true); - - foo.foo = 1; - expect(isAttributeDirty(foo, 'foo')).toBe(false); - expect(isAttributeDirty(foo, 'bar')).toBe(true); - - foo.bar = undefined; - expect(isAttributeDirty(foo, 'foo')).toBe(false); - expect(isAttributeDirty(foo, 'bar')).toBe(false); - }); - - it('should show correct status after commit', () => { - class Foo extends Model { - @Attribute() - public foo?: number; - - @Attribute() - public bar?: number; - } - - const foo = new Foo({ foo: 1 }); - expect(isAttributeDirty(foo, 'foo')).toBe(false); - expect(isAttributeDirty(foo, 'bar')).toBe(false); - - foo.foo = 2; - foo.bar = 3; - expect(isAttributeDirty(foo, 'foo')).toBe(true); - expect(isAttributeDirty(foo, 'bar')).toBe(true); - - commitModel(foo); - expect(isAttributeDirty(foo, 'foo')).toBe(false); - expect(isAttributeDirty(foo, 'bar')).toBe(false); - }); - - it('should revert correctly', () => { - class Foo extends Model { - @Attribute() - public foo?: number; - - @Attribute() - public bar?: number; - } - - const foo = new Foo({ foo: 1 }); - expect(isAttributeDirty(foo, 'foo')).toBe(false); - expect(isAttributeDirty(foo, 'bar')).toBe(false); - - foo.foo = 2; - foo.bar = 3; - expect(isAttributeDirty(foo, 'foo')).toBe(true); - expect(isAttributeDirty(foo, 'bar')).toBe(true); - - revertModel(foo); - expect(isAttributeDirty(foo, 'foo')).toBe(false); - expect(foo.foo).toBe(1); - expect(isAttributeDirty(foo, 'bar')).toBe(false); - expect(foo.bar).toBeUndefined(); - }); - - it('should work with relationships', () => { - class Foo extends Model { - @Attribute({ toOne: Foo }) - public one!: Foo; - - @Attribute({ toMany: Foo }) - public many!: Array; - } - - class Store extends Collection { - public static types = [Foo]; - } - - const store = new Store(); - - const [foo1, foo2, foo3, foo4] = store.add([{}, {}, {}, {}], Foo); - - foo1.one = foo4; - foo1.many = [foo2, foo3]; - - expect(isAttributeDirty(foo1, 'one')).toBe(true); - expect(isAttributeDirty(foo1, 'many')).toBe(true); - - commitModel(foo1); - expect(isAttributeDirty(foo1, 'one')).toBe(false); - expect(isAttributeDirty(foo1, 'many')).toBe(false); - - foo1.one = foo2; - - if (mobx.useRealMobX) { - foo1.many.push(foo4); - } else { - foo1.many = [...foo1.many, foo4]; - } - - expect(isAttributeDirty(foo1, 'one')).toBe(true); - expect(isAttributeDirty(foo1, 'many')).toBe(true); - - revertModel(foo1); - expect(isAttributeDirty(foo1, 'one')).toBe(false); - expect(isAttributeDirty(foo1, 'many')).toBe(false); - expect(foo1.one).toBe(foo4); - expect(foo1.many).toEqual([foo2, foo3]); - }); - }); -}); diff --git a/packages/datx/test/patches.test.ts b/packages/datx/test/patches.test.ts deleted file mode 100644 index ee1cc9006..000000000 --- a/packages/datx/test/patches.test.ts +++ /dev/null @@ -1,542 +0,0 @@ -import { META_FIELD } from '@datx/utils'; -import testMobx from './mobx'; - -import { Collection, Model, Attribute } from '../src'; -import { IPatch } from '../src/interfaces/IPatch'; -import { PatchType } from '../src/enums/PatchType'; -import { getModelRef } from '../src/helpers/model/utils'; - -// @ts-ignore -testMobx.configure({ enforceActions: 'observed' }); - -describe('patch', () => { - describe('model', () => { - it('should trigger on add, replace and remove', () => { - const patches: Array = []; - const model = new Model({ - name: 'Foo', - nick: 'Bar', - }); - - const unregister = model.onPatch((patch) => patches.push(patch)); - - testMobx.runInAction(() => { - model['name'] = 'FooBar'; - }); - model.assign('age', 42); - model.assign('nick', undefined); - model.update({ - height: 180, - name: 'Bar', - }); - - unregister(); - testMobx.runInAction(() => { - model['height'] = 200; - }); - - expect(patches).toMatchSnapshot(); - - expect(Object.prototype.propertyIsEnumerable.call(model, '__patchListeners')).toBe(false); - }); - - it('should be able to apply patches', () => { - const model = new Model({ - name: 'Foo', - nick: 'Bar', - }); - - const modelMeta = { id: model.meta.id, type: model.meta.type }; - - const patches: Array = [ - { - model: modelMeta, - newValue: { name: 'FooBar' }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { age: 42 }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { nick: undefined }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { height: 180 }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { name: 'Bar' }, - patchType: PatchType.UPDATE, - }, - ] as Array>>; - - patches.forEach((patch: IPatch) => { - model.applyPatch(patch); - }); - - expect(model['name']).toBe('Bar'); - expect(model['height']).toBe(180); - expect(model['age']).toBe(42); - expect(model['nick']).toBe(undefined); - }); - - it('should be able to undo', () => { - const patches: Array = []; - const model = new Model({ - name: 'Foo', - nick: 'Bar', - }); - - const unregister = model.onPatch((patch) => patches.push(patch)); - - model.assign('age', 42); - model.update({ - height: 180, - name: 'FooBar', - }); - model.assign('nick', undefined); - - expect(model['age']).toBe(42); - expect(model['name']).toBe('FooBar'); - expect(model['nick']).toBe(undefined); - - expect(patches).toMatchSnapshot(); - - unregister(); - patches.reverse().forEach((patch) => { - model.undoPatch(patch); - }); - - expect(model['age']).toBe(undefined); - expect(model['name']).toBe('Foo'); - expect(model['nick']).toBe('Bar'); - }); - - it('should ignore noop changes', () => { - const patches: Array = []; - const model = new Model({ - name: 'Foo', - nick: 'Bar', - }); - - const unregister = model.onPatch((patch) => patches.push(patch)); - - testMobx.runInAction(() => { - model['name'] = 'Foo'; - }); - model.assign('age', 42); - model.assign('nick', 'Bar'); - - unregister(); - testMobx.runInAction(() => { - model['height'] = 200; - }); - - expect(patches).toMatchSnapshot(); - }); - }); - - describe('collection', () => { - it('should trigger on add, replace and remove', () => { - const patches: Array = []; - const model = new Model({ - [META_FIELD]: { type: 'foo', id: 1 }, - name: 'Foo', - nick: 'Bar', - }); - - const modelMeta = { type: model.meta.type, id: model.meta.id }; - const store = new Collection(); - - store.onPatch((patch) => patches.push(patch)); - - const addSnapshot = model.meta.snapshot; - - store.add(model); - - testMobx.runInAction(() => { - model['name'] = 'FooBar'; - }); - model.assign('age', 42); - model.assign('nick', undefined); - model.update({ - height: 180, - name: 'Bar', - }); - - const removeSnapshot = model.meta.snapshot; - - store.removeOne('foo', 1); - - testMobx.runInAction(() => { - model['height'] = 200; - }); - - expect(patches).toEqual([ - { - model: modelMeta, - newValue: addSnapshot, - patchType: PatchType.CRATE, - }, - { - model: modelMeta, - newValue: { name: 'FooBar' }, - oldValue: { name: 'Foo' }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { age: 42 }, - oldValue: { age: undefined }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { nick: undefined }, - oldValue: { nick: 'Bar' }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { height: 180, name: 'Bar' }, - oldValue: { height: undefined, name: 'FooBar' }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - oldValue: removeSnapshot, - patchType: PatchType.REMOVE, - }, - ]); - }); - - it('should be able to apply patches', () => { - const model = new Model({ - [META_FIELD]: { type: 'foo' }, - id: 1, - name: 'Foo', - nick: 'Bar', - }); - const modelMeta = { id: model.meta.id, type: model.meta.type }; - - const store = new Collection(); - - const patches: Array = [ - { - model: modelMeta, - newValue: model, - patchType: PatchType.CRATE, - }, - { - model: modelMeta, - newValue: { name: 'FooBar' }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { age: 42 }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { nick: undefined }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { height: 180 }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { name: 'Bar' }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - patchType: PatchType.REMOVE, - }, - ] as Array; - - patches.forEach((patch: IPatch) => { - store.applyPatch(patch); - }); - - expect(model['name']).toBe('Bar'); - expect(model['height']).toBe(180); - expect(model['age']).toBe(42); - expect(model['nick']).toBe(undefined); - expect(store.length).toBe(0); - }); - }); - - describe('collection with initial data', () => { - it('should trigger on add, replace and remove', () => { - const patches: Array = []; - - const store = new Collection([ - { - [META_FIELD]: { type: 'foo', id: 1 }, - name: 'Foo', - nick: 'Bar', - }, - ]); - - store.onPatch((patch) => patches.push(patch)); - const model = store.findAll('foo')[0]; - - expect(model).not.toBe(null); - if (model) { - testMobx.runInAction(() => { - model['name'] = 'FooBar'; - }); - model.assign('age', 42); - model.assign('nick', undefined); - model.update({ - height: 180, - name: 'Bar', - }); - - store.removeOne('foo', 1); - - testMobx.runInAction(() => { - model['height'] = 200; - }); - - expect(patches).toMatchSnapshot(); - } - }); - - it('should be able to apply patches', () => { - const store = new Collection([ - { - [META_FIELD]: { type: 'foo' }, - id: 1, - name: 'Foo', - nick: 'Bar', - }, - ]); - - const model = store.findAll('foo')[0]; - - expect(model).not.toBe(null); - if (model) { - const modelMeta = { id: model.meta.id, type: model.meta.type }; - - const patches: Array = [ - { - model: modelMeta, - newValue: { name: 'FooBar' }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { age: 42 }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { nick: undefined }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { height: 180 }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { name: 'Bar' }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - patchType: PatchType.REMOVE, - }, - ] as Array; - - patches.forEach((patch: IPatch) => { - store.applyPatch(patch); - }); - - expect(model['name']).toBe('Bar'); - expect(model['height']).toBe(180); - expect(model['age']).toBe(42); - expect(model['nick']).toBe(undefined); - expect(store.length).toBe(0); - } - }); - }); - - describe('references', () => { - it('should trigger correct patches for ref changes', () => { - class FooModel extends Model { - public static type = 'foo'; - - @Attribute({ isIdentifier: true }) - public id!: number | string; - - @Attribute({ toOne: 'bar ' }) - public bar!: BarModel | null; - } - - class BarModel extends Model { - public static type = 'bar'; - - @Attribute({ isIdentifier: true }) - public id!: number | string; - } - - class TestCollection extends Collection { - public static types = [FooModel]; - - public foo!: Array; - } - - const bar2 = new BarModel({ id: 2 }); - const bar3 = new BarModel({ id: 3 }); - - const patches: Array = []; - const collection = new TestCollection(); - - collection.onPatch((patch) => patches.push(patch)); - - const model = collection.add( - { - bar: bar2, - id: 1, - }, - 'foo', - ); - - testMobx.runInAction(() => { - model.bar = bar3; - model.meta.refs.bar = { id: 2, type: 'bar' }; - model.bar = null; - model.bar = bar3; - }); - - expect(patches).toMatchSnapshot(); - }); - - it('should apply patches correctly for ref changes', () => { - class BarModel extends Model { - public static type = 'bar'; - - @Attribute({ isIdentifier: true }) - public id!: number | string; - } - - class FooModel extends Model { - public static type = 'foo'; - - @Attribute({ isIdentifier: true }) - public id!: number | string; - - @Attribute({ toOne: BarModel }) - public bar!: BarModel; - } - - class TestCollection extends Collection { - public static types = [FooModel]; - - public foo!: Array; - } - - const bar2 = new BarModel({ id: 2 }); - const bar2meta = { type: bar2.meta.type, id: bar2.meta.id }; - const bar3 = new BarModel({ id: 3 }); - const bar3meta = { type: bar3.meta.type, id: bar3.meta.id }; - const model = new FooModel({ id: 1 }); - const modelMeta = { type: model.meta.type, id: model.meta.id }; - - const patches: Array = [ - { - model: bar2meta, - newValue: bar2, - patchType: PatchType.CRATE, - }, - { - model: modelMeta, - newValue: model, - patchType: PatchType.CRATE, - }, - { - model: bar3meta, - newValue: bar3, - patchType: PatchType.CRATE, - }, - { - model: modelMeta, - newValue: { bar: getModelRef(bar3) }, - oldValue: { bar: undefined }, - patchType: PatchType.UPDATE, - }, - { - model: modelMeta, - newValue: { bar: getModelRef(bar2) }, - oldValue: { bar: getModelRef(bar3) }, - patchType: PatchType.UPDATE, - }, - ] as Array; - - const collection = new TestCollection(); - - patches.forEach((patch: IPatch) => { - collection.applyPatch(patch); - }); - - expect(collection).toHaveLength(3); - expect(model.bar).toBe(bar2); - }); - - it('should handle references correctly', () => { - class Foo extends Model { - public static type = 'foo'; - - @Attribute() - public val!: number; - } - - class Bar extends Model { - public static type = 'bar'; - - @Attribute({ toOne: Foo }) - public foo!: Foo; - } - - class TestStore extends Collection { - public static types = [Foo, Bar]; - } - - const store = new TestStore(); - const foo = store.add({ val: 1 }, Foo); - const bar = store.add({ foo }, Bar); - - expect(bar.foo.val).toBe(1); - - const snapshot = bar.toJSON(); - - store.removeOne(bar); - expect(store.findAll(Bar)).toHaveLength(0); - store.applyPatch({ - patchType: PatchType.CRATE, - model: { - id: snapshot?.__META__?.id, - type: snapshot?.__META__?.type, - }, - newValue: snapshot, - }); - const bar2 = store.findAll(Bar)[0]; - - expect(bar2).toBeInstanceOf(Bar); - expect(bar2.foo.val).toBe(1); - }); - }); -}); diff --git a/packages/datx/test/setup.ts b/packages/datx/test/setup.ts index d55bca306..e69de29bb 100644 --- a/packages/datx/test/setup.ts +++ b/packages/datx/test/setup.ts @@ -1,3 +0,0 @@ -if (parseInt(process.env.MOBX_VERSION || '0', 10) < 0) { - require('../src/disable-mobx'); -} \ No newline at end of file diff --git a/packages/datx/test/tomany.test.ts b/packages/datx/test/tomany.test.ts deleted file mode 100644 index 256d13b8c..000000000 --- a/packages/datx/test/tomany.test.ts +++ /dev/null @@ -1,304 +0,0 @@ -import testMobx from './mobx'; -import { mobx } from '@datx/utils'; - -import { Collection, Model, Bucket, Attribute, PureCollection } from '../src'; - -// @ts-ignore -testMobx.configure({ enforceActions: 'observed' }); - -describe('ToMany', () => { - describe('static', () => { - it('should init a bucket', () => { - const collection = new Collection(); - const bucketInstance = new Bucket.ToMany([], collection); - - expect(bucketInstance).toBeInstanceOf(Bucket.ToMany); - }); - - it('should be able to get initial models', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const bucketInstance = new Bucket.ToMany(foos, collection); - - expect(bucketInstance.length).toBe(2); - expect(bucketInstance.value[0]).toBeInstanceOf(Foo); - expect(bucketInstance.value[1]).toBeInstanceOf(Foo); - expect(bucketInstance.value[0]).toBe(foos[0]); - }); - - it('should support multiple types', () => { - class Foo extends Model { - public static type = 'foo'; - } - class Bar extends Model { - public static type = 'bar'; - } - class AppCollection extends Collection { - public static types = [Foo, Bar]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const bars = collection.add([{}], Bar); - const bucketInstance = new Bucket.ToMany([...foos, ...bars], collection); - - expect(bucketInstance.length).toBe(3); - expect(bucketInstance.value[0]).toBeInstanceOf(Foo); - expect(bucketInstance.value[2]).toBeInstanceOf(Bar); - expect(bucketInstance.value[0]).toBe(foos[0]); - }); - - it('should support ids before models', () => { - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ isIdentifier: true }) - public id!: number; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const bucketInstance = new Bucket.ToMany( - [ - { id: '987', type: 'foo' }, - { id: '123', type: 'foo' }, - { id: '234', type: 'foo' }, - ], - collection, - ); - const foos = collection.add([{ id: '123' }, { id: '234' }], Foo); - - expect(collection.length).toBe(2); - expect(bucketInstance.length).toBe(2); - expect(bucketInstance.snapshot.length).toBe(3); - expect(bucketInstance.value[0]).toBeInstanceOf(Foo); - expect(bucketInstance.value[1]).toBeInstanceOf(Foo); - expect(bucketInstance.value[0]).toBe(foos[0]); - }); - - it('should support array updates with real mobx', () => { - class Foo extends Model { - public static type = 'foo'; - } - class Bar extends Model { - public static type = 'bar'; - } - class AppCollection extends Collection { - public static types = [Foo, Bar]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const bars = collection.add([{}], Bar); - const bucketInstance = new Bucket.ToMany([...foos, ...bars], collection); - - expect(bucketInstance.length).toBe(3); - expect(bucketInstance.value[0]).toBe(foos[0]); - - if (mobx.useRealMobX) { - bucketInstance.value.shift(); - } else { - bucketInstance.value = bucketInstance.value.slice(1); - } - expect(bucketInstance.length).toBe(2); - expect(bucketInstance.value[0]).toBe(foos[1]); - - if (mobx.useRealMobX) { - bucketInstance.value.pop(); - } else { - bucketInstance.value = bucketInstance.value.slice(0, -1); - } - expect(bucketInstance.length).toBe(1); - expect(bucketInstance.value[0]).toBe(foos[1]); - - bucketInstance.value = foos; - expect(bucketInstance.length).toBe(2); - expect(bucketInstance.value[0]).toBe(foos[0]); - - if (mobx.useRealMobX) { - bucketInstance.value.push(bars[0]); - } else { - bucketInstance.value = [...bucketInstance.value, bars[0]]; - } - expect(bucketInstance.length).toBe(3); - }); - - it('should throw on readonly update', () => { - class Foo extends Model { - public static type = 'foo'; - } - class Bar extends Model { - public static type = 'bar'; - } - class AppCollection extends Collection { - public static types = [Foo, Bar]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const bars = collection.add([{}], Bar); - const bucketInstance = new Bucket.ToMany([...foos, ...bars], collection, true); - - expect(bucketInstance.length).toBe(3); - expect(bucketInstance.value[0]).toBe(foos[0]); - expect(() => { - if (mobx.useRealMobX) { - bucketInstance.value.shift(); - } else { - bucketInstance.value = bucketInstance.value.slice(1); - } - }).toThrowError('[datx exception] This is a read-only bucket'); - - expect(() => { - bucketInstance.value = foos; - }).toThrowError('[datx exception] This is a read-only bucket'); - }); - }); - - describe('dynamic', () => { - it('should work with a function and class type', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toMany: (data, parentModel, key, collection) => { - expect(data).toEqual({ value: 1 }); - expect(parentModel).toBeInstanceOf(Foo); - expect(key).toBe('bar'); - expect(collection).toBeInstanceOf(PureCollection); - return Bar; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: [{ value: 1 }] }, Foo); - - expect(foo.bar[0]).toBeInstanceOf(Bar); - }); - - it('should work with a function and class type', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toMany: (data) => { - expect(data).toEqual({ value: 1 }); - return 'bar'; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: [{ value: 1 }] }, Foo); - - expect(foo.bar[0]).toBeInstanceOf(Bar); - }); - - it('should work with multiple types', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Baz extends Model { - public static type = 'baz'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toMany: (data: any) => { - return data.value % 2 === 0 ? Baz : Bar; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar, Baz]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: [{ value: 1 }, { value: 2 }, { value: 5 }] }, Foo); - - expect(foo.bar[0]).toBeInstanceOf(Bar); - expect(foo.bar[1]).toBeInstanceOf(Baz); - expect(foo.bar[2]).toBeInstanceOf(Bar); - }); - - it('should fail on an invalid type', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toMany: (data) => { - expect(data).toEqual({ value: 1 }); - return 'baz'; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: [{ value: 1 }] }, Foo); - - expect(foo.bar[0]).not.toBeInstanceOf(Bar); - expect(foo.bar[0]).toBeInstanceOf(Model); - }); - }); -}); diff --git a/packages/datx/test/toone.test.ts b/packages/datx/test/toone.test.ts deleted file mode 100644 index f305fe02c..000000000 --- a/packages/datx/test/toone.test.ts +++ /dev/null @@ -1,270 +0,0 @@ -import testMobx from './mobx'; - -import { Bucket, Collection, Model, Attribute, PureCollection } from '../src'; - -// @ts-ignore -testMobx.configure({ enforceActions: 'observed' }); - -describe('ToOne', () => { - describe('static', () => { - it('should init a bucket', () => { - const collection = new Collection(); - const bucketInstance = new Bucket.ToOne(null, collection); - - expect(bucketInstance).toBeInstanceOf(Bucket.ToOne); - expect(bucketInstance.snapshot).toBeNull(); - }); - - it('should be able to get initial model', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const bucketInstance = new Bucket.ToOne(foos[0], collection); - - expect(bucketInstance.value).toBe(foos[0]); - }); - - it('should support ids before models', () => { - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ isIdentifier: true }) - public id!: number; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const bucketInstance = new Bucket.ToOne({ id: 234, type: 'foo' }, collection); - const foos = collection.add([{ id: 123 }, { id: 234 }], Foo); - - expect(collection.length).toBe(2); - expect(bucketInstance.value).toBe(foos[1]); - }); - - it('should support updates', () => { - class Foo extends Model { - public static type = 'foo'; - } - class Bar extends Model { - public static type = 'bar'; - } - class AppCollection extends Collection { - public static types = [Foo, Bar]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const bucketInstance = new Bucket.ToOne(foos[0], collection); - - expect(bucketInstance.value).toBe(foos[0]); - bucketInstance.value = foos[1]; - expect(bucketInstance.value).toBe(foos[1]); - }); - - it('should throw on readonly update', () => { - class Foo extends Model { - public static type = 'foo'; - } - class Bar extends Model { - public static type = 'bar'; - } - class AppCollection extends Collection { - public static types = [Foo, Bar]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const bucketInstance = new Bucket.ToOne(foos[0], collection, true); - - expect(bucketInstance.value).toBe(foos[0]); - expect(() => { - bucketInstance.value = foos[1]; - }).toThrowError('[datx exception] This is a read-only bucket'); - }); - - it('should work with initial model data and id', () => { - class Foo extends Model { - public static type = 'foo'; - } - - class Bar extends Model { - public static type = 'bar'; - - @Attribute({ toOne: Foo }) - public foo!: Foo; - } - - class AppCollection extends Collection { - public static types = [Foo, Bar]; - } - - const collection = new AppCollection(); - - const bar = collection.add( - { - foo: '1', - }, - Bar, - ); - - expect(bar.foo).toBe(null); - - const foo = collection.add({}, Foo); - - const bar2 = collection.add( - { - foo: foo.meta.id, - }, - Bar, - ); - - expect(bar2.foo).toBe(foo); - }); - - it('should work with initial model data and ref', () => { - class Foo extends Model { - public static type = 'foo'; - } - - class Bar extends Model { - public static type = 'bar'; - - @Attribute({ toOne: Foo }) - public foo!: Foo; - } - - class AppCollection extends Collection { - public static types = [Foo, Bar]; - } - - const collection = new AppCollection(); - - const bar = collection.add( - { - foo: { id: '1', type: 'foo' }, - }, - Bar, - ); - - expect(bar.foo).toBe(null); - - const foo = collection.add({}, Foo); - - const bar2 = collection.add( - { - foo: { id: foo.meta.id, type: foo.meta.type }, - }, - Bar, - ); - - expect(bar2.foo).toBe(foo); - }); - }); - - describe('dynamic', () => { - it('should work with a function and class type', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toOne: (data, parentModel, key, collection) => { - expect(data).toEqual({ value: 1 }); - expect(parentModel).toBeInstanceOf(Foo); - expect(key).toBe('bar'); - expect(collection).toBeInstanceOf(PureCollection); - return Bar; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: { value: 1 } }, Foo); - - expect(foo.bar).toBeInstanceOf(Bar); - }); - - it('should work with a function and class type', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toOne: (data) => { - expect(data).toEqual({ value: 1 }); - return 'bar'; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: { value: 1 } }, Foo); - - expect(foo.bar).toBeInstanceOf(Bar); - }); - - it('should fail on an invalid type', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toOne: (data) => { - expect(data).toEqual({ value: 1 }); - return 'baz'; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: { value: 1 } }, Foo); - - expect(foo.bar).not.toBeInstanceOf(Bar); - expect(foo.bar).toBeInstanceOf(Model); - }); - }); -}); diff --git a/packages/datx/test/tooneormany.test.ts b/packages/datx/test/tooneormany.test.ts deleted file mode 100644 index 253838a74..000000000 --- a/packages/datx/test/tooneormany.test.ts +++ /dev/null @@ -1,441 +0,0 @@ -import testMobx from './mobx'; - -import { Bucket, Collection, Model, Attribute, PureCollection } from '../src'; -import { mobx } from '@datx/utils'; - -// @ts-ignore -testMobx.configure({ enforceActions: 'observed' }); - -describe('ToOneOrMany', () => { - describe('ToOneOrMany with lists', () => { - it('should init a ToOneOrMany bucket', () => { - const collection = new Collection(); - const bucketInstance = new Bucket.ToOneOrMany([], collection); - - expect(bucketInstance).toBeInstanceOf(Bucket.ToOneOrMany); - }); - - it('should be able to get initial models', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const bucketInstance = new Bucket.ToOneOrMany(foos, collection); - - expect(bucketInstance.value).toBeInstanceOf(Array); - if (bucketInstance.value instanceof Array) { - expect(bucketInstance.value).toHaveLength(2); - expect(bucketInstance.value[0]).toBeInstanceOf(Foo); - expect(bucketInstance.value[1]).toBeInstanceOf(Foo); - expect(bucketInstance.value[0]).toBe(foos[0]); - } - }); - - it('should support multiple types', () => { - class Foo extends Model { - public static type = 'foo'; - } - class Bar extends Model { - public static type = 'bar'; - } - class AppCollection extends Collection { - public static types = [Foo, Bar]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const bars = collection.add([{}], Bar); - const bucketInstance = new Bucket.ToOneOrMany([...foos, ...bars], collection); - - expect(bucketInstance.value).toBeInstanceOf(Array); - if (bucketInstance.value instanceof Array) { - expect(bucketInstance.value).toHaveLength(3); - expect(bucketInstance.value[0]).toBeInstanceOf(Foo); - expect(bucketInstance.value[2]).toBeInstanceOf(Bar); - expect(bucketInstance.value[0]).toBe(foos[0]); - } - }); - - it('should support ids before models', () => { - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ isIdentifier: true }) - public id!: number; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const bucketInstance = new Bucket.ToOneOrMany( - [ - { id: '987', type: 'foo' }, - { id: '123', type: 'foo' }, - { id: '234', type: 'foo' }, - ], - collection, - ); - const foos = collection.add([{ id: '123' }, { id: '234' }], Foo); - - expect(collection.length).toBe(2); - expect(bucketInstance.value).toBeInstanceOf(Array); - if (bucketInstance.value instanceof Array) { - expect(bucketInstance.value.length).toBe(2); - expect(bucketInstance.snapshot).toBeInstanceOf(Array); - expect(bucketInstance.snapshot).toHaveLength(3); - expect(bucketInstance.value[0]).toBeInstanceOf(Foo); - expect(bucketInstance.value[1]).toBeInstanceOf(Foo); - expect(bucketInstance.value[0]).toBe(foos[0]); - } - }); - - it('should support array updates', () => { - class Foo extends Model { - public static type = 'foo'; - } - class Bar extends Model { - public static type = 'bar'; - } - class AppCollection extends Collection { - public static types = [Foo, Bar]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const bars = collection.add([{}], Bar); - const bucketInstance = new Bucket.ToOneOrMany([...foos, ...bars], collection); - - expect(bucketInstance.value).toBeInstanceOf(Array); - if (bucketInstance.value instanceof Array) { - expect(bucketInstance.value).toHaveLength(3); - expect(bucketInstance.value[0]).toBeInstanceOf(Foo); - expect(bucketInstance.value[2]).toBeInstanceOf(Bar); - expect(bucketInstance.value[0]).toBe(foos[0]); - - if (mobx.useRealMobX) { - bucketInstance.value.shift(); - } else { - bucketInstance.value = bucketInstance.value.slice(1); - } - expect(bucketInstance.value).toHaveLength(2); - expect(bucketInstance.value[0]).toBe(foos[1]); - - bucketInstance.value = foos; - expect(bucketInstance.value).toHaveLength(2); - expect(bucketInstance.value[0]).toBe(foos[0]); - - bucketInstance.value = bars[0]; - expect(bucketInstance.value).toBeInstanceOf(Bar); - } - }); - describe('dynamic', () => { - it('should work with a function and class type', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toOneOrMany: (data, parentModel, key, collection) => { - expect(data).toEqual({ value: 1 }); - expect(parentModel).toBeInstanceOf(Foo); - expect(key).toBe('bar'); - expect(collection).toBeInstanceOf(PureCollection); - return Bar; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: [{ value: 1 }] }, Foo); - - expect(foo.bar[0]).toBeInstanceOf(Bar); - }); - - it('should work with a function and class type', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toOneOrMany: (data) => { - expect(data).toEqual({ value: 1 }); - return 'bar'; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: [{ value: 1 }] }, Foo); - - expect(foo.bar[0]).toBeInstanceOf(Bar); - }); - - it('should work with multiple types', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Baz extends Model { - public static type = 'baz'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toOneOrMany: (data: any) => { - return data.value % 2 === 0 ? Baz : Bar; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar, Baz]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: [{ value: 1 }, { value: 2 }, { value: 5 }] }, Foo); - - expect(foo.bar[0]).toBeInstanceOf(Bar); - expect(foo.bar[1]).toBeInstanceOf(Baz); - expect(foo.bar[2]).toBeInstanceOf(Bar); - }); - - it('should fail on an invalid type', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toOneOrMany: (data) => { - expect(data).toEqual({ value: 1 }); - return 'baz'; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: [{ value: 1 }] }, Foo); - - expect(foo.bar[0]).not.toBeInstanceOf(Bar); - expect(foo.bar[0]).toBeInstanceOf(Model); - }); - }); - }); - - describe('ToOneOrMany with a single item', () => { - it('should init a ToOneOrMany bucket', () => { - const collection = new Collection(); - const bucketInstance = new Bucket.ToOneOrMany([], collection); - - expect(bucketInstance).toBeInstanceOf(Bucket.ToOneOrMany); - }); - - it('should be able to get initial model', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const bucketInstance = new Bucket.ToOneOrMany(foos[0], collection); - - expect(bucketInstance.value).toBe(foos[0]); - }); - - it('should support ids before models', () => { - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ isIdentifier: true }) - public id!: number; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const bucketInstance = new Bucket.ToOneOrMany({ id: '234', type: 'foo' }, collection); - const foos = collection.add([{ id: '123' }, { id: '234' }], Foo); - - expect(collection.length).toBe(2); - expect(bucketInstance.snapshot).not.toBeInstanceOf(Array); - expect(bucketInstance.value).toBe(foos[1]); - }); - - it('should support updates', () => { - class Foo extends Model { - public static type = 'foo'; - } - class Bar extends Model { - public static type = 'bar'; - } - class AppCollection extends Collection { - public static types = [Foo, Bar]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const bucketInstance = new Bucket.ToOneOrMany(foos[0], collection); - - expect(bucketInstance.value).toBe(foos[0]); - bucketInstance.value = foos[1]; - expect(bucketInstance.value).toBe(foos[1]); - - bucketInstance.value = foos; - expect(bucketInstance.value).toBeInstanceOf(Array); - }); - - describe('dynamic', () => { - it('should work with a function and class type', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toOneOrMany: (data, parentModel, key, collection) => { - expect(data).toEqual({ value: 1 }); - expect(parentModel).toBeInstanceOf(Foo); - expect(key).toBe('bar'); - expect(collection).toBeInstanceOf(PureCollection); - return Bar; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: { value: 1 } }, Foo); - - expect(foo.bar).toBeInstanceOf(Bar); - }); - - it('should work with a function and class type', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toOneOrMany: (data) => { - expect(data).toEqual({ value: 1 }); - return 'bar'; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: { value: 1 } }, Foo); - - expect(foo.bar).toBeInstanceOf(Bar); - }); - - it('should fail on an invalid type', () => { - class Bar extends Model { - public static type = 'bar'; - - @Attribute() - public value!: number; - } - - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ - toOneOrMany: (data) => { - expect(data).toEqual({ value: 1 }); - return 'baz'; - }, - }) - public bar!: Bar; - } - - class TestCollection extends Collection { - public static types = [Foo, Bar]; - } - - const store = new TestCollection(); - - const foo = store.add({ bar: { value: 1 } }, Foo); - - expect(foo.bar).not.toBeInstanceOf(Bar); - expect(foo.bar).toBeInstanceOf(Model); - }); - }); - }); -}); diff --git a/packages/datx/test/view.test.ts b/packages/datx/test/view.test.ts deleted file mode 100644 index 4c0fb7f0a..000000000 --- a/packages/datx/test/view.test.ts +++ /dev/null @@ -1,612 +0,0 @@ -import testMobx from './mobx'; - -import { Collection, Model, View, Attribute } from '../src'; -import { updateModelId } from '../src/helpers/model/fields'; -import { ViewAttribute } from '../src/Attribute'; -import { mobx } from '@datx/utils'; - -// @ts-ignore -testMobx.configure({ enforceActions: 'observed' }); - -describe('View', () => { - it('should init a view', () => { - const collection = new Collection(); - const viewInstance = new View('foo', collection); - - expect(viewInstance).toBeInstanceOf(View); - }); - - it('should be able to get initial models', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const viewInstance = new View(Foo, collection, undefined, [-1, -2]); - - expect(viewInstance).toHaveLength(2); - expect(viewInstance.list[0]).toBeInstanceOf(Foo); - expect(viewInstance.list[1]).toBeInstanceOf(Foo); - expect(viewInstance.list[0]).toBe(foos[0]); - expect(viewInstance.hasItem(foos[1])).toBe(true); - }); - - it('should be able to receive models', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const viewInstance = new View(Foo, collection); - - viewInstance.add(foos); - - expect(viewInstance).toHaveLength(2); - expect(viewInstance.list[0]).toBeInstanceOf(Foo); - expect(viewInstance.list[1]).toBeInstanceOf(Foo); - expect(viewInstance.list[0]).toBe(foos[0]); - }); - - it('should be a dynamic list', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const viewInstance = new View(Foo, collection); - - let expectedLength = 0; - let lengthAutorunCount = 0; - let listAutorunCount = 0; - - testMobx.autorun(() => { - expect(viewInstance).toHaveLength(expectedLength); - lengthAutorunCount++; - }); - - testMobx.autorun(() => { - expect(viewInstance.list).toHaveLength(expectedLength); - listAutorunCount++; - }); - - expectedLength = foos.length; - viewInstance.add(foos); - - expect(viewInstance).toHaveLength(2); - expect(viewInstance.list[0]).toBeInstanceOf(Foo); - expect(viewInstance.list[1]).toBeInstanceOf(Foo); - expect(viewInstance.list[0]).toBe(foos[0]); - expect(listAutorunCount).toBe(mobx.useRealMobX ? 2 : 1); - expect(lengthAutorunCount).toBe(mobx.useRealMobX ? 2 : 1); - }); - - it('should be able to sort models', () => { - class Foo extends Model { - public static type = 'foo'; - - @Attribute() - public key!: number; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{ key: 2 }, { key: 3 }, { key: 1 }], Foo); - const viewInstance = new View(Foo, collection, (item: Foo) => item.key, foos); - - expect(viewInstance).toHaveLength(3); - const item0a = viewInstance.list[0]; - const item2a = viewInstance.list[2]; - - expect(item0a && item0a.key).toBe(1); - expect(item2a && item2a.key).toBe(3); - - const foo0 = collection.add({ key: 0 }, Foo); - - expect(viewInstance).toHaveLength(3); - viewInstance.add(foo0); - const item0b = viewInstance.list[0]; - const item2b = viewInstance.list[2]; - - expect(item0b && item0b.key).toBe(0); - expect(item2b && item2b.key).toBe(2); - }); - - it('should be able to sort models by non-numerical prop', () => { - class Foo extends Model { - public static type = 'foo'; - - @Attribute() - public key!: string; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{ key: 'abd' }, { key: 'bbf' }, { key: 'ecf' }], Foo); - const viewInstance = new View(Foo, collection, (item: Foo) => item.key, foos); - - expect(viewInstance).toHaveLength(3); - const item0a = viewInstance.list[0]; - const item2a = viewInstance.list[2]; - - expect(item0a && item0a.key).toBe('abd'); - expect(item2a && item2a.key).toBe('ecf'); - - const foo0 = collection.add({ key: 'ccc' }, Foo); - - expect(viewInstance).toHaveLength(3); - viewInstance.add(foo0); - const item0b = viewInstance.list[0]; - const item2b = viewInstance.list[2]; - - expect(item0b && item0b.key).toBe('abd'); - expect(item2b && item2b.key).toBe('ccc'); - }); - - it('should be able to update sort method', () => { - class Foo extends Model { - public static type = 'foo'; - - @Attribute() - public key!: number; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{ key: 2 }, { key: 3 }, { key: 1 }], Foo); - const viewInstance = new View(Foo, collection, (item: Foo) => item.key, foos); - - expect(viewInstance).toHaveLength(3); - const item0a = viewInstance.list[0]; - const item2a = viewInstance.list[2]; - - expect(item0a && item0a.key).toBe(1); - expect(item2a && item2a.key).toBe(3); - - let keyList: Array = []; - let autorunCount = 0; - - testMobx.autorun(() => { - keyList = viewInstance.list.map((item) => item && item.key); - autorunCount++; - }); - - expect(keyList[2]).toBe(3); - - testMobx.runInAction(() => { - viewInstance.sortMethod = 'id'; - }); - - const item0b = viewInstance.list[0]; - const item2b = viewInstance.list[2]; - - expect(item0b && item0b.key).toBe(2); - expect(item2b && item2b.key).toBe(1); - - if (mobx.useRealMobX) { - expect(keyList[2]).toBe(1); - expect(autorunCount).toBe(2); - } - }); - - it('should be able to sort models by prop', () => { - class Foo extends Model { - public static type = 'foo'; - - @Attribute() - public key!: number; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{ key: 2 }, { key: 3 }, { key: 1 }], Foo); - const viewInstance = new View(Foo, collection, 'key', foos); - - expect(viewInstance).toHaveLength(3); - const item0a = viewInstance.list[0]; - const item2a = viewInstance.list[2]; - - expect(item0a && item0a.key).toBe(1); - expect(item2a && item2a.key).toBe(3); - - const foo0 = collection.add({ key: 0 }, Foo); - - expect(viewInstance).toHaveLength(3); - viewInstance.add(foo0); - const item0b = viewInstance.list[0]; - const item2b = viewInstance.list[2]; - - expect(item0b && item0b.key).toBe(0); - expect(item2b && item2b.key).toBe(2); - }); - - it('should be able to remove models', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}, {}], Foo); - const viewInstance = new View(Foo, collection, undefined, foos); - - expect(viewInstance).toHaveLength(3); - viewInstance.remove(foos[2]); - expect(viewInstance).toHaveLength(2); - viewInstance.removeAll(); - expect(viewInstance).toHaveLength(0); - }); - - it('should work with updating the list', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}, {}], Foo); - const viewInstance = new View(Foo, collection, undefined, foos); - - const [foo1, foo2] = collection.add([{}, {}, {}], Foo); - - expect(viewInstance).toHaveLength(3); - - if (mobx.useRealMobX) { - viewInstance.list.push(foo1); - expect(viewInstance).toHaveLength(4); - - viewInstance.list.unshift(foo2); - expect(viewInstance).toHaveLength(5); - - viewInstance.list.splice(2, 2); - expect(viewInstance).toHaveLength(3); - } else { - viewInstance.list = [...viewInstance.list, foo1]; - expect(viewInstance).toHaveLength(4); - - viewInstance.list = [foo2, ...viewInstance.list]; - expect(viewInstance).toHaveLength(5); - - viewInstance.list = [...viewInstance.list.slice(0, 2), ...viewInstance.list.slice(4)]; - expect(viewInstance).toHaveLength(3); - } - }); - - it('should work with sorted list', () => { - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ isIdentifier: true }) - public id!: number; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}, {}], Foo); - const viewInstance = new View(Foo, collection, (item) => item.id, foos); - - const [foo1, foo2] = collection.add([{}, {}, {}], Foo); - - expect(viewInstance).toHaveLength(3); - - expect(() => { - if (mobx.useRealMobX) { - viewInstance.list.push(foo1); - } else { - viewInstance.list = [...viewInstance.list, foo1]; - } - }).toThrowError( - "New models can't be added directly to a sorted view list", - ); - - expect(() => { - if (mobx.useRealMobX) { - viewInstance.list.push(foo2); - } else { - viewInstance.list = [foo2, ...viewInstance.list]; - } - }).toThrowError( - "New models can't be added directly to a sorted view list", - ); - - expect(() => { - if (mobx.useRealMobX) { - viewInstance.list[1] = foo1; - } else { - viewInstance.list = [ - ...viewInstance.list.slice(0, 1), - foo1, - ...viewInstance.list.slice(2), - ]; - } - }).toThrowError("New models can't be added directly to a sorted view list"); - expect(() => { - if (mobx.useRealMobX) { - viewInstance.list[3] = foo1; - } else { - viewInstance.list = [ - ...viewInstance.list.slice(0, 3), - foo1, - ...viewInstance.list.slice(4), - ]; - } - }).toThrowError("New models can't be added directly to a sorted view list"); - - if (mobx.useRealMobX) { - viewInstance.list.splice(1, 2); - expect(viewInstance).toHaveLength(1); - } - }); - - it('should work with unique list', () => { - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ isIdentifier: true }) - public id!: number; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}, {}], Foo); - const viewInstance = new View(Foo, collection, undefined, foos, true); - - const [foo1] = foos; - - if (mobx.useRealMobX) { - viewInstance.list[0] = foo1; - } else { - viewInstance.list = [foo1, ...viewInstance.list.slice(1)]; - } - - expect(() => { - if (mobx.useRealMobX) { - viewInstance.list[1] = foo1; - } else { - viewInstance.list = [viewInstance.list[0], foo1, ...viewInstance.list.slice(2)]; - } - }).toThrowError('The models in this view need to be unique'); - - expect(() => { - if (mobx.useRealMobX) { - viewInstance.list.push(foo1); - } else { - viewInstance.list = [...viewInstance.list, foo1]; - } - }).toThrowError( - 'The models in this view need to be unique', - ); - - expect(() => { - if (mobx.useRealMobX) { - viewInstance.list.splice(0, 0, foo1); - } else { - viewInstance.list = [foo1, ...viewInstance.list]; - } - }).toThrowError( - 'The models in this view need to be unique', - ); - }); - - it('should be able to deserialize the view', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const viewInstance = new View(Foo, collection); - - viewInstance.add(foos); - - const { snapshot } = viewInstance; - - const view2 = new View( - snapshot.modelType, - collection, - undefined, - snapshot.models, - snapshot.unique, - ); - - expect(view2).toHaveLength(2); - expect(view2.value[0]).toBeInstanceOf(Foo); - expect(view2.value[1]).toBeInstanceOf(Foo); - expect(view2.value[0]).toBe(foos[0]); - }); - - describe('Collections', () => { - it('should be possible to add a view', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - - public test!: View; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - - collection.addView('test', Foo, { models: foos }); - - expect(collection.test).toHaveLength(2); - expect(collection.test.value[0]).toBeInstanceOf(Foo); - expect(collection.test.value[1]).toBeInstanceOf(Foo); - expect(collection.test.value[0]).toBe(foos[0]); - }); - - it('should be possible to define views upfront', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - - public static views = { - test: { modelType: Foo }, - }; - - public test!: View; - } - - const collection = new AppCollection(); - - expect(collection.test.modelType).toBe('foo'); - const foos = collection.test.add([{}, {}]); - - expect(collection.test).toHaveLength(2); - expect(collection.test.value[0]).toBeInstanceOf(Foo); - expect(collection.test.value[1]).toBeInstanceOf(Foo); - expect(collection.test.value[0]).toBe(foos[0]); - - const { snapshot } = collection; - - const collection2 = new AppCollection(snapshot); - - expect(collection2.test).toHaveLength(2); - }); - - it('should be possible to define views upfront with a decorator', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - - @ViewAttribute(Foo) - public test!: View; - } - - const collection = new AppCollection(); - - expect(collection.test.modelType).toBe('foo'); - const foos = collection.test.add([{}, {}]); - - expect(collection.test).toHaveLength(2); - expect(collection.test.value[0]).toBeInstanceOf(Foo); - expect(collection.test.value[1]).toBeInstanceOf(Foo); - expect(collection.test.value[0]).toBe(foos[0]); - - const { snapshot } = collection; - - const collection2 = new AppCollection(snapshot); - - expect(collection2.test).toHaveLength(2); - }); - }); - - it('should support changing ids', () => { - class Foo extends Model { - public static type = 'foo'; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const foos = collection.add([{}, {}], Foo); - const viewInstance = new View( - Foo, - collection, - undefined, - foos.map((foo) => foo.meta.id), - ); - - expect(viewInstance).toHaveLength(2); - expect(viewInstance.list[0]).toBeInstanceOf(Foo); - expect(viewInstance.list[1]).toBeInstanceOf(Foo); - expect(viewInstance.list[0]).toBe(foos[0]); - expect(viewInstance.hasItem(foos[1])).toBe(true); - - const foo1 = foos[1]; - - updateModelId(foo1, 123); - expect(viewInstance.list[1]).toBe(foo1); - expect(viewInstance.hasItem(foo1)).toBe(true); - expect(foo1.meta.id).toBe(123); - }); - - it('should support ids before models', () => { - class Foo extends Model { - public static type = 'foo'; - - @Attribute({ isIdentifier: true }) - public id!: number; - } - class AppCollection extends Collection { - public static types = [Foo]; - } - - const collection = new AppCollection(); - const viewInstance = new View(Foo, collection, undefined, [987, 123, 234]); - // const foos = collection.add([{ id: 123 }, { id: 234 }], Foo); - - const lengths: Array = []; - - testMobx.autorun(() => { - lengths.push(viewInstance.length); - }); - - testMobx.runInAction(() => { - if (mobx.useRealMobX) { - // @ts-expect-error - viewInstance.list.push(876); - } else { - // @ts-expect-error - viewInstance.list = [...viewInstance.list, 876]; - } - }); - - // expect(collection).toHaveLength(2); - // expect(viewInstance).toHaveLength(2); - // expect(viewInstance.snapshot.models).toHaveLength(4); - // expect(viewInstance.list[0]).toBeInstanceOf(Foo); - // expect(viewInstance.list[1]).toBeInstanceOf(Foo); - // expect(viewInstance.list[0]).toBe(foos[0]); - // expect(viewInstance.hasItem(foos[1])).toBe(true); - - // const foo987 = collection.add({ id: 987 }, Foo); - // expect(collection).toHaveLength(3); - // expect(viewInstance).toHaveLength(3); - // expect(viewInstance.hasItem(foo987)).toBe(true); - - // // viewInstance.add({ id: 876 }); - // const foo876 = collection.add({ id: 876 }, Foo); - // collection.add({ id: 765 }, Foo); - // expect(collection).toHaveLength(5); - // expect(viewInstance).toHaveLength(4); - // expect(viewInstance.hasItem(foo876)).toBe(true); - }); -}); diff --git a/packages/datx/tsconfig.build.json b/packages/datx/tsconfig.build.json index 109e9fffb..415040d92 100644 --- a/packages/datx/tsconfig.build.json +++ b/packages/datx/tsconfig.build.json @@ -9,17 +9,17 @@ "forceConsistentCasingInFileNames": true, "sourceMap": true, "inlineSources": true, - "lib": ["es2015", "es2016", "es2017", "es2018", "es2019"], + "lib": [], "module": "esnext", "noImplicitAny": false, "noImplicitReturns": true, "noUnusedParameters": true, - "outDir": "./dist", + "outDir": ".", "strict": true, "strictFunctionTypes": false, "target": "es5", "esModuleInterop": true }, - "exclude": ["node_modules", "examples"], + "exclude": ["node_modules", "examples", "**/*.test.ts"], "include": ["src/**/*"] } diff --git a/packages/datx/tsconfig.json b/packages/datx/tsconfig.json index f6002d9ac..9d79bd2b0 100644 --- a/packages/datx/tsconfig.json +++ b/packages/datx/tsconfig.json @@ -1,8 +1,10 @@ { "extends": "./tsconfig.build.json", - "include": ["src/**/*", "test/**/*"], + "include": ["src/**/*", "test/**/*", "example/**/*", "rollup.config.js"], + "exclude": ["node_modules", "examples"], "compilerOptions": { "moduleResolution": "node", - "noUnusedLocals": true + "noUnusedLocals": true, + "allowJs": true } } diff --git a/packages/datx/tsconfig.mobx.json b/packages/datx/tsconfig.mobx.json deleted file mode 100644 index 3d3094688..000000000 --- a/packages/datx/tsconfig.mobx.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.build.json", - "include": ["src/**/*", "test/**/*"], - "compilerOptions": { - "moduleResolution": "node", - "noUnusedLocals": true, - "declaration": false, - "sourceMap": false, - "inlineSources": false, - } -} diff --git a/packages/datx/utils/helpers.d.ts b/packages/datx/utils/helpers.d.ts new file mode 100644 index 000000000..c79d40fb7 --- /dev/null +++ b/packages/datx/utils/helpers.d.ts @@ -0,0 +1,3 @@ +import { ISchemaData } from '../interfaces/ISchemaData'; +import { TResourceProp } from '../interfaces/TResourceProp'; +export declare function mapObjectValues>(obj: T, fn: (key: keyof T, value: typeof obj[typeof key]) => TReturn): TReturn; diff --git a/packages/datx/utils/schema.d.ts b/packages/datx/utils/schema.d.ts new file mode 100644 index 000000000..6c54a7b23 --- /dev/null +++ b/packages/datx/utils/schema.d.ts @@ -0,0 +1,7 @@ +import { IPlainResource, IResource } from '../interfaces/IResource'; +import { IValidationError } from '../interfaces/IValidationError'; +import { IValidationOptions } from '../interfaces/IValidationOptions'; +import { Schema } from '../Schema'; +export declare function parseSchema(schema: TSchema, data: IPlainResource): IResource; +export declare function serializeSchema(schema: TSchema, data: IResource): IPlainResource; +export declare function validateSchema(schema: TSchema, data: IResource, options?: IValidationOptions, path?: string): [boolean, Array]; diff --git a/website/i18n/en.json b/website/i18n/en.json index 8182f14b8..e8e2f0fe8 100644 --- a/website/i18n/en.json +++ b/website/i18n/en.json @@ -5,6 +5,12 @@ "previous": "Previous", "tagline": "A mobx data store", "docs": { + "api-reference/attribute": { + "title": "Attribute" + }, + "api-reference/bucket": { + "title": "Bucket" + }, "api-reference/collection": { "title": "Collection" }, @@ -17,9 +23,6 @@ "api-reference/model": { "title": "Model" }, - "api-reference/prop": { - "title": "Prop" - }, "api-reference/pure-model": { "title": "Pure Model" }, @@ -32,6 +35,9 @@ "examples/adding-models": { "title": "Adding models" }, + "examples/angular-setup": { + "title": "Angular JSON:API setup" + }, "examples/basic-setup": { "title": "Basic setup" }, @@ -59,6 +65,9 @@ "getting-started/using-the-collection": { "title": "Using the collection" }, + "jsonapi-angular/mixin": { + "title": "Angular JSON:API mixin" + }, "jsonapi/jsonapi-basic-configuration": { "title": "Basic configuration" }, @@ -69,7 +78,7 @@ "title": "Config" }, "jsonapi/jsonapi-getting-started": { - "title": "Getting started with JSON Api" + "title": "Getting started with JSON API" }, "jsonapi/jsonapi-model": { "title": "Model" @@ -95,17 +104,17 @@ "jsonapi/jsonapi-view": { "title": "View" }, - "migration-guide/compat-collection": { - "title": "CompatCollection" + "migration-guide/breaking-changes": { + "title": "Breaking changes since v1" }, - "migration-guide/compat-model": { - "title": "CompatModel" + "migration-guide/deprecations": { + "title": "Deprecations in v2" }, - "migration-guide/mobx-collection-store": { - "title": "Mobx collection store" + "migration-guide/from-v1": { + "title": "Migration from v1" }, - "migration-guide/mobx-jsonapi-store": { - "title": "Mobx jsonapi store" + "migration-guide/whats-new": { + "title": "What's new" }, "mixins/building-your-own-mixin": { "title": "Build your own mixin" @@ -113,6 +122,9 @@ "mixins/jsonapi-mixin": { "title": "JSONAPI Mixin" }, + "mixins/network-mixin": { + "title": "Network Mixin" + }, "mixins/what-are-mixins": { "title": "What are mixins" }, @@ -125,6 +137,30 @@ "mixins/with-patches": { "title": "withPatches" }, + "network/base-request": { + "title": "BaseRequest" + }, + "network/caching": { + "title": "Caching" + }, + "network/fetching": { + "title": "Fetching" + }, + "network/getting-started": { + "title": "Getting started with DatX Network" + }, + "network/interceptors": { + "title": "Interceptors" + }, + "network/operators": { + "title": "Operators" + }, + "network/response": { + "title": "Response" + }, + "network/typescript-interfaces": { + "title": "TypeScript interfaces" + }, "troubleshooting/known-issues": { "title": "Known issues" }, @@ -244,6 +280,153 @@ }, "version-1.0.0/troubleshooting/version-1.0.0-known-issues": { "title": "Known issues" + }, + "version-2.0.0/api-reference/version-2.0.0-attribute": { + "title": "Attribute" + }, + "version-2.0.0/api-reference/version-2.0.0-bucket": { + "title": "Bucket" + }, + "version-2.0.0/api-reference/version-2.0.0-collection": { + "title": "Collection" + }, + "version-2.0.0/api-reference/version-2.0.0-lib-utils": { + "title": "Lib utils" + }, + "version-2.0.0/api-reference/version-2.0.0-model": { + "title": "Model" + }, + "version-2.0.0/api-reference/version-2.0.0-typescript-interfaces": { + "title": "Typescript interfaces" + }, + "version-2.0.0/examples/version-2.0.0-adding-models": { + "title": "Adding models" + }, + "version-2.0.0/examples/version-2.0.0-angular-setup": { + "title": "Angular JSON:API setup" + }, + "version-2.0.0/examples/version-2.0.0-basic-setup": { + "title": "Basic setup" + }, + "version-2.0.0/examples/version-2.0.0-react-setup": { + "title": "React setup" + }, + "version-2.0.0/getting-started/version-2.0.0-configuring-the-collection": { + "title": "Configuring the collection" + }, + "version-2.0.0/getting-started/version-2.0.0-defining-models": { + "title": "Defining models" + }, + "version-2.0.0/getting-started/version-2.0.0-installation": { + "title": "Installation" + }, + "version-2.0.0/getting-started/version-2.0.0-persisting-data-locally": { + "title": "Persisting data locally" + }, + "version-2.0.0/getting-started/version-2.0.0-references": { + "title": "References" + }, + "version-2.0.0/getting-started/version-2.0.0-using-the-collection": { + "title": "Using the collection" + }, + "version-2.0.0/jsonapi-angular/version-2.0.0-example-repo": { + "title": "Example repo" + }, + "version-2.0.0/jsonapi-angular/version-2.0.0-mixin": { + "title": "Mixin" + }, + "version-2.0.0/jsonapi/version-2.0.0-jsonapi-basic-configuration": { + "title": "Basic configuration" + }, + "version-2.0.0/jsonapi/version-2.0.0-jsonapi-collection": { + "title": "Collection" + }, + "version-2.0.0/jsonapi/version-2.0.0-jsonapi-config": { + "title": "Config" + }, + "version-2.0.0/jsonapi/version-2.0.0-jsonapi-getting-started": { + "title": "Getting started with JSON API" + }, + "version-2.0.0/jsonapi/version-2.0.0-jsonapi-model": { + "title": "Model" + }, + "version-2.0.0/jsonapi/version-2.0.0-jsonapi-network-configuration": { + "title": "Network configuration" + }, + "version-2.0.0/jsonapi/version-2.0.0-jsonapi-network-usage": { + "title": "Network usage" + }, + "version-2.0.0/jsonapi/version-2.0.0-jsonapi-response": { + "title": "Response" + }, + "version-2.0.0/jsonapi/version-2.0.0-jsonapi-spec-compliance": { + "title": "Spec compliance" + }, + "version-2.0.0/jsonapi/version-2.0.0-jsonapi-typescript-interfaces": { + "title": "Typescript interfaces" + }, + "version-2.0.0/jsonapi/version-2.0.0-jsonapi-utils": { + "title": "Utils" + }, + "version-2.0.0/jsonapi/version-2.0.0-jsonapi-view": { + "title": "View" + }, + "version-2.0.0/migration-guide/version-2.0.0-breaking-changes": { + "title": "Breaking changes since v1" + }, + "version-2.0.0/migration-guide/version-2.0.0-deprecations": { + "title": "Deprecations in v2" + }, + "version-2.0.0/migration-guide/version-2.0.0-from-v1": { + "title": "Migration from v1" + }, + "version-2.0.0/migration-guide/version-2.0.0-whats-new": { + "title": "What's new" + }, + "version-2.0.0/mixins/version-2.0.0-building-your-own-mixin": { + "title": "Build your own mixin" + }, + "version-2.0.0/mixins/version-2.0.0-jsonapi-angular-mixin": { + "title": "JSONAPI Angular Mixin" + }, + "version-2.0.0/mixins/version-2.0.0-jsonapi-mixin": { + "title": "JSONAPI Mixin" + }, + "version-2.0.0/mixins/version-2.0.0-network-mixin": { + "title": "Network Mixin" + }, + "version-2.0.0/mixins/version-2.0.0-with-actions": { + "title": "withActions" + }, + "version-2.0.0/mixins/version-2.0.0-with-meta": { + "title": "withMeta" + }, + "version-2.0.0/network/version-2.0.0-base-request": { + "title": "BaseRequest" + }, + "version-2.0.0/network/version-2.0.0-caching": { + "title": "Caching" + }, + "version-2.0.0/network/version-2.0.0-fetching": { + "title": "Fetching" + }, + "version-2.0.0/network/version-2.0.0-getting-started": { + "title": "Getting started with DatX Network" + }, + "version-2.0.0/network/version-2.0.0-interceptors": { + "title": "Interceptors" + }, + "version-2.0.0/network/version-2.0.0-operators": { + "title": "Operators" + }, + "version-2.0.0/network/version-2.0.0-response": { + "title": "Response" + }, + "version-2.0.0/network/version-2.0.0-typescript-interfaces": { + "title": "TypeScript interfaces" + }, + "version-2.0.0/troubleshooting/version-2.0.0-known-issues": { + "title": "Known issues" } }, "links": { @@ -255,7 +438,9 @@ "Getting started": "Getting started", "Mixins": "Mixins", "API Reference": "API Reference", + "Network": "Network", "JSON API": "JSON API", + "JSON API Angular": "JSON API Angular", "Migration guide": "Migration guide", "Troubleshooting": "Troubleshooting", "Setup": "Setup", diff --git a/website/package-lock.json b/website/package-lock.json index 26fccee97..2a5aa0406 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -3,237 +3,243 @@ "lockfileVersion": 1, "dependencies": { "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.12.13" } }, "@babel/compat-data": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", - "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", "dev": true }, "@babel/core": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", - "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.10", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.10", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", + "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", - "semver": "^5.4.1", + "semver": "^6.3.0", "source-map": "^0.5.0" } }, "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", "dev": true, "requires": { - "@babel/types": "^7.12.11", + "@babel/types": "^7.14.1", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", - "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.12.13" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" } }, "@babel/helper-compilation-targets": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", - "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", "dev": true, "requires": { - "@babel/compat-data": "^7.12.5", - "@babel/helper-validator-option": "^7.12.1", + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", "browserslist": "^4.14.5", - "semver": "^5.5.0" + "semver": "^6.3.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.1.tgz", + "integrity": "sha512-r8rsUahG4ywm0QpGcCrLaUSOuNAISR3IZCg4Fx05Ozq31aCUrQsTLH6KPxy0N5ULoQ4Sn9qjNdGNtbPWAC6hYg==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", - "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", + "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.12.13", "regexpu-core": "^4.7.1" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "@babel/helper-define-polyfill-provider": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", + "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" } }, "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.13.0" } }, "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" } }, "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.12.13" } }, "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", "dev": true, "requires": { - "@babel/types": "^7.12.7" + "@babel/types": "^7.13.12" } }, "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, "requires": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.13.12" } }, "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.12.13" } }, "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" } }, "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" } }, "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.13.12" } }, "@babel/helper-skip-transparent-expression-wrappers": { @@ -246,56 +252,56 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", "dev": true, "requires": { - "@babel/types": "^7.12.11" + "@babel/types": "^7.12.13" } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz", - "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==", + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" } }, "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -320,142 +326,177 @@ } }, "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", "dev": true }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", + "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.13.12" + } + }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz", - "integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", + "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.13.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", + "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", + "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", + "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.12.13", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", + "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", + "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", + "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", - "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", + "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.12.13", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.13.0" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", - "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", + "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-async-generators": { @@ -468,12 +509,21 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-dynamic-import": { @@ -504,12 +554,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", + "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -566,274 +616,282 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz", - "integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.1.tgz", + "integrity": "sha512-2mQXd0zBrwfp0O1moWIhPpEeTKDvxyHcnma3JATVP1l+CctWBuot6OJG8LQ4DnBj4ZZPSmlb/fm4mu47EOAnVA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", + "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", + "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", + "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.13.12", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" + "@babel/helper-create-regexp-features-plugin": "^7.12.13" } }, "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" } }, "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", + "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", - "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz", + "integrity": "sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.12.tgz", - "integrity": "sha512-JDWGuzGNWscYcq8oJVCtSE61a5+XAOos+V0HrxnDieUus4UMnBEosDnY1VJqU5iZ4pA04QY7l0+JvHL1hZEfsw==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", + "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.12.10", - "@babel/helper-module-imports": "^7.12.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.12.1", - "@babel/types": "^7.12.12" + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/types": "^7.13.12" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.12.tgz", - "integrity": "sha512-i1AxnKxHeMxUaWVXQOSIco4tvVvvCxMSfeBMnMM06mpaJt3g+MpxYQQrDfojUQldP1xxraPSJYSMEljoWM/dCg==", + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz", + "integrity": "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.12.12" + "@babel/plugin-transform-react-jsx": "^7.12.17" } }, "@babel/plugin-transform-react-pure-annotations": { @@ -847,86 +905,86 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", - "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", - "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/polyfill": { @@ -940,77 +998,84 @@ } }, "@babel/preset-env": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz", - "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.12.7", - "@babel/helper-compilation-targets": "^7.12.5", - "@babel/helper-module-imports": "^7.12.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.11", - "@babel/plugin-proposal-async-generator-functions": "^7.12.1", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.1", - "@babel/plugin-proposal-json-strings": "^7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.7", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.1.tgz", + "integrity": "sha512-0M4yL1l7V4l+j/UHvxcdvNfLB9pPtIooHTbEhgD/6UGyh8Hy3Bm1Mj0buzjDXATCSz3JFibVdnoJZCrlUCanrQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-async-generator-functions": "^7.13.15", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-class-static-block": "^7.13.11", + "@babel/plugin-proposal-dynamic-import": "^7.13.8", + "@babel/plugin-proposal-export-namespace-from": "^7.12.13", + "@babel/plugin-proposal-json-strings": "^7.13.8", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-numeric-separator": "^7.12.13", + "@babel/plugin-proposal-object-rest-spread": "^7.13.8", + "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.12.1", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-async-to-generator": "^7.12.1", - "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.11", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-computed-properties": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-dotall-regex": "^7.12.1", - "@babel/plugin-transform-duplicate-keys": "^7.12.1", - "@babel/plugin-transform-exponentiation-operator": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-function-name": "^7.12.1", - "@babel/plugin-transform-literals": "^7.12.1", - "@babel/plugin-transform-member-expression-literals": "^7.12.1", - "@babel/plugin-transform-modules-amd": "^7.12.1", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-modules-systemjs": "^7.12.1", - "@babel/plugin-transform-modules-umd": "^7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", - "@babel/plugin-transform-new-target": "^7.12.1", - "@babel/plugin-transform-object-super": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-property-literals": "^7.12.1", - "@babel/plugin-transform-regenerator": "^7.12.1", - "@babel/plugin-transform-reserved-words": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.7", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.10", - "@babel/plugin-transform-unicode-escapes": "^7.12.1", - "@babel/plugin-transform-unicode-regex": "^7.12.1", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.11", - "core-js-compat": "^3.8.0", - "semver": "^5.5.0" + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.14.1", + "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.14.0", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.14.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.1", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" } }, "@babel/preset-modules": { @@ -1027,76 +1092,75 @@ } }, "@babel/preset-react": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.10.tgz", - "integrity": "sha512-vtQNjaHRl4DUpp+t+g4wvTHsLQuye+n0H/wsXIZRn69oz/fvNC7gQ4IK73zGJBaxvHoxElDvnYCthMcT7uzFoQ==", + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz", + "integrity": "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-react-display-name": "^7.12.1", - "@babel/plugin-transform-react-jsx": "^7.12.10", - "@babel/plugin-transform-react-jsx-development": "^7.12.7", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-transform-react-display-name": "^7.12.13", + "@babel/plugin-transform-react-jsx": "^7.13.12", + "@babel/plugin-transform-react-jsx-development": "^7.12.17", "@babel/plugin-transform-react-pure-annotations": "^7.12.1" } }, "@babel/register": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.12.10.tgz", - "integrity": "sha512-EvX/BvMMJRAA3jZgILWgbsrHwBQvllC5T8B29McyME8DvkdOxk4ujESfrMvME8IHSDvWXrmMXxPvA/lx2gqPLQ==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", + "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", "dev": true, "requires": { + "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", - "lodash": "^4.17.19", "make-dir": "^2.1.0", "pirates": "^4.0.0", "source-map-support": "^0.5.16" } }, "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" } }, "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", "dev": true, "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" } }, @@ -1110,12 +1174,40 @@ "glob-to-regexp": "^0.3.0" } }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + } + } + }, "@nodelib/fs.stat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, "@sindresorhus/is": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", @@ -1123,18 +1215,18 @@ "dev": true }, "@types/cheerio": { - "version": "0.22.23", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.23.tgz", - "integrity": "sha512-QfHLujVMlGqcS/ePSf3Oe5hK3H8wi/yN2JYuxSB1U10VvW1fO3K8C+mURQesFYS1Hn7lspOsTT75SKq/XtydQg==", + "version": "0.22.28", + "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.28.tgz", + "integrity": "sha512-ehUMGSW5IeDxJjbru4awKYMlKGmo1wSSGUVqXtYwlgmUM8X1a0PZttEIm6yEY7vHsY/hh6iPnklF213G0UColw==", "dev": true, "requires": { "@types/node": "*" } }, "@types/node": { - "version": "14.14.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz", - "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==", + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.2.tgz", + "integrity": "sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA==", "dev": true }, "@types/q": { @@ -1159,6 +1251,23 @@ "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", "dev": true }, + "airbnb-prop-types": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz", + "integrity": "sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==", + "dev": true, + "requires": { + "array.prototype.find": "^2.1.1", + "function.prototype.name": "^1.1.2", + "is-regex": "^1.1.0", + "object-is": "^1.1.2", + "object.assign": "^4.1.0", + "object.entries": "^1.1.2", + "prop-types": "^15.7.2", + "prop-types-exact": "^1.2.0", + "react-is": "^16.13.1" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1177,12 +1286,6 @@ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "dev": true }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, "ansi-red": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", @@ -1213,27 +1316,6 @@ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", "dev": true }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, "arch": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", @@ -1284,6 +1366,12 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "dev": true + }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -1317,6 +1405,27 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "array.prototype.find": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.1.tgz", + "integrity": "sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.4" + } + }, + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -1345,26 +1454,26 @@ "dev": true }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "requires": { "lodash": "^4.17.14" } }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -1407,56 +1516,6 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", @@ -1466,6 +1525,36 @@ "object.assign": "^4.1.0" } }, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", + "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.0", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", + "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.0", + "core-js-compat": "^3.9.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", + "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.0" + } + }, "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", @@ -1473,9 +1562,9 @@ "dev": true }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "base": { @@ -1630,6 +1719,12 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -1665,6 +1760,14 @@ "bin-version": "^3.0.0", "semver": "^5.6.0", "semver-truncate": "^1.1.2" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "bin-wrapper": { @@ -1806,22 +1909,6 @@ } } }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, "bl": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", @@ -1955,16 +2042,16 @@ } }, "browserslist": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz", - "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001173", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.634", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^1.1.69" + "node-releases": "^1.1.71" } }, "buffer": { @@ -2152,9 +2239,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001179", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001179.tgz", - "integrity": "sha512-blMmO0QQujuUWZKyVrD1msR4WNDAqb/UPO1Sw2WWsQ7deoM5bJiicKnWJ1Y0NS/aGINSnKPIWBMw5luX+NDUCA==", + "version": "1.0.30001228", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", + "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", "dev": true }, "caseless": { @@ -2226,102 +2313,111 @@ } } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "dev": true, - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.9.tgz", + "integrity": "sha512-QF6XVdrLONO6DXRF5iaolY+odmhj2CLj+xzNod7INPWMi/x9X4SOylH0S/vaPpX+AUU6t04s34SQNh7DbkuCng==", + "dev": true, + "requires": { + "cheerio-select": "^1.4.0", + "dom-serializer": "^1.3.1", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", + "integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + } + } + }, + "cheerio-select": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz", + "integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==", + "dev": true, + "requires": { + "css-select": "^4.1.2", + "css-what": "^5.0.0", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0" }, "dependencies": { "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz", + "integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" } }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.0.tgz", + "integrity": "sha512-qxyKHQvgKwzwDWC/rGbT821eJalfupxYW2qbSJSAtdSTimsr/MlaGONoNLllaUPZWf8QnbcKM/kPVYUQuEKAFA==", "dev": true }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", + "integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", "dev": true, "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "entities": "^2.0.0" } }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true + "nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } } } }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -2346,36 +2442,20 @@ } }, "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==", "dev": true }, - "clipboard": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", - "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "optional": true, "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, "clone-response": { @@ -2459,9 +2539,9 @@ "dev": true }, "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", "dev": true, "requires": { "color-name": "^1.0.0", @@ -2469,9 +2549,9 @@ } }, "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, "combined-stream": { @@ -2607,12 +2687,12 @@ "dev": true }, "core-js-compat": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.3.tgz", - "integrity": "sha512-1sCb0wBXnBIL16pfFG1Gkvei6UzvKyTNYpiC41yrdjEv0UoJoq9E/abTMzyYJ6JpTkAj15dLjbqifIzEBDVvog==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", + "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", "dev": true, "requires": { - "browserslist": "^4.16.1", + "browserslist": "^4.16.6", "semver": "7.0.0" }, "dependencies": { @@ -2736,21 +2816,21 @@ "dev": true }, "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", "dev": true, "requires": { "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", + "cssnano-preset-default": "^4.0.8", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" } }, "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", "dev": true, "requires": { "css-declaration-sorter": "^4.0.1", @@ -2781,7 +2861,7 @@ "postcss-ordered-values": "^4.1.2", "postcss-reduce-initial": "^4.0.3", "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", + "postcss-svgo": "^4.0.3", "postcss-unique-selectors": "^4.0.1" } }, @@ -2822,9 +2902,9 @@ }, "dependencies": { "css-tree": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz", - "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "requires": { "mdn-data": "2.0.14", @@ -3091,13 +3171,6 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "dev": true, - "optional": true - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -3153,21 +3226,27 @@ "path-type": "^3.0.0" } }, + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", + "dev": true + }, "docusaurus": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/docusaurus/-/docusaurus-1.14.6.tgz", - "integrity": "sha512-Hpo6xqYIHwazwuhXW25AKYv/os+dWoJ87qql/m1j1xp83h/BnfYV2l8PA8zLggF1wGUbJQbTx7GWo6QvD8z+4Q==", - "dev": true, - "requires": { - "@babel/core": "^7.9.0", - "@babel/plugin-proposal-class-properties": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.9.0", - "@babel/polyfill": "^7.8.7", - "@babel/preset-env": "^7.9.0", - "@babel/preset-react": "^7.9.4", - "@babel/register": "^7.9.0", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/docusaurus/-/docusaurus-1.14.7.tgz", + "integrity": "sha512-UWqar4ZX0lEcpLc5Tg+MwZ2jhF/1n1toCQRSeoxDON/D+E9ToLr+vTRFVMP/Tk84NXSVjZFRlrjWwM2pXzvLsQ==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/polyfill": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@babel/register": "^7.12.1", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.6", "autoprefixer": "^9.7.5", "babylon": "^6.18.0", "chalk": "^3.0.0", @@ -3175,12 +3254,14 @@ "commander": "^4.0.1", "crowdin-cli": "^0.3.0", "cssnano": "^4.1.10", + "enzyme": "^3.10.0", + "enzyme-adapter-react-16": "^1.15.1", "escape-string-regexp": "^2.0.0", "express": "^4.17.1", - "feed": "^4.0.0", - "fs-extra": "^8.1.0", + "feed": "^4.2.1", + "fs-extra": "^9.0.1", "gaze": "^1.1.3", - "github-slugger": "^1.2.1", + "github-slugger": "^1.3.0", "glob": "^7.1.6", "highlight.js": "^9.16.2", "imagemin": "^6.0.0", @@ -3188,14 +3269,14 @@ "imagemin-jpegtran": "^6.0.0", "imagemin-optipng": "^6.0.0", "imagemin-svgo": "^7.0.0", - "lodash": "^4.17.15", + "lodash": "^4.17.20", "markdown-toc": "^1.2.0", "mkdirp": "^0.5.1", - "portfinder": "^1.0.25", + "portfinder": "^1.0.28", "postcss": "^7.0.23", - "prismjs": "^1.17.1", + "prismjs": "^1.22.0", "react": "^16.8.4", - "react-dev-utils": "^9.1.0", + "react-dev-utils": "^11.0.1", "react-dom": "^16.8.4", "remarkable": "^2.0.0", "request": "^2.88.0", @@ -3218,9 +3299,9 @@ }, "dependencies": { "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true } } @@ -3232,12 +3313,20 @@ "dev": true }, "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "requires": { - "domelementtype": "1" + "domelementtype": "^2.2.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + } } }, "domutils": { @@ -3330,9 +3419,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.644", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.644.tgz", - "integrity": "sha512-N7FLvjDPADxad+OXXBuYfcvDvCBG0aW8ZZGr7G91sZMviYbnQJFxdSvUus4SJ0K7Q8dzMxE+Wx1d/CrJIIJ0sw==", + "version": "1.3.727", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz", + "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg==", "dev": true }, "emoji-regex": { @@ -3342,9 +3431,9 @@ "dev": true }, "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, "encodeurl": { @@ -3363,11 +3452,99 @@ } }, "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, + "enzyme": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", + "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", + "dev": true, + "requires": { + "array.prototype.flat": "^1.2.3", + "cheerio": "^1.0.0-rc.3", + "enzyme-shallow-equal": "^1.0.1", + "function.prototype.name": "^1.1.2", + "has": "^1.0.3", + "html-element-map": "^1.2.0", + "is-boolean-object": "^1.0.1", + "is-callable": "^1.1.5", + "is-number-object": "^1.0.4", + "is-regex": "^1.0.5", + "is-string": "^1.0.5", + "is-subset": "^0.1.1", + "lodash.escape": "^4.0.1", + "lodash.isequal": "^4.5.0", + "object-inspect": "^1.7.0", + "object-is": "^1.0.2", + "object.assign": "^4.1.0", + "object.entries": "^1.1.1", + "object.values": "^1.1.1", + "raf": "^3.4.1", + "rst-selector-parser": "^2.2.3", + "string.prototype.trim": "^1.2.1" + } + }, + "enzyme-adapter-react-16": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.6.tgz", + "integrity": "sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g==", + "dev": true, + "requires": { + "enzyme-adapter-utils": "^1.14.0", + "enzyme-shallow-equal": "^1.0.4", + "has": "^1.0.3", + "object.assign": "^4.1.2", + "object.values": "^1.1.2", + "prop-types": "^15.7.2", + "react-is": "^16.13.1", + "react-test-renderer": "^16.0.0-0", + "semver": "^5.7.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "enzyme-adapter-utils": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.0.tgz", + "integrity": "sha512-F/z/7SeLt+reKFcb7597IThpDp0bmzcH1E9Oabqv+o01cID2/YInlqHbFl7HzWBl4h3OdZYedtwNDOmSKkk0bg==", + "dev": true, + "requires": { + "airbnb-prop-types": "^2.16.0", + "function.prototype.name": "^1.1.3", + "has": "^1.0.3", + "object.assign": "^4.1.2", + "object.fromentries": "^2.0.3", + "prop-types": "^15.7.2", + "semver": "^5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "enzyme-shallow-equal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz", + "integrity": "sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==", + "dev": true, + "requires": { + "has": "^1.0.3", + "object-is": "^1.1.2" + } + }, "error": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", @@ -3387,25 +3564,27 @@ } }, "es-abstract": { - "version": "1.18.0-next.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", - "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", "object-inspect": "^1.9.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.3", - "string.prototype.trimstart": "^1.0.3" + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" } }, "es-to-primitive": { @@ -3455,15 +3634,6 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, "exec-buffer": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", @@ -3762,17 +3932,6 @@ } } }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -3870,10 +4029,25 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "fast-xml-parser": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz", + "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==", + "dev": true + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -3921,13 +4095,6 @@ "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", "dev": true }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -3946,9 +4113,9 @@ } }, "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", + "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", "dev": true }, "fill-range": { @@ -4048,14 +4215,13 @@ "dev": true }, "fork-ts-checker-webpack-plugin": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz", - "integrity": "sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", "dev": true, "requires": { - "babel-code-frame": "^6.22.0", + "@babel/code-frame": "^7.5.5", "chalk": "^2.4.1", - "chokidar": "^2.0.4", "micromatch": "^3.1.10", "minimatch": "^3.0.4", "semver": "^5.6.0", @@ -4079,6 +4245,12 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -4131,14 +4303,15 @@ "dev": true }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, "fs.realpath": { @@ -4147,23 +4320,30 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "function.prototype.name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.4.tgz", + "integrity": "sha512-iqy1pIotY/RmhdFZygSSlW0wko2yxkSCKqsuv4pr8QESohpYyG/Z7B/XXvPRKTJS//960rgguE5mSRUsDdaJrQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", + "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", + "dev": true + }, "gaze": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", @@ -4180,9 +4360,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -4281,6 +4461,12 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -4317,9 +4503,9 @@ } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -4428,16 +4614,6 @@ "minimatch": "~3.0.2" } }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "dev": true, - "optional": true, - "requires": { - "delegate": "^3.1.2" - } - }, "got": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", @@ -4461,9 +4637,9 @@ } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, "gray-matter": { @@ -4545,6 +4721,12 @@ "ansi-regex": "^2.0.0" } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -4558,9 +4740,9 @@ "dev": true }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "has-to-string-tag-x": { @@ -4617,9 +4799,9 @@ "dev": true }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "hsl-regex": { @@ -4634,41 +4816,54 @@ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", "dev": true }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true + "html-element-map": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.0.tgz", + "integrity": "sha512-AqCt/m9YaiMwaaAyOPdq4Ga0cM+jdDWWGueUMkdROZcTeClaGpN0AQeyGchZhTegQoABmc6+IqH7oCR/8vhQYg==", + "dev": true, + "requires": { + "array-filter": "^1.0.0", + "call-bind": "^1.0.2" + } }, "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" }, "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dom-serializer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", + "integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "domutils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } } } @@ -4812,23 +5007,12 @@ "requires": { "is-svg": "^4.2.1", "svgo": "^1.3.2" - }, - "dependencies": { - "is-svg": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.2.1.tgz", - "integrity": "sha512-PHx3ANecKsKNl5y5+Jvt53Y4J7MfMpbNZkv384QNiswMKAWIbvcqbPz+sYbFKJI8Xv3be01GSFniPmoaP+Ai5A==", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.2" - } - } } }, "immer": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", - "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", + "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==", "dev": true }, "import-fresh": { @@ -4884,70 +5068,6 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "inquirer": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", - "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, "interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", @@ -5008,13 +5128,19 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true + }, + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "call-bind": "^1.0.2" } }, "is-buffer": { @@ -5024,9 +5150,9 @@ "dev": true }, "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "dev": true }, "is-color-stop": { @@ -5044,9 +5170,9 @@ } }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "requires": { "has": "^1.0.3" @@ -5073,9 +5199,9 @@ } }, "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", "dev": true }, "is-descriptor": { @@ -5103,6 +5229,12 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -5121,12 +5253,6 @@ "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "is-gif": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-3.0.0.tgz", @@ -5183,6 +5309,12 @@ } } }, + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true + }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -5217,12 +5349,13 @@ "dev": true }, "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" } }, "is-resolvable": { @@ -5249,22 +5382,34 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.3.1.tgz", + "integrity": "sha512-h2CGs+yPUyvkgTJQS9cJzo9lYK06WgRiXUqBBHtglSzVKAuH4/oWsqk7LGfbSa1hGk9QcZ0SyQtVggvBA8LZXA==", "dev": true, "requires": { - "html-comment-regex": "^1.1.0" + "fast-xml-parser": "^3.19.0" } }, "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" } }, "is-typedarray": { @@ -5292,15 +5437,18 @@ "dev": true }, "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } }, "is2": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.6.tgz", - "integrity": "sha512-+Z62OHOjA6k2sUDOKXoZI3EXv7Fb1K52jpTBLbkfx62bcUeSsrTBLhEquCRDKTx0XE5XbHcG/S2vrtE3lnEDsQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.7.tgz", + "integrity": "sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA==", "dev": true, "requires": { "deep-is": "^0.1.3", @@ -5410,28 +5558,23 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { "minimist": "^1.2.5" } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "jsprim": { @@ -5461,6 +5604,12 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, "lazy-cache": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", @@ -5548,25 +5697,14 @@ } }, "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dev": true, "requires": { "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } }, "locate-path": { @@ -5580,9 +5718,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash._reinterpolate": { @@ -5609,12 +5747,24 @@ "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=", "dev": true }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", "dev": true }, + "lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", + "dev": true + }, "lodash.filter": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", @@ -5627,12 +5777,24 @@ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, "lodash.foreach": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", "dev": true }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, "lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", @@ -5783,6 +5945,14 @@ "requires": { "pify": "^4.0.1", "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "map-cache": { @@ -5932,26 +6102,20 @@ "dev": true }, "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", "dev": true }, "mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "dev": true, "requires": { - "mime-db": "1.45.0" + "mime-db": "1.47.0" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -5968,9 +6132,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mixin-deep": { @@ -6003,25 +6167,18 @@ "minimist": "^1.2.5" } }, + "moo": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", + "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "dev": true, - "optional": true - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -6041,6 +6198,26 @@ "to-regex": "^3.0.1" } }, + "nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -6060,9 +6237,9 @@ "dev": true }, "node-releases": { - "version": "1.1.70", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", - "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==", + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", "dev": true }, "normalize-package-data": { @@ -6075,14 +6252,16 @@ "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", @@ -6189,11 +6368,21 @@ } }, "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "dev": true }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -6221,15 +6410,39 @@ "object-keys": "^1.1.1" } }, - "object.getownpropertydescriptors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", - "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", + "object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" } }, "object.pick": { @@ -6242,14 +6455,14 @@ } }, "object.values": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", - "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", + "es-abstract": "^1.18.0-next.2", "has": "^1.0.3" } }, @@ -6271,22 +6484,14 @@ "wrappy": "1" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, "open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "requires": { - "is-wsl": "^1.1.0" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" } }, "optipng-bin": { @@ -6300,15 +6505,6 @@ "logalot": "^2.0.0" } }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, "os-filter-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", @@ -6318,12 +6514,6 @@ "arch": "^2.1.0" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, "p-cancelable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", @@ -6415,6 +6605,21 @@ "json-parse-better-errors": "^1.0.1" } }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -6451,9 +6656,9 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-to-regexp": { @@ -6491,6 +6696,12 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -6531,57 +6742,12 @@ } }, "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "dev": true, "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - } + "find-up": "^3.0.0" } }, "portfinder": { @@ -6613,9 +6779,9 @@ "dev": true }, "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -7101,24 +7267,21 @@ } }, "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz", + "integrity": "sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==", "dev": true, "requires": { "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", "util-deprecate": "^1.0.2" } }, "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", "dev": true, "requires": { - "is-svg": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" @@ -7156,13 +7319,10 @@ "dev": true }, "prismjs": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", - "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", - "dev": true, - "requires": { - "clipboard": "^2.0.0" - } + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", + "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", + "dev": true }, "process-nextick-args": { "version": "2.0.1", @@ -7170,6 +7330,16 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "prompts": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -7181,6 +7351,17 @@ "react-is": "^16.8.1" } }, + "prop-types-exact": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", + "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", + "dev": true, + "requires": { + "has": "^1.0.3", + "object.assign": "^4.1.0", + "reflect.ownkeys": "^0.2.0" + } + }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -7248,12 +7429,37 @@ "strict-uri-encode": "^1.0.0" } }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dev": true, + "requires": { + "performance-now": "^2.1.0" + } + }, + "railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", "dev": true }, + "randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dev": true, + "requires": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + } + }, "randomatic": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", @@ -7303,62 +7509,83 @@ } }, "react-dev-utils": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.1.0.tgz", - "integrity": "sha512-X2KYF/lIGyGwP/F/oXgGDF24nxDA2KC4b7AFto+eqzc/t838gpSGiaU8trTqHXOohuLxxc5qi1eDzsl9ucPDpg==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", + "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", "dev": true, "requires": { - "@babel/code-frame": "7.5.5", + "@babel/code-frame": "7.10.4", "address": "1.1.2", - "browserslist": "4.7.0", + "browserslist": "4.14.2", "chalk": "2.4.2", - "cross-spawn": "6.0.5", + "cross-spawn": "7.0.3", "detect-port-alt": "1.1.6", - "escape-string-regexp": "1.0.5", - "filesize": "3.6.1", - "find-up": "3.0.0", - "fork-ts-checker-webpack-plugin": "1.5.0", + "escape-string-regexp": "2.0.0", + "filesize": "6.1.0", + "find-up": "4.1.0", + "fork-ts-checker-webpack-plugin": "4.1.6", "global-modules": "2.0.0", - "globby": "8.0.2", + "globby": "11.0.1", "gzip-size": "5.1.1", - "immer": "1.10.0", - "inquirer": "6.5.0", + "immer": "8.0.1", "is-root": "2.1.0", - "loader-utils": "1.2.3", - "open": "^6.3.0", - "pkg-up": "2.0.0", - "react-error-overlay": "^6.0.3", + "loader-utils": "2.0.0", + "open": "^7.0.2", + "pkg-up": "3.1.0", + "prompts": "2.4.0", + "react-error-overlay": "^6.0.9", "recursive-readdir": "2.2.2", "shell-quote": "1.7.2", - "sockjs-client": "1.4.0", - "strip-ansi": "5.2.0", + "strip-ansi": "6.0.0", "text-table": "0.2.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.10.4" } }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "browserslist": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", - "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", + "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000989", - "electron-to-chromium": "^1.3.247", - "node-releases": "^1.1.29" + "caniuse-lite": "^1.0.30001125", + "electron-to-chromium": "^1.3.564", + "escalade": "^3.0.2", + "node-releases": "^1.1.61" } }, "chalk": { @@ -7367,67 +7594,158 @@ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "p-limit": "^2.2.0" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" } }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "isexe": "^2.0.0" + "is-number": "^7.0.0" } } } @@ -7445,9 +7763,9 @@ } }, "react-error-overlay": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.8.tgz", - "integrity": "sha512-HvPuUQnLp5H7TouGq3kzBeioJmXms1wHy9EGjz2OURWBp4qZO6AfGEcnxts1D/CbwPLRAgTMPCEgYhA3sEM4vw==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", "dev": true }, "react-is": { @@ -7456,6 +7774,18 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, + "react-test-renderer": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.14.0.tgz", + "integrity": "sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "react-is": "^16.8.6", + "scheduler": "^0.19.1" + } + }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -7532,17 +7862,6 @@ "util-deprecate": "~1.0.1" } }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -7571,6 +7890,12 @@ "strip-indent": "^1.0.1" } }, + "reflect.ownkeys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", + "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", + "dev": true + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -7632,9 +7957,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.6.tgz", - "integrity": "sha512-jjyuCp+IEMIm3N1H1LLTJW1EISEJV9+5oHdEyrt43Pg9cDSb6rrLZei2cVWpl0xTjmmlpec/lEQGYgM7xfpGCQ==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -7659,26 +7984,26 @@ }, "dependencies": { "autolinker": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.14.2.tgz", - "integrity": "sha512-VO66nXUCZFxTq7fVHAaiAkZNXRQ1l3IFi6D5P7DLoyIEAn2E8g7TWbyEgLlz1uW74LfWmu1A17IPWuPQyGuNVg==", + "version": "3.14.3", + "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.14.3.tgz", + "integrity": "sha512-t81i2bCpS+s+5FIhatoww9DmpjhbdiimuU9ATEuLxtZMQ7jLv9fyFn7SWNG8IkEfD4AmYyirL1ss9k1aqVWRvg==", "dev": true, "requires": { "tslib": "^1.9.3" } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true } } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true }, "repeat-string": { @@ -7730,19 +8055,13 @@ "uuid": "^3.3.2" } }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "is-core-module": "^2.1.0", + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -7767,22 +8086,18 @@ "lowercase-keys": "^1.0.0" } }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", @@ -7804,19 +8119,23 @@ "glob": "^7.1.3" } }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true + "rst-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", + "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", + "dev": true, + "requires": { + "lodash.flattendeep": "^4.4.0", + "nearley": "^2.7.10" + } }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { - "tslib": "^1.9.0" + "queue-microtask": "^1.2.2" } }, "safe-buffer": { @@ -7879,17 +8198,10 @@ } } }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", - "dev": true, - "optional": true - }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "semver-regex": { @@ -7905,6 +8217,14 @@ "dev": true, "requires": { "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "send": { @@ -7966,9 +8286,9 @@ } }, "set-getter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", - "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz", + "integrity": "sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==", "dev": true, "requires": { "to-object-path": "^0.3.0" @@ -8003,6 +8323,15 @@ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -8023,9 +8352,9 @@ "dev": true }, "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, "requires": { "glob": "^7.0.0", @@ -8056,6 +8385,12 @@ } } }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "sitemap": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-3.2.2.tgz", @@ -8196,31 +8531,6 @@ } } }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "dev": true, - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -8277,9 +8587,9 @@ } }, "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, "spdx-correct": { @@ -8435,50 +8745,34 @@ "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "string.prototype.trim": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz", + "integrity": "sha512-hWCk/iqf7lp0/AgTF7/ddO1IWtSNPASjlzCicV5irAVdE1grjsneK26YG6xACMBEdCvO8fUST0UzDMh/2Qy+9Q==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" } }, "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, @@ -8710,13 +9004,6 @@ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "dev": true, - "optional": true - }, "tiny-lr": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", @@ -8739,27 +9026,9 @@ "requires": { "ms": "^2.1.1" } - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } } } }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", @@ -8893,12 +9162,116 @@ "requires": { "@types/cheerio": "^0.22.8", "cheerio": "0.22.0" + }, + "dependencies": { + "cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", "dev": true }, "tunnel-agent": { @@ -8932,6 +9305,18 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, "unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", @@ -8995,9 +9380,9 @@ "dev": true }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unpipe": { @@ -9052,12 +9437,6 @@ } } }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -9073,16 +9452,6 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", @@ -9120,27 +9489,6 @@ "es-abstract": "^1.17.2", "has-symbols": "^1.0.1", "object.getownpropertydescriptors": "^2.1.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "utils-merge": { @@ -9230,6 +9578,19 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", diff --git a/website/package.json b/website/package.json index c5bf07d86..ea6126626 100644 --- a/website/package.json +++ b/website/package.json @@ -9,7 +9,7 @@ "rename-version": "docusaurus-rename-version" }, "devDependencies": { - "docusaurus": "^1.14.6" + "docusaurus": "^1.14.7" }, "dependencies": { "cross-env": "^7.0.3" diff --git a/website/sidebars.json b/website/sidebars.json index 47815aea7..5e6b9d0b1 100644 --- a/website/sidebars.json +++ b/website/sidebars.json @@ -13,6 +13,7 @@ "mixins/with-actions", "mixins/with-meta", "mixins/with-patches", + "mixins/network-mixin", "mixins/jsonapi-mixin", "mixins/building-your-own-mixin" ], @@ -27,6 +28,16 @@ "api-reference/lib-utils", "api-reference/typescript-interfaces" ], + "Network": [ + "network/getting-started", + "network/base-request", + "network/caching", + "network/fetching", + "network/interceptors", + "network/operators", + "network/response", + "network/typescript-interfaces" + ], "JSON API": [ "jsonapi/jsonapi-getting-started", "jsonapi/jsonapi-basic-configuration", @@ -42,8 +53,7 @@ "jsonapi/jsonapi-typescript-interfaces" ], "JSON API Angular": [ - "jsonapi-angular/mixin", - "jsonapi-angular/base-fetch" + "jsonapi-angular/mixin" ], "Migration guide": [ "migration-guide/breaking-changes", @@ -51,10 +61,19 @@ "migration-guide/whats-new", "migration-guide/from-v1" ], - "Troubleshooting": ["troubleshooting/known-issues"] + "Troubleshooting": [ + "troubleshooting/known-issues" + ] }, "examples": { - "Setup": ["examples/basic-setup", "examples/react-setup", "examples/nextjs-setup", "examples/angular-setup"], - "Collection": ["examples/adding-models"] + "Setup": [ + "examples/basic-setup", + "examples/react-setup", + "examples/nextjs-setup", + "examples/angular-setup" + ], + "Collection": [ + "examples/adding-models" + ] } } diff --git a/website/versioned_docs/version-1.0.0/jsonapi/jsonapi-spec-compliance.md b/website/versioned_docs/version-1.0.0/jsonapi/jsonapi-spec-compliance.md index b90f61705..fc8b5d04e 100644 --- a/website/versioned_docs/version-1.0.0/jsonapi/jsonapi-spec-compliance.md +++ b/website/versioned_docs/version-1.0.0/jsonapi/jsonapi-spec-compliance.md @@ -4,7 +4,7 @@ title: Spec compliance original_id: jsonapi-spec-compliance --- -Based on the official v1.0 [specification](http://jsonapi.org/format/), all the features should be implemented. If something is missing or not behaving correctly, feel free to [open an issue](https://github.com/infinum/datx/issues/new). +Based on the official v1.0 [specification](http://jsonapi.org/format/), all the features should be implemented. If something is missing or not behaving correctly, feel free to [open an issue](https://github.com/infinum/datx/issues/new/choose). ## Content Negotiation diff --git a/website/versioned_docs/version-1.0.0/mixins/what-are-mixins.md b/website/versioned_docs/version-1.0.0/mixins/what-are-mixins.md index 2da1ab97d..48e6ca6fd 100644 --- a/website/versioned_docs/version-1.0.0/mixins/what-are-mixins.md +++ b/website/versioned_docs/version-1.0.0/mixins/what-are-mixins.md @@ -12,4 +12,4 @@ Other mixins that can be installed separately: There are some other mixins that are [planned](https://github.com/infinum/datx/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Amixins). -Have an idea for a mixin? [Open an issue](https://github.com/infinum/datx/issues/new) or [create your own](building-your-own-mixin). +Have an idea for a mixin? [Open an issue](https://github.com/infinum/datx/issues/new/choose) or [create your own](building-your-own-mixin). diff --git a/website/versioned_docs/version-1.0.0/troubleshooting/known-issues.md b/website/versioned_docs/version-1.0.0/troubleshooting/known-issues.md index 81aeb602d..a04d07c73 100644 --- a/website/versioned_docs/version-1.0.0/troubleshooting/known-issues.md +++ b/website/versioned_docs/version-1.0.0/troubleshooting/known-issues.md @@ -28,4 +28,4 @@ This can happen if you have an existing model instance, but want to update it wi ## Having other issues? -Feel free to [open an issue](https://github.com/infinum/datx/issues/new). +Feel free to [open an issue](https://github.com/infinum/datx/issues/new/choose). diff --git a/website/versioned_docs/version-2.0.0/api-reference/attribute.md b/website/versioned_docs/version-2.0.0/api-reference/attribute.md index abda29d5d..d7bd8beaa 100644 --- a/website/versioned_docs/version-2.0.0/api-reference/attribute.md +++ b/website/versioned_docs/version-2.0.0/api-reference/attribute.md @@ -101,6 +101,17 @@ Example: Sometimes, you'll need to map your data in a way that might not be compatible with your API (or maybe for some other reason specific to your use case). This could range from renaming properties to converting them to other types (e.g. from a date string to a date object). This is where parsers and serializers can be used. The functions are passed as options to the `@Attribute` decorator. +### map + +The map property maps a single property from the input object to the model (before the parse call) and back (after the serialize call). + +Example: + +```typescript +@Attribute({ map: 'first_name' }) +public firstName: string; +``` + ### parse The parse function rceives the raw value (first argument is the eact property and the second value is the whole model). It should return the value which should be used to initialize the model. @@ -122,6 +133,20 @@ public createdBy: string; ``` +## Compound IDs + +Altrough there is no out-of-the-box solution for compound IDs in DatX, it is easy to achieve them using the `Attribute` features defined above: + +```typescript +@Attribute({ + // Set it as an identifier + isIdentifier: true, + // Combine two (userId, companyId) IDs into a single compound ID + parse: (_: never, data: Record) => `${data.userId}-${data.companyId}` +}) +public id: string; +``` + ## Using `Attribute` without decorators [In some cases](https://github.com/infinum/datx/issues/92), you might not be able to use the `@Attribute()` decorator, but you can still use it as a function. The function has two arguments: the class you're decorating and name of the property you're decorating. You can find the example in the [defining models](https://github.com/infinum/datx/wiki/Defining-models) section. diff --git a/website/versioned_docs/version-2.0.0/examples/angular-setup.md b/website/versioned_docs/version-2.0.0/examples/angular-setup.md index 2ed24af6c..872264fcd 100644 --- a/website/versioned_docs/version-2.0.0/examples/angular-setup.md +++ b/website/versioned_docs/version-2.0.0/examples/angular-setup.md @@ -11,7 +11,6 @@ Steps: - (Optional) Disable MobX by importing `datx/disable-mobx` before any other datx imports - Install `datx-jsonapi` and `datx-jsonapi-angular` - [Setup your collection and models](./basic-setup), use [`jsonapiAngular` mixin](../jsonapi-angular/mixin.md) when setting them up -- Set up the [`baseFetch`](../jsonapi-angular/base-fetch.md) ## Use your store @@ -24,165 +23,146 @@ First disable the MobX integration right away in the entrypoint: ```ts // src/main.ts -import 'datx/disable-mobx'; +import '@datx/core/disable-mobx'; // .. Rest of the file ``` -Next, we need a special implementation of `baseFetch`. This is needed to integrate with Angular network features like interceptors and request canceling: +## Configuration + +Create a collection, provide it under `APP_COLLECTION` token, import `DatxModule` in your `AppModule` and configure it: ```ts -// src/app/services/custom-fetch.ts - -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { config, IResponseObject } from '@datx/jsonapi'; -import { IResponseHeaders } from 'datx-jsonapi/dist/interfaces/IResponseHeaders'; -import { Observable } from 'rxjs'; -import { map, takeUntil } from 'rxjs/operators'; - -@Injectable({ providedIn: 'root' }) -export class CustomFetchService { - constructor(private httpClient: HttpClient) {} - - public async fetch( - method: string, - url: string, - body?: unknown, - headers: Record = {}, - fetchOptions?: { takeUntil$?: Observable }, - ): Promise { - const takeUntil$: Observable | undefined = fetchOptions?.takeUntil$; - - const requestHeaders = { - ...config.defaultFetchOptions.headers, - ...headers, - }; - - let request$ = this.httpClient.request(method, url, { - observe: 'response', - responseType: 'json', - headers: requestHeaders, - body, - }).pipe( - map((response) => { - return { - data: response.body, - headers: response.headers as unknown as IResponseHeaders, // The interface actually matches - requestHeaders, - status: response.status, - }; - }), - ); - - if (takeUntil$) { - request$ = request$.pipe(takeUntil(takeUntil$)); - } - - try { - const d = await request$.toPromise(); - if (d === undefined) { - return { status: -1 }; // Signal to DatX that it shouldn't fail, but shouldn't cache either - } - - return d; - } catch (e) { - console.error(e); - throw e; - } - } +import { InjectionToken } from '@angular/core'; +import { Collection } from '@datx/core'; +import { jsonapiAngular } from '@datx/jsonapi-angular'; + +export const APP_COLLECTION = new InjectionToken('App collection'); + +export class AppCollection extends jsonapiAngular(Collection) { + public static readonly types = [...]; } ``` -The last step is to initialize all the settings: +```ts +import { NgModule } from '@angular/core'; +import { DatxModule } from '@datx/jsonapi-angular'; +import { AppCollection, APP_COLLECTION } from './collections/app.collection'; + +@NgModule({ + imports: [ + DatxModule.forRoot({ + baseUrl: 'https://my-api.com/', + }), + ], + providers: [ + { + provide: APP_COLLECTION, + useValue: new AppCollection(), + }, + ], +}) +export class AppModule {} +``` + +You can also provide the config via DI if you need to set the config value based on data from some service: ```ts -// src/app/app/module.ts +import { NgModule } from '@angular/core'; +import { DatxModule, DATX_CONFIG } from '@datx/jsonapi-angular'; +import { AppCollection, APP_COLLECTION } from './collections/app.collection'; +import { EnvironmentVariablesService } from './services/...'; + +@NgModule({ + imports: [ + DatxModule.forRoot({ + cache: CachingStrategy.NetworkOnly, + }), + ], + provides: [ + { + provide: APP_COLLECTION, + useValue: new AppCollection(), + }, + { + provide: DATX_CONFIG, + useFactory: (environmentVariablesService: EnvironmentVariablesService) => { + return { + baseUrl: environmentVariablesService.get('MY_API'), + }; + }, + deps: [EnvironmentVariablesService], + }, + ], +}) +export class AppModule {} +``` -import { APP_INITIALIZER } from '@angular/core'; -import { CustomFetchService } from './services/custom-fetch.service'; -import { CachingStrategy, config } from '@datx/jsonapi'; +Config values passed via `forRoot` and via `DATX_CONFIG` and the default values will be merged together into a final configuration object. Values provided `DATX_CONFIG` DI token take precedence over values from `forRoot`, and default values have the lowest precedence. -function initDatx(customFetch: CustomFetchService): () => Promise { - return async () => { - config.baseFetch = customFetch.fetch.bind(customFetch); +In the example above, the final config will use some default values, NetworkOnly caching option (as defined in `forRoot`) and whatever value `environmentVariablesService.get('MY_API')` returns for `baseUrl` (as defined in `DATX_CONFIG` provider). - config.defaultFetchOptions = { - credentials: 'same-origin', - headers: { - 'Content-Type': 'application/vnd.api+json', - }, - }; +### Usage - // Use cache if not older than 10 seconds - config.maxCacheAge = 10; - config.cache = CachingStrategy.CacheFirst; - }; -} +Create the base model: -// ... in the module providers - { - provide: APP_INITIALIZER, - useFactory: initDatx, - multi: true, - deps: [CustomFetchService], - } +```ts +import { IType, Model } from '@datx/core'; +import { jsonapiAngular } from '@datx/jsonapi-angular'; +export class BaseModel extends jsonapiAngular(Model) { + public get id(): IType { + return this.meta.id; + } +} ``` -### Usage - -To use DatX in the app, inject your collection in your component or service and you can start using it. All the networking features will expose rxjs observables. +Create specific domain models and add them to `types` in `AppCollection` ```ts -// src/app/app.component.ts +import { Attribute } from '@datx/core'; +import { BaseModel } from './base-model'; -export class AppComponent implements OnInit { - public results$: Observable>; - public search$: BehaviorSubject = new BehaviorSubject(''); +export class Artist extends BaseModel { + public static endpoint = 'artists'; + public static type = 'project'; - constructor( - private collection: AppCollection, - ) {} + @Attribute() + public name!: string; +} +``` - public ngOnInit(): void { - this.results$ = this.setupSearch().pipe(map((result: Response) => result.data)); - } +```ts +export class AppCollection extends jsonapiAngular(Collection) { + public static readonly types = [Artist]; +} +``` - private setupSearch(): Observable { - return this.search$.pipe( - switchMap((query: string) => { - return this.collection.getMany({ queryParams: { filter: { query } } }); - }) - ); - } +Create services for managing the models (one service per model): - public onInputChanged(event: any): void { - this.search$.next(event.target.value); +```ts +import { Inject, Injectable } from '@angular/core'; +import { CollectionService } from '@datx/jsonapi-angular'; + +@Injectable({ + providedIn: 'root', +}) +export class ArtistsService extends CollectionService { + protected ctor = Artist; + + constructor(@Inject(APP_COLLECTION) protected readonly collection: AppCollection) { + super(collection); } } ``` -```html - -
- {{ result.name }} - {{ result.meta.id }} -
-``` +Inject the service in your component or other services and use methods like `getManyModels` and `getOneModel`: ---- +```ts +export class ArtistsComponent { + public artists$ = this.artistsService.getAllModels(); + + constructor(private readonly artistsService: ArtistsService) {} +} +``` -## Related - - - +That's it! diff --git a/website/versioned_docs/version-2.0.0/jsonapi-angular/base-fetch.md b/website/versioned_docs/version-2.0.0/jsonapi-angular/base-fetch.md deleted file mode 100644 index bf918b600..000000000 --- a/website/versioned_docs/version-2.0.0/jsonapi-angular/base-fetch.md +++ /dev/null @@ -1,110 +0,0 @@ ---- -id: version-2.0.0-base-fetch -title: Angular JSON:API baseFetch -original_id: base-fetch ---- - -By default, the library will use the FetchAPI to do all the networking. This is not ideal when using Angular as it would remove some useful features like interceptors and request cancellation. - -`datx-jsonapi-angular` implements some hooks which can be used in combination with a custom `baseFetch` implementation to get those features back. - -Here is an example of the implementation, but you might have some other needs: - -```ts -// src/app/services/custom-fetch.ts - -import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { config, IResponseObject } from '@datx/jsonapi'; -import { IResponseHeaders } from 'datx-jsonapi/dist/interfaces/IResponseHeaders'; -import { Observable } from 'rxjs'; -import { map, takeUntil } from 'rxjs/operators'; - -@Injectable({ providedIn: 'root' }) -export class CustomFetchService { - constructor(private httpClient: HttpClient) {} - - public async fetch( - method: string, - url: string, - body?: unknown, - headers: Record = {}, - fetchOptions?: { takeUntil$?: Observable }, - ): Promise { - const takeUntil$: Observable | undefined = fetchOptions?.takeUntil$; - - const requestHeaders = { - ...config.defaultFetchOptions.headers, - ...headers, - }; - - let request$ = this.httpClient.request(method, url, { - observe: 'response', - responseType: 'json', - headers: requestHeaders, - body, - }).pipe( - map((response) => { - return { - data: response.body, - headers: response.headers as unknown as IResponseHeaders, // The interface actually matches - requestHeaders, - status: response.status, - }; - }), - ); - - if (takeUntil$) { - request$ = request$.pipe(takeUntil(takeUntil$)); - } - - try { - const d = await request$.toPromise(); - if (d === undefined) { - return { status: -1 }; // Signal to DatX that it shouldn't fail, but shouldn't cache either - } - - return d; - } catch (e) { - console.error(e); - throw e; - } - } -} -``` - -The last step is to initialize all the settings: - -```ts -// src/app/app/module.ts - -import { APP_INITIALIZER } from '@angular/core'; -import { CustomFetchService } from './services/custom-fetch.service'; -import { CachingStrategy, config } from '@datx/jsonapi'; - -function initDatx(customFetch: CustomFetchService): () => Promise { - return async () => { - config.baseFetch = customFetch.fetch.bind(customFetch); - - config.defaultFetchOptions = { - credentials: 'same-origin', - headers: { - 'Content-Type': 'application/vnd.api+json', - }, - }; - - // Use cache if not older than 10 seconds - config.maxCacheAge = 10; - config.cache = CachingStrategy.CacheFirst; - }; -} - -// ... in the module providers - { - provide: APP_INITIALIZER, - useFactory: initDatx, - multi: true, - deps: [CustomFetchService], - } - -``` diff --git a/website/versioned_docs/version-2.0.0/jsonapi-angular/example-repo.md b/website/versioned_docs/version-2.0.0/jsonapi-angular/example-repo.md new file mode 100644 index 000000000..dca718c8f --- /dev/null +++ b/website/versioned_docs/version-2.0.0/jsonapi-angular/example-repo.md @@ -0,0 +1,7 @@ +--- +id: version-2.0.0-example-repo +title: Example repo +original_id: example-repo +--- + +An example repository on how to integrate DatX into Angular can be found [here](https://github.com/infinum/js-angular-datx-example). diff --git a/website/versioned_docs/version-2.0.0/jsonapi-angular/mixin.md b/website/versioned_docs/version-2.0.0/jsonapi-angular/mixin.md index 806123c41..b705b7d48 100644 --- a/website/versioned_docs/version-2.0.0/jsonapi-angular/mixin.md +++ b/website/versioned_docs/version-2.0.0/jsonapi-angular/mixin.md @@ -1,6 +1,6 @@ --- id: version-2.0.0-mixin -title: Angular JSON:API mixin +title: Mixin original_id: mixin --- diff --git a/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-collection.md b/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-collection.md index 8f1bddcc7..90c465e25 100644 --- a/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-collection.md +++ b/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-collection.md @@ -46,6 +46,27 @@ The options can be used to send additional parameters to the server. If an error happens, the function will reject with the [`Response`](jsonapi-response) object with the `error` property set. +## getAll + +```typescript +getAll(type: IType | IModelConstructor, options?: IRequestOptions, maxRequests?: number = 50): Promise> +``` + +Fetches all records within the request limit of the given type from the server. +Generally you don't want to use this function if you are trying to load **a lot** of pages at once since it could lead to the huge response time. + +Unlike other collection methods that return a `Response` instance, `getAll` returns an object that contains: + +- data: array of all models +- responses: array of all responses that came from the server +- lastResponse: `Response` instance for easy acces to all `Response` properties + +See [`IGetAllResponse`](jsonapi-typescript-interfaces#igetallresponse) interface for detailed info. + +The options can be used to send additional parameters to the server. + +If an error happens, the function will reject with the [`Response`](jsonapi-response) object with the `error` property set. + ## request ```typescript diff --git a/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-spec-compliance.md b/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-spec-compliance.md index c95a8138c..bc4b5ee82 100644 --- a/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-spec-compliance.md +++ b/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-spec-compliance.md @@ -4,7 +4,7 @@ title: Spec compliance original_id: jsonapi-spec-compliance --- -Based on the official v1.0 [specification](http://jsonapi.org/format/), all the features should be implemented. If something is missing or not behaving correctly, feel free to [open an issue](https://github.com/infinum/datx/issues/new). +Based on the official v1.0 [specification](http://jsonapi.org/format/), all the features should be implemented. If something is missing or not behaving correctly, feel free to [open an issue](https://github.com/infinum/datx/issues/new/choose). ## Content Negotiation diff --git a/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-typescript-interfaces.md b/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-typescript-interfaces.md index e0017d6b4..536e35362 100644 --- a/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-typescript-interfaces.md +++ b/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-typescript-interfaces.md @@ -68,3 +68,15 @@ interface IRequestOptions { }; } ``` + +## IGetAllResponse + +Interface defining return type for `getAll` method on [collections](jsonapi-collection#getall) and [views](jsonapi-view#getall) + +```typescript +interface IGetAllResponse { + data: Array; + responses: Array>; + lastResponse: Response; +} +``` \ No newline at end of file diff --git a/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-view.md b/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-view.md index f1673a0fb..46840a3e1 100644 --- a/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-view.md +++ b/website/versioned_docs/version-2.0.0/jsonapi/jsonapi-view.md @@ -37,3 +37,24 @@ Fetch multiple models of the view type from the server. This will either be all The options can be used to send additional parameters to the server. If an error happens, the function will reject with the [`Response`](jsonapi-response) object with the `error` property set. + +## getAll + +```typescript +getAll(type: IType | IModelConstructor, options?: IRequestOptions, maxRequests?: number = 50): Promise> +``` + +Fetches all records within the request limit of the given type from the server and saves it into the view. +Generally you don't want to use this function if you are trying to load **a lot** of pages at once since it could lead to the huge response time. + +Unlike other view methods that return a `Response` instance, `getAll` returns an object that contains: + +- data: array of all models +- responses: array of all responses that came from the server +- lastResponse: `Response` instance for easy acces to all `Response` properties + +See [`IGetAllResponse`](jsonapi-typescript-interfaces#igetallresponse) interface for detailed info. + +The options can be used to send additional parameters to the server. + +If an error happens, the function will reject with the [`Response`](jsonapi-response) object with the `error` property set. diff --git a/website/versioned_docs/version-2.0.0/mixins/jsonapi-angular-mixin.md b/website/versioned_docs/version-2.0.0/mixins/jsonapi-angular-mixin.md new file mode 100644 index 000000000..c3b1e9ac8 --- /dev/null +++ b/website/versioned_docs/version-2.0.0/mixins/jsonapi-angular-mixin.md @@ -0,0 +1,7 @@ +--- +id: version-2.0.0-jsonapi-angular-mixin +title: JSONAPI Angular Mixin +original_id: jsonapi-angular-mixin +--- + +See [JSON API Angular chapter](../jsonapi-angular/mixin). Functionality is similar to JSON API which has separate [JSON API chapter](../jsonapi/jsonapi-getting-started). diff --git a/website/versioned_docs/version-2.0.0/mixins/jsonapi-mixin.md b/website/versioned_docs/version-2.0.0/mixins/jsonapi-mixin.md new file mode 100644 index 000000000..d8914bf46 --- /dev/null +++ b/website/versioned_docs/version-2.0.0/mixins/jsonapi-mixin.md @@ -0,0 +1,20 @@ +--- +id: version-2.0.0-jsonapi-mixin +title: JSONAPI Mixin +original_id: jsonapi-mixin +--- +See [JSON API chapter](../jsonapi/jsonapi-getting-started). + +## Documentation + +- [Basic configuration](../jsonapi/jsonapi-basic-configuration) +- [Network configuration](../jsonapi/jsonapi-network-configuration) +- [Network usage](../jsonapi/jsonapi-network-usage) +- [Spec compliance](../jsonapi/jsonapi-spec-compliance) +- [Model](../jsonapi/jsonapi-model) +- [Collection](../jsonapi/jsonapi-collection) +- [View](../jsonapi/jsonapi-view) +- [Response](../jsonapi/jsonapi-response) +- [Config](../jsonapi/jsonapi-config) +- [Utils](../jsonapi/json-api-utils) +- [TypeScript Interfaces](../jsonapi/jsonapi-typescript-interfaces) diff --git a/website/versioned_docs/version-2.0.0/mixins/network-mixin.md b/website/versioned_docs/version-2.0.0/mixins/network-mixin.md index 11c3c7b6e..fa9b74178 100644 --- a/website/versioned_docs/version-2.0.0/mixins/network-mixin.md +++ b/website/versioned_docs/version-2.0.0/mixins/network-mixin.md @@ -4,13 +4,13 @@ title: Network Mixin original_id: network-mixin --- -If you're using an API for your application, you can install `datx-network` to take the full advantage of the `datx` library: +If you're using an API for your application, you can install `@datx/network` to take the full advantage of the `@datx/core` library: ```bash -npm install --save datx datx-network mobx +npm install --save @datx/core @datx/network mobx ``` -**Note** If you're using the [JSON API specification](https://jsonapi.org/), check out [datx-jsonapi](./jsonapi-mixin) instead. +**Note** If you're using the [JSON API specification](https://jsonapi.org/), check out [@datx/jsonapi](./jsonapi-mixin) instead. Additionally, there is [@datx/jsonapi-angular] which works with RxJS [Observables](https://rxjs.dev/guide/observable). ## Polyfilling diff --git a/website/versioned_docs/version-2.0.0/troubleshooting/known-issues.md b/website/versioned_docs/version-2.0.0/troubleshooting/known-issues.md index ed87d2671..357c5a626 100644 --- a/website/versioned_docs/version-2.0.0/troubleshooting/known-issues.md +++ b/website/versioned_docs/version-2.0.0/troubleshooting/known-issues.md @@ -20,4 +20,4 @@ The easiest way is to add a generic polyfill: ## Having other issues? -Feel free to [open an issue](https://github.com/infinum/datx/issues/new). +Feel free to [open an issue](https://github.com/infinum/datx/issues/new/choose). diff --git a/website/versioned_sidebars/version-2.0.0-sidebars.json b/website/versioned_sidebars/version-2.0.0-sidebars.json index 18c76a9a6..02d987319 100644 --- a/website/versioned_sidebars/version-2.0.0-sidebars.json +++ b/website/versioned_sidebars/version-2.0.0-sidebars.json @@ -13,7 +13,9 @@ "version-2.0.0-mixins/with-actions", "version-2.0.0-mixins/with-meta", "version-2.0.0-mixins/with-patches", + "version-2.0.0-mixins/network-mixin", "version-2.0.0-mixins/jsonapi-mixin", + "version-2.0.0-mixins/jsonapi-angular-mixin", "version-2.0.0-mixins/building-your-own-mixin" ], "API Reference": [ @@ -27,6 +29,16 @@ "version-2.0.0-api-reference/lib-utils", "version-2.0.0-api-reference/typescript-interfaces" ], + "Network": [ + "version-2.0.0-network/getting-started", + "version-2.0.0-network/base-request", + "version-2.0.0-network/caching", + "version-2.0.0-network/fetching", + "version-2.0.0-network/interceptors", + "version-2.0.0-network/operators", + "version-2.0.0-network/response", + "version-2.0.0-network/typescript-interfaces" + ], "JSON API": [ "version-2.0.0-jsonapi/jsonapi-getting-started", "version-2.0.0-jsonapi/jsonapi-basic-configuration", @@ -43,7 +55,7 @@ ], "JSON API Angular": [ "version-2.0.0-jsonapi-angular/mixin", - "version-2.0.0-jsonapi-angular/base-fetch" + "version-2.0.0-jsonapi-angular/example-repo" ], "Migration guide": [ "version-2.0.0-migration-guide/breaking-changes", diff --git a/yarn.lock b/yarn.lock index 9f93384a9..b9bc72677 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,8085 +1,9009 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" - integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.10" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.10" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.10" - "@babel/types" "^7.12.10" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.12.10", "@babel/generator@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" - integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== - dependencies: - "@babel/types" "^7.12.11" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-function-name@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" - integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== - dependencies: - "@babel/helper-get-function-arity" "^7.12.10" - "@babel/template" "^7.12.7" - "@babel/types" "^7.12.11" - -"@babel/helper-get-function-arity@^7.12.10": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" - integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== - dependencies: - "@babel/types" "^7.12.10" - -"@babel/helper-member-expression-to-functions@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" - integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== - dependencies: - "@babel/types" "^7.12.7" - -"@babel/helper-module-imports@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" - integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== - dependencies: - "@babel/types" "^7.12.5" - -"@babel/helper-module-transforms@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" - integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== - dependencies: - "@babel/helper-module-imports" "^7.12.1" - "@babel/helper-replace-supers" "^7.12.1" - "@babel/helper-simple-access" "^7.12.1" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/helper-validator-identifier" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.1" - "@babel/types" "^7.12.1" - lodash "^4.17.19" - -"@babel/helper-optimise-call-expression@^7.12.10": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" - integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== - dependencies: - "@babel/types" "^7.12.10" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== - -"@babel/helper-replace-supers@^7.12.1": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" - integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.7" - "@babel/helper-optimise-call-expression" "^7.12.10" - "@babel/traverse" "^7.12.10" - "@babel/types" "^7.12.11" - -"@babel/helper-simple-access@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" - integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.11.0", "@babel/helper-split-export-declaration@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" - integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== - dependencies: - "@babel/types" "^7.12.11" - -"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== - -"@babel/helpers@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" - integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== - dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" - -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" - integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" - integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" - integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" - integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.12.7" - "@babel/types" "^7.12.7" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" - integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== - dependencies: - "@babel/code-frame" "^7.12.11" - "@babel/generator" "^7.12.11" - "@babel/helper-function-name" "^7.12.11" - "@babel/helper-split-export-declaration" "^7.12.11" - "@babel/parser" "^7.12.11" - "@babel/types" "^7.12.12" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" - integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@eslint/eslintrc@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" - integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - lodash "^4.17.20" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@evocateur/libnpmaccess@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" - integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - npm-package-arg "^6.1.0" - -"@evocateur/libnpmpublish@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" - integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - lodash.clonedeep "^4.5.0" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - semver "^5.5.1" - ssri "^6.0.1" - -"@evocateur/npm-registry-fetch@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" - integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== - dependencies: - JSONStream "^1.3.4" - bluebird "^3.5.1" - figgy-pudding "^3.4.1" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - npm-package-arg "^6.1.0" - safe-buffer "^5.1.2" - -"@evocateur/pacote@^9.6.3": - version "9.6.5" - resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" - integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - bluebird "^3.5.3" - cacache "^12.0.3" - chownr "^1.1.2" - figgy-pudding "^3.5.1" - get-stream "^4.1.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - minimatch "^3.0.4" - minipass "^2.3.5" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.5.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.4.4" - npm-pick-manifest "^3.0.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.1" - rimraf "^2.6.3" - safe-buffer "^5.2.0" - semver "^5.7.0" - ssri "^6.0.1" - tar "^4.4.10" - unique-filename "^1.1.1" - which "^1.3.1" - -"@infinumjs/eslint-config-core-js@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@infinumjs/eslint-config-core-js/-/eslint-config-core-js-2.2.0.tgz#b02e731d31c29a4107fb25a149ef351d72af36e1" - integrity sha512-eSBYXCav8vNERPCKmZ5abW/n/L1ptcXwALSIGtiFaqJmQjwXSvCBdB9MjytEycdsIjmEOHnZwSpB1h0vhNxdFw== - -"@infinumjs/eslint-config-core-ts@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@infinumjs/eslint-config-core-ts/-/eslint-config-core-ts-2.2.0.tgz#5fb96d244a656265016648b4d4bb7a1cba540d49" - integrity sha512-c4etdqFPaFkY64MLgrhrQo2Xnoz3b21tjONt2YoAq4whc6l59lfF5nMIjeEnNTJjwJa3uXOF70TYsHzGbv/0Cw== - dependencies: - "@infinumjs/eslint-config-core-js" "^2.2.0" - "@typescript-eslint/eslint-plugin" "~4.10.0" - "@typescript-eslint/parser" "~4.10.0" - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== - -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" - slash "^3.0.0" - -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== - dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== - dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" - "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" - -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" - -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== - dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@lerna/add@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.21.0.tgz#27007bde71cc7b0a2969ab3c2f0ae41578b4577b" - integrity sha512-vhUXXF6SpufBE1EkNEXwz1VLW03f177G9uMOFMQkp6OJ30/PWg4Ekifuz9/3YfgB2/GH8Tu4Lk3O51P2Hskg/A== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/bootstrap" "3.21.0" - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - npm-package-arg "^6.1.0" - p-map "^2.1.0" - semver "^6.2.0" - -"@lerna/bootstrap@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.21.0.tgz#bcd1b651be5b0970b20d8fae04c864548123aed6" - integrity sha512-mtNHlXpmvJn6JTu0KcuTTPl2jLsDNud0QacV/h++qsaKbhAaJr/FElNZ5s7MwZFUM3XaDmvWzHKaszeBMHIbBw== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/has-npm-version" "3.16.5" - "@lerna/npm-install" "3.16.5" - "@lerna/package-graph" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/symlink-binary" "3.17.0" - "@lerna/symlink-dependencies" "3.17.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - get-port "^4.2.0" - multimatch "^3.0.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - read-package-tree "^5.1.6" - semver "^6.2.0" - -"@lerna/changed@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.21.0.tgz#108e15f679bfe077af500f58248c634f1044ea0b" - integrity sha512-hzqoyf8MSHVjZp0gfJ7G8jaz+++mgXYiNs9iViQGA8JlN/dnWLI5sWDptEH3/B30Izo+fdVz0S0s7ydVE3pWIw== - dependencies: - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.21.0" - "@lerna/listable" "3.18.5" - "@lerna/output" "3.13.0" - -"@lerna/check-working-tree@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa" - integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ== - dependencies: - "@lerna/collect-uncommitted" "3.16.5" - "@lerna/describe-ref" "3.16.5" - "@lerna/validation-error" "3.13.0" - -"@lerna/child-process@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2" - integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg== - dependencies: - chalk "^2.3.1" - execa "^1.0.0" - strong-log-transformer "^2.0.0" - -"@lerna/clean@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.21.0.tgz#c0b46b5300cc3dae2cda3bec14b803082da3856d" - integrity sha512-b/L9l+MDgE/7oGbrav6rG8RTQvRiZLO1zTcG17zgJAAuhlsPxJExMlh2DFwJEVi2les70vMhHfST3Ue1IMMjpg== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - -"@lerna/cli@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242" - integrity sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA== - dependencies: - "@lerna/global-options" "3.13.0" - dedent "^0.7.0" - npmlog "^4.1.2" - yargs "^14.2.2" - -"@lerna/collect-uncommitted@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63" - integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg== - dependencies: - "@lerna/child-process" "3.16.5" - chalk "^2.3.1" - figgy-pudding "^3.5.1" - npmlog "^4.1.2" - -"@lerna/collect-updates@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1" - integrity sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/describe-ref" "3.16.5" - minimatch "^3.0.4" - npmlog "^4.1.2" - slash "^2.0.0" - -"@lerna/command@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.21.0.tgz#9a2383759dc7b700dacfa8a22b2f3a6e190121f7" - integrity sha512-T2bu6R8R3KkH5YoCKdutKv123iUgUbW8efVjdGCDnCMthAQzoentOJfDeodBwn0P2OqCl3ohsiNVtSn9h78fyQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/package-graph" "3.18.5" - "@lerna/project" "3.21.0" - "@lerna/validation-error" "3.13.0" - "@lerna/write-log-file" "3.13.0" - clone-deep "^4.0.1" - dedent "^0.7.0" - execa "^1.0.0" - is-ci "^2.0.0" - npmlog "^4.1.2" - -"@lerna/conventional-commits@3.22.0": - version "3.22.0" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.22.0.tgz#2798f4881ee2ef457bdae027ab7d0bf0af6f1e09" - integrity sha512-z4ZZk1e8Mhz7+IS8NxHr64wyklHctCJyWpJKEZZPJiLFJ8yKto/x38O80R10pIzC0rr8Sy/OsjSH4bl0TbbgqA== - dependencies: - "@lerna/validation-error" "3.13.0" - conventional-changelog-angular "^5.0.3" - conventional-changelog-core "^3.1.6" - conventional-recommended-bump "^5.0.0" - fs-extra "^8.1.0" - get-stream "^4.0.0" - lodash.template "^4.5.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - semver "^6.2.0" - -"@lerna/create-symlink@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" - integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw== - dependencies: - "@zkochan/cmd-shim" "^3.1.0" - fs-extra "^8.1.0" - npmlog "^4.1.2" - -"@lerna/create@3.22.0": - version "3.22.0" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.22.0.tgz#d6bbd037c3dc5b425fe5f6d1b817057c278f7619" - integrity sha512-MdiQQzCcB4E9fBF1TyMOaAEz9lUjIHp1Ju9H7f3lXze5JK6Fl5NYkouAvsLgY6YSIhXMY8AHW2zzXeBDY4yWkw== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - camelcase "^5.0.0" - dedent "^0.7.0" - fs-extra "^8.1.0" - globby "^9.2.0" - init-package-json "^1.10.3" - npm-package-arg "^6.1.0" - p-reduce "^1.0.0" - pify "^4.0.1" - semver "^6.2.0" - slash "^2.0.0" - validate-npm-package-license "^3.0.3" - validate-npm-package-name "^3.0.0" - whatwg-url "^7.0.0" - -"@lerna/describe-ref@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0" - integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw== - dependencies: - "@lerna/child-process" "3.16.5" - npmlog "^4.1.2" - -"@lerna/diff@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.21.0.tgz#e6df0d8b9916167ff5a49fcb02ac06424280a68d" - integrity sha512-5viTR33QV3S7O+bjruo1SaR40m7F2aUHJaDAC7fL9Ca6xji+aw1KFkpCtVlISS0G8vikUREGMJh+c/VMSc8Usw== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - "@lerna/validation-error" "3.13.0" - npmlog "^4.1.2" - -"@lerna/exec@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.21.0.tgz#17f07533893cb918a17b41bcc566dc437016db26" - integrity sha512-iLvDBrIE6rpdd4GIKTY9mkXyhwsJ2RvQdB9ZU+/NhR3okXfqKc6py/24tV111jqpXTtZUW6HNydT4dMao2hi1Q== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/profiler" "3.20.0" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/filter-options@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b" - integrity sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g== - dependencies: - "@lerna/collect-updates" "3.20.0" - "@lerna/filter-packages" "3.18.0" - dedent "^0.7.0" - figgy-pudding "^3.5.1" - npmlog "^4.1.2" - -"@lerna/filter-packages@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70" - integrity sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ== - dependencies: - "@lerna/validation-error" "3.13.0" - multimatch "^3.0.0" - npmlog "^4.1.2" - -"@lerna/get-npm-exec-opts@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" - integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== - dependencies: - npmlog "^4.1.2" - -"@lerna/get-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" - integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw== - dependencies: - fs-extra "^8.1.0" - ssri "^6.0.1" - tar "^4.4.8" - -"@lerna/github-client@3.22.0": - version "3.22.0" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.22.0.tgz#5d816aa4f76747ed736ae64ff962b8f15c354d95" - integrity sha512-O/GwPW+Gzr3Eb5bk+nTzTJ3uv+jh5jGho9BOqKlajXaOkMYGBELEAqV5+uARNGWZFvYAiF4PgqHb6aCUu7XdXg== - dependencies: - "@lerna/child-process" "3.16.5" - "@octokit/plugin-enterprise-rest" "^6.0.1" - "@octokit/rest" "^16.28.4" - git-url-parse "^11.1.2" - npmlog "^4.1.2" - -"@lerna/gitlab-client@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" - integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q== - dependencies: - node-fetch "^2.5.0" - npmlog "^4.1.2" - whatwg-url "^7.0.0" - -"@lerna/global-options@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" - integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== - -"@lerna/has-npm-version@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326" - integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q== - dependencies: - "@lerna/child-process" "3.16.5" - semver "^6.2.0" - -"@lerna/import@3.22.0": - version "3.22.0" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.22.0.tgz#1a5f0394f38e23c4f642a123e5e1517e70d068d2" - integrity sha512-uWOlexasM5XR6tXi4YehODtH9Y3OZrFht3mGUFFT3OIl2s+V85xIGFfqFGMTipMPAGb2oF1UBLL48kR43hRsOg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - fs-extra "^8.1.0" - p-map-series "^1.0.0" - -"@lerna/info@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.21.0.tgz#76696b676fdb0f35d48c83c63c1e32bb5e37814f" - integrity sha512-0XDqGYVBgWxUquFaIptW2bYSIu6jOs1BtkvRTWDDhw4zyEdp6q4eaMvqdSap1CG+7wM5jeLCi6z94wS0AuiuwA== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/output" "3.13.0" - envinfo "^7.3.1" - -"@lerna/init@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.21.0.tgz#1e810934dc8bf4e5386c031041881d3b4096aa5c" - integrity sha512-6CM0z+EFUkFfurwdJCR+LQQF6MqHbYDCBPyhu/d086LRf58GtYZYj49J8mKG9ktayp/TOIxL/pKKjgLD8QBPOg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - fs-extra "^8.1.0" - p-map "^2.1.0" - write-json-file "^3.2.0" - -"@lerna/link@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.21.0.tgz#8be68ff0ccee104b174b5bbd606302c2f06e9d9b" - integrity sha512-tGu9GxrX7Ivs+Wl3w1+jrLi1nQ36kNI32dcOssij6bg0oZ2M2MDEFI9UF2gmoypTaN9uO5TSsjCFS7aR79HbdQ== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/package-graph" "3.18.5" - "@lerna/symlink-dependencies" "3.17.0" - p-map "^2.1.0" - slash "^2.0.0" - -"@lerna/list@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.21.0.tgz#42f76fafa56dea13b691ec8cab13832691d61da2" - integrity sha512-KehRjE83B1VaAbRRkRy6jLX1Cin8ltsrQ7FHf2bhwhRHK0S54YuA6LOoBnY/NtA8bHDX/Z+G5sMY78X30NS9tg== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/listable" "3.18.5" - "@lerna/output" "3.13.0" - -"@lerna/listable@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a" - integrity sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg== - dependencies: - "@lerna/query-graph" "3.18.5" - chalk "^2.3.1" - columnify "^1.5.4" - -"@lerna/log-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" - integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ== - dependencies: - byte-size "^5.0.1" - columnify "^1.5.4" - has-unicode "^2.0.1" - npmlog "^4.1.2" - -"@lerna/npm-conf@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" - integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA== - dependencies: - config-chain "^1.1.11" - pify "^4.0.1" - -"@lerna/npm-dist-tag@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55" - integrity sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - "@lerna/otplease" "3.18.5" - figgy-pudding "^3.5.1" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - -"@lerna/npm-install@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3" - integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - signal-exit "^3.0.2" - write-pkg "^3.1.0" - -"@lerna/npm-publish@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af" - integrity sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg== - dependencies: - "@evocateur/libnpmpublish" "^1.2.2" - "@lerna/otplease" "3.18.5" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - read-package-json "^2.0.13" - -"@lerna/npm-run-script@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15" - integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" - npmlog "^4.1.2" - -"@lerna/otplease@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231" - integrity sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog== - dependencies: - "@lerna/prompt" "3.18.5" - figgy-pudding "^3.5.1" - -"@lerna/output@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" - integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== - dependencies: - npmlog "^4.1.2" - -"@lerna/pack-directory@3.16.4": - version "3.16.4" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" - integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng== - dependencies: - "@lerna/get-packed" "3.16.0" - "@lerna/package" "3.16.0" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - npm-packlist "^1.4.4" - npmlog "^4.1.2" - tar "^4.4.10" - temp-write "^3.4.0" - -"@lerna/package-graph@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b" - integrity sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA== - dependencies: - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/validation-error" "3.13.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - semver "^6.2.0" - -"@lerna/package@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" - integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw== - dependencies: - load-json-file "^5.3.0" - npm-package-arg "^6.1.0" - write-pkg "^3.1.0" - -"@lerna/prerelease-id-from-version@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" - integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA== - dependencies: - semver "^6.2.0" - -"@lerna/profiler@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051" - integrity sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg== - dependencies: - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npmlog "^4.1.2" - upath "^1.2.0" - -"@lerna/project@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.21.0.tgz#5d784d2d10c561a00f20320bcdb040997c10502d" - integrity sha512-xT1mrpET2BF11CY32uypV2GPtPVm6Hgtha7D81GQP9iAitk9EccrdNjYGt5UBYASl4CIDXBRxwmTTVGfrCx82A== - dependencies: - "@lerna/package" "3.16.0" - "@lerna/validation-error" "3.13.0" - cosmiconfig "^5.1.0" - dedent "^0.7.0" - dot-prop "^4.2.0" - glob-parent "^5.0.0" - globby "^9.2.0" - load-json-file "^5.3.0" - npmlog "^4.1.2" - p-map "^2.1.0" - resolve-from "^4.0.0" - write-json-file "^3.2.0" - -"@lerna/prompt@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1" - integrity sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ== - dependencies: - inquirer "^6.2.0" - npmlog "^4.1.2" - -"@lerna/publish@3.22.1": - version "3.22.1" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.22.1.tgz#b4f7ce3fba1e9afb28be4a1f3d88222269ba9519" - integrity sha512-PG9CM9HUYDreb1FbJwFg90TCBQooGjj+n/pb3gw/eH5mEDq0p8wKdLFe0qkiqUkm/Ub5C8DbVFertIo0Vd0zcw== - dependencies: - "@evocateur/libnpmaccess" "^3.1.2" - "@evocateur/npm-registry-fetch" "^4.0.0" - "@evocateur/pacote" "^9.6.3" - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.21.0" - "@lerna/describe-ref" "3.16.5" - "@lerna/log-packed" "3.16.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/npm-dist-tag" "3.18.5" - "@lerna/npm-publish" "3.18.5" - "@lerna/otplease" "3.18.5" - "@lerna/output" "3.13.0" - "@lerna/pack-directory" "3.16.4" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - "@lerna/version" "3.22.1" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-pipe "^1.2.0" - semver "^6.2.0" - -"@lerna/pulse-till-done@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" - integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== - dependencies: - npmlog "^4.1.2" - -"@lerna/query-graph@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86" - integrity sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA== - dependencies: - "@lerna/package-graph" "3.18.5" - figgy-pudding "^3.5.1" - -"@lerna/resolve-symlink@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" - integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ== - dependencies: - fs-extra "^8.1.0" - npmlog "^4.1.2" - read-cmd-shim "^1.0.1" - -"@lerna/rimraf-dir@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09" - integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA== - dependencies: - "@lerna/child-process" "3.16.5" - npmlog "^4.1.2" - path-exists "^3.0.0" - rimraf "^2.6.2" - -"@lerna/run-lifecycle@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" - integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A== - dependencies: - "@lerna/npm-conf" "3.16.0" - figgy-pudding "^3.5.1" - npm-lifecycle "^3.1.2" - npmlog "^4.1.2" - -"@lerna/run-topologically@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3" - integrity sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg== - dependencies: - "@lerna/query-graph" "3.18.5" - figgy-pudding "^3.5.1" - p-queue "^4.0.0" - -"@lerna/run@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.21.0.tgz#2a35ec84979e4d6e42474fe148d32e5de1cac891" - integrity sha512-fJF68rT3veh+hkToFsBmUJ9MHc9yGXA7LSDvhziAojzOb0AI/jBDp6cEcDQyJ7dbnplba2Lj02IH61QUf9oW0Q== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/npm-run-script" "3.16.5" - "@lerna/output" "3.13.0" - "@lerna/profiler" "3.20.0" - "@lerna/run-topologically" "3.18.5" - "@lerna/timer" "3.13.0" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/symlink-binary@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a" - integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/package" "3.16.0" - fs-extra "^8.1.0" - p-map "^2.1.0" - -"@lerna/symlink-dependencies@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a" - integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/resolve-symlink" "3.16.0" - "@lerna/symlink-binary" "3.17.0" - fs-extra "^8.1.0" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - -"@lerna/timer@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" - integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== - -"@lerna/validation-error@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" - integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== - dependencies: - npmlog "^4.1.2" - -"@lerna/version@3.22.1": - version "3.22.1" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.22.1.tgz#9805a9247a47ee62d6b81bd9fa5fb728b24b59e2" - integrity sha512-PSGt/K1hVqreAFoi3zjD0VEDupQ2WZVlVIwesrE5GbrL2BjXowjCsTDPqblahDUPy0hp6h7E2kG855yLTp62+g== - dependencies: - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.21.0" - "@lerna/conventional-commits" "3.22.0" - "@lerna/github-client" "3.22.0" - "@lerna/gitlab-client" "3.15.0" - "@lerna/output" "3.13.0" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.18.5" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - chalk "^2.3.1" - dedent "^0.7.0" - load-json-file "^5.3.0" - minimatch "^3.0.4" - npmlog "^4.1.2" - p-map "^2.1.0" - p-pipe "^1.2.0" - p-reduce "^1.0.0" - p-waterfall "^1.0.0" - semver "^6.2.0" - slash "^2.0.0" - temp-write "^3.4.0" - write-json-file "^3.2.0" - -"@lerna/write-log-file@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" - integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== - dependencies: - npmlog "^4.1.2" - write-file-atomic "^2.3.0" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== - dependencies: - "@nodelib/fs.stat" "2.0.4" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== - dependencies: - "@nodelib/fs.scandir" "2.1.4" - fastq "^1.6.0" - -"@octokit/auth-token@^2.4.0": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.4.tgz#ee31c69b01d0378c12fd3ffe406030f3d94d3b56" - integrity sha512-LNfGu3Ro9uFAYh10MUZVaT7X2CnNm2C8IDQmabx+3DygYIQjs9FwzFAHN/0t6mu5HEPhxcb1XOuxdpY82vCg2Q== - dependencies: - "@octokit/types" "^6.0.0" - -"@octokit/endpoint@^6.0.1": - version "6.0.10" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.10.tgz#741ce1fa2f4fb77ce8ebe0c6eaf5ce63f565f8e8" - integrity sha512-9+Xef8nT7OKZglfkOMm7IL6VwxXUQyR7DUSU0LH/F7VNqs8vyd7es5pTfz9E7DwUIx7R3pGscxu1EBhYljyu7Q== - dependencies: - "@octokit/types" "^6.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-3.2.0.tgz#d62d0ff7147dbf4d218616b2484ee2a5d023055d" - integrity sha512-X7yW/fpzF3uTAE+LbPD3HEeeU+/49o0V4kNA/yv8jQ3BDpFayv/osTOhY1y1mLXljW2bOJcOCSGZo4jFKPJ6Vw== - -"@octokit/plugin-enterprise-rest@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" - integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== - -"@octokit/plugin-paginate-rest@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" - integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== - dependencies: - "@octokit/types" "^2.0.1" - -"@octokit/plugin-request-log@^1.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.2.tgz#394d59ec734cd2f122431fbaf05099861ece3c44" - integrity sha512-oTJSNAmBqyDR41uSMunLQKMX0jmEXbwD1fpz8FG27lScV3RhtGfBa1/BBLym+PxcC16IBlF7KH9vP1BUYxA+Eg== - -"@octokit/plugin-rest-endpoint-methods@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" - integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== - dependencies: - "@octokit/types" "^2.0.1" - deprecation "^2.3.1" - -"@octokit/request-error@^1.0.2": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" - integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== - dependencies: - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request-error@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.4.tgz#07dd5c0521d2ee975201274c472a127917741262" - integrity sha512-LjkSiTbsxIErBiRh5wSZvpZqT4t0/c9+4dOe0PII+6jXR+oj/h66s7E4a/MghV7iT8W9ffoQ5Skoxzs96+gBPA== - dependencies: - "@octokit/types" "^6.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^5.2.0": - version "5.4.12" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.12.tgz#b04826fa934670c56b135a81447be2c1723a2ffc" - integrity sha512-MvWYdxengUWTGFpfpefBBpVmmEYfkwMoxonIB3sUGp5rhdgwjXL1ejo6JbgzG/QD9B/NYt/9cJX1pxXeSIUCkg== - dependencies: - "@octokit/endpoint" "^6.0.1" - "@octokit/request-error" "^2.0.0" - "@octokit/types" "^6.0.3" - deprecation "^2.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.1" - once "^1.4.0" - universal-user-agent "^6.0.0" - -"@octokit/rest@^16.28.4": - version "16.43.2" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b" - integrity sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ== - dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/plugin-paginate-rest" "^1.1.1" - "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "2.4.0" - "@octokit/request" "^5.2.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" - deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^4.0.0" - -"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": - version "2.16.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2" - integrity sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q== - dependencies: - "@types/node" ">= 8" - -"@octokit/types@^6.0.0", "@octokit/types@^6.0.3": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.5.0.tgz#8f27c52d57eb4096fb05a290f4afc90194e08b19" - integrity sha512-mzCy7lkYQv+kM58W37uTg/mWoJ4nvRDRCkjSdqlrgA28hJEYNJTMYiGTvmq39cdtnMPJd0hshysBEAaH4D5C7w== - dependencies: - "@octokit/openapi-types" "^3.2.0" - "@types/node" ">= 8" - -"@rollup/plugin-commonjs@^17.0.0": - version "17.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-17.0.0.tgz#2ae2228354cf0fbba6cf9f06f30b2c66a974324c" - integrity sha512-/omBIJG1nHQc+bgkYDuLpb/V08QyutP9amOrJRUSlYJZP+b/68gM//D8sxJe3Yry2QnYIr3QjR3x4AlxJEN3GA== - dependencies: - "@rollup/pluginutils" "^3.1.0" - commondir "^1.0.1" - estree-walker "^2.0.1" - glob "^7.1.6" - is-reference "^1.2.1" - magic-string "^0.25.7" - resolve "^1.17.0" - -"@rollup/plugin-node-resolve@^11.1.0": - version "11.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.1.0.tgz#fa0f888297b3aebcd6534e8aba4e6fe01997649a" - integrity sha512-ouBBppRdWJKCllDXGzJ7ZIkYbaq+5TmyP0smt1vdJCFfoZhLi31vhpmjLhyo8lreHf4RoeSNllaWrvSqHpHRog== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@sinonjs/commons@^1.7.0": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" - integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.12" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" - integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" - integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" - integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" - integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== - dependencies: - "@babel/types" "^7.3.0" - -"@types/estree@*": - version "0.0.46" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" - integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/graceful-fs@^4.1.2": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" - integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" - integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@26.x", "@types/jest@^26.0.20": - version "26.0.20" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" - integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== - dependencies: - jest-diff "^26.0.0" - pretty-format "^26.0.0" - -"@types/json-schema@^7.0.3": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== - -"@types/lodash@^4.14.168": - version "4.14.168" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" - integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== - -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== - -"@types/minimist@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" - integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== - -"@types/node@*", "@types/node@>= 8", "@types/node@^14.14.22": - version "14.14.22" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" - integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== - -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/prettier@^2.0.0": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.6.tgz#f4b1efa784e8db479cdb8b14403e2144b1e9ff03" - integrity sha512-6gOkRe7OIioWAXfnO/2lFiv+SJichKVSys1mSsgyrYHSEjk8Ctv4tSR/Odvnu+HWlH2C8j53dahU03XmQdd5fA== - -"@types/prop-types@*": - version "15.7.3" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== - -"@types/react@^17.0.0": - version "17.0.0" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.0.tgz#5af3eb7fad2807092f0046a1302b7823e27919b8" - integrity sha512-aj/L7RIMsRlWML3YB6KZiXB3fV2t41+5RBGYF8z+tAKU43Px8C3cYUZsDvf1/+Bm4FK21QWBrDutu8ZJ/70qOw== - dependencies: - "@types/prop-types" "*" - csstype "^3.0.2" - -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - -"@types/stack-utils@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" - integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== - -"@types/uuid@^8.3.0": - version "8.3.0" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f" - integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ== - -"@types/yargs-parser@*": - version "20.2.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" - integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== - -"@types/yargs@^15.0.0": - version "15.0.12" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.12.tgz#6234ce3e3e3fa32c5db301a170f96a599c960d74" - integrity sha512-f+fD/fQAo3BCbCDlrUpznF1A5Zp9rB0noS5vnoormHSIPFKL0Z2DcUJ3Gxp5ytH4uLRNxy7AwYUC9exZzqGMAw== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@~4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.10.0.tgz#19ed3baf4bc4232c5a7fcd32eaca75c3a5baf9f3" - integrity sha512-h6/V46o6aXpKRlarP1AiJEXuCJ7cMQdlpfMDrcllIgX3dFkLwEBTXAoNP98ZoOmqd1xvymMVRAI4e7yVvlzWEg== - dependencies: - "@typescript-eslint/experimental-utils" "4.10.0" - "@typescript-eslint/scope-manager" "4.10.0" - debug "^4.1.1" - functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.10.0.tgz#dbf5d0f89802d5feaf7d11e5b32df29bbc2f3a0e" - integrity sha512-opX+7ai1sdWBOIoBgpVJrH5e89ra1KoLrJTz0UtWAa4IekkKmqDosk5r6xqRaNJfCXEfteW4HXQAwMdx+jjEmw== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.10.0" - "@typescript-eslint/types" "4.10.0" - "@typescript-eslint/typescript-estree" "4.10.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@~4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.10.0.tgz#1a622b0847b765b2d8f0ede6f0cdd85f03d76031" - integrity sha512-amBvUUGBMadzCW6c/qaZmfr3t9PyevcSWw7hY2FuevdZVp5QPw/K76VSQ5Sw3BxlgYCHZcK6DjIhSZK0PQNsQg== - dependencies: - "@typescript-eslint/scope-manager" "4.10.0" - "@typescript-eslint/types" "4.10.0" - "@typescript-eslint/typescript-estree" "4.10.0" - debug "^4.1.1" - -"@typescript-eslint/scope-manager@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.10.0.tgz#dbd7e1fc63d7363e3aaff742a6f2b8afdbac9d27" - integrity sha512-WAPVw35P+fcnOa8DEic0tQUhoJJsgt+g6DEcz257G7vHFMwmag58EfowdVbiNcdfcV27EFR0tUBVXkDoIvfisQ== - dependencies: - "@typescript-eslint/types" "4.10.0" - "@typescript-eslint/visitor-keys" "4.10.0" - -"@typescript-eslint/types@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.10.0.tgz#12f983750ebad867f0c806e705c1953cd6415789" - integrity sha512-+dt5w1+Lqyd7wIPMa4XhJxUuE8+YF+vxQ6zxHyhLGHJjHiunPf0wSV8LtQwkpmAsRi1lEOoOIR30FG5S2HS33g== - -"@typescript-eslint/typescript-estree@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.10.0.tgz#1e62e45fd57866afd42daf5e9fb6bd4e8dbcfa75" - integrity sha512-mGK0YRp9TOk6ZqZ98F++bW6X5kMTzCRROJkGXH62d2azhghmq+1LNLylkGe6uGUOQzD452NOAEth5VAF6PDo5g== - dependencies: - "@typescript-eslint/types" "4.10.0" - "@typescript-eslint/visitor-keys" "4.10.0" - debug "^4.1.1" - globby "^11.0.1" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/visitor-keys@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.10.0.tgz#9478822329a9bc8ebcc80623d7f79a01da5ee451" - integrity sha512-hPyz5qmDMuZWFtHZkjcCpkAKHX8vdu1G3YsCLEd25ryZgnJfj6FQuJ5/O7R+dB1ueszilJmAFMtlU4CA6se3Jg== - dependencies: - "@typescript-eslint/types" "4.10.0" - eslint-visitor-keys "^2.0.0" - -"@zkochan/cmd-shim@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" - integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg== - dependencies: - is-windows "^1.0.0" - mkdirp-promise "^5.0.1" - mz "^2.5.0" - -JSONStream@^1.0.4, JSONStream@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abab@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1, acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -agent-base@4, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - dependencies: - es6-promisify "^5.0.0" - -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== - dependencies: - es6-promisify "^5.0.0" - -agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== - dependencies: - humanize-ms "^1.2.1" - -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.0.3.tgz#13ae747eff125cafb230ac504b2406cf371eece2" - integrity sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== - dependencies: - type-fest "^0.11.0" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-differ@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" - integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= - -array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== - dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -before-after-hook@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== - -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= - -buffer-from@1.x, buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== - -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= - -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= - -byte-size@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" - integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== - -cacache@^12.0.0, cacache@^12.0.3: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chownr@^1.1.1, chownr@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -columnify@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -compare-versions@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" - integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -config-chain@^1.1.11: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -conventional-changelog-angular@^5.0.3: - version "5.0.12" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" - integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-core@^3.1.6: - version "3.2.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" - integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== - dependencies: - conventional-changelog-writer "^4.0.6" - conventional-commits-parser "^3.0.3" - dateformat "^3.0.0" - get-pkg-repo "^1.0.0" - git-raw-commits "2.0.0" - git-remote-origin-url "^2.0.0" - git-semver-tags "^2.0.3" - lodash "^4.2.1" - normalize-package-data "^2.3.5" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^3.0.0" - -conventional-changelog-preset-loader@^2.1.1: - version "2.3.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== - -conventional-changelog-writer@^4.0.6: - version "4.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz#1ca7880b75aa28695ad33312a1f2366f4b12659f" - integrity sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw== - dependencies: - compare-func "^2.0.0" - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" - handlebars "^4.7.6" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" - -conventional-commits-filter@^2.0.2, conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.0.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.0.tgz#9e261b139ca4b7b29bcebbc54460da36894004ca" - integrity sha512-XmJiXPxsF0JhAKyfA2Nn+rZwYKJ60nanlbSWwwkGwLQFbugsc0gv1rzc7VbbUWAzJfR1qR87/pNgv9NgmxtBMQ== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^2.0.0" - through2 "^4.0.0" - trim-off-newlines "^1.0.0" - -conventional-recommended-bump@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" - integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.1.1" - conventional-commits-filter "^2.0.2" - conventional-commits-parser "^3.0.3" - git-raw-commits "2.0.0" - git-semver-tags "^2.0.3" - meow "^4.0.0" - q "^1.5.1" - -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -cosmiconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -csstype@^3.0.2: - version "3.0.6" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.6.tgz#865d0b5833d7d8d40f4e5b8a6d76aea3de4725ef" - integrity sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw== - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -dargs@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" - integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= - dependencies: - number-is-nan "^1.0.0" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= - -decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decimal.js@^10.2.0: - version "10.2.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" - integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -dezalgo@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= - dependencies: - asap "^2.0.0" - wrappy "1" - -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== - -dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -dot-prop@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" - integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== - dependencies: - is-obj "^1.0.0" - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encoding@^0.1.11: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -env-paths@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" - integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== - -envinfo@^7.3.1: - version "7.7.3" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc" - integrity sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA== - -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.18.0-next.1: - version "1.18.0-next.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" - integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-negative-zero "^2.0.1" - is-regex "^1.1.1" - object-inspect "^1.9.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.3" - string.prototype.trimstart "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escodegen@^1.14.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-scope@^5.0.0, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.0.0, eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== - -eslint@^7.18.0: - version "7.18.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.18.0.tgz#7fdcd2f3715a41fe6295a16234bd69aed2c75e67" - integrity sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.3.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.2.0" - esutils "^2.0.2" - file-entry-cache "^6.0.0" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash "^4.17.20" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.4" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1, estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eventemitter3@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - -exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== - dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-glob@^3.1.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" - integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" - integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== - dependencies: - flat-cache "^3.0.4" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-versions@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" - integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== - dependencies: - semver-regex "^3.1.2" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@8.1.0, fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^2.1.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" - integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== - -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -genfun@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" - integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== - -gensync@^1.0.0-beta.1: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" - integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-pkg-repo@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" - integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= - dependencies: - hosted-git-info "^2.1.4" - meow "^3.3.0" - normalize-package-data "^2.3.0" - parse-github-repo-url "^1.3.0" - through2 "^2.0.0" - -get-port@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" - integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-stream@^4.0.0, get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -git-raw-commits@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" - integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== - dependencies: - dargs "^4.0.1" - lodash.template "^4.0.2" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^2.0.0" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" - integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== - dependencies: - meow "^4.0.0" - semver "^6.0.0" - -git-up@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.2.tgz#10c3d731051b366dc19d3df454bfca3f77913a7c" - integrity sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ== - dependencies: - is-ssh "^1.3.0" - parse-url "^5.0.0" - -git-url-parse@^11.1.2: - version "11.4.3" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.4.3.tgz#1610284edf1f14964180f5b3399ec68b692cfd87" - integrity sha512-LZTTk0nqJnKN48YRtOpR8H5SEfp1oM2tls90NuZmBxN95PnCvmuXGzqQ4QmVirBgKx2KPYfPGteX3/raWjKenQ== - dependencies: - git-up "^4.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= - dependencies: - ini "^1.3.2" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.0.0, glob-parent@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -globby@^11.0.1: - version "11.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" - integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -handlebars@^4.7.6: - version "4.7.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" - integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has-unicode@^2.0.0, has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== - -hosted-git-info@^3.0.6: - version "3.0.7" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.7.tgz#a30727385ea85acfcee94e0aad9e368c792e036c" - integrity sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ== - dependencies: - lru-cache "^6.0.0" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-cache-semantics@^3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== - dependencies: - agent-base "4" - debug "3.1.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-proxy-agent@^2.2.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= - dependencies: - ms "^2.0.0" - -husky@^4.3.8: - version "4.3.8" - resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.8.tgz#31144060be963fd6850e5cc8f019a1dfe194296d" - integrity sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow== - dependencies: - chalk "^4.0.0" - ci-info "^2.0.0" - compare-versions "^3.6.0" - cosmiconfig "^7.0.0" - find-versions "^4.0.0" - opencollective-postinstall "^2.0.2" - pkg-dir "^5.0.0" - please-upgrade-node "^3.2.0" - slash "^3.0.0" - which-pm-runs "^1.0.0" - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - -ignore@^4.0.3, ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.3, infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.2, ini@^1.3.4: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== - dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - -inquirer@^6.2.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4, is-callable@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" - integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-potential-custom-element-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" - integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= - -is-reference@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - -is-regex@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" - integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== - dependencies: - has-symbols "^1.0.1" - -is-ssh@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.2.tgz#a4b82ab63d73976fd8263cceee27f99a88bdae2b" - integrity sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ== - dependencies: - protocols "^1.1.0" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= - dependencies: - text-extensions "^1.0.0" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-windows@^1.0.0, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isomorphic-fetch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== - -istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== - dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" - -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== - dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" - prompts "^2.0.1" - yargs "^15.4.1" - -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" - chalk "^4.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" - -jest-diff@^26.0.0, jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== - dependencies: - chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== - dependencies: - detect-newline "^3.0.0" - -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" - -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" - -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== - -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== - dependencies: - chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" - slash "^3.0.0" - stack-utils "^2.0.2" - -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - -jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== - dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" - -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" - slash "^3.0.0" - -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - cjs-module-lexer "^0.6.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.4.1" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" - chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" - -jest-util@^26.1.0, jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== - dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" - chalk "^4.0.0" - jest-get-type "^26.3.0" - leven "^3.1.0" - pretty-format "^26.6.2" - -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== - dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^26.6.2" - string-length "^4.0.1" - -jest-worker@^26.2.1, jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== - dependencies: - "@jest/core" "^26.6.3" - import-local "^3.0.2" - jest-cli "^26.6.3" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^16.4.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" - integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== - dependencies: - abab "^2.0.3" - acorn "^7.1.1" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.2.0" - data-urls "^2.0.0" - decimal.js "^10.2.0" - domexception "^2.0.1" - escodegen "^1.14.1" - html-encoding-sniffer "^2.0.1" - is-potential-custom-element-name "^1.0.0" - nwsapi "^2.2.0" - parse5 "5.1.1" - request "^2.88.2" - request-promise-native "^1.0.8" - saxes "^5.0.0" - symbol-tree "^3.2.4" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - ws "^7.2.3" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@2.x, json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -lerna@^3.22.1: - version "3.22.1" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62" - integrity sha512-vk1lfVRFm+UuEFA7wkLKeSF7Iz13W+N/vFd48aW2yuS7Kv0RbNm2/qcDPV863056LMfkRlsEe+QYOw3palj5Lg== - dependencies: - "@lerna/add" "3.21.0" - "@lerna/bootstrap" "3.21.0" - "@lerna/changed" "3.21.0" - "@lerna/clean" "3.21.0" - "@lerna/cli" "3.18.5" - "@lerna/create" "3.22.0" - "@lerna/diff" "3.21.0" - "@lerna/exec" "3.21.0" - "@lerna/import" "3.22.0" - "@lerna/info" "3.21.0" - "@lerna/init" "3.21.0" - "@lerna/link" "3.21.0" - "@lerna/list" "3.21.0" - "@lerna/publish" "3.22.1" - "@lerna/run" "3.21.0" - "@lerna/version" "3.22.1" - import-local "^2.0.0" - npmlog "^4.1.2" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-json-file@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" - integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== - dependencies: - graceful-fs "^4.1.15" - parse-json "^4.0.0" - pify "^4.0.1" - strip-bom "^3.0.0" - type-fest "^0.3.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - -lodash.template@^4.0.2, lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.2.1: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -macos-release@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" - integrity sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg== - -magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0, make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@1.x: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" - integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== - dependencies: - agentkeepalive "^3.4.1" - cacache "^12.0.0" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - -map-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" - integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -meow@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" - integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist "^1.1.3" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - -meow@^8.0.0: - version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.2.3, merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -mime-db@1.45.0: - version "1.45.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" - integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.28" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" - integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== - dependencies: - mime-db "1.45.0" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= - dependencies: - mkdirp "*" - -mkdirp@*, mkdirp@1.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -mobx@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.0.4.tgz#8fc3e3629a3346f8afddf5bd954411974744dad1" - integrity sha512-wT2QJT9tW19VSHo9x7RPKU3z/I2Ps6wUS8Kb1OO+kzmg7UY3n4AkcaYG6jq95Lp1R9ohjC/NGYuT2PtuvBjhFg== - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.0.0, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multimatch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" - integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== - dependencies: - array-differ "^2.0.3" - array-union "^1.0.2" - arrify "^1.0.1" - minimatch "^3.0.4" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mz@^2.5.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -neo-async@^2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-fetch-npm@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" - integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" - -node-fetch@^2.5.0, node-fetch@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-gyp@^5.0.2: - version "5.1.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" - integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.1.2" - request "^2.88.0" - rimraf "^2.6.3" - semver "^5.7.1" - tar "^4.4.12" - which "^1.3.1" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1" - integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - -nopt@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a" - integrity sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw== - dependencies: - hosted-git-info "^3.0.6" - resolve "^1.17.0" - semver "^7.3.2" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-lifecycle@^3.1.2: - version "3.1.5" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" - integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== - dependencies: - byline "^5.0.0" - graceful-fs "^4.1.15" - node-gyp "^5.0.2" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" - -npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" - integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== - dependencies: - hosted-git-info "^2.7.1" - osenv "^0.1.5" - semver "^5.6.0" - validate-npm-package-name "^3.0.0" - -npm-packlist@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - -npm-pick-manifest@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" - integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== - dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^6.0.0" - semver "^5.4.1" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" - integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -octokit-pagination-methods@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" - integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -opencollective-postinstall@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" - integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4, osenv@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" - integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= - dependencies: - p-reduce "^1.0.0" - -p-map@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-pipe@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" - integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= - -p-queue@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346" - integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg== - dependencies: - eventemitter3 "^3.1.0" - -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -p-waterfall@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" - integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= - dependencies: - p-reduce "^1.0.0" - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-github-repo-url@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" - integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-path@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.3.tgz#82d81ec3e071dcc4ab49aa9f2c9c0b8966bb22bf" - integrity sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA== - dependencies: - is-ssh "^1.3.0" - protocols "^1.4.0" - qs "^6.9.4" - query-string "^6.13.8" - -parse-url@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.2.tgz#856a3be1fcdf78dc93fc8b3791f169072d898b59" - integrity sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA== - dependencies: - is-ssh "^1.3.0" - normalize-url "^3.3.0" - parse-path "^4.0.0" - protocols "^1.4.0" - -parse5@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-dir@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" - integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== - dependencies: - find-up "^5.0.0" - -please-upgrade-node@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== - dependencies: - semver-compare "^1.0.0" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prettier@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" - integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== - -pretty-format@^26.0.0, pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= - dependencies: - err-code "^1.0.0" - retry "^0.10.0" - -prompts@^2.0.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" - integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= - dependencies: - read "1" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -protocols@^1.1.0, protocols@^1.4.0: - version "1.4.8" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" - integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== - -protoduck@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" - integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== - dependencies: - genfun "^5.0.0" - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@^6.9.4: - version "6.9.6" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" - integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -query-string@^6.13.8: - version "6.13.8" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.8.tgz#8cf231759c85484da3cf05a851810d8e825c1159" - integrity sha512-jxJzQI2edQPE/NPUOusNjO/ZOGqr1o2OBa/3M00fU76FsLXDVbJDv/p7ng5OdQyorKrkRz1oqfwmbe5MAMePQg== - dependencies: - decode-uri-component "^0.2.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -react-is@^17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" - integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== - -read-cmd-shim@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" - integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== - dependencies: - graceful-fs "^4.1.2" - -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: - version "2.1.2" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" - integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== - dependencies: - glob "^7.1.1" - json-parse-even-better-errors "^2.3.0" - normalize-package-data "^2.0.0" - npm-normalize-package-bin "^1.0.0" - -read-package-tree@^5.1.6: - version "5.3.1" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" - integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== - dependencies: - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - util-promisify "^2.1.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -read@1, read@~1.0.1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= - dependencies: - mute-stream "~0.0.4" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.2: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdir-scoped-modules@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^3.0.0, regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.8: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.0, request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.10.0, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== - dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-exclude-dependencies-from-bundle@^1.1.17: - version "1.1.17" - resolved "https://registry.yarnpkg.com/rollup-plugin-exclude-dependencies-from-bundle/-/rollup-plugin-exclude-dependencies-from-bundle-1.1.17.tgz#163a8e348deb7cce0879fbf30bc4fb408969031c" - integrity sha512-hvD2C2NTOmETcN2/Iws4pRJZ4Z1QiCktV4c4mal2AXz04ZCx4oyMtdFPIZ6tFTGRu3c2Rbn/B0jROjJoM/qI8A== - -rollup-plugin-terser@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== - dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - -rollup-plugin-typescript2@^0.29.0: - version "0.29.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.29.0.tgz#b7ad83f5241dbc5bdf1e98d9c3fca005ffe39e1a" - integrity sha512-YytahBSZCIjn/elFugEGQR5qTsVhxhUwGZIsA9TmrSsC88qroGo65O5HZP/TTArH2dm0vUmYWhKchhwi2wL9bw== - dependencies: - "@rollup/pluginutils" "^3.1.0" - find-cache-dir "^3.3.1" - fs-extra "8.1.0" - resolve "1.17.0" - tslib "2.0.1" - -rollup@^2.38.0: - version "2.38.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.38.0.tgz#57942d5a10826cb12ed1f19c261f774efa502d2d" - integrity sha512-ay9zDiNitZK/LNE/EM2+v5CZ7drkB2xyDljvb1fQJCGnq43ZWRkhxN145oV8GmoW1YNi4sA/1Jdkr2LfawJoXw== - optionalDependencies: - fsevents "~2.1.2" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" - integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rxjs@^6.4.0, rxjs@^6.6.3: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -saxes@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= - -semver-regex@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807" - integrity sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA== - -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.x, semver@^7.2.1, semver@^7.3.2: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slide@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= - -smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socks-proxy-agent@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - -socks@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" - integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== - dependencies: - ip "1.1.5" - smart-buffer "^4.1.0" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= - dependencies: - is-plain-obj "^1.0.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.6, source-map-support@~0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3, source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== - -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split2@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" - integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== - dependencies: - through2 "^2.0.2" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^6.0.0, ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== - dependencies: - figgy-pudding "^3.5.1" - -stack-utils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" - integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== - dependencies: - escape-string-regexp "^2.0.0" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= - -string-length@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" - integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.trimend@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" - integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" - integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strong-log-transformer@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -table@^6.0.4: - version "6.0.7" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" - integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== - dependencies: - ajv "^7.0.2" - lodash "^4.17.20" - slice-ansi "^4.0.0" - string-width "^4.2.0" - -tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= - -temp-write@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" - integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= - dependencies: - graceful-fs "^4.1.2" - is-stream "^1.1.0" - make-dir "^1.0.0" - pify "^3.0.0" - temp-dir "^1.0.0" - uuid "^3.0.1" - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -terser@^5.0.0: - version "5.5.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.5.1.tgz#540caa25139d6f496fdea056e414284886fb2289" - integrity sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ== - dependencies: - commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.19" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - -through2@^2.0.0, through2@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" - integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== - dependencies: - inherits "^2.0.4" - readable-stream "2 || 3" - -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== - dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" - punycode "^2.1.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - -tr46@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" - integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== - dependencies: - punycode "^2.1.1" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= - -trim-newlines@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" - integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== - -trim-off-newlines@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" - integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= - -ts-jest@^26.4.4: - version "26.4.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.4.tgz#61f13fb21ab400853c532270e52cc0ed7e502c49" - integrity sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg== - dependencies: - "@types/jest" "26.x" - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - jest-util "^26.1.0" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - mkdirp "1.x" - semver "7.x" - yargs-parser "20.x" - -tslib@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" - integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== - -tslib@^1.8.1, tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.17.1: - version "3.19.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.19.1.tgz#d8566e0c51c82f32f9c25a4d367cd62409a547a9" - integrity sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" - integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== - -uglify-js@^3.1.4: - version "3.12.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.5.tgz#83241496087c640efe9dfc934832e71725aba008" - integrity sha512-SgpgScL4T7Hj/w/GexjnBHi3Ien9WS1Rpfg5y91WXMj9SY997ZCQU76mH4TpLwwfmMvoOU8wiaRkIf6NaH3mtg== - -uid-number@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= - -umask@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -universal-user-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" - integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== - dependencies: - os-name "^3.1.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util-promisify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" - integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= - dependencies: - object.getownpropertydescriptors "^2.0.3" - -uuid@^3.0.1, uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.0, uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache@^2.0.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" - integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== - -v8-to-istanbul@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07" - integrity sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= - dependencies: - builtins "^1.0.3" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-fetch@^3.4.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz#605a2cd0a7146e5db141e29d1c62ab84c0c4c868" - integrity sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A== - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -whatwg-url@^8.0.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" - integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^2.0.2" - webidl-conversions "^6.1.0" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which-pm-runs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" - integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= - -which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -windows-release@^3.1.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" - integrity sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg== - dependencies: - execa "^1.0.0" - -word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-json-file@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" - integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - pify "^3.0.0" - sort-keys "^2.0.0" - write-file-atomic "^2.0.0" - -write-json-file@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" - integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.15" - make-dir "^2.1.0" - pify "^4.0.1" - sort-keys "^2.0.0" - write-file-atomic "^2.4.2" - -write-pkg@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" - integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== - dependencies: - sort-keys "^2.0.0" - write-json-file "^2.2.0" - -ws@^7.2.3: - version "7.4.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.2.tgz#782100048e54eb36fe9843363ab1c68672b261dd" - integrity sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" - integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== - -yargs-parser@20.x, yargs-parser@^20.2.3: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" - integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^14.2.2: - version "14.2.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" - integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.1" - -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@ampproject/remapping@npm:^2.1.0": + version: 2.2.0 + resolution: "@ampproject/remapping@npm:2.2.0" + dependencies: + "@jridgewell/gen-mapping": ^0.1.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/code-frame@npm:7.18.6" + dependencies: + "@babel/highlight": ^7.18.6 + checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/compat-data@npm:7.20.5" + checksum: 523790c43ef6388fae91d1ca9acf1ab0e1b22208dcd39c0e5e7a6adf0b48a133f1831be8d5931a72ecd48860f3e3fb777cb89840794abd8647a5c8e5cfab484e + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": + version: 7.20.7 + resolution: "@babel/core@npm:7.20.7" + dependencies: + "@ampproject/remapping": ^2.1.0 + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.7 + "@babel/helper-compilation-targets": ^7.20.7 + "@babel/helper-module-transforms": ^7.20.7 + "@babel/helpers": ^7.20.7 + "@babel/parser": ^7.20.7 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.7 + "@babel/types": ^7.20.7 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.1 + semver: ^6.3.0 + checksum: f2714f15db24425145ca70b838adcd945aba7d1358ca2513615db6c3bdaebe5f8e4162c4c6c30f8dcab42bf634b0055d150414c0ecf52a3341bb5da3dde2d987 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.20.7, @babel/generator@npm:^7.7.2": + version: 7.20.7 + resolution: "@babel/generator@npm:7.20.7" + dependencies: + "@babel/types": ^7.20.7 + "@jridgewell/gen-mapping": ^0.3.2 + jsesc: ^2.5.1 + checksum: 84b6983ffdb50c80c1c2e3f3c32617a7133d8effd1065f3e0f9bba188a7d54ab42a4dd5e42b61b843c65f9dd1aa870036ff0f848ebd42707aaa8a2b6d31d04f5 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-compilation-targets@npm:7.20.7" + dependencies: + "@babel/compat-data": ^7.20.5 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.21.3 + lru-cache: ^5.1.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 8c32c873ba86e2e1805b30e0807abd07188acbe00ebb97576f0b09061cc65007f1312b589eccb4349c5a8c7f8bb9f2ab199d41da7030bf103d9f347dcd3a3cf4 + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-environment-visitor@npm:7.18.9" + checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-function-name@npm:7.19.0" + dependencies: + "@babel/template": ^7.18.10 + "@babel/types": ^7.19.0 + checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-hoist-variables@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-module-imports@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-module-transforms@npm:7.20.7" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-simple-access": ^7.20.2 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: fea1b43df6b2b673d51ee1ff1f15e7a2849eacf504dd51ff192f5259ffc5b978c0a3264426a94ce416fd9fc18355f85815eefb4c59da7d5f8e9e7fc2e8bef644 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.20.2 + resolution: "@babel/helper-plugin-utils@npm:7.20.2" + checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-simple-access@npm:7.20.2" + dependencies: + "@babel/types": ^7.20.2 + checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-split-export-declaration@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/helper-string-parser@npm:7.19.4" + checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": + version: 7.19.1 + resolution: "@babel/helper-validator-identifier@npm:7.19.1" + checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-validator-option@npm:7.18.6" + checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helpers@npm:7.20.7" + dependencies: + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: 3fb10df3510ba7116a180d5fd983d0f558f7a65c3d599385dba991bff66b74174c88881bc12c2b3cf7284294fcac5b301ded49a8b0098bdf2ef61d0cad8010db + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/highlight@npm:7.18.6" + dependencies: + "@babel/helper-validator-identifier": ^7.18.6 + chalk: ^2.0.0 + js-tokens: ^4.0.0 + checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/parser@npm:7.20.7" + bin: + parser: ./bin/babel-parser.js + checksum: 25b5266e3bd4be837092685f6b7ef886f1308ff72659a24342eb646ae5014f61ed1771ce8fc20636c890fcae19304fc72c069564ca6075207b7fbf3f75367275 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.8.3": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": ^7.12.13 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.18.6 + resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6d37ea972970195f1ffe1a54745ce2ae456e0ac6145fae9aa1480f297248b262ea6ebb93010eddb86ebfacb94f57c05a1fc5d232b9a67325b09060299d515c67 + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.8.3": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.20.0 + resolution: "@babel/plugin-syntax-typescript@npm:7.20.0" + dependencies: + "@babel/helper-plugin-utils": ^7.19.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6189c0b5c32ba3c9a80a42338bd50719d783b20ef29b853d4f03929e971913d3cefd80184e924ae98ad6db09080be8fe6f1ffde9a6db8972523234f0274d36f7 + languageName: node + linkType: hard + +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.3.3": + version: 7.20.7 + resolution: "@babel/template@npm:7.20.7" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.7.2": + version: 7.20.8 + resolution: "@babel/traverse@npm:7.20.8" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.7 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: d169d14e2db7f0746c1c03de2be770f158a230ad3ac9e32e922dda808b7d717a370b13660adf707a4f0477c8f1fb546b420c4bc301d762e07ad628bbb57b16e4 + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": + version: 7.20.7 + resolution: "@babel/types@npm:7.20.7" + dependencies: + "@babel/helper-string-parser": ^7.19.4 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: b39af241f0b72bba67fd6d0d23914f6faec8c0eba8015c181cbd5ea92e59fc91a52a1ab490d3520c7dbd19ddb9ebb76c476308f6388764f16d8201e37fae6811 + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 + languageName: node + linkType: hard + +"@datx/schema@workspace:packages/datx": + version: 0.0.0-use.local + resolution: "@datx/schema@workspace:packages/datx" + dependencies: + "@swc/core": ^1.3.36 + "@types/jest": ^29.4.0 + "@types/node": ^18.14.2 + jest: ^29.4.3 + jest-environment-jsdom: ^29.4.3 + ts-jest: ^29.0.5 + tslib: ~2.5.0 + tsup: ^6.6.3 + type-fest: ^3.6.1 + typescript: ~4.9.5 + languageName: unknown + linkType: soft + +"@esbuild/android-arm64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/android-arm64@npm:0.17.10" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/android-arm@npm:0.17.10" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/android-x64@npm:0.17.10" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/darwin-arm64@npm:0.17.10" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/darwin-x64@npm:0.17.10" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/freebsd-arm64@npm:0.17.10" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/freebsd-x64@npm:0.17.10" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/linux-arm64@npm:0.17.10" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/linux-arm@npm:0.17.10" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/linux-ia32@npm:0.17.10" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/linux-loong64@npm:0.17.10" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/linux-mips64el@npm:0.17.10" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/linux-ppc64@npm:0.17.10" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/linux-riscv64@npm:0.17.10" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/linux-s390x@npm:0.17.10" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/linux-x64@npm:0.17.10" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/netbsd-x64@npm:0.17.10" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/openbsd-x64@npm:0.17.10" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/sunos-x64@npm:0.17.10" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/win32-arm64@npm:0.17.10" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/win32-ia32@npm:0.17.10" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.17.10": + version: 0.17.10 + resolution: "@esbuild/win32-x64@npm:0.17.10" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.0.0": + version: 2.0.0 + resolution: "@eslint/eslintrc@npm:2.0.0" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.4.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: 31119c8ca06723d80384f18f5c78e0530d8e6306ad36379868650131a8b10dd7cffd7aff79a5deb3a2e9933660823052623d268532bae9538ded53d5b19a69a6 + languageName: node + linkType: hard + +"@eslint/js@npm:8.35.0": + version: 8.35.0 + resolution: "@eslint/js@npm:8.35.0" + checksum: 6687ceff659a6d617e37823f809dc9c4b096535961a81acead27d26b1a51a4cf608a5e59d831ddd57f24f6f8bb99340a4a0e19f9c99b390fbb4b275f51ed5f5e + languageName: node + linkType: hard + +"@gar/promisify@npm:^1.1.3": + version: 1.1.3 + resolution: "@gar/promisify@npm:1.1.3" + checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.11.8": + version: 0.11.8 + resolution: "@humanwhocodes/config-array@npm:0.11.8" + dependencies: + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.5 + checksum: 0fd6b3c54f1674ce0a224df09b9c2f9846d20b9e54fabae1281ecfc04f2e6ad69bf19e1d6af6a28f88e8aa3990168b6cb9e1ef755868c3256a630605ec2cb1d3 + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.1": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 + languageName: node + linkType: hard + +"@hutson/parse-repository-url@npm:^3.0.0": + version: 3.0.2 + resolution: "@hutson/parse-repository-url@npm:3.0.2" + checksum: 39992c5f183c5ca3d761d6ed9dfabcb79b5f3750bf1b7f3532e1dc439ca370138bbd426ee250fdaba460bc948e6761fbefd484b8f4f36885d71ded96138340d1 + languageName: node + linkType: hard + +"@infinumjs/eslint-config-core-js@npm:^3.3.1": + version: 3.3.1 + resolution: "@infinumjs/eslint-config-core-js@npm:3.3.1" + peerDependencies: + eslint: ">=8.14" + checksum: db00821e2d71f783f845f813a04694cd5f064ff4e1ac471ba0ee7db95fcdda1a8e20431c888cb88066efdaf4ee0812344ce053715957c3785896cbcf5b940791 + languageName: node + linkType: hard + +"@infinumjs/eslint-config-core-ts@npm:^3.3.1": + version: 3.3.1 + resolution: "@infinumjs/eslint-config-core-ts@npm:3.3.1" + dependencies: + "@infinumjs/eslint-config-core-js": ^3.3.1 + peerDependencies: + "@typescript-eslint/eslint-plugin": ">=5" + "@typescript-eslint/parser": ">=5" + eslint: ">=8.14" + typescript: ">=3" + checksum: b25515466dd58dc041d5a728e4268a000fccd674bdf1a353c6703282f8db653cea4a6210a80e3d39c9c3d992223d148a4bfe5ebc9d8a1109b0913422283a9c98 + languageName: node + linkType: hard + +"@isaacs/string-locale-compare@npm:^1.1.0": + version: 1.1.0 + resolution: "@isaacs/string-locale-compare@npm:1.1.0" + checksum: 7287da5d11497b82c542d3c2abe534808015be4f4883e71c26853277b5456f6bbe4108535db847a29f385ad6dc9318ffb0f55ee79bb5f39993233d7dccf8751d + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + dependencies: + camelcase: ^5.3.1 + find-up: ^4.1.0 + get-package-type: ^0.1.0 + js-yaml: ^3.13.1 + resolve-from: ^5.0.0 + checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + languageName: node + linkType: hard + +"@jest/console@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/console@npm:29.4.3" + dependencies: + "@jest/types": ^29.4.3 + "@types/node": "*" + chalk: ^4.0.0 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 + slash: ^3.0.0 + checksum: 8d9b163febe735153b523db527742309f4d598eda22f17f04e030060329bd3da4de7420fc1f7812f7a16f08273654a7de094c4b4e8b81a99dbfc17cfb1629008 + languageName: node + linkType: hard + +"@jest/core@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/core@npm:29.4.3" + dependencies: + "@jest/console": ^29.4.3 + "@jest/reporters": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + ci-info: ^3.2.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-changed-files: ^29.4.3 + jest-config: ^29.4.3 + jest-haste-map: ^29.4.3 + jest-message-util: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-resolve-dependencies: ^29.4.3 + jest-runner: ^29.4.3 + jest-runtime: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 + jest-watcher: ^29.4.3 + micromatch: ^4.0.4 + pretty-format: ^29.4.3 + slash: ^3.0.0 + strip-ansi: ^6.0.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 4aa10644d66f44f051d5dd9cdcedce27acc71216dbcc5e7adebdea458e27aefe27c78f457d7efd49f58b968c35f42de5a521590876e2013593e675120b9e6ab1 + languageName: node + linkType: hard + +"@jest/environment@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/environment@npm:29.4.3" + dependencies: + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 + "@types/node": "*" + jest-mock: ^29.4.3 + checksum: 7c1b0cc4e84b90f8a3bbeca9bbf088882c88aee70a81b3b8e24265dcb1cbc302cd1eee3319089cf65bfd39adbaea344903c712afea106cb8da6c86088d99c5fb + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/expect-utils@npm:29.3.1" + dependencies: + jest-get-type: ^29.2.0 + checksum: 7f3b853eb1e4299988f66b9aa49c1aacb7b8da1cf5518dca4ccd966e865947eed8f1bde6c8f5207d8400e9af870112a44b57aa83515ad6ea5e4a04a971863adb + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/expect-utils@npm:29.4.3" + dependencies: + jest-get-type: ^29.4.3 + checksum: 2bbed39ff2fb59f5acac465a1ce7303e3b4b62b479e4f386261986c9827f7f799ea912761e22629c5daf10addf8513f16733c14a29c2647bb66d4ee625e9ff92 + languageName: node + linkType: hard + +"@jest/expect@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/expect@npm:29.4.3" + dependencies: + expect: ^29.4.3 + jest-snapshot: ^29.4.3 + checksum: 08d0d40077ec99a7491fe59d05821dbd31126cfba70875855d8a063698b7126b5f6c309c50811caacc6ae2f727c6e44f51bdcf1d6c1ea832b4f020045ef22d45 + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/fake-timers@npm:29.4.3" + dependencies: + "@jest/types": ^29.4.3 + "@sinonjs/fake-timers": ^10.0.2 + "@types/node": "*" + jest-message-util: ^29.4.3 + jest-mock: ^29.4.3 + jest-util: ^29.4.3 + checksum: adaceb9143c395cccf3d7baa0e49b7042c3092a554e8283146df19926247e34c21b5bde5688bb90e9e87b4a02e4587926c5d858ee0a38d397a63175d0a127874 + languageName: node + linkType: hard + +"@jest/globals@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/globals@npm:29.4.3" + dependencies: + "@jest/environment": ^29.4.3 + "@jest/expect": ^29.4.3 + "@jest/types": ^29.4.3 + jest-mock: ^29.4.3 + checksum: ea76b546ceb4aa5ce2bb3726df12f989b23150b51c9f7664790caa81b943012a657cf3a8525498af1c3518cdb387f54b816cfba1b0ddd22c7b20f03b1d7290b4 + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/reporters@npm:29.4.3" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@jest/console": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 + "@jridgewell/trace-mapping": ^0.3.15 + "@types/node": "*" + chalk: ^4.0.0 + collect-v8-coverage: ^1.0.0 + exit: ^0.1.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + istanbul-lib-coverage: ^3.0.0 + istanbul-lib-instrument: ^5.1.0 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 + jest-worker: ^29.4.3 + slash: ^3.0.0 + string-length: ^4.0.1 + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 7aa2e429c915bd96c3334962addd69d2bbf52065725757ddde26b293f8c4420a1e8c65363cc3e1e5ec89100a5273ccd3771bec58325a2cc0d97afdc81995073a + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.0.0": + version: 29.0.0 + resolution: "@jest/schemas@npm:29.0.0" + dependencies: + "@sinclair/typebox": ^0.24.1 + checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/schemas@npm:29.4.3" + dependencies: + "@sinclair/typebox": ^0.25.16 + checksum: ac754e245c19dc39e10ebd41dce09040214c96a4cd8efa143b82148e383e45128f24599195ab4f01433adae4ccfbe2db6574c90db2862ccd8551a86704b5bebd + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/source-map@npm:29.4.3" + dependencies: + "@jridgewell/trace-mapping": ^0.3.15 + callsites: ^3.0.0 + graceful-fs: ^4.2.9 + checksum: 2301d225145f8123540c0be073f35a80fd26a2f5e59550fd68525d8cea580fb896d12bf65106591ffb7366a8a19790076dbebc70e0f5e6ceb51f81827ed1f89c + languageName: node + linkType: hard + +"@jest/test-result@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/test-result@npm:29.4.3" + dependencies: + "@jest/console": ^29.4.3 + "@jest/types": ^29.4.3 + "@types/istanbul-lib-coverage": ^2.0.0 + collect-v8-coverage: ^1.0.0 + checksum: 164f102b96619ec283c2c39e208b8048e4674f75bf3c3a4f2e95048ae0f9226105add684b25f10d286d91c221625f877e2c1cfc3da46c42d7e1804da239318cb + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/test-sequencer@npm:29.4.3" + dependencies: + "@jest/test-result": ^29.4.3 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.4.3 + slash: ^3.0.0 + checksum: 145e1fa9379e5be3587bde6d585b8aee5cf4442b06926928a87e9aec7de5be91b581711d627c6ca13144d244fe05e5d248c13b366b51bedc404f9dcfbfd79e9e + languageName: node + linkType: hard + +"@jest/transform@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/transform@npm:29.4.3" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.4.3 + "@jridgewell/trace-mapping": ^0.3.15 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-util: ^29.4.3 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.2 + checksum: 082d74e04044213aa7baa8de29f8383e5010034f867969c8602a2447a4ef2f484cfaf2491eba3179ce42f369f7a0af419cbd087910f7e5caf7aa5d1fe03f2ff9 + languageName: node + linkType: hard + +"@jest/types@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/types@npm:29.3.1" + dependencies: + "@jest/schemas": ^29.0.0 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 6f9faf27507b845ff3839c1adc6dbd038d7046d03d37e84c9fc956f60718711a801a5094c7eeee6b39ccf42c0ab61347fdc0fa49ab493ae5a8efd2fd41228ee8 + languageName: node + linkType: hard + +"@jest/types@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/types@npm:29.4.3" + dependencies: + "@jest/schemas": ^29.4.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 1756f4149d360f98567f56f434144f7af23ed49a2c42889261a314df6b6654c2de70af618fb2ee0ee39cadaf10835b885845557184509503646c9cb9dcc02bac + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.1.0": + version: 0.1.1 + resolution: "@jridgewell/gen-mapping@npm:0.1.1" + dependencies: + "@jridgewell/set-array": ^1.0.0 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.2 + resolution: "@jridgewell/gen-mapping@npm:0.3.2" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:3.1.0": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.17 + resolution: "@jridgewell/trace-mapping@npm:0.3.17" + dependencies: + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 9d703b859cff5cd83b7308fd457a431387db5db96bd781a63bf48e183418dd9d3d44e76b9e4ae13237f6abeeb25d739ec9215c1d5bfdd08f66f750a50074a339 + languageName: node + linkType: hard + +"@lerna/child-process@npm:6.5.1": + version: 6.5.1 + resolution: "@lerna/child-process@npm:6.5.1" + dependencies: + chalk: ^4.1.0 + execa: ^5.0.0 + strong-log-transformer: ^2.1.0 + checksum: 78629ce48ce4b9464c3a51f30ed304915591fd2755398a3adc41a66140e34f1408ce41ac9cf96203c0be68930e39e3347ce92d677e5047ec94103576f68a26ea + languageName: node + linkType: hard + +"@lerna/create@npm:6.5.1": + version: 6.5.1 + resolution: "@lerna/create@npm:6.5.1" + dependencies: + "@lerna/child-process": 6.5.1 + dedent: ^0.7.0 + fs-extra: ^9.1.0 + init-package-json: ^3.0.2 + npm-package-arg: 8.1.1 + p-reduce: ^2.1.0 + pacote: ^13.6.1 + pify: ^5.0.0 + semver: ^7.3.4 + slash: ^3.0.0 + validate-npm-package-license: ^3.0.4 + validate-npm-package-name: ^4.0.0 + yargs-parser: 20.2.4 + checksum: dd2c7ffd555468b7e11302de5f2a4da65fa944769c6962be1742db144ee8cf415adf240cfc3a7eca20b8749d7e0f77e716f92359a19431356fce0e2d103e32a5 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@npmcli/arborist@npm:5.3.0": + version: 5.3.0 + resolution: "@npmcli/arborist@npm:5.3.0" + dependencies: + "@isaacs/string-locale-compare": ^1.1.0 + "@npmcli/installed-package-contents": ^1.0.7 + "@npmcli/map-workspaces": ^2.0.3 + "@npmcli/metavuln-calculator": ^3.0.1 + "@npmcli/move-file": ^2.0.0 + "@npmcli/name-from-folder": ^1.0.1 + "@npmcli/node-gyp": ^2.0.0 + "@npmcli/package-json": ^2.0.0 + "@npmcli/run-script": ^4.1.3 + bin-links: ^3.0.0 + cacache: ^16.0.6 + common-ancestor-path: ^1.0.1 + json-parse-even-better-errors: ^2.3.1 + json-stringify-nice: ^1.1.4 + mkdirp: ^1.0.4 + mkdirp-infer-owner: ^2.0.0 + nopt: ^5.0.0 + npm-install-checks: ^5.0.0 + npm-package-arg: ^9.0.0 + npm-pick-manifest: ^7.0.0 + npm-registry-fetch: ^13.0.0 + npmlog: ^6.0.2 + pacote: ^13.6.1 + parse-conflict-json: ^2.0.1 + proc-log: ^2.0.0 + promise-all-reject-late: ^1.0.0 + promise-call-limit: ^1.0.1 + read-package-json-fast: ^2.0.2 + readdir-scoped-modules: ^1.1.0 + rimraf: ^3.0.2 + semver: ^7.3.7 + ssri: ^9.0.0 + treeverse: ^2.0.0 + walk-up-path: ^1.0.0 + bin: + arborist: bin/index.js + checksum: 7f99f451ba625dd3532e7a69b27cc399cab1e7ef2a069bbc04cf22ef9d16a0076f8f5fb92c4cd146c256cd8a41963b2e417684f063a108e96939c440bad0e95e + languageName: node + linkType: hard + +"@npmcli/fs@npm:^2.1.0": + version: 2.1.2 + resolution: "@npmcli/fs@npm:2.1.2" + dependencies: + "@gar/promisify": ^1.1.3 + semver: ^7.3.5 + checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 + languageName: node + linkType: hard + +"@npmcli/git@npm:^3.0.0": + version: 3.0.2 + resolution: "@npmcli/git@npm:3.0.2" + dependencies: + "@npmcli/promise-spawn": ^3.0.0 + lru-cache: ^7.4.4 + mkdirp: ^1.0.4 + npm-pick-manifest: ^7.0.0 + proc-log: ^2.0.0 + promise-inflight: ^1.0.1 + promise-retry: ^2.0.1 + semver: ^7.3.5 + which: ^2.0.2 + checksum: bdfd1229bb1113ad4883ef89b74b5dc442a2c96225d830491dd0dec4fa83d083b93cde92b6978d4956a8365521e61bc8dc1891fb905c7c693d5d6aa178f2ab44 + languageName: node + linkType: hard + +"@npmcli/installed-package-contents@npm:^1.0.7": + version: 1.0.7 + resolution: "@npmcli/installed-package-contents@npm:1.0.7" + dependencies: + npm-bundled: ^1.1.1 + npm-normalize-package-bin: ^1.0.1 + bin: + installed-package-contents: index.js + checksum: a4a29b99d439827ce2e7817c1f61b56be160e640696e31dc513a2c8a37c792f75cdb6258ec15a1e22904f20df0a8a3019dd3766de5e6619f259834cf64233538 + languageName: node + linkType: hard + +"@npmcli/map-workspaces@npm:^2.0.3": + version: 2.0.4 + resolution: "@npmcli/map-workspaces@npm:2.0.4" + dependencies: + "@npmcli/name-from-folder": ^1.0.1 + glob: ^8.0.1 + minimatch: ^5.0.1 + read-package-json-fast: ^2.0.3 + checksum: cc8d662ac5115ad9822742a11e11d2d32eda74214bd0f4efec30c9cd833975b5b4c8409fe54ddbb451b040b17a943f770976506cba0f26cfccd58d99b5880d6f + languageName: node + linkType: hard + +"@npmcli/metavuln-calculator@npm:^3.0.1": + version: 3.1.1 + resolution: "@npmcli/metavuln-calculator@npm:3.1.1" + dependencies: + cacache: ^16.0.0 + json-parse-even-better-errors: ^2.3.1 + pacote: ^13.0.3 + semver: ^7.3.5 + checksum: dc9846fdb82a1f4274ff8943f81452c75615bd9bca523c862956ea2c32e18c5a4be5572e169104d3a0eb262b7ede72c8dbbc202a4ab3b3f4946fa55f226dcc64 + languageName: node + linkType: hard + +"@npmcli/move-file@npm:^2.0.0": + version: 2.0.1 + resolution: "@npmcli/move-file@npm:2.0.1" + dependencies: + mkdirp: ^1.0.4 + rimraf: ^3.0.2 + checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 + languageName: node + linkType: hard + +"@npmcli/name-from-folder@npm:^1.0.1": + version: 1.0.1 + resolution: "@npmcli/name-from-folder@npm:1.0.1" + checksum: 67339f4096e32b712d2df0250cc95c087569f09e657d7f81a1760fa2cc5123e29c3c3e1524388832310ba2d96ec4679985b643b44627f6a51f4a00c3b0075de9 + languageName: node + linkType: hard + +"@npmcli/node-gyp@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/node-gyp@npm:2.0.0" + checksum: b6bbf0015000f9b64d31aefdc30f244b0348c57adb64017667e0304e96c38644d83da46a4581252652f5d606268df49118f9c9993b41d8020f62b7b15dd2c8d8 + languageName: node + linkType: hard + +"@npmcli/package-json@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/package-json@npm:2.0.0" + dependencies: + json-parse-even-better-errors: ^2.3.1 + checksum: 7a598e42d2778654ec87438ebfafbcbafbe5a5f5e89ed2ca1db6ca3f94ef14655e304aa41f77632a2a3f5c66b6bd5960bd9370e0ceb4902ea09346720364f9e4 + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/promise-spawn@npm:3.0.0" + dependencies: + infer-owner: ^1.0.4 + checksum: 3454465a2731cea5875ba51f80873e2205e5bd878c31517286b0ede4ea931c7bf3de895382287e906d03710fff6f9e44186bd0eee068ce578901c5d3b58e7692 + languageName: node + linkType: hard + +"@npmcli/run-script@npm:4.1.7": + version: 4.1.7 + resolution: "@npmcli/run-script@npm:4.1.7" + dependencies: + "@npmcli/node-gyp": ^2.0.0 + "@npmcli/promise-spawn": ^3.0.0 + node-gyp: ^9.0.0 + read-package-json-fast: ^2.0.3 + which: ^2.0.2 + checksum: 87c32b12fed981fe8a48de985dd1ae0350bcda2830ca4a35efe4b2b96932905cccd04e6e2de5bfea8ed4e2bf3b6f8315630ff9a09c72f80ff3c49f19a9fc80ff + languageName: node + linkType: hard + +"@npmcli/run-script@npm:^4.1.0, @npmcli/run-script@npm:^4.1.3": + version: 4.2.1 + resolution: "@npmcli/run-script@npm:4.2.1" + dependencies: + "@npmcli/node-gyp": ^2.0.0 + "@npmcli/promise-spawn": ^3.0.0 + node-gyp: ^9.0.0 + read-package-json-fast: ^2.0.3 + which: ^2.0.2 + checksum: 7b8d6676353f157e68b26baf848e01e5d887bcf90ce81a52f23fc9a5d93e6ffb60057532d664cfd7aeeb76d464d0c8b0d314ee6cccb56943acb3b6c570b756c8 + languageName: node + linkType: hard + +"@nrwl/cli@npm:15.7.2": + version: 15.7.2 + resolution: "@nrwl/cli@npm:15.7.2" + dependencies: + nx: 15.7.2 + checksum: c59130679458e1572181d8b49ff3a755bba4e07f8fe9a4c0b20330a16105548381467c557a4f3dd09051cf6ae8bcea15c3f2ccd2dba9ad6d0dfec79de0b61b49 + languageName: node + linkType: hard + +"@nrwl/devkit@npm:>=15.5.2 < 16": + version: 15.7.2 + resolution: "@nrwl/devkit@npm:15.7.2" + dependencies: + "@phenomnomnominal/tsquery": 4.1.1 + ejs: ^3.1.7 + ignore: ^5.0.4 + semver: 7.3.4 + tslib: ^2.3.0 + peerDependencies: + nx: ">= 14.1 <= 16" + checksum: a6f78a1374e91c183a71fb3cb81bfc8fe0d21e18d2bd7b20d01777fd31d155c16dce5944ed2146514761a3960683842f137fc5a22975403d515c32fc753c0a1f + languageName: node + linkType: hard + +"@nrwl/nx-darwin-arm64@npm:15.7.2": + version: 15.7.2 + resolution: "@nrwl/nx-darwin-arm64@npm:15.7.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@nrwl/nx-darwin-x64@npm:15.7.2": + version: 15.7.2 + resolution: "@nrwl/nx-darwin-x64@npm:15.7.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@nrwl/nx-linux-arm-gnueabihf@npm:15.7.2": + version: 15.7.2 + resolution: "@nrwl/nx-linux-arm-gnueabihf@npm:15.7.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@nrwl/nx-linux-arm64-gnu@npm:15.7.2": + version: 15.7.2 + resolution: "@nrwl/nx-linux-arm64-gnu@npm:15.7.2" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@nrwl/nx-linux-arm64-musl@npm:15.7.2": + version: 15.7.2 + resolution: "@nrwl/nx-linux-arm64-musl@npm:15.7.2" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@nrwl/nx-linux-x64-gnu@npm:15.7.2": + version: 15.7.2 + resolution: "@nrwl/nx-linux-x64-gnu@npm:15.7.2" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@nrwl/nx-linux-x64-musl@npm:15.7.2": + version: 15.7.2 + resolution: "@nrwl/nx-linux-x64-musl@npm:15.7.2" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@nrwl/nx-win32-arm64-msvc@npm:15.7.2": + version: 15.7.2 + resolution: "@nrwl/nx-win32-arm64-msvc@npm:15.7.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@nrwl/nx-win32-x64-msvc@npm:15.7.2": + version: 15.7.2 + resolution: "@nrwl/nx-win32-x64-msvc@npm:15.7.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@nrwl/tao@npm:15.7.2": + version: 15.7.2 + resolution: "@nrwl/tao@npm:15.7.2" + dependencies: + nx: 15.7.2 + bin: + tao: index.js + checksum: cbf76f385bffb1bf1bde52d4ad950a8abd1ba9865f47afb67a58bb5dc5d7be0d21c5021a3332d2ab665d99b36ec1f08ee260c1289bb7e69783e69712145d2709 + languageName: node + linkType: hard + +"@octokit/auth-token@npm:^3.0.0": + version: 3.0.2 + resolution: "@octokit/auth-token@npm:3.0.2" + dependencies: + "@octokit/types": ^8.0.0 + checksum: c7204770a6cb1661379c31b5a26779b509324446e61a4902893a69fd471738c817afc470f8ac8d86ad827738cc953046d27fbb87fc81782ff10e366b70241f4e + languageName: node + linkType: hard + +"@octokit/core@npm:^4.0.0": + version: 4.2.0 + resolution: "@octokit/core@npm:4.2.0" + dependencies: + "@octokit/auth-token": ^3.0.0 + "@octokit/graphql": ^5.0.0 + "@octokit/request": ^6.0.0 + "@octokit/request-error": ^3.0.0 + "@octokit/types": ^9.0.0 + before-after-hook: ^2.2.0 + universal-user-agent: ^6.0.0 + checksum: 5ac56e7f14b42a5da8d3075a2ae41483521a78bee061a01f4a81d8c0ecd6a684b2e945d66baba0cd1fdf264639deedc3a96d0f32c4d2fc39b49ca10f52f4de39 + languageName: node + linkType: hard + +"@octokit/endpoint@npm:^7.0.0": + version: 7.0.3 + resolution: "@octokit/endpoint@npm:7.0.3" + dependencies: + "@octokit/types": ^8.0.0 + is-plain-object: ^5.0.0 + universal-user-agent: ^6.0.0 + checksum: c36b1577062e51d1683779a59c75d046d59f9a5c3a0f046d465e6c4c39f64bfc3a3052b42fa91a4552c7903ec382c604b4a2e1aadebdf7458191849ede5d4978 + languageName: node + linkType: hard + +"@octokit/graphql@npm:^5.0.0": + version: 5.0.4 + resolution: "@octokit/graphql@npm:5.0.4" + dependencies: + "@octokit/request": ^6.0.0 + "@octokit/types": ^8.0.0 + universal-user-agent: ^6.0.0 + checksum: 8cf65cf7e6608cf3cbc96a2fa902172b4d5dc30e88ee0bae3711bf467a25b828b10cce1aaabb7f82a7580bfbcf7028b91d1dd1a894940945e38ca2deb6509754 + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^12.11.0": + version: 12.11.0 + resolution: "@octokit/openapi-types@npm:12.11.0" + checksum: 8a7d4bd6288cc4085cabe0ca9af2b87c875c303af932cb138aa1b2290eb69d32407759ac23707bb02776466e671244a902e9857896903443a69aff4b6b2b0e3b + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^14.0.0": + version: 14.0.0 + resolution: "@octokit/openapi-types@npm:14.0.0" + checksum: 0a1f8f3be998cd82c5a640e9166d43fd183b33d5d36f5e1a9b81608e94d0da87c01ec46c9988f69cd26585d4e2ffc4d3ec99ee4f75e5fe997fc86dad0aa8293c + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^16.0.0": + version: 16.0.0 + resolution: "@octokit/openapi-types@npm:16.0.0" + checksum: 844f30a545da380d63c712e0eb733366bc567d1aab34529c79fdfbec3d73810e81d83f06fdab13058a5cbc7dae786db1a9b90b5b61b1e606854ee45d5ec5f194 + languageName: node + linkType: hard + +"@octokit/plugin-enterprise-rest@npm:6.0.1": + version: 6.0.1 + resolution: "@octokit/plugin-enterprise-rest@npm:6.0.1" + checksum: 1c9720002f31daf62f4f48e73557dcdd7fcde6e0f6d43256e3f2ec827b5548417297186c361fb1af497fdcc93075a7b681e6ff06e2f20e4a8a3e74cc09d1f7e3 + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^3.0.0": + version: 3.1.0 + resolution: "@octokit/plugin-paginate-rest@npm:3.1.0" + dependencies: + "@octokit/types": ^6.41.0 + peerDependencies: + "@octokit/core": ">=4" + checksum: a09212a1c6e0be4a7929acd192659cb204fcb7c6a52cf7e7f1b87da0338d812c8c26e7ee44d00e8b9824d8904d6caaa978a84c26001ab982ffec5123600aa4d8 + languageName: node + linkType: hard + +"@octokit/plugin-request-log@npm:^1.0.4": + version: 1.0.4 + resolution: "@octokit/plugin-request-log@npm:1.0.4" + peerDependencies: + "@octokit/core": ">=3" + checksum: 2086db00056aee0f8ebd79797b5b57149ae1014e757ea08985b71eec8c3d85dbb54533f4fd34b6b9ecaa760904ae6a7536be27d71e50a3782ab47809094bfc0c + languageName: node + linkType: hard + +"@octokit/plugin-rest-endpoint-methods@npm:^6.0.0": + version: 6.8.1 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:6.8.1" + dependencies: + "@octokit/types": ^8.1.1 + deprecation: ^2.3.1 + peerDependencies: + "@octokit/core": ">=3" + checksum: 7ccefb3bd06089dbc6152a9555cf76f16a34673aa5512d5d353bc07434343eb97acd36ce91ef00707a5fdfa65f2fb03618071a5ef0df6c5e0bb077aea21b7b22 + languageName: node + linkType: hard + +"@octokit/request-error@npm:^3.0.0": + version: 3.0.2 + resolution: "@octokit/request-error@npm:3.0.2" + dependencies: + "@octokit/types": ^8.0.0 + deprecation: ^2.0.0 + once: ^1.4.0 + checksum: 41549554ce780de13d3421f8036635014c8dcbdf867c288526ef7b17e9d92470f33341ddadacf2868dc0181440842803484104efbe11ebfaecdaeec58871a13e + languageName: node + linkType: hard + +"@octokit/request@npm:^6.0.0": + version: 6.2.2 + resolution: "@octokit/request@npm:6.2.2" + dependencies: + "@octokit/endpoint": ^7.0.0 + "@octokit/request-error": ^3.0.0 + "@octokit/types": ^8.0.0 + is-plain-object: ^5.0.0 + node-fetch: ^2.6.7 + universal-user-agent: ^6.0.0 + checksum: adbeb38807c60b53d32d9b69be0c1f861c26698bc6f5f3f7e05d26972290dc4867827dd333bdd801818c347e5723efd049a2b9848c6c8bf74a2032968dede0ff + languageName: node + linkType: hard + +"@octokit/rest@npm:19.0.3": + version: 19.0.3 + resolution: "@octokit/rest@npm:19.0.3" + dependencies: + "@octokit/core": ^4.0.0 + "@octokit/plugin-paginate-rest": ^3.0.0 + "@octokit/plugin-request-log": ^1.0.4 + "@octokit/plugin-rest-endpoint-methods": ^6.0.0 + checksum: 9ee96976c4c22dab11b3dacd541e694f3ad9bb1d44243985dc90ce6e8a42c3e3176a206e8d3a883b63b517fc15af8c8c88d8d0ecd9bac2b86a635a9667fc6ff4 + languageName: node + linkType: hard + +"@octokit/types@npm:^6.41.0": + version: 6.41.0 + resolution: "@octokit/types@npm:6.41.0" + dependencies: + "@octokit/openapi-types": ^12.11.0 + checksum: fd6f75e0b19b90d1a3d244d2b0c323ed8f2f05e474a281f60a321986683548ef2e0ec2b3a946aa9405d6092e055344455f69f58957c60f58368c8bdda5b7d2ab + languageName: node + linkType: hard + +"@octokit/types@npm:^8.0.0": + version: 8.0.0 + resolution: "@octokit/types@npm:8.0.0" + dependencies: + "@octokit/openapi-types": ^14.0.0 + checksum: 1a0197b2c4c522ac90f145e02b3f8cb048a47f71c2c6bdbf021a03db7dd30ca92a899c0186acb401337f218efe44e60d33cc1cc68715b622bb75bc1a4e79515d + languageName: node + linkType: hard + +"@octokit/types@npm:^8.1.1": + version: 8.2.1 + resolution: "@octokit/types@npm:8.2.1" + dependencies: + "@octokit/openapi-types": ^14.0.0 + checksum: 92f2fe5ea8c4c6ddbb2363c74cd865c64e5753eaa4895bc925b5064390890b1441c5406015d8a92285f386cc7e6fe714c47fe4beda370fcda9177153299c9e37 + languageName: node + linkType: hard + +"@octokit/types@npm:^9.0.0": + version: 9.0.0 + resolution: "@octokit/types@npm:9.0.0" + dependencies: + "@octokit/openapi-types": ^16.0.0 + checksum: 5c7f5cca8f00f7c4daa0d00f4fe991c1598ec47cd6ced50b1c5fbe9721bb9dee0adc2acdee265a3a715bb984e53ef3dc7f1cfb7326f712c6d809d59fc5c6648d + languageName: node + linkType: hard + +"@parcel/watcher@npm:2.0.4": + version: 2.0.4 + resolution: "@parcel/watcher@npm:2.0.4" + dependencies: + node-addon-api: ^3.2.1 + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 890bdc69a52942791b276caa2cd65ef816576d6b5ada91aa28cf302b35d567c801dafe167f2525dcb313f5b420986ea11bd56228dd7ddde1116944d8f924a0a1 + languageName: node + linkType: hard + +"@phenomnomnominal/tsquery@npm:4.1.1": + version: 4.1.1 + resolution: "@phenomnomnominal/tsquery@npm:4.1.1" + dependencies: + esquery: ^1.0.1 + peerDependencies: + typescript: ^3 || ^4 + checksum: 64eb6d90aafa889f62fe73d128b7be2b3295dffde4d5dff63bad75d512b6bc1d8419d8fc784a1a60b45aba4cda2eaf6e233bf59797a1d91b26fac27d99dae047 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.24.1": + version: 0.24.51 + resolution: "@sinclair/typebox@npm:0.24.51" + checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.25.16": + version: 0.25.24 + resolution: "@sinclair/typebox@npm:0.25.24" + checksum: 10219c58f40b8414c50b483b0550445e9710d4fe7b2c4dccb9b66533dd90ba8e024acc776026cebe81e87f06fa24b07fdd7bc30dd277eb9cc386ec50151a3026 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^2.0.0": + version: 2.0.0 + resolution: "@sinonjs/commons@npm:2.0.0" + dependencies: + type-detect: 4.0.8 + checksum: 5023ba17edf2b85ed58262313b8e9b59e23c6860681a9af0200f239fe939e2b79736d04a260e8270ddd57196851dde3ba754d7230be5c5234e777ae2ca8af137 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.0.2 + resolution: "@sinonjs/fake-timers@npm:10.0.2" + dependencies: + "@sinonjs/commons": ^2.0.0 + checksum: c62aa98e7cefda8dedc101ce227abc888dc46b8ff9706c5f0a8dfd9c3ada97d0a5611384738d9ba0b26b59f99c2ba24efece8e779bb08329e9e87358fa309824 + languageName: node + linkType: hard + +"@swc/core-darwin-arm64@npm:1.3.36": + version: 1.3.36 + resolution: "@swc/core-darwin-arm64@npm:1.3.36" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-darwin-x64@npm:1.3.36": + version: 1.3.36 + resolution: "@swc/core-darwin-x64@npm:1.3.36" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@swc/core-linux-arm-gnueabihf@npm:1.3.36": + version: 1.3.36 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.36" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@swc/core-linux-arm64-gnu@npm:1.3.36": + version: 1.3.36 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.36" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-arm64-musl@npm:1.3.36": + version: 1.3.36 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.36" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-linux-x64-gnu@npm:1.3.36": + version: 1.3.36 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.36" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-x64-musl@npm:1.3.36": + version: 1.3.36 + resolution: "@swc/core-linux-x64-musl@npm:1.3.36" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-win32-arm64-msvc@npm:1.3.36": + version: 1.3.36 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.36" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-win32-ia32-msvc@npm:1.3.36": + version: 1.3.36 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.36" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@swc/core-win32-x64-msvc@npm:1.3.36": + version: 1.3.36 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.36" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@swc/core@npm:^1.3.36": + version: 1.3.36 + resolution: "@swc/core@npm:1.3.36" + dependencies: + "@swc/core-darwin-arm64": 1.3.36 + "@swc/core-darwin-x64": 1.3.36 + "@swc/core-linux-arm-gnueabihf": 1.3.36 + "@swc/core-linux-arm64-gnu": 1.3.36 + "@swc/core-linux-arm64-musl": 1.3.36 + "@swc/core-linux-x64-gnu": 1.3.36 + "@swc/core-linux-x64-musl": 1.3.36 + "@swc/core-win32-arm64-msvc": 1.3.36 + "@swc/core-win32-ia32-msvc": 1.3.36 + "@swc/core-win32-x64-msvc": 1.3.36 + dependenciesMeta: + "@swc/core-darwin-arm64": + optional: true + "@swc/core-darwin-x64": + optional: true + "@swc/core-linux-arm-gnueabihf": + optional: true + "@swc/core-linux-arm64-gnu": + optional: true + "@swc/core-linux-arm64-musl": + optional: true + "@swc/core-linux-x64-gnu": + optional: true + "@swc/core-linux-x64-musl": + optional: true + "@swc/core-win32-arm64-msvc": + optional: true + "@swc/core-win32-ia32-msvc": + optional: true + "@swc/core-win32-x64-msvc": + optional: true + checksum: 36e96e86d1ab8fd84eb51e7264a7ae781ee7e507d36b9ccc028d7f31a2ccf2949f074656e34139c970196774d24d55a54c3aa5c53d04eb6e3569c71cbfed0c0d + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.14": + version: 7.1.20 + resolution: "@types/babel__core@npm:7.1.20" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: a09c4f0456552547a5b8a5a009a3daec4d362f622168f8e08bda0ded2da0a65ab0b1642e23c433b3616721f5701dc34a996c5bde5baeaea53eda98f438043f2c + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.4 + resolution: "@types/babel__generator@npm:7.6.4" + dependencies: + "@babel/types": ^7.0.0 + checksum: 20effbbb5f8a3a0211e95959d06ae70c097fb6191011b73b38fe86deebefad8e09ee014605e0fd3cdaedc73d158be555866810e9166e1f09e4cfd880b874dcb0 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.1 + resolution: "@types/babel__template@npm:7.4.1" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.18.3 + resolution: "@types/babel__traverse@npm:7.18.3" + dependencies: + "@babel/types": ^7.3.0 + checksum: d20953338b2f012ab7750932ece0a78e7d1645b0a6ff42d49be90f55e9998085da1374a9786a7da252df89555c6586695ba4d1d4b4e88ab2b9f306bcd35e00d3 + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.5 + resolution: "@types/graceful-fs@npm:4.1.5" + dependencies: + "@types/node": "*" + checksum: d076bb61f45d0fc42dee496ef8b1c2f8742e15d5e47e90e20d0243386e426c04d4efd408a48875ab432f7960b4ce3414db20ed0fbbfc7bcc89d84e574f6e045a + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.4 + resolution: "@types/istanbul-lib-coverage@npm:2.0.4" + checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.0 + resolution: "@types/istanbul-lib-report@npm:3.0.0" + dependencies: + "@types/istanbul-lib-coverage": "*" + checksum: 656398b62dc288e1b5226f8880af98087233cdb90100655c989a09f3052b5775bf98ba58a16c5ae642fb66c61aba402e07a9f2bff1d1569e3b306026c59f3f36 + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.1 + resolution: "@types/istanbul-reports@npm:3.0.1" + dependencies: + "@types/istanbul-lib-report": "*" + checksum: f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 + languageName: node + linkType: hard + +"@types/jest@npm:^29.4.0": + version: 29.4.0 + resolution: "@types/jest@npm:29.4.0" + dependencies: + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 23760282362a252e6690314584d83a47512d4cd61663e957ed3398ecf98195fe931c45606ee2f9def12f8ed7d8aa102d492ec42d26facdaf8b78094a31e6568e + languageName: node + linkType: hard + +"@types/jsdom@npm:^20.0.0": + version: 20.0.1 + resolution: "@types/jsdom@npm:20.0.1" + dependencies: + "@types/node": "*" + "@types/tough-cookie": "*" + parse5: ^7.0.0 + checksum: d55402c5256ef451f93a6e3d3881f98339fe73a5ac2030588df056d6835df8367b5a857b48d27528289057e26dcdd3f502edc00cb877c79174cb3a4c7f2198c1 + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.9": + version: 7.0.11 + resolution: "@types/json-schema@npm:7.0.11" + checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d + languageName: node + linkType: hard + +"@types/minimatch@npm:^3.0.3": + version: 3.0.5 + resolution: "@types/minimatch@npm:3.0.5" + checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 + languageName: node + linkType: hard + +"@types/minimist@npm:^1.2.0": + version: 1.2.2 + resolution: "@types/minimist@npm:1.2.2" + checksum: b8da83c66eb4aac0440e64674b19564d9d86c80ae273144db9681e5eeff66f238ade9515f5006ffbfa955ceff8b89ad2bd8ec577d7caee74ba101431fb07045d + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 18.11.17 + resolution: "@types/node@npm:18.11.17" + checksum: 1933afd068d5c75c068c6c4df6d10edb3b0b2bb6503d544e2f0496ac007c90596e6a5e284a8ef032451bc16f871b7e46719d7d2bea60e9b25d13a77d52161cac + languageName: node + linkType: hard + +"@types/node@npm:^18.14.2": + version: 18.14.2 + resolution: "@types/node@npm:18.14.2" + checksum: 53c07e721f6ae33de71306f6a0b75dae6066a4f55bd5484c93bd59ff25f0c5f004ceafeef509a4d0cb9e24a247efc34d50489bcc1b05a53ecc68e2fc088e65cb + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.0": + version: 2.4.1 + resolution: "@types/normalize-package-data@npm:2.4.1" + checksum: e87bccbf11f95035c89a132b52b79ce69a1e3652fe55962363063c9c0dae0fe2477ebc585e03a9652adc6f381d24ba5589cc5e51849df4ced3d3e004a7d40ed5 + languageName: node + linkType: hard + +"@types/parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "@types/parse-json@npm:4.0.0" + checksum: fd6bce2b674b6efc3db4c7c3d336bd70c90838e8439de639b909ce22f3720d21344f52427f1d9e57b265fcb7f6c018699b99e5e0c208a1a4823014269a6bf35b + languageName: node + linkType: hard + +"@types/prettier@npm:^2.1.5": + version: 2.7.2 + resolution: "@types/prettier@npm:2.7.2" + checksum: b47d76a5252265f8d25dd2fe2a5a61dc43ba0e6a96ffdd00c594cb4fd74c1982c2e346497e3472805d97915407a09423804cc2110a0b8e1b22cffcab246479b7 + languageName: node + linkType: hard + +"@types/semver@npm:^7.3.12": + version: 7.3.13 + resolution: "@types/semver@npm:7.3.13" + checksum: 00c0724d54757c2f4bc60b5032fe91cda6410e48689633d5f35ece8a0a66445e3e57fa1d6e07eb780f792e82ac542948ec4d0b76eb3484297b79bd18b8cf1cb0 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.1 + resolution: "@types/stack-utils@npm:2.0.1" + checksum: 205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 + languageName: node + linkType: hard + +"@types/tough-cookie@npm:*": + version: 4.0.2 + resolution: "@types/tough-cookie@npm:4.0.2" + checksum: e055556ffdaa39ad85ede0af192c93f93f986f4bd9e9426efdc2948e3e2632db3a4a584d4937dbf6d7620527419bc99e6182d3daf2b08685e710f2eda5291905 + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.0 + resolution: "@types/yargs-parser@npm:21.0.0" + checksum: b2f4c8d12ac18a567440379909127cf2cec393daffb73f246d0a25df36ea983b93b7e9e824251f959e9f928cbc7c1aab6728d0a0ff15d6145f66cec2be67d9a2 + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.17 + resolution: "@types/yargs@npm:17.0.17" + dependencies: + "@types/yargs-parser": "*" + checksum: 4f1b5149e794c8960652b4339dc96655e53b48fdbe1b847fcb0db95e72e760724a4c5c616a7fccb3c0ae8beb0e57e06e37391d492e916e3ff179aafeb890e426 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^5.27.1": + version: 5.47.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.47.0" + dependencies: + "@typescript-eslint/scope-manager": 5.47.0 + "@typescript-eslint/type-utils": 5.47.0 + "@typescript-eslint/utils": 5.47.0 + debug: ^4.3.4 + ignore: ^5.2.0 + natural-compare-lite: ^1.4.0 + regexpp: ^3.2.0 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependencies: + "@typescript-eslint/parser": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: fd867eb2b668d1f476fd28d38c2df2a680bf510a265a6e714b28d8f77e7a37e74e32294b70262a6fd1aec99ddb2fddef0212c862b4465ca4f83bb1172476f6e7 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^5.27.1": + version: 5.47.0 + resolution: "@typescript-eslint/parser@npm:5.47.0" + dependencies: + "@typescript-eslint/scope-manager": 5.47.0 + "@typescript-eslint/types": 5.47.0 + "@typescript-eslint/typescript-estree": 5.47.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 5c864ca74b86ca740c73e5b87d90d43bb832b20ba6be0a39089175435771527722a7bf0a8ef7ddbd64b85235fbb7f6dbe8ae55a8bc73c6242f5559d580a8a80c + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:5.47.0": + version: 5.47.0 + resolution: "@typescript-eslint/scope-manager@npm:5.47.0" + dependencies: + "@typescript-eslint/types": 5.47.0 + "@typescript-eslint/visitor-keys": 5.47.0 + checksum: f637268a4cb065a89bb53d72620cc553f8c0d9f00805d6e6aac558cc4d3c08f3329208b0b4d5566d21eb636b080d453e5890221baef0e4bc4d67251f07cccd0d + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:5.47.0": + version: 5.47.0 + resolution: "@typescript-eslint/type-utils@npm:5.47.0" + dependencies: + "@typescript-eslint/typescript-estree": 5.47.0 + "@typescript-eslint/utils": 5.47.0 + debug: ^4.3.4 + tsutils: ^3.21.0 + peerDependencies: + eslint: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: 504b3e883ac02cb8e69957b706e76cb79fa2192aa62702c2a658119f28f8f50f1e668efb62318e85aeda6522e1d948b59382cae4ef3300a3f4eea809a87dec26 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:5.47.0": + version: 5.47.0 + resolution: "@typescript-eslint/types@npm:5.47.0" + checksum: 5a856e190cc2103427dbe15ccbbf87238261b5ed0859390a9e55f93afc2057f79dcbb4ac0db4d35787466f5e73f271111d19b2e725cf444af41d30e09678bf7a + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.47.0": + version: 5.47.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.47.0" + dependencies: + "@typescript-eslint/types": 5.47.0 + "@typescript-eslint/visitor-keys": 5.47.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: a9adfe8955b7dc9dfa9f43d450b782b83f506eaadae2a13f4e1bbe6c733be446d3edb26910954aec1bdc60d94ecc55c4e200d5b19bb24e6742f02329a4fb3e8c + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.47.0": + version: 5.47.0 + resolution: "@typescript-eslint/utils@npm:5.47.0" + dependencies: + "@types/json-schema": ^7.0.9 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.47.0 + "@typescript-eslint/types": 5.47.0 + "@typescript-eslint/typescript-estree": 5.47.0 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + semver: ^7.3.7 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: f168920eec6f77651107f190b4ecadd82951fe4e3c0321ff660ac7380f4315d5ae30a1b63b4d2818f5e6f007a3f34c5df202619c24ec3a7e2ef25b215ec7b813 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.47.0": + version: 5.47.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.47.0" + dependencies: + "@typescript-eslint/types": 5.47.0 + eslint-visitor-keys: ^3.3.0 + checksum: 2191c079154bdfd1b85b8cd24baa6c0f55c73527c6c8460789483555b4eb5c72e3dc6d1aa4bbac2cf7b86b474588b45682a8deb151e9d903cf72c8f336141f1f + languageName: node + linkType: hard + +"@yarnpkg/lockfile@npm:^1.1.0": + version: 1.1.0 + resolution: "@yarnpkg/lockfile@npm:1.1.0" + checksum: 05b881b4866a3546861fee756e6d3812776ea47fa6eb7098f983d6d0eefa02e12b66c3fff931574120f196286a7ad4879ce02743c8bb2be36c6a576c7852083a + languageName: node + linkType: hard + +"@yarnpkg/parsers@npm:^3.0.0-rc.18": + version: 3.0.0-rc.34 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.34" + dependencies: + js-yaml: ^3.10.0 + tslib: ^2.4.0 + checksum: 58720f03e4fc45a5468f799de53cdd114eef9be9947c76dbc1354a57b2443c139a8f3db6f92a87b78bf0b11fd66782eae2ffb9b0ecb8455d2c105dc4ccf6effb + languageName: node + linkType: hard + +"@zkochan/js-yaml@npm:0.0.6": + version: 0.0.6 + resolution: "@zkochan/js-yaml@npm:0.0.6" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: 51b81597a1d1d79c778b8fae48317eaad78d75223d0b7477ad2b35f47cf63b19504da430bb7a03b326e668b282874242cc123e323e57293be038684cb5e755f8 + languageName: node + linkType: hard + +"JSONStream@npm:^1.0.4": + version: 1.3.5 + resolution: "JSONStream@npm:1.3.5" + dependencies: + jsonparse: ^1.2.0 + through: ">=2.2.7 <3" + bin: + JSONStream: ./bin.js + checksum: 2605fa124260c61bad38bb65eba30d2f72216a78e94d0ab19b11b4e0327d572b8d530c0c9cc3b0764f727ad26d39e00bf7ebad57781ca6368394d73169c59e46 + languageName: node + linkType: hard + +"abab@npm:^2.0.6": + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e + languageName: node + linkType: hard + +"abbrev@npm:1, abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + +"acorn-globals@npm:^7.0.0": + version: 7.0.1 + resolution: "acorn-globals@npm:7.0.1" + dependencies: + acorn: ^8.1.0 + acorn-walk: ^8.0.2 + checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.0.2": + version: 8.2.0 + resolution: "acorn-walk@npm:8.2.0" + checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + languageName: node + linkType: hard + +"acorn@npm:^8.1.0, acorn@npm:^8.8.0, acorn@npm:^8.8.1": + version: 8.8.1 + resolution: "acorn@npm:8.8.1" + bin: + acorn: bin/acorn + checksum: 4079b67283b94935157698831967642f24a075c52ce3feaaaafe095776dfbe15d86a1b33b1e53860fc0d062ed6c83f4284a5c87c85b9ad51853a01173da6097f + languageName: node + linkType: hard + +"add-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "add-stream@npm:1.0.0" + checksum: 3e9e8b0b8f0170406d7c3a9a39bfbdf419ccccb0fd2a396338c0fda0a339af73bf738ad414fc520741de74517acf0dd92b4a36fd3298a47fd5371eee8f2c5a06 + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": + version: 4.2.1 + resolution: "agentkeepalive@npm:4.2.1" + dependencies: + debug: ^4.1.0 + depd: ^1.1.2 + humanize-ms: ^1.2.1 + checksum: 39cb49ed8cf217fd6da058a92828a0a84e0b74c35550f82ee0a10e1ee403c4b78ade7948be2279b188b7a7303f5d396ea2738b134731e464bf28de00a4f72a18 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv@npm:^6.10.0, ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"ansi-colors@npm:^4.1.1": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: ^0.21.3 + checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de + languageName: node + linkType: hard + +"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0, aproba@npm:^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"array-differ@npm:^3.0.0": + version: 3.0.0 + resolution: "array-differ@npm:3.0.0" + checksum: 117edd9df5c1530bd116c6e8eea891d4bd02850fd89b1b36e532b6540e47ca620a373b81feca1c62d1395d9ae601516ba538abe5e8172d41091da2c546b05fb7 + languageName: node + linkType: hard + +"array-ify@npm:^1.0.0": + version: 1.0.0 + resolution: "array-ify@npm:1.0.0" + checksum: c0502015b319c93dd4484f18036bcc4b654eb76a4aa1f04afbcef11ac918859bb1f5d71ba1f0f1141770db9eef1a4f40f1761753650873068010bbf7bcdae4a4 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 + languageName: node + linkType: hard + +"arrify@npm:^2.0.1": + version: 2.0.1 + resolution: "arrify@npm:2.0.1" + checksum: 067c4c1afd182806a82e4c1cb8acee16ab8b5284fbca1ce29408e6e91281c36bb5b612f6ddfbd40a0f7a7e0c75bf2696eb94c027f6e328d6e9c52465c98e4209 + languageName: node + linkType: hard + +"asap@npm:^2.0.0": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d + languageName: node + linkType: hard + +"async@npm:^3.2.3": + version: 3.2.4 + resolution: "async@npm:3.2.4" + checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e + languageName: node + linkType: hard + +"axios@npm:^1.0.0": + version: 1.2.1 + resolution: "axios@npm:1.2.1" + dependencies: + follow-redirects: ^1.15.0 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: c4dc4e119064c9aed09a3de309bedb797a139a6fb372223aafe3e0c10a7d4a14e4d3e9c9d309467fadb9d2b490b891ee3df96ef5b55716bb971910466ff9f0c5 + languageName: node + linkType: hard + +"babel-jest@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-jest@npm:29.4.3" + dependencies: + "@jest/transform": ^29.4.3 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.4.3 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: a1a95937adb5e717dbffc2eb9e583fa6d26c7e5d5b07bb492a2d7f68631510a363e9ff097eafb642ad642dfac9dc2b13872b584f680e166a4f0922c98ea95853 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@istanbuljs/load-nyc-config": ^1.0.0 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-instrument: ^5.0.4 + test-exclude: ^6.0.0 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-plugin-jest-hoist@npm:29.4.3" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: c8702a6db6b30ec39dfb9f8e72b501c13895231ed80b15ed2648448f9f0c7b7cc4b1529beac31802ae655f63479a05110ca612815aa25fb1b0e6c874e1589137 + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" + dependencies: + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-bigint": ^7.8.3 + "@babel/plugin-syntax-class-properties": ^7.8.3 + "@babel/plugin-syntax-import-meta": ^7.8.3 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.8.3 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-top-level-await": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + languageName: node + linkType: hard + +"babel-preset-jest@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-preset-jest@npm:29.4.3" + dependencies: + babel-plugin-jest-hoist: ^29.4.3 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a091721861ea2f8d969ace8fe06570cff8f2e847dbc6e4800abacbe63f72131abde615ce0a3b6648472c97e55a5be7f8bf7ae381e2b194ad2fa1737096febcf5 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"before-after-hook@npm:^2.2.0": + version: 2.2.3 + resolution: "before-after-hook@npm:2.2.3" + checksum: a1a2430976d9bdab4cd89cb50d27fa86b19e2b41812bf1315923b0cba03371ebca99449809226425dd3bcef20e010db61abdaff549278e111d6480034bebae87 + languageName: node + linkType: hard + +"bin-links@npm:^3.0.0": + version: 3.0.3 + resolution: "bin-links@npm:3.0.3" + dependencies: + cmd-shim: ^5.0.0 + mkdirp-infer-owner: ^2.0.0 + npm-normalize-package-bin: ^2.0.0 + read-cmd-shim: ^3.0.0 + rimraf: ^3.0.0 + write-file-atomic: ^4.0.0 + checksum: ea2dc6f91a6ef8b3840ceb48530bbeb8d6d1c6f7985fe1409b16d7e7db39432f0cb5ce15cc2788bb86d989abad6e2c7fba3500996a210a682eec18fb26a66e72 + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 + languageName: node + linkType: hard + +"bl@npm:^4.0.3, bl@npm:^4.1.0": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: ^5.5.0 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"browserslist@npm:^4.21.3": + version: 4.21.4 + resolution: "browserslist@npm:4.21.4" + dependencies: + caniuse-lite: ^1.0.30001400 + electron-to-chromium: ^1.4.251 + node-releases: ^2.0.6 + update-browserslist-db: ^1.0.9 + bin: + browserslist: cli.js + checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 + languageName: node + linkType: hard + +"bs-logger@npm:0.x": + version: 0.2.6 + resolution: "bs-logger@npm:0.2.6" + dependencies: + fast-json-stable-stringify: 2.x + checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: ^0.4.0 + checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 + languageName: node + linkType: hard + +"builtins@npm:^1.0.3": + version: 1.0.3 + resolution: "builtins@npm:1.0.3" + checksum: 47ce94f7eee0e644969da1f1a28e5f29bd2e48b25b2bbb61164c345881086e29464ccb1fb88dbc155ea26e8b1f5fc8a923b26c8c1ed0935b67b644d410674513 + languageName: node + linkType: hard + +"builtins@npm:^5.0.0": + version: 5.0.1 + resolution: "builtins@npm:5.0.1" + dependencies: + semver: ^7.0.0 + checksum: 66d204657fe36522822a95b288943ad11b58f5eaede235b11d8c4edaa28ce4800087d44a2681524c340494aadb120a0068011acabe99d30e8f11a7d826d83515 + languageName: node + linkType: hard + +"bundle-require@npm:^4.0.0": + version: 4.0.1 + resolution: "bundle-require@npm:4.0.1" + dependencies: + load-tsconfig: ^0.2.3 + peerDependencies: + esbuild: ">=0.17" + checksum: 737217e37b72d7bee431b5d839b86ba604430f3ec346f073071de2ce65f0915189d4394ddd4685e0366b2930f38c95742b58c7101b8c53d9a8381d453f0b3b8a + languageName: node + linkType: hard + +"byte-size@npm:7.0.0": + version: 7.0.0 + resolution: "byte-size@npm:7.0.0" + checksum: 6cdd45fb64ac3f80d5cbbc01df7974a4613b3e64bd792b6b8211c8669ca3d1f7efd9379ba24cebfc371ce3e890817dcdaf0bd7ed99571fe2de4b946e6c31a138 + languageName: node + linkType: hard + +"cac@npm:^6.7.12": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a + languageName: node + linkType: hard + +"cacache@npm:^16.0.0, cacache@npm:^16.0.6, cacache@npm:^16.1.0": + version: 16.1.3 + resolution: "cacache@npm:16.1.3" + dependencies: + "@npmcli/fs": ^2.1.0 + "@npmcli/move-file": ^2.0.0 + chownr: ^2.0.0 + fs-minipass: ^2.1.0 + glob: ^8.0.1 + infer-owner: ^1.0.4 + lru-cache: ^7.7.1 + minipass: ^3.1.6 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + mkdirp: ^1.0.4 + p-map: ^4.0.0 + promise-inflight: ^1.0.1 + rimraf: ^3.0.2 + ssri: ^9.0.0 + tar: ^6.1.11 + unique-filename: ^2.0.0 + checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"camelcase-keys@npm:^6.2.2": + version: 6.2.2 + resolution: "camelcase-keys@npm:6.2.2" + dependencies: + camelcase: ^5.3.1 + map-obj: ^4.0.0 + quick-lru: ^4.0.1 + checksum: 43c9af1adf840471e54c68ab3e5fe8a62719a6b7dbf4e2e86886b7b0ff96112c945736342b837bd2529ec9d1c7d1934e5653318478d98e0cf22c475c04658e2a + languageName: node + linkType: hard + +"camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001400": + version: 1.0.30001441 + resolution: "caniuse-lite@npm:1.0.30001441" + checksum: 0f5aa8f7ea4d165e88e0d1eaa44564c5bfee66641f265a1fd959e74f0a7e6bc0207db6c28e2fb63dc8b2cd23e0e3cee06c4f372de11c93c57ff5ff4207962c3f + languageName: node + linkType: hard + +"chalk@npm:4.1.0": + version: 4.1.0 + resolution: "chalk@npm:4.1.0" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: 5561c7b4c063badee3e16d04bce50bd033e1be1bf4c6948639275683ffa7a1993c44639b43c22b1c505f0f813a24b1889037eb182546b48946f9fe7cdd0e7d13 + languageName: node + linkType: hard + +"chalk@npm:^2.0.0": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 + languageName: node + linkType: hard + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d + languageName: node + linkType: hard + +"chokidar@npm:^3.5.1": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.2 + glob-parent: ~5.1.2 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.6.0 + dependenciesMeta: + fsevents: + optional: true + checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"ci-info@npm:^2.0.0": + version: 2.0.0 + resolution: "ci-info@npm:2.0.0" + checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.7.0 + resolution: "ci-info@npm:3.7.0" + checksum: 6e5df0250382ff3732703b36b958d2d892dd3c481f9671666f96c2ab7888be744bc4dca81395be958dcb828502d94f18fa9aa8901c5a3c9923cda212df02724c + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.0.0": + version: 1.2.2 + resolution: "cjs-module-lexer@npm:1.2.2" + checksum: 977f3f042bd4f08e368c890d91eecfbc4f91da0bc009a3c557bc4dfbf32022ad1141244ac1178d44de70fc9f3dea7add7cd9a658a34b9fae98a55d8f92331ce5 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-cursor@npm:3.1.0, cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: ^3.1.0 + checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 + languageName: node + linkType: hard + +"cli-spinners@npm:2.6.1": + version: 2.6.1 + resolution: "cli-spinners@npm:2.6.1" + checksum: 423409baaa7a58e5104b46ca1745fbfc5888bbd0b0c5a626e052ae1387060839c8efd512fb127e25769b3dc9562db1dc1b5add6e0b93b7ef64f477feb6416a45 + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0": + version: 2.7.0 + resolution: "cli-spinners@npm:2.7.0" + checksum: a9afaf73f58d1f951fb23742f503631b3cf513f43f4c7acb1b640100eb76bfa16efbcd1994d149ffc6603a6d75dd3d4a516a76f125f90dce437de9b16fd0ee6f + languageName: node + linkType: hard + +"cli-width@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-width@npm:3.0.0" + checksum: 4c94af3769367a70e11ed69aa6095f1c600c0ff510f3921ab4045af961820d57c0233acfa8b6396037391f31b4c397e1f614d234294f979ff61430a6c166c3f6 + languageName: node + linkType: hard + +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^7.0.0 + checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + +"clone-deep@npm:4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: ^2.0.4 + kind-of: ^6.0.2 + shallow-clone: ^3.0.0 + checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd + languageName: node + linkType: hard + +"cmd-shim@npm:5.0.0, cmd-shim@npm:^5.0.0": + version: 5.0.0 + resolution: "cmd-shim@npm:5.0.0" + dependencies: + mkdirp-infer-owner: ^2.0.0 + checksum: 83d2a46cdf4adbb38d3d3184364b2df0e4c001ac770f5ca94373825d7a48838b4cb8a59534ef48f02b0d556caa047728589ca65c640c17c0b417b3afb34acfbb + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 + languageName: node + linkType: hard + +"collect-v8-coverage@npm:^1.0.0": + version: 1.0.1 + resolution: "collect-v8-coverage@npm:1.0.1" + checksum: 4efe0a1fccd517b65478a2364b33dadd0a43fc92a56f59aaece9b6186fe5177b2de471253587de7c91516f07c7268c2f6770b6cbcffc0e0ece353b766ec87e55 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b + languageName: node + linkType: hard + +"columnify@npm:1.6.0": + version: 1.6.0 + resolution: "columnify@npm:1.6.0" + dependencies: + strip-ansi: ^6.0.1 + wcwidth: ^1.0.0 + checksum: 0d590023616a27bcd2135c0f6ddd6fac94543263f9995538bbe391068976e30545e5534d369737ec7c3e9db4e53e70a277462de46aeb5a36e6997b4c7559c335 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"commander@npm:^4.0.0": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 + languageName: node + linkType: hard + +"common-ancestor-path@npm:^1.0.1": + version: 1.0.1 + resolution: "common-ancestor-path@npm:1.0.1" + checksum: 1d2e4186067083d8cc413f00fc2908225f04ae4e19417ded67faa6494fb313c4fcd5b28a52326d1a62b466e2b3a4325e92c31133c5fee628cdf8856b3a57c3d7 + languageName: node + linkType: hard + +"compare-func@npm:^2.0.0": + version: 2.0.0 + resolution: "compare-func@npm:2.0.0" + dependencies: + array-ify: ^1.0.0 + dot-prop: ^5.1.0 + checksum: fb71d70632baa1e93283cf9d80f30ac97f003aabee026e0b4426c9716678079ef5fea7519b84d012cbed938c476493866a38a79760564a9e21ae9433e40e6f0d + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"concat-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "concat-stream@npm:2.0.0" + dependencies: + buffer-from: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^3.0.2 + typedarray: ^0.0.6 + checksum: d7f75d48f0ecd356c1545d87e22f57b488172811b1181d96021c7c4b14ab8855f5313280263dca44bb06e5222f274d047da3e290a38841ef87b59719bde967c7 + languageName: node + linkType: hard + +"config-chain@npm:1.1.12": + version: 1.1.12 + resolution: "config-chain@npm:1.1.12" + dependencies: + ini: ^1.3.4 + proto-list: ~1.2.1 + checksum: a16332f87212b4015afcdfc95fe42b40b162e7f10b4f4370ab3239979b6e69a41b4e6fb34d7891aa028a557f2340da236f810df433b18dfa5c408b2eb8489bf7 + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed + languageName: node + linkType: hard + +"conventional-changelog-angular@npm:5.0.12": + version: 5.0.12 + resolution: "conventional-changelog-angular@npm:5.0.12" + dependencies: + compare-func: ^2.0.0 + q: ^1.5.1 + checksum: 552db8762d210a5172b1ad8cd95312e2e2a0483ba43f8d30b075a56ccf05231fdca1d4d5843028d43bec6bc7f903f480005efc5386587321a15a1fc4d2b73016 + languageName: node + linkType: hard + +"conventional-changelog-core@npm:4.2.4": + version: 4.2.4 + resolution: "conventional-changelog-core@npm:4.2.4" + dependencies: + add-stream: ^1.0.0 + conventional-changelog-writer: ^5.0.0 + conventional-commits-parser: ^3.2.0 + dateformat: ^3.0.0 + get-pkg-repo: ^4.0.0 + git-raw-commits: ^2.0.8 + git-remote-origin-url: ^2.0.0 + git-semver-tags: ^4.1.1 + lodash: ^4.17.15 + normalize-package-data: ^3.0.0 + q: ^1.5.1 + read-pkg: ^3.0.0 + read-pkg-up: ^3.0.0 + through2: ^4.0.0 + checksum: 56d5194040495ea316e53fd64cb3614462c318f0fe54b1bf25aba6fba9b3d51cb9fdf7ac5b766f17e5529a3f90e317257394e00b0a9a5ce42caf3a59f82afb3a + languageName: node + linkType: hard + +"conventional-changelog-preset-loader@npm:^2.3.4": + version: 2.3.4 + resolution: "conventional-changelog-preset-loader@npm:2.3.4" + checksum: 23a889b7fcf6fe7653e61f32a048877b2f954dcc1e0daa2848c5422eb908e6f24c78372f8d0d2130b5ed941c02e7010c599dccf44b8552602c6c8db9cb227453 + languageName: node + linkType: hard + +"conventional-changelog-writer@npm:^5.0.0": + version: 5.0.1 + resolution: "conventional-changelog-writer@npm:5.0.1" + dependencies: + conventional-commits-filter: ^2.0.7 + dateformat: ^3.0.0 + handlebars: ^4.7.7 + json-stringify-safe: ^5.0.1 + lodash: ^4.17.15 + meow: ^8.0.0 + semver: ^6.0.0 + split: ^1.0.0 + through2: ^4.0.0 + bin: + conventional-changelog-writer: cli.js + checksum: 5c0129db44577f14b1f8de225b62a392a9927ba7fe3422cb21ad71a771b8472bd03badb7c87cb47419913abc3f2ce3759b69f59550cdc6f7a7b0459015b3b44c + languageName: node + linkType: hard + +"conventional-commits-filter@npm:^2.0.7": + version: 2.0.7 + resolution: "conventional-commits-filter@npm:2.0.7" + dependencies: + lodash.ismatch: ^4.4.0 + modify-values: ^1.0.0 + checksum: feb567f680a6da1baaa1ef3cff393b3c56a5828f77ab9df5e70626475425d109a6fee0289b4979223c62bbd63bf9c98ef532baa6fcb1b66ee8b5f49077f5d46c + languageName: node + linkType: hard + +"conventional-commits-parser@npm:^3.2.0": + version: 3.2.4 + resolution: "conventional-commits-parser@npm:3.2.4" + dependencies: + JSONStream: ^1.0.4 + is-text-path: ^1.0.1 + lodash: ^4.17.15 + meow: ^8.0.0 + split2: ^3.0.0 + through2: ^4.0.0 + bin: + conventional-commits-parser: cli.js + checksum: 1627ff203bc9586d89e47a7fe63acecf339aba74903b9114e23d28094f79d4e2d6389bf146ae561461dcba8fc42e7bc228165d2b173f15756c43f1d32bc50bfd + languageName: node + linkType: hard + +"conventional-recommended-bump@npm:6.1.0": + version: 6.1.0 + resolution: "conventional-recommended-bump@npm:6.1.0" + dependencies: + concat-stream: ^2.0.0 + conventional-changelog-preset-loader: ^2.3.4 + conventional-commits-filter: ^2.0.7 + conventional-commits-parser: ^3.2.0 + git-raw-commits: ^2.0.8 + git-semver-tags: ^4.1.1 + meow: ^8.0.0 + q: ^1.5.1 + bin: + conventional-recommended-bump: cli.js + checksum: da1d7a5f3b9f7706bede685cdcb3db67997fdaa43c310fd5bf340955c84a4b85dbb9427031522ee06dad290b730a54be987b08629d79c73720dbad3a2531146b + languageName: node + linkType: hard + +"convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"cosmiconfig@npm:7.0.0": + version: 7.0.0 + resolution: "cosmiconfig@npm:7.0.0" + dependencies: + "@types/parse-json": ^4.0.0 + import-fresh: ^3.2.1 + parse-json: ^5.0.0 + path-type: ^4.0.0 + yaml: ^1.10.0 + checksum: 6801feaa0249e9b9fdde5b3d70dc33b4f9c69095bec94d67e3fe08b66eac24dc7e2099f053597cfbc94b743de269aa5d2cfa7da3fde765433423b06bd122941a + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"cssom@npm:^0.5.0": + version: 0.5.0 + resolution: "cssom@npm:0.5.0" + checksum: 823471aa30091c59e0a305927c30e7768939b6af70405808f8d2ce1ca778cddcb24722717392438329d1691f9a87cb0183b64b8d779b56a961546d54854fde01 + languageName: node + linkType: hard + +"cssom@npm:~0.3.6": + version: 0.3.8 + resolution: "cssom@npm:0.3.8" + checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 + languageName: node + linkType: hard + +"cssstyle@npm:^2.3.0": + version: 2.3.0 + resolution: "cssstyle@npm:2.3.0" + dependencies: + cssom: ~0.3.6 + checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 + languageName: node + linkType: hard + +"dargs@npm:^7.0.0": + version: 7.0.0 + resolution: "dargs@npm:7.0.0" + checksum: b8f1e3cba59c42e1f13a114ad4848c3fc1cf7470f633ee9e9f1043762429bc97d91ae31b826fb135eefde203a3fdb20deb0c0a0222ac29d937b8046085d668d1 + languageName: node + linkType: hard + +"data-urls@npm:^3.0.2": + version: 3.0.2 + resolution: "data-urls@npm:3.0.2" + dependencies: + abab: ^2.0.6 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + checksum: 033fc3dd0fba6d24bc9a024ddcf9923691dd24f90a3d26f6545d6a2f71ec6956f93462f2cdf2183cc46f10dc01ed3bcb36731a8208456eb1a08147e571fe2a76 + languageName: node + linkType: hard + +"dateformat@npm:^3.0.0": + version: 3.0.3 + resolution: "dateformat@npm:3.0.3" + checksum: ca4911148abb09887bd9bdcd632c399b06f3ecad709a18eb594d289a1031982f441e08e281db77ffebcb2cbcbfa1ac578a7cbfbf8743f41009aa5adc1846ed34 + languageName: node + linkType: hard + +"datx@workspace:.": + version: 0.0.0-use.local + resolution: "datx@workspace:." + dependencies: + "@infinumjs/eslint-config-core-ts": ^3.3.1 + "@typescript-eslint/eslint-plugin": ^5.27.1 + "@typescript-eslint/parser": ^5.27.1 + eslint: ^8.35.0 + husky: ^8.0.3 + lerna: ^6.5.1 + prettier: 2.8.4 + typescript: 4.9.5 + languageName: unknown + linkType: soft + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"debuglog@npm:^1.0.1": + version: 1.0.1 + resolution: "debuglog@npm:1.0.1" + checksum: 970679f2eb7a73867e04d45b52583e7ec6dee1f33c058e9147702e72a665a9647f9c3d6e7c2f66f6bf18510b23eb5ded1b617e48ac1db23603809c5ddbbb9763 + languageName: node + linkType: hard + +"decamelize-keys@npm:^1.1.0": + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" + dependencies: + decamelize: ^1.1.0 + map-obj: ^1.0.0 + checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 + languageName: node + linkType: hard + +"decamelize@npm:^1.1.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa + languageName: node + linkType: hard + +"decimal.js@npm:^10.4.2": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae + languageName: node + linkType: hard + +"dedent@npm:0.7.0, dedent@npm:^0.7.0": + version: 0.7.0 + resolution: "dedent@npm:0.7.0" + checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.2.2 + resolution: "deepmerge@npm:4.2.2" + checksum: a8c43a1ed8d6d1ed2b5bf569fa4c8eb9f0924034baf75d5d406e47e157a451075c4db353efea7b6bcc56ec48116a8ce72fccf867b6e078e7c561904b5897530b + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: ^1.0.2 + checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a + languageName: node + linkType: hard + +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + +"depd@npm:^1.1.2": + version: 1.1.2 + resolution: "depd@npm:1.1.2" + checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 + languageName: node + linkType: hard + +"deprecation@npm:^2.0.0, deprecation@npm:^2.3.1": + version: 2.3.1 + resolution: "deprecation@npm:2.3.1" + checksum: f56a05e182c2c195071385455956b0c4106fe14e36245b00c689ceef8e8ab639235176a96977ba7c74afb173317fac2e0ec6ec7a1c6d1e6eaa401c586c714132 + languageName: node + linkType: hard + +"detect-indent@npm:^5.0.0": + version: 5.0.0 + resolution: "detect-indent@npm:5.0.0" + checksum: 61763211daa498e00eec073aba95d544ae5baed19286a0a655697fa4fffc9f4539c8376e2c7df8fa11d6f8eaa16c1e6a689f403ac41ee78a060278cdadefe2ff + languageName: node + linkType: hard + +"detect-newline@npm:^3.0.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 + languageName: node + linkType: hard + +"dezalgo@npm:^1.0.0": + version: 1.0.4 + resolution: "dezalgo@npm:1.0.4" + dependencies: + asap: ^2.0.0 + wrappy: 1 + checksum: 895389c6aead740d2ab5da4d3466d20fa30f738010a4d3f4dcccc9fc645ca31c9d10b7e1804ae489b1eb02c7986f9f1f34ba132d409b043082a86d9a4e745624 + languageName: node + linkType: hard + +"diff-sequences@npm:^29.3.1": + version: 29.3.1 + resolution: "diff-sequences@npm:29.3.1" + checksum: 8edab8c383355022e470779a099852d595dd856f9f5bd7af24f177e74138a668932268b4c4fd54096eed643861575c3652d4ecbbb1a9d710488286aed3ffa443 + languageName: node + linkType: hard + +"diff-sequences@npm:^29.4.3": + version: 29.4.3 + resolution: "diff-sequences@npm:29.4.3" + checksum: 28b265e04fdddcf7f9f814effe102cc95a9dec0564a579b5aed140edb24fc345c611ca52d76d725a3cab55d3888b915b5e8a4702e0f6058968a90fa5f41fcde7 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce + languageName: node + linkType: hard + +"domexception@npm:^4.0.0": + version: 4.0.0 + resolution: "domexception@npm:4.0.0" + dependencies: + webidl-conversions: ^7.0.0 + checksum: ddbc1268edf33a8ba02ccc596735ede80375ee0cf124b30d2f05df5b464ba78ef4f49889b6391df4a04954e63d42d5631c7fcf8b1c4f12bc531252977a5f13d5 + languageName: node + linkType: hard + +"dot-prop@npm:6.0.1": + version: 6.0.1 + resolution: "dot-prop@npm:6.0.1" + dependencies: + is-obj: ^2.0.0 + checksum: 0f47600a4b93e1dc37261da4e6909652c008832a5d3684b5bf9a9a0d3f4c67ea949a86dceed9b72f5733ed8e8e6383cc5958df3bbd0799ee317fd181f2ece700 + languageName: node + linkType: hard + +"dot-prop@npm:^5.1.0": + version: 5.3.0 + resolution: "dot-prop@npm:5.3.0" + dependencies: + is-obj: ^2.0.0 + checksum: d5775790093c234ef4bfd5fbe40884ff7e6c87573e5339432870616331189f7f5d86575c5b5af2dcf0f61172990f4f734d07844b1f23482fff09e3c4bead05ea + languageName: node + linkType: hard + +"dotenv@npm:~10.0.0": + version: 10.0.0 + resolution: "dotenv@npm:10.0.0" + checksum: f412c5fe8c24fbe313d302d2500e247ba8a1946492db405a4de4d30dd0eb186a88a43f13c958c5a7de303938949c4231c56994f97d05c4bc1f22478d631b4005 + languageName: node + linkType: hard + +"duplexer@npm:^0.1.1": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 + languageName: node + linkType: hard + +"ejs@npm:^3.1.7": + version: 3.1.8 + resolution: "ejs@npm:3.1.8" + dependencies: + jake: ^10.8.5 + bin: + ejs: bin/cli.js + checksum: 1d40d198ad52e315ccf37e577bdec06e24eefdc4e3c27aafa47751a03a0c7f0ec4310254c9277a5f14763c3cd4bbacce27497332b2d87c74232b9b1defef8efc + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.251": + version: 1.4.284 + resolution: "electron-to-chromium@npm:1.4.284" + checksum: be496e9dca6509dbdbb54dc32146fc99f8eb716d28a7ee8ccd3eba0066561df36fc51418d8bd7cf5a5891810bf56c0def3418e74248f51ea4a843d423603d10a + languageName: node + linkType: hard + +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: ^1.4.0 + checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + +"enquirer@npm:~2.3.6": + version: 2.3.6 + resolution: "enquirer@npm:2.3.6" + dependencies: + ansi-colors: ^4.1.1 + checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884 + languageName: node + linkType: hard + +"entities@npm:^4.4.0": + version: 4.4.0 + resolution: "entities@npm:4.4.0" + checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"envinfo@npm:^7.7.4": + version: 7.8.1 + resolution: "envinfo@npm:7.8.1" + bin: + envinfo: dist/cli.js + checksum: de736c98d6311c78523628ff127af138451b162e57af5293c1b984ca821d0aeb9c849537d2fde0434011bed33f6bca5310ca2aab8a51a3f28fc719e89045d648 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 + languageName: node + linkType: hard + +"esbuild@npm:^0.17.6": + version: 0.17.10 + resolution: "esbuild@npm:0.17.10" + dependencies: + "@esbuild/android-arm": 0.17.10 + "@esbuild/android-arm64": 0.17.10 + "@esbuild/android-x64": 0.17.10 + "@esbuild/darwin-arm64": 0.17.10 + "@esbuild/darwin-x64": 0.17.10 + "@esbuild/freebsd-arm64": 0.17.10 + "@esbuild/freebsd-x64": 0.17.10 + "@esbuild/linux-arm": 0.17.10 + "@esbuild/linux-arm64": 0.17.10 + "@esbuild/linux-ia32": 0.17.10 + "@esbuild/linux-loong64": 0.17.10 + "@esbuild/linux-mips64el": 0.17.10 + "@esbuild/linux-ppc64": 0.17.10 + "@esbuild/linux-riscv64": 0.17.10 + "@esbuild/linux-s390x": 0.17.10 + "@esbuild/linux-x64": 0.17.10 + "@esbuild/netbsd-x64": 0.17.10 + "@esbuild/openbsd-x64": 0.17.10 + "@esbuild/sunos-x64": 0.17.10 + "@esbuild/win32-arm64": 0.17.10 + "@esbuild/win32-ia32": 0.17.10 + "@esbuild/win32-x64": 0.17.10 + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 803de327036528c140b3d1d8e148604fd1446062b63d2b5a49cd8fe5fa607dc41be915f28dec1242be77164378e3ca27a2ed2968692a73cc833896c7bebc0e12 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"escodegen@npm:^2.0.0": + version: 2.0.0 + resolution: "escodegen@npm:2.0.0" + dependencies: + esprima: ^4.0.1 + estraverse: ^5.2.0 + esutils: ^2.0.2 + optionator: ^0.8.1 + source-map: ~0.6.1 + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: bin/escodegen.js + esgenerate: bin/esgenerate.js + checksum: 5aa6b2966fafe0545e4e77936300cc94ad57cfe4dc4ebff9950492eaba83eef634503f12d7e3cbd644ecc1bab388ad0e92b06fd32222c9281a75d1cf02ec6cef + languageName: node + linkType: hard + +"eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^4.1.1 + checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb + languageName: node + linkType: hard + +"eslint-scope@npm:^7.1.1": + version: 7.1.1 + resolution: "eslint-scope@npm:7.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: 9f6e974ab2db641ca8ab13508c405b7b859e72afe9f254e8131ff154d2f40c99ad4545ce326fd9fde3212ff29707102562a4834f1c48617b35d98c71a97fbf3e + languageName: node + linkType: hard + +"eslint-utils@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-utils@npm:3.0.0" + dependencies: + eslint-visitor-keys: ^2.0.0 + peerDependencies: + eslint: ">=5" + checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-visitor-keys@npm:2.1.0" + checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0": + version: 3.3.0 + resolution: "eslint-visitor-keys@npm:3.3.0" + checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 + languageName: node + linkType: hard + +"eslint@npm:^8.35.0": + version: 8.35.0 + resolution: "eslint@npm:8.35.0" + dependencies: + "@eslint/eslintrc": ^2.0.0 + "@eslint/js": 8.35.0 + "@humanwhocodes/config-array": ^0.11.8 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + ajv: ^6.10.0 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.1.1 + eslint-utils: ^3.0.0 + eslint-visitor-keys: ^3.3.0 + espree: ^9.4.0 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + grapheme-splitter: ^1.0.4 + ignore: ^5.2.0 + import-fresh: ^3.0.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-sdsl: ^4.1.4 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.1 + regexpp: ^3.2.0 + strip-ansi: ^6.0.1 + strip-json-comments: ^3.1.0 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: 6212173691d90b1bc94dd3d640e1f210374b30c3905fc0a15e501cf71c6ca52aa3d80ea7a9a245adaaed26d6019169e01fb6881b3f2885b188d37069c749308c + languageName: node + linkType: hard + +"espree@npm:^9.4.0": + version: 9.4.1 + resolution: "espree@npm:9.4.1" + dependencies: + acorn: ^8.8.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.3.0 + checksum: 4d266b0cf81c7dfe69e542c7df0f246e78d29f5b04dda36e514eb4c7af117ee6cfbd3280e560571ed82ff6c9c3f0003c05b82583fc7a94006db7497c4fe4270e + languageName: node + linkType: hard + +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"esquery@npm:^1.0.1": + version: 1.4.0 + resolution: "esquery@npm:1.4.0" + dependencies: + estraverse: ^5.1.0 + checksum: a0807e17abd7fbe5fbd4fab673038d6d8a50675cdae6b04fbaa520c34581be0c5fa24582990e8acd8854f671dd291c78bb2efb9e0ed5b62f33bac4f9cf820210 + languageName: node + linkType: hard + +"esquery@npm:^1.4.2": + version: 1.4.2 + resolution: "esquery@npm:1.4.2" + dependencies: + estraverse: ^5.1.0 + checksum: 2f4ad89c5aafaca61cc2c15e256190f0d6deb4791cae6552d3cb4b1eb8867958cdf27a56aaa3272ff17435e3eaa19ee0d4129fac336ca6373d7354d7b5da7966 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.4": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 + languageName: node + linkType: hard + +"execa@npm:5.0.0": + version: 5.0.0 + resolution: "execa@npm:5.0.0" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.0 + human-signals: ^2.1.0 + is-stream: ^2.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^4.0.1 + onetime: ^5.1.2 + signal-exit: ^3.0.3 + strip-final-newline: ^2.0.0 + checksum: a044367ebdcc68ca019810cb134510fc77bbc55c799122258ee0e00e289c132941ab48c2a331a036699c42bc8d479d451ae67c105fce5ce5cc813e7dd92d642b + languageName: node + linkType: hard + +"execa@npm:^5.0.0": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.0 + human-signals: ^2.1.0 + is-stream: ^2.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^4.0.1 + onetime: ^5.1.2 + signal-exit: ^3.0.3 + strip-final-newline: ^2.0.0 + checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 + languageName: node + linkType: hard + +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 + languageName: node + linkType: hard + +"expect@npm:^29.0.0": + version: 29.3.1 + resolution: "expect@npm:29.3.1" + dependencies: + "@jest/expect-utils": ^29.3.1 + jest-get-type: ^29.2.0 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 + checksum: e9588c2a430b558b9a3dc72d4ad05f36b047cb477bc6a7bb9cfeef7614fe7e5edbab424c2c0ce82739ee21ecbbbd24596259528209f84cd72500cc612d910d30 + languageName: node + linkType: hard + +"expect@npm:^29.4.3": + version: 29.4.3 + resolution: "expect@npm:29.4.3" + dependencies: + "@jest/expect-utils": ^29.4.3 + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 + checksum: ff9dd8c50c0c6fd4b2b00f6dbd7ab0e2063fe1953be81a8c10ae1c005c7f5667ba452918e2efb055504b72b701a4f82575a081a0a7158efb16d87991b0366feb + languageName: node + linkType: hard + +"external-editor@npm:^3.0.3": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: ^0.7.0 + iconv-lite: ^0.4.24 + tmp: ^0.0.33 + checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fast-glob@npm:3.2.7": + version: 3.2.7 + resolution: "fast-glob@npm:3.2.7" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: 2f4708ff112d2b451888129fdd9a0938db88b105b0ddfd043c064e3c4d3e20eed8d7c7615f7565fee660db34ddcf08a2db1bf0ab3c00b87608e4719694642d78 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9": + version: 3.2.12 + resolution: "fast-glob@npm:3.2.12" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.14.0 + resolution: "fastq@npm:1.14.0" + dependencies: + reusify: ^1.0.4 + checksum: da2c05ec1446ef77b8ba2b76619c90d483404f5087e71e77469fbee797280a1f4ef26a63be15b2377198bc20d09fdf25c7d6e1e492a1e568a29dfdd9bcb7538c + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: 2.1.1 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + languageName: node + linkType: hard + +"figures@npm:3.2.0, figures@npm:^3.0.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: ^1.0.5 + checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + languageName: node + linkType: hard + +"filelist@npm:^1.0.1": + version: 1.0.4 + resolution: "filelist@npm:1.0.4" + dependencies: + minimatch: ^5.0.1 + checksum: a303573b0821e17f2d5e9783688ab6fbfce5d52aaac842790ae85e704a6f5e4e3538660a63183d6453834dedf1e0f19a9dadcebfa3e926c72397694ea11f5160 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"find-up@npm:^2.0.0": + version: 2.1.0 + resolution: "find-up@npm:2.1.0" + dependencies: + locate-path: ^2.0.0 + checksum: 43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd + languageName: node + linkType: hard + +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.0.4 + resolution: "flat-cache@npm:3.0.4" + dependencies: + flatted: ^3.1.0 + rimraf: ^3.0.2 + checksum: 4fdd10ecbcbf7d520f9040dd1340eb5dfe951e6f0ecf2252edeec03ee68d989ec8b9a20f4434270e71bcfd57800dc09b3344fca3966b2eb8f613072c7d9a2365 + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d + languageName: node + linkType: hard + +"flatted@npm:^3.1.0": + version: 3.2.7 + resolution: "flatted@npm:3.2.7" + checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.0": + version: 1.15.2 + resolution: "follow-redirects@npm:1.15.2" + peerDependenciesMeta: + debug: + optional: true + checksum: faa66059b66358ba65c234c2f2a37fcec029dc22775f35d9ad6abac56003268baf41e55f9ee645957b32c7d9f62baf1f0b906e68267276f54ec4b4c597c2b190 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d + languageName: node + linkType: hard + +"fs-extra@npm:9.1.0, fs-extra@npm:^9.1.0": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: ^1.0.0 + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 + languageName: node + linkType: hard + +"fs-extra@npm:^11.1.0": + version: 11.1.0 + resolution: "fs-extra@npm:11.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: 5ca476103fa1f5ff4a9b3c4f331548f8a3c1881edaae323a4415d3153b5dc11dc6a981c8d1dd93eec8367ceee27b53f8bd27eecbbf66ffcdd04927510c171e7f + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: latest + checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.2 + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1": + version: 1.1.1 + resolution: "function-bind@npm:1.1.1" + checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 + has-unicode: ^2.0.1 + signal-exit: ^3.0.7 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 + languageName: node + linkType: hard + +"get-pkg-repo@npm:^4.0.0": + version: 4.2.1 + resolution: "get-pkg-repo@npm:4.2.1" + dependencies: + "@hutson/parse-repository-url": ^3.0.0 + hosted-git-info: ^4.0.0 + through2: ^2.0.0 + yargs: ^16.2.0 + bin: + get-pkg-repo: src/cli.js + checksum: 5abf169137665e45b09a857b33ad2fdcf2f4a09f0ecbd0ebdd789a7ce78c39186a21f58621127eb724d2d4a3a7ee8e6bd4ac7715efda01ad5200665afc218e0d + languageName: node + linkType: hard + +"get-port@npm:5.1.1": + version: 5.1.1 + resolution: "get-port@npm:5.1.1" + checksum: 0162663ffe5c09e748cd79d97b74cd70e5a5c84b760a475ce5767b357fb2a57cb821cee412d646aa8a156ed39b78aab88974eddaa9e5ee926173c036c0713787 + languageName: node + linkType: hard + +"get-stream@npm:6.0.0": + version: 6.0.0 + resolution: "get-stream@npm:6.0.0" + checksum: 587e6a93127f9991b494a566f4971cf7a2645dfa78034818143480a80587027bdd8826cdcf80d0eff4a4a19de0d231d157280f24789fc9cc31492e1dcc1290cf + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad + languageName: node + linkType: hard + +"git-raw-commits@npm:^2.0.8": + version: 2.0.11 + resolution: "git-raw-commits@npm:2.0.11" + dependencies: + dargs: ^7.0.0 + lodash: ^4.17.15 + meow: ^8.0.0 + split2: ^3.0.0 + through2: ^4.0.0 + bin: + git-raw-commits: cli.js + checksum: c178af43633684106179793b6e3473e1d2bb50bb41d04e2e285ea4eef342ca4090fee6bc8a737552fde879d22346c90de5c49f18c719a0f38d4c934f258a0f79 + languageName: node + linkType: hard + +"git-remote-origin-url@npm:^2.0.0": + version: 2.0.0 + resolution: "git-remote-origin-url@npm:2.0.0" + dependencies: + gitconfiglocal: ^1.0.0 + pify: ^2.3.0 + checksum: 85263a09c044b5f4fe2acc45cbb3c5331ab2bd4484bb53dfe7f3dd593a4bf90a9786a2e00b9884524331f50b3da18e8c924f01c2944087fc7f342282c4437b73 + languageName: node + linkType: hard + +"git-semver-tags@npm:^4.1.1": + version: 4.1.1 + resolution: "git-semver-tags@npm:4.1.1" + dependencies: + meow: ^8.0.0 + semver: ^6.0.0 + bin: + git-semver-tags: cli.js + checksum: e16d02a515c0f88289a28b5bf59bf42c0dc053765922d3b617ae4b50546bd4f74a25bf3ad53b91cb6c1159319a2e92533b160c573b856c2629125c8b26b3b0e3 + languageName: node + linkType: hard + +"git-up@npm:^7.0.0": + version: 7.0.0 + resolution: "git-up@npm:7.0.0" + dependencies: + is-ssh: ^1.4.0 + parse-url: ^8.1.0 + checksum: 2faadbab51e94d2ffb220e426e950087cc02c15d664e673bd5d1f734cfa8196fed8b19493f7bf28fe216d087d10e22a7fd9b63687e0ba7d24f0ddcfb0a266d6e + languageName: node + linkType: hard + +"git-url-parse@npm:13.1.0": + version: 13.1.0 + resolution: "git-url-parse@npm:13.1.0" + dependencies: + git-up: ^7.0.0 + checksum: 212a9b0343e9199998b6a532efe2014476a7a1283af393663ca49ac28d4768929aad16d3322e2685236065ee394dbc93e7aa63a48956531e984c56d8b5edb54d + languageName: node + linkType: hard + +"gitconfiglocal@npm:^1.0.0": + version: 1.0.0 + resolution: "gitconfiglocal@npm:1.0.0" + dependencies: + ini: ^1.3.2 + checksum: e6d2764c15bbab6d1d1000d1181bb907f6b3796bb04f63614dba571b18369e0ecb1beaf27ce8da5b24307ef607e3a5f262a67cb9575510b9446aac697d421beb + languageName: node + linkType: hard + +"glob-parent@npm:5.1.2, glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + +"glob@npm:7.1.4": + version: 7.1.4 + resolution: "glob@npm:7.1.4" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: f52480fc82b1e66e52990f0f2e7306447d12294c83fbbee0395e761ad1178172012a7cc0673dbf4810baac400fc09bf34484c08b5778c216403fd823db281716 + languageName: node + linkType: hard + +"glob@npm:7.1.6": + version: 7.1.6 + resolution: "glob@npm:7.1.6" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 351d549dd90553b87c2d3f90ce11aed9e1093c74130440e7ae0592e11bbcd2ce7f0ebb8ba6bfe63aaf9b62166a7f4c80cb84490ae5d78408bb2572bf7d4ee0a6 + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.1.1 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"glob@npm:^8.0.1": + version: 8.0.3 + resolution: "glob@npm:8.0.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^5.0.1 + once: ^1.3.0 + checksum: 50bcdea19d8e79d8de5f460b1939ffc2b3299eac28deb502093fdca22a78efebc03e66bf54f0abc3d3d07d8134d19a32850288b7440d77e072aa55f9d33b18c5 + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.19.0 + resolution: "globals@npm:13.19.0" + dependencies: + type-fest: ^0.20.2 + checksum: a000dbd00bcf28f0941d8a29c3522b1c3b8e4bfe4e60e262c477a550c3cbbe8dbe2925a6905f037acd40f9a93c039242e1f7079c76b0fd184bc41dcc3b5c8e2e + languageName: node + linkType: hard + +"globby@npm:11.1.0, globby@npm:^11.0.3, globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.2.9 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^3.0.0 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"graceful-fs@npm:4.2.10, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da + languageName: node + linkType: hard + +"grapheme-splitter@npm:^1.0.4": + version: 1.0.4 + resolution: "grapheme-splitter@npm:1.0.4" + checksum: 0c22ec54dee1b05cd480f78cf14f732cb5b108edc073572c4ec205df4cd63f30f8db8025afc5debc8835a8ddeacf648a1c7992fe3dcd6ad38f9a476d84906620 + languageName: node + linkType: hard + +"handlebars@npm:^4.7.7": + version: 4.7.7 + resolution: "handlebars@npm:4.7.7" + dependencies: + minimist: ^1.2.5 + neo-async: ^2.6.0 + source-map: ^0.6.1 + uglify-js: ^3.1.4 + wordwrap: ^1.0.0 + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 1e79a43f5e18d15742977cb987923eab3e2a8f44f2d9d340982bcb69e1735ed049226e534d7c1074eaddaf37e4fb4f471a8adb71cddd5bc8cf3f894241df5cee + languageName: node + linkType: hard + +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: 7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-unicode@npm:2.0.1, has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + languageName: node + linkType: hard + +"has@npm:^1.0.3": + version: 1.0.3 + resolution: "has@npm:1.0.3" + dependencies: + function-bind: ^1.1.1 + checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd + languageName: node + linkType: hard + +"hosted-git-info@npm:^3.0.6": + version: 3.0.8 + resolution: "hosted-git-info@npm:3.0.8" + dependencies: + lru-cache: ^6.0.0 + checksum: 5af7a69581acb84206a7b8e009f4680c36396814e92c8a83973dfb3b87e44e44d1f7b8eaf3e4a953686482770ecb78406a4ce4666bfdfe447762434127871d8d + languageName: node + linkType: hard + +"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": + version: 4.1.0 + resolution: "hosted-git-info@npm:4.1.0" + dependencies: + lru-cache: ^6.0.0 + checksum: c3f87b3c2f7eb8c2748c8f49c0c2517c9a95f35d26f4bf54b2a8cba05d2e668f3753548b6ea366b18ec8dadb4e12066e19fa382a01496b0ffa0497eb23cbe461 + languageName: node + linkType: hard + +"hosted-git-info@npm:^5.0.0": + version: 5.2.1 + resolution: "hosted-git-info@npm:5.2.1" + dependencies: + lru-cache: ^7.5.1 + checksum: fa35df185224adfd69141f3b2f8cc31f50e705a5ebb415ccfbfd055c5b94bd08d3e658edf1edad9e2ac7d81831ac7cf261f5d219b3adc8d744fb8cdacaaf2ead + languageName: node + linkType: hard + +"html-encoding-sniffer@npm:^3.0.0": + version: 3.0.0 + resolution: "html-encoding-sniffer@npm:3.0.0" + dependencies: + whatwg-encoding: ^2.0.0 + checksum: 8d806aa00487e279e5ccb573366a951a9f68f65c90298eac9c3a2b440a7ffe46615aff2995a2f61c6746c639234e6179a97e18ca5ccbbf93d3725ef2099a4502 + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.0": + version: 4.1.0 + resolution: "http-cache-semantics@npm:4.1.0" + checksum: 974de94a81c5474be07f269f9fd8383e92ebb5a448208223bfb39e172a9dbc26feff250192ecc23b9593b3f92098e010406b0f24bd4d588d631f80214648ed42 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0, https-proxy-agent@npm:^5.0.1": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + +"husky@npm:^8.0.3": + version: 8.0.3 + resolution: "husky@npm:8.0.3" + bin: + husky: lib/bin.js + checksum: 837bc7e4413e58c1f2946d38fb050f5d7324c6f16b0fd66411ffce5703b294bd21429e8ba58711cd331951ee86ed529c5be4f76805959ff668a337dbfa82a1b0 + languageName: node + linkType: hard + +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: ">= 2.1.2 < 3" + checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + +"ignore-walk@npm:^5.0.1": + version: 5.0.1 + resolution: "ignore-walk@npm:5.0.1" + dependencies: + minimatch: ^5.0.1 + checksum: 1a4ef35174653a1aa6faab3d9f8781269166536aee36a04946f6e2b319b2475c1903a75ed42f04219274128242f49d0a10e20c4354ee60d9548e97031451150b + languageName: node + linkType: hard + +"ignore@npm:^5.0.4, ignore@npm:^5.2.0": + version: 5.2.4 + resolution: "ignore@npm:5.2.4" + checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef + languageName: node + linkType: hard + +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: ^4.2.0 + resolve-cwd: ^3.0.0 + bin: + import-local-fixture: fixtures/cli.js + checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"infer-owner@npm:^1.0.4": + version: 1.0.4 + resolution: "infer-owner@npm:1.0.4" + checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"ini@npm:^1.3.2, ini@npm:^1.3.4": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 + languageName: node + linkType: hard + +"init-package-json@npm:3.0.2, init-package-json@npm:^3.0.2": + version: 3.0.2 + resolution: "init-package-json@npm:3.0.2" + dependencies: + npm-package-arg: ^9.0.1 + promzard: ^0.3.0 + read: ^1.0.7 + read-package-json: ^5.0.0 + semver: ^7.3.5 + validate-npm-package-license: ^3.0.4 + validate-npm-package-name: ^4.0.0 + checksum: e027f60e4a1564809eee790d5a842341c784888fd7c7ace5f9a34ea76224c0adb6f3ab3bf205cf1c9c877a6e1a76c68b00847a984139f60813125d7b42a23a13 + languageName: node + linkType: hard + +"inquirer@npm:^8.2.4": + version: 8.2.5 + resolution: "inquirer@npm:8.2.5" + dependencies: + ansi-escapes: ^4.2.1 + chalk: ^4.1.1 + cli-cursor: ^3.1.0 + cli-width: ^3.0.0 + external-editor: ^3.0.3 + figures: ^3.0.0 + lodash: ^4.17.21 + mute-stream: 0.0.8 + ora: ^5.4.1 + run-async: ^2.4.0 + rxjs: ^7.5.5 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + through: ^2.3.6 + wrap-ansi: ^7.0.0 + checksum: f13ee4c444187786fb393609dedf6b30870115a57b603f2e6424f29a99abc13446fd45ee22461c33c9c40a92a60a8df62d0d6b25d74fc6676fa4cb211de55b55 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c + languageName: node + linkType: hard + +"is-ci@npm:2.0.0": + version: 2.0.0 + resolution: "is-ci@npm:2.0.0" + dependencies: + ci-info: ^2.0.0 + bin: + is-ci: bin.js + checksum: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 + languageName: node + linkType: hard + +"is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": + version: 2.11.0 + resolution: "is-core-module@npm:2.11.0" + dependencies: + has: ^1.0.3 + checksum: f96fd490c6b48eb4f6d10ba815c6ef13f410b0ba6f7eb8577af51697de523e5f2cd9de1c441b51d27251bf0e4aebc936545e33a5d26d5d51f28d25698d4a8bab + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-generator-fn@npm:^2.0.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + +"is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: ^3.0.1 + checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c + languageName: node + linkType: hard + +"is-potential-custom-element-name@npm:^1.0.1": + version: 1.0.1 + resolution: "is-potential-custom-element-name@npm:1.0.1" + checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab + languageName: node + linkType: hard + +"is-ssh@npm:^1.4.0": + version: 1.4.0 + resolution: "is-ssh@npm:1.4.0" + dependencies: + protocols: ^2.0.1 + checksum: 75eaa17b538bee24b661fbeb0f140226ac77e904a6039f787bea418431e2162f1f9c4c4ccad3bd169e036cd701cc631406e8c505d9fa7e20164e74b47f86f40f + languageName: node + linkType: hard + +"is-stream@npm:2.0.0": + version: 2.0.0 + resolution: "is-stream@npm:2.0.0" + checksum: 4dc47738e26bc4f1b3be9070b6b9e39631144f204fc6f87db56961220add87c10a999ba26cf81699f9ef9610426f69cb08a4713feff8deb7d8cadac907826935 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"is-text-path@npm:^1.0.1": + version: 1.0.1 + resolution: "is-text-path@npm:1.0.1" + dependencies: + text-extensions: ^1.0.0 + checksum: fb5d78752c22b3f73a7c9540768f765ffcfa38c9e421e2b9af869565307fa1ae5e3d3a2ba016a43549742856846566d327da406e94a5846ec838a288b1704fd2 + languageName: node + linkType: hard + +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 + languageName: node + linkType: hard + +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: ^2.0.0 + checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.0 + resolution: "istanbul-lib-coverage@npm:3.2.0" + checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^6.3.0 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.0 + resolution: "istanbul-lib-report@npm:3.0.0" + dependencies: + istanbul-lib-coverage: ^3.0.0 + make-dir: ^3.0.0 + supports-color: ^7.1.0 + checksum: 3f29eb3f53c59b987386e07fe772d24c7f58c6897f34c9d7a296f4000de7ae3de9eb95c3de3df91dc65b134c84dee35c54eee572a56243e8907c48064e34ff1b + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.0": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: ^4.1.1 + istanbul-lib-coverage: ^3.0.0 + source-map: ^0.6.1 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.3": + version: 3.1.5 + resolution: "istanbul-reports@npm:3.1.5" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 + languageName: node + linkType: hard + +"jake@npm:^10.8.5": + version: 10.8.5 + resolution: "jake@npm:10.8.5" + dependencies: + async: ^3.2.3 + chalk: ^4.0.2 + filelist: ^1.0.1 + minimatch: ^3.0.4 + bin: + jake: ./bin/cli.js + checksum: 56c913ecf5a8d74325d0af9bc17a233bad50977438d44864d925bb6c45c946e0fee8c4c1f5fe2225471ef40df5222e943047982717ebff0d624770564d3c46ba + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-changed-files@npm:29.4.3" + dependencies: + execa: ^5.0.0 + p-limit: ^3.1.0 + checksum: 9a70bd8e92b37e18ad26d8bea97c516f41119fb7046b4255a13c76d557b0e54fa0629726de5a093fadfd6a0a08ce45da65a57086664d505b8db4b3133133e141 + languageName: node + linkType: hard + +"jest-circus@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-circus@npm:29.4.3" + dependencies: + "@jest/environment": ^29.4.3 + "@jest/expect": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^0.7.0 + is-generator-fn: ^2.0.0 + jest-each: ^29.4.3 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-runtime: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 + p-limit: ^3.1.0 + pretty-format: ^29.4.3 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 2739bef9c888743b49ff3fe303131381618e5d2f250f613a91240d9c86e19e6874fc904cbd8bcb02ec9ec59a84e5dae4ffec929f0c6171e87ddbc05508a137f4 + languageName: node + linkType: hard + +"jest-cli@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-cli@npm:29.4.3" + dependencies: + "@jest/core": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + import-local: ^3.0.2 + jest-config: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 + prompts: ^2.0.1 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: f4c9f6d76cde2c60a4169acbebb3f862728be03bcf3fe0077d2e55da7f9f3c3e9483cfa6e936832d35eabf96ee5ebf0300c4b0bd43cffff099801793466bfdd8 + languageName: node + linkType: hard + +"jest-config@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-config@npm:29.4.3" + dependencies: + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.4.3 + "@jest/types": ^29.4.3 + babel-jest: ^29.4.3 + chalk: ^4.0.0 + ci-info: ^3.2.0 + deepmerge: ^4.2.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-circus: ^29.4.3 + jest-environment-node: ^29.4.3 + jest-get-type: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-runner: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^29.4.3 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: 92f9a9c6850b18682cb01892774a33967472af23a5844438d8c68077d5f2a29b15b665e4e4db7de3d74002a6dca158cd5b2cb9f5debfd2cce5e1aee6c74e3873 + languageName: node + linkType: hard + +"jest-diff@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-diff@npm:29.3.1" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.3.1 + jest-get-type: ^29.2.0 + pretty-format: ^29.3.1 + checksum: ac5c09745f2b1897e6f53216acaf6ed44fc4faed8e8df053ff4ac3db5d2a1d06a17b876e49faaa15c8a7a26f5671bcbed0a93781dcc2835f781c79a716a591a9 + languageName: node + linkType: hard + +"jest-diff@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-diff@npm:29.4.3" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.4.3 + jest-get-type: ^29.4.3 + pretty-format: ^29.4.3 + checksum: 877fd1edffef6b319688c27b152e5b28e2bc4bcda5ce0ca90d7e137f9fafda4280bae25403d4c0bfd9806c2c0b15d966aa2dfaf5f9928ec8f1ccea7fa1d08ed6 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-docblock@npm:29.4.3" + dependencies: + detect-newline: ^3.0.0 + checksum: e0e9df1485bb8926e5b33478cdf84b3387d9caf3658e7dc1eaa6dc34cb93dea0d2d74797f6e940f0233a88f3dadd60957f2288eb8f95506361f85b84bf8661df + languageName: node + linkType: hard + +"jest-each@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-each@npm:29.4.3" + dependencies: + "@jest/types": ^29.4.3 + chalk: ^4.0.0 + jest-get-type: ^29.4.3 + jest-util: ^29.4.3 + pretty-format: ^29.4.3 + checksum: 1f72738338399efab0139eaea18bc198be0c6ed889770c8cbfa70bf9c724e8171fe1d3a29a94f9f39b8493ee6b2529bb350fb7c7c75e0d7eddfd28c253c79f9d + languageName: node + linkType: hard + +"jest-environment-jsdom@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-environment-jsdom@npm:29.4.3" + dependencies: + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 + "@types/jsdom": ^20.0.0 + "@types/node": "*" + jest-mock: ^29.4.3 + jest-util: ^29.4.3 + jsdom: ^20.0.0 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 3fb29bb4b472e05a38fdb235aa936ad469dfa2f6c1cab97fe3d1a7c585351976d05c7bbbd715b9747f070a225dcf10a9166df1461e0fb838ea7a377a8e64bed4 + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-environment-node@npm:29.4.3" + dependencies: + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 + "@types/node": "*" + jest-mock: ^29.4.3 + jest-util: ^29.4.3 + checksum: 3c7362edfdbd516e83af7367c95dde35761a482b174de9735c07633405486ec73e19624e9bea4333fca33c24e8d65eaa1aa6594e0cb6bfeeeb564ccc431ee61d + languageName: node + linkType: hard + +"jest-get-type@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-get-type@npm:29.2.0" + checksum: e396fd880a30d08940ed8a8e43cd4595db1b8ff09649018eb358ca701811137556bae82626af73459e3c0f8c5e972ed1e57fd3b1537b13a260893dac60a90942 + languageName: node + linkType: hard + +"jest-get-type@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-get-type@npm:29.4.3" + checksum: 6ac7f2dde1c65e292e4355b6c63b3a4897d7e92cb4c8afcf6d397f2682f8080e094c8b0b68205a74d269882ec06bf696a9de6cd3e1b7333531e5ed7b112605ce + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-haste-map@npm:29.4.3" + dependencies: + "@jest/types": ^29.4.3 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.4.3 + jest-util: ^29.4.3 + jest-worker: ^29.4.3 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: c7a83ebe6008b3fe96a96235e8153092e54b14df68e0f4205faedec57450df26b658578495a71c6d82494c01fbb44bca98c1506a6b2b9c920696dcc5d2e2bc59 + languageName: node + linkType: hard + +"jest-leak-detector@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-leak-detector@npm:29.4.3" + dependencies: + jest-get-type: ^29.4.3 + pretty-format: ^29.4.3 + checksum: ec2b45e6f0abce81bd0dd0f6fd06b433c24d1ec865267af7640fae540ec868b93752598e407a9184d9c7419cbf32e8789007cc8c1be1a84f8f7321a0f8ad01f1 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-matcher-utils@npm:29.3.1" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.3.1 + jest-get-type: ^29.2.0 + pretty-format: ^29.3.1 + checksum: 311e8d9f1e935216afc7dd8c6acf1fbda67a7415e1afb1bf72757213dfb025c1f2dc5e2c185c08064a35cdc1f2d8e40c57616666774ed1b03e57eb311c20ec77 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-matcher-utils@npm:29.4.3" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.4.3 + jest-get-type: ^29.4.3 + pretty-format: ^29.4.3 + checksum: 9e13cbe42d2113bab2691110c7c3ba5cec3b94abad2727e1de90929d0f67da444e9b2066da3b476b5bf788df53a8ede0e0a950cfb06a04e4d6d566d115ee4f1d + languageName: node + linkType: hard + +"jest-message-util@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-message-util@npm:29.3.1" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.3.1 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.3.1 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 15d0a2fca3919eb4570bbf575734780c4b9e22de6aae903c4531b346699f7deba834c6c86fe6e9a83ad17fac0f7935511cf16dce4d71a93a71ebb25f18a6e07b + languageName: node + linkType: hard + +"jest-message-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-message-util@npm:29.4.3" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.4.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.4.3 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 64f06b9550021e68da0059020bea8691283cf818918810bb67192d7b7fb9b691c7eadf55c2ca3cd04df5394918f2327245077095cdc0d6b04be3532d2c7d0ced + languageName: node + linkType: hard + +"jest-mock@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-mock@npm:29.4.3" + dependencies: + "@jest/types": ^29.4.3 + "@types/node": "*" + jest-util: ^29.4.3 + checksum: 8eb4a29b02d2cd03faac0290b6df6d23b4ffa43f72b21c7fff3c7dd04a2797355b1e85862b70b15341dd33ee3a693b17db5520a6f6e6b81ee75601987de6a1a2 + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.2": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 + languageName: node + linkType: hard + +"jest-regex-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-regex-util@npm:29.4.3" + checksum: 96fc7fc28cd4dd73a63c13a526202c4bd8b351d4e5b68b1a2a2c88da3308c2a16e26feaa593083eb0bac38cca1aa9dd05025412e7de013ba963fb8e66af22b8a + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-resolve-dependencies@npm:29.4.3" + dependencies: + jest-regex-util: ^29.4.3 + jest-snapshot: ^29.4.3 + checksum: 3ad934cd2170c9658d8800f84a975dafc866ec85b7ce391c640c09c3744ced337787620d8667dc8d1fa5e0b1493f973caa1a1bb980e4e6a50b46a1720baf0bd1 + languageName: node + linkType: hard + +"jest-resolve@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-resolve@npm:29.4.3" + dependencies: + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.4.3 + jest-pnp-resolver: ^1.2.2 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 + resolve: ^1.20.0 + resolve.exports: ^2.0.0 + slash: ^3.0.0 + checksum: 056a66beccf833f3c7e5a8fc9bfec218886e87b0b103decdbdf11893669539df489d1490cd6d5f0eea35731e8be0d2e955a6710498f970d2eae734da4df029dc + languageName: node + linkType: hard + +"jest-runner@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-runner@npm:29.4.3" + dependencies: + "@jest/console": ^29.4.3 + "@jest/environment": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.13.1 + graceful-fs: ^4.2.9 + jest-docblock: ^29.4.3 + jest-environment-node: ^29.4.3 + jest-haste-map: ^29.4.3 + jest-leak-detector: ^29.4.3 + jest-message-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-runtime: ^29.4.3 + jest-util: ^29.4.3 + jest-watcher: ^29.4.3 + jest-worker: ^29.4.3 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: c41108e5da01e0b8fdc2a06c5042eb49bb1d8db0e0d4651769fd1b9fe84ab45188617c11a3a8e1c83748b29bfe57dd77001ec57e86e3e3c30f3534e0314f8882 + languageName: node + linkType: hard + +"jest-runtime@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-runtime@npm:29.4.3" + dependencies: + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/globals": ^29.4.3 + "@jest/source-map": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 + "@types/node": "*" + chalk: ^4.0.0 + cjs-module-lexer: ^1.0.0 + collect-v8-coverage: ^1.0.0 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.4.3 + jest-message-util: ^29.4.3 + jest-mock: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 + slash: ^3.0.0 + strip-bom: ^4.0.0 + checksum: b99f8a910d1a38e7476058ba04ad44dfd3d93e837bb7c301d691e646a1085412fde87f06fbe271c9145f0e72d89400bfa7f6994bc30d456c7742269f37d0f570 + languageName: node + linkType: hard + +"jest-snapshot@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-snapshot@npm:29.4.3" + dependencies: + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/traverse": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 + "@types/babel__traverse": ^7.0.6 + "@types/prettier": ^2.1.5 + babel-preset-current-node-syntax: ^1.0.0 + chalk: ^4.0.0 + expect: ^29.4.3 + graceful-fs: ^4.2.9 + jest-diff: ^29.4.3 + jest-get-type: ^29.4.3 + jest-haste-map: ^29.4.3 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 + natural-compare: ^1.4.0 + pretty-format: ^29.4.3 + semver: ^7.3.5 + checksum: 79ba52f2435e23ce72b1309be4b17fdbcb299d1c2ce97ebb61df9a62711e9463035f63b4c849181b2fe5aa17b3e09d30ee4668cc25fb3c6f59511c010b4d9494 + languageName: node + linkType: hard + +"jest-util@npm:^29.0.0, jest-util@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-util@npm:29.3.1" + dependencies: + "@jest/types": ^29.3.1 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: f67c60f062b94d21cb60e84b3b812d64b7bfa81fe980151de5c17a74eb666042d0134e2e756d099b7606a1fcf1d633824d2e58197d01d76dde1e2dc00dfcd413 + languageName: node + linkType: hard + +"jest-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-util@npm:29.4.3" + dependencies: + "@jest/types": ^29.4.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 606b3e6077895baf8fb4ad4d08c134f37a6b81d5ba77ae654c942b1ae4b7294ab3b5a0eb93db34f129407b367970cf3b76bf5c80897b30f215f2bc8bf20a5f3f + languageName: node + linkType: hard + +"jest-validate@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-validate@npm:29.4.3" + dependencies: + "@jest/types": ^29.4.3 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^29.4.3 + leven: ^3.1.0 + pretty-format: ^29.4.3 + checksum: 983e56430d86bed238448cae031535c1d908f760aa312cd4a4ec0e92f3bc1b6675415ddf57cdeceedb8ad9c698e5bcd10f0a856dfc93a8923bdecc7733f4ba80 + languageName: node + linkType: hard + +"jest-watcher@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-watcher@npm:29.4.3" + dependencies: + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + emittery: ^0.13.1 + jest-util: ^29.4.3 + string-length: ^4.0.1 + checksum: 44b64991b3414db853c3756f14690028f4edef7aebfb204a4291cc1901c2239fa27a8687c5c5abbecc74bf613e0bb9b1378bf766430c9febcc71e9c0cb5ad8fc + languageName: node + linkType: hard + +"jest-worker@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-worker@npm:29.4.3" + dependencies: + "@types/node": "*" + jest-util: ^29.4.3 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: c99ae66f257564613e72c5797c3a68f21a22e1c1fb5f30d14695ff5b508a0d2405f22748f13a3df8d1015b5e16abb130170f81f047ff68f58b6b1d2ff6ebc51b + languageName: node + linkType: hard + +"jest@npm:^29.4.3": + version: 29.4.3 + resolution: "jest@npm:29.4.3" + dependencies: + "@jest/core": ^29.4.3 + "@jest/types": ^29.4.3 + import-local: ^3.0.2 + jest-cli: ^29.4.3 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 084d10d1ceaade3c40e6d3bbd71b9b71b8919ba6fbd6f1f6699bdc259a6ba2f7350c7ccbfa10c11f7e3e01662853650a6244210179542fe4ba87e77dc3f3109f + languageName: node + linkType: hard + +"joycon@npm:^3.0.1": + version: 3.1.1 + resolution: "joycon@npm:3.1.1" + checksum: 8003c9c3fc79c5c7602b1c7e9f7a2df2e9916f046b0dbad862aa589be78c15734d11beb9fe846f5e06138df22cb2ad29961b6a986ba81c4920ce2b15a7f11067 + languageName: node + linkType: hard + +"js-sdsl@npm:^4.1.4": + version: 4.2.0 + resolution: "js-sdsl@npm:4.2.0" + checksum: 2cd0885f7212afb355929d72ca105cb37de7e95ad6031e6a32619eaefa46735a7d0fb682641a0ba666e1519cb138fe76abc1eea8a34e224140c9d94c995171f1 + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + +"jsdom@npm:^20.0.0": + version: 20.0.3 + resolution: "jsdom@npm:20.0.3" + dependencies: + abab: ^2.0.6 + acorn: ^8.8.1 + acorn-globals: ^7.0.0 + cssom: ^0.5.0 + cssstyle: ^2.3.0 + data-urls: ^3.0.2 + decimal.js: ^10.4.2 + domexception: ^4.0.0 + escodegen: ^2.0.0 + form-data: ^4.0.0 + html-encoding-sniffer: ^3.0.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.1 + is-potential-custom-element-name: ^1.0.1 + nwsapi: ^2.2.2 + parse5: ^7.1.1 + saxes: ^6.0.0 + symbol-tree: ^3.2.4 + tough-cookie: ^4.1.2 + w3c-xmlserializer: ^4.0.0 + webidl-conversions: ^7.0.0 + whatwg-encoding: ^2.0.0 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + ws: ^8.11.0 + xml-name-validator: ^4.0.0 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 6e2ae21db397133a061b270c26d2dbc0b9051733ea3b896a7ece78d79f475ff0974f766a413c1198a79c793159119169f2335ddb23150348fbfdcfa6f3105536 + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 + languageName: node + linkType: hard + +"json-stringify-nice@npm:^1.1.4": + version: 1.1.4 + resolution: "json-stringify-nice@npm:1.1.4" + checksum: 6ddf781148b46857ab04e97f47be05f14c4304b86eb5478369edbeacd070c21c697269964b982fc977e8989d4c59091103b1d9dc291aba40096d6cbb9a392b72 + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee + languageName: node + linkType: hard + +"json5@npm:^2.2.1": + version: 2.2.2 + resolution: "json5@npm:2.2.2" + bin: + json5: lib/cli.js + checksum: 9a878d66b72157b073cf0017f3e5d93ec209fa5943abcb38d37a54b208917c166bd473c26a24695e67a016ce65759aeb89946592991f8f9174fb96c8e2492683 + languageName: node + linkType: hard + +"json5@npm:^2.2.2, json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"jsonc-parser@npm:3.2.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": + version: 1.3.1 + resolution: "jsonparse@npm:1.3.1" + checksum: 6514a7be4674ebf407afca0eda3ba284b69b07f9958a8d3113ef1005f7ec610860c312be067e450c569aab8b89635e332cee3696789c750692bb60daba627f4d + languageName: node + linkType: hard + +"just-diff-apply@npm:^5.2.0": + version: 5.5.0 + resolution: "just-diff-apply@npm:5.5.0" + checksum: ed6bbd59781542ccb786bd843038e4591e8390aa788075beb69d358051f68fbeb122bda050b7f42515d51fb64b907d5c7bea694a0543b87b24ce406cfb5f5bfa + languageName: node + linkType: hard + +"just-diff@npm:^5.0.1": + version: 5.2.0 + resolution: "just-diff@npm:5.2.0" + checksum: 5527fb6d28a446185250fba501ad857370c049bac7aa5a34c9ec82a45e1380af1a96137be7df2f87252d9f75ef67be41d4c0267d481ed0235b2ceb3ee1f5f75d + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 + languageName: node + linkType: hard + +"lerna@npm:^6.5.1": + version: 6.5.1 + resolution: "lerna@npm:6.5.1" + dependencies: + "@lerna/child-process": 6.5.1 + "@lerna/create": 6.5.1 + "@npmcli/arborist": 5.3.0 + "@npmcli/run-script": 4.1.7 + "@nrwl/devkit": ">=15.5.2 < 16" + "@octokit/plugin-enterprise-rest": 6.0.1 + "@octokit/rest": 19.0.3 + byte-size: 7.0.0 + chalk: 4.1.0 + clone-deep: 4.0.1 + cmd-shim: 5.0.0 + columnify: 1.6.0 + config-chain: 1.1.12 + conventional-changelog-angular: 5.0.12 + conventional-changelog-core: 4.2.4 + conventional-recommended-bump: 6.1.0 + cosmiconfig: 7.0.0 + dedent: 0.7.0 + dot-prop: 6.0.1 + envinfo: ^7.7.4 + execa: 5.0.0 + fs-extra: 9.1.0 + get-port: 5.1.1 + get-stream: 6.0.0 + git-url-parse: 13.1.0 + glob-parent: 5.1.2 + globby: 11.1.0 + graceful-fs: 4.2.10 + has-unicode: 2.0.1 + import-local: ^3.0.2 + init-package-json: 3.0.2 + inquirer: ^8.2.4 + is-ci: 2.0.0 + is-stream: 2.0.0 + js-yaml: ^4.1.0 + libnpmaccess: 6.0.3 + libnpmpublish: 6.0.4 + load-json-file: 6.2.0 + make-dir: 3.1.0 + minimatch: 3.0.5 + multimatch: 5.0.0 + node-fetch: 2.6.7 + npm-package-arg: 8.1.1 + npm-packlist: 5.1.1 + npm-registry-fetch: 13.3.0 + npmlog: ^6.0.2 + nx: ">=15.5.2 < 16" + p-map: 4.0.0 + p-map-series: 2.1.0 + p-pipe: 3.1.0 + p-queue: 6.6.2 + p-reduce: 2.1.0 + p-waterfall: 2.1.1 + pacote: 13.6.1 + path-exists: 4.0.0 + pify: 5.0.0 + read-cmd-shim: 3.0.0 + read-package-json: 5.0.1 + resolve-from: 5.0.0 + rimraf: ^3.0.2 + semver: 7.3.4 + signal-exit: 3.0.7 + slash: 3.0.0 + ssri: 9.0.1 + strong-log-transformer: 2.1.0 + tar: 6.1.11 + temp-dir: 1.0.0 + typescript: ^3 || ^4 + upath: ^2.0.1 + uuid: 8.3.2 + validate-npm-package-license: 3.0.4 + validate-npm-package-name: 4.0.0 + write-file-atomic: 4.0.1 + write-pkg: 4.0.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + bin: + lerna: dist/cli.js + checksum: f0f3ad0cd329ea34a0f9beb3b74adf3757af9b8b23b914efc987cf0aa5afa86da5284937da4879b62c0db76cbf3c6b575381dc32b71c760d2d6152c98d0b976b + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 + languageName: node + linkType: hard + +"levn@npm:~0.3.0": + version: 0.3.0 + resolution: "levn@npm:0.3.0" + dependencies: + prelude-ls: ~1.1.2 + type-check: ~0.3.2 + checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e + languageName: node + linkType: hard + +"libnpmaccess@npm:6.0.3": + version: 6.0.3 + resolution: "libnpmaccess@npm:6.0.3" + dependencies: + aproba: ^2.0.0 + minipass: ^3.1.1 + npm-package-arg: ^9.0.1 + npm-registry-fetch: ^13.0.0 + checksum: 4a437390d52bd5e6145164210cfab4cdbc824c4f4a62e11cf186cad9c159a7c8f0c1b6e37346db1cc675bcdf1508e92ed64d47ac1a9bcf838a670bb4741a50c9 + languageName: node + linkType: hard + +"libnpmpublish@npm:6.0.4": + version: 6.0.4 + resolution: "libnpmpublish@npm:6.0.4" + dependencies: + normalize-package-data: ^4.0.0 + npm-package-arg: ^9.0.1 + npm-registry-fetch: ^13.0.0 + semver: ^7.3.7 + ssri: ^9.0.0 + checksum: d653e0d9be0b01011c020f8252f480ca68105b56fde575a6c4fda650f6b5ff33a51fda43897ba817d2955579cc096910561e60e26628c59f5ac2d031157551d1 + languageName: node + linkType: hard + +"lilconfig@npm:^2.0.5": + version: 2.0.6 + resolution: "lilconfig@npm:2.0.6" + checksum: 40a3cd72f103b1be5975f2ac1850810b61d4053e20ab09be8d3aeddfe042187e1ba70b4651a7e70f95efa1642e7dc8b2ae395b317b7d7753b241b43cef7c0f7d + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"lines-and-columns@npm:~2.0.3": + version: 2.0.3 + resolution: "lines-and-columns@npm:2.0.3" + checksum: 5955363dfd7d3d7c476d002eb47944dbe0310d57959e2112dce004c0dc76cecfd479cf8c098fd479ff344acdf04ee0e82b455462a26492231ac152f6c48d17a1 + languageName: node + linkType: hard + +"load-json-file@npm:6.2.0": + version: 6.2.0 + resolution: "load-json-file@npm:6.2.0" + dependencies: + graceful-fs: ^4.1.15 + parse-json: ^5.0.0 + strip-bom: ^4.0.0 + type-fest: ^0.6.0 + checksum: 4429e430ebb99375fc7cd936348e4f7ba729486080ced4272091c1e386a7f5f738ea3337d8ffd4b01c2f5bc3ddde92f2c780045b66838fe98bdb79f901884643 + languageName: node + linkType: hard + +"load-json-file@npm:^4.0.0": + version: 4.0.0 + resolution: "load-json-file@npm:4.0.0" + dependencies: + graceful-fs: ^4.1.2 + parse-json: ^4.0.0 + pify: ^3.0.0 + strip-bom: ^3.0.0 + checksum: 8f5d6d93ba64a9620445ee9bde4d98b1eac32cf6c8c2d20d44abfa41a6945e7969456ab5f1ca2fb06ee32e206c9769a20eec7002fe290de462e8c884b6b8b356 + languageName: node + linkType: hard + +"load-tsconfig@npm:^0.2.3": + version: 0.2.3 + resolution: "load-tsconfig@npm:0.2.3" + checksum: e28d1b2725fda76ee69fa4ee21b1257fd5b77b12e1be09cdc0b67f953e62ffbc3e7ac1a6267ec21309f95310cd10635e28a3cb38d04be3f7d683c4fe7914d7a9 + languageName: node + linkType: hard + +"locate-path@npm:^2.0.0": + version: 2.0.0 + resolution: "locate-path@npm:2.0.0" + dependencies: + p-locate: ^2.0.0 + path-exists: ^3.0.0 + checksum: 02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash.ismatch@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.ismatch@npm:4.4.0" + checksum: a393917578842705c7fc1a30fb80613d1ac42d20b67eb26a2a6004d6d61ee90b419f9eb320508ddcd608e328d91eeaa2651411727eaa9a12534ed6ccb02fc705 + languageName: node + linkType: hard + +"lodash.memoize@npm:4.x": + version: 4.1.2 + resolution: "lodash.memoize@npm:4.1.2" + checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"lodash.sortby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.sortby@npm:4.7.0" + checksum: db170c9396d29d11fe9a9f25668c4993e0c1331bcb941ddbd48fb76f492e732add7f2a47cfdf8e9d740fa59ac41bbfaf931d268bc72aab3ab49e9f89354d718c + languageName: node + linkType: hard + +"lodash@npm:^4.17.15, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"log-symbols@npm:^4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: ^4.1.0 + is-unicode-supported: ^0.1.0 + checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.4.4, lru-cache@npm:^7.5.1, lru-cache@npm:^7.7.1": + version: 7.14.1 + resolution: "lru-cache@npm:7.14.1" + checksum: d72c6713c6a6d86836a7a6523b3f1ac6764768cca47ec99341c3e76db06aacd4764620e5e2cda719a36848785a52a70e531822dc2b33fb071fa709683746c104 + languageName: node + linkType: hard + +"make-dir@npm:3.1.0, make-dir@npm:^3.0.0": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: ^6.0.0 + checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 + languageName: node + linkType: hard + +"make-dir@npm:^2.1.0": + version: 2.1.0 + resolution: "make-dir@npm:2.1.0" + dependencies: + pify: ^4.0.1 + semver: ^5.6.0 + checksum: 043548886bfaf1820323c6a2997e6d2fa51ccc2586ac14e6f14634f7458b4db2daf15f8c310e2a0abd3e0cddc64df1890d8fc7263033602c47bb12cbfcf86aab + languageName: node + linkType: hard + +"make-error@npm:1.x": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^10.0.3, make-fetch-happen@npm:^10.0.6": + version: 10.2.1 + resolution: "make-fetch-happen@npm:10.2.1" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^16.1.0 + http-cache-semantics: ^4.1.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.7.1 + minipass: ^3.1.6 + minipass-collect: ^1.0.2 + minipass-fetch: ^2.0.3 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^7.0.0 + ssri: ^9.0.0 + checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed + languageName: node + linkType: hard + +"map-obj@npm:^4.0.0": + version: 4.3.0 + resolution: "map-obj@npm:4.3.0" + checksum: fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e + languageName: node + linkType: hard + +"meow@npm:^8.0.0": + version: 8.1.2 + resolution: "meow@npm:8.1.2" + dependencies: + "@types/minimist": ^1.2.0 + camelcase-keys: ^6.2.2 + decamelize-keys: ^1.1.0 + hard-rejection: ^2.1.0 + minimist-options: 4.1.0 + normalize-package-data: ^3.0.0 + read-pkg-up: ^7.0.1 + redent: ^3.0.0 + trim-newlines: ^3.0.0 + type-fest: ^0.18.0 + yargs-parser: ^20.2.3 + checksum: bc23bf1b4423ef6a821dff9734406bce4b91ea257e7f10a8b7f896f45b59649f07adc0926e2917eacd8cf1df9e4cd89c77623cf63dfd0f8bf54de07a32ee5a85 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + +"minimatch@npm:3.0.5": + version: 3.0.5 + resolution: "minimatch@npm:3.0.5" + dependencies: + brace-expansion: ^1.1.7 + checksum: a3b84b426eafca947741b864502cee02860c4e7b145de11ad98775cfcf3066fef422583bc0ffce0952ddf4750c1ccf4220b1556430d4ce10139f66247d87d69e + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^5.0.1": + version: 5.1.2 + resolution: "minimatch@npm:5.1.2" + dependencies: + brace-expansion: ^2.0.1 + checksum: 32ffda25b9fb8270a1c1beafdb7489dc0e411af553495136509a945691f63c9b6b000eeeaaf8bffe3efa609c1d6d3bc0f5a106f6c3443b5c05da649100ded964 + languageName: node + linkType: hard + +"minimist-options@npm:4.1.0": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: ^1.0.1 + is-plain-obj: ^1.1.0 + kind-of: ^6.0.3 + checksum: 8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": + version: 1.2.7 + resolution: "minimist@npm:1.2.7" + checksum: 7346574a1038ca23c32e02252f603801f09384dd1d78b69a943a4e8c2c28730b80e96193882d3d3b22a063445f460e48316b29b8a25addca2d7e5e8f75478bec + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-fetch@npm:^2.0.3": + version: 2.1.2 + resolution: "minipass-fetch@npm:2.1.2" + dependencies: + encoding: ^0.1.13 + minipass: ^3.1.6 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-json-stream@npm:^1.0.1": + version: 1.0.1 + resolution: "minipass-json-stream@npm:1.0.1" + dependencies: + jsonparse: ^1.3.1 + minipass: ^3.0.0 + checksum: 791b696a27d1074c4c08dab1bf5a9f3201145c2933e428f45d880467bce12c60de4703203d2928de4b162d0ae77b0bb4b55f96cb846645800aa0eb4919b3e796 + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^4.0.0": + version: 4.0.0 + resolution: "minipass@npm:4.0.0" + dependencies: + yallist: ^4.0.0 + checksum: 7a609afbf394abfcf9c48e6c90226f471676c8f2a67f07f6838871afb03215ede431d1433feffe1b855455bcb13ef0eb89162841b9796109d6fed8d89790f381 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp-infer-owner@npm:^2.0.0": + version: 2.0.0 + resolution: "mkdirp-infer-owner@npm:2.0.0" + dependencies: + chownr: ^2.0.0 + infer-owner: ^1.0.4 + mkdirp: ^1.0.3 + checksum: d8f4ecd32f6762459d6b5714eae6487c67ae9734ab14e26d14377ddd9b2a1bf868d8baa18c0f3e73d3d513f53ec7a698e0f81a9367102c870a55bef7833880f7 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"modify-values@npm:^1.0.0": + version: 1.0.1 + resolution: "modify-values@npm:1.0.1" + checksum: 8296610c608bc97b03c2cf889c6cdf4517e32fa2d836440096374c2209f6b7b3e256c209493a0b32584b9cb32d528e99d0dd19dcd9a14d2d915a312d391cc7e9 + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:^2.0.0": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"multimatch@npm:5.0.0": + version: 5.0.0 + resolution: "multimatch@npm:5.0.0" + dependencies: + "@types/minimatch": ^3.0.3 + array-differ: ^3.0.0 + array-union: ^2.1.0 + arrify: ^2.0.1 + minimatch: ^3.0.4 + checksum: 82c8030a53af965cab48da22f1b0f894ef99e16ee680dabdfbd38d2dfacc3c8208c475203d747afd9e26db44118ed0221d5a0d65268c864f06d6efc7ac6df812 + languageName: node + linkType: hard + +"mute-stream@npm:0.0.8, mute-stream@npm:~0.0.4": + version: 0.0.8 + resolution: "mute-stream@npm:0.0.8" + checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1 + languageName: node + linkType: hard + +"mz@npm:^2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: ^1.0.0 + object-assign: ^4.0.1 + thenify-all: ^1.0.0 + checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 + languageName: node + linkType: hard + +"natural-compare-lite@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare-lite@npm:1.4.0" + checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.0": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 + languageName: node + linkType: hard + +"node-addon-api@npm:^3.2.1": + version: 3.2.1 + resolution: "node-addon-api@npm:3.2.1" + dependencies: + node-gyp: latest + checksum: 2369986bb0881ccd9ef6bacdf39550e07e089a9c8ede1cbc5fc7712d8e2faa4d50da0e487e333d4125f8c7a616c730131d1091676c9d499af1d74560756b4a18 + languageName: node + linkType: hard + +"node-fetch@npm:2.6.7, node-fetch@npm:^2.6.7": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.3.0": + version: 4.5.0 + resolution: "node-gyp-build@npm:4.5.0" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: d888bae0fb88335f69af1b57a2294a931c5042f36e413d8d364c992c9ebfa0b96ffe773179a5a2c8f04b73856e8634e09cce108dbb9804396d3cc8c5455ff2db + languageName: node + linkType: hard + +"node-gyp@npm:^9.0.0, node-gyp@npm:latest": + version: 9.3.1 + resolution: "node-gyp@npm:9.3.1" + dependencies: + env-paths: ^2.2.0 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^10.0.3 + nopt: ^6.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: b860e9976fa645ca0789c69e25387401b4396b93c8375489b5151a6c55cf2640a3b6183c212b38625ef7c508994930b72198338e3d09b9d7ade5acc4aaf51ea7 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e + languageName: node + linkType: hard + +"node-releases@npm:^2.0.6": + version: 2.0.8 + resolution: "node-releases@npm:2.0.8" + checksum: b1ab02c0d5d8e081bf9537232777a7a787dc8fef07f70feabe70a344599b220fe16462f746ac30f3eed5a58549445ad69368964d12a1f8b3b764f6caab7ba34a + languageName: node + linkType: hard + +"nopt@npm:^5.0.0": + version: 5.0.0 + resolution: "nopt@npm:5.0.0" + dependencies: + abbrev: 1 + bin: + nopt: bin/nopt.js + checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: ^2.1.4 + resolve: ^1.10.0 + semver: 2 || 3 || 4 || 5 + validate-npm-package-license: ^3.0.1 + checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 + languageName: node + linkType: hard + +"normalize-package-data@npm:^3.0.0": + version: 3.0.3 + resolution: "normalize-package-data@npm:3.0.3" + dependencies: + hosted-git-info: ^4.0.1 + is-core-module: ^2.5.0 + semver: ^7.3.4 + validate-npm-package-license: ^3.0.1 + checksum: bbcee00339e7c26fdbc760f9b66d429258e2ceca41a5df41f5df06cc7652de8d82e8679ff188ca095cad8eff2b6118d7d866af2b68400f74602fbcbce39c160a + languageName: node + linkType: hard + +"normalize-package-data@npm:^4.0.0": + version: 4.0.1 + resolution: "normalize-package-data@npm:4.0.1" + dependencies: + hosted-git-info: ^5.0.0 + is-core-module: ^2.8.1 + semver: ^7.3.5 + validate-npm-package-license: ^3.0.4 + checksum: 292e0aa740e73d62f84bbd9d55d4bfc078155f32d5d7572c32c9807f96d543af0f43ff7e5c80bfa6238667123fd68bd83cd412eae9b27b85b271fb041f624528 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"npm-bundled@npm:^1.1.1, npm-bundled@npm:^1.1.2": + version: 1.1.2 + resolution: "npm-bundled@npm:1.1.2" + dependencies: + npm-normalize-package-bin: ^1.0.1 + checksum: 6e599155ef28d0b498622f47f1ba189dfbae05095a1ed17cb3a5babf961e965dd5eab621f0ec6f0a98de774e5836b8f5a5ee639010d64f42850a74acec3d4d09 + languageName: node + linkType: hard + +"npm-bundled@npm:^2.0.0": + version: 2.0.1 + resolution: "npm-bundled@npm:2.0.1" + dependencies: + npm-normalize-package-bin: ^2.0.0 + checksum: 7747293985c48c5268871efe691545b03731cb80029692000cbdb0b3344b9617be5187aa36281cabbe6b938e3651b4e87236d1c31f9e645eef391a1a779413e6 + languageName: node + linkType: hard + +"npm-install-checks@npm:^5.0.0": + version: 5.0.0 + resolution: "npm-install-checks@npm:5.0.0" + dependencies: + semver: ^7.1.1 + checksum: 0e7d1aae52b1fe9d3a0fd4a008850c7047931722dd49ee908afd13fd0297ac5ddb10964d9c59afcdaaa2ca04b51d75af2788f668c729ae71fec0e4cdac590ffc + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^1.0.1": + version: 1.0.1 + resolution: "npm-normalize-package-bin@npm:1.0.1" + checksum: ae7f15155a1e3ace2653f12ddd1ee8eaa3c84452fdfbf2f1943e1de264e4b079c86645e2c55931a51a0a498cba31f70022a5219d5665fbcb221e99e58bc70122 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^2.0.0": + version: 2.0.0 + resolution: "npm-normalize-package-bin@npm:2.0.0" + checksum: 7c5379f9b188b564c4332c97bdd9a5d6b7b15f02b5823b00989d6a0e6fb31eb0280f02b0a924f930e1fcaf00e60fae333aec8923d2a4c7747613c7d629d8aa25 + languageName: node + linkType: hard + +"npm-package-arg@npm:8.1.1": + version: 8.1.1 + resolution: "npm-package-arg@npm:8.1.1" + dependencies: + hosted-git-info: ^3.0.6 + semver: ^7.0.0 + validate-npm-package-name: ^3.0.0 + checksum: 406c59f92d8fac5acbd1df62f4af8075e925af51131b6bc66245641ea71ddb0e60b3e2c56fafebd4e8ffc3ba0453e700a221a36a44740dc9f7488cec97ae4c55 + languageName: node + linkType: hard + +"npm-package-arg@npm:^9.0.0, npm-package-arg@npm:^9.0.1": + version: 9.1.2 + resolution: "npm-package-arg@npm:9.1.2" + dependencies: + hosted-git-info: ^5.0.0 + proc-log: ^2.0.1 + semver: ^7.3.5 + validate-npm-package-name: ^4.0.0 + checksum: 3793488843985ed71deb14fcba7c068d8ed03a18fd8f6b235c6a64465c9a25f60261598106d5cc8677c0bee9548e405c34c2e3c7a822e3113d3389351c745dfa + languageName: node + linkType: hard + +"npm-packlist@npm:5.1.1": + version: 5.1.1 + resolution: "npm-packlist@npm:5.1.1" + dependencies: + glob: ^8.0.1 + ignore-walk: ^5.0.1 + npm-bundled: ^1.1.2 + npm-normalize-package-bin: ^1.0.1 + bin: + npm-packlist: bin/index.js + checksum: 28dab153744ceb4695b82a9032d14aa2bfb855d38344a09052673d07860a4d8725f808ed23996e6f2792c48e11f5d147632c159f798d2c24dac92b51a884f0c6 + languageName: node + linkType: hard + +"npm-packlist@npm:^5.1.0": + version: 5.1.3 + resolution: "npm-packlist@npm:5.1.3" + dependencies: + glob: ^8.0.1 + ignore-walk: ^5.0.1 + npm-bundled: ^2.0.0 + npm-normalize-package-bin: ^2.0.0 + bin: + npm-packlist: bin/index.js + checksum: 94cc9c66740e8f80243301de85eb0a2cec5bbd570c3f26b6ad7af1a3eca155f7e810580dc7ea4448f12a8fd82f6db307e7132a5fe69e157eb45b325acadeb22a + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^7.0.0": + version: 7.0.2 + resolution: "npm-pick-manifest@npm:7.0.2" + dependencies: + npm-install-checks: ^5.0.0 + npm-normalize-package-bin: ^2.0.0 + npm-package-arg: ^9.0.0 + semver: ^7.3.5 + checksum: a93ec449c12219a2be8556837db9ac5332914f304a69469bb6f1f47717adc6e262aa318f79166f763512688abd9c4e4b6a2d83b2dd19753a7abe5f0360f2c8bc + languageName: node + linkType: hard + +"npm-registry-fetch@npm:13.3.0": + version: 13.3.0 + resolution: "npm-registry-fetch@npm:13.3.0" + dependencies: + make-fetch-happen: ^10.0.6 + minipass: ^3.1.6 + minipass-fetch: ^2.0.3 + minipass-json-stream: ^1.0.1 + minizlib: ^2.1.2 + npm-package-arg: ^9.0.1 + proc-log: ^2.0.0 + checksum: f153e471b7204eef260d4b774087291981a0d2909db7568540d77759409300d10f8e2a464af0da15ab1c4da4d6285c5d746ba09707dd55a4bd66f5f0ceafcf64 + languageName: node + linkType: hard + +"npm-registry-fetch@npm:^13.0.0, npm-registry-fetch@npm:^13.0.1": + version: 13.3.1 + resolution: "npm-registry-fetch@npm:13.3.1" + dependencies: + make-fetch-happen: ^10.0.6 + minipass: ^3.1.6 + minipass-fetch: ^2.0.3 + minipass-json-stream: ^1.0.1 + minizlib: ^2.1.2 + npm-package-arg: ^9.0.1 + proc-log: ^2.0.0 + checksum: 5a941c2c799568e0dbccfc15f280444da398dadf2eede1b1921f08ddd5cb5f32c7cb4d16be96401f95a33073aeec13a3fd928c753790d3c412c2e64e7f7c6ee4 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: ^3.0.0 + checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 + languageName: node + linkType: hard + +"npmlog@npm:^6.0.0, npmlog@npm:^6.0.2": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.3 + set-blocking: ^2.0.0 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + languageName: node + linkType: hard + +"nwsapi@npm:^2.2.2": + version: 2.2.2 + resolution: "nwsapi@npm:2.2.2" + checksum: 43769106292bc95f776756ca2f3513dab7b4d506a97c67baec32406447841a35f65f29c1f95ab5d42785210fd41668beed33ca16fa058780be43b101ad73e205 + languageName: node + linkType: hard + +"nx@npm:15.7.2, nx@npm:>=15.5.2 < 16": + version: 15.7.2 + resolution: "nx@npm:15.7.2" + dependencies: + "@nrwl/cli": 15.7.2 + "@nrwl/nx-darwin-arm64": 15.7.2 + "@nrwl/nx-darwin-x64": 15.7.2 + "@nrwl/nx-linux-arm-gnueabihf": 15.7.2 + "@nrwl/nx-linux-arm64-gnu": 15.7.2 + "@nrwl/nx-linux-arm64-musl": 15.7.2 + "@nrwl/nx-linux-x64-gnu": 15.7.2 + "@nrwl/nx-linux-x64-musl": 15.7.2 + "@nrwl/nx-win32-arm64-msvc": 15.7.2 + "@nrwl/nx-win32-x64-msvc": 15.7.2 + "@nrwl/tao": 15.7.2 + "@parcel/watcher": 2.0.4 + "@yarnpkg/lockfile": ^1.1.0 + "@yarnpkg/parsers": ^3.0.0-rc.18 + "@zkochan/js-yaml": 0.0.6 + axios: ^1.0.0 + chalk: ^4.1.0 + cli-cursor: 3.1.0 + cli-spinners: 2.6.1 + cliui: ^7.0.2 + dotenv: ~10.0.0 + enquirer: ~2.3.6 + fast-glob: 3.2.7 + figures: 3.2.0 + flat: ^5.0.2 + fs-extra: ^11.1.0 + glob: 7.1.4 + ignore: ^5.0.4 + js-yaml: 4.1.0 + jsonc-parser: 3.2.0 + lines-and-columns: ~2.0.3 + minimatch: 3.0.5 + npm-run-path: ^4.0.1 + open: ^8.4.0 + semver: 7.3.4 + string-width: ^4.2.3 + strong-log-transformer: ^2.1.0 + tar-stream: ~2.2.0 + tmp: ~0.2.1 + tsconfig-paths: ^4.1.2 + tslib: ^2.3.0 + v8-compile-cache: 2.3.0 + yargs: ^17.6.2 + yargs-parser: 21.1.1 + peerDependencies: + "@swc-node/register": ^1.4.2 + "@swc/core": ^1.2.173 + dependenciesMeta: + "@nrwl/nx-darwin-arm64": + optional: true + "@nrwl/nx-darwin-x64": + optional: true + "@nrwl/nx-linux-arm-gnueabihf": + optional: true + "@nrwl/nx-linux-arm64-gnu": + optional: true + "@nrwl/nx-linux-arm64-musl": + optional: true + "@nrwl/nx-linux-x64-gnu": + optional: true + "@nrwl/nx-linux-x64-musl": + optional: true + "@nrwl/nx-win32-arm64-msvc": + optional: true + "@nrwl/nx-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc-node/register": + optional: true + "@swc/core": + optional: true + bin: + nx: bin/nx.js + checksum: c5765575146bb94f54c1da3d6dec600e6414c0cc64c198821a3de10a72583933f1a752a61452b74f02492e3518f4ead3c287416173b1bb3bbc15ce82bd8d2bb4 + languageName: node + linkType: hard + +"object-assign@npm:^4.0.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 + languageName: node + linkType: hard + +"open@npm:^8.4.0": + version: 8.4.0 + resolution: "open@npm:8.4.0" + dependencies: + define-lazy-prop: ^2.0.0 + is-docker: ^2.1.1 + is-wsl: ^2.2.0 + checksum: e9545bec64cdbf30a0c35c1bdc310344adf8428a117f7d8df3c0af0a0a24c513b304916a6d9b11db0190ff7225c2d578885080b761ed46a3d5f6f1eebb98b63c + languageName: node + linkType: hard + +"optionator@npm:^0.8.1": + version: 0.8.3 + resolution: "optionator@npm:0.8.3" + dependencies: + deep-is: ~0.1.3 + fast-levenshtein: ~2.0.6 + levn: ~0.3.0 + prelude-ls: ~1.1.2 + type-check: ~0.3.2 + word-wrap: ~1.2.3 + checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 + languageName: node + linkType: hard + +"optionator@npm:^0.9.1": + version: 0.9.1 + resolution: "optionator@npm:0.9.1" + dependencies: + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + word-wrap: ^1.2.3 + checksum: dbc6fa065604b24ea57d734261914e697bd73b69eff7f18e967e8912aa2a40a19a9f599a507fa805be6c13c24c4eae8c71306c239d517d42d4c041c942f508a0 + languageName: node + linkType: hard + +"ora@npm:^5.4.1": + version: 5.4.1 + resolution: "ora@npm:5.4.1" + dependencies: + bl: ^4.1.0 + chalk: ^4.1.0 + cli-cursor: ^3.1.0 + cli-spinners: ^2.5.0 + is-interactive: ^1.0.0 + is-unicode-supported: ^0.1.0 + log-symbols: ^4.1.0 + strip-ansi: ^6.0.0 + wcwidth: ^1.0.1 + checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63 + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4 + languageName: node + linkType: hard + +"p-limit@npm:^1.1.0": + version: 1.3.0 + resolution: "p-limit@npm:1.3.0" + dependencies: + p-try: ^1.0.0 + checksum: 281c1c0b8c82e1ac9f81acd72a2e35d402bf572e09721ce5520164e9de07d8274451378a3470707179ad13240535558f4b277f02405ad752e08c7d5b0d54fbfd + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^2.0.0": + version: 2.0.0 + resolution: "p-locate@npm:2.0.0" + dependencies: + p-limit: ^1.1.0 + checksum: e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: ^2.2.0 + checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map-series@npm:2.1.0": + version: 2.1.0 + resolution: "p-map-series@npm:2.1.0" + checksum: 69d4efbb6951c0dd62591d5a18c3af0af78496eae8b55791e049da239d70011aa3af727dece3fc9943e0bb3fd4fa64d24177cfbecc46efaf193179f0feeac486 + languageName: node + linkType: hard + +"p-map@npm:4.0.0, p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-pipe@npm:3.1.0": + version: 3.1.0 + resolution: "p-pipe@npm:3.1.0" + checksum: ee9a2609685f742c6ceb3122281ec4453bbbcc80179b13e66fd139dcf19b1c327cf6c2fdfc815b548d6667e7eaefe5396323f6d49c4f7933e4cef47939e3d65c + languageName: node + linkType: hard + +"p-queue@npm:6.6.2": + version: 6.6.2 + resolution: "p-queue@npm:6.6.2" + dependencies: + eventemitter3: ^4.0.4 + p-timeout: ^3.2.0 + checksum: 832642fcc4ab6477b43e6d7c30209ab10952969ed211c6d6f2931be8a4f9935e3578c72e8cce053dc34f2eb6941a408a2c516a54904e989851a1a209cf19761c + languageName: node + linkType: hard + +"p-reduce@npm:2.1.0, p-reduce@npm:^2.0.0, p-reduce@npm:^2.1.0": + version: 2.1.0 + resolution: "p-reduce@npm:2.1.0" + checksum: 99b26d36066a921982f25c575e78355824da0787c486e3dd9fc867460e8bf17d5fb3ce98d006b41bdc81ffc0aa99edf5faee53d11fe282a20291fb721b0cb1c7 + languageName: node + linkType: hard + +"p-timeout@npm:^3.2.0": + version: 3.2.0 + resolution: "p-timeout@npm:3.2.0" + dependencies: + p-finally: ^1.0.0 + checksum: 3dd0eaa048780a6f23e5855df3dd45c7beacff1f820476c1d0d1bcd6648e3298752ba2c877aa1c92f6453c7dd23faaf13d9f5149fc14c0598a142e2c5e8d649c + languageName: node + linkType: hard + +"p-try@npm:^1.0.0": + version: 1.0.0 + resolution: "p-try@npm:1.0.0" + checksum: 3b5303f77eb7722144154288bfd96f799f8ff3e2b2b39330efe38db5dd359e4fb27012464cd85cb0a76e9b7edd1b443568cb3192c22e7cffc34989df0bafd605 + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + +"p-waterfall@npm:2.1.1": + version: 2.1.1 + resolution: "p-waterfall@npm:2.1.1" + dependencies: + p-reduce: ^2.0.0 + checksum: 8588bb8b004ee37e559c7e940a480c1742c42725d477b0776ff30b894920a3e48bddf8f60aa0ae82773e500a8fc99d75e947c450e0c2ce187aff72cc1b248f6d + languageName: node + linkType: hard + +"pacote@npm:13.6.1": + version: 13.6.1 + resolution: "pacote@npm:13.6.1" + dependencies: + "@npmcli/git": ^3.0.0 + "@npmcli/installed-package-contents": ^1.0.7 + "@npmcli/promise-spawn": ^3.0.0 + "@npmcli/run-script": ^4.1.0 + cacache: ^16.0.0 + chownr: ^2.0.0 + fs-minipass: ^2.1.0 + infer-owner: ^1.0.4 + minipass: ^3.1.6 + mkdirp: ^1.0.4 + npm-package-arg: ^9.0.0 + npm-packlist: ^5.1.0 + npm-pick-manifest: ^7.0.0 + npm-registry-fetch: ^13.0.1 + proc-log: ^2.0.0 + promise-retry: ^2.0.1 + read-package-json: ^5.0.0 + read-package-json-fast: ^2.0.3 + rimraf: ^3.0.2 + ssri: ^9.0.0 + tar: ^6.1.11 + bin: + pacote: lib/bin.js + checksum: 26cebb59aea93d03ad051d82c4f2300beb333ded0f16ba92cfe976b5600157bd1ee034afe1c86406bbe5eacd51d413797939b08aa58adcf73f7680aead9e667f + languageName: node + linkType: hard + +"pacote@npm:^13.0.3, pacote@npm:^13.6.1": + version: 13.6.2 + resolution: "pacote@npm:13.6.2" + dependencies: + "@npmcli/git": ^3.0.0 + "@npmcli/installed-package-contents": ^1.0.7 + "@npmcli/promise-spawn": ^3.0.0 + "@npmcli/run-script": ^4.1.0 + cacache: ^16.0.0 + chownr: ^2.0.0 + fs-minipass: ^2.1.0 + infer-owner: ^1.0.4 + minipass: ^3.1.6 + mkdirp: ^1.0.4 + npm-package-arg: ^9.0.0 + npm-packlist: ^5.1.0 + npm-pick-manifest: ^7.0.0 + npm-registry-fetch: ^13.0.1 + proc-log: ^2.0.0 + promise-retry: ^2.0.1 + read-package-json: ^5.0.0 + read-package-json-fast: ^2.0.3 + rimraf: ^3.0.2 + ssri: ^9.0.0 + tar: ^6.1.11 + bin: + pacote: lib/bin.js + checksum: a7b7f97094ab570a23e1c174537e9953a4d53176cc4b18bac77d7728bd89e2b9fa331d0f78fa463add03df79668a918bbdaa2750819504ee39242063abf53c6e + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"parse-conflict-json@npm:^2.0.1": + version: 2.0.2 + resolution: "parse-conflict-json@npm:2.0.2" + dependencies: + json-parse-even-better-errors: ^2.3.1 + just-diff: ^5.0.1 + just-diff-apply: ^5.2.0 + checksum: 076f65c958696586daefb153f59d575dfb59648be43116a21b74d5ff69ec63dd56f585a27cc2da56d8e64ca5abf0373d6619b8330c035131f8d1e990c8406378 + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: ^1.3.1 + json-parse-better-errors: ^1.0.1 + checksum: 0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5 + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": ^7.0.0 + error-ex: ^1.3.1 + json-parse-even-better-errors: ^2.3.0 + lines-and-columns: ^1.1.6 + checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + languageName: node + linkType: hard + +"parse-path@npm:^7.0.0": + version: 7.0.0 + resolution: "parse-path@npm:7.0.0" + dependencies: + protocols: ^2.0.0 + checksum: 244b46523a58181d251dda9b888efde35d8afb957436598d948852f416d8c76ddb4f2010f9fc94218b4be3e5c0f716aa0d2026194a781e3b8981924142009302 + languageName: node + linkType: hard + +"parse-url@npm:^8.1.0": + version: 8.1.0 + resolution: "parse-url@npm:8.1.0" + dependencies: + parse-path: ^7.0.0 + checksum: b93e21ab4c93c7d7317df23507b41be7697694d4c94f49ed5c8d6288b01cba328fcef5ba388e147948eac20453dee0df9a67ab2012415189fff85973bdffe8d9 + languageName: node + linkType: hard + +"parse5@npm:^7.0.0, parse5@npm:^7.1.1": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" + dependencies: + entities: ^4.4.0 + checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 + languageName: node + linkType: hard + +"path-exists@npm:4.0.0, path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-type@npm:^3.0.0": + version: 3.0.0 + resolution: "path-type@npm:3.0.0" + dependencies: + pify: ^3.0.0 + checksum: 735b35e256bad181f38fa021033b1c33cfbe62ead42bb2222b56c210e42938eecb272ae1949f3b6db4ac39597a61b44edd8384623ec4d79bfdc9a9c0f12537a6 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"pify@npm:5.0.0, pify@npm:^5.0.0": + version: 5.0.0 + resolution: "pify@npm:5.0.0" + checksum: 443e3e198ad6bfa8c0c533764cf75c9d5bc976387a163792fb553ffe6ce923887cf14eebf5aea9b7caa8eab930da8c33612990ae85bd8c2bc18bedb9eae94ecb + languageName: node + linkType: hard + +"pify@npm:^2.3.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b + languageName: node + linkType: hard + +"pirates@npm:^4.0.1, pirates@npm:^4.0.4": + version: 4.0.5 + resolution: "pirates@npm:4.0.5" + checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: ^4.0.0 + checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + languageName: node + linkType: hard + +"postcss-load-config@npm:^3.0.1": + version: 3.1.4 + resolution: "postcss-load-config@npm:3.1.4" + dependencies: + lilconfig: ^2.0.5 + yaml: ^1.10.2 + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + checksum: 1c589504c2d90b1568aecae8238ab993c17dba2c44f848a8f13619ba556d26a1c09644d5e6361b5784e721e94af37b604992f9f3dc0483e687a0cc1cc5029a34 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a + languageName: node + linkType: hard + +"prelude-ls@npm:~1.1.2": + version: 1.1.2 + resolution: "prelude-ls@npm:1.1.2" + checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 + languageName: node + linkType: hard + +"prettier@npm:2.8.4": + version: 2.8.4 + resolution: "prettier@npm:2.8.4" + bin: + prettier: bin-prettier.js + checksum: c173064bf3df57b6d93d19aa98753b9b9dd7657212e33b41ada8e2e9f9884066bb9ca0b4005b89b3ab137efffdf8fbe0b462785aba20364798ff4303aadda57e + languageName: node + linkType: hard + +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.3.1": + version: 29.3.1 + resolution: "pretty-format@npm:29.3.1" + dependencies: + "@jest/schemas": ^29.0.0 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 9917a0bb859cd7a24a343363f70d5222402c86d10eb45bcc2f77b23a4e67586257390e959061aec22762a782fe6bafb59bf34eb94527bc2e5d211afdb287eb4e + languageName: node + linkType: hard + +"pretty-format@npm:^29.4.3": + version: 29.4.3 + resolution: "pretty-format@npm:29.4.3" + dependencies: + "@jest/schemas": ^29.4.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 3258b9a010bd79b3cf73783ad1e4592b6326fc981b6e31b742f316f14e7fbac09b48a9dbf274d092d9bde404db9fe16f518370e121837dc078a597392e6e5cc5 + languageName: node + linkType: hard + +"proc-log@npm:^2.0.0, proc-log@npm:^2.0.1": + version: 2.0.1 + resolution: "proc-log@npm:2.0.1" + checksum: f6f23564ff759097db37443e6e2765af84979a703d2c52c1b9df506ee9f87caa101ba49d8fdc115c1a313ec78e37e8134704e9069e6a870f3499d98bb24c436f + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"promise-all-reject-late@npm:^1.0.0": + version: 1.0.1 + resolution: "promise-all-reject-late@npm:1.0.1" + checksum: d7d61ac412352e2c8c3463caa5b1c3ca0f0cc3db15a09f180a3da1446e33d544c4261fc716f772b95e4c27d559cfd2388540f44104feb356584f9c73cfb9ffcb + languageName: node + linkType: hard + +"promise-call-limit@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-call-limit@npm:1.0.1" + checksum: e69aed17f5f34bbd7aecff28faedb456e3500a08af31ee759ef75f2d8c2219d7c0e59f153f4d8c339056de8c304e0dd4acc500c339e7ea1e9c0e7bb1444367c8 + languageName: node + linkType: hard + +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"prompts@npm:^2.0.1": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: ^3.0.3 + sisteransi: ^1.0.5 + checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d + languageName: node + linkType: hard + +"promzard@npm:^0.3.0": + version: 0.3.0 + resolution: "promzard@npm:0.3.0" + dependencies: + read: 1 + checksum: 443a3b39ac916099988ee0161ab4e22edd1fa27e3d39a38d60e48c11ca6df3f5a90bfe44d95af06ed8659c4050b789ffe64c3f9f8e49a4bea1ea19105c98445a + languageName: node + linkType: hard + +"proto-list@npm:~1.2.1": + version: 1.2.4 + resolution: "proto-list@npm:1.2.4" + checksum: 4d4826e1713cbfa0f15124ab0ae494c91b597a3c458670c9714c36e8baddf5a6aad22842776f2f5b137f259c8533e741771445eb8df82e861eea37a6eaba03f7 + languageName: node + linkType: hard + +"protocols@npm:^2.0.0, protocols@npm:^2.0.1": + version: 2.0.1 + resolution: "protocols@npm:2.0.1" + checksum: 4a9bef6aa0449a0245ded319ac3cbfd032c3e76ebb562777037a3a832c99253d0e8bc2847f7be350236df620a11f7d4fe683ea7f59a2cc14c69f746b6259eda4 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 + languageName: node + linkType: hard + +"psl@npm:^1.1.33": + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": + version: 2.1.1 + resolution: "punycode@npm:2.1.1" + checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 + languageName: node + linkType: hard + +"q@npm:^1.5.1": + version: 1.5.1 + resolution: "q@npm:1.5.1" + checksum: 147baa93c805bc1200ed698bdf9c72e9e42c05f96d007e33a558b5fdfd63e5ea130e99313f28efc1783e90e6bdb4e48b67a36fcc026b7b09202437ae88a1fb12 + languageName: node + linkType: hard + +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"quick-lru@npm:^4.0.1": + version: 4.0.1 + resolution: "quick-lru@npm:4.0.1" + checksum: bea46e1abfaa07023e047d3cf1716a06172c4947886c053ede5c50321893711577cb6119360f810cc3ffcd70c4d7db4069c3cee876b358ceff8596e062bd1154 + languageName: node + linkType: hard + +"react-is@npm:^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + +"read-cmd-shim@npm:3.0.0": + version: 3.0.0 + resolution: "read-cmd-shim@npm:3.0.0" + checksum: b518c6026f3320e30b692044f6ff5c4dc80f9c71261296da8994101b569b26b12b8e5df397bba2d4691dd3a3a2f770a1eca7be18a69ec202fac6dcfadc5016fd + languageName: node + linkType: hard + +"read-cmd-shim@npm:^3.0.0": + version: 3.0.1 + resolution: "read-cmd-shim@npm:3.0.1" + checksum: 79fe66aa78eddcca8dc196765ae3168b3a56e2b69ba54071525eb00a9eeee8cc83b3d5f784432c3d8ce868787fdc059b1a1e0b605246b5108c9003fc927ea263 + languageName: node + linkType: hard + +"read-package-json-fast@npm:^2.0.2, read-package-json-fast@npm:^2.0.3": + version: 2.0.3 + resolution: "read-package-json-fast@npm:2.0.3" + dependencies: + json-parse-even-better-errors: ^2.3.0 + npm-normalize-package-bin: ^1.0.1 + checksum: fca37b3b2160b9dda7c5588b767f6a2b8ce68d03a044000e568208e20bea0cf6dd2de17b90740ce8da8b42ea79c0b3859649dadf29510bbe77224ea65326a903 + languageName: node + linkType: hard + +"read-package-json@npm:5.0.1": + version: 5.0.1 + resolution: "read-package-json@npm:5.0.1" + dependencies: + glob: ^8.0.1 + json-parse-even-better-errors: ^2.3.1 + normalize-package-data: ^4.0.0 + npm-normalize-package-bin: ^1.0.1 + checksum: e8c2ad72df1f17e71268feabdb9bb0153ed2c7d38a05b759c5c49cf368a754bdd3c0e8a279fbc8d707802ff91d2cf144a995e6ebd5534de2848d52ab2c14034d + languageName: node + linkType: hard + +"read-package-json@npm:^5.0.0": + version: 5.0.2 + resolution: "read-package-json@npm:5.0.2" + dependencies: + glob: ^8.0.1 + json-parse-even-better-errors: ^2.3.1 + normalize-package-data: ^4.0.0 + npm-normalize-package-bin: ^2.0.0 + checksum: 0882ac9cec1bc92fb5515e9727611fb2909351e1e5c840dce3503cbb25b4cd48eb44b61071986e0fc51043208161f07d364a7336206c8609770186818753b51a + languageName: node + linkType: hard + +"read-pkg-up@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg-up@npm:3.0.0" + dependencies: + find-up: ^2.0.0 + read-pkg: ^3.0.0 + checksum: 16175573f2914ab9788897bcbe2a62b5728d0075e62285b3680cebe97059e2911e0134a062cf6e51ebe3e3775312bc788ac2039ed6af38ec68d2c10c6f2b30fb + languageName: node + linkType: hard + +"read-pkg-up@npm:^7.0.1": + version: 7.0.1 + resolution: "read-pkg-up@npm:7.0.1" + dependencies: + find-up: ^4.1.0 + read-pkg: ^5.2.0 + type-fest: ^0.8.1 + checksum: e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 + languageName: node + linkType: hard + +"read-pkg@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg@npm:3.0.0" + dependencies: + load-json-file: ^4.0.0 + normalize-package-data: ^2.3.2 + path-type: ^3.0.0 + checksum: 398903ebae6c7e9965419a1062924436cc0b6f516c42c4679a90290d2f87448ed8f977e7aa2dbba4aa1ac09248628c43e493ac25b2bc76640e946035200e34c6 + languageName: node + linkType: hard + +"read-pkg@npm:^5.2.0": + version: 5.2.0 + resolution: "read-pkg@npm:5.2.0" + dependencies: + "@types/normalize-package-data": ^2.4.0 + normalize-package-data: ^2.5.0 + parse-json: ^5.0.0 + type-fest: ^0.6.0 + checksum: eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 + languageName: node + linkType: hard + +"read@npm:1, read@npm:^1.0.7": + version: 1.0.7 + resolution: "read@npm:1.0.7" + dependencies: + mute-stream: ~0.0.4 + checksum: 2777c254e5732cac96f5d0a1c0f6b836c89ae23d8febd405b206f6f24d5de1873420f1a0795e0e3721066650d19adf802c7882c4027143ee0acf942a4f34f97b + languageName: node + linkType: hard + +"readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.0 + resolution: "readable-stream@npm:3.6.0" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 + languageName: node + linkType: hard + +"readable-stream@npm:~2.3.6": + version: 2.3.7 + resolution: "readable-stream@npm:2.3.7" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.3 + isarray: ~1.0.0 + process-nextick-args: ~2.0.0 + safe-buffer: ~5.1.1 + string_decoder: ~1.1.1 + util-deprecate: ~1.0.1 + checksum: e4920cf7549a60f8aaf694d483a0e61b2a878b969d224f89b3bc788b8d920075132c4b55a7494ee944c7b6a9a0eada28a7f6220d80b0312ece70bbf08eeca755 + languageName: node + linkType: hard + +"readdir-scoped-modules@npm:^1.1.0": + version: 1.1.0 + resolution: "readdir-scoped-modules@npm:1.1.0" + dependencies: + debuglog: ^1.0.1 + dezalgo: ^1.0.0 + graceful-fs: ^4.1.2 + once: ^1.3.0 + checksum: 6d9f334e40dfd0f5e4a8aab5e67eb460c95c85083c690431f87ab2c9135191170e70c2db6d71afcafb78e073d23eb95dcb3fc33ef91308f6ebfe3197be35e608 + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: ^2.2.1 + checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 + languageName: node + linkType: hard + +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: ^4.0.0 + strip-indent: ^3.0.0 + checksum: fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b + languageName: node + linkType: hard + +"regexpp@npm:^3.2.0": + version: 3.2.0 + resolution: "regexpp@npm:3.2.0" + checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: ^5.0.0 + checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 + languageName: node + linkType: hard + +"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"resolve.exports@npm:^2.0.0": + version: 2.0.0 + resolution: "resolve.exports@npm:2.0.0" + checksum: d8bee3b0cc0a0ae6c8323710983505bc6a3a2574f718e96f01e048a0f0af035941434b386cc9efc7eededc5e1199726185c306ec6f6a1aa55d5fbad926fd0634 + languageName: node + linkType: hard + +"resolve@npm:^1.10.0, resolve@npm:^1.20.0": + version: 1.22.1 + resolution: "resolve@npm:1.22.1" + dependencies: + is-core-module: ^2.9.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin": + version: 1.22.1 + resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" + dependencies: + is-core-module: ^2.9.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b + languageName: node + linkType: hard + +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: ^5.1.0 + signal-exit: ^3.0.2 + checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + languageName: node + linkType: hard + +"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"rollup@npm:^3.2.5": + version: 3.8.1 + resolution: "rollup@npm:3.8.1" + dependencies: + fsevents: ~2.3.2 + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 89ad4df4a5a3ba7a2ee92e2c78d3737eda357d7f8d98237d9e9b2a0b27e238e3ee247e55ea7bf167682ab6dba0ffa948c9e5a741d370e45bb22983299893914b + languageName: node + linkType: hard + +"run-async@npm:^2.4.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"rxjs@npm:^7.5.5": + version: 7.8.0 + resolution: "rxjs@npm:7.8.0" + dependencies: + tslib: ^2.1.0 + checksum: 61b4d4fd323c1043d8d6ceb91f24183b28bcf5def4f01ca111511d5c6b66755bc5578587fe714ef5d67cf4c9f2e26f4490d4e1d8cabf9bd5967687835e9866a2 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" + dependencies: + xmlchars: ^2.2.0 + checksum: d3fa3e2aaf6c65ed52ee993aff1891fc47d5e47d515164b5449cbf5da2cbdc396137e55590472e64c5c436c14ae64a8a03c29b9e7389fc6f14035cf4e982ef3b + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": + version: 5.7.1 + resolution: "semver@npm:5.7.1" + bin: + semver: ./bin/semver + checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf + languageName: node + linkType: hard + +"semver@npm:7.3.4": + version: 7.3.4 + resolution: "semver@npm:7.3.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 96451bfd7cba9b60ee87571959dc47e87c95b2fe58a9312a926340fee9907fc7bc062c352efdaf5bb24b2dff59c145e14faf7eb9d718a84b4751312531b39f43 + languageName: node + linkType: hard + +"semver@npm:7.x, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7": + version: 7.3.8 + resolution: "semver@npm:7.3.8" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.3.0": + version: 6.3.0 + resolution: "semver@npm:6.3.0" + bin: + semver: ./bin/semver.js + checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: ^6.0.2 + checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 + languageName: node + linkType: hard + +"slash@npm:3.0.0, slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"sort-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "sort-keys@npm:2.0.0" + dependencies: + is-plain-obj: ^1.0.0 + checksum: f0fd827fa9f8f866e98588d2a38c35209afbf1e9a05bb0e4ceeeb8bbf31d923c8902b0a7e0f561590ddb65e58eba6a74f74b991c85360bcc52e83a3f0d1cffd7 + languageName: node + linkType: hard + +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 + languageName: node + linkType: hard + +"source-map@npm:0.8.0-beta.0": + version: 0.8.0-beta.0 + resolution: "source-map@npm:0.8.0-beta.0" + dependencies: + whatwg-url: ^7.0.0 + checksum: e94169be6461ab0ac0913313ad1719a14c60d402bd22b0ad96f4a6cffd79130d91ab5df0a5336a326b04d2df131c1409f563c9dc0d21a6ca6239a44b6c8dbd92 + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.1.1 + resolution: "spdx-correct@npm:3.1.1" + dependencies: + spdx-expression-parse: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: 77ce438344a34f9930feffa61be0eddcda5b55fc592906ef75621d4b52c07400a97084d8701557b13f7d2aae0cb64f808431f469e566ef3fe0a3a131dcb775a6 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.3.0 + resolution: "spdx-exceptions@npm:2.3.0" + checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.12 + resolution: "spdx-license-ids@npm:3.0.12" + checksum: 92a4dddce62ce1db6fe54a7a839cf85e06abc308fc83b776a55b44e4f1906f02e7ebd506120847039e976bbbad359ea8bdfafb7925eae5cd7e73255f02e0b7d6 + languageName: node + linkType: hard + +"split2@npm:^3.0.0": + version: 3.2.2 + resolution: "split2@npm:3.2.2" + dependencies: + readable-stream: ^3.0.0 + checksum: 8127ddbedd0faf31f232c0e9192fede469913aa8982aa380752e0463b2e31c2359ef6962eb2d24c125bac59eeec76873678d723b1c7ff696216a1cd071e3994a + languageName: node + linkType: hard + +"split@npm:^1.0.0": + version: 1.0.1 + resolution: "split@npm:1.0.1" + dependencies: + through: 2 + checksum: 12f4554a5792c7e98bb3e22b53c63bfa5ef89aa704353e1db608a55b51f5b12afaad6e4a8ecf7843c15f273f43cdadd67b3705cc43d48a75c2cf4641d51f7e7a + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + +"ssri@npm:9.0.1, ssri@npm:^9.0.0": + version: 9.0.1 + resolution: "ssri@npm:9.0.1" + dependencies: + minipass: ^3.1.1 + checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: ^2.0.0 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + languageName: node + linkType: hard + +"string-length@npm:^4.0.1": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: ^1.0.2 + strip-ansi: ^6.0.0 + checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 + languageName: node + linkType: hard + +"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: ~5.2.0 + checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b + languageName: node + linkType: hard + +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: ^1.0.0 + checksum: 18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"strong-log-transformer@npm:2.1.0, strong-log-transformer@npm:^2.1.0": + version: 2.1.0 + resolution: "strong-log-transformer@npm:2.1.0" + dependencies: + duplexer: ^0.1.1 + minimist: ^1.2.0 + through: ^2.3.4 + bin: + sl-log-transformer: bin/sl-log-transformer.js + checksum: abf9a4ac143118f26c3a0771b204b02f5cf4fa80384ae158f25e02bfbff761038accc44a7f65869ccd5a5995a7f2c16b1466b83149644ba6cecd3072a8927297 + languageName: node + linkType: hard + +"sucrase@npm:^3.20.3": + version: 3.29.0 + resolution: "sucrase@npm:3.29.0" + dependencies: + commander: ^4.0.0 + glob: 7.1.6 + lines-and-columns: ^1.1.6 + mz: ^2.7.0 + pirates: ^4.0.1 + ts-interface-checker: ^0.1.9 + bin: + sucrase: bin/sucrase + sucrase-node: bin/sucrase-node + checksum: fc8f04c34f29c0e9ca63109815df138182d62663dbe9565fcd94161b77a88a639f40c46559d0bb84d7acf9346ce23ea102476fd9168ec279330c7faecefb81eb + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae + languageName: node + linkType: hard + +"symbol-tree@npm:^3.2.4": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d + languageName: node + linkType: hard + +"tar-stream@npm:~2.2.0": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: ^4.0.3 + end-of-stream: ^1.4.1 + fs-constants: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^3.1.1 + checksum: 699831a8b97666ef50021c767f84924cfee21c142c2eb0e79c63254e140e6408d6d55a065a2992548e72b06de39237ef2b802b99e3ece93ca3904a37622a66f3 + languageName: node + linkType: hard + +"tar@npm:6.1.11": + version: 6.1.11 + resolution: "tar@npm:6.1.11" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^3.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: a04c07bb9e2d8f46776517d4618f2406fb977a74d914ad98b264fc3db0fe8224da5bec11e5f8902c5b9bcb8ace22d95fbe3c7b36b8593b7dfc8391a25898f32f + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.1.13 + resolution: "tar@npm:6.1.13" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^4.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: 8a278bed123aa9f53549b256a36b719e317c8b96fe86a63406f3c62887f78267cea9b22dc6f7007009738509800d4a4dccc444abd71d762287c90f35b002eb1c + languageName: node + linkType: hard + +"temp-dir@npm:1.0.0": + version: 1.0.0 + resolution: "temp-dir@npm:1.0.0" + checksum: cb2b58ddfb12efa83e939091386ad73b425c9a8487ea0095fe4653192a40d49184a771a1beba99045fbd011e389fd563122d79f54f82be86a55620667e08a6b2 + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": ^0.1.2 + glob: ^7.1.4 + minimatch: ^3.0.4 + checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 + languageName: node + linkType: hard + +"text-extensions@npm:^1.0.0": + version: 1.9.0 + resolution: "text-extensions@npm:1.9.0" + checksum: 56a9962c1b62d39b2bcb369b7558ca85c1b55e554b38dfd725edcc0a1babe5815782a60c17ff6b839093b163dfebb92b804208aaaea616ec7571c8059ae0cf44 + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: ">= 3.1.0 < 4" + checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: ^1.0.0 + checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e + languageName: node + linkType: hard + +"through2@npm:^2.0.0": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: ~2.3.6 + xtend: ~4.0.1 + checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 + languageName: node + linkType: hard + +"through2@npm:^4.0.0": + version: 4.0.2 + resolution: "through2@npm:4.0.2" + dependencies: + readable-stream: 3 + checksum: ac7430bd54ccb7920fd094b1c7ff3e1ad6edd94202e5528331253e5fde0cc56ceaa690e8df9895de2e073148c52dfbe6c4db74cacae812477a35660090960cc0 + languageName: node + linkType: hard + +"through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.4, through@npm:^2.3.6": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: ~1.0.2 + checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 + languageName: node + linkType: hard + +"tmp@npm:~0.2.1": + version: 0.2.1 + resolution: "tmp@npm:0.2.1" + dependencies: + rimraf: ^3.0.0 + checksum: 8b1214654182575124498c87ca986ac53dc76ff36e8f0e0b67139a8d221eaecfdec108c0e6ec54d76f49f1f72ab9325500b246f562b926f85bcdfca8bf35df9e + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"tough-cookie@npm:^4.1.2": + version: 4.1.2 + resolution: "tough-cookie@npm:4.1.2" + dependencies: + psl: ^1.1.33 + punycode: ^2.1.1 + universalify: ^0.2.0 + url-parse: ^1.5.3 + checksum: a7359e9a3e875121a84d6ba40cc184dec5784af84f67f3a56d1d2ae39b87c0e004e6ba7c7331f9622a7d2c88609032473488b28fe9f59a1fec115674589de39a + languageName: node + linkType: hard + +"tr46@npm:^1.0.1": + version: 1.0.1 + resolution: "tr46@npm:1.0.1" + dependencies: + punycode: ^2.1.0 + checksum: 96d4ed46bc161db75dbf9247a236ea0bfcaf5758baae6749e92afab0bc5a09cb59af21788ede7e55080f2bf02dce3e4a8f2a484cc45164e29f4b5e68f7cbcc1a + languageName: node + linkType: hard + +"tr46@npm:^3.0.0": + version: 3.0.0 + resolution: "tr46@npm:3.0.0" + dependencies: + punycode: ^2.1.1 + checksum: 44c3cc6767fb800490e6e9fd64fd49041aa4e49e1f6a012b34a75de739cc9ed3a6405296072c1df8b6389ae139c5e7c6496f659cfe13a04a4bff3a1422981270 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"tree-kill@npm:^1.2.2": + version: 1.2.2 + resolution: "tree-kill@npm:1.2.2" + bin: + tree-kill: cli.js + checksum: 49117f5f410d19c84b0464d29afb9642c863bc5ba40fcb9a245d474c6d5cc64d1b177a6e6713129eb346b40aebb9d4631d967517f9fbe8251c35b21b13cd96c7 + languageName: node + linkType: hard + +"treeverse@npm:^2.0.0": + version: 2.0.0 + resolution: "treeverse@npm:2.0.0" + checksum: 3c6b2b890975a4d42c86b9a0f1eb932b4450db3fa874be5c301c4f5e306fd76330c6a490cf334b0937b3a44b049787ba5d98c88bc7b140f34fdb3ab1f83e5269 + languageName: node + linkType: hard + +"trim-newlines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-newlines@npm:3.0.1" + checksum: b530f3fadf78e570cf3c761fb74fef655beff6b0f84b29209bac6c9622db75ad1417f4a7b5d54c96605dcd72734ad44526fef9f396807b90839449eb543c6206 + languageName: node + linkType: hard + +"ts-interface-checker@npm:^0.1.9": + version: 0.1.13 + resolution: "ts-interface-checker@npm:0.1.13" + checksum: 20c29189c2dd6067a8775e07823ddf8d59a33e2ffc47a1bd59a5cb28bb0121a2969a816d5e77eda2ed85b18171aa5d1c4005a6b88ae8499ec7cc49f78571cb5e + languageName: node + linkType: hard + +"ts-jest@npm:^29.0.5": + version: 29.0.5 + resolution: "ts-jest@npm:29.0.5" + dependencies: + bs-logger: 0.x + fast-json-stable-stringify: 2.x + jest-util: ^29.0.0 + json5: ^2.2.3 + lodash.memoize: 4.x + make-error: 1.x + semver: 7.x + yargs-parser: ^21.0.1 + peerDependencies: + "@babel/core": ">=7.0.0-beta.0 <8" + "@jest/types": ^29.0.0 + babel-jest: ^29.0.0 + jest: ^29.0.0 + typescript: ">=4.3" + peerDependenciesMeta: + "@babel/core": + optional: true + "@jest/types": + optional: true + babel-jest: + optional: true + esbuild: + optional: true + bin: + ts-jest: cli.js + checksum: f60f129c2287f4c963d9ee2677132496c5c5a5d39c27ad234199a1140c26318a7d5bda34890ab0e30636ec42a8de28f84487c09e9dcec639c9c67812b3a38373 + languageName: node + linkType: hard + +"tsconfig-paths@npm:^4.1.2": + version: 4.1.2 + resolution: "tsconfig-paths@npm:4.1.2" + dependencies: + json5: ^2.2.2 + minimist: ^1.2.6 + strip-bom: ^3.0.0 + checksum: 3d9151ecea139594e25618717de15769ab9f38f8e6d510ac16e592b23e7f7105ea13cec5694c3de7e132c98277b775e18edd1651964164ee6d75737c408494cc + languageName: node + linkType: hard + +"tslib@npm:^1.8.1": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd + languageName: node + linkType: hard + +"tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0": + version: 2.4.1 + resolution: "tslib@npm:2.4.1" + checksum: 19480d6e0313292bd6505d4efe096a6b31c70e21cf08b5febf4da62e95c265c8f571f7b36fcc3d1a17e068032f59c269fab3459d6cd3ed6949eafecf64315fca + languageName: node + linkType: hard + +"tslib@npm:~2.5.0": + version: 2.5.0 + resolution: "tslib@npm:2.5.0" + checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 + languageName: node + linkType: hard + +"tsup@npm:^6.6.3": + version: 6.6.3 + resolution: "tsup@npm:6.6.3" + dependencies: + bundle-require: ^4.0.0 + cac: ^6.7.12 + chokidar: ^3.5.1 + debug: ^4.3.1 + esbuild: ^0.17.6 + execa: ^5.0.0 + globby: ^11.0.3 + joycon: ^3.0.1 + postcss-load-config: ^3.0.1 + resolve-from: ^5.0.0 + rollup: ^3.2.5 + source-map: 0.8.0-beta.0 + sucrase: ^3.20.3 + tree-kill: ^1.2.2 + peerDependencies: + "@swc/core": ^1 + postcss: ^8.4.12 + typescript: ^4.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + postcss: + optional: true + typescript: + optional: true + bin: + tsup: dist/cli-default.js + tsup-node: dist/cli-node.js + checksum: 4fa45fd7493971e5bf1f142a2590eabc1de536dc251d4b90bfce7dfaf1d7f40e19ef04ee541f9d2ab6a55841b72d265b7ddd3ea70c6371d746b5aed782f08094 + languageName: node + linkType: hard + +"tsutils@npm:^3.21.0": + version: 3.21.0 + resolution: "tsutils@npm:3.21.0" + dependencies: + tslib: ^1.8.1 + peerDependencies: + typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: ^1.2.1 + checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a + languageName: node + linkType: hard + +"type-check@npm:~0.3.2": + version: 0.3.2 + resolution: "type-check@npm:0.3.2" + dependencies: + prelude-ls: ~1.1.2 + checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"type-fest@npm:^0.18.0": + version: 0.18.1 + resolution: "type-fest@npm:0.18.1" + checksum: e96dcee18abe50ec82dab6cbc4751b3a82046da54c52e3b2d035b3c519732c0b3dd7a2fa9df24efd1a38d953d8d4813c50985f215f1957ee5e4f26b0fe0da395 + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 + languageName: node + linkType: hard + +"type-fest@npm:^0.4.1": + version: 0.4.1 + resolution: "type-fest@npm:0.4.1" + checksum: 25f882d9cc2f24af7a0a529157f96dead157894c456bfbad16d48f990c43b470dfb79848e8d9c03fe1be72a7d169e44f6f3135b54628393c66a6189c5dc077f7 + languageName: node + linkType: hard + +"type-fest@npm:^0.6.0": + version: 0.6.0 + resolution: "type-fest@npm:0.6.0" + checksum: b2188e6e4b21557f6e92960ec496d28a51d68658018cba8b597bd3ef757721d1db309f120ae987abeeda874511d14b776157ff809f23c6d1ce8f83b9b2b7d60f + languageName: node + linkType: hard + +"type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7 + languageName: node + linkType: hard + +"type-fest@npm:^3.6.1": + version: 3.6.1 + resolution: "type-fest@npm:3.6.1" + checksum: f7e39bf6b74a883661ec8642707f49c33cfcdc6221e1ba36b1d329c1cf301d87351b3ca0839b894cbfe47dc62140c0ce47e69c88f76800b678e0b67b7fe826e6 + languageName: node + linkType: hard + +"typedarray@npm:^0.0.6": + version: 0.0.6 + resolution: "typedarray@npm:0.0.6" + checksum: 33b39f3d0e8463985eeaeeacc3cb2e28bc3dfaf2a5ed219628c0b629d5d7b810b0eb2165f9f607c34871d5daa92ba1dc69f49051cf7d578b4cbd26c340b9d1b1 + languageName: node + linkType: hard + +"typescript@npm:4.9.5, typescript@npm:~4.9.5": + version: 4.9.5 + resolution: "typescript@npm:4.9.5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db + languageName: node + linkType: hard + +"typescript@npm:^3 || ^4": + version: 4.9.4 + resolution: "typescript@npm:4.9.4" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: e782fb9e0031cb258a80000f6c13530288c6d63f1177ed43f770533fdc15740d271554cdae86701c1dd2c83b082cea808b07e97fd68b38a172a83dbf9e0d0ef9 + languageName: node + linkType: hard + +"typescript@patch:typescript@4.9.5#~builtin, typescript@patch:typescript@~4.9.5#~builtin": + version: 4.9.5 + resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=bda367" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 2eee5c37cad4390385db5db5a8e81470e42e8f1401b0358d7390095d6f681b410f2c4a0c496c6ff9ebd775423c7785cdace7bcdad76c7bee283df3d9718c0f20 + languageName: node + linkType: hard + +"typescript@patch:typescript@^3 || ^4#~builtin": + version: 4.9.4 + resolution: "typescript@patch:typescript@npm%3A4.9.4#~builtin::version=4.9.4&hash=bda367" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 37f6e2c3c5e2aa5934b85b0fddbf32eeac8b1bacf3a5b51d01946936d03f5377fe86255d4e5a4ae628fd0cd553386355ad362c57f13b4635064400f3e8e05b9d + languageName: node + linkType: hard + +"uglify-js@npm:^3.1.4": + version: 3.17.4 + resolution: "uglify-js@npm:3.17.4" + bin: + uglifyjs: bin/uglifyjs + checksum: 7b3897df38b6fc7d7d9f4dcd658599d81aa2b1fb0d074829dd4e5290f7318dbca1f4af2f45acb833b95b1fe0ed4698662ab61b87e94328eb4c0a0d3435baf924 + languageName: node + linkType: hard + +"unique-filename@npm:^2.0.0": + version: 2.0.1 + resolution: "unique-filename@npm:2.0.1" + dependencies: + unique-slug: ^3.0.0 + checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f + languageName: node + linkType: hard + +"unique-slug@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-slug@npm:3.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c + languageName: node + linkType: hard + +"universal-user-agent@npm:^6.0.0": + version: 6.0.0 + resolution: "universal-user-agent@npm:6.0.0" + checksum: 5092bbc80dd0d583cef0b62c17df0043193b74f425112ea6c1f69bc5eda21eeec7a08d8c4f793a277eb2202ffe9b44bec852fa3faff971234cd209874d1b79ef + languageName: node + linkType: hard + +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.0 + resolution: "universalify@npm:2.0.0" + checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 + languageName: node + linkType: hard + +"upath@npm:^2.0.1": + version: 2.0.1 + resolution: "upath@npm:2.0.1" + checksum: 2db04f24a03ef72204c7b969d6991abec9e2cb06fb4c13a1fd1c59bc33b46526b16c3325e55930a11ff86a77a8cbbcda8f6399bf914087028c5beae21ecdb33c + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.9": + version: 1.0.10 + resolution: "update-browserslist-db@npm:1.0.10" + dependencies: + escalade: ^3.1.1 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + browserslist-lint: cli.js + checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"url-parse@npm:^1.5.3": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"uuid@npm:8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + +"v8-compile-cache@npm:2.3.0": + version: 2.3.0 + resolution: "v8-compile-cache@npm:2.3.0" + checksum: adb0a271eaa2297f2f4c536acbfee872d0dd26ec2d76f66921aa7fc437319132773483344207bdbeee169225f4739016d8d2dbf0553913a52bb34da6d0334f8e + languageName: node + linkType: hard + +"v8-to-istanbul@npm:^9.0.1": + version: 9.0.1 + resolution: "v8-to-istanbul@npm:9.0.1" + dependencies: + "@jridgewell/trace-mapping": ^0.3.12 + "@types/istanbul-lib-coverage": ^2.0.1 + convert-source-map: ^1.6.0 + checksum: a49c34bf0a3af0c11041a3952a2600913904a983bd1bc87148b5c033bc5c1d02d5a13620fcdbfa2c60bc582a2e2970185780f0c844b4c3a220abf405f8af6311 + languageName: node + linkType: hard + +"validate-npm-package-license@npm:3.0.4, validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + languageName: node + linkType: hard + +"validate-npm-package-name@npm:4.0.0, validate-npm-package-name@npm:^4.0.0": + version: 4.0.0 + resolution: "validate-npm-package-name@npm:4.0.0" + dependencies: + builtins: ^5.0.0 + checksum: a32fd537bad17fcb59cfd58ae95a414d443866020d448ec3b22e8d40550cb585026582a57efbe1f132b882eea4da8ac38ee35f7be0dd72988a3cb55d305a20c1 + languageName: node + linkType: hard + +"validate-npm-package-name@npm:^3.0.0": + version: 3.0.0 + resolution: "validate-npm-package-name@npm:3.0.0" + dependencies: + builtins: ^1.0.3 + checksum: ce4c68207abfb22c05eedb09ff97adbcedc80304a235a0844f5344f1fd5086aa80e4dbec5684d6094e26e35065277b765c1caef68bcea66b9056761eddb22967 + languageName: node + linkType: hard + +"w3c-xmlserializer@npm:^4.0.0": + version: 4.0.0 + resolution: "w3c-xmlserializer@npm:4.0.0" + dependencies: + xml-name-validator: ^4.0.0 + checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 + languageName: node + linkType: hard + +"walk-up-path@npm:^1.0.0": + version: 1.0.0 + resolution: "walk-up-path@npm:1.0.0" + checksum: b8019ac4fb9ba1576839ec66d2217f62ab773c1cc4c704bfd1c79b1359fef5366f1382d3ab230a66a14c3adb1bf0fe102d1fdaa3437881e69154dfd1432abd32 + languageName: node + linkType: hard + +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.0, wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: ^1.0.3 + checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"webidl-conversions@npm:^4.0.2": + version: 4.0.2 + resolution: "webidl-conversions@npm:4.0.2" + checksum: c93d8dfe908a0140a4ae9c0ebc87a33805b416a33ee638a605b551523eec94a9632165e54632f6d57a39c5f948c4bab10e0e066525e9a4b87a79f0d04fbca374 + languageName: node + linkType: hard + +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: f05588567a2a76428515333eff87200fae6c83c3948a7482ebb109562971e77ef6dc49749afa58abb993391227c5697b3ecca52018793e0cb4620a48f10bd21b + languageName: node + linkType: hard + +"whatwg-encoding@npm:^2.0.0": + version: 2.0.0 + resolution: "whatwg-encoding@npm:2.0.0" + dependencies: + iconv-lite: 0.6.3 + checksum: 7087810c410aa9b689cbd6af8773341a53cdc1f3aae2a882c163bd5522ec8ca4cdfc269aef417a5792f411807d5d77d50df4c24e3abb00bb60192858a40cc675 + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-mimetype@npm:3.0.0" + checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824 + languageName: node + linkType: hard + +"whatwg-url@npm:^11.0.0": + version: 11.0.0 + resolution: "whatwg-url@npm:11.0.0" + dependencies: + tr46: ^3.0.0 + webidl-conversions: ^7.0.0 + checksum: ed4826aaa57e66bb3488a4b25c9cd476c46ba96052747388b5801f137dd740b73fde91ad207d96baf9f17fbcc80fc1a477ad65181b5eb5fa718d27c69501d7af + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + +"whatwg-url@npm:^7.0.0": + version: 7.1.0 + resolution: "whatwg-url@npm:7.1.0" + dependencies: + lodash.sortby: ^4.7.0 + tr46: ^1.0.1 + webidl-conversions: ^4.0.2 + checksum: fecb07c87290b47d2ec2fb6d6ca26daad3c9e211e0e531dd7566e7ff95b5b3525a57d4f32640ad4adf057717e0c215731db842ad761e61d947e81010e05cf5fd + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: ^1.0.2 || 2 || 3 || 4 + checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": + version: 1.2.3 + resolution: "word-wrap@npm:1.2.3" + checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f + languageName: node + linkType: hard + +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 2a44b2788165d0a3de71fd517d4880a8e20ea3a82c080ce46e294f0b68b69a2e49cff5f99c600e275c698a90d12c5ea32aff06c311f0db2eb3f1201f3e7b2a04 + languageName: node + linkType: hard + +"wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"write-file-atomic@npm:4.0.1": + version: 4.0.1 + resolution: "write-file-atomic@npm:4.0.1" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 8f780232533ca6223c63c9b9c01c4386ca8c625ebe5017a9ed17d037aec19462ae17109e0aa155bff5966ee4ae7a27b67a99f55caf3f32ffd84155e9da3929fc + languageName: node + linkType: hard + +"write-file-atomic@npm:^2.4.2": + version: 2.4.3 + resolution: "write-file-atomic@npm:2.4.3" + dependencies: + graceful-fs: ^4.1.11 + imurmurhash: ^0.1.4 + signal-exit: ^3.0.2 + checksum: 2db81f92ae974fd87ab4a5e7932feacaca626679a7c98fcc73ad8fcea5a1950eab32fa831f79e9391ac99b562ca091ad49be37a79045bd65f595efbb8f4596ae + languageName: node + linkType: hard + +"write-file-atomic@npm:^4.0.0, write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + languageName: node + linkType: hard + +"write-json-file@npm:^3.2.0": + version: 3.2.0 + resolution: "write-json-file@npm:3.2.0" + dependencies: + detect-indent: ^5.0.0 + graceful-fs: ^4.1.15 + make-dir: ^2.1.0 + pify: ^4.0.1 + sort-keys: ^2.0.0 + write-file-atomic: ^2.4.2 + checksum: 2b97ce2027d53c28a33e4a8e7b0d565faf785988b3776f9e0c68d36477c1fb12639fd0d70877d92a861820707966c62ea9c5f7a36a165d615fd47ca8e24c8371 + languageName: node + linkType: hard + +"write-pkg@npm:4.0.0": + version: 4.0.0 + resolution: "write-pkg@npm:4.0.0" + dependencies: + sort-keys: ^2.0.0 + type-fest: ^0.4.1 + write-json-file: ^3.2.0 + checksum: 7864d44370f42a6761f6898d07ee2818c7a2faad45116580cf779f3adaf94e4bea5557612533a6c421c32323253ecb63b50615094960a637aeaef5df0fd2d6cd + languageName: node + linkType: hard + +"ws@npm:^8.11.0": + version: 8.11.0 + resolution: "ws@npm:8.11.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 316b33aba32f317cd217df66dbfc5b281a2f09ff36815de222bc859e3424d83766d9eb2bd4d667de658b6ab7be151f258318fb1da812416b30be13103e5b5c67 + languageName: node + linkType: hard + +"xml-name-validator@npm:^4.0.0": + version: 4.0.0 + resolution: "xml-name-validator@npm:4.0.0" + checksum: af100b79c29804f05fa35aa3683e29a321db9b9685d5e5febda3fa1e40f13f85abc40f45a6b2bf7bee33f68a1dc5e8eaef4cec100a304a9db565e6061d4cb5ad + languageName: node + linkType: hard + +"xmlchars@npm:^2.2.0": + version: 2.2.0 + resolution: "xmlchars@npm:2.2.0" + checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 + languageName: node + linkType: hard + +"xtend@npm:~4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yaml@npm:^1.10.0, yaml@npm:^1.10.2": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f + languageName: node + linkType: hard + +"yargs-parser@npm:20.2.4": + version: 20.2.4 + resolution: "yargs-parser@npm:20.2.4" + checksum: d251998a374b2743a20271c2fd752b9fbef24eb881d53a3b99a7caa5e8227fcafd9abf1f345ac5de46435821be25ec12189a11030c12ee6481fef6863ed8b924 + languageName: node + linkType: hard + +"yargs-parser@npm:21.1.1, yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + +"yargs@npm:16.2.0, yargs@npm:^16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: ^7.0.2 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.0 + y18n: ^5.0.5 + yargs-parser: ^20.2.2 + checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 + languageName: node + linkType: hard + +"yargs@npm:^17.3.1, yargs@npm:^17.6.2": + version: 17.6.2 + resolution: "yargs@npm:17.6.2" + dependencies: + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 47da1b0d854fa16d45a3ded57b716b013b2179022352a5f7467409da5a04a1eef5b3b3d97a2dfc13e8bbe5f2ffc0afe3bc6a4a72f8254e60f5a4bd7947138643 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard