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?.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: `
+
+
+
+ `,
+})
+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"