diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b775bc8..b2a3489 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,8 +69,6 @@ jobs: ${{ runner.os }}- - name: Install dependencies run: yarn install - - name: Run Angular Compatibility Compiler - run: yarn ngcc - run: yarn test --max-parallel=$NX_MAX_PARALLEL @@ -99,8 +97,6 @@ jobs: ${{ runner.os }}- - name: Install dependencies run: yarn install - - name: Run Angular Compatibility Compiler - run: yarn ngcc - run: yarn build --max-parallel=$NX_MAX_PARALLEL - run: yarn scully @@ -168,7 +164,5 @@ jobs: ${{ runner.os }}- - name: Install dependencies run: yarn install - - name: Run Angular Compatibility Compiler - run: yarn ngcc - run: yarn e2e --configuration=ci --max-parallel=$NX_MAX_PARALLEL diff --git a/.scully/settings.yml b/.scully/settings.yml new file mode 100644 index 0000000..80f42d9 --- /dev/null +++ b/.scully/settings.yml @@ -0,0 +1 @@ +identifier: k8p7l5odl6b2cet5 diff --git a/angular.json b/angular.json index 11fdcaf..10e6310 100644 --- a/angular.json +++ b/angular.json @@ -1,5 +1,4 @@ { - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, "cli": { "defaultCollection": "@nrwl/angular" @@ -8,14 +7,19 @@ "schematics": { "@nrwl/angular:application": { "e2eTestRunner": "cypress", + "inlineStyle": true, + "inlineTemplate": true, "linter": "eslint", + "prefix": "til", "style": "scss", - "tags": "type:app", "unitTestRunner": "jest", + "tags": "type:app", "viewEncapsulation": "None" }, "@nrwl/angular:library": { + "changeDetection": "OnPush", "linter": "eslint", + "prefix": "til", "style": "scss", "unitTestRunner": "jest" }, @@ -28,6 +32,9 @@ "export": true, "style": "scss", "viewEncapsulation": "None" + }, + "@nrwl/angular:component": { + "style": "scss" } }, "projects": { @@ -51,7 +58,8 @@ "apps/this-is-learning/src/assets" ], "styles": ["apps/this-is-learning/src/styles.scss"], - "scripts": [] + "scripts": [], + "allowedCommonJsDependencies": ["rss-parser"] }, "configurations": { "production": { @@ -163,6 +171,31 @@ } } } + }, + "publications-feature-this-is-angular": { + "projectType": "library", + "root": "libs/publications/feature-this-is-angular", + "sourceRoot": "libs/publications/feature-this-is-angular/src", + "prefix": "til", + "architect": { + "test": { + "builder": "@nrwl/jest:jest", + "outputs": ["coverage/libs/publications/feature-this-is-angular"], + "options": { + "jestConfig": "libs/publications/feature-this-is-angular/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "libs/publications/feature-this-is-angular/src/**/*.ts", + "libs/publications/feature-this-is-angular/src/**/*.html" + ] + } + } + } } } } diff --git a/apps/this-is-learning/src/app/app-routing.module.ts b/apps/this-is-learning/src/app/app-routing.module.ts index 501b8fd..fbdcc67 100644 --- a/apps/this-is-learning/src/app/app-routing.module.ts +++ b/apps/this-is-learning/src/app/app-routing.module.ts @@ -9,6 +9,13 @@ const routes: Routes = [ path: '', component: HelloComponent, }, + { + path: 'this-is-angular', + loadChildren: () => + import('@this-is-learning/publications/feature-this-is-angular').then( + (esModule) => esModule.PublicationsFeatureThisIsAngularModule + ), + }, ]; @NgModule({ diff --git a/apps/this-is-learning/src/app/hello/hello.component.ts b/apps/this-is-learning/src/app/hello/hello.component.ts index 73c461c..9751e2b 100644 --- a/apps/this-is-learning/src/app/hello/hello.component.ts +++ b/apps/this-is-learning/src/app/hello/hello.component.ts @@ -4,13 +4,15 @@ import { ViewEncapsulation, } from '@angular/core'; +const selector = 'til-hello'; + @Component({ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, - selector: 'til-hello', + selector, styles: [ ` - til-hello { + ${selector} { display: block; } `, @@ -18,6 +20,16 @@ import { template: `

Hello, Scully!

Render time: {{ now | date: 'long' }}

+ +

Publications

+ + `, }) export class HelloComponent { diff --git a/apps/this-is-learning/src/app/hello/hello.scam.ts b/apps/this-is-learning/src/app/hello/hello.scam.ts index 319f9af..88ec672 100644 --- a/apps/this-is-learning/src/app/hello/hello.scam.ts +++ b/apps/this-is-learning/src/app/hello/hello.scam.ts @@ -1,10 +1,11 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; import { HelloComponent } from './hello.component'; @NgModule({ declarations: [HelloComponent], - imports: [CommonModule], + imports: [CommonModule, RouterModule], }) export class HelloScam {} diff --git a/apps/this-is-learning/src/assets/scully-routes.json b/apps/this-is-learning/src/assets/scully-routes.json index c539eca..f448d41 100644 --- a/apps/this-is-learning/src/assets/scully-routes.json +++ b/apps/this-is-learning/src/assets/scully-routes.json @@ -1 +1 @@ -[{ "route": "/" }] +[{"route":"/"},{"route":"/this-is-angular"}] \ No newline at end of file diff --git a/jest.config.js b/jest.config.js index 8b07ace..159fa6f 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,3 +1,6 @@ module.exports = { - projects: ['/apps/this-is-learning'], + projects: [ + '/apps/this-is-learning', + '/libs/publications/feature-this-is-angular', + ], }; diff --git a/libs/publications/feature-this-is-angular/.eslintrc.json b/libs/publications/feature-this-is-angular/.eslintrc.json new file mode 100644 index 0000000..c2afb3b --- /dev/null +++ b/libs/publications/feature-this-is-angular/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "til", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "til", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/libs/publications/feature-this-is-angular/README.md b/libs/publications/feature-this-is-angular/README.md new file mode 100644 index 0000000..d68d5b4 --- /dev/null +++ b/libs/publications/feature-this-is-angular/README.md @@ -0,0 +1 @@ +# This is Angular publication feature diff --git a/libs/publications/feature-this-is-angular/jest.config.js b/libs/publications/feature-this-is-angular/jest.config.js new file mode 100644 index 0000000..920388e --- /dev/null +++ b/libs/publications/feature-this-is-angular/jest.config.js @@ -0,0 +1,24 @@ +module.exports = { + displayName: 'publications-feature-this-is-angular', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + astTransformers: { + before: [ + 'jest-preset-angular/build/InlineFilesTransformer', + 'jest-preset-angular/build/StripStylesTransformer', + ], + }, + }, + }, + coverageDirectory: + '../../../coverage/libs/publications/feature-this-is-angular', + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/libs/publications/feature-this-is-angular/src/index.ts b/libs/publications/feature-this-is-angular/src/index.ts new file mode 100644 index 0000000..c736ca8 --- /dev/null +++ b/libs/publications/feature-this-is-angular/src/index.ts @@ -0,0 +1 @@ +export * from './lib/publications-feature-this-is-angular.module'; diff --git a/libs/publications/feature-this-is-angular/src/lib/article/article.component.ts b/libs/publications/feature-this-is-angular/src/lib/article/article.component.ts new file mode 100644 index 0000000..c53940d --- /dev/null +++ b/libs/publications/feature-this-is-angular/src/lib/article/article.component.ts @@ -0,0 +1,39 @@ +import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core'; + +import { DevCommunityRssItem } from '../dev-community-rss-parser.token'; + +const selector = '[til-article]'; + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + selector, + template: ` +

+ {{ + rssItem?.title + }} +

+ +
+

+ By {{ rssItem?.author }}
+
+ #{{ tag }} +

+
+ +

{{ rssItem?.contentSnippet | tilTruncate }}

+ + Read article + `, +}) +export class ArticleComponent { + @Input() + rssItem: DevCommunityRssItem | null = null; +} diff --git a/libs/publications/feature-this-is-angular/src/lib/article/article.scam.ts b/libs/publications/feature-this-is-angular/src/lib/article/article.scam.ts new file mode 100644 index 0000000..a23c6ea --- /dev/null +++ b/libs/publications/feature-this-is-angular/src/lib/article/article.scam.ts @@ -0,0 +1,12 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { TruncateScam } from '../truncate/truncate.scam'; +import { ArticleComponent } from './article.component'; + +@NgModule({ + declarations: [ArticleComponent], + exports: [ArticleComponent], + imports: [CommonModule, TruncateScam], +}) +export class ArticleScam {} diff --git a/libs/publications/feature-this-is-angular/src/lib/dev-community-rss-items.resolver.ts b/libs/publications/feature-this-is-angular/src/lib/dev-community-rss-items.resolver.ts new file mode 100644 index 0000000..13c00e8 --- /dev/null +++ b/libs/publications/feature-this-is-angular/src/lib/dev-community-rss-items.resolver.ts @@ -0,0 +1,20 @@ +import { Inject, Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Resolve } from '@angular/router'; + +import { DevCommunityRssItems, DevCommunityRssParser, devCommunityRssParserToken } from './dev-community-rss-parser.token'; + +@Injectable({ + providedIn: 'root', +}) +export class DevCommunityRssItemsResolver + implements Resolve { + constructor( + @Inject(devCommunityRssParserToken) private rssParser: DevCommunityRssParser + ) {} + + async resolve(route: ActivatedRouteSnapshot): Promise { + const feed = await this.rssParser.parseURL(route.data.rssUrl); + + return feed.items; + } +} diff --git a/libs/publications/feature-this-is-angular/src/lib/dev-community-rss-parser.token.ts b/libs/publications/feature-this-is-angular/src/lib/dev-community-rss-parser.token.ts new file mode 100644 index 0000000..77ebdfd --- /dev/null +++ b/libs/publications/feature-this-is-angular/src/lib/dev-community-rss-parser.token.ts @@ -0,0 +1,41 @@ +import { InjectionToken } from '@angular/core'; +import * as RssParser from 'rss-parser'; + +export interface DevCommunityRssFeedCustomFields { + readonly language: string; +} + +export interface DevCommunityRssItemCustomFields { + readonly author: string; + readonly contentSnippet: string; + readonly description: string; +} + +export type DevCommunityRssParser = RssParser< + DevCommunityRssFeedCustomFields, + DevCommunityRssItemCustomFields +>; + +export type DevCommunityRssItem = DevCommunityRssItemCustomFields & + RssParser.Item; +export type DevCommunityRssItems = readonly DevCommunityRssItem[]; + +export function devCommunityRssParserFactory(): DevCommunityRssParser { + return new RssParser< + DevCommunityRssFeedCustomFields, + DevCommunityRssItemCustomFields + >({ + customFields: { + feed: ['language'], + item: ['author', 'contentSnippet', 'description'], + }, + }); +} + +export const devCommunityRssParserToken = new InjectionToken( + 'DEV_Community_RSS_parser', + { + factory: devCommunityRssParserFactory, + providedIn: 'root', + } +); diff --git a/libs/publications/feature-this-is-angular/src/lib/publications-feature-this-is-angular.module.ts b/libs/publications/feature-this-is-angular/src/lib/publications-feature-this-is-angular.module.ts new file mode 100644 index 0000000..97ac9d7 --- /dev/null +++ b/libs/publications/feature-this-is-angular/src/lib/publications-feature-this-is-angular.module.ts @@ -0,0 +1,8 @@ +import { NgModule } from '@angular/core'; + +import { ShellModule } from './shell/shell.module'; + +@NgModule({ + imports: [ShellModule], +}) +export class PublicationsFeatureThisIsAngularModule {} diff --git a/libs/publications/feature-this-is-angular/src/lib/shell/shell.component.ts b/libs/publications/feature-this-is-angular/src/lib/shell/shell.component.ts new file mode 100644 index 0000000..4937ae7 --- /dev/null +++ b/libs/publications/feature-this-is-angular/src/lib/shell/shell.component.ts @@ -0,0 +1,43 @@ +import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { DevCommunityRssItems } from '../dev-community-rss-parser.token'; + +const selector = 'til-this-is-angular-shell'; +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, + selector, + styles: [ + ` + ${selector} { + display: block; + } + `, + ], + template: ` +

+ This is Angular +

+ +
+ `, +}) +export class ShellComponent { + rssItems$: Observable = this.route.data.pipe( + map((data) => data.rssItems) + ); + rssUrl$: Observable = this.route.data.pipe( + map((data) => data.rssUrl) + ); + + constructor(private route: ActivatedRoute) {} +} diff --git a/libs/publications/feature-this-is-angular/src/lib/shell/shell.module.ts b/libs/publications/feature-this-is-angular/src/lib/shell/shell.module.ts new file mode 100644 index 0000000..39b8211 --- /dev/null +++ b/libs/publications/feature-this-is-angular/src/lib/shell/shell.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { DevCommunityRssItemsResolver } from '../dev-community-rss-items.resolver'; +import { ShellComponent } from './shell.component'; +import { ShellScam } from './shell.scam'; + +const routes: Routes = [ + { + path: '', + component: ShellComponent, + data: { + rssUrl: 'https://dev.to/feed/this-is-angular', + }, + resolve: { + rssItems: DevCommunityRssItemsResolver, + }, + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes), ShellScam], +}) +export class ShellModule {} diff --git a/libs/publications/feature-this-is-angular/src/lib/shell/shell.scam.ts b/libs/publications/feature-this-is-angular/src/lib/shell/shell.scam.ts new file mode 100644 index 0000000..73201b7 --- /dev/null +++ b/libs/publications/feature-this-is-angular/src/lib/shell/shell.scam.ts @@ -0,0 +1,11 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { ArticleScam } from '../article/article.scam'; +import { ShellComponent } from './shell.component'; + +@NgModule({ + declarations: [ShellComponent], + imports: [CommonModule, ArticleScam], +}) +export class ShellScam {} diff --git a/libs/publications/feature-this-is-angular/src/lib/truncate/truncate.pipe.ts b/libs/publications/feature-this-is-angular/src/lib/truncate/truncate.pipe.ts new file mode 100644 index 0000000..13b91c2 --- /dev/null +++ b/libs/publications/feature-this-is-angular/src/lib/truncate/truncate.pipe.ts @@ -0,0 +1,14 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'tilTruncate', +}) +export class TruncatePipe implements PipeTransform { + transform(text: string | null | undefined): string { + text ??= ''; + + const cutoff = 900; + + return text.length <= cutoff ? text : text.substring(0, cutoff) + ' (...)'; + } +} diff --git a/libs/publications/feature-this-is-angular/src/lib/truncate/truncate.scam.ts b/libs/publications/feature-this-is-angular/src/lib/truncate/truncate.scam.ts new file mode 100644 index 0000000..d9cc07b --- /dev/null +++ b/libs/publications/feature-this-is-angular/src/lib/truncate/truncate.scam.ts @@ -0,0 +1,9 @@ +import { NgModule } from '@angular/core'; + +import { TruncatePipe } from './truncate.pipe'; + +@NgModule({ + declarations: [TruncatePipe], + exports: [TruncatePipe], +}) +export class TruncateScam {} diff --git a/libs/publications/feature-this-is-angular/src/test-setup.ts b/libs/publications/feature-this-is-angular/src/test-setup.ts new file mode 100644 index 0000000..1100b3e --- /dev/null +++ b/libs/publications/feature-this-is-angular/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/libs/publications/feature-this-is-angular/tsconfig.json b/libs/publications/feature-this-is-angular/tsconfig.json new file mode 100644 index 0000000..5358376 --- /dev/null +++ b/libs/publications/feature-this-is-angular/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "angularCompilerOptions": { + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/libs/publications/feature-this-is-angular/tsconfig.lib.json b/libs/publications/feature-this-is-angular/tsconfig.lib.json new file mode 100644 index 0000000..4002dc8 --- /dev/null +++ b/libs/publications/feature-this-is-angular/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/libs/publications/feature-this-is-angular/tsconfig.spec.json b/libs/publications/feature-this-is-angular/tsconfig.spec.json new file mode 100644 index 0000000..fd405a6 --- /dev/null +++ b/libs/publications/feature-this-is-angular/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/nx.json b/nx.json index 240ad8f..e110d81 100644 --- a/nx.json +++ b/nx.json @@ -30,6 +30,9 @@ "this-is-learning-e2e": { "tags": [], "implicitDependencies": ["this-is-learning"] + }, + "publications-feature-this-is-angular": { + "tags": ["scope:publications", "type:feature"] } } } diff --git a/package.json b/package.json index e8b7e93..65f7328 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "version": "0.0.0", "license": "MIT", "scripts": { - "postinstall": "node ./decorate-angular-cli.js", + "postinstall": "node ./decorate-angular-cli.js && yarn patch-commonjs-dependencies && yarn ngcc", + "patch-commonjs-dependencies": "json -I -f node_modules/rss-parser/package.json -e \"this.main = 'dist/rss-parser.js';\"", "ngcc": "ngcc --first-only --properties es2015 module fesm2015 esm2015 browser main --create-ivy-entry-points", "ng": "nx", "nx": "nx", @@ -29,19 +30,24 @@ "workspace-generator": "nx workspace-generator", "dep-graph": "nx dep-graph", "help": "nx help", - "scully": "scully --noPrompt true", - "scully:serve": "scully serve --noPrompt true" + "scully": "scully --noPrompt", + "scully:scan": "yarn scully --scanRoutes", + "scully:serve": "yarn scully:scan && yarn scully serve" }, "dependencies": { + "@angular/animations": "^12.0.0", "@angular/common": "~12.0.0", "@angular/compiler": "~12.0.0", "@angular/core": "~12.0.0", + "@angular/forms": "^12.0.0", "@angular/platform-browser": "~12.0.0", "@angular/platform-browser-dynamic": "~12.0.0", "@angular/router": "~12.0.0", "@nrwl/angular": "~12.3.5", "@scullyio/ng-lib": "^1.1.1", "@scullyio/scully": "^1.1.1", + "metascraper": "^5.22.0", + "rss-parser": "^3.12.0", "rxjs": "~6.6.0", "tslib": "^2.1.0", "zone.js": "~0.11.4" @@ -74,6 +80,7 @@ "eslint-plugin-cypress": "^2.10.3", "jest": "~26.2.2", "jest-preset-angular": "~8.4.0", + "json": "^11.0.0", "prettier": "~2.2.1", "ts-jest": "~26.5.5", "ts-node": "~9.1.1", diff --git a/scully.this-is-learning.config.ts b/scully.this-is-learning.config.ts index 17ed8d7..18e74d7 100644 --- a/scully.this-is-learning.config.ts +++ b/scully.this-is-learning.config.ts @@ -4,5 +4,14 @@ export const config: ScullyConfig = { projectRoot: './apps/this-is-learning/src', projectName: 'this-is-learning', outDir: './dist/static/this-is-learning', - routes: {}, + routes: { + // '/this-is-angular': { + // rss: 'https://dev.to/feed/this-is-angular', + // type: fromRss, + // }, + // '/this-is-learning': { + // rss: 'https://dev.to/feed/this-is-learning', + // type: fromRss, + // }, + }, }; diff --git a/scully/plugins/from-rss.plugin.ts b/scully/plugins/from-rss.plugin.ts new file mode 100644 index 0000000..474ea70 --- /dev/null +++ b/scully/plugins/from-rss.plugin.ts @@ -0,0 +1,43 @@ +import { HandledRoute, registerPlugin } from '@scullyio/scully'; +import RssParser from 'rss-parser'; + +interface DevCommunityRssFeed { + readonly language: string; +} +interface DevCommunityRssItem { + readonly description: string; +} + +const rssParser = new RssParser({ + customFields: { + feed: ['language'], + item: ['description'], + }, +}); + +export const fromRss = 'tilFromRss'; + +interface FromRssOptions { + readonly rss: string; +} + +async function fromRssPlugin( + route: string, + options: FromRssOptions +): Promise { + const feed = await rssParser.parseURL(options.rss); + const items = feed.items; + + return [ + { + route, + data: { + items, + }, + }, + ]; +} + +const validator = async () => []; + +registerPlugin('router', fromRss, fromRssPlugin, validator); diff --git a/tsconfig.base.json b/tsconfig.base.json index 11253ac..c11d015 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -14,7 +14,11 @@ "skipLibCheck": true, "skipDefaultLibCheck": true, "baseUrl": ".", - "paths": {} + "paths": { + "@this-is-learning/publications/feature-this-is-angular": [ + "libs/publications/feature-this-is-angular/src/index.ts" + ] + } }, "exclude": ["node_modules", "tmp"] } diff --git a/yarn.lock b/yarn.lock index a908051..37c1eae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -144,6 +144,13 @@ dependencies: eslint-scope "^5.1.0" +"@angular/animations@^12.0.0": + version "12.0.3" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-12.0.3.tgz#97dd24455df2efdcf2d19afbd7e81877145e1308" + integrity sha512-uaOltimrGBJe1vIunaz9d8gtE8IY242XwakYGSFYf1zIseJRI7GBQ29L8+O2/QHbdTgdtsubYaqrPyMYLKYDvA== + dependencies: + tslib "^2.1.0" + "@angular/cli@~12.0.0": version "12.0.3" resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-12.0.3.tgz#cd1cb61fb51e406c42edc8dbae17ed6b0e6bcdba" @@ -211,6 +218,13 @@ dependencies: tslib "^2.1.0" +"@angular/forms@^12.0.0": + version "12.0.3" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-12.0.3.tgz#853992ccaaca0261eee1fba752de6ef20a7ee2d2" + integrity sha512-AdOX8epoXgges1hchv5hYRhO6iOZhjSfEmJkVCpInq08evVG7ON/FjN3n4bP4xRHrpNB63rIzoSraD3AYw8A/A== + dependencies: + tslib "^2.1.0" + "@angular/language-service@~12.0.0": version "12.0.3" resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-12.0.3.tgz#5240db3612b32d0d5434a6e27c5dc2678e1f2300" @@ -1515,6 +1529,33 @@ merge-source-map "^1.1.0" schema-utils "^2.7.0" +"@metascraper/helpers@^5.22.0": + version "5.22.0" + resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-5.22.0.tgz#71d36b92c9ab488446221008bdf660effafdda93" + integrity sha512-lByOIjtMnefbMEF+lQ/QNhmxzQcHjEfbYe5bzwLViNKEGMOsa+nPopuwt+sUc5R3X9+SD20zIa8MZSU6cLlt+g== + dependencies: + audio-extensions "0.0.0" + chrono-node "2.2.7" + condense-whitespace "~2.0.0" + entities "~2.2.0" + file-extension "~4.0.5" + has-values "~2.0.1" + image-extensions "~1.1.0" + is-relative-url "~3.0.0" + is-uri "~1.2.0" + iso-639-3 "~2.2.0" + isostring "0.0.1" + jsdom "~16.6.0" + lodash "~4.17.21" + memoize-one "~5.2.1" + microsoft-capitalize "~1.0.5" + mime-types "~2.1.30" + normalize-url "~6.0.1" + smartquotes "~2.3.2" + truncate "~2.1.0" + url-regex-safe "~2.0.2" + video-extensions "~1.1.0" + "@ngtools/webpack@12.0.3": version "12.0.3" resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-12.0.3.tgz#47fd9abffe96d554edf063eb252d4f2c06d834e1" @@ -2768,6 +2809,11 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +audio-extensions@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/audio-extensions/-/audio-extensions-0.0.0.tgz#d0eefe077fb9eb625898eed9985890548cf1f8d2" + integrity sha1-0O7+B3+562JYmO7ZmFiQVIzx+NI= + autoprefixer@^9.6.1: version "9.8.6" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" @@ -3299,6 +3345,30 @@ check-more-types@^2.24.0: resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= +cheerio-select@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.4.0.tgz#3a16f21e37a2ef0f211d6d1aa4eff054bb22cdc9" + integrity sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew== + dependencies: + css-select "^4.1.2" + css-what "^5.0.0" + domelementtype "^2.2.0" + domhandler "^4.2.0" + domutils "^2.6.0" + +cheerio@~1.0.0-rc.9: + version "1.0.0-rc.9" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.9.tgz#a3ae6b7ce7af80675302ff836f628e7cb786a67f" + integrity sha512-QF6XVdrLONO6DXRF5iaolY+odmhj2CLj+xzNod7INPWMi/x9X4SOylH0S/vaPpX+AUU6t04s34SQNh7DbkuCng== + dependencies: + 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" + "chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.3.0, chokidar@^3.4.0: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" @@ -3348,6 +3418,13 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== +chrono-node@2.2.7: + version "2.2.7" + resolved "https://registry.yarnpkg.com/chrono-node/-/chrono-node-2.2.7.tgz#4a496157febda78146833aefd3e3a97727ffa5ad" + integrity sha512-QQxlQUwebgNJDtUJpRQlhKoJJgSfvNTe6Zk1LgyVHVnbCj6xKygmiviJonS/n5A4xd9qjEl1u+ke2vzD77ty/g== + dependencies: + dayjs "^1.10.0" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -3378,7 +3455,7 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-stack@^2.0.0: +clean-stack@^2.0.0, clean-stack@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== @@ -3606,6 +3683,11 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +condense-whitespace@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/condense-whitespace/-/condense-whitespace-2.0.0.tgz#94e9644938f66aa7be4b8849f8f0b3cec97d6b3a" + integrity sha512-Ath9o58/0rxZXbyoy3zZgrVMoIemi30sukG/btuMKCLyqfQt3dNOWc9N3EHEMa2Q3i0tXQPDJluYFLwy7pJuQw== + confusing-browser-globals@^1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" @@ -3855,6 +3937,17 @@ css-select@^3.1.2: domutils "^2.4.3" nth-check "^2.0.0" +css-select@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" + integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== + dependencies: + boolbase "^1.0.0" + css-what "^5.0.0" + domhandler "^4.2.0" + domutils "^2.6.0" + nth-check "^2.0.0" + css-tree@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" @@ -3868,6 +3961,11 @@ css-what@^4.0.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233" integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== +css-what@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" + integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== + css@^2.0.0: version "2.2.4" resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" @@ -4041,7 +4139,7 @@ date-fns@^1.27.2: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== -dayjs@^1.10.4: +dayjs@^1.10.0, dayjs@^1.10.4: version "1.10.5" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.5.tgz#5600df4548fc2453b3f163ebb2abbe965ccfb986" integrity sha512-BUFis41ikLz+65iH6LHQCDm4YPMj5r1YFLdupPIyM4SGcXMmtiLQ7U37i+hGS8urIuqe7I/ou3IS1jVc4nbN4g== @@ -4276,7 +4374,7 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-serializer@^1.0.1: +dom-serializer@^1.0.1, dom-serializer@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== @@ -4313,6 +4411,15 @@ domutils@^2.4.3: domelementtype "^2.2.0" domhandler "^4.2.0" +domutils@^2.5.2, domutils@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" + integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + dotenv@8.2.0, dotenv@~8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" @@ -4419,7 +4526,7 @@ enquirer@^2.3.5, enquirer@~2.3.6: dependencies: ansi-colors "^4.1.1" -entities@^2.0.0: +entities@^2.0.0, entities@^2.0.3, entities@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== @@ -4937,6 +5044,11 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-extension@~4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/file-extension/-/file-extension-4.0.5.tgz#ae6cef34c28e7313a92baa4aa955755cacdf0ce3" + integrity sha512-l0rOL3aKkoi6ea7MNZe6OHgqYYpn48Qfflr8Pe9G9JPPTx5A+sfboK91ZufzIs59/lPqh351l0eb6iKU9J5oGg== + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" @@ -5327,7 +5439,7 @@ good-listener@^1.2.2: dependencies: delegate "^3.1.2" -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.3, graceful-fs@^4.2.4: +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.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== @@ -5425,6 +5537,13 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +has-values@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-2.0.1.tgz#3876200ff86d8a8546a9264a952c17d5fc17579d" + integrity sha512-+QdH3jOmq9P8GfdjFg0eJudqx1FqU62NQJ4P16rOEHeRdl7ckgwn6uqQjzYE0ZoHVV/e5E2esuJ5Gl5+HUW19w== + dependencies: + kind-of "^6.0.2" + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -5486,6 +5605,16 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + http-cache-semantics@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" @@ -5650,6 +5779,11 @@ ignore@^5.0.4, ignore@^5.1.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +image-extensions@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/image-extensions/-/image-extensions-1.1.0.tgz#b8e6bf6039df0056e333502a00b6637a3105d894" + integrity sha1-uOa/YDnfAFbjM1AqALZjejEF2JQ= + image-size@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" @@ -5746,6 +5880,11 @@ inquirer@8.0.0: strip-ansi "^6.0.0" through "^2.3.6" +install-artifact-from-github@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/install-artifact-from-github/-/install-artifact-from-github-1.2.0.tgz#adcbd123c16a4337ec44ea76d0ebf253cc16b074" + integrity sha512-3OxCPcY55XlVM3kkfIpeCgmoSKnMsz2A3Dbhsq0RXpIknKQmrX1YiznCeW9cD2ItFmDxziA3w6Eg8d80AoL3oA== + internal-ip@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" @@ -5759,6 +5898,11 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +ip-regex@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== + ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -5769,7 +5913,7 @@ ipaddr.js@1.9.1, ipaddr.js@^1.9.0: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-absolute-url@^3.0.3: +is-absolute-url@^3.0.0, is-absolute-url@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== @@ -6070,6 +6214,13 @@ is-regex@^1.0.4, is-regex@^1.1.3: call-bind "^1.0.2" has-symbols "^1.0.2" +is-relative-url@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-relative-url/-/is-relative-url-3.0.0.tgz#f623c8e26baa5bd3742b3b7ec074f50f3b45b3f3" + integrity sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA== + dependencies: + is-absolute-url "^3.0.0" + is-resolvable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" @@ -6107,6 +6258,14 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-uri@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-uri/-/is-uri-1.2.0.tgz#b92ff234af68c0ed97d2eed46492d01793b7d420" + integrity sha1-uS/yNK9owO2X0u7UZJLQF5O31CA= + dependencies: + parse-uri "~1.0.0" + punycode2 "~1.0.0" + is-what@^3.12.0: version "3.14.1" resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" @@ -6139,6 +6298,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +iso-639-3@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/iso-639-3/-/iso-639-3-2.2.0.tgz#eb01d7734d61396efec934979e8b0806550837f1" + integrity sha512-v9w/U4XDSfXCrXxf4E6ertGC/lTRX8MLLv7XC1j6N5oL3ympe38jp77zgeyMsn3MbufuAAoGeVzDJbOXnPTMhQ== + isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -6151,6 +6315,11 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +isostring@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isostring/-/isostring-0.0.1.tgz#ddb608efbfc89cda86db9cb16be090a788134c7f" + integrity sha1-3bYI77/InNqG25yxa+CQp4gTTH8= + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -6627,7 +6796,7 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@^16.4.0: +jsdom@^16.4.0, jsdom@~16.6.0: version "16.6.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.6.0.tgz#f79b3786682065492a3da6a60a4695da983805ac" integrity sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg== @@ -6724,6 +6893,11 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/json/-/json-11.0.0.tgz#2e84493134e2f42c131165aa22a124df38b3a3ee" + integrity sha512-N/ITv3Yw9Za8cGxuQqSqrq6RHnlaHWZkAFavcfpH/R52522c26EbihMxnY7A1chxfXJ4d+cEFIsyTgfi9GihrA== + jsonc-parser@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" @@ -6996,7 +7170,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@4.x, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.5.0, lodash@^4.7.0: +lodash@4.x, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.5.0, lodash@^4.7.0, lodash@~4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7069,7 +7243,7 @@ make-error@1.x, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^8.0.9: +make-fetch-happen@^8.0.14, make-fetch-happen@^8.0.9: version "8.0.14" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ== @@ -7146,6 +7320,11 @@ memfs@^3.2.0: dependencies: fs-monkey "1.0.3" +memoize-one@~5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -7189,6 +7368,16 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +metascraper@^5.22.0: + version "5.22.0" + resolved "https://registry.yarnpkg.com/metascraper/-/metascraper-5.22.0.tgz#74469d87865999ea2f1584812be823a1a09a2b0e" + integrity sha512-JnEkhX68cM2txsY1ZMtpld5C7PCm/u5N/w8udE9iZ29IeyCR+kvvIwUglEViq0hcXwpOk8tGm4GQyzwgU4uFnw== + dependencies: + "@metascraper/helpers" "^5.22.0" + cheerio "~1.0.0-rc.9" + lodash "~4.17.21" + whoops "~4.1.0" + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -7226,12 +7415,17 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.2.3" +microsoft-capitalize@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/microsoft-capitalize/-/microsoft-capitalize-1.0.5.tgz#bcaf915039f14224c8cfd74c31cea42fecacbb31" + integrity sha512-iqDMU9J643BHg8Zp7EMZNLTp6Pgs2f1S2SMnCW2VlUqMs17xCZ5vwVjalBJEGVcUfG+/1ePqeEGcMW3VfzHK5A== + mime-db@1.48.0, "mime-db@>= 1.43.0 < 2": version "1.48.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.28, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.28, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.30: version "2.1.31" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== @@ -7263,6 +7457,11 @@ mimic-fn@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== +mimic-fn@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.0.0.tgz#76044cfa8818bbf6999c5c9acadf2d3649b14b4b" + integrity sha512-PiVO95TKvhiwgSwg1IdLYlCTdul38yZxZMIcnDSFIBUm4BNZha2qpQ4GpJ++15bHoKDtrW2D69lMfFwdFYtNZQ== + mini-css-extract-plugin@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.5.1.tgz#c0ac557c48a7de47de3df0768fe037c9cf961f69" @@ -7414,7 +7613,7 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.12.1: +nan@^2.12.1, nan@^2.14.2: version "2.14.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== @@ -7496,6 +7695,22 @@ node-gyp@^7.1.0: tar "^6.0.2" which "^2.0.2" +node-gyp@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.1.0.tgz#81f43283e922d285c886fb0e0f520a7fd431d8c2" + integrity sha512-o2elh1qt7YUp3lkMwY3/l4KF3j/A3fI/Qt4NH+CQQgPJdqGE9y7qnP84cjIWN27Q0jJkrSAhCVDg+wBVNBYdBg== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^8.0.14" + nopt "^5.0.0" + npmlog "^4.1.2" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.0" + which "^2.0.2" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -7567,6 +7782,11 @@ normalize-url@^4.5.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +normalize-url@~6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.0.1.tgz#a4f27f58cf8c7b287b440b8a8201f42d0b00d256" + integrity sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ== + npm-bundled@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" @@ -8022,6 +8242,11 @@ parse-node-version@^1.0.1: resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== +parse-uri@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/parse-uri/-/parse-uri-1.0.3.tgz#f3c24a74907a4e357c1741e96ca9faadecfd6db5" + integrity sha512-upMnGxNcm+45So85HoguwZTVZI9u11i36DdxJfGF2HYWS2eh3TIx7+/tTi7qrEq15qzGkVhsKjesau+kCk48pA== + parse5-html-rewriting-stream@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz#de1820559317ab4e451ea72dba05fddfd914480b" @@ -8866,6 +9091,11 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +punycode2@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/punycode2/-/punycode2-1.0.0.tgz#e2b4b9a9a8ff157d0b84438e203181ee7892dfd8" + integrity sha1-4rS5qaj/FX0LhEOOIDGB7niS39g= + punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -8954,6 +9184,15 @@ raw-loader@4.0.2: loader-utils "^2.0.0" schema-utils "^3.0.0" +re2@^1.15.9: + version "1.16.0" + resolved "https://registry.yarnpkg.com/re2/-/re2-1.16.0.tgz#f311eb4865b1296123800ea8e013cec8dab25590" + integrity sha512-eizTZL2ZO0ZseLqfD4t3Qd0M3b3Nr0MBWpX81EbPMIud/1d/CSfUIx2GQK8fWiAeHoSekO5EOeFib2udTZLwYw== + dependencies: + install-artifact-from-github "^1.2.0" + nan "^2.14.2" + node-gyp "^8.0.0" + react-is@^17.0.1: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" @@ -9303,6 +9542,14 @@ rimraf@^2.6.3: dependencies: glob "^7.1.3" +rss-parser@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/rss-parser/-/rss-parser-3.12.0.tgz#b8888699ea46304a74363fbd8144671b2997984c" + integrity sha512-aqD3E8iavcCdkhVxNDIdg1nkBI17jgqF+9OqPS1orwNaOgySdpvq6B+DoONLhzjzwV8mWg37sb60e4bmLK117A== + dependencies: + entities "^2.0.3" + xml2js "^0.4.19" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -9391,7 +9638,7 @@ sass@1.32.12: dependencies: chokidar ">=3.0.0 <4.0.0" -sax@^1.2.4, sax@~1.2.4: +sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -9625,6 +9872,11 @@ smart-buffer@^4.1.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== +smartquotes@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/smartquotes/-/smartquotes-2.3.2.tgz#fb1630c49ba04e57446e1a97dc10d590072af4a6" + integrity sha512-0R6YJ5hLpDH4mZR7N5eZ12oCMLspvGOHL9A9SEm2e3b/CQmQidekW4SWSKEmor/3x6m3NCBBEqLzikcZC9VJNQ== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -10267,6 +10519,11 @@ tiny-emitter@^2.0.0: resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== +tlds@^1.217.0: + version "1.221.1" + resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.221.1.tgz#6cf6bff5eaf30c5618c5801c3f425a6dc61ca0ad" + integrity sha512-N1Afn/SLeOQRpxMwHBuNFJ3GvGrdtY4XPXKPFcx8he0U9Jg9ZkvTKE1k3jQDtCmlFn44UxjVtouF6PT4rEGd3Q== + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -10357,6 +10614,11 @@ tree-kill@1.2.2: resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== +truncate@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/truncate/-/truncate-2.1.0.tgz#391183563a25cffbd4d613a1d00ae5844c9e55d3" + integrity sha512-em3E3SUDONOjTBcZ36DTm3RvDded3IRU9rX32oHwwXNt3rJD5MVaFlJTQvs8tJoHRoeYP36OuQ1eL/Q7bNEWIQ== + ts-jest@26.x, ts-jest@~26.5.5: version "26.5.6" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35" @@ -10415,7 +10677,7 @@ tsconfig-paths@^3.4.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@2.2.0, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0: +tslib@2.2.0, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== @@ -10631,6 +10893,15 @@ url-parse@^1.4.3, url-parse@^1.5.1: querystringify "^2.1.1" requires-port "^1.0.0" +url-regex-safe@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/url-regex-safe/-/url-regex-safe-2.0.2.tgz#41d02bb7c927d57008389f636de0bd850a40fc7c" + integrity sha512-n5qtPAWvMLTmgYMCX1195CKV9oJE6SkSa5bVsMrHSFA/hnqila9J1KVf6gF2M66lCWwPDhJyQlX1tEXqtzBOPQ== + dependencies: + ip-regex "^4.3.0" + re2 "^1.15.9" + tlds "^1.217.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -10712,6 +10983,11 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +video-extensions@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/video-extensions/-/video-extensions-1.1.0.tgz#eaa86b45f29a853c2b873e9d8e23b513712997d6" + integrity sha1-6qhrRfKahTwrhz6djiO1E3Epl9Y= + 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" @@ -10965,6 +11241,14 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" +whoops@~4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/whoops/-/whoops-4.1.0.tgz#f42e51514c7af19a9491a44cabf2712292c6a8e1" + integrity sha512-42soctqvFs9FaU1r4ZadCy2F6A9dUc4SN3ud+tbDEdmyZDTeYBgKKqtIdo6NiQlnZnJegWRCyKLk2edYH9DsHA== + dependencies: + clean-stack "~2.2.0" + mimic-fn "~3.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" @@ -11056,6 +11340,19 @@ xml-name-validator@^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== +xml2js@^0.4.19: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"