diff --git a/examples/main-angular/angular.json b/examples/main-angular/angular.json new file mode 100644 index 00000000..c176f5ea --- /dev/null +++ b/examples/main-angular/angular.json @@ -0,0 +1,124 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "main-angular": { + "root": "", + "sourceRoot": "src", + "projectType": "application", + "prefix": "app", + "schematics": {}, + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/main-angular", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "src/tsconfig.app.json", + "allowedCommonJsDependencies": [ + "@babel/runtime/regenerator" + ], + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.css" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "2mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "browserTarget": "main-angular:build:production" + }, + "development": { + "browserTarget": "main-angular:build:development" + } + }, + "options": { + "port": 4400, + "open": true + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "main-angular:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "src/tsconfig.spec.json", + "karmaConfig": "src/karma.conf.js", + "styles": [ + "styles.css" + ], + "scripts": [], + "assets": [ + "src/favicon.ico", + "src/assets" + ] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "src/tsconfig.app.json", + "src/tsconfig.spec.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + } + } + } + }, + "defaultProject": "main-angular", + "cli": { + "analytics": false + } +} \ No newline at end of file diff --git a/examples/main-angular/package.json b/examples/main-angular/package.json new file mode 100644 index 00000000..21a267ab --- /dev/null +++ b/examples/main-angular/package.json @@ -0,0 +1,44 @@ +{ + "name": "main-angular", + "version": "1.0.0-rc.20", + "private": true, + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "dependencies": { + "@angular/animations": "~12.2.0", + "@angular/common": "~12.2.0", + "@angular/compiler": "~12.2.0", + "@angular/core": "~12.2.0", + "@angular/forms": "~12.2.0", + "@angular/platform-browser": "~12.2.0", + "@angular/platform-browser-dynamic": "~12.2.0", + "@angular/router": "~12.2.0", + "@ant-design/icons-angular": "~12.0.3", + "ng-zorro-antd": "~12.1.0", + "rxjs": "^6.6.3", + "tslib": "^2.3.0", + "wujie": "workspace:^1.0.0-rc.20", + "wujie-angular": "workspace:1.0.0-rc.20", + "zone.js": "~0.11.4" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~12.2.9", + "@angular/cli": "~12.2.9", + "@angular/compiler-cli": "~12.2.0", + "@types/jasmine": "~3.8.0", + "@types/node": "^12.11.1", + "jasmine-core": "~3.8.0", + "karma": "~6.3.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.0.3", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "~1.7.0", + "typescript": "~4.3.5" + } +} \ No newline at end of file diff --git a/examples/main-angular/src/app/app-routing.module.ts b/examples/main-angular/src/app/app-routing.module.ts new file mode 100644 index 00000000..c0374569 --- /dev/null +++ b/examples/main-angular/src/app/app-routing.module.ts @@ -0,0 +1,33 @@ +import { NgModule } from "@angular/core"; +import { RouterModule, Routes } from "@angular/router"; +import { Angular12Component } from "./pages/angular12.component"; +import { HomeComponent } from "./pages/home.component"; +import { React16Component } from "./pages/react16.component"; +import { React17Component } from "./pages/react17.component"; +import { ViteComponent } from "./pages/vite.component"; +import { Vue2Component } from "./pages/vue2.component"; +import { Vue3Component } from "./pages/vue3.component"; +import { MultipleComponent } from "./pages/multiple.component"; + +const routes: Routes = [ + { path: "react16", component: React16Component, data: { name: "react16" } }, + { path: "react16-sub/:path", component: React16Component, data: { name: "react16-sub" } }, + { path: "react17", component: React17Component, data: { name: "react17" } }, + { path: "react17-sub/:path", component: React17Component, data: { name: "react17-sub" } }, + { path: "vue2", component: Vue2Component, data: { name: "vue2" } }, + { path: "vue2-sub/:path", component: Vue2Component, data: { name: "vue2-sub" } }, + { path: "vue3", component: Vue3Component, data: { name: "vue3" } }, + { path: "vue3-sub/:path", component: Vue3Component, data: { name: "vue3-sub" } }, + { path: "vite", component: ViteComponent, data: { name: "vite" } }, + { path: "vite-sub/:path", component: ViteComponent, data: { name: "vite-sub" } }, + { path: "angular12", component: Angular12Component, data: { name: "angular" } }, + { path: "all", component: MultipleComponent, data: { name: "all" } }, + { path: "home", component: HomeComponent, data: { name: "home" } }, + { path: "**", redirectTo: "/home" }, +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule], +}) +export class AppRoutingModule {} diff --git a/examples/main-angular/src/app/app.component.css b/examples/main-angular/src/app/app.component.css new file mode 100644 index 00000000..1c816a68 --- /dev/null +++ b/examples/main-angular/src/app/app.component.css @@ -0,0 +1,118 @@ +#app { + font-family: Avenir, Helvetica, Arial, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #2c3e50; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + width: 100vw; +} + +#nav { + background-color: white; + flex-shrink: 0; + font-size: 20px; + display: flex; + position: relative; + z-index: 1; + flex-direction: column; + padding: 30px 0; + width: 210px; + height: 100vh; + box-sizing: border-box; + box-shadow: 3px 0px 9px 2px #e6e6e6; + transition: transform 0.1s linear; + transform: translate(0, 0); + overflow: auto; +} + +#nav .menu-icon { + display: none; + border: none; + background: var(--theme) !important; +} + +.main-icon { + padding: 0 10px; + transition: transform 0.2s ease-in; +} + +.main-icon.active { + transform: rotate(180deg); +} + +.sub-menu { + font-size: 16px; + padding: 0 10px; +} + +@media screen and (max-width: 768px) { + #nav { + position: absolute; + box-shadow: none; + transform: translate(-100%, 0); + } + + #nav.active { + transform: translate(0, 0); + box-shadow: 3px 0px 9px 2px #e6e6e6; + } + #nav .menu-icon { + position: absolute; + left: 100%; + display: block; + } +} + +.wujie_iframe { + width: 100%; + height: 100%; +} + +iframe { + border: none; +} + +h3 { + padding-bottom: 0.3rem; + border-bottom: 1px solid #eaecef; +} + +.content { + flex: 1; + height: 100vh; + overflow: hidden scroll; + width: 1px; +} + +#nav a { + display: flex; + align-items: center; + padding: 10px 30px; + font-weight: bold; + color: #2c3e50; + text-decoration: none; + transition: all 0.2s linear; +} + +#nav a:hover { + color: var(--theme); +} + +.alive { + display: inline-block; + white-space: nowrap; + background-color: var(--theme); + border-radius: 8px; + margin-left: 4px; + font-size: 10px; + vertical-align: top; + padding: 1px 4px; + color: white; +} + +#nav a.router-link-active { + color: var(--theme); + background: rgba(0, 0, 0, 0.05); +} \ No newline at end of file diff --git a/examples/main-angular/src/app/app.component.html b/examples/main-angular/src/app/app.component.html new file mode 100644 index 00000000..eb440348 --- /dev/null +++ b/examples/main-angular/src/app/app.component.html @@ -0,0 +1,111 @@ +
+ +
+ +
+
diff --git a/examples/main-angular/src/app/app.component.ts b/examples/main-angular/src/app/app.component.ts new file mode 100644 index 00000000..3ef91408 --- /dev/null +++ b/examples/main-angular/src/app/app.component.ts @@ -0,0 +1,27 @@ +import { Component, VERSION } from "@angular/core"; + +@Component({ + selector: "my-app", + templateUrl: "./app.component.html", + styleUrls: ["./app.component.css"], +}) +export class AppComponent { + name = "Angular " + VERSION.major; + + active = false; + react16Flag = false; + react17Flag = false; + vue2Flag = false; + vue3Flag = false; + viteFlag = false; + + constructor() {} + + close() { + if (this.active) this.active = false; + } + + handleFlag(name) { + this[name + "Flag"] = !this[name + "Flag"]; + } +} diff --git a/examples/main-angular/src/app/app.module.ts b/examples/main-angular/src/app/app.module.ts new file mode 100644 index 00000000..ba182519 --- /dev/null +++ b/examples/main-angular/src/app/app.module.ts @@ -0,0 +1,52 @@ +import { NgModule } from "@angular/core"; +import { BrowserModule } from "@angular/platform-browser"; +import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; +import { FormsModule } from "@angular/forms"; +import { WujieModule } from "wujie-angular"; + +import { NzIconModule } from "ng-zorro-antd/icon"; +import { NzSwitchModule } from "ng-zorro-antd/switch"; +import { NzToolTipModule } from "ng-zorro-antd/tooltip"; +import { NzButtonModule } from "ng-zorro-antd/button"; + +import { AppRoutingModule } from "./app-routing.module"; +import { AppComponent } from "./app.component"; +import { Angular12Component } from "./pages/angular12.component"; +import { HomeComponent } from "./pages/home.component"; +import { React16Component } from "./pages/react16.component"; +import { React17Component } from "./pages/react17.component"; +import { ViteComponent } from "./pages/vite.component"; +import { Vue2Component } from "./pages/vue2.component"; +import { Vue3Component } from "./pages/vue3.component"; +import { MultipleComponent } from "./pages/multiple.component"; + +import { UnorderedListOutline, CaretUpFill } from "@ant-design/icons-angular/icons"; +import { IconDefinition } from "@ant-design/icons-angular"; +const icons: IconDefinition[] = [UnorderedListOutline, CaretUpFill]; + +@NgModule({ + imports: [ + BrowserModule, + BrowserAnimationsModule, + FormsModule, + WujieModule, + NzIconModule.forRoot(icons), + NzSwitchModule, + NzToolTipModule, + NzButtonModule, + AppRoutingModule, + ], + declarations: [ + AppComponent, + Angular12Component, + HomeComponent, + React16Component, + React17Component, + ViteComponent, + Vue2Component, + Vue3Component, + MultipleComponent, + ], + bootstrap: [AppComponent], +}) +export class AppModule {} diff --git a/examples/main-angular/src/app/pages/angular12.component.ts b/examples/main-angular/src/app/pages/angular12.component.ts new file mode 100644 index 00000000..4e664596 --- /dev/null +++ b/examples/main-angular/src/app/pages/angular12.component.ts @@ -0,0 +1,27 @@ +import { Component, OnInit } from "@angular/core"; +import hostMap from "../../hostMap"; + +@Component({ + selector: "angular12", + template: ``, +}) +export class Angular12Component implements OnInit { + angular12Url = hostMap("//localhost:7400/"); + + constructor() {} + + ngOnInit(): void { + console.log("[angular12] init"); + } + + handleChange(e) { + console.log("[angular12] change >", e); + } +} diff --git a/examples/main-angular/src/app/pages/home.component.ts b/examples/main-angular/src/app/pages/home.component.ts new file mode 100644 index 00000000..94bdfcad --- /dev/null +++ b/examples/main-angular/src/app/pages/home.component.ts @@ -0,0 +1,258 @@ +import { Component } from "@angular/core"; + +@Component({ + selector: "home", + template: ` +
+
+ + +
+

+ + 无界 +

+

—极致的微前端框架

+ +
+
+
极速 🚀
+
+
    +
  • 极致预加载提速
  • +
  • 应用秒开无白屏
  • +
  • 应用丝滑般切换
  • +
+
+
+
+
强大 💪
+
+
    +
  • 多应用同时激活在线
  • +
  • 应用级别保活
  • +
  • 去中心化的通信
  • +
+
+
+
+
简单 🤞
+
+
    +
  • 更小的体积
  • +
  • 精简的API
  • +
  • 开箱即用
  • +
+
+
+
+
+ `, + styles: [ + ` + .button-gap { + margin-bottom: 10px; + } + .button-list { + flex: 1; + display: flex; + flex-direction: row-reverse; + flex-wrap: wrap; + } + .tool { + margin: 30px 20px 30px 0; + display: flex; + flex-direction: row; + align-items: top; + } + .header { + font-size: 70px; + margin-top: 100px; + text-align: center; + font-weight: 300; + display: flex; + justify-content: center; + align-items: center; + margin-right: 200px; + } + .subtitle { + font-size: 50px; + margin-left: 250px; + text-align: center; + font-weight: 300; + font-style: italic; + } + + .bland { + display: inline-block; + font-weight: 400; + } + + .title { + font-size: 30px; + color: var(--theme); + text-align: center; + } + + .switch { + margin-left: 15px; + height: 40px; + } + + .switch ::ng-deep.ant-switch::after { + top: 6px; + width: 25px; + height: 25px; + } + .switch ::ng-deep.ant-switch { + height: 43.33px; + } + ::ng-deep.ant-switch-inner { + font-size: 20px; + padding: 5px 16px; + } + ::ng-deep.ant-switch-handle { + top: 8px; + width: 26px; + height: 26px; + } + ::ng-deep.ant-switch-handle::before { + border-radius: 26px; + } + ::ng-deep.ant-switch-checked .ant-switch-handle { + left: calc(100% - 26px - 2px); + } + + .docs { + font-size: 20px; + border: 1px solid rgb(217, 217, 217); + box-shadow: 0 2px #00000004; + color: rgb(44, 62, 80); + padding: 5px 20px; + border-radius: 20px; + margin-left: 15px; + cursor: pointer; + text-decoration: none; + transition: all 0.1s linear; + } + .docs:hover { + color: var(--theme); + border: 1px solid var(--theme); + } + + .detail-content { + width: 900px; + margin: 150px auto 0 auto; + display: flex; + flex-direction: row; + justify-content: space-between; + } + .detail-content .item ul { + margin: 15px 0; + } + + .home { + font-size: 20px; + } + .home .ant-switch-checked { + background-color: var(--theme); + } + span.switch { + margin-left: 0; + padding: 0; + } + + @media screen and (max-width: 768px) { + .subtitle { + font-size: 35px; + margin-left: 0; + font-weight: 150; + } + .header { + margin-right: 0; + } + .detail-content { + flex-direction: column; + justify-content: center; + align-items: center; + width: auto; + } + .item { + width: 220px; + display: flex; + flex-direction: column; + align-items: flex-start; + } + } + .switch .ant-switch-inner { + font-size: 20px; + } + `, + ], +}) +export class HomeComponent { + preload = window.localStorage.getItem("preload") !== "false"; + degrade = window.localStorage.getItem("degrade") === "true" || !window.Proxy || !window.CustomElementRegistry; + disable = !window.Proxy || !window.CustomElementRegistry; + + handlePreloadChange(val) { + window.localStorage.setItem("preload", val); + setTimeout(() => window.location.reload(), 1000); + } + + handleDegradeChange(val) { + window.localStorage.setItem("degrade", val); + setTimeout(() => window.location.reload(), 1000); + } + + goToLink(url) { + window.open(url, "_blank"); + } +} diff --git a/examples/main-angular/src/app/pages/multiple.component.ts b/examples/main-angular/src/app/pages/multiple.component.ts new file mode 100644 index 00000000..2fc948d2 --- /dev/null +++ b/examples/main-angular/src/app/pages/multiple.component.ts @@ -0,0 +1,103 @@ +import { Component, NgZone, OnInit } from "@angular/core"; +import { ActivatedRoute, Router } from "@angular/router"; +import hostMap from "../../hostMap"; + +@Component({ + selector: "vue2", + template: ` +
+ + + + + + + + + + + +
+ `, + styles: [ + ` + .item { + display: inline-block; + border: 1px dashed #ccc; + border-radius: 8px; + width: 45%; + height: 45%; + margin: 20px; + overflow: scroll; + } + `, + ], +}) +export class MultipleComponent implements OnInit { + react16Url = hostMap("//localhost:7600/"); + react17Url = hostMap("//localhost:7100/"); + vue2Url = hostMap("//localhost:7200/"); + vue3Url = hostMap("//localhost:7300/"); + viteUrl = hostMap("//localhost:7500/"); + angular12Url = hostMap("//localhost:7400/"); + + props = { + jump: ((name) => { + const url = this.router.config.find((x) => x.data.name === name)?.path; + url && this.zone.run(() => this.router.navigateByUrl(url)); + }).bind(this), + }; + + constructor(private router: Router, private zone: NgZone) {} + + ngOnInit(): void { + console.log("[all] init"); + } + + handleChange(e) { + console.log("[all] change >", e); + } +} diff --git a/examples/main-angular/src/app/pages/react16.component.ts b/examples/main-angular/src/app/pages/react16.component.ts new file mode 100644 index 00000000..ab836e6c --- /dev/null +++ b/examples/main-angular/src/app/pages/react16.component.ts @@ -0,0 +1,32 @@ +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute } from "@angular/router"; +import { filter } from "rxjs/operators"; +import hostMap from "../../hostMap"; + +@Component({ + selector: "react16", + template: ``, +}) +export class React16Component implements OnInit { + react16Url = hostMap("//localhost:7600/"); + + constructor(private activatedRoute: ActivatedRoute) {} + + ngOnInit(): void { + console.log("[react16] init"); + this.activatedRoute.params.pipe(filter(({ path }) => path)).subscribe(({ path }) => { + this.react16Url = hostMap("//localhost:7600/") + path; + }); + } + + handleChange(e) { + console.log("[react16] change >", e); + } +} diff --git a/examples/main-angular/src/app/pages/react17.component.ts b/examples/main-angular/src/app/pages/react17.component.ts new file mode 100644 index 00000000..f73de98a --- /dev/null +++ b/examples/main-angular/src/app/pages/react17.component.ts @@ -0,0 +1,41 @@ +import { Component, NgZone, OnInit } from "@angular/core"; +import { ActivatedRoute, Router } from "@angular/router"; +import { filter } from "rxjs/operators"; +import { WuJieAngular } from "wujie-angular"; +import hostMap from "../../hostMap"; + +@Component({ + selector: "react17", + template: ``, +}) +export class React17Component implements OnInit { + react17Url = hostMap("//localhost:7100/"); + props = { + jump: ((name) => { + const url = this.router.config.find((x) => x.data.name === name)?.path; + url && this.zone.run(() => this.router.navigateByUrl(url)); + }).bind(this), + }; + + constructor(private activatedRoute: ActivatedRoute, private router: Router, private zone: NgZone) {} + + ngOnInit(): void { + console.log("[react17] init"); + this.activatedRoute.params.pipe(filter(({ path }) => path)).subscribe(({ path }) => { + WuJieAngular.bus.$emit("react17-router-change", `/${path}`); + }); + } + + handleChange(e) { + console.log("[react17] change >", e); + } +} diff --git a/examples/main-angular/src/app/pages/vite.component.ts b/examples/main-angular/src/app/pages/vite.component.ts new file mode 100644 index 00000000..254365e8 --- /dev/null +++ b/examples/main-angular/src/app/pages/vite.component.ts @@ -0,0 +1,39 @@ +import { Component, NgZone, OnInit } from "@angular/core"; +import { ActivatedRoute, Router } from "@angular/router"; +import { filter } from "rxjs/operators"; +import hostMap from "../../hostMap"; + +@Component({ + selector: "vite", + template: ``, +}) +export class ViteComponent implements OnInit { + viteUrl = hostMap("//localhost:7500/"); + props = { + jump: ((name) => { + const url = this.router.config.find((x) => x.data.name === name)?.path; + url && this.zone.run(() => this.router.navigateByUrl(url)); + }).bind(this), + }; + + constructor(private activatedRoute: ActivatedRoute, private router: Router, private zone: NgZone) {} + + ngOnInit(): void { + console.log("[vite] init"); + this.activatedRoute.params.pipe(filter(({ path }) => path)).subscribe(({ path }) => { + this.viteUrl = hostMap("//localhost:7500/") + `${path}`; + }); + } + + handleChange(e) { + console.log("[vite] change >", e); + } +} diff --git a/examples/main-angular/src/app/pages/vue2.component.ts b/examples/main-angular/src/app/pages/vue2.component.ts new file mode 100644 index 00000000..b6e0936e --- /dev/null +++ b/examples/main-angular/src/app/pages/vue2.component.ts @@ -0,0 +1,39 @@ +import { Component, NgZone, OnInit } from "@angular/core"; +import { ActivatedRoute, Router } from "@angular/router"; +import { filter } from "rxjs/operators"; +import hostMap from "../../hostMap"; + +@Component({ + selector: "vue2", + template: ``, +}) +export class Vue2Component implements OnInit { + vue2Url = hostMap("//localhost:7200/"); + props = { + jump: ((name) => { + const url = this.router.config.find((x) => x.data.name === name)?.path; + url && this.zone.run(() => this.router.navigateByUrl(url)); + }).bind(this), + }; + + constructor(private activatedRoute: ActivatedRoute, private router: Router, private zone: NgZone) {} + + ngOnInit(): void { + console.log("[vue2] init"); + this.activatedRoute.params.pipe(filter(({ path }) => path)).subscribe(({ path }) => { + this.vue2Url = hostMap("//localhost:7200/") + `#/${path}`; + }); + } + + handleChange(e) { + console.log("[vue2] change >", e); + } +} diff --git a/examples/main-angular/src/app/pages/vue3.component.ts b/examples/main-angular/src/app/pages/vue3.component.ts new file mode 100644 index 00000000..a38941dd --- /dev/null +++ b/examples/main-angular/src/app/pages/vue3.component.ts @@ -0,0 +1,41 @@ +import { Component, NgZone, OnInit } from "@angular/core"; +import { ActivatedRoute, Router } from "@angular/router"; +import { filter } from "rxjs/operators"; +import { WuJieAngular } from "wujie-angular"; +import hostMap from "../../hostMap"; + +@Component({ + selector: "vue3", + template: ``, +}) +export class Vue3Component implements OnInit { + vue3Url = hostMap("//localhost:7300/"); + props = { + jump: ((name) => { + const url = this.router.config.find((x) => x.data.name === name)?.path; + url && this.zone.run(() => this.router.navigateByUrl(url)); + }).bind(this), + }; + + constructor(private activatedRoute: ActivatedRoute, private router: Router, private zone: NgZone) {} + + ngOnInit(): void { + console.log("[vue3] init"); + this.activatedRoute.params.pipe(filter(({ path }) => path)).subscribe(({ path }) => { + WuJieAngular.bus.$emit("vue3-router-change", `/${path}`); + }); + } + + handleChange(e) { + console.log("[vue3] change >", e); + } +} diff --git a/examples/main-angular/src/environments/environment.prod.ts b/examples/main-angular/src/environments/environment.prod.ts new file mode 100644 index 00000000..3612073b --- /dev/null +++ b/examples/main-angular/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/examples/main-angular/src/environments/environment.ts b/examples/main-angular/src/environments/environment.ts new file mode 100644 index 00000000..f56ff470 --- /dev/null +++ b/examples/main-angular/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/examples/main-angular/src/favicon.ico b/examples/main-angular/src/favicon.ico new file mode 100644 index 00000000..997406ad Binary files /dev/null and b/examples/main-angular/src/favicon.ico differ diff --git a/examples/main-angular/src/fetch.ts b/examples/main-angular/src/fetch.ts new file mode 100644 index 00000000..fd8428f1 --- /dev/null +++ b/examples/main-angular/src/fetch.ts @@ -0,0 +1,4 @@ +// 携带登录态credentials必须为include +export default function fetch(url, options) { + return window.fetch(url, { ...options, credentials: "omit" }); +} diff --git a/examples/main-angular/src/hostMap.ts b/examples/main-angular/src/hostMap.ts new file mode 100644 index 00000000..14dd8bff --- /dev/null +++ b/examples/main-angular/src/hostMap.ts @@ -0,0 +1,17 @@ +import { environment } from './environments/environment'; + +const map = { + "//localhost:7100/": "//wujie-micro.github.io/demo-react17/", + "//localhost:7200/": "//wujie-micro.github.io/demo-vue2/", + "//localhost:7300/": "//wujie-micro.github.io/demo-vue3/", + "//localhost:7400/": "//wujie-micro.github.io/demo-angular12/", + "//localhost:7500/": "//wujie-micro.github.io/demo-vite/", + "//localhost:7600/": "//wujie-micro.github.io/demo-react16/", + "//localhost:7700/": "//wujie-micro.github.io/demo-main-react/", + "//localhost:8000/": "//wujie-micro.github.io/demo-main-vue/", +}; + +export default function hostMap(host) { + if (environment.production) return map[host]; + return host; +} diff --git a/examples/main-angular/src/index.html b/examples/main-angular/src/index.html new file mode 100644 index 00000000..5864b43d --- /dev/null +++ b/examples/main-angular/src/index.html @@ -0,0 +1,15 @@ + + + + + 无界angular-demo展示 + + + + + + + loading + + + \ No newline at end of file diff --git a/examples/main-angular/src/karma.conf.js b/examples/main-angular/src/karma.conf.js new file mode 100644 index 00000000..b0d5cbe0 --- /dev/null +++ b/examples/main-angular/src/karma.conf.js @@ -0,0 +1,32 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, './coverage/my-app'), + reports: ['html', 'lcovonly', 'text-summary'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/examples/main-angular/src/lifecycle.ts b/examples/main-angular/src/lifecycle.ts new file mode 100644 index 00000000..18e1b7aa --- /dev/null +++ b/examples/main-angular/src/lifecycle.ts @@ -0,0 +1,12 @@ +const lifecycles = { + beforeLoad: (appWindow) => console.log(`${appWindow.__WUJIE.id} beforeLoad 生命周期`), + beforeMount: (appWindow) => console.log(`${appWindow.__WUJIE.id} beforeMount 生命周期`), + afterMount: (appWindow) => console.log(`${appWindow.__WUJIE.id} afterMount 生命周期`), + beforeUnmount: (appWindow) => console.log(`${appWindow.__WUJIE.id} beforeUnmount 生命周期`), + afterUnmount: (appWindow) => console.log(`${appWindow.__WUJIE.id} afterUnmount 生命周期`), + activated: (appWindow) => console.log(`${appWindow.__WUJIE.id} activated 生命周期`), + deactivated: (appWindow) => console.log(`${appWindow.__WUJIE.id} deactivated 生命周期`), + loadError: (url, e) => console.log(`${url} 加载失败`, e), +}; + +export default lifecycles; diff --git a/examples/main-angular/src/main.ts b/examples/main-angular/src/main.ts new file mode 100644 index 00000000..2aa86da2 --- /dev/null +++ b/examples/main-angular/src/main.ts @@ -0,0 +1,161 @@ +import "./polyfills"; + +import { enableProdMode, NgZone } from "@angular/core"; +import { platformBrowserDynamic } from "@angular/platform-browser-dynamic"; +import { Router } from "@angular/router"; +import { WuJieAngular } from "wujie-angular"; + +import { AppModule } from "./app/app.module"; +import { environment } from "./environments/environment"; + +import hostMap from "./hostMap"; +import plugins from "./plugin"; +import lifecycles from "./lifecycle"; +import credentialsFetch from "./fetch"; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic() + .bootstrapModule(AppModule) + .then((res) => { + const router = res.injector.get(Router); + const zone = res.injector.get(NgZone); + + const { setupApp, preloadApp, bus } = WuJieAngular; + + bus.$on("click", (msg) => window.alert(msg)); + + // 在 xxx-sub 路由下子应用将激活路由同步给主应用,主应用跳转对应路由高亮菜单栏 + bus.$on("sub-route-change", (name, path) => { + const mainName = `${name}-sub`; + const mainPath = `/${name}-sub${path}`; + + const currentPath = router.url; + if (currentPath.includes(mainName) && currentPath !== mainPath) { + zone.run(() => router.navigateByUrl(mainPath)); + } + }); + + const degrade = window.localStorage.getItem("degrade") === "true" || !window.Proxy || !window.CustomElementRegistry; + const props = { + jump: (name) => { + console.log("jump name >>", name); + const url = router.config.find((x) => x.data.name === name)?.path; + url && zone.run(() => router.navigateByUrl(url)); + }, + }; + /** + * 大部分业务无需设置 attrs + * 此处修正 iframe 的 src,是防止github pages csp报错 + * 因为默认是只有 host+port,没有携带路径 + */ + const attrs = environment.production ? { src: hostMap("//localhost:8000/") } : {}; + /** + * 配置应用,主要是设置默认配置 + * preloadApp、startApp的配置会基于这个配置做覆盖 + */ + setupApp({ + name: "react16", + url: hostMap("//localhost:7600/"), + attrs, + exec: true, + props, + fetch: credentialsFetch, + plugins, + prefix: { "prefix-dialog": "/dialog", "prefix-location": "/location" }, + degrade, + ...lifecycles, + }); + + setupApp({ + name: "react17", + url: hostMap("//localhost:7100/"), + attrs, + exec: true, + alive: true, + props, + fetch: credentialsFetch, + degrade, + ...lifecycles, + }); + + setupApp({ + name: "vue2", + url: hostMap("//localhost:7200/"), + attrs, + exec: true, + props, + fetch: credentialsFetch, + degrade, + ...lifecycles, + }); + + setupApp({ + name: "vue3", + url: hostMap("//localhost:7300/"), + attrs, + exec: true, + alive: true, + plugins: [{ cssExcludes: ["https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"] }], + props, + // 引入了的第三方样式不需要添加credentials + fetch: (url, options) => + url.toString().includes(hostMap("//localhost:7300/")) + ? credentialsFetch(url, options) + : window.fetch(url, options), + degrade, + ...lifecycles, + }); + + setupApp({ + name: "angular12", + url: hostMap("//localhost:7400/"), + attrs, + exec: true, + props, + fetch: credentialsFetch, + degrade, + ...lifecycles, + }); + + setupApp({ + name: "vite", + url: hostMap("//localhost:7500/"), + attrs, + exec: true, + props, + fetch: credentialsFetch, + degrade, + ...lifecycles, + }); + + if (window.localStorage.getItem("preload") !== "false") { + preloadApp({ + name: "react16", + url: "", + }); + preloadApp({ + name: "react17", + url: "", + }); + preloadApp({ + name: "vue2", + url: "", + }); + preloadApp({ + name: "vue3", + url: "", + }); + preloadApp({ + name: "angular12", + url: "", + }); + preloadApp({ + name: "vite", + url: "", + }); + } + }) + .catch((err) => console.error(err)); diff --git a/examples/main-angular/src/plugin.ts b/examples/main-angular/src/plugin.ts new file mode 100644 index 00000000..71647cec --- /dev/null +++ b/examples/main-angular/src/plugin.ts @@ -0,0 +1,44 @@ +const plugins = [ + { + htmlLoader: (code) => { + console.log("html-loader"); + return code; + }, + jsBeforeLoaders: [ + { + callback(appWindow) { + console.log("js-before-loader-callback", appWindow.__WUJIE.id); + }, + }, + ], + jsLoader: (code, url) => { + console.log("js-loader", url); + return code; + }, + jsAfterLoaders: [ + { + callback(appWindow) { + console.log("js-after-loader-callback", appWindow.__WUJIE.id); + }, + }, + ], + cssBeforeLoaders: [ + //在加载html所有的样式之前添加一个外联样式 + { src: "https://vfiles.gtimg.cn/wuji_dashboard/xy/test_wuji_damy/HDaBURp7.css" }, + //在加载html所有的样式之前添加一个内联样式 + { content: "img{width: 300px}" }, + ], + cssLoader: (code, url) => { + console.log("css-loader", url, code.slice(0, 50) + "..."); + return code; + }, + cssAfterLoaders: [ + //在加载html所有样式之后添加一个外联样式 + { src: "https://vfiles.gtimg.cn/wuji_dashboard/xy/test_wuji_damy/FQsK8IN6.css" }, + //在加载html所有样式之后添加一个内联样式 + { content: "img{height: 300px}" }, + ], + }, +]; + +export default plugins; diff --git a/examples/main-angular/src/polyfills.ts b/examples/main-angular/src/polyfills.ts new file mode 100644 index 00000000..9c15394c --- /dev/null +++ b/examples/main-angular/src/polyfills.ts @@ -0,0 +1,71 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** IE9, IE10 and IE11 requires all of the following polyfills. **/ +// import 'core-js/es6/symbol'; +// import 'core-js/es6/object'; +// import 'core-js/es6/function'; +// import 'core-js/es6/parse-int'; +// import 'core-js/es6/parse-float'; +// import 'core-js/es6/number'; +// import 'core-js/es6/math'; +// import 'core-js/es6/string'; +// import 'core-js/es6/date'; +// import 'core-js/es6/array'; +// import 'core-js/es6/regexp'; +// import 'core-js/es6/map'; +// import 'core-js/es6/set'; + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** IE10 and IE11 requires the following to support `@angular/animation`. */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + + +/** Evergreen browsers require these. **/ +// import 'core-js/es6/reflect'; +// import 'core-js/es7/reflect'; + + +/** + * Web Animations `@angular/platform-browser/animations` + * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. + * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). + */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + + + +/*************************************************************************************************** + * Zone JS is required by Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ + +/** + * Date, currency, decimal and percent pipes. + * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 + */ +// import 'intl'; // Run `npm install --save intl`. \ No newline at end of file diff --git a/examples/main-angular/src/styles.css b/examples/main-angular/src/styles.css new file mode 100644 index 00000000..b63a5795 --- /dev/null +++ b/examples/main-angular/src/styles.css @@ -0,0 +1,11 @@ +/* Add application styles & imports to this file! */ +@import "~ng-zorro-antd/ng-zorro-antd.min.css"; + +html, +body { + margin: 0; + padding: 0; + font-size: 20px; + height: 100vh; + --theme: rgb(241, 107, 95); +} \ No newline at end of file diff --git a/examples/main-angular/src/tsconfig.app.json b/examples/main-angular/src/tsconfig.app.json new file mode 100644 index 00000000..f761e8b2 --- /dev/null +++ b/examples/main-angular/src/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/app", + "types": [] + }, + "files": [ + "main.ts", + "polyfills.ts" + ], + "include": [ + "**/*.d.ts" + ] +} diff --git a/examples/main-angular/src/tsconfig.spec.json b/examples/main-angular/src/tsconfig.spec.json new file mode 100644 index 00000000..de773363 --- /dev/null +++ b/examples/main-angular/src/tsconfig.spec.json @@ -0,0 +1,18 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/spec", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "test.ts", + "polyfills.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/examples/main-angular/tsconfig.json b/examples/main-angular/tsconfig.json new file mode 100644 index 00000000..68edb0e6 --- /dev/null +++ b/examples/main-angular/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "skipLibCheck": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "module": "esnext", + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", + "typeRoots": [ + "node_modules/@types" + ], + "lib": [ + "es2018", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} \ No newline at end of file diff --git a/packages/wujie-angular/angular.json b/packages/wujie-angular/angular.json new file mode 100644 index 00000000..f2be6dcf --- /dev/null +++ b/packages/wujie-angular/angular.json @@ -0,0 +1,42 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "cli": { + "analytics": false + }, + "version": 1, + "newProjectRoot": "wujie-angular", + "projects": { + "wujie-angular": { + "projectType": "library", + "root": "wujie-angular", + "sourceRoot": "wujie-ngx/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "wujie-ngx/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "wujie-ngx/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "wujie-ngx/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "wujie-ngx/src/test.ts", + "tsConfig": "wujie-ngx/tsconfig.spec.json", + "karmaConfig": "wujie-ngx/karma.conf.js" + } + } + } + } + }, + "defaultProject": "examples" +} diff --git a/packages/wujie-angular/package.json b/packages/wujie-angular/package.json new file mode 100644 index 00000000..984e2f41 --- /dev/null +++ b/packages/wujie-angular/package.json @@ -0,0 +1,69 @@ +{ + "name": "wujie-angular", + "version": "1.0.0-rc.20", + "description": "无界微前端angular模块封装", + "main": "./lib/bundles/wujie-angular.umd.js", + "module_ivy_ngcc": "./lib/__ivy_ngcc__/fesm2015/wujie-angular.js", + "module": "./lib/fesm2015/wujie-angular.js", + "es2015_ivy_ngcc": "./lib/__ivy_ngcc__/fesm2015/wujie-angular.js", + "es2015": "./lib/fesm2015/wujie-angular.js", + "esm2015": "./lib/esm2015/wujie-angular.js", + "fesm2015_ivy_ngcc": "./lib/__ivy_ngcc__/fesm2015/wujie-angular.js", + "fesm2015": "./lib/fesm2015/wujie-angular.js", + "typings": "./lib/wujie-angular.d.ts", + "metadata": "./lib/wujie-angular.metadata.json", + "sideEffects": false, + "__processed_by_ivy_ngcc__": { + "es2015": "12.2.16", + "fesm2015": "12.2.16", + "module": "12.2.16", + "typings": "12.2.16" + }, + "files": [ + "lib" + ], + "scripts": { + "ng": "ng", + "start": "npm run watch", + "lib": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test", + "prepublishOnly": "node --eval \"console.error('ERROR: Trying to publish a package that has been compiled by NGCC. This is not allowed.\\nPlease delete and rebuild the package, without compiling with NGCC, before attempting to publish.\\nNote that NGCC may have been run by importing this package into another project that is being built with Ivy enabled.\\n')\" && exit 1" + }, + "license": "MIT", + "peerDependencies": { + "@angular/common": "~12.2.0", + "@angular/core": "~12.2.0" + }, + "dependencies": { + "wujie": "workspace:^1.0.0-rc.20", + "tslib": "^2.1.0" + }, + "devDependencies": { + "@angular/animations": "~12.2.0", + "@angular/common": "~12.2.0", + "@angular/compiler": "~12.2.0", + "@angular/core": "~12.2.0", + "@angular/forms": "~12.2.0", + "@angular/platform-browser": "~12.2.0", + "@angular/platform-browser-dynamic": "~12.2.0", + "@angular/router": "~12.2.0", + "classlist.js": "^1.1.20150312", + "rxjs": "~6.6.0", + "@angular-devkit/build-angular": "~12.2.9", + "@angular-devkit/build-ng-packagr": "~0.1002.0", + "@angular/cli": "~12.2.9", + "@angular/compiler-cli": "~12.2.0", + "@types/jasmine": "~3.8.0", + "@types/node": "^12.11.1", + "jasmine-core": "~3.8.0", + "karma": "~6.3.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.0.3", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "~1.7.0", + "ng-packagr": "~12.2.0", + "typescript": "~4.3.5", + "zone.js": "~0.11.4" + } +} diff --git a/packages/wujie-angular/tsconfig.json b/packages/wujie-angular/tsconfig.json new file mode 100644 index 00000000..686241ad --- /dev/null +++ b/packages/wujie-angular/tsconfig.json @@ -0,0 +1,33 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "sourceMap": true, + "skipLibCheck": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "es5", + "module": "esnext", + "lib": [ + "es2018", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": false, + "fullTemplateTypeCheck": false, + "disableTypeScriptVersionCheck": true, + } +} diff --git a/packages/wujie-angular/wujie-ngx/karma.conf.js b/packages/wujie-angular/wujie-ngx/karma.conf.js new file mode 100644 index 00000000..8b919487 --- /dev/null +++ b/packages/wujie-angular/wujie-ngx/karma.conf.js @@ -0,0 +1,32 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, '../../coverage/wujie-angular'), + reports: ['html', 'lcovonly', 'text-summary'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/packages/wujie-angular/wujie-ngx/ng-package.json b/packages/wujie-angular/wujie-ngx/ng-package.json new file mode 100644 index 00000000..b5806b92 --- /dev/null +++ b/packages/wujie-angular/wujie-ngx/ng-package.json @@ -0,0 +1,10 @@ +{ + "$schema": "../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../lib", + "lib": { + "entryFile": "src/index.ts", + "umdModuleIds": { + "wujie": "wujie" + } + } +} diff --git a/packages/wujie-angular/wujie-ngx/package.json b/packages/wujie-angular/wujie-ngx/package.json new file mode 100644 index 00000000..65c61441 --- /dev/null +++ b/packages/wujie-angular/wujie-ngx/package.json @@ -0,0 +1,13 @@ +{ + "name": "wujie-angular", + "version": "1.0.0-rc.20", + "description": "无界微前端angular组件封装", + "peerDependencies": { + "@angular/common": "~12.2.0", + "@angular/core": "~12.2.0", + "wujie": "workspace:^1.0.0-rc.20" + }, + "dependencies": { + "tslib": "^2.1.0" + } +} diff --git a/packages/wujie-angular/wujie-ngx/src/index.ts b/packages/wujie-angular/wujie-ngx/src/index.ts new file mode 100644 index 00000000..3ab9f156 --- /dev/null +++ b/packages/wujie-angular/wujie-ngx/src/index.ts @@ -0,0 +1,11 @@ +import { bus, preloadApp, destroyApp, setupApp } from "wujie"; + +export * from "./wujie.component"; +export * from "./wujie.module"; + +export const WuJieAngular = { + setupApp, + preloadApp, + bus, + destroyApp, +}; diff --git a/packages/wujie-angular/wujie-ngx/src/test.ts b/packages/wujie-angular/wujie-ngx/src/test.ts new file mode 100644 index 00000000..303b32a2 --- /dev/null +++ b/packages/wujie-angular/wujie-ngx/src/test.ts @@ -0,0 +1,26 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone'; +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + keys(): string[]; + (id: string): T; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/packages/wujie-angular/wujie-ngx/src/wujie.component.ts b/packages/wujie-angular/wujie-ngx/src/wujie.component.ts new file mode 100644 index 00000000..35c20837 --- /dev/null +++ b/packages/wujie-angular/wujie-ngx/src/wujie.component.ts @@ -0,0 +1,109 @@ +import { + AfterViewInit, + Component, + ElementRef, + EventEmitter, + Input, + OnChanges, + OnDestroy, + OnInit, + Output, + SimpleChanges, +} from "@angular/core"; +import { bus, startApp as rawStartApp, destroyApp, loadErrorHandler } from "wujie"; + +declare type lifecycle = (appWindow: Window) => any; + +@Component({ + selector: "wujie-ngx", + template: `
`, +}) +export class WujieComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy { + @Input() width: string; + @Input() height: string; + @Input() name: string; + @Input() loading: HTMLElement; + @Input() url: string; + @Input() sync: boolean; + @Input() prefix: { [key: string]: string }; + @Input() alive: boolean; + @Input() props: object; + @Input() attrs: object; + @Input() replace: (code: string) => string; + @Input() fetch: (input: RequestInfo, init?: RequestInit) => Promise; + @Input() fiber: boolean; + @Input() degrade: boolean; + @Input() plugins: Array; + @Input() beforeLoad: lifecycle; + @Input() beforeMount: lifecycle; + @Input() afterMount: lifecycle; + @Input() beforeUnmount: lifecycle; + @Input() afterUnmount: lifecycle; + @Input() activated: lifecycle; + @Input() deactivated: lifecycle; + @Input() loadError: loadErrorHandler; + @Output() change = new EventEmitter(); + + private startAppQueue = Promise.resolve(); + + constructor(private elementRef: ElementRef) {} + + ngOnInit() {} + + ngAfterViewInit(): void { + bus.$onAll(this.handleEmit.bind(this)); + } + + ngOnChanges(changes: SimpleChanges) { + if ( + changes.name?.currentValue !== changes.name?.previousValue || + changes.url?.currentValue !== changes.url?.previousValue + ) { + this.execStartApp(); + } + } + + ngOnDestroy() { + bus.$offAll(this.handleEmit); + !this.alive && destroyApp(this.name); + } + + private handleEmit(event, ...args) { + this.change.emit({ event, args }); + } + + private async startApp() { + try { + await rawStartApp({ + name: this.name, + url: this.url, + el: this.elementRef.nativeElement, + loading: this.loading, + alive: this.alive, + fetch: this.fetch, + props: this.props, + attrs: this.attrs, + replace: this.replace, + sync: this.sync, + prefix: this.prefix, + fiber: this.fiber, + degrade: this.degrade, + plugins: this.plugins, + beforeLoad: this.beforeLoad, + beforeMount: this.beforeMount, + afterMount: this.afterMount, + beforeUnmount: this.beforeUnmount, + afterUnmount: this.afterUnmount, + activated: this.activated, + deactivated: this.deactivated, + loadError: this.loadError, + }); + } catch (error) { + console.log(error); + } + } + + private execStartApp() { + this.startAppQueue = this.startAppQueue.then(this.startApp.bind(this)); + } +} diff --git a/packages/wujie-angular/wujie-ngx/src/wujie.module.ts b/packages/wujie-angular/wujie-ngx/src/wujie.module.ts new file mode 100644 index 00000000..bb042dd9 --- /dev/null +++ b/packages/wujie-angular/wujie-ngx/src/wujie.module.ts @@ -0,0 +1,12 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { WujieComponent } from './wujie.component'; + +@NgModule({ + imports: [CommonModule], + declarations: [WujieComponent], + exports: [WujieComponent], +}) +export class WujieModule { + +} \ No newline at end of file diff --git a/packages/wujie-angular/wujie-ngx/tsconfig.lib.json b/packages/wujie-angular/wujie-ngx/tsconfig.lib.json new file mode 100644 index 00000000..d9a18c47 --- /dev/null +++ b/packages/wujie-angular/wujie-ngx/tsconfig.lib.json @@ -0,0 +1,24 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/lib", + "target": "es2015", + "declaration": true, + "inlineSources": true, + "types": [], + "lib": [ + "dom", + "es2018" + ] + }, + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableResourceInlining": true + }, + "exclude": [ + "src/test.ts", + "**/*.spec.ts" + ] +} diff --git a/packages/wujie-angular/wujie-ngx/tsconfig.lib.prod.json b/packages/wujie-angular/wujie-ngx/tsconfig.lib.prod.json new file mode 100644 index 00000000..2b75cc2d --- /dev/null +++ b/packages/wujie-angular/wujie-ngx/tsconfig.lib.prod.json @@ -0,0 +1,8 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "angularCompilerOptions": { + "enableIvy": false, + "compilationMode": "partial" + } +} diff --git a/packages/wujie-angular/wujie-ngx/tsconfig.spec.json b/packages/wujie-angular/wujie-ngx/tsconfig.spec.json new file mode 100644 index 00000000..715dd0a5 --- /dev/null +++ b/packages/wujie-angular/wujie-ngx/tsconfig.spec.json @@ -0,0 +1,17 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/packages/wujie-angular/wujie-ngx/tslint.json b/packages/wujie-angular/wujie-ngx/tslint.json new file mode 100644 index 00000000..124133f8 --- /dev/null +++ b/packages/wujie-angular/wujie-ngx/tslint.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tslint.json", + "rules": { + "directive-selector": [ + true, + "attribute", + "lib", + "camelCase" + ], + "component-selector": [ + true, + "element", + "lib", + "kebab-case" + ] + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e188b030..8453f70b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -86,6 +86,65 @@ importers: karma-jasmine-html-reporter: 1.7.0_cfcqki7jg52pqpepmgi37diege typescript: 4.3.5 + examples/main-angular: + specifiers: + '@angular-devkit/build-angular': ~12.2.9 + '@angular/animations': ~12.2.0 + '@angular/cli': ~12.2.9 + '@angular/common': ~12.2.0 + '@angular/compiler': ~12.2.0 + '@angular/compiler-cli': ~12.2.0 + '@angular/core': ~12.2.0 + '@angular/forms': ~12.2.0 + '@angular/platform-browser': ~12.2.0 + '@angular/platform-browser-dynamic': ~12.2.0 + '@angular/router': ~12.2.0 + '@ant-design/icons-angular': ~12.0.3 + '@types/jasmine': ~3.8.0 + '@types/node': ^12.11.1 + jasmine-core: ~3.8.0 + karma: ~6.3.0 + karma-chrome-launcher: ~3.1.0 + karma-coverage: ~2.0.3 + karma-jasmine: ~4.0.0 + karma-jasmine-html-reporter: ~1.7.0 + ng-zorro-antd: ~12.1.0 + rxjs: ^6.6.3 + tslib: ^2.3.0 + typescript: ~4.3.5 + wujie: workspace:^1.0.0-rc.20 + wujie-angular: workspace:1.0.0-rc.20 + zone.js: ~0.11.4 + dependencies: + '@angular/animations': 12.2.16_@angular+core@12.2.16 + '@angular/common': 12.2.16_wg5cpvw6b54u2dgutrs2a2rg2m + '@angular/compiler': 12.2.16 + '@angular/core': 12.2.16_rxjs@6.6.7+zone.js@0.11.8 + '@angular/forms': 12.2.16_mkqvoiprcf4ld42gjf3h4clm4q + '@angular/platform-browser': 12.2.16_6vfu5hxfyqsufaicqluldoy62a + '@angular/platform-browser-dynamic': 12.2.16_tk5jg5zhis7s2w7gaivdbjmch4 + '@angular/router': 12.2.16_mkqvoiprcf4ld42gjf3h4clm4q + '@ant-design/icons-angular': 12.0.3_mkqvoiprcf4ld42gjf3h4clm4q + ng-zorro-antd: 12.1.1_l3vg24z2c2kshbnbim5apeyk34 + rxjs: 6.6.7 + tslib: 2.4.0 + wujie: link:../../packages/wujie-core + wujie-angular: link:../../packages/wujie-angular + zone.js: 0.11.8 + devDependencies: + '@angular-devkit/build-angular': 12.2.18_b6a75eot6v5imiropz2qr6fgg4 + '@angular/cli': 12.2.18 + '@angular/compiler-cli': 12.2.16_wy6d3tkktgm6qvuj6t42uum7ly + '@types/jasmine': 3.8.2 + '@types/node': 12.20.55 + jasmine-core: 3.8.0 + karma: 6.3.20 + karma-chrome-launcher: 3.1.1 + karma-coverage: 2.0.3 + karma-jasmine: 4.0.2_karma@6.3.20 + karma-jasmine-html-reporter: 1.7.0_cfcqki7jg52pqpepmgi37diege + typescript: 4.3.5 + examples/main-react: specifiers: '@ant-design/icons': ^4.7.0 @@ -144,7 +203,7 @@ importers: webpack-dev-server: ^4.6.0 webpack-manifest-plugin: ^4.0.2 workbox-webpack-plugin: ^6.4.1 - wujie-react: ^1.0.0-rc.15 + wujie-react: workspace:^1.0.0-rc.20 dependencies: '@ant-design/icons': 4.7.0_sfoxds7t5ydpegc3knd667wn6m '@babel/core': 7.18.13 @@ -195,7 +254,7 @@ importers: semver: 7.3.7 source-map-loader: 3.0.1_webpack@5.74.0 style-loader: 3.3.1_webpack@5.74.0 - tailwindcss: 3.1.8_postcss@8.4.16 + tailwindcss: 3.1.8 terser-webpack-plugin: 5.3.6_webpack@5.74.0 web-vitals: 2.1.4 webpack: 5.74.0 @@ -221,17 +280,17 @@ importers: vue: ^2.6.11 vue-router: ^3.2.0 vue-template-compiler: ^2.6.11 - wujie: ^1.0.0-rc.15 - wujie-vue2: ^1.0.0-rc.15 + wujie: workspace:^1.0.0-rc.20 + wujie-vue2: workspace:^1.0.0-rc.20 dependencies: ant-design-vue: 1.7.8_42puyn3dcxirnpdjnosl7pbb6a core-js: 3.25.0 vue: 2.7.10 - vue-router: 3.6.4_vue@2.7.10 + vue-router: 3.6.4 wujie: link:../../packages/wujie-core wujie-vue2: link:../../packages/wujie-vue2 devDependencies: - '@vue/cli-plugin-babel': 4.5.19_akjmzrauofhfgs3vcqzo2mt42m + '@vue/cli-plugin-babel': 4.5.19_kmrx22catm3sq2nftmhgvvcnta '@vue/cli-plugin-eslint': 4.5.19_lraa25dnvoil5znz52cpy2x3eu '@vue/cli-plugin-router': 4.5.19_@vue+cli-service@4.5.19 '@vue/cli-service': 4.5.19_42puyn3dcxirnpdjnosl7pbb6a @@ -301,7 +360,7 @@ importers: webpack-dev-server: ^4.6.0 webpack-manifest-plugin: ^4.0.2 workbox-webpack-plugin: ^6.4.1 - wujie-react: ^1.0.0-rc.15 + wujie-react: workspace:^1.0.0-rc.20 dependencies: '@babel/core': 7.18.13 '@pmmmwh/react-refresh-webpack-plugin': 0.5.7_wt5p3h66kg5yz5633zrrqkcxnm @@ -351,7 +410,7 @@ importers: semver: 7.3.7 source-map-loader: 3.0.1_webpack@5.74.0 style-loader: 3.3.1_webpack@5.74.0 - tailwindcss: 3.1.8_postcss@8.4.16 + tailwindcss: 3.1.8 tdesign-icons-react: 0.1.6_5owmthsvj5ictknaj3ev736ofq terser-webpack-plugin: 5.3.6_webpack@5.74.0 web-vitals: 2.1.4 @@ -546,11 +605,11 @@ importers: core-js: 3.25.0 element-ui: 2.15.6_vue@2.7.10 vue: 2.7.10 - vue-router: 3.6.4_vue@2.7.10 + vue-router: 3.6.4 devDependencies: '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6 '@babel/plugin-proposal-optional-chaining': 7.18.9 - '@vue/cli-plugin-babel': 4.5.19_akjmzrauofhfgs3vcqzo2mt42m + '@vue/cli-plugin-babel': 4.5.19_kmrx22catm3sq2nftmhgvvcnta '@vue/cli-plugin-eslint': 4.5.19_fepo2kslcuyry2fkxxpiwlhxb4 '@vue/cli-plugin-router': 4.5.19_@vue+cli-service@4.5.19 '@vue/cli-service': 4.5.19_42puyn3dcxirnpdjnosl7pbb6a @@ -592,7 +651,7 @@ importers: devDependencies: '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6 '@babel/plugin-proposal-optional-chaining': 7.18.9 - '@vue/cli-plugin-babel': 4.5.19_ihvd7qlohhjilpgep6h7z25kqm + '@vue/cli-plugin-babel': 4.5.19_sbbclqkts6ax6utdc5esg2ycni '@vue/cli-plugin-eslint': 4.5.19_fepo2kslcuyry2fkxxpiwlhxb4 '@vue/cli-plugin-router': 4.5.19_@vue+cli-service@4.5.19 '@vue/cli-service': 4.5.19_lkq4ousnc7vzls4uafs2kgxwfm @@ -605,6 +664,65 @@ importers: prettier: 2.7.1 vue-loader-v16: 16.0.0-beta.5.4 + packages/wujie-angular: + specifiers: + '@angular-devkit/build-angular': ~12.2.9 + '@angular-devkit/build-ng-packagr': ~0.1002.0 + '@angular/animations': ~12.2.0 + '@angular/cli': ~12.2.9 + '@angular/common': ~12.2.0 + '@angular/compiler': ~12.2.0 + '@angular/compiler-cli': ~12.2.0 + '@angular/core': ~12.2.0 + '@angular/forms': ~12.2.0 + '@angular/platform-browser': ~12.2.0 + '@angular/platform-browser-dynamic': ~12.2.0 + '@angular/router': ~12.2.0 + '@types/jasmine': ~3.8.0 + '@types/node': ^12.11.1 + classlist.js: ^1.1.20150312 + jasmine-core: ~3.8.0 + karma: ~6.3.0 + karma-chrome-launcher: ~3.1.0 + karma-coverage: ~2.0.3 + karma-jasmine: ~4.0.0 + karma-jasmine-html-reporter: ~1.7.0 + ng-packagr: ~12.2.0 + rxjs: ~6.6.0 + tslib: ^2.1.0 + typescript: ~4.3.5 + wujie: workspace:^1.0.0-rc.20 + zone.js: ~0.11.4 + dependencies: + tslib: 2.4.0 + wujie: link:../wujie-core + devDependencies: + '@angular-devkit/build-angular': 12.2.18_re4ma7fz5st4dk3nvdyn2ur4ym + '@angular-devkit/build-ng-packagr': 0.1002.0_ng-packagr@12.2.7 + '@angular/animations': 12.2.16_@angular+core@12.2.16 + '@angular/cli': 12.2.18 + '@angular/common': 12.2.16_wg5cpvw6b54u2dgutrs2a2rg2m + '@angular/compiler': 12.2.16 + '@angular/compiler-cli': 12.2.16_wy6d3tkktgm6qvuj6t42uum7ly + '@angular/core': 12.2.16_rxjs@6.6.7+zone.js@0.11.8 + '@angular/forms': 12.2.16_mkqvoiprcf4ld42gjf3h4clm4q + '@angular/platform-browser': 12.2.16_6vfu5hxfyqsufaicqluldoy62a + '@angular/platform-browser-dynamic': 12.2.16_tk5jg5zhis7s2w7gaivdbjmch4 + '@angular/router': 12.2.16_mkqvoiprcf4ld42gjf3h4clm4q + '@types/jasmine': 3.8.2 + '@types/node': 12.20.55 + classlist.js: 1.1.20150312 + jasmine-core: 3.8.0 + karma: 6.3.20 + karma-chrome-launcher: 3.1.1 + karma-coverage: 2.0.3 + karma-jasmine: 4.0.2_karma@6.3.20 + karma-jasmine-html-reporter: 1.7.0_cfcqki7jg52pqpepmgi37diege + ng-packagr: 12.2.7_g7mwn5bjzj62s2pjez7yl6iuhu + rxjs: 6.6.7 + typescript: 4.3.5 + zone.js: 0.11.8 + packages/wujie-core: specifiers: '@babel/cli': ^7.18.6 @@ -681,7 +799,7 @@ importers: prop-types: ^15.8.1 webpack: ^5.61.0 webpack-cli: ^4.9.1 - wujie: ^1.0.0-rc.15 + wujie: workspace:^1.0.0-rc.20 dependencies: prop-types: 15.8.1 wujie: link:../wujie-core @@ -708,7 +826,7 @@ importers: eslint-plugin-vue: ^8.0.3 webpack: ^5.61.0 webpack-cli: ^4.9.1 - wujie: ^1.0.0-rc.15 + wujie: workspace:^1.0.0-rc.20 dependencies: wujie: link:../wujie-core devDependencies: @@ -734,7 +852,7 @@ importers: vue: ^3.0.0 webpack: ^5.61.0 webpack-cli: ^4.9.1 - wujie: ^1.0.0-rc.15 + wujie: workspace:^1.0.0-rc.20 dependencies: wujie: link:../wujie-core devDependencies: @@ -872,6 +990,14 @@ packages: '@jridgewell/gen-mapping': 0.1.1 '@jridgewell/trace-mapping': 0.3.15 + /@angular-devkit/architect/0.1002.0: + resolution: {integrity: sha512-twM8V03ujBIGVpgV1PBlSDodUdxtUb7WakutfWafAvEHUsgwzfvQz2VtKWvjNZ9AiYjnCuwkQaclqVv0VHNo9w==} + engines: {node: '>= 10.13.0', npm: '>= 6.11.0', yarn: '>= 1.13.0'} + dependencies: + '@angular-devkit/core': 10.2.0 + rxjs: 6.6.2 + dev: true + /@angular-devkit/architect/0.1202.18: resolution: {integrity: sha512-C4ASKe+xBjl91MJyHDLt3z7ICPF9FU6B0CeJ1phwrlSHK9lmFG99WGxEj/Tc82+vHyPhajqS5XJ38KyVAPBGzA==} engines: {node: ^12.14.1 || >=14.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -998,6 +1124,140 @@ packages: - webpack-cli dev: true + /@angular-devkit/build-angular/12.2.18_re4ma7fz5st4dk3nvdyn2ur4ym: + resolution: {integrity: sha512-Hf3s7etN7zkHc7lhZZx3Bsm6hfLozuvN3z2aI39RDSlHOA83SoYpltnD9UV4B4d3cxU4PLUzpirb96QeS+E53Q==} + engines: {node: ^12.14.1 || >=14.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + '@angular/compiler-cli': ^12.0.0 + '@angular/localize': ^12.0.0 + '@angular/service-worker': ^12.0.0 + karma: ^6.3.0 + ng-packagr: ^12.0.0 + protractor: ^7.0.0 + tailwindcss: ^2.0.0 + tslint: ^6.1.0 + typescript: ~4.2.3 || ~4.3.2 + peerDependenciesMeta: + '@angular/localize': + optional: true + '@angular/service-worker': + optional: true + karma: + optional: true + ng-packagr: + optional: true + protractor: + optional: true + tailwindcss: + optional: true + tslint: + optional: true + dependencies: + '@ampproject/remapping': 1.0.1 + '@angular-devkit/architect': 0.1202.18 + '@angular-devkit/build-optimizer': 0.1202.18_webpack@5.50.0 + '@angular-devkit/build-webpack': 0.1202.18_42ttmvtt2qz7xgczw5bvg2yfo4 + '@angular-devkit/core': 12.2.18 + '@angular/compiler-cli': 12.2.16_wy6d3tkktgm6qvuj6t42uum7ly + '@babel/core': 7.14.8 + '@babel/generator': 7.14.8 + '@babel/helper-annotate-as-pure': 7.14.5 + '@babel/plugin-proposal-async-generator-functions': 7.14.7_@babel+core@7.14.8 + '@babel/plugin-transform-async-to-generator': 7.14.5_@babel+core@7.14.8 + '@babel/plugin-transform-runtime': 7.14.5_@babel+core@7.14.8 + '@babel/preset-env': 7.14.8_@babel+core@7.14.8 + '@babel/runtime': 7.14.8 + '@babel/template': 7.14.5 + '@discoveryjs/json-ext': 0.5.3 + '@jsdevtools/coverage-istanbul-loader': 3.0.5 + '@ngtools/webpack': 12.2.18_xzxwgnsaefll4mbn4mudtggngm + ansi-colors: 4.1.1 + babel-loader: 8.2.2_cx6lwznejiptarb24sknnqoyti + browserslist: 4.21.3 + cacache: 15.2.0 + caniuse-lite: 1.0.30001385 + circular-dependency-plugin: 5.2.2_webpack@5.50.0 + copy-webpack-plugin: 9.0.1_webpack@5.50.0 + core-js: 3.16.0 + critters: 0.0.12 + css-loader: 6.2.0_webpack@5.50.0 + css-minimizer-webpack-plugin: 3.0.2_webpack@5.50.0 + esbuild-wasm: 0.13.8 + find-cache-dir: 3.3.1 + glob: 7.1.7 + https-proxy-agent: 5.0.0 + inquirer: 8.1.2 + karma: 6.3.20 + karma-source-map-support: 1.4.0 + less: 4.1.1 + less-loader: 10.0.1_less@4.1.1+webpack@5.50.0 + license-webpack-plugin: 2.3.20_webpack@5.50.0 + loader-utils: 2.0.0 + mini-css-extract-plugin: 2.4.2_webpack@5.50.0 + minimatch: 3.0.4 + ng-packagr: 12.2.7_g7mwn5bjzj62s2pjez7yl6iuhu + open: 8.2.1 + ora: 5.4.1 + parse5-html-rewriting-stream: 6.0.1 + piscina: 3.1.0 + postcss: 8.3.6 + postcss-import: 14.0.2_postcss@8.3.6 + postcss-loader: 6.1.1_kcoirxvm3exmkkwp2ghzttqkte + postcss-preset-env: 6.7.0 + regenerator-runtime: 0.13.9 + resolve-url-loader: 4.0.0 + rxjs: 6.6.7 + sass: 1.36.0 + sass-loader: 12.1.0_sass@1.36.0+webpack@5.50.0 + semver: 7.3.5 + source-map-loader: 3.0.0_webpack@5.50.0 + source-map-support: 0.5.19 + style-loader: 3.2.1_webpack@5.50.0 + stylus: 0.54.8 + stylus-loader: 6.1.0_n2bexmciwv362mprlq4cvltjxy + terser: 5.14.2 + terser-webpack-plugin: 5.1.4_webpack@5.50.0 + text-table: 0.2.0 + tree-kill: 1.2.2 + tslib: 2.3.0 + typescript: 4.3.5 + webpack: 5.50.0 + webpack-dev-middleware: 5.0.0_webpack@5.50.0 + webpack-dev-server: 3.11.3_webpack@5.50.0 + webpack-merge: 5.8.0 + webpack-subresource-integrity: 1.5.2_webpack@5.50.0 + optionalDependencies: + esbuild: 0.13.8 + transitivePeerDependencies: + - bluebird + - bufferutil + - clean-css + - csso + - fibers + - html-webpack-plugin + - node-sass + - rework + - rework-visit + - supports-color + - utf-8-validate + - webpack-cli + dev: true + + /@angular-devkit/build-ng-packagr/0.1002.0_ng-packagr@12.2.7: + resolution: {integrity: sha512-JngcuLuPpu2oOhi1qBPzco+ETjDbv90zyWZELO3qXeCelug1z83E0Qi2sLgnNYayzSHfrivrRamL8CbYYT+M9Q==} + engines: {node: '>= 10.13.0', npm: '>= 6.11.0', yarn: '>= 1.13.0'} + peerDependencies: + ng-packagr: ^10.0.0 + tsickle: ~0.39.0 + peerDependenciesMeta: + tsickle: + optional: true + dependencies: + '@angular-devkit/architect': 0.1002.0 + ng-packagr: 12.2.7_g7mwn5bjzj62s2pjez7yl6iuhu + rxjs: 6.6.2 + dev: true + /@angular-devkit/build-optimizer/0.1202.18_webpack@5.50.0: resolution: {integrity: sha512-8ANaqa66IuaSRqJT3zTNUoeRDyLanE56tkNWqgYDPyZUsafEsomh9/fGVIkazymP1hReDLw+RoxSVxUsaRSsTA==} engines: {node: ^12.14.1 || >=14.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -1027,6 +1287,17 @@ packages: webpack-dev-server: 3.11.3_webpack@5.50.0 dev: true + /@angular-devkit/core/10.2.0: + resolution: {integrity: sha512-XAszFhSF3mZw1VjoOsYGbArr5NJLcStjOvcCGjBPl1UBM2AKpuCQXHxI9XJGYKL3B93Vp5G58d8qkHvamT53OA==} + engines: {node: '>= 10.13.0', npm: '>= 6.11.0', yarn: '>= 1.13.0'} + dependencies: + ajv: 6.12.4 + fast-json-stable-stringify: 2.1.0 + magic-string: 0.25.7 + rxjs: 6.6.2 + source-map: 0.7.3 + dev: true + /@angular-devkit/core/12.2.18: resolution: {integrity: sha512-GDLHGe9HEY5SRS+NrKr14C8aHsRCiBFkBFSSbeohgLgcgSXzZHFoU84nDWrl3KZNP8oqcUSv5lHu6dLcf2fnww==} engines: {node: ^12.14.1 || >=14.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -1056,6 +1327,20 @@ packages: dependencies: '@angular/core': 12.2.16_rxjs@6.6.7+zone.js@0.11.8 tslib: 2.4.0 + + /@angular/cdk/12.2.13_qh4d7d2l3tkwmzcyowa4436dai: + resolution: {integrity: sha512-zSKRhECyFqhingIeyRInIyTvYErt4gWo+x5DQr0b7YLUbU8DZSwWnG4w76Ke2s4U8T7ry1jpJBHoX/e8YBpGMg==} + peerDependencies: + '@angular/common': ^12.0.0 || ^13.0.0-0 + '@angular/core': ^12.0.0 || ^13.0.0-0 + rxjs: ^6.5.3 || ^7.0.0 + dependencies: + '@angular/common': 12.2.16_wg5cpvw6b54u2dgutrs2a2rg2m + '@angular/core': 12.2.16_rxjs@6.6.7+zone.js@0.11.8 + rxjs: 6.6.7 + tslib: 2.4.0 + optionalDependencies: + parse5: 5.1.1 dev: false /@angular/cli/12.2.18: @@ -1098,7 +1383,6 @@ packages: '@angular/core': 12.2.16_rxjs@6.6.7+zone.js@0.11.8 rxjs: 6.6.7 tslib: 2.4.0 - dev: false /@angular/compiler-cli/12.2.16_wy6d3tkktgm6qvuj6t42uum7ly: resolution: {integrity: sha512-tlalh8SJvdCWbUPRUR5GamaP+wSc/GuCsoUZpSbcczGKgSlbaEVXUYtVXm8/wuT6Slk2sSEbRs7tXGF2i7qxVw==} @@ -1144,7 +1428,6 @@ packages: rxjs: 6.6.7 tslib: 2.4.0 zone.js: 0.11.8 - dev: false /@angular/forms/12.2.16_mkqvoiprcf4ld42gjf3h4clm4q: resolution: {integrity: sha512-sb+gpNun5aN7CZfHXS6X7vJcd/0A1P/gRBZpYtQTzBYnqEFCOFIvR62eb05aHQ4JhgKaSPpIXrbz/bAwY/njZw==} @@ -1160,7 +1443,6 @@ packages: '@angular/platform-browser': 12.2.16_6vfu5hxfyqsufaicqluldoy62a rxjs: 6.6.7 tslib: 2.4.0 - dev: false /@angular/platform-browser-dynamic/12.2.16_tk5jg5zhis7s2w7gaivdbjmch4: resolution: {integrity: sha512-XGxoACAMW/bc3atiVRpaiYwU4LkobYwVzwlxTT/BxOfsdt8ILb5wU8Fx1TMKNECOQHSGdK0qqhch4pTBZ3cb2g==} @@ -1176,7 +1458,6 @@ packages: '@angular/core': 12.2.16_rxjs@6.6.7+zone.js@0.11.8 '@angular/platform-browser': 12.2.16_6vfu5hxfyqsufaicqluldoy62a tslib: 2.4.0 - dev: false /@angular/platform-browser/12.2.16_6vfu5hxfyqsufaicqluldoy62a: resolution: {integrity: sha512-T855ppLeQO6hRHi7lGf5fwPoUVt+c0h2rgkV5jHElc3ylaGnhecmZc6fnWLX4pw82TMJUgUV88CY8JCFabJWwg==} @@ -1193,7 +1474,6 @@ packages: '@angular/common': 12.2.16_wg5cpvw6b54u2dgutrs2a2rg2m '@angular/core': 12.2.16_rxjs@6.6.7+zone.js@0.11.8 tslib: 2.4.0 - dev: false /@angular/router/12.2.16_mkqvoiprcf4ld42gjf3h4clm4q: resolution: {integrity: sha512-LuFXSMIvX/VrB4jbYhigG2Y2pGQ9ULsSBUwDWwQCf4kr0eVI37LBJ2Vr74GBEznjgQ0UmWE89E+XYI80UhERTw==} @@ -1209,7 +1489,6 @@ packages: '@angular/platform-browser': 12.2.16_6vfu5hxfyqsufaicqluldoy62a rxjs: 6.6.7 tslib: 2.4.0 - dev: false /@ant-design/colors/3.2.2: resolution: {integrity: sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ==} @@ -1217,12 +1496,34 @@ packages: tinycolor2: 1.4.2 dev: false + /@ant-design/colors/5.1.1: + resolution: {integrity: sha512-Txy4KpHrp3q4XZdfgOBqLl+lkQIc3tEvHXOimRN1giX1AEC7mGtyrO9p8iRGJ3FLuVMGa2gNEzQyghVymLttKQ==} + dependencies: + '@ctrl/tinycolor': 3.4.1 + dev: false + /@ant-design/colors/6.0.0: resolution: {integrity: sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==} dependencies: '@ctrl/tinycolor': 3.4.1 dev: false + /@ant-design/icons-angular/12.0.3_mkqvoiprcf4ld42gjf3h4clm4q: + resolution: {integrity: sha512-Jl/O7fQiFGsFHuesOp7Oo/TKTPSlWAqMa2DBQdgQbNzv2c3v1ijQWd54ymDC6ftIHMsKD30nJ6bekCiqdbfZuA==} + peerDependencies: + '@angular/common': ^12.0.3 + '@angular/core': ^12.0.3 + '@angular/platform-browser': ^12.0.3 + rxjs: ^6.4.0 + dependencies: + '@angular/common': 12.2.16_wg5cpvw6b54u2dgutrs2a2rg2m + '@angular/core': 12.2.16_rxjs@6.6.7+zone.js@0.11.8 + '@angular/platform-browser': 12.2.16_6vfu5hxfyqsufaicqluldoy62a + '@ant-design/colors': 5.1.1 + rxjs: 6.6.7 + tslib: 2.4.0 + dev: false + /@ant-design/icons-svg/4.2.1: resolution: {integrity: sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==} dev: false @@ -1400,7 +1701,7 @@ packages: gensync: 1.0.0-beta.2 json5: 2.2.1 lodash: 4.17.21 - resolve: 1.18.1 + resolve: 1.22.1 semver: 5.7.1 source-map: 0.5.7 transitivePeerDependencies: @@ -6221,7 +6522,7 @@ packages: dependencies: convert-source-map: 1.8.0 istanbul-lib-instrument: 4.0.3 - loader-utils: 2.0.0 + loader-utils: 2.0.2 merge-source-map: 1.1.0 schema-utils: 2.7.1 transitivePeerDependencies: @@ -6538,9 +6839,9 @@ packages: lru-cache: 6.0.0 mkdirp: 1.0.4 npm-pick-manifest: 6.1.1 - promise-inflight: 1.0.1 + promise-inflight: 1.0.1_bluebird@3.7.2 promise-retry: 2.0.1 - semver: 7.3.5 + semver: 7.3.7 which: 2.0.2 transitivePeerDependencies: - bluebird @@ -6555,7 +6856,7 @@ packages: mkdirp: 1.0.4 npm-pick-manifest: 7.0.2 proc-log: 2.0.1 - promise-inflight: 1.0.1 + promise-inflight: 1.0.1_bluebird@3.7.2 promise-retry: 2.0.1 semver: 7.3.7 which: 2.0.2 @@ -6849,6 +7150,31 @@ packages: rollup: 2.78.1 dev: false + /@rollup/plugin-commonjs/20.0.0_rollup@2.78.1: + resolution: {integrity: sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^2.38.3 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.78.1 + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.2.3 + is-reference: 1.2.1 + magic-string: 0.25.9 + resolve: 1.22.1 + rollup: 2.78.1 + dev: true + + /@rollup/plugin-json/4.1.0_rollup@2.78.1: + resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.78.1 + rollup: 2.78.1 + dev: true + /@rollup/plugin-node-resolve/11.2.1_rollup@2.78.1: resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} engines: {node: '>= 10.0.0'} @@ -6864,6 +7190,21 @@ packages: rollup: 2.78.1 dev: false + /@rollup/plugin-node-resolve/13.3.0_rollup@2.78.1: + resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^2.42.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.78.1 + '@types/resolve': 1.17.1 + deepmerge: 4.2.2 + is-builtin-module: 3.2.0 + is-module: 1.0.0 + resolve: 1.22.1 + rollup: 2.78.1 + dev: true + /@rollup/plugin-node-resolve/7.1.3_rollup@1.32.1: resolution: {integrity: sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==} engines: {node: '>= 8.0.0'} @@ -6920,7 +7261,6 @@ packages: estree-walker: 1.0.1 picomatch: 2.3.1 rollup: 2.78.1 - dev: false /@rushstack/eslint-patch/1.1.4: resolution: {integrity: sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==} @@ -7339,7 +7679,6 @@ packages: /@types/estree/0.0.39: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - dev: false /@types/estree/0.0.50: resolution: {integrity: sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==} @@ -7530,7 +7869,6 @@ packages: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: '@types/node': 18.7.14 - dev: false /@types/retry/0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -7604,7 +7942,7 @@ packages: /@types/webpack-sources/0.1.9: resolution: {integrity: sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new==} dependencies: - '@types/node': 12.20.55 + '@types/node': 18.7.14 '@types/source-list-map': 0.1.2 source-map: 0.6.1 dev: true @@ -8164,10 +8502,9 @@ packages: svg-tags: 1.0.0 dev: true - /@vue/babel-preset-app/4.5.19_core-js@3.25.0+vue@2.7.10: + /@vue/babel-preset-app/4.5.19_vue@2.7.10: resolution: {integrity: sha512-VCNRiAt2P/bLo09rYt3DLe6xXUMlhJwrvU18Ddd/lYJgC7s8+wvhgYs+MTx4OiAXdu58drGwSBO9SPx7C6J82Q==} peerDependencies: - core-js: ^3 vue: ^2 || ^3.0.0-0 peerDependenciesMeta: core-js: @@ -8196,10 +8533,9 @@ packages: - supports-color dev: true - /@vue/babel-preset-app/4.5.19_core-js@3.25.0+vue@3.2.38: + /@vue/babel-preset-app/4.5.19_vue@3.2.38: resolution: {integrity: sha512-VCNRiAt2P/bLo09rYt3DLe6xXUMlhJwrvU18Ddd/lYJgC7s8+wvhgYs+MTx4OiAXdu58drGwSBO9SPx7C6J82Q==} peerDependencies: - core-js: ^3 vue: ^2 || ^3.0.0-0 peerDependenciesMeta: core-js: @@ -8335,13 +8671,13 @@ packages: resolution: {integrity: sha512-GdxvNSmOw7NHIazCO8gTK+xZbaOmScTtxj6eHVeMbYpDYVPJ+th3VMLWNpw/b6uOjwzzcyKlA5dRQ1DAb+gF/g==} dev: true - /@vue/cli-plugin-babel/4.5.19_akjmzrauofhfgs3vcqzo2mt42m: + /@vue/cli-plugin-babel/4.5.19_kmrx22catm3sq2nftmhgvvcnta: resolution: {integrity: sha512-8ebXzaMW9KNTMAN6+DzkhFsjty1ieqT7hIW5Lbk4v30Qhfjkms7lBWyXPGkoq+wAikXFa1Gnam2xmWOBqDDvWg==} peerDependencies: '@vue/cli-service': ^3.0.0 || ^4.0.0-0 dependencies: '@babel/core': 7.18.13 - '@vue/babel-preset-app': 4.5.19_core-js@3.25.0+vue@2.7.10 + '@vue/babel-preset-app': 4.5.19_vue@2.7.10 '@vue/cli-service': 4.5.19_42puyn3dcxirnpdjnosl7pbb6a '@vue/cli-shared-utils': 4.5.19 babel-loader: 8.2.5_li4tts7salxwv3rbqjnooz7t7e @@ -8349,20 +8685,19 @@ packages: thread-loader: 2.1.3_webpack@4.46.0 webpack: 4.46.0 transitivePeerDependencies: - - core-js - supports-color - vue - webpack-cli - webpack-command dev: true - /@vue/cli-plugin-babel/4.5.19_ihvd7qlohhjilpgep6h7z25kqm: + /@vue/cli-plugin-babel/4.5.19_sbbclqkts6ax6utdc5esg2ycni: resolution: {integrity: sha512-8ebXzaMW9KNTMAN6+DzkhFsjty1ieqT7hIW5Lbk4v30Qhfjkms7lBWyXPGkoq+wAikXFa1Gnam2xmWOBqDDvWg==} peerDependencies: '@vue/cli-service': ^3.0.0 || ^4.0.0-0 dependencies: '@babel/core': 7.18.13 - '@vue/babel-preset-app': 4.5.19_core-js@3.25.0+vue@3.2.38 + '@vue/babel-preset-app': 4.5.19_vue@3.2.38 '@vue/cli-service': 4.5.19_lkq4ousnc7vzls4uafs2kgxwfm '@vue/cli-shared-utils': 4.5.19 babel-loader: 8.2.5_li4tts7salxwv3rbqjnooz7t7e @@ -8370,7 +8705,6 @@ packages: thread-loader: 2.1.3_webpack@4.46.0 webpack: 4.46.0 transitivePeerDependencies: - - core-js - supports-color - vue - webpack-cli @@ -9438,6 +9772,15 @@ packages: fast-deep-equal: 3.1.3 dev: false + /ajv/6.12.4: + resolution: {integrity: sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + /ajv/6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -10279,7 +10622,7 @@ packages: webpack: '>=2' dependencies: '@babel/core': 7.14.8 - find-cache-dir: 3.3.1 + find-cache-dir: 3.3.2 loader-utils: 1.4.0 make-dir: 3.1.0 schema-utils: 2.7.1 @@ -10653,7 +10996,7 @@ packages: dev: true /batch/0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + resolution: {integrity: sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=} /bcrypt-pbkdf/1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} @@ -10965,7 +11308,6 @@ packages: /builtin-modules/3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} - dev: false /builtin-status-codes/3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} @@ -10986,7 +11328,7 @@ packages: dev: true /bytes/3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + resolution: {integrity: sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=} engines: {node: '>= 0.8'} /bytes/3.1.2: @@ -11006,7 +11348,7 @@ packages: mississippi: 3.0.0 mkdirp: 0.5.6 move-concurrently: 1.0.1 - promise-inflight: 1.0.1 + promise-inflight: 1.0.1_bluebird@3.7.2 rimraf: 2.7.1 ssri: 6.0.2 unique-filename: 1.1.1 @@ -11028,7 +11370,7 @@ packages: minipass-pipeline: 1.2.4 mkdirp: 1.0.4 p-map: 4.0.0 - promise-inflight: 1.0.1 + promise-inflight: 1.0.1_bluebird@3.7.2 rimraf: 3.0.2 ssri: 8.0.1 tar: 6.1.11 @@ -11360,6 +11702,10 @@ packages: isobject: 3.0.1 static-extend: 0.1.2 + /classlist.js/1.1.20150312: + resolution: {integrity: sha512-eR8yB970+yGslcTnJnROX2icsMa8v/KVLv/sgv3NhSvZSHgam64XNSF2TyJnKIfsnTFJBcTdrIneYqUIrvxLpg==} + dev: true + /classnames/2.3.1: resolution: {integrity: sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==} dev: false @@ -11596,7 +11942,6 @@ packages: /commander/8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - dev: false /commander/9.4.0: resolution: {integrity: sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==} @@ -11681,7 +12026,7 @@ packages: dev: false /concat-map/0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} /concat-stream/1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} @@ -11772,7 +12117,7 @@ packages: lodash: ^4.17.20 marko: ^3.14.4 mote: ^0.2.0 - mustache: ^3.0.0 + mustache: ^4.0.1 nunjucks: ^3.2.2 plates: ~0.4.11 pug: ^3.0.0 @@ -12000,8 +12345,8 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - JSONStream: 1.3.5 is-text-path: 1.0.1 + JSONStream: 1.3.5 lodash: 4.17.21 meow: 8.1.2 split2: 3.2.2 @@ -12039,7 +12384,7 @@ packages: safe-buffer: 5.1.2 /cookie-signature/1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} /cookie/0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} @@ -12412,7 +12757,7 @@ packages: postcss-modules-values: 3.0.0 postcss-value-parser: 4.2.0 schema-utils: 2.7.1 - semver: 7.3.2 + semver: 7.3.7 webpack: 4.44.2 dev: false @@ -12799,6 +13144,10 @@ packages: /csstype/3.1.0: resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==} + /cuint/0.2.2: + resolution: {integrity: sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==} + dev: true + /custom-event/1.0.1: resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==} dev: true @@ -12929,6 +13278,7 @@ packages: optional: true dependencies: ms: 2.1.2 + dev: true /debug/4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -13390,7 +13740,7 @@ packages: dev: true /ee-first/1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} /ejs/2.7.4: resolution: {integrity: sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==} @@ -13519,7 +13869,7 @@ packages: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.12 - '@types/node': 12.20.55 + '@types/node': 18.7.14 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -15037,7 +15387,6 @@ packages: /estree-walker/1.0.1: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - dev: false /estree-walker/2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -15596,6 +15945,10 @@ packages: resolve-dir: 0.1.1 dev: true + /find-parent-dir/0.3.1: + resolution: {integrity: sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A==} + dev: true + /find-pkg/0.1.2: resolution: {integrity: sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==} engines: {node: '>=0.10.0'} @@ -16655,7 +17008,7 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.2 + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -16960,6 +17313,12 @@ packages: engines: {node: '>=10'} dev: true + /injection-js/2.4.0: + resolution: {integrity: sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==} + dependencies: + tslib: 2.4.0 + dev: true + /inquirer/7.3.3: resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} engines: {node: '>=8.0.0'} @@ -17129,6 +17488,13 @@ packages: /is-buffer/1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + /is-builtin-module/3.2.0: + resolution: {integrity: sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + /is-callable/1.2.4: resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} engines: {node: '>= 0.4'} @@ -17270,7 +17636,6 @@ packages: /is-module/1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: false /is-negative-zero/2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} @@ -17353,6 +17718,12 @@ packages: resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} dev: true + /is-reference/1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 1.0.0 + dev: true + /is-regex/1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -18411,7 +18782,7 @@ packages: /karma-source-map-support/1.4.0: resolution: {integrity: sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==} dependencies: - source-map-support: 0.5.19 + source-map-support: 0.5.21 dev: true /karma/6.3.20: @@ -19066,7 +19437,7 @@ packages: resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} /media-typer/0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} engines: {node: '>= 0.6'} /mem/8.1.1: @@ -19127,7 +19498,7 @@ packages: dev: true /merge-descriptors/1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} /merge-source-map/1.1.0: resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==} @@ -19219,6 +19590,12 @@ packages: engines: {node: '>=4'} hasBin: true + /mime/2.5.2: + resolution: {integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==} + engines: {node: '>=4.0.0'} + hasBin: true + dev: true + /mime/2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} @@ -19615,6 +19992,76 @@ packages: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} dev: false + /ng-packagr/12.2.7_g7mwn5bjzj62s2pjez7yl6iuhu: + resolution: {integrity: sha512-ccNeboOdLGOmqk3hvN/4tUO+e7VXZM5f/uj4SYVRtaLT9DuOR63Ln4kn4NOhlxkcmVgqJM8Iwd3M1hSn215nSg==} + engines: {node: ^12.14.1 || >=14.0.0} + hasBin: true + peerDependencies: + '@angular/compiler-cli': ^12.0.0 || ^12.2.0-next.0 + tslib: ^2.1.0 + typescript: ~4.2.3 || ~4.3.2 + dependencies: + '@angular/compiler-cli': 12.2.16_wy6d3tkktgm6qvuj6t42uum7ly + '@rollup/plugin-commonjs': 20.0.0_rollup@2.78.1 + '@rollup/plugin-json': 4.1.0_rollup@2.78.1 + '@rollup/plugin-node-resolve': 13.3.0_rollup@2.78.1 + ajv: 8.11.0 + ansi-colors: 4.1.3 + browserslist: 4.21.3 + cacache: 15.3.0 + chokidar: 3.5.3 + commander: 8.3.0 + dependency-graph: 0.11.0 + esbuild-wasm: 0.13.8 + find-cache-dir: 3.3.2 + glob: 7.2.3 + injection-js: 2.4.0 + jsonc-parser: 3.2.0 + less: 4.1.1 + node-sass-tilde-importer: 1.0.2 + ora: 5.4.1 + postcss: 8.4.16 + postcss-preset-env: 6.7.0 + postcss-url: 10.1.3_postcss@8.4.16 + rollup: 2.78.1 + rollup-plugin-sourcemaps: 0.6.3_jrxa6rp3z2wxreoqwnkshuyesm + rxjs: 6.6.7 + sass: 1.36.0 + stylus: 0.54.8 + tslib: 2.4.0 + typescript: 4.3.5 + optionalDependencies: + esbuild: 0.13.8 + transitivePeerDependencies: + - '@types/node' + - bluebird + - supports-color + dev: true + + /ng-zorro-antd/12.1.1_l3vg24z2c2kshbnbim5apeyk34: + resolution: {integrity: sha512-5Pc8IZS7VCH+iJNumr84PjJY+tRcVQQ/2KihmABREXuFdYTARGPUDgZJt+v6MnMU1K926ym1sSx/cHfiRq2yiA==} + peerDependencies: + '@angular/animations': ^12.1.0 + '@angular/common': ^12.1.0 + '@angular/core': ^12.1.0 + '@angular/forms': ^12.1.0 + '@angular/platform-browser': ^12.1.0 + '@angular/router': ^12.1.0 + dependencies: + '@angular/animations': 12.2.16_@angular+core@12.2.16 + '@angular/cdk': 12.2.13_qh4d7d2l3tkwmzcyowa4436dai + '@angular/common': 12.2.16_wg5cpvw6b54u2dgutrs2a2rg2m + '@angular/core': 12.2.16_rxjs@6.6.7+zone.js@0.11.8 + '@angular/forms': 12.2.16_mkqvoiprcf4ld42gjf3h4clm4q + '@angular/platform-browser': 12.2.16_6vfu5hxfyqsufaicqluldoy62a + '@angular/router': 12.2.16_mkqvoiprcf4ld42gjf3h4clm4q + '@ant-design/icons-angular': 12.0.3_mkqvoiprcf4ld42gjf3h4clm4q + date-fns: 2.29.2 + tslib: 2.4.0 + transitivePeerDependencies: + - rxjs + dev: false + /nice-napi/1.0.2: resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==} os: ['!win32'] @@ -19758,6 +20205,12 @@ packages: /node-releases/2.0.6: resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + /node-sass-tilde-importer/1.0.2: + resolution: {integrity: sha512-Swcmr38Y7uB78itQeBm3mThjxBy9/Ah/ykPIaURY/L6Nec9AyRoL/jJ7ECfMR+oZeCTVQNxVMu/aHU+TLRVbdg==} + dependencies: + find-parent-dir: 0.3.1 + dev: true + /nopt/5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} @@ -19860,7 +20313,7 @@ packages: resolution: {integrity: sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==} engines: {node: '>=10'} dependencies: - semver: 7.3.5 + semver: 7.3.7 dev: true /npm-install-checks/5.0.0: @@ -19884,7 +20337,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - semver: 7.3.5 + semver: 7.3.7 validate-npm-package-name: 3.0.0 dev: true @@ -19926,7 +20379,7 @@ packages: npm-install-checks: 4.0.0 npm-normalize-package-bin: 1.0.1 npm-package-arg: 8.1.5 - semver: 7.3.5 + semver: 7.3.7 dev: true /npm-pick-manifest/7.0.2: @@ -20552,7 +21005,7 @@ packages: /parse5/5.1.1: resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} - dev: true + requiresBuild: true /parse5/6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} @@ -22423,6 +22876,19 @@ packages: postcss-selector-parser: 6.0.10 dev: false + /postcss-url/10.1.3_postcss@8.4.16: + resolution: {integrity: sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==} + engines: {node: '>=10'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + make-dir: 3.1.0 + mime: 2.5.2 + minimatch: 3.0.4 + postcss: 8.4.16 + xxhashjs: 0.2.2 + dev: true + /postcss-value-parser/3.3.1: resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==} @@ -22576,6 +23042,16 @@ packages: bluebird: optional: true + /promise-inflight/1.0.1_bluebird@3.7.2: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + dependencies: + bluebird: 3.7.2 + /promise-retry/2.0.1: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} @@ -24302,12 +24778,6 @@ packages: /react-dev-utils/11.0.4_a7xmpkungfd35is2c4kqy55h3i: resolution: {integrity: sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==} engines: {node: '>=10'} - peerDependencies: - typescript: '>=2.7' - webpack: '>=4' - peerDependenciesMeta: - typescript: - optional: true dependencies: '@babel/code-frame': 7.10.4 address: 1.1.2 @@ -24337,18 +24807,14 @@ packages: transitivePeerDependencies: - eslint - supports-color + - typescript - vue-template-compiler + - webpack dev: false /react-dev-utils/12.0.1_skpnekq7gq3zdkwzxpcrmjcczy: resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} - peerDependencies: - typescript: '>=2.7' - webpack: '>=4' - peerDependenciesMeta: - typescript: - optional: true dependencies: '@babel/code-frame': 7.18.6 address: 1.2.0 @@ -24378,7 +24844,9 @@ packages: transitivePeerDependencies: - eslint - supports-color + - typescript - vue-template-compiler + - webpack dev: false /react-dom/16.13.1_react@16.13.1: @@ -25022,6 +25490,22 @@ packages: rollup-pluginutils: 2.8.2 dev: false + /rollup-plugin-sourcemaps/0.6.3_jrxa6rp3z2wxreoqwnkshuyesm: + resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} + engines: {node: '>=10.0.0'} + peerDependencies: + '@types/node': '>=10.0.0' + rollup: '>=0.31.2' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.78.1 + '@types/node': 12.20.55 + rollup: 2.78.1 + source-map-resolve: 0.6.0 + dev: true + /rollup-plugin-terser/5.3.1_rollup@1.32.1: resolution: {integrity: sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==} peerDependencies: @@ -25076,7 +25560,6 @@ packages: hasBin: true optionalDependencies: fsevents: 2.3.2 - dev: false /run-async/2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} @@ -25093,6 +25576,13 @@ packages: dependencies: aproba: 1.2.0 + /rxjs/6.6.2: + resolution: {integrity: sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + dev: true + /rxjs/6.6.7: resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} engines: {npm: '>=2.0.0'} @@ -25783,6 +26273,14 @@ packages: source-map-url: 0.4.1 urix: 0.1.0 + /source-map-resolve/0.6.0: + resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.0 + dev: true + /source-map-support/0.5.19: resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==} dependencies: @@ -26291,7 +26789,7 @@ packages: dependencies: css-parse: 2.0.0 debug: 3.1.0 - glob: 7.1.7 + glob: 7.2.3 mkdirp: 1.0.4 safer-buffer: 2.1.2 sax: 1.2.4 @@ -26410,12 +26908,10 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 - /tailwindcss/3.1.8_postcss@8.4.16: + /tailwindcss/3.1.8: resolution: {integrity: sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==} engines: {node: '>=12.13.0'} hasBin: true - peerDependencies: - postcss: ^8.0.9 dependencies: arg: 5.0.2 chokidar: 3.5.3 @@ -26969,7 +27465,7 @@ packages: dev: true /tty-browserify/0.0.0: - resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} + resolution: {integrity: sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=} /tunnel-agent/0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -27337,7 +27833,7 @@ packages: resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} /utils-merge/1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} engines: {node: '>= 0.4.0'} /uuid/3.4.0: @@ -27396,7 +27892,7 @@ packages: resolution: {integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==} /verror/1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + resolution: {integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=} engines: {'0': node >=0.6.0} dependencies: assert-plus: 1.0.0 @@ -27913,12 +28409,8 @@ packages: resolution: {integrity: sha512-uKNKpFOVeWNqS2mrBZqnpLyXJo5Q+vnkex6JvpENvhXHFNBW/SJTP8vJywLuVT3DpxwXcF9N0dyIiZ4/NpTexQ==} dev: false - /vue-router/3.6.4_vue@2.7.10: + /vue-router/3.6.4: resolution: {integrity: sha512-QSJs5aKKPiwBH++gelVbnq0ZFbUZXjlsjAklUM+F8dtd49YY72QsD1uGpBk/cqLK1bkZ8HiqPjS8NkhaGtpqHw==} - peerDependencies: - vue: ^2 - dependencies: - vue: 2.7.10 dev: false /vue-router/4.1.5_vue@3.2.38: @@ -29272,6 +29764,12 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + /xxhashjs/0.2.2: + resolution: {integrity: sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==} + dependencies: + cuint: 0.2.2 + dev: true + /y18n/4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} @@ -29378,4 +29876,3 @@ packages: resolution: {integrity: sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==} dependencies: tslib: 2.4.0 - dev: false