From 1a66742667f41607c6c2d39756258418b1f2e914 Mon Sep 17 00:00:00 2001 From: Mu-Tsun Tsai Date: Tue, 9 Jan 2024 14:25:13 +0800 Subject: [PATCH 01/11] Improve coverage --- src/core/design/layout/pattern/device.ts | 1 + src/core/design/layout/trace/repoTrace.ts | 3 +++ src/core/design/tasks/patternContour.ts | 8 ++++++-- src/core/math/geometry/line.ts | 3 +-- src/core/math/geometry/point.ts | 10 ++++------ src/core/math/geometry/vector.ts | 3 +-- .../math/sweepLine/polyBool/aaUnion/aaEventProvider.ts | 10 +++++++++- src/shared/types/constants.ts | 8 -------- src/shared/types/geometry.ts | 5 ----- 9 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/core/design/layout/pattern/device.ts b/src/core/design/layout/pattern/device.ts index feeb9a51..72e688e7 100644 --- a/src/core/design/layout/pattern/device.ts +++ b/src/core/design/layout/pattern/device.ts @@ -287,6 +287,7 @@ export class Device implements ISerializable { for(const code of codes) { if(getNodeId(code) == corner.e) return getQuadrant(code); } + /* istanbul ignore next: type-safety */ return undefined; } diff --git a/src/core/design/layout/trace/repoTrace.ts b/src/core/design/layout/trace/repoTrace.ts index 0d503ab2..2ffced9f 100644 --- a/src/core/design/layout/trace/repoTrace.ts +++ b/src/core/design/layout/trace/repoTrace.ts @@ -43,11 +43,13 @@ export class RepoTrace extends Trace { const a = all[first - 1].$flap.id, b = all[first].$flap.id; const ridge = this._getIntersectionRidge(a, b); // It is possible that the intersection ridge is missing in legacy patterns. + /* istanbul ignore else: legacy */ if(ridge) start = ridge.p1; } if(last < all.length - 1) { const a = all[last].$flap.id, b = all[last + 1].$flap.id; const ridge = this._getIntersectionRidge(a, b); + /* istanbul ignore else: legacy */ if(ridge) end = ridge.p1; } } @@ -68,6 +70,7 @@ export class RepoTrace extends Trace { ///////////////////////////////////////////////////////////////////////////////////////////////////// ///#if DEBUG + /* istanbul ignore next: debug */ public createTestCase(hinges: Path, start: Point, end: Point): string { const simp = (s: object): string => JSON.stringify(s).replace(/"(\w+)":/g, "$1:"); const ridges = `Line.$parseTest(${simp(this.$ridges)})`; diff --git a/src/core/design/tasks/patternContour.ts b/src/core/design/tasks/patternContour.ts index d60646c5..ffa007cd 100644 --- a/src/core/design/tasks/patternContour.ts +++ b/src/core/design/tasks/patternContour.ts @@ -37,6 +37,7 @@ function patternContour(): void { processNode(node, trace, coveredQuadrants); } } catch(e) { + /* istanbul ignore next: debug */ if(e instanceof InvalidParameterError) { // When this happens, it means that the generated // pattern doesn't make sense in the first place, @@ -44,8 +45,9 @@ function patternContour(): void { // In theory this shouldn't happen, but just in case, // we catch the error here to prevent fatal crashes. continue; + } else { + throw e; } - throw e; } } @@ -60,8 +62,9 @@ function patternContour(): void { } } catch(e) { // Similarly + /* istanbul ignore next: debug */ if(e instanceof InvalidParameterError) continue; - throw e; + else throw e; } } @@ -142,6 +145,7 @@ export function clearPatternContourForRepo(repo: Repository): void { function* nodesOfRepo(repo: Repository): Generator { for(const id of repo.$nodeSet.$nodes) { const node = State.$tree.$nodes[id]; + /* istanbul ignore else: type-safety */ if(node) yield node; } } diff --git a/src/core/math/geometry/line.ts b/src/core/math/geometry/line.ts index f0da3625..f6ec5b76 100644 --- a/src/core/math/geometry/line.ts +++ b/src/core/math/geometry/line.ts @@ -110,8 +110,7 @@ export class Line { * Whether a given point is in this line segment * (endpoints are not included by default). */ - public $contains(point: Point | IPoint, includeEndpoints: boolean = false): boolean { - const p = point instanceof Point ? point : new Point(point); + public $contains(p: Point, includeEndpoints: boolean = false): boolean { if(includeEndpoints && (p.eq(this.p1) || p.eq(this.p2))) return true; const v1 = p.$sub(this.p1), v2 = p.$sub(this.p2); return v1._x.mul(v2._y).eq(v2._x.mul(v1._y)) && v1.$dot(v2) < 0; diff --git a/src/core/math/geometry/point.ts b/src/core/math/geometry/point.ts index 8c96f07f..a54d2663 100644 --- a/src/core/math/geometry/point.ts +++ b/src/core/math/geometry/point.ts @@ -17,10 +17,9 @@ export class Point extends Couple implements IPoint { /** Create a {@link Point} object */ constructor(); - constructor(c: Couple); constructor(p: IPoint); constructor(x: Rational, y: Rational); - constructor(...p: [Couple | IPoint] | [Rational, Rational]) { + constructor(...p: [IPoint] | [Rational, Rational]) { if(p[0] instanceof Couple) super(p[0]._x, p[0]._y); else if(p.length == 1) super(p[0].x, p[0].y); else super(...p); @@ -32,11 +31,10 @@ export class Point extends Couple implements IPoint { } public $sub(v: Vector): Point; - public $sub(p: IPoint): Vector; - public $sub(c: Vector | IPoint): Point | Vector { + public $sub(p: Point): Vector; + public $sub(c: Vector | Point): Point | Vector { if(c instanceof Vector) return new Point(this._x.sub(c._x), this._y.sub(c._y)); - else if(c instanceof Point) return new Vector(this._x.sub(c._x), this._y.sub(c._y)); - else return new Vector(this._x.sub(new Fraction(c.x)), this._y.sub(new Fraction(c.y))); + else return new Vector(this._x.sub(c._x), this._y.sub(c._y)); } /** {@link Point} is allowed to be compared with {@link IPoint}s. */ diff --git a/src/core/math/geometry/vector.ts b/src/core/math/geometry/vector.ts index 05d40779..49b5b980 100644 --- a/src/core/math/geometry/vector.ts +++ b/src/core/math/geometry/vector.ts @@ -17,10 +17,9 @@ export class Vector extends Couple { /**Create a Vector object */ constructor(); - constructor(c: Couple); constructor(p: IPoint); constructor(x: Rational, y: Rational); - constructor(...p: [Couple | IPoint] | [Rational, Rational]) { + constructor(...p: [IPoint] | [Rational, Rational]) { if(p.length == 1) super(p[0].x, p[0].y); else super(...p); } diff --git a/src/core/math/sweepLine/polyBool/aaUnion/aaEventProvider.ts b/src/core/math/sweepLine/polyBool/aaUnion/aaEventProvider.ts index 4d51912d..18ce92b7 100644 --- a/src/core/math/sweepLine/polyBool/aaUnion/aaEventProvider.ts +++ b/src/core/math/sweepLine/polyBool/aaUnion/aaEventProvider.ts @@ -1,11 +1,11 @@ import { EndEvent, StartEvent } from "../../classes/event"; import { EventProvider } from "../../classes/eventProvider"; -import { COORDINATE_SHIFT } from "shared/types/constants"; import type { Comparator } from "shared/types/types"; import type { SweepEvent } from "../../classes/event"; import type { AALineSegment } from "../../classes/segment/aaLineSegment"; import type { ISegment } from "../../classes/segment/segment"; +import type { MAX_SHEET_SIZE, MAX_TREE_HEIGHT } from "shared/types/constants"; const SHIFT_Y = 17; const SHIFT_START = 16; @@ -81,3 +81,11 @@ function getKey(point: IPoint, isStart: 1 | 0, segment: ISegment, delta: -1 | 1, id ); } + +/** + * In order to ensure that the coordinates are in the range of [-16384, 16384), + * we set hard limit on the sheet size to be {@link MAX_SHEET_SIZE}, + * and then we shifted the value by -{@link COORDINATE_SHIFT}, + * together with {@link MAX_TREE_HEIGHT} this achieves the goal. + */ +const COORDINATE_SHIFT = 4096; diff --git a/src/shared/types/constants.ts b/src/shared/types/constants.ts index 3552a7d0..5532384c 100644 --- a/src/shared/types/constants.ts +++ b/src/shared/types/constants.ts @@ -11,13 +11,5 @@ export const MAX_SHEET_SIZE = 8192; */ export const MAX_TREE_HEIGHT = 11586; -/** - * In order to ensure that the coordinates are in the range of [-16384, 16384), - * we set hard limit on the sheet size to be {@link MAX_SHEET_SIZE}, - * and then we shifted the value by -{@link COORDINATE_SHIFT}, - * together with {@link MAX_TREE_HEIGHT} this achieves the goal. - */ -export const COORDINATE_SHIFT = 4096; - export const MIN_RECT_SIZE = 4; // Used to be 8, now 4. export const MIN_DIAG_SIZE = 6; diff --git a/src/shared/types/geometry.ts b/src/shared/types/geometry.ts index 6d52f623..c41b9d39 100644 --- a/src/shared/types/geometry.ts +++ b/src/shared/types/geometry.ts @@ -71,8 +71,3 @@ export function leg(c: number, b: number): number { export function xyComparator(p1: IPoint, p2: IPoint): number { return p1.x - p2.x || p1.y - p2.y; } - -/** Reverses the direction of all paths in a {@link Polygon} and returns the new polygon */ -export function reverse(polygon: Polygon): Polygon { - return polygon.map(path => path.toReversed()); -} From fdd425ad086a81a2816bbae336410bb2cc909c09 Mon Sep 17 00:00:00 2001 From: Mu-Tsun Tsai Date: Tue, 9 Jan 2024 15:23:21 +0800 Subject: [PATCH 02/11] Update dependencies --- package.json | 24 +- pnpm-lock.yaml | 881 +++++++++++++++++++++++++------------------------ 2 files changed, 457 insertions(+), 448 deletions(-) diff --git a/package.json b/package.json index c29a2922..8461a17a 100644 --- a/package.json +++ b/package.json @@ -38,13 +38,13 @@ "@types/gulp": "^4.0.17", "@types/gulp-load-plugins": "^0.0.37", "@types/mocha": "^10.0.6", - "@types/node": "^20.10.6", + "@types/node": "^20.10.7", "@types/wicg-file-system-access": "^2023.10.4", - "@typescript-eslint/eslint-plugin": "^6.17.0", - "@typescript-eslint/parser": "^6.17.0", - "@vue/compiler-sfc": "^3.4.4", + "@typescript-eslint/eslint-plugin": "^6.18.1", + "@typescript-eslint/parser": "^6.18.1", + "@vue/compiler-sfc": "^3.4.6", "@vue/eslint-config-typescript": "12.0.0", - "chai": "^4.3.10", + "chai": "^4.4.0", "del": "7.1.0", "esbuild": "^0.19.11", "esbuild-ifdef": "^0.2.0", @@ -83,22 +83,22 @@ "gulp-workbox": "^1.0.6", "http-server": "^14.1.1", "inquirer": "^9.2.12", - "jsdom": "^23.0.1", + "jsdom": "^23.2.0", "lazypipe": "^1.0.2", "marked": "^11.1.1", "mocha": "^10.2.0", "mocha-suppress-logs": "^0.4.1", "nyc": "^15.1.0", - "postcss": "^8.4.32", + "postcss": "^8.4.33", "postcss-html": "^1.5.0", "postcss-preset-env": "^9.3.0", "require-dir": "^1.2.0", "resolve": "^1.22.8", "sass": "^1.69.7", "stylelint": "^16.1.0", - "stylelint-config-clean-order": "^5.2.0", + "stylelint-config-clean-order": "^5.3.0", "stylelint-config-recommended-vue": "^1.5.0", - "stylelint-config-standard-scss": "^12.0.0", + "stylelint-config-standard-scss": "^13.0.0", "stylelint-no-unsupported-browser-features": "^8.0.0", "through2": "^4.0.2", "ts-node": "^10.9.2", @@ -106,7 +106,7 @@ "ttf2woff2": "^5.0.0", "typescript": "5.3.3", "vinyl-ftp": "^0.6.1", - "vue-eslint-parser": "^9.3.2", + "vue-eslint-parser": "^9.4.0", "workbox-build": "^7.0.0", "yargs": "^17.7.2" }, @@ -129,8 +129,8 @@ "idb-keyval": "^6.2.1", "jszip": "^3.10.1", "lzma": "^2.3.2", - "vue": "^3.4.4", - "vue-i18n": "^9.8.0", + "vue": "^3.4.6", + "vue-i18n": "^9.9.0", "vue-slicksort": "^2.0.5", "workbox-broadcast-update": "^7.0.0", "workbox-google-analytics": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9805ceb7..733b8d34 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,14 +67,14 @@ dependencies: specifier: ^2.3.2 version: 2.3.2 vue: - specifier: ^3.4.4 - version: 3.4.4(typescript@5.3.3) + specifier: ^3.4.6 + version: 3.4.6(typescript@5.3.3) vue-i18n: - specifier: ^9.8.0 - version: 9.8.0(vue@3.4.4) + specifier: ^9.9.0 + version: 9.9.0(vue@3.4.6) vue-slicksort: specifier: ^2.0.5 - version: 2.0.5(vue@3.4.4) + version: 2.0.5(vue@3.4.6) workbox-broadcast-update: specifier: ^7.0.0 version: 7.0.0 @@ -97,7 +97,7 @@ devDependencies: version: 2.1.2 '@intlify/vue-i18n-extensions': specifier: ^5.0.1 - version: 5.0.1(vue-i18n@9.8.0)(vue@3.4.4) + version: 5.0.1(vue-i18n@9.9.0)(vue@3.4.6) '@makeomatic/gulp-wrap-js': specifier: ^1.0.2 version: 1.0.2 @@ -126,26 +126,26 @@ devDependencies: specifier: ^10.0.6 version: 10.0.6 '@types/node': - specifier: ^20.10.6 - version: 20.10.6 + specifier: ^20.10.7 + version: 20.10.7 '@types/wicg-file-system-access': specifier: ^2023.10.4 version: 2023.10.4 '@typescript-eslint/eslint-plugin': - specifier: ^6.17.0 - version: 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.56.0)(typescript@5.3.3) + specifier: ^6.18.1 + version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: ^6.17.0 - version: 6.17.0(eslint@8.56.0)(typescript@5.3.3) + specifier: ^6.18.1 + version: 6.18.1(eslint@8.56.0)(typescript@5.3.3) '@vue/compiler-sfc': - specifier: ^3.4.4 - version: 3.4.4 + specifier: ^3.4.6 + version: 3.4.6 '@vue/eslint-config-typescript': specifier: 12.0.0 version: 12.0.0(eslint-plugin-vue@9.19.2)(eslint@8.56.0)(typescript@5.3.3) chai: - specifier: ^4.3.10 - version: 4.3.10 + specifier: ^4.4.0 + version: 4.4.0 del: specifier: 7.1.0 version: 7.1.0 @@ -157,7 +157,7 @@ devDependencies: version: 0.2.0(esbuild@0.19.11) esbuild-plugin-vue-next: specifier: npm:@wfrog/esbuild-plugin-vue-next@^0.1.5 - version: /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.4) + version: /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.6) esbuild-sass-plugin: specifier: ^2.16.1 version: 2.16.1(esbuild@0.19.11) @@ -166,7 +166,7 @@ devDependencies: version: 8.56.0 eslint-import-resolver-typescript: specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + version: 3.6.1(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) eslint-plugin-compat: specifier: ^4.2.0 version: 4.2.0(eslint@8.56.0) @@ -175,7 +175,7 @@ devDependencies: version: 7.1.0 eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + version: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-jsdoc: specifier: ^48.0.2 version: 48.0.2(eslint@8.56.0) @@ -196,7 +196,7 @@ devDependencies: version: 2.0.0 global-jsdom: specifier: ^9.2.0 - version: 9.2.0(jsdom@23.0.1) + version: 9.2.0(jsdom@23.2.0) gulp: specifier: ^4.0.2 version: 4.0.2 @@ -232,7 +232,7 @@ devDependencies: version: 1.4.0 gulp-postcss: specifier: ^9.0.1 - version: 9.0.1(postcss@8.4.32)(ts-node@10.9.2) + version: 9.0.1(postcss@8.4.33)(ts-node@10.9.2) gulp-purgecss: specifier: 5.0.0 version: 5.0.0 @@ -250,7 +250,7 @@ devDependencies: version: 1.0.1 gulp-vue-ssg: specifier: ^1.2.2 - version: 1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.4) + version: 1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.6) gulp-workbox: specifier: ^1.0.6 version: 1.0.6(workbox-build@7.0.0) @@ -261,8 +261,8 @@ devDependencies: specifier: ^9.2.12 version: 9.2.12 jsdom: - specifier: ^23.0.1 - version: 23.0.1 + specifier: ^23.2.0 + version: 23.2.0 lazypipe: specifier: ^1.0.2 version: 1.0.2 @@ -279,14 +279,14 @@ devDependencies: specifier: ^15.1.0 version: 15.1.0 postcss: - specifier: ^8.4.32 - version: 8.4.32 + specifier: ^8.4.33 + version: 8.4.33 postcss-html: specifier: ^1.5.0 version: 1.5.0 postcss-preset-env: specifier: ^9.3.0 - version: 9.3.0(postcss@8.4.32) + version: 9.3.0(postcss@8.4.33) require-dir: specifier: ^1.2.0 version: 1.2.0 @@ -300,14 +300,14 @@ devDependencies: specifier: ^16.1.0 version: 16.1.0(typescript@5.3.3) stylelint-config-clean-order: - specifier: ^5.2.0 - version: 5.2.0(stylelint@16.1.0) + specifier: ^5.3.0 + version: 5.3.0(stylelint@16.1.0) stylelint-config-recommended-vue: specifier: ^1.5.0 version: 1.5.0(postcss-html@1.5.0)(stylelint@16.1.0) stylelint-config-standard-scss: - specifier: ^12.0.0 - version: 12.0.0(postcss@8.4.32)(stylelint@16.1.0) + specifier: ^13.0.0 + version: 13.0.0(postcss@8.4.33)(stylelint@16.1.0) stylelint-no-unsupported-browser-features: specifier: ^8.0.0 version: 8.0.0(stylelint@16.1.0) @@ -316,7 +316,7 @@ devDependencies: version: 4.0.2 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.3.102)(@types/node@20.10.6)(typescript@5.3.3) + version: 10.9.2(@swc/core@1.3.102)(@types/node@20.10.7)(typescript@5.3.3) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 @@ -330,8 +330,8 @@ devDependencies: specifier: ^0.6.1 version: 0.6.1 vue-eslint-parser: - specifier: ^9.3.2 - version: 9.3.2(eslint@8.56.0) + specifier: ^9.4.0 + version: 9.4.0(eslint@8.56.0) workbox-build: specifier: ^7.0.0 version: 7.0.0 @@ -366,6 +366,14 @@ packages: leven: 3.1.0 dev: true + /@asamuzakjp/dom-selector@2.0.1: + resolution: {integrity: sha512-QJAJffmCiymkv6YyQ7voyQb5caCth6jzZsQncYCpHXrJ7RqdYG5y43+is8mnFcYubdOkr7cn1+na9BdFMxqw7w==} + dependencies: + bidi-js: 1.0.3 + css-tree: 2.3.1 + is-potential-custom-element-name: 1.0.1 + dev: true + /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} @@ -388,7 +396,7 @@ packages: '@babel/generator': 7.23.6 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helpers': 7.23.7 + '@babel/helpers': 7.23.8 '@babel/parser': 7.23.6 '@babel/template': 7.22.15 '@babel/traverse': 7.23.7 @@ -609,8 +617,8 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/helpers@7.23.7: - resolution: {integrity: sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==} + /@babel/helpers@7.23.8: + resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 @@ -925,8 +933,8 @@ packages: '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.7): - resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} + /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.7): + resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -936,7 +944,6 @@ packages: '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) '@babel/helper-split-export-declaration': 7.22.6 @@ -1380,8 +1387,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-env@7.23.7(@babel/core@7.23.7): - resolution: {integrity: sha512-SY27X/GtTz/L4UryMNJ6p4fH4nsgWbz84y9FE0bQeWJP6O5BhgVCt53CotQKHCOeXJel8VyhlhujhlltKms/CA==} + /@babel/preset-env@7.23.8(@babel/core@7.23.7): + resolution: {integrity: sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1420,7 +1427,7 @@ packages: '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7) '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.7) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.7) '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.7) @@ -1486,8 +1493,8 @@ packages: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime@7.23.7: - resolution: {integrity: sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==} + /@babel/runtime@7.23.8: + resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 @@ -1600,18 +1607,18 @@ packages: '@csstools/css-tokenizer': 2.2.3 dev: true - /@csstools/postcss-cascade-layers@4.0.2(postcss@8.4.32): + /@csstools/postcss-cascade-layers@4.0.2(postcss@8.4.33): resolution: {integrity: sha512-PqM+jvg5T2tB4FHX+akrMGNWAygLupD4FNUjcv4PSvtVuWZ6ISxuo37m4jFGU7Jg3rCfloGzKd0+xfr5Ec3vZQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15) - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true - /@csstools/postcss-color-function@3.0.9(postcss@8.4.32): + /@csstools/postcss-color-function@3.0.9(postcss@8.4.33): resolution: {integrity: sha512-6Hbkw/4k73UH121l4LG+LNLKSvrfHqk3GHHH0A6/iFlD0xGmsWAr80Jd0VqXjfYbUTOGmJTOMMoxv3jvNxt1uw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -1620,11 +1627,11 @@ packages: '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 + '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.33) + postcss: 8.4.33 dev: true - /@csstools/postcss-color-mix-function@2.0.9(postcss@8.4.32): + /@csstools/postcss-color-mix-function@2.0.9(postcss@8.4.33): resolution: {integrity: sha512-fs1SOWJ/44DQSsDeJP+rxAkP2MYkCg6K4ZB8qJwFku2EjurgCAPiPZJvC6w94T1hBBinJwuMfT9qvvvniXyVgw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -1633,11 +1640,11 @@ packages: '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 + '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.33) + postcss: 8.4.33 dev: true - /@csstools/postcss-exponential-functions@1.0.3(postcss@8.4.32): + /@csstools/postcss-exponential-functions@1.0.3(postcss@8.4.33): resolution: {integrity: sha512-IfGtEg3eC4b8Nd/kPgO3SxgKb33YwhHVsL0eJ3UYihx6fzzAiZwNbWmVW9MZTQjZ5GacgKxa4iAHikGvpwuIjw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -1646,20 +1653,20 @@ packages: '@csstools/css-calc': 1.1.6(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /@csstools/postcss-font-format-keywords@3.0.1(postcss@8.4.32): + /@csstools/postcss-font-format-keywords@3.0.1(postcss@8.4.33): resolution: {integrity: sha512-D1lcG2sfotTq6yBEOMV3myFxJLT10F3DLYZJMbiny5YToqzHWodZen8WId3UTimm0mEHitXqAUNL5jdd6RzVdA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-gamut-mapping@1.0.2(postcss@8.4.32): + /@csstools/postcss-gamut-mapping@1.0.2(postcss@8.4.33): resolution: {integrity: sha512-zf9KHGM2PTuJEm4ZYg4DTmzCir38EbZBzlMPMbA4jbhLDqXHkqwnQ+Z5+UNrU8y6seVu5B4vzZmZarTFQwe+Ig==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -1668,10 +1675,10 @@ packages: '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /@csstools/postcss-gradients-interpolation-method@4.0.9(postcss@8.4.32): + /@csstools/postcss-gradients-interpolation-method@4.0.9(postcss@8.4.33): resolution: {integrity: sha512-PSqR6QH7h3ggOl8TsoH73kbwYTKVQjAJauGg6nDKwaGfi5IL5StV//ehrv1C7HuPsHixMTc9YoAuuv1ocT20EQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -1680,11 +1687,11 @@ packages: '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 + '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.33) + postcss: 8.4.33 dev: true - /@csstools/postcss-hwb-function@3.0.8(postcss@8.4.32): + /@csstools/postcss-hwb-function@3.0.8(postcss@8.4.33): resolution: {integrity: sha512-CRQEG372Hivmt17rm/Ho22hBQI9K/a6grzGQ21Zwc7dyspmyG0ibmPIW8hn15vJmXqWGeNq7S+L2b8/OrU7O5A==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -1693,88 +1700,88 @@ packages: '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /@csstools/postcss-ic-unit@3.0.3(postcss@8.4.32): + /@csstools/postcss-ic-unit@3.0.3(postcss@8.4.33): resolution: {integrity: sha512-MpcmIL0/uMm/cFWh5V/9nbKKJ7jRr2qTYW5Q6zoE6HZ6uzOBJr2KRERv5/x8xzEBQ1MthDT7iP1EBp9luSQy7g==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 + '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.33) + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-initial@1.0.1(postcss@8.4.32): + /@csstools/postcss-initial@1.0.1(postcss@8.4.33): resolution: {integrity: sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /@csstools/postcss-is-pseudo-class@4.0.4(postcss@8.4.32): + /@csstools/postcss-is-pseudo-class@4.0.4(postcss@8.4.33): resolution: {integrity: sha512-vTVO/uZixpTVAOQt3qZRUFJ/K1L03OfNkeJ8sFNDVNdVy/zW0h1L5WT7HIPMDUkvSrxQkFaCCybTZkUP7UESlQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15) - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true - /@csstools/postcss-logical-float-and-clear@2.0.1(postcss@8.4.32): + /@csstools/postcss-logical-float-and-clear@2.0.1(postcss@8.4.33): resolution: {integrity: sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /@csstools/postcss-logical-overflow@1.0.1(postcss@8.4.32): + /@csstools/postcss-logical-overflow@1.0.1(postcss@8.4.33): resolution: {integrity: sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /@csstools/postcss-logical-overscroll-behavior@1.0.1(postcss@8.4.32): + /@csstools/postcss-logical-overscroll-behavior@1.0.1(postcss@8.4.33): resolution: {integrity: sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /@csstools/postcss-logical-resize@2.0.1(postcss@8.4.32): + /@csstools/postcss-logical-resize@2.0.1(postcss@8.4.33): resolution: {integrity: sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-logical-viewport-units@2.0.5(postcss@8.4.32): + /@csstools/postcss-logical-viewport-units@2.0.5(postcss@8.4.33): resolution: {integrity: sha512-2fjSamKN635DSW6fEoyNd2Bkpv3FVblUpgk5cpghIgPW1aDHZE2SYfZK5xQALvjMYZVjfqsD5EbXA7uDVBQVQA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: '@csstools/css-tokenizer': 2.2.3 - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /@csstools/postcss-media-minmax@1.1.2(postcss@8.4.32): + /@csstools/postcss-media-minmax@1.1.2(postcss@8.4.33): resolution: {integrity: sha512-7qTRTJxW96u2yiEaTep1+8nto1O/rEDacewKqH+Riq5E6EsHTOmGHxkB4Se5Ic5xgDC4I05lLZxzzxnlnSypxA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -1784,10 +1791,10 @@ packages: '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 '@csstools/media-query-list-parser': 2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.5(postcss@8.4.32): + /@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.5(postcss@8.4.33): resolution: {integrity: sha512-XHMPasWYPWa9XaUHXU6Iq0RLfoAI+nvGTPj51hOizNsHaAyFiq2SL4JvF1DU8lM6B70+HVzKM09Isbyrr755Bw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -1796,30 +1803,30 @@ packages: '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 '@csstools/media-query-list-parser': 2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /@csstools/postcss-nested-calc@3.0.1(postcss@8.4.32): + /@csstools/postcss-nested-calc@3.0.1(postcss@8.4.33): resolution: {integrity: sha512-bwwababZpWRm0ByHaWBxTsDGTMhZKmtUNl3Wt0Eom8AY7ORgXx5qF9SSk1vEFrCi+HOfJT6M6W5KPgzXuQNRwQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-normalize-display-values@3.0.2(postcss@8.4.32): + /@csstools/postcss-normalize-display-values@3.0.2(postcss@8.4.33): resolution: {integrity: sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-oklab-function@3.0.9(postcss@8.4.32): + /@csstools/postcss-oklab-function@3.0.9(postcss@8.4.33): resolution: {integrity: sha512-l639gpcBfL3ogJe+og1M5FixQn8iGX8+29V7VtTSCUB37VzpzOC05URfde7INIdiJT65DkHzgdJ64/QeYggU8A==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -1828,21 +1835,21 @@ packages: '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 + '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.33) + postcss: 8.4.33 dev: true - /@csstools/postcss-progressive-custom-properties@3.0.3(postcss@8.4.32): + /@csstools/postcss-progressive-custom-properties@3.0.3(postcss@8.4.33): resolution: {integrity: sha512-WipTVh6JTMQfeIrzDV4wEPsV9NTzMK2jwXxyH6CGBktuWdivHnkioP/smp1x/0QDPQyx7NTS14RB+GV3zZZYEw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-relative-color-syntax@2.0.9(postcss@8.4.32): + /@csstools/postcss-relative-color-syntax@2.0.9(postcss@8.4.33): resolution: {integrity: sha512-2UoaRd2iIuzUGtYgteN5fJ0s+OfCiV7PvCnw8MCh3om8+SeVinfG8D5sqBOvImxFVfrp6k60XF5RFlH6oc//fg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -1851,21 +1858,21 @@ packages: '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 + '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.33) + postcss: 8.4.33 dev: true - /@csstools/postcss-scope-pseudo-class@3.0.1(postcss@8.4.32): + /@csstools/postcss-scope-pseudo-class@3.0.1(postcss@8.4.33): resolution: {integrity: sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true - /@csstools/postcss-stepped-value-functions@3.0.4(postcss@8.4.32): + /@csstools/postcss-stepped-value-functions@3.0.4(postcss@8.4.33): resolution: {integrity: sha512-gyNQ2YaOVXPqLR737XtReRPVu7DGKBr9JBDLoiH1T+N1ggV3r4HotRCOC1l6rxVC0zOuU1KiOzUn9Z5W838/rg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -1874,21 +1881,21 @@ packages: '@csstools/css-calc': 1.1.6(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /@csstools/postcss-text-decoration-shorthand@3.0.4(postcss@8.4.32): + /@csstools/postcss-text-decoration-shorthand@3.0.4(postcss@8.4.33): resolution: {integrity: sha512-yUZmbnUemgQmja7SpOZeU45+P49wNEgQguRdyTktFkZsHf7Gof+ZIYfvF6Cm+LsU1PwSupy4yUeEKKjX5+k6cQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: '@csstools/color-helpers': 4.0.0 - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-trigonometric-functions@3.0.4(postcss@8.4.32): + /@csstools/postcss-trigonometric-functions@3.0.4(postcss@8.4.33): resolution: {integrity: sha512-qj4Cxth6c38iNYzfJJWAxt8jsLrZaMVmbfGDDLOlI2YJeZoC3A5Su6/Kr7oXaPFRuspUu+4EQHngOktqVHWfVg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -1897,16 +1904,16 @@ packages: '@csstools/css-calc': 1.1.6(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /@csstools/postcss-unset-value@3.0.1(postcss@8.4.32): + /@csstools/postcss-unset-value@3.0.1(postcss@8.4.33): resolution: {integrity: sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true /@csstools/selector-specificity@3.0.1(postcss-selector-parser@6.0.15): @@ -2200,25 +2207,25 @@ packages: resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true - /@intlify/core-base@9.8.0: - resolution: {integrity: sha512-UxaSZVZ1DwqC/CltUZrWZNaWNhfmKtfyV4BJSt/Zt4Or/fZs1iFj0B+OekYk1+MRHfIOe3+x00uXGQI4PbO/9g==} + /@intlify/core-base@9.9.0: + resolution: {integrity: sha512-C7UXPymDIOlMGSNjAhNLtKgzITc/8BjINK5gNKXg8GiWCTwL6n3MWr55czksxn8RM5wTMz0qcLOFT+adtaVQaA==} engines: {node: '>= 16'} dependencies: - '@intlify/message-compiler': 9.8.0 - '@intlify/shared': 9.8.0 + '@intlify/message-compiler': 9.9.0 + '@intlify/shared': 9.9.0 - /@intlify/message-compiler@9.8.0: - resolution: {integrity: sha512-McnYWhcoYmDJvssVu6QGR0shqlkJuL1HHdi5lK7fNqvQqRYaQ4lSLjYmZxwc8tRNMdIe9/KUKfyPxU9M6yCtNQ==} + /@intlify/message-compiler@9.9.0: + resolution: {integrity: sha512-yDU/jdUm9KuhEzYfS+wuyja209yXgdl1XFhMlKtXEgSFTxz4COZQCRXXbbH8JrAjMsaJ7bdoPSLsKlY6mXG2iA==} engines: {node: '>= 16'} dependencies: - '@intlify/shared': 9.8.0 + '@intlify/shared': 9.9.0 source-map-js: 1.0.2 - /@intlify/shared@9.8.0: - resolution: {integrity: sha512-TmgR0RCLjzrSo+W3wT0ALf9851iFMlVI9EYNGeWvZFUQTAJx0bvfsMlPdgVtV1tDNRiAfhkFsMKu6jtUY1ZLKQ==} + /@intlify/shared@9.9.0: + resolution: {integrity: sha512-1ECUyAHRrzOJbOizyGufYP2yukqGrWXtkmTu4PcswVnWbkcjzk3YQGmJ0bLkM7JZ0ZYAaohLGdYvBYnTOGYJ9g==} engines: {node: '>= 16'} - /@intlify/vue-i18n-extensions@5.0.1(vue-i18n@9.8.0)(vue@3.4.4): + /@intlify/vue-i18n-extensions@5.0.1(vue-i18n@9.9.0)(vue@3.4.6): resolution: {integrity: sha512-bS07jIt9nFXfUUpQLqdog7O1Gi8rSCgTyEzabiho5nrrVFmaIbDRr7LSNBPA8fakPdAuY8V1lJa6xmkI33+n8w==} engines: {node: '>= 14.18'} peerDependencies: @@ -2226,10 +2233,10 @@ packages: vue-i18n: ^9.0.0 dependencies: '@babel/parser': 7.23.6 - '@intlify/shared': 9.8.0 - '@vue/compiler-dom': 3.4.4 - vue: 3.4.4(typescript@5.3.3) - vue-i18n: 9.8.0(vue@3.4.4) + '@intlify/shared': 9.9.0 + '@vue/compiler-dom': 3.4.6 + vue: 3.4.6(typescript@5.3.3) + vue-i18n: 9.9.0(vue@3.4.6) dev: true /@isaacs/cliui@8.0.2: @@ -2606,7 +2613,7 @@ packages: peerDependencies: eslint: '*' dependencies: - '@typescript-eslint/utils': 6.17.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 transitivePeerDependencies: - supports-color @@ -2620,7 +2627,7 @@ packages: eslint: '>=8.40.0' dependencies: '@stylistic/eslint-plugin-js': 1.5.3(eslint@8.56.0) - '@typescript-eslint/utils': 6.17.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 transitivePeerDependencies: - supports-color @@ -2820,7 +2827,7 @@ packages: /@types/glob-stream@8.0.2: resolution: {integrity: sha512-kyuRfGE+yiSJWzSO3t74rXxdZNdYfLcllO0IUha4eX1fl40pm9L02Q/TEc3mykTLjoWz4STBNwYnUWdFu3I0DA==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.7 '@types/picomatch': 2.3.3 '@types/streamx': 2.9.5 dev: true @@ -2832,13 +2839,13 @@ packages: /@types/gulp-load-plugins@0.0.37: resolution: {integrity: sha512-gmQpE77bVR5bbT7xUltn3eXQ+EEa0D3aplJHeZhnefOvPxm3cEjfJTa8UMnkVpAmi6b465vmmQqkIpDM/5H+HA==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.7 dev: true /@types/gulp@4.0.17: resolution: {integrity: sha512-+pKQynu2C/HS16kgmDlAicjtFYP8kaa86eE9P0Ae7GB5W29we/E2TIdbOWtEZD5XkpY+jr8fyqfwO6SWZecLpQ==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.7 '@types/undertaker': 1.2.11 '@types/vinyl-fs': 3.0.5 chokidar: 3.5.3 @@ -2860,8 +2867,8 @@ packages: resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} dev: true - /@types/node@20.10.6: - resolution: {integrity: sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==} + /@types/node@20.10.7: + resolution: {integrity: sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==} dependencies: undici-types: 5.26.5 dev: true @@ -2877,7 +2884,7 @@ packages: /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.7 dev: true /@types/semver@7.5.6: @@ -2887,7 +2894,7 @@ packages: /@types/streamx@2.9.5: resolution: {integrity: sha512-IHYsa6jYrck8VEdSwpY141FTTf6D7boPeMq9jy4qazNrFMA4VbRz/sw5LSsfR7jwdDcx0QKWkUexZvsWBC2eIQ==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.7 dev: true /@types/trusted-types@2.0.7: @@ -2901,7 +2908,7 @@ packages: /@types/undertaker@1.2.11: resolution: {integrity: sha512-j1Z0V2ByRHr8ZK7eOeGq0LGkkdthNFW0uAZGY22iRkNQNL9/vAV0yFPr1QN3FM/peY5bxs9P+1f0PYJTQVa5iA==} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.7 '@types/undertaker-registry': 1.0.4 async-done: 1.3.2 dev: true @@ -2910,7 +2917,7 @@ packages: resolution: {integrity: sha512-ckYz9giHgV6U10RFuf9WsDQ3X86EFougapxHmmoxLK7e6ICQqO8CE+4V/3lBN148V5N1pb4nQMmMjyScleVsig==} dependencies: '@types/glob-stream': 8.0.2 - '@types/node': 20.10.6 + '@types/node': 20.10.7 '@types/vinyl': 2.0.11 dev: true @@ -2918,15 +2925,15 @@ packages: resolution: {integrity: sha512-vPXzCLmRp74e9LsP8oltnWKTH+jBwt86WgRUb4Pc9Lf3pkMVGyvIo2gm9bODeGfCay2DBB/hAWDuvf07JcK4rw==} dependencies: '@types/expect': 1.20.4 - '@types/node': 20.10.6 + '@types/node': 20.10.7 dev: true /@types/wicg-file-system-access@2023.10.4: resolution: {integrity: sha512-ewOj7hWhsUTS2+aY6zY+7BwlgqGBj5ZXxKuHt3TAWpIJH0bDW/6bO1N1SdUDAzV8r0Nc+/ZtpAEETYTwrehBMw==} dev: true - /@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ==} + /@typescript-eslint/eslint-plugin@6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2937,11 +2944,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/type-utils': 6.17.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.17.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.17.0 + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.18.1 + '@typescript-eslint/type-utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.18.1 debug: 4.3.4(supports-color@8.1.1) eslint: 8.56.0 graphemer: 1.4.0 @@ -2967,8 +2974,8 @@ packages: - typescript dev: true - /@typescript-eslint/parser@6.17.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==} + /@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2977,10 +2984,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.17.0 + '@typescript-eslint/scope-manager': 6.18.1 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.18.1 debug: 4.3.4(supports-color@8.1.1) eslint: 8.56.0 typescript: 5.3.3 @@ -2996,16 +3003,16 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/scope-manager@6.17.0: - resolution: {integrity: sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA==} + /@typescript-eslint/scope-manager@6.18.1: + resolution: {integrity: sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/visitor-keys': 6.17.0 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/visitor-keys': 6.18.1 dev: true - /@typescript-eslint/type-utils@6.17.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg==} + /@typescript-eslint/type-utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -3014,8 +3021,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.17.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4(supports-color@8.1.1) eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) @@ -3029,8 +3036,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@6.17.0: - resolution: {integrity: sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A==} + /@typescript-eslint/types@6.18.1: + resolution: {integrity: sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==} engines: {node: ^16.0.0 || >=18.0.0} dev: true @@ -3055,8 +3062,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.17.0(typescript@5.3.3): - resolution: {integrity: sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==} + /@typescript-eslint/typescript-estree@6.18.1(typescript@5.3.3): + resolution: {integrity: sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -3064,8 +3071,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/visitor-keys': 6.17.0 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/visitor-keys': 6.18.1 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -3097,8 +3104,8 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.17.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ==} + /@typescript-eslint/utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -3106,9 +3113,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.18.1 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: @@ -3124,11 +3131,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@6.17.0: - resolution: {integrity: sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg==} + /@typescript-eslint/visitor-keys@6.18.1: + resolution: {integrity: sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.17.0 + '@typescript-eslint/types': 6.18.1 eslint-visitor-keys: 3.4.3 dev: true @@ -3136,39 +3143,39 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vue/compiler-core@3.4.4: - resolution: {integrity: sha512-U5AdCN+6skzh2bSJrkMj2KZsVkUpgK8/XlxjSRYQZhNPcvt9/kmgIMpFEiTyK+Dz5E1J+8o8//BEIX+bakgVSw==} + /@vue/compiler-core@3.4.6: + resolution: {integrity: sha512-9SmkpHsXqhHGMIOp4cawUqp0AxLN2fJJfxh3sR2RaouVx/Y/ww5ts3dfpD9SCvD0n8cdO/Xw+kWEpa6EkH/vTQ==} dependencies: '@babel/parser': 7.23.6 - '@vue/shared': 3.4.4 + '@vue/shared': 3.4.6 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.0.2 - /@vue/compiler-dom@3.4.4: - resolution: {integrity: sha512-iSwkdDULCN+Vr8z6uwdlL044GJ/nUmECxP9vu7MzEs4Qma0FwDLYvnvRcyO0ZITuu3Os4FptGUDnhi1kOLSaGw==} + /@vue/compiler-dom@3.4.6: + resolution: {integrity: sha512-i39ZuyHPzPb0v5yXZbvODGwLr+T7lS1rYSjMd1oCTa14aDP80kYpWXrWPF1JVD4QJJNyLgFnJ2hxvFLM7dy9NQ==} dependencies: - '@vue/compiler-core': 3.4.4 - '@vue/shared': 3.4.4 + '@vue/compiler-core': 3.4.6 + '@vue/shared': 3.4.6 - /@vue/compiler-sfc@3.4.4: - resolution: {integrity: sha512-OTFcU6vUxUNHBcarzkp4g6d25nvcmDvFDzPRvSrIsByFFPRYN+y3b+j9HxYwt6nlWvGyFCe0roeJdJlfYxbCBg==} + /@vue/compiler-sfc@3.4.6: + resolution: {integrity: sha512-kTFOiyMtuetFqi5yEPA4hR6FTD36zKKY3qaBonxGb4pgj0yK1eACqH+iycTAsEqr2u4cOhcGkx3Yjecpgh6FTQ==} dependencies: '@babel/parser': 7.23.6 - '@vue/compiler-core': 3.4.4 - '@vue/compiler-dom': 3.4.4 - '@vue/compiler-ssr': 3.4.4 - '@vue/shared': 3.4.4 + '@vue/compiler-core': 3.4.6 + '@vue/compiler-dom': 3.4.6 + '@vue/compiler-ssr': 3.4.6 + '@vue/shared': 3.4.6 estree-walker: 2.0.2 magic-string: 0.27.0 - postcss: 8.4.32 + postcss: 8.4.33 source-map-js: 1.0.2 - /@vue/compiler-ssr@3.4.4: - resolution: {integrity: sha512-1DU9DflSSQlx/M61GEBN+NbT/anUki2ooDo9IXfTckCeKA/2IKNhY8KbG3x6zkd3KGrxzteC7de6QL88vEb41Q==} + /@vue/compiler-ssr@3.4.6: + resolution: {integrity: sha512-XqeojjDitjMLyOogDePNSxw9XL4FAXchO9oOfqdzLVEtYES5j+AEilPJyP0KhQPfGecY2mJ3Y7/e6kkiJQLKvg==} dependencies: - '@vue/compiler-dom': 3.4.4 - '@vue/shared': 3.4.4 + '@vue/compiler-dom': 3.4.6 + '@vue/shared': 3.4.6 /@vue/devtools-api@6.5.1: resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} @@ -3184,52 +3191,52 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-plugin-vue: 9.19.2(eslint@8.56.0) typescript: 5.3.3 - vue-eslint-parser: 9.3.2(eslint@8.56.0) + vue-eslint-parser: 9.4.0(eslint@8.56.0) transitivePeerDependencies: - supports-color dev: true - /@vue/reactivity@3.4.4: - resolution: {integrity: sha512-DFsuJBf6sfhd5SYzJmcBTUG9+EKqjF31Gsk1NJtnpJm9liSZ806XwGJUeNBVQIanax7ODV7Lmk/k17BgxXNuTg==} + /@vue/reactivity@3.4.6: + resolution: {integrity: sha512-/VuOxdWDyAeKFHjOuSKEtH9jEVPRgsXxu84utBP1SiXFcFRx2prwiC9cSR8hKOfj5nBwhLXYb6XEU69mLpuk0w==} dependencies: - '@vue/shared': 3.4.4 + '@vue/shared': 3.4.6 - /@vue/runtime-core@3.4.4: - resolution: {integrity: sha512-zWWwNQAj5JdxrmOA1xegJm+c4VtyIbDEKgQjSb4va5v7gGTCh0ZjvLI+htGFdVXaO9bs2J3C81p5p+6jrPK8Bw==} + /@vue/runtime-core@3.4.6: + resolution: {integrity: sha512-XDOx8iiNmP66p+goUHT5XL1AnV8406VVFQARbylqmSCBZEtxchfu2ZoQk7U07ze8G/E0/BtX/C5o29zB1W4o5A==} dependencies: - '@vue/reactivity': 3.4.4 - '@vue/shared': 3.4.4 + '@vue/reactivity': 3.4.6 + '@vue/shared': 3.4.6 - /@vue/runtime-dom@3.4.4: - resolution: {integrity: sha512-Nlh2ap1J/eJQ6R0g+AIRyGNwpTJQACN0dk8I8FRLH8Ev11DSvfcPOpn4+Kbg5xAMcuq0cHB8zFYxVrOgETrrvg==} + /@vue/runtime-dom@3.4.6: + resolution: {integrity: sha512-8bdQR5CLfzClGvAOfbbCF8adE9oko0pRfe+dj297i0JCdCJ8AuyUMsXkt6vGPcRPqIKX4Z8f/bDPrwl+c7e4Wg==} dependencies: - '@vue/runtime-core': 3.4.4 - '@vue/shared': 3.4.4 + '@vue/runtime-core': 3.4.6 + '@vue/shared': 3.4.6 csstype: 3.1.3 - /@vue/server-renderer@3.4.4(vue@3.4.4): - resolution: {integrity: sha512-+AjoiKcC41k7SMJBYkDO9xs79/Of8DiThS9mH5l2MK+EY0to3psI0k+sElvVqQvsoZTjHMEuMz0AEgvm2T+CwA==} + /@vue/server-renderer@3.4.6(vue@3.4.6): + resolution: {integrity: sha512-0LS+GXf3M93KloaK/S0ZPq5PnKERgPAV5iNCCpjyBLhAQGGEeqfJojs3yXOAMQLSvXi9FLYDHzDEOLWoLaYbTQ==} peerDependencies: - vue: 3.4.4 + vue: 3.4.6 dependencies: - '@vue/compiler-ssr': 3.4.4 - '@vue/shared': 3.4.4 - vue: 3.4.4(typescript@5.3.3) + '@vue/compiler-ssr': 3.4.6 + '@vue/shared': 3.4.6 + vue: 3.4.6(typescript@5.3.3) - /@vue/shared@3.4.4: - resolution: {integrity: sha512-abSgiVRhfjfl3JALR/cSuBl74hGJ3SePgf1mKzodf1eMWLwHZbfEGxT2cNJSsNiw44jEgrO7bNkhchaWA7RwNw==} + /@vue/shared@3.4.6: + resolution: {integrity: sha512-O16vewA05D0IwfG2N/OFEuVeb17pieaI32mmYXp36V8lp+/pI1YV04rRL9Eyjndj3xQO5SNjAxTh6ul4IlBa3A==} - /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.4): + /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.6): resolution: {integrity: sha512-Ip8ZVRlI2AP7IrG1UIzGLiSClBp50tWDGgukM1cBVejqMossQ226iwN3VKpNAyRHyFirwRnvhZM2KuMt/2BYow==} peerDependencies: '@vue/compiler-sfc': '>=3.0.0' dependencies: - '@vue/compiler-sfc': 3.4.4 + '@vue/compiler-sfc': 3.4.6 convert-source-map: 1.9.0 hash-sum: 2.0.0 dev: true @@ -3668,7 +3675,7 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /autoprefixer@10.4.16(postcss@8.4.32): + /autoprefixer@10.4.16(postcss@8.4.33): resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true @@ -3676,11 +3683,11 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.22.2 - caniuse-lite: 1.0.30001572 + caniuse-lite: 1.0.30001576 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true @@ -3759,6 +3766,12 @@ packages: safe-buffer: 5.1.2 dev: true + /bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + dependencies: + require-from-string: 2.0.2 + dev: true + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -3824,8 +3837,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001572 - electron-to-chromium: 1.4.617 + caniuse-lite: 1.0.30001576 + electron-to-chromium: 1.4.625 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -3858,8 +3871,8 @@ packages: engines: {node: '>=6'} dev: true - /cacache@18.0.1: - resolution: {integrity: sha512-g4Uf2CFZPaxtJKre6qr4zqLDOOPU7bNVhWjlNhvzc51xaTOx2noMOLhfFkTAqwtrAZAKQUuDfyjitzilpA8WsQ==} + /cacache@18.0.2: + resolution: {integrity: sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==} engines: {node: ^16.14.0 || >=18.0.0} dependencies: '@npmcli/fs': 3.1.0 @@ -3920,12 +3933,12 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001572: - resolution: {integrity: sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==} + /caniuse-lite@1.0.30001576: + resolution: {integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==} dev: true - /chai@4.3.10: - resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + /chai@4.4.0: + resolution: {integrity: sha512-x9cHNq1uvkCdU+5xTkNh5WtgD4e4yDFCsp9jVc7N7qVeKeftv3gO/ZrviX5d+3ZfxdYnZXZYujjRInu1RogU6A==} engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 @@ -4254,13 +4267,13 @@ packages: engines: {node: '>=8'} dev: true - /css-blank-pseudo@6.0.1(postcss@8.4.32): + /css-blank-pseudo@6.0.1(postcss@8.4.33): resolution: {integrity: sha512-goSnEITByxTzU4Oh5oJZrEWudxTqk7L6IXj1UW69pO6Hv0UdX+Vsrt02FFu5DweRh2bLu6WpX/+zsQCu5O1gKw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true @@ -4269,25 +4282,25 @@ packages: engines: {node: '>=12 || >=16'} dev: true - /css-has-pseudo@6.0.1(postcss@8.4.32): + /css-has-pseudo@6.0.1(postcss@8.4.33): resolution: {integrity: sha512-WwoVKqNxApfEI7dWFyaHoeFCcUPD+lPyjL6lNpRUNX7IyIUuVpawOTwwA5D0ZR6V2xQZonNPVj8kEcxzEaAQfQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15) - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 dev: true - /css-prefers-color-scheme@9.0.1(postcss@8.4.32): + /css-prefers-color-scheme@9.0.1(postcss@8.4.33): resolution: {integrity: sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true /css-tokenize@1.0.1: @@ -4315,9 +4328,9 @@ packages: hasBin: true dev: true - /cssstyle@3.0.0: - resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} - engines: {node: '>=14'} + /cssstyle@4.0.1: + resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} + engines: {node: '>=18'} dependencies: rrweb-cssom: 0.6.0 dev: true @@ -4501,12 +4514,12 @@ packages: hasBin: true dependencies: browserslist: 4.22.2 - caniuse-lite: 1.0.30001572 + caniuse-lite: 1.0.30001576 css-tokenize: 1.0.1 duplexify: 4.1.2 ldjson-stream: 1.2.1 multimatch: 5.0.0 - postcss: 8.4.32 + postcss: 8.4.33 source-map: 0.7.4 yargs: 17.7.2 dev: true @@ -4590,8 +4603,8 @@ packages: jake: 10.8.7 dev: true - /electron-to-chromium@1.4.617: - resolution: {integrity: sha512-sYNE3QxcDS4ANW1k4S/wWYMXjCVcFSOX3Bg8jpuMFaXt/x8JCmp0R1Xe1ZXDX4WXnSRBf+GJ/3eGWicUuQq5cg==} + /electron-to-chromium@1.4.625: + resolution: {integrity: sha512-DENMhh3MFgaPDoXWrVIqSPInQoLImywfCwrSmVl3cf9QHzoZSiutHwGaB/Ql3VkqcQV30rzgdM+BjKqBAJxo5Q==} dev: true /emoji-regex@8.0.0: @@ -4842,7 +4855,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.17.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4852,8 +4865,8 @@ packages: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.15.0 eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -4865,7 +4878,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -4886,11 +4899,11 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color dev: true @@ -4904,7 +4917,7 @@ packages: '@mdn/browser-compat-data': 5.5.4 ast-metadata-inferer: 0.8.0 browserslist: 4.22.2 - caniuse-lite: 1.0.30001572 + caniuse-lite: 1.0.30001576 eslint: 8.56.0 find-up: 5.0.0 lodash.memoize: 4.1.2 @@ -4917,7 +4930,7 @@ packages: htmlparser2: 8.0.2 dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -4927,7 +4940,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -4936,7 +4949,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -5014,7 +5027,7 @@ packages: nth-check: 2.1.1 postcss-selector-parser: 6.0.15 semver: 7.5.4 - vue-eslint-parser: 9.3.2(eslint@8.56.0) + vue-eslint-parser: 9.4.0(eslint@8.56.0) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -5715,13 +5728,13 @@ packages: once: 1.4.0 dev: true - /global-jsdom@9.2.0(jsdom@23.0.1): + /global-jsdom@9.2.0(jsdom@23.2.0): resolution: {integrity: sha512-mspbiuYwcl5nbl2VRvHNaF4SzSmSMCTJGXXatzHYZAf6u3rO/aLXQICbVNTVI+vN8jaq1s4QcvKYnWhVepSbFQ==} engines: {node: '>=16'} peerDependencies: jsdom: '>=23 <24' dependencies: - jsdom: 23.0.1 + jsdom: 23.2.0 dev: true /global-modules@1.0.0: @@ -5963,7 +5976,7 @@ packages: plugin-error: 0.1.2 dev: true - /gulp-postcss@9.0.1(postcss@8.4.32)(ts-node@10.9.2): + /gulp-postcss@9.0.1(postcss@8.4.33)(ts-node@10.9.2): resolution: {integrity: sha512-9QUHam5JyXwGUxaaMvoFQVT44tohpEFpM8xBdPfdwTYGM0AItS1iTQz0MpsF8Jroh7GF5Jt2GVPaYgvy8qD2Fw==} engines: {node: ^10 || ^12 || >=14} peerDependencies: @@ -5971,8 +5984,8 @@ packages: dependencies: fancy-log: 1.3.3 plugin-error: 1.0.1 - postcss: 8.4.32 - postcss-load-config: 3.1.4(postcss@8.4.32)(ts-node@10.9.2) + postcss: 8.4.33 + postcss-load-config: 3.1.4(postcss@8.4.33)(ts-node@10.9.2) vinyl-sourcemaps-apply: 0.2.1 transitivePeerDependencies: - ts-node @@ -5991,7 +6004,7 @@ packages: resolution: {integrity: sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==} engines: {node: '>=10'} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.7 '@types/vinyl': 2.0.11 istextorbinary: 3.3.0 replacestream: 4.0.3 @@ -6028,7 +6041,7 @@ packages: vinyl: 2.2.1 dev: true - /gulp-vue-ssg@1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.4): + /gulp-vue-ssg@1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.6): resolution: {integrity: sha512-QdMsM4zCLgCmfSHtZJ/2ApX4cWYy7hzAPLUimR8p/g0ATTaK6CL7vcMJ4+FW2gvDF+LkXDwbmIqdR32asSwaJA==} engines: {node: ^18||^20} peerDependencies: @@ -6039,10 +6052,10 @@ packages: esbuild: 0.19.11 gulp: 4.0.2 gulp-through2: 1.0.1 - vue: 3.4.4(typescript@5.3.3) + vue: 3.4.6(typescript@5.3.3) optionalDependencies: - global-jsdom: 9.2.0(jsdom@23.0.1) - jsdom: 23.0.1 + global-jsdom: 9.2.0(jsdom@23.2.0) + jsdom: 23.2.0 transitivePeerDependencies: - bufferutil - canvas @@ -6793,7 +6806,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.10.6 + '@types/node': 20.10.7 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -6826,8 +6839,8 @@ packages: engines: {node: '>=12.0.0'} dev: true - /jsdom@23.0.1: - resolution: {integrity: sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==} + /jsdom@23.2.0: + resolution: {integrity: sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==} engines: {node: '>=18'} peerDependencies: canvas: ^2.11.2 @@ -6835,7 +6848,8 @@ packages: canvas: optional: true dependencies: - cssstyle: 3.0.0 + '@asamuzakjp/dom-selector': 2.0.1 + cssstyle: 4.0.1 data-urls: 5.0.0 decimal.js: 10.4.3 form-data: 4.0.0 @@ -6843,7 +6857,6 @@ packages: http-proxy-agent: 7.0.0 https-proxy-agent: 7.0.2 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 parse5: 7.1.2 rrweb-cssom: 0.6.0 saxes: 6.0.0 @@ -7187,7 +7200,7 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} dependencies: '@npmcli/agent': 2.2.0 - cacache: 18.0.1 + cacache: 18.0.2 http-cache-semantics: 4.1.1 is-lambda: 1.0.1 minipass: 7.0.4 @@ -7237,8 +7250,8 @@ packages: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} dev: true - /meow@13.0.0: - resolution: {integrity: sha512-4Hu+75Vo7EOR+8C9RmkabfLijuwd9SrzQ8f0SyC4qZZwU6BlxeOt5ulF3PGCpcMJX4hI+ktpJhea0P6PN1RiWw==} + /meow@13.1.0: + resolution: {integrity: sha512-o5R/R3Tzxq0PJ3v3qcQJtSvSE9nKOLSAaDuuoMzDVuGTwHdccMWcYomh9Xolng2tjT6O/Y83d+0coVGof6tqmA==} engines: {node: '>=18'} dev: true @@ -7583,10 +7596,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} - dev: true - /nyc@15.1.0: resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} engines: {node: '>=8.9'} @@ -8054,27 +8063,27 @@ packages: - supports-color dev: true - /postcss-attribute-case-insensitive@6.0.2(postcss@8.4.32): + /postcss-attribute-case-insensitive@6.0.2(postcss@8.4.33): resolution: {integrity: sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true - /postcss-clamp@4.1.0(postcss@8.4.32): + /postcss-clamp@4.1.0(postcss@8.4.33): resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} engines: {node: '>=7.6.0'} peerDependencies: postcss: ^8.4.6 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /postcss-color-functional-notation@6.0.4(postcss@8.4.32): + /postcss-color-functional-notation@6.0.4(postcss@8.4.33): resolution: {integrity: sha512-YBzfVvVUNR4U3N0imzU1NPKCuwxzfHJkEP6imJxzsJ8LozRKeej9mWmg9Ef1ovJdb0xrGTRVzUxgTrMun5iw/Q==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -8083,31 +8092,31 @@ packages: '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 + '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.33) + postcss: 8.4.33 dev: true - /postcss-color-hex-alpha@9.0.3(postcss@8.4.32): + /postcss-color-hex-alpha@9.0.3(postcss@8.4.33): resolution: {integrity: sha512-7sEHU4tAS6htlxun8AB9LDrCXoljxaC34tFVRlYKcvO+18r5fvGiXgv5bQzN40+4gXLCyWSMRK5FK31244WcCA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /postcss-color-rebeccapurple@9.0.2(postcss@8.4.32): + /postcss-color-rebeccapurple@9.0.2(postcss@8.4.33): resolution: {integrity: sha512-f+RDEAPW2m8UbJWkSpRfV+QxhSaQhDMihI75DVGJJh4oRIoegjheeRtINFJum9D8BqGJcvD4GLjggTvCwZ4zuA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /postcss-custom-media@10.0.2(postcss@8.4.32): + /postcss-custom-media@10.0.2(postcss@8.4.33): resolution: {integrity: sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -8117,10 +8126,10 @@ packages: '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 '@csstools/media-query-list-parser': 2.1.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /postcss-custom-properties@13.3.4(postcss@8.4.32): + /postcss-custom-properties@13.3.4(postcss@8.4.33): resolution: {integrity: sha512-9YN0gg9sG3OH+Z9xBrp2PWRb+O4msw+5Sbp3ZgqrblrwKspXVQe5zr5sVqi43gJGwW/Rv1A483PRQUzQOEewvA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -8129,11 +8138,11 @@ packages: '@csstools/cascade-layer-name-parser': 1.0.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /postcss-custom-selectors@7.1.6(postcss@8.4.32): + /postcss-custom-selectors@7.1.6(postcss@8.4.33): resolution: {integrity: sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -8142,66 +8151,66 @@ packages: '@csstools/cascade-layer-name-parser': 1.0.7(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true - /postcss-dir-pseudo-class@8.0.1(postcss@8.4.32): + /postcss-dir-pseudo-class@8.0.1(postcss@8.4.33): resolution: {integrity: sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true - /postcss-double-position-gradients@5.0.3(postcss@8.4.32): + /postcss-double-position-gradients@5.0.3(postcss@8.4.33): resolution: {integrity: sha512-QKYpwmaSm6HcdS0ndAuWSNNMv78R1oSySoh3mYBmctHWr2KWcwPJVakdOyU4lvFVW0GRu9wfIQwGeM4p3xU9ow==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 + '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.33) + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /postcss-focus-visible@9.0.1(postcss@8.4.32): + /postcss-focus-visible@9.0.1(postcss@8.4.33): resolution: {integrity: sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true - /postcss-focus-within@8.0.1(postcss@8.4.32): + /postcss-focus-within@8.0.1(postcss@8.4.33): resolution: {integrity: sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true - /postcss-font-variant@5.0.0(postcss@8.4.32): + /postcss-font-variant@5.0.0(postcss@8.4.33): resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /postcss-gap-properties@5.0.1(postcss@8.4.32): + /postcss-gap-properties@5.0.1(postcss@8.4.33): resolution: {integrity: sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true /postcss-html@1.5.0: @@ -8210,21 +8219,21 @@ packages: dependencies: htmlparser2: 8.0.2 js-tokens: 8.0.2 - postcss: 8.4.32 - postcss-safe-parser: 6.0.0(postcss@8.4.32) + postcss: 8.4.33 + postcss-safe-parser: 6.0.0(postcss@8.4.33) dev: true - /postcss-image-set-function@6.0.2(postcss@8.4.32): + /postcss-image-set-function@6.0.2(postcss@8.4.33): resolution: {integrity: sha512-/O1xwqpJiz/apxGQi7UUfv1xUcorvkHZfvCYHPpRxxZj2WvjD0rg0+/+c+u5/Do5CpUg3XvfYxMrhcnjW1ArDQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /postcss-lab-function@6.0.9(postcss@8.4.32): + /postcss-lab-function@6.0.9(postcss@8.4.33): resolution: {integrity: sha512-PKFAVTBEWJYsoSTD7Kp/OzeiMsXaLX39Pv75XgUyF5VrbMfeTw+JqCGsvDP3dPhclh6BemdCFHcjXBG9gO4UCg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: @@ -8233,11 +8242,11 @@ packages: '@csstools/css-color-parser': 1.5.1(@csstools/css-parser-algorithms@2.5.0)(@csstools/css-tokenizer@2.2.3) '@csstools/css-parser-algorithms': 2.5.0(@csstools/css-tokenizer@2.2.3) '@csstools/css-tokenizer': 2.2.3 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 + '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.33) + postcss: 8.4.33 dev: true - /postcss-load-config@3.1.4(postcss@8.4.32)(ts-node@10.9.2): + /postcss-load-config@3.1.4(postcss@8.4.33)(ts-node@10.9.2): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -8250,18 +8259,18 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.32 - ts-node: 10.9.2(@swc/core@1.3.102)(@types/node@20.10.6)(typescript@5.3.3) + postcss: 8.4.33 + ts-node: 10.9.2(@swc/core@1.3.102)(@types/node@20.10.7)(typescript@5.3.3) yaml: 1.10.2 dev: true - /postcss-logical@7.0.1(postcss@8.4.32): + /postcss-logical@7.0.1(postcss@8.4.33): resolution: {integrity: sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true @@ -8269,179 +8278,179 @@ packages: resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} dev: true - /postcss-nesting@12.0.2(postcss@8.4.32): + /postcss-nesting@12.0.2(postcss@8.4.33): resolution: {integrity: sha512-63PpJHSeNs93S3ZUIyi+7kKx4JqOIEJ6QYtG3x+0qA4J03+4n0iwsyA1GAHyWxsHYljQS4/4ZK1o2sMi70b5wQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.15) - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true - /postcss-opacity-percentage@2.0.0(postcss@8.4.32): + /postcss-opacity-percentage@2.0.0(postcss@8.4.33): resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /postcss-overflow-shorthand@5.0.1(postcss@8.4.32): + /postcss-overflow-shorthand@5.0.1(postcss@8.4.33): resolution: {integrity: sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /postcss-page-break@3.0.4(postcss@8.4.32): + /postcss-page-break@3.0.4(postcss@8.4.33): resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} peerDependencies: postcss: ^8 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /postcss-place@9.0.1(postcss@8.4.32): + /postcss-place@9.0.1(postcss@8.4.33): resolution: {integrity: sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-value-parser: 4.2.0 dev: true - /postcss-preset-env@9.3.0(postcss@8.4.32): + /postcss-preset-env@9.3.0(postcss@8.4.33): resolution: {integrity: sha512-ycw6doPrqV6QxDCtgiyGDef61bEfiSc59HGM4gOw/wxQxmKnhuEery61oOC/5ViENz/ycpRsuhTexs1kUBTvVw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/postcss-cascade-layers': 4.0.2(postcss@8.4.32) - '@csstools/postcss-color-function': 3.0.9(postcss@8.4.32) - '@csstools/postcss-color-mix-function': 2.0.9(postcss@8.4.32) - '@csstools/postcss-exponential-functions': 1.0.3(postcss@8.4.32) - '@csstools/postcss-font-format-keywords': 3.0.1(postcss@8.4.32) - '@csstools/postcss-gamut-mapping': 1.0.2(postcss@8.4.32) - '@csstools/postcss-gradients-interpolation-method': 4.0.9(postcss@8.4.32) - '@csstools/postcss-hwb-function': 3.0.8(postcss@8.4.32) - '@csstools/postcss-ic-unit': 3.0.3(postcss@8.4.32) - '@csstools/postcss-initial': 1.0.1(postcss@8.4.32) - '@csstools/postcss-is-pseudo-class': 4.0.4(postcss@8.4.32) - '@csstools/postcss-logical-float-and-clear': 2.0.1(postcss@8.4.32) - '@csstools/postcss-logical-overflow': 1.0.1(postcss@8.4.32) - '@csstools/postcss-logical-overscroll-behavior': 1.0.1(postcss@8.4.32) - '@csstools/postcss-logical-resize': 2.0.1(postcss@8.4.32) - '@csstools/postcss-logical-viewport-units': 2.0.5(postcss@8.4.32) - '@csstools/postcss-media-minmax': 1.1.2(postcss@8.4.32) - '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.5(postcss@8.4.32) - '@csstools/postcss-nested-calc': 3.0.1(postcss@8.4.32) - '@csstools/postcss-normalize-display-values': 3.0.2(postcss@8.4.32) - '@csstools/postcss-oklab-function': 3.0.9(postcss@8.4.32) - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - '@csstools/postcss-relative-color-syntax': 2.0.9(postcss@8.4.32) - '@csstools/postcss-scope-pseudo-class': 3.0.1(postcss@8.4.32) - '@csstools/postcss-stepped-value-functions': 3.0.4(postcss@8.4.32) - '@csstools/postcss-text-decoration-shorthand': 3.0.4(postcss@8.4.32) - '@csstools/postcss-trigonometric-functions': 3.0.4(postcss@8.4.32) - '@csstools/postcss-unset-value': 3.0.1(postcss@8.4.32) - autoprefixer: 10.4.16(postcss@8.4.32) + '@csstools/postcss-cascade-layers': 4.0.2(postcss@8.4.33) + '@csstools/postcss-color-function': 3.0.9(postcss@8.4.33) + '@csstools/postcss-color-mix-function': 2.0.9(postcss@8.4.33) + '@csstools/postcss-exponential-functions': 1.0.3(postcss@8.4.33) + '@csstools/postcss-font-format-keywords': 3.0.1(postcss@8.4.33) + '@csstools/postcss-gamut-mapping': 1.0.2(postcss@8.4.33) + '@csstools/postcss-gradients-interpolation-method': 4.0.9(postcss@8.4.33) + '@csstools/postcss-hwb-function': 3.0.8(postcss@8.4.33) + '@csstools/postcss-ic-unit': 3.0.3(postcss@8.4.33) + '@csstools/postcss-initial': 1.0.1(postcss@8.4.33) + '@csstools/postcss-is-pseudo-class': 4.0.4(postcss@8.4.33) + '@csstools/postcss-logical-float-and-clear': 2.0.1(postcss@8.4.33) + '@csstools/postcss-logical-overflow': 1.0.1(postcss@8.4.33) + '@csstools/postcss-logical-overscroll-behavior': 1.0.1(postcss@8.4.33) + '@csstools/postcss-logical-resize': 2.0.1(postcss@8.4.33) + '@csstools/postcss-logical-viewport-units': 2.0.5(postcss@8.4.33) + '@csstools/postcss-media-minmax': 1.1.2(postcss@8.4.33) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.5(postcss@8.4.33) + '@csstools/postcss-nested-calc': 3.0.1(postcss@8.4.33) + '@csstools/postcss-normalize-display-values': 3.0.2(postcss@8.4.33) + '@csstools/postcss-oklab-function': 3.0.9(postcss@8.4.33) + '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.33) + '@csstools/postcss-relative-color-syntax': 2.0.9(postcss@8.4.33) + '@csstools/postcss-scope-pseudo-class': 3.0.1(postcss@8.4.33) + '@csstools/postcss-stepped-value-functions': 3.0.4(postcss@8.4.33) + '@csstools/postcss-text-decoration-shorthand': 3.0.4(postcss@8.4.33) + '@csstools/postcss-trigonometric-functions': 3.0.4(postcss@8.4.33) + '@csstools/postcss-unset-value': 3.0.1(postcss@8.4.33) + autoprefixer: 10.4.16(postcss@8.4.33) browserslist: 4.22.2 - css-blank-pseudo: 6.0.1(postcss@8.4.32) - css-has-pseudo: 6.0.1(postcss@8.4.32) - css-prefers-color-scheme: 9.0.1(postcss@8.4.32) + css-blank-pseudo: 6.0.1(postcss@8.4.33) + css-has-pseudo: 6.0.1(postcss@8.4.33) + css-prefers-color-scheme: 9.0.1(postcss@8.4.33) cssdb: 7.10.0 - postcss: 8.4.32 - postcss-attribute-case-insensitive: 6.0.2(postcss@8.4.32) - postcss-clamp: 4.1.0(postcss@8.4.32) - postcss-color-functional-notation: 6.0.4(postcss@8.4.32) - postcss-color-hex-alpha: 9.0.3(postcss@8.4.32) - postcss-color-rebeccapurple: 9.0.2(postcss@8.4.32) - postcss-custom-media: 10.0.2(postcss@8.4.32) - postcss-custom-properties: 13.3.4(postcss@8.4.32) - postcss-custom-selectors: 7.1.6(postcss@8.4.32) - postcss-dir-pseudo-class: 8.0.1(postcss@8.4.32) - postcss-double-position-gradients: 5.0.3(postcss@8.4.32) - postcss-focus-visible: 9.0.1(postcss@8.4.32) - postcss-focus-within: 8.0.1(postcss@8.4.32) - postcss-font-variant: 5.0.0(postcss@8.4.32) - postcss-gap-properties: 5.0.1(postcss@8.4.32) - postcss-image-set-function: 6.0.2(postcss@8.4.32) - postcss-lab-function: 6.0.9(postcss@8.4.32) - postcss-logical: 7.0.1(postcss@8.4.32) - postcss-nesting: 12.0.2(postcss@8.4.32) - postcss-opacity-percentage: 2.0.0(postcss@8.4.32) - postcss-overflow-shorthand: 5.0.1(postcss@8.4.32) - postcss-page-break: 3.0.4(postcss@8.4.32) - postcss-place: 9.0.1(postcss@8.4.32) - postcss-pseudo-class-any-link: 9.0.1(postcss@8.4.32) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.32) - postcss-selector-not: 7.0.1(postcss@8.4.32) + postcss: 8.4.33 + postcss-attribute-case-insensitive: 6.0.2(postcss@8.4.33) + postcss-clamp: 4.1.0(postcss@8.4.33) + postcss-color-functional-notation: 6.0.4(postcss@8.4.33) + postcss-color-hex-alpha: 9.0.3(postcss@8.4.33) + postcss-color-rebeccapurple: 9.0.2(postcss@8.4.33) + postcss-custom-media: 10.0.2(postcss@8.4.33) + postcss-custom-properties: 13.3.4(postcss@8.4.33) + postcss-custom-selectors: 7.1.6(postcss@8.4.33) + postcss-dir-pseudo-class: 8.0.1(postcss@8.4.33) + postcss-double-position-gradients: 5.0.3(postcss@8.4.33) + postcss-focus-visible: 9.0.1(postcss@8.4.33) + postcss-focus-within: 8.0.1(postcss@8.4.33) + postcss-font-variant: 5.0.0(postcss@8.4.33) + postcss-gap-properties: 5.0.1(postcss@8.4.33) + postcss-image-set-function: 6.0.2(postcss@8.4.33) + postcss-lab-function: 6.0.9(postcss@8.4.33) + postcss-logical: 7.0.1(postcss@8.4.33) + postcss-nesting: 12.0.2(postcss@8.4.33) + postcss-opacity-percentage: 2.0.0(postcss@8.4.33) + postcss-overflow-shorthand: 5.0.1(postcss@8.4.33) + postcss-page-break: 3.0.4(postcss@8.4.33) + postcss-place: 9.0.1(postcss@8.4.33) + postcss-pseudo-class-any-link: 9.0.1(postcss@8.4.33) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.33) + postcss-selector-not: 7.0.1(postcss@8.4.33) postcss-value-parser: 4.2.0 dev: true - /postcss-pseudo-class-any-link@9.0.1(postcss@8.4.32): + /postcss-pseudo-class-any-link@9.0.1(postcss@8.4.33): resolution: {integrity: sha512-cKYGGZ9yzUZi+dZd7XT2M8iSDfo+T2Ctbpiizf89uBTBfIpZpjvTavzIJXpCReMVXSKROqzpxClNu6fz4DHM0Q==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true - /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.32): + /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.33): resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} peerDependencies: postcss: ^8.0.3 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true /postcss-resolve-nested-selector@0.1.1: resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} dev: true - /postcss-safe-parser@6.0.0(postcss@8.4.32): + /postcss-safe-parser@6.0.0(postcss@8.4.33): resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.3.3 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /postcss-safe-parser@7.0.0(postcss@8.4.32): + /postcss-safe-parser@7.0.0(postcss@8.4.33): resolution: {integrity: sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==} engines: {node: '>=18.0'} peerDependencies: postcss: ^8.4.31 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /postcss-scss@4.0.9(postcss@8.4.32): + /postcss-scss@4.0.9(postcss@8.4.33): resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.4.29 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true - /postcss-selector-not@7.0.1(postcss@8.4.32): + /postcss-selector-not@7.0.1(postcss@8.4.33): resolution: {integrity: sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true @@ -8453,20 +8462,20 @@ packages: util-deprecate: 1.0.2 dev: true - /postcss-sorting@8.0.2(postcss@8.4.32): + /postcss-sorting@8.0.2(postcss@8.4.33): resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==} peerDependencies: postcss: ^8.4.20 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 dev: true /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + /postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -8554,7 +8563,7 @@ packages: dependencies: commander: 9.5.0 glob: 8.1.0 - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true @@ -8673,7 +8682,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.23.7 + '@babel/runtime': 7.23.8 dev: true /regexp.prototype.flags@1.5.1: @@ -9364,8 +9373,8 @@ packages: engines: {node: '>=8'} dev: true - /stylelint-config-clean-order@5.2.0(stylelint@16.1.0): - resolution: {integrity: sha512-eAB9ftPa8txPFY2oh4NIE3DFkNzqVEBIALUZhSXP0+6CISPjZPBoOV24shjC9DgOKr7rNPY52DAXBXIBI//Mhg==} + /stylelint-config-clean-order@5.3.0(stylelint@16.1.0): + resolution: {integrity: sha512-P7+xJv0Tj6WnnWEYc7h+AoHBTqm0JTGQkgVYXLW1tdNOfFw3LAoR1TtBA6Y47787gT1nH1tu8SsQlc1c/8i49A==} peerDependencies: stylelint: '>=14' dependencies: @@ -9384,7 +9393,7 @@ packages: stylelint: 16.1.0(typescript@5.3.3) dev: true - /stylelint-config-recommended-scss@14.0.0(postcss@8.4.32)(stylelint@16.1.0): + /stylelint-config-recommended-scss@14.0.0(postcss@8.4.33)(stylelint@16.1.0): resolution: {integrity: sha512-HDvpoOAQ1RpF+sPbDOT2Q2/YrBDEJDnUymmVmZ7mMCeNiFSdhRdyGEimBkz06wsN+HaFwUh249gDR+I9JR7Onw==} engines: {node: '>=18.12.0'} peerDependencies: @@ -9394,8 +9403,8 @@ packages: postcss: optional: true dependencies: - postcss: 8.4.32 - postcss-scss: 4.0.9(postcss@8.4.32) + postcss: 8.4.33 + postcss-scss: 4.0.9(postcss@8.4.33) stylelint: 16.1.0(typescript@5.3.3) stylelint-config-recommended: 14.0.0(stylelint@16.1.0) stylelint-scss: 6.0.0(stylelint@16.1.0) @@ -9424,27 +9433,27 @@ packages: stylelint: 16.1.0(typescript@5.3.3) dev: true - /stylelint-config-standard-scss@12.0.0(postcss@8.4.32)(stylelint@16.1.0): - resolution: {integrity: sha512-ATh3EcEOLZq0iwlFaBdIsSavrla0lNtJ7mO7hdE7DgVT6imozRggFSqd4cFcjzVnOLKv/uJT63MmqA1acIflbw==} + /stylelint-config-standard-scss@13.0.0(postcss@8.4.33)(stylelint@16.1.0): + resolution: {integrity: sha512-WaLvkP689qSYUpJQPCo30TFJSSc3VzvvoWnrgp+7PpVby5o8fRUY1cZcP0sePZfjrFl9T8caGhcKg0GO34VDiQ==} engines: {node: '>=18.12.0'} peerDependencies: postcss: ^8.3.3 - stylelint: ^16.0.2 + stylelint: ^16.1.0 peerDependenciesMeta: postcss: optional: true dependencies: - postcss: 8.4.32 + postcss: 8.4.33 stylelint: 16.1.0(typescript@5.3.3) - stylelint-config-recommended-scss: 14.0.0(postcss@8.4.32)(stylelint@16.1.0) - stylelint-config-standard: 35.0.0(stylelint@16.1.0) + stylelint-config-recommended-scss: 14.0.0(postcss@8.4.33)(stylelint@16.1.0) + stylelint-config-standard: 36.0.0(stylelint@16.1.0) dev: true - /stylelint-config-standard@35.0.0(stylelint@16.1.0): - resolution: {integrity: sha512-JyQrNZk2BZwVKFauGGxW2U6RuhIfQ4XoHHo+rBzMHcAkLnwI/knpszwXjzxiMgSfcxbZBckM7Vq4LHoANTR85g==} + /stylelint-config-standard@36.0.0(stylelint@16.1.0): + resolution: {integrity: sha512-3Kjyq4d62bYFp/Aq8PMKDwlgUyPU4nacXsjDLWJdNPRUgpuxALu1KnlAHIj36cdtxViVhXexZij65yM0uNIHug==} engines: {node: '>=18.12.0'} peerDependencies: - stylelint: ^16.0.0 + stylelint: ^16.1.0 dependencies: stylelint: 16.1.0(typescript@5.3.3) stylelint-config-recommended: 14.0.0(stylelint@16.1.0) @@ -9458,7 +9467,7 @@ packages: dependencies: doiuse: 6.0.2 lodash.pick: 4.4.0 - postcss: 8.4.32 + postcss: 8.4.33 stylelint: 16.1.0(typescript@5.3.3) dev: true @@ -9467,8 +9476,8 @@ packages: peerDependencies: stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1 dependencies: - postcss: 8.4.32 - postcss-sorting: 8.0.2(postcss@8.4.32) + postcss: 8.4.33 + postcss-sorting: 8.0.2(postcss@8.4.33) stylelint: 16.1.0(typescript@5.3.3) dev: true @@ -9513,13 +9522,13 @@ packages: is-plain-object: 5.0.0 known-css-properties: 0.29.0 mathml-tag-names: 2.1.3 - meow: 13.0.0 + meow: 13.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.32 + postcss: 8.4.33 postcss-resolve-nested-selector: 0.1.1 - postcss-safe-parser: 7.0.0(postcss@8.4.32) + postcss-safe-parser: 7.0.0(postcss@8.4.33) postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 @@ -9801,7 +9810,7 @@ packages: typescript: 5.3.3 dev: true - /ts-node@10.9.2(@swc/core@1.3.102)(@types/node@20.10.6)(typescript@5.3.3): + /ts-node@10.9.2(@swc/core@1.3.102)(@types/node@20.10.7)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -9821,7 +9830,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.10.6 + '@types/node': 20.10.7 acorn: 8.11.3 acorn-walk: 8.3.1 arg: 4.1.3 @@ -10238,8 +10247,8 @@ packages: teex: 1.0.1 dev: true - /vue-eslint-parser@9.3.2(eslint@8.56.0): - resolution: {integrity: sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==} + /vue-eslint-parser@9.4.0(eslint@8.56.0): + resolution: {integrity: sha512-7KsNBb6gHFA75BtneJsoK/dbZ281whUIwFYdQxA68QrCrGMXYzUMbPDHGcOQ0OocIVKrWSKWXZ4mL7tonCXoUw==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' @@ -10256,38 +10265,38 @@ packages: - supports-color dev: true - /vue-i18n@9.8.0(vue@3.4.4): - resolution: {integrity: sha512-Izho+6PYjejsTq2mzjcRdBZ5VLRQoSuuexvR8029h5CpN03FYqiqBrShMyf2I1DKkN6kw/xmujcbvC+4QybpsQ==} + /vue-i18n@9.9.0(vue@3.4.6): + resolution: {integrity: sha512-xQ5SxszUAqK5n84N+uUyHH/PiQl9xZ24FOxyAaNonmOQgXeN+rD9z/6DStOpOxNFQn4Cgcquot05gZc+CdOujA==} engines: {node: '>= 16'} peerDependencies: vue: ^3.0.0 dependencies: - '@intlify/core-base': 9.8.0 - '@intlify/shared': 9.8.0 + '@intlify/core-base': 9.9.0 + '@intlify/shared': 9.9.0 '@vue/devtools-api': 6.5.1 - vue: 3.4.4(typescript@5.3.3) + vue: 3.4.6(typescript@5.3.3) - /vue-slicksort@2.0.5(vue@3.4.4): + /vue-slicksort@2.0.5(vue@3.4.6): resolution: {integrity: sha512-fXz1YrNjhUbJK7o0tMk27mIr4pMAZYLSYvtmLazCtfpvz+zafPCn34ILDL8B7hT7WLVZKreYs6JVe5VWymqmzA==} peerDependencies: vue: '>=3.0.0' dependencies: - vue: 3.4.4(typescript@5.3.3) + vue: 3.4.6(typescript@5.3.3) dev: false - /vue@3.4.4(typescript@5.3.3): - resolution: {integrity: sha512-suZXgDVT8lRNhKmxdkwOsR0oyUi8is7mtqI18qW97JLoyorEbE9B2Sb4Ws/mR/+0AgA/JUtsv1ytlRSH3/pDIA==} + /vue@3.4.6(typescript@5.3.3): + resolution: {integrity: sha512-gAzw5oP0/h34/yq1LjLNpn4wrCKYMuWp2jbs/JirFiZAFWYhd9jTkXp4wIi5ApgMJrMgD6YFyyXwKsqFYR31IQ==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.4.4 - '@vue/compiler-sfc': 3.4.4 - '@vue/runtime-dom': 3.4.4 - '@vue/server-renderer': 3.4.4(vue@3.4.4) - '@vue/shared': 3.4.4 + '@vue/compiler-dom': 3.4.6 + '@vue/compiler-sfc': 3.4.6 + '@vue/runtime-dom': 3.4.6 + '@vue/server-renderer': 3.4.6(vue@3.4.6) + '@vue/shared': 3.4.6 typescript: 5.3.3 /w3c-xmlserializer@5.0.0: @@ -10434,8 +10443,8 @@ packages: dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) '@babel/core': 7.23.7 - '@babel/preset-env': 7.23.7(@babel/core@7.23.7) - '@babel/runtime': 7.23.7 + '@babel/preset-env': 7.23.8(@babel/core@7.23.7) + '@babel/runtime': 7.23.8 '@rollup/plugin-babel': 5.3.1(@babel/core@7.23.7)(rollup@2.79.1) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) From da3e7264740b6c210c2e7e9631fc9b50e5064a02 Mon Sep 17 00:00:00 2001 From: Mu-Tsun Tsai Date: Wed, 10 Jan 2024 11:47:44 +0800 Subject: [PATCH 03/11] Update to chai v5 --- .mocharc.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 54 ++++++++----------- .../plugins/treeMaker/treeMakerParser.ts | 2 +- test/chai.d.ts | 6 +++ test/{mocha.env.js => mocha.env.mjs} | 5 ++ test/specs/contour.spec.ts | 2 - test/specs/cp.spec.ts | 2 - .../dataStructure/binarySearchTree.spec.ts | 2 - test/specs/dataStructure/heap.spec.ts | 2 - test/specs/dataStructure/intDoubleMap.spec.ts | 2 - .../dataStructure/valuedIntDoubleMap.spec.ts | 2 - test/specs/geometry/arc.spec.ts | 2 - test/specs/geometry/line.spec.ts | 2 - test/specs/geometry/polyBool.spec.ts | 2 - test/specs/geometry/sweepLine.spec.ts | 2 - test/specs/junction.spec.ts | 2 - test/specs/math.spec.ts | 2 - test/specs/migration.spec.ts | 2 - test/specs/pattern.spec.ts | 3 +- test/specs/polyfill.spec.ts | 2 - test/specs/trace.spec.ts | 2 - test/specs/tree.spec.ts | 4 +- test/specs/treeMaker.spec.ts | 1 - test/specs/utility/array.spec.ts | 2 - test/specs/utility/clone.spec.ts | 2 - test/utils/line.ts | 2 - test/utils/path.ts | 2 - 28 files changed, 39 insertions(+), 78 deletions(-) create mode 100644 test/chai.d.ts rename test/{mocha.env.js => mocha.env.mjs} (57%) diff --git a/.mocharc.json b/.mocharc.json index 17e9a9ec..edec1462 100644 --- a/.mocharc.json +++ b/.mocharc.json @@ -7,7 +7,7 @@ ], "timeout": "0", "require": [ - "./test/mocha.env", + "./test/mocha.env.mjs", "ts-node/register", "tsconfig-paths/register" ] diff --git a/package.json b/package.json index 8461a17a..f60510e7 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@typescript-eslint/parser": "^6.18.1", "@vue/compiler-sfc": "^3.4.6", "@vue/eslint-config-typescript": "12.0.0", - "chai": "^4.4.0", + "chai": "^5.0.0", "del": "7.1.0", "esbuild": "^0.19.11", "esbuild-ifdef": "^0.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 733b8d34..848e90ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -144,8 +144,8 @@ devDependencies: specifier: 12.0.0 version: 12.0.0(eslint-plugin-vue@9.19.2)(eslint@8.56.0)(typescript@5.3.3) chai: - specifier: ^4.4.0 - version: 4.4.0 + specifier: ^5.0.0 + version: 5.0.0 del: specifier: 7.1.0 version: 7.1.0 @@ -3610,8 +3610,9 @@ packages: engines: {node: '>=8'} dev: true - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + /assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} dev: true /assign-symbols@1.0.0: @@ -3937,17 +3938,15 @@ packages: resolution: {integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==} dev: true - /chai@4.4.0: - resolution: {integrity: sha512-x9cHNq1uvkCdU+5xTkNh5WtgD4e4yDFCsp9jVc7N7qVeKeftv3gO/ZrviX5d+3ZfxdYnZXZYujjRInu1RogU6A==} - engines: {node: '>=4'} + /chai@5.0.0: + resolution: {integrity: sha512-HO5p0oEKd5M6HEcwOkNAThAE3j960vIZvVcc0t2tI06Dd0ATu69cEnMB2wOhC5/ZyQ6m67w3ePjU/HzXsSsdBA==} + engines: {node: '>=12'} dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.3 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.0.8 + assertion-error: 2.0.1 + check-error: 2.0.0 + deep-eql: 5.0.1 + loupe: 3.1.0 + pathval: 2.0.0 dev: true /chalk@2.4.2: @@ -3976,10 +3975,9 @@ packages: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - dependencies: - get-func-name: 2.0.2 + /check-error@2.0.0: + resolution: {integrity: sha512-tjLAOBHKVxtPoHe/SA7kNOMvhCRdCJ3vETdeY0RuAc9popf+hyaSV6ZEg9hr4cpWF7jmo/JSWEnLDrnijS9Tog==} + engines: {node: '>= 16'} dev: true /chokidar@3.5.3: @@ -4395,11 +4393,9 @@ packages: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: true - /deep-eql@4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + /deep-eql@5.0.1: + resolution: {integrity: sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==} engines: {node: '>=6'} - dependencies: - type-detect: 4.0.8 dev: true /deep-is@0.1.4: @@ -7136,8 +7132,8 @@ packages: is-unicode-supported: 0.1.0 dev: true - /loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + /loupe@3.1.0: + resolution: {integrity: sha512-qKl+FrLXUhFuHUoDJG7f8P8gEMHq9NFS0c6ghXG1J0rldmZFQZoNVv/vyirE9qwCIhWZDsvEFd1sbFu3GvRQFg==} dependencies: get-func-name: 2.0.2 dev: true @@ -7988,8 +7984,9 @@ packages: engines: {node: '>=8'} dev: true - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + /pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} dev: true /picocolors@1.0.0: @@ -9906,11 +9903,6 @@ packages: prelude-ls: 1.2.1 dev: true - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true - /type-fest@0.16.0: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} diff --git a/src/client/plugins/treeMaker/treeMakerParser.ts b/src/client/plugins/treeMaker/treeMakerParser.ts index 6f28cb92..9f845649 100644 --- a/src/client/plugins/treeMaker/treeMakerParser.ts +++ b/src/client/plugins/treeMaker/treeMakerParser.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-magic-numbers */ -import { Migration } from "client/patches/migration"; +import { Migration } from "client/patches"; import { lcm } from "core/math/utils/gcd"; import { GridType } from "shared/json"; import { toFractionRecursive } from "core/math/fraction"; diff --git a/test/chai.d.ts b/test/chai.d.ts new file mode 100644 index 00000000..5a582a80 --- /dev/null +++ b/test/chai.d.ts @@ -0,0 +1,6 @@ +import type * as chai from "chai"; + +declare global { + declare const expect: typeof chai.expect; + declare const Assertion: typeof chai.Assertion; +} diff --git a/test/mocha.env.js b/test/mocha.env.mjs similarity index 57% rename from test/mocha.env.js rename to test/mocha.env.mjs index eb8cc1dd..685cfb46 100644 --- a/test/mocha.env.js +++ b/test/mocha.env.mjs @@ -1,5 +1,10 @@ +import { Assertion, expect } from "chai"; + process.env.NODE_ENV = "test"; process.env.TS_NODE_PROJECT = "test/tsconfig.json"; globalThis.DEBUG_ENABLED = true; globalThis.TEST_MODE = true; + +globalThis.Assertion = Assertion; +globalThis.expect = expect; diff --git a/test/specs/contour.spec.ts b/test/specs/contour.spec.ts index 718bcc29..9dd4f144 100644 --- a/test/specs/contour.spec.ts +++ b/test/specs/contour.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { parseRationalPath } from "../utils/rationalPath"; import { toGraphicalContours } from "core/design/tasks/utils/combine"; import { id1, id6, parseTree } from "../utils/tree"; diff --git a/test/specs/cp.spec.ts b/test/specs/cp.spec.ts index 4c5f2f38..3b87be39 100644 --- a/test/specs/cp.spec.ts +++ b/test/specs/cp.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { parseTree } from "../utils/tree"; import { LayoutController } from "core/controller/layoutController"; import { parsePath } from "../utils/path"; diff --git a/test/specs/dataStructure/binarySearchTree.spec.ts b/test/specs/dataStructure/binarySearchTree.spec.ts index ba459c17..e2056f69 100644 --- a/test/specs/dataStructure/binarySearchTree.spec.ts +++ b/test/specs/dataStructure/binarySearchTree.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { RavlTree } from "shared/data/bst/ravlTree"; import { random } from "../../utils/random"; import { minComparator } from "shared/data/heap/heap"; diff --git a/test/specs/dataStructure/heap.spec.ts b/test/specs/dataStructure/heap.spec.ts index a50efd3a..82ce6460 100644 --- a/test/specs/dataStructure/heap.spec.ts +++ b/test/specs/dataStructure/heap.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { HeapSet } from "shared/data/heap/heapSet"; import { MutableHeap } from "shared/data/heap/mutableHeap"; import { xyComparator } from "shared/types/geometry"; diff --git a/test/specs/dataStructure/intDoubleMap.spec.ts b/test/specs/dataStructure/intDoubleMap.spec.ts index a8caf809..852f46ee 100644 --- a/test/specs/dataStructure/intDoubleMap.spec.ts +++ b/test/specs/dataStructure/intDoubleMap.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { IntDoubleMap, MAX } from "shared/data/doubleMap/intDoubleMap"; export default function() { diff --git a/test/specs/dataStructure/valuedIntDoubleMap.spec.ts b/test/specs/dataStructure/valuedIntDoubleMap.spec.ts index 6ff6e45b..14e065d9 100644 --- a/test/specs/dataStructure/valuedIntDoubleMap.spec.ts +++ b/test/specs/dataStructure/valuedIntDoubleMap.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { ValuedIntDoubleMap } from "shared/data/doubleMap/valuedIntDoubleMap"; export default function() { diff --git a/test/specs/geometry/arc.spec.ts b/test/specs/geometry/arc.spec.ts index 70cc363e..d7c6df22 100644 --- a/test/specs/geometry/arc.spec.ts +++ b/test/specs/geometry/arc.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { getCurvature } from "core/math/sweepLine/polyBool/rrIntersection/rrEventProvider"; import { EPSILON } from "core/math/geometry/float"; import { StartEvent } from "core/math/sweepLine/classes/event"; diff --git a/test/specs/geometry/line.spec.ts b/test/specs/geometry/line.spec.ts index 05107e09..247fb094 100644 --- a/test/specs/geometry/line.spec.ts +++ b/test/specs/geometry/line.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { Line } from "core/math/geometry/line"; import { parseLine } from "../../utils/line"; diff --git a/test/specs/geometry/polyBool.spec.ts b/test/specs/geometry/polyBool.spec.ts index 2c17ae6f..8efea43b 100644 --- a/test/specs/geometry/polyBool.spec.ts +++ b/test/specs/geometry/polyBool.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { expand } from "core/design/tasks/roughContour"; import { AAUnion, GeneralUnion, RRIntersection } from "core/math/sweepLine/polyBool"; import { random } from "../../utils/random"; diff --git a/test/specs/geometry/sweepLine.spec.ts b/test/specs/geometry/sweepLine.spec.ts index 562d30f2..c2081bba 100644 --- a/test/specs/geometry/sweepLine.spec.ts +++ b/test/specs/geometry/sweepLine.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { parsePath } from "../../utils/path"; import { Stacking } from "core/math/sweepLine/stacking/stacking"; import { Clip } from "core/math/sweepLine/clip/clip"; diff --git a/test/specs/junction.spec.ts b/test/specs/junction.spec.ts index 61532572..8b3bdd18 100644 --- a/test/specs/junction.spec.ts +++ b/test/specs/junction.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { heightTask } from "core/design/tasks/height"; import { Processor } from "core/service/processor"; import { State } from "core/service/state"; diff --git a/test/specs/math.spec.ts b/test/specs/math.spec.ts index 6a2054ae..0fa00036 100644 --- a/test/specs/math.spec.ts +++ b/test/specs/math.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { gcd, lcm } from "core/math/utils/gcd"; import { Fraction, toFraction } from "core/math/fraction"; diff --git a/test/specs/migration.spec.ts b/test/specs/migration.spec.ts index 3a383d45..b700a370 100644 --- a/test/specs/migration.spec.ts +++ b/test/specs/migration.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { Migration } from "client/patches"; import * as sample from "../samples/v04.session.sample.json"; diff --git a/test/specs/pattern.spec.ts b/test/specs/pattern.spec.ts index ac92e791..d5d4908a 100644 --- a/test/specs/pattern.spec.ts +++ b/test/specs/pattern.spec.ts @@ -1,6 +1,5 @@ -import { expect } from "chai"; - import "../utils/line"; +import "../utils/path"; import { LayoutController } from "core/controller/layoutController"; import { DesignController } from "core/controller/designController"; import { Migration } from "client/patches"; diff --git a/test/specs/polyfill.spec.ts b/test/specs/polyfill.spec.ts index 54a16d4f..f9b19a29 100644 --- a/test/specs/polyfill.spec.ts +++ b/test/specs/polyfill.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { toReversed } from "shared/polyfill/toReversed"; import { flatMap } from "shared/polyfill/flatMap"; diff --git a/test/specs/trace.spec.ts b/test/specs/trace.spec.ts index c9b4e4dd..775017be 100644 --- a/test/specs/trace.spec.ts +++ b/test/specs/trace.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { Trace } from "core/design/layout/trace/trace"; import { Line } from "core/math/geometry/line"; import { Direction, SlashDirection } from "shared/types/direction"; diff --git a/test/specs/tree.spec.ts b/test/specs/tree.spec.ts index 9ac5c896..df7d04c1 100644 --- a/test/specs/tree.spec.ts +++ b/test/specs/tree.spec.ts @@ -1,7 +1,5 @@ -import { expect } from "chai"; - import { TreeController } from "core/controller/treeController"; -import { Tree, getDist } from "core/design/context/tree"; +import { getDist } from "core/design/context/tree"; import { heightTask } from "core/design/tasks/height"; import { Processor } from "core/service/processor"; import { createTree, node, id0, id1, id2, id3, id4, id6, parseTree } from "../utils/tree"; diff --git a/test/specs/treeMaker.spec.ts b/test/specs/treeMaker.spec.ts index dbae9194..d0583609 100644 --- a/test/specs/treeMaker.spec.ts +++ b/test/specs/treeMaker.spec.ts @@ -1,4 +1,3 @@ -import { expect } from "chai"; import { readFileSync } from "fs"; import { treeMaker } from "client/plugins/treeMaker"; diff --git a/test/specs/utility/array.spec.ts b/test/specs/utility/array.spec.ts index ed4f79d6..c1fb51c7 100644 --- a/test/specs/utility/array.spec.ts +++ b/test/specs/utility/array.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { distinct, isTypedArray } from "shared/utils/array"; export default function() { diff --git a/test/specs/utility/clone.spec.ts b/test/specs/utility/clone.spec.ts index 97dd9425..e53f6f4b 100644 --- a/test/specs/utility/clone.spec.ts +++ b/test/specs/utility/clone.spec.ts @@ -1,5 +1,3 @@ -import { expect } from "chai"; - import { clone, clonePolyfill, deepAssign } from "shared/utils/clone"; export default function() { diff --git a/test/utils/line.ts b/test/utils/line.ts index ec071a84..c6fbf06a 100644 --- a/test/utils/line.ts +++ b/test/utils/line.ts @@ -1,6 +1,4 @@ -import { Assertion } from "chai"; import { Line } from "core/math/geometry/line"; - import { pointToString } from "core/math/geometry/path"; import { same } from "shared/types/geometry"; diff --git a/test/utils/path.ts b/test/utils/path.ts index 014b136a..59520a56 100644 --- a/test/utils/path.ts +++ b/test/utils/path.ts @@ -1,5 +1,3 @@ -import { Assertion } from "chai"; - import { pathToString } from "core/math/geometry/path"; import { same } from "shared/types/geometry"; From b121becf165a91d75075fa8b4c0f5ec232cb7b88 Mon Sep 17 00:00:00 2001 From: Mu-Tsun Tsai Date: Wed, 10 Jan 2024 17:51:13 +0800 Subject: [PATCH 04/11] Improve coverage --- .nycrc | 20 +- package.json | 15 +- pnpm-lock.yaml | 229 +++++++++++----------- src/client/patches/migration.ts | 3 +- src/core/controller/layoutController.ts | 1 - src/core/design/context/tree.ts | 2 + src/core/design/context/treeNode.ts | 14 +- src/core/design/layout/nodeSet.ts | 19 +- src/core/design/layout/pattern/pattern.ts | 2 + src/core/design/tasks/utils/combine.ts | 2 + src/core/math/geometry/couple.ts | 9 +- src/core/math/geometry/line.ts | 1 + src/core/math/geometry/rationalPath.ts | 1 + src/shared/data/doubleMap/intDoubleMap.ts | 6 +- test/specs/geometry/line.spec.ts | 12 +- test/specs/geometry/polyBool.spec.ts | 15 ++ test/specs/math.spec.ts | 9 + test/specs/pattern.spec.ts | 33 +++- test/utils/tree.ts | 4 + 19 files changed, 246 insertions(+), 151 deletions(-) diff --git a/.nycrc b/.nycrc index 4b0a45d8..fb6ad84a 100644 --- a/.nycrc +++ b/.nycrc @@ -3,5 +3,23 @@ "branches": 90, "lines": 95, "functions": 95, - "statements": 95 + "statements": 95, + "watermarks": { + "lines": [ + 80, + 95 + ], + "functions": [ + 80, + 95 + ], + "branches": [ + 80, + 95 + ], + "statements": [ + 80, + 95 + ] + } } diff --git a/package.json b/package.json index f60510e7..de2ad95b 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,9 @@ "main": "./build/dist/bpstudio.js", "scripts": { "build": "gulp", - "cov": "nyc --reporter=lcovonly --reporter=text-summary mocha --require mocha-suppress-logs", - "cov:text": "nyc --reporter=lcovonly --reporter=text mocha --require mocha-suppress-logs", + "cov": "nyc -r lcovonly -r text-summary mocha --require mocha-suppress-logs", + "cov:html": "nyc -r html mocha --require mocha-suppress-logs", + "cov:text": "nyc -r lcovonly -r text mocha --require mocha-suppress-logs", "license-check": "pnpx license-checker --exclude \"MIT,Apache-2.0,BSD-2-Clause,ISC\"", "lint": "eslint src", "loc": "powershell \"(gci src -include *.ts,*.htm,*.scss,*.vue -recurse | select-string .).Count\"", @@ -38,11 +39,11 @@ "@types/gulp": "^4.0.17", "@types/gulp-load-plugins": "^0.0.37", "@types/mocha": "^10.0.6", - "@types/node": "^20.10.7", + "@types/node": "^20.10.8", "@types/wicg-file-system-access": "^2023.10.4", "@typescript-eslint/eslint-plugin": "^6.18.1", "@typescript-eslint/parser": "^6.18.1", - "@vue/compiler-sfc": "^3.4.6", + "@vue/compiler-sfc": "^3.4.8", "@vue/eslint-config-typescript": "12.0.0", "chai": "^5.0.0", "del": "7.1.0", @@ -59,7 +60,7 @@ "eslint-plugin-local-rules": "^2.0.1", "eslint-plugin-mocha": "^10.2.0", "eslint-plugin-typescript-compat": "^1.0.2", - "eslint-plugin-vue": "^9.19.2", + "eslint-plugin-vue": "^9.20.0", "fancy-log": "^2.0.0", "global-jsdom": "^9.2.0", "gulp": "^4.0.2", @@ -96,7 +97,7 @@ "resolve": "^1.22.8", "sass": "^1.69.7", "stylelint": "^16.1.0", - "stylelint-config-clean-order": "^5.3.0", + "stylelint-config-clean-order": "^5.4.0", "stylelint-config-recommended-vue": "^1.5.0", "stylelint-config-standard-scss": "^13.0.0", "stylelint-no-unsupported-browser-features": "^8.0.0", @@ -129,7 +130,7 @@ "idb-keyval": "^6.2.1", "jszip": "^3.10.1", "lzma": "^2.3.2", - "vue": "^3.4.6", + "vue": "^3.4.8", "vue-i18n": "^9.9.0", "vue-slicksort": "^2.0.5", "workbox-broadcast-update": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 848e90ec..4cd79475 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,14 +67,14 @@ dependencies: specifier: ^2.3.2 version: 2.3.2 vue: - specifier: ^3.4.6 - version: 3.4.6(typescript@5.3.3) + specifier: ^3.4.8 + version: 3.4.8(typescript@5.3.3) vue-i18n: specifier: ^9.9.0 - version: 9.9.0(vue@3.4.6) + version: 9.9.0(vue@3.4.8) vue-slicksort: specifier: ^2.0.5 - version: 2.0.5(vue@3.4.6) + version: 2.0.5(vue@3.4.8) workbox-broadcast-update: specifier: ^7.0.0 version: 7.0.0 @@ -97,7 +97,7 @@ devDependencies: version: 2.1.2 '@intlify/vue-i18n-extensions': specifier: ^5.0.1 - version: 5.0.1(vue-i18n@9.9.0)(vue@3.4.6) + version: 5.0.1(vue-i18n@9.9.0)(vue@3.4.8) '@makeomatic/gulp-wrap-js': specifier: ^1.0.2 version: 1.0.2 @@ -126,8 +126,8 @@ devDependencies: specifier: ^10.0.6 version: 10.0.6 '@types/node': - specifier: ^20.10.7 - version: 20.10.7 + specifier: ^20.10.8 + version: 20.10.8 '@types/wicg-file-system-access': specifier: ^2023.10.4 version: 2023.10.4 @@ -138,11 +138,11 @@ devDependencies: specifier: ^6.18.1 version: 6.18.1(eslint@8.56.0)(typescript@5.3.3) '@vue/compiler-sfc': - specifier: ^3.4.6 - version: 3.4.6 + specifier: ^3.4.8 + version: 3.4.8 '@vue/eslint-config-typescript': specifier: 12.0.0 - version: 12.0.0(eslint-plugin-vue@9.19.2)(eslint@8.56.0)(typescript@5.3.3) + version: 12.0.0(eslint-plugin-vue@9.20.0)(eslint@8.56.0)(typescript@5.3.3) chai: specifier: ^5.0.0 version: 5.0.0 @@ -157,7 +157,7 @@ devDependencies: version: 0.2.0(esbuild@0.19.11) esbuild-plugin-vue-next: specifier: npm:@wfrog/esbuild-plugin-vue-next@^0.1.5 - version: /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.6) + version: /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.8) esbuild-sass-plugin: specifier: ^2.16.1 version: 2.16.1(esbuild@0.19.11) @@ -189,8 +189,8 @@ devDependencies: specifier: ^1.0.2 version: 1.0.2(eslint@8.56.0)(typescript@5.3.3) eslint-plugin-vue: - specifier: ^9.19.2 - version: 9.19.2(eslint@8.56.0) + specifier: ^9.20.0 + version: 9.20.0(eslint@8.56.0) fancy-log: specifier: ^2.0.0 version: 2.0.0 @@ -250,7 +250,7 @@ devDependencies: version: 1.0.1 gulp-vue-ssg: specifier: ^1.2.2 - version: 1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.6) + version: 1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.8) gulp-workbox: specifier: ^1.0.6 version: 1.0.6(workbox-build@7.0.0) @@ -300,8 +300,8 @@ devDependencies: specifier: ^16.1.0 version: 16.1.0(typescript@5.3.3) stylelint-config-clean-order: - specifier: ^5.3.0 - version: 5.3.0(stylelint@16.1.0) + specifier: ^5.4.0 + version: 5.4.0(stylelint@16.1.0) stylelint-config-recommended-vue: specifier: ^1.5.0 version: 1.5.0(postcss-html@1.5.0)(stylelint@16.1.0) @@ -316,7 +316,7 @@ devDependencies: version: 4.0.2 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.3.102)(@types/node@20.10.7)(typescript@5.3.3) + version: 10.9.2(@swc/core@1.3.102)(@types/node@20.10.8)(typescript@5.3.3) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 @@ -2187,11 +2187,11 @@ packages: engines: {node: '>=6'} requiresBuild: true - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.1 + '@humanwhocodes/object-schema': 2.0.2 debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: @@ -2203,8 +2203,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} dev: true /@intlify/core-base@9.9.0: @@ -2225,7 +2225,7 @@ packages: resolution: {integrity: sha512-1ECUyAHRrzOJbOizyGufYP2yukqGrWXtkmTu4PcswVnWbkcjzk3YQGmJ0bLkM7JZ0ZYAaohLGdYvBYnTOGYJ9g==} engines: {node: '>= 16'} - /@intlify/vue-i18n-extensions@5.0.1(vue-i18n@9.9.0)(vue@3.4.6): + /@intlify/vue-i18n-extensions@5.0.1(vue-i18n@9.9.0)(vue@3.4.8): resolution: {integrity: sha512-bS07jIt9nFXfUUpQLqdog7O1Gi8rSCgTyEzabiho5nrrVFmaIbDRr7LSNBPA8fakPdAuY8V1lJa6xmkI33+n8w==} engines: {node: '>= 14.18'} peerDependencies: @@ -2234,9 +2234,9 @@ packages: dependencies: '@babel/parser': 7.23.6 '@intlify/shared': 9.9.0 - '@vue/compiler-dom': 3.4.6 - vue: 3.4.6(typescript@5.3.3) - vue-i18n: 9.9.0(vue@3.4.6) + '@vue/compiler-dom': 3.4.8 + vue: 3.4.8(typescript@5.3.3) + vue-i18n: 9.9.0(vue@3.4.8) dev: true /@isaacs/cliui@8.0.2: @@ -2331,8 +2331,8 @@ packages: vinyl-sourcemaps-apply: 0.2.1 dev: true - /@mdn/browser-compat-data@5.5.4: - resolution: {integrity: sha512-3Ut58LMJig1igriRHsbRHd7tRi4zz3dlnM/6msgl6FqDglxWZLN+ikYsluOg4D6CFmsXBq5WyYF/7HLwHMzDzA==} + /@mdn/browser-compat-data@5.5.5: + resolution: {integrity: sha512-gYj8JhdT7qvc7Baq4KxFDu7TJUywiOvml3D8qZsIkhxkiVfeT11ZczLBAuEPZ05neE9wPAVxHOFws45OEGU99w==} dev: true /@nodelib/fs.scandir@2.1.5: @@ -2827,7 +2827,7 @@ packages: /@types/glob-stream@8.0.2: resolution: {integrity: sha512-kyuRfGE+yiSJWzSO3t74rXxdZNdYfLcllO0IUha4eX1fl40pm9L02Q/TEc3mykTLjoWz4STBNwYnUWdFu3I0DA==} dependencies: - '@types/node': 20.10.7 + '@types/node': 20.10.8 '@types/picomatch': 2.3.3 '@types/streamx': 2.9.5 dev: true @@ -2839,13 +2839,13 @@ packages: /@types/gulp-load-plugins@0.0.37: resolution: {integrity: sha512-gmQpE77bVR5bbT7xUltn3eXQ+EEa0D3aplJHeZhnefOvPxm3cEjfJTa8UMnkVpAmi6b465vmmQqkIpDM/5H+HA==} dependencies: - '@types/node': 20.10.7 + '@types/node': 20.10.8 dev: true /@types/gulp@4.0.17: resolution: {integrity: sha512-+pKQynu2C/HS16kgmDlAicjtFYP8kaa86eE9P0Ae7GB5W29we/E2TIdbOWtEZD5XkpY+jr8fyqfwO6SWZecLpQ==} dependencies: - '@types/node': 20.10.7 + '@types/node': 20.10.8 '@types/undertaker': 1.2.11 '@types/vinyl-fs': 3.0.5 chokidar: 3.5.3 @@ -2867,8 +2867,8 @@ packages: resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} dev: true - /@types/node@20.10.7: - resolution: {integrity: sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==} + /@types/node@20.10.8: + resolution: {integrity: sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA==} dependencies: undici-types: 5.26.5 dev: true @@ -2884,7 +2884,7 @@ packages: /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 20.10.7 + '@types/node': 20.10.8 dev: true /@types/semver@7.5.6: @@ -2894,7 +2894,7 @@ packages: /@types/streamx@2.9.5: resolution: {integrity: sha512-IHYsa6jYrck8VEdSwpY141FTTf6D7boPeMq9jy4qazNrFMA4VbRz/sw5LSsfR7jwdDcx0QKWkUexZvsWBC2eIQ==} dependencies: - '@types/node': 20.10.7 + '@types/node': 20.10.8 dev: true /@types/trusted-types@2.0.7: @@ -2908,7 +2908,7 @@ packages: /@types/undertaker@1.2.11: resolution: {integrity: sha512-j1Z0V2ByRHr8ZK7eOeGq0LGkkdthNFW0uAZGY22iRkNQNL9/vAV0yFPr1QN3FM/peY5bxs9P+1f0PYJTQVa5iA==} dependencies: - '@types/node': 20.10.7 + '@types/node': 20.10.8 '@types/undertaker-registry': 1.0.4 async-done: 1.3.2 dev: true @@ -2917,7 +2917,7 @@ packages: resolution: {integrity: sha512-ckYz9giHgV6U10RFuf9WsDQ3X86EFougapxHmmoxLK7e6ICQqO8CE+4V/3lBN148V5N1pb4nQMmMjyScleVsig==} dependencies: '@types/glob-stream': 8.0.2 - '@types/node': 20.10.7 + '@types/node': 20.10.8 '@types/vinyl': 2.0.11 dev: true @@ -2925,7 +2925,7 @@ packages: resolution: {integrity: sha512-vPXzCLmRp74e9LsP8oltnWKTH+jBwt86WgRUb4Pc9Lf3pkMVGyvIo2gm9bODeGfCay2DBB/hAWDuvf07JcK4rw==} dependencies: '@types/expect': 1.20.4 - '@types/node': 20.10.7 + '@types/node': 20.10.8 dev: true /@types/wicg-file-system-access@2023.10.4: @@ -3143,44 +3143,44 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vue/compiler-core@3.4.6: - resolution: {integrity: sha512-9SmkpHsXqhHGMIOp4cawUqp0AxLN2fJJfxh3sR2RaouVx/Y/ww5ts3dfpD9SCvD0n8cdO/Xw+kWEpa6EkH/vTQ==} + /@vue/compiler-core@3.4.8: + resolution: {integrity: sha512-GjAwOydZV6UyVBi1lYW5v4jjfU6wOeyi3vBATKJOwV7muYF0/nZi4kfdJc0pwdT5lXwbbx57lyA2Y356rFpw1A==} dependencies: '@babel/parser': 7.23.6 - '@vue/shared': 3.4.6 + '@vue/shared': 3.4.8 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.0.2 - /@vue/compiler-dom@3.4.6: - resolution: {integrity: sha512-i39ZuyHPzPb0v5yXZbvODGwLr+T7lS1rYSjMd1oCTa14aDP80kYpWXrWPF1JVD4QJJNyLgFnJ2hxvFLM7dy9NQ==} + /@vue/compiler-dom@3.4.8: + resolution: {integrity: sha512-GsPyji42zmkSJlaDFKXvwB97ukTlHzlFH/iVzPFYz/APnSzuhu/CMFQbsYmrtsnc2yscF39eC4rKzvKR27aBug==} dependencies: - '@vue/compiler-core': 3.4.6 - '@vue/shared': 3.4.6 + '@vue/compiler-core': 3.4.8 + '@vue/shared': 3.4.8 - /@vue/compiler-sfc@3.4.6: - resolution: {integrity: sha512-kTFOiyMtuetFqi5yEPA4hR6FTD36zKKY3qaBonxGb4pgj0yK1eACqH+iycTAsEqr2u4cOhcGkx3Yjecpgh6FTQ==} + /@vue/compiler-sfc@3.4.8: + resolution: {integrity: sha512-3ZcurOa6bQdZ6VZLtMqYSUZqpsMqfX0MC3oCxQG0VIJFCqouZAgRYJN1c8QvGs7HW5wW8aXVvUOQU0ILVlYHKA==} dependencies: '@babel/parser': 7.23.6 - '@vue/compiler-core': 3.4.6 - '@vue/compiler-dom': 3.4.6 - '@vue/compiler-ssr': 3.4.6 - '@vue/shared': 3.4.6 + '@vue/compiler-core': 3.4.8 + '@vue/compiler-dom': 3.4.8 + '@vue/compiler-ssr': 3.4.8 + '@vue/shared': 3.4.8 estree-walker: 2.0.2 magic-string: 0.27.0 postcss: 8.4.33 source-map-js: 1.0.2 - /@vue/compiler-ssr@3.4.6: - resolution: {integrity: sha512-XqeojjDitjMLyOogDePNSxw9XL4FAXchO9oOfqdzLVEtYES5j+AEilPJyP0KhQPfGecY2mJ3Y7/e6kkiJQLKvg==} + /@vue/compiler-ssr@3.4.8: + resolution: {integrity: sha512-nxN79LHeAemhBpIa2PQ6rz57cW7W4C/XIJCOMSn2g49u6q2ekirmJI0osAOTErQPApOR0KwP2QyeTexX4zQCrw==} dependencies: - '@vue/compiler-dom': 3.4.6 - '@vue/shared': 3.4.6 + '@vue/compiler-dom': 3.4.8 + '@vue/shared': 3.4.8 /@vue/devtools-api@6.5.1: resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} - /@vue/eslint-config-typescript@12.0.0(eslint-plugin-vue@9.19.2)(eslint@8.56.0)(typescript@5.3.3): + /@vue/eslint-config-typescript@12.0.0(eslint-plugin-vue@9.20.0)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: @@ -3194,49 +3194,49 @@ packages: '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 - eslint-plugin-vue: 9.19.2(eslint@8.56.0) + eslint-plugin-vue: 9.20.0(eslint@8.56.0) typescript: 5.3.3 vue-eslint-parser: 9.4.0(eslint@8.56.0) transitivePeerDependencies: - supports-color dev: true - /@vue/reactivity@3.4.6: - resolution: {integrity: sha512-/VuOxdWDyAeKFHjOuSKEtH9jEVPRgsXxu84utBP1SiXFcFRx2prwiC9cSR8hKOfj5nBwhLXYb6XEU69mLpuk0w==} + /@vue/reactivity@3.4.8: + resolution: {integrity: sha512-UJYMQ3S2rqIGw9IvKomD4Xw2uS5VlcKEEmwcfboGOdrI79oqebxnCgTvXWLMClvg3M5SF0Cyn+9eDQoyGMLu9Q==} dependencies: - '@vue/shared': 3.4.6 + '@vue/shared': 3.4.8 - /@vue/runtime-core@3.4.6: - resolution: {integrity: sha512-XDOx8iiNmP66p+goUHT5XL1AnV8406VVFQARbylqmSCBZEtxchfu2ZoQk7U07ze8G/E0/BtX/C5o29zB1W4o5A==} + /@vue/runtime-core@3.4.8: + resolution: {integrity: sha512-sMRXOy89KnwY6fWG5epgPOsCWzpo/64FrA0QkjIeNeGnoA2YyZ6bBUxpFUyqhJ8VbrDhXEFH+6LHMOYrpzX/ZQ==} dependencies: - '@vue/reactivity': 3.4.6 - '@vue/shared': 3.4.6 + '@vue/reactivity': 3.4.8 + '@vue/shared': 3.4.8 - /@vue/runtime-dom@3.4.6: - resolution: {integrity: sha512-8bdQR5CLfzClGvAOfbbCF8adE9oko0pRfe+dj297i0JCdCJ8AuyUMsXkt6vGPcRPqIKX4Z8f/bDPrwl+c7e4Wg==} + /@vue/runtime-dom@3.4.8: + resolution: {integrity: sha512-L4gZcYo8f3d7rQqQIHkPvyczkjjQ55cJqz2G0v6Ptmqa1mO2zkqN9F8lBT6aGPYy3hd0RDiINbs4jxhSvvy10Q==} dependencies: - '@vue/runtime-core': 3.4.6 - '@vue/shared': 3.4.6 + '@vue/runtime-core': 3.4.8 + '@vue/shared': 3.4.8 csstype: 3.1.3 - /@vue/server-renderer@3.4.6(vue@3.4.6): - resolution: {integrity: sha512-0LS+GXf3M93KloaK/S0ZPq5PnKERgPAV5iNCCpjyBLhAQGGEeqfJojs3yXOAMQLSvXi9FLYDHzDEOLWoLaYbTQ==} + /@vue/server-renderer@3.4.8(vue@3.4.8): + resolution: {integrity: sha512-pBeHM59Owevr3P0Fl1XOjBmq4DTy5JDcjMG4NuzJEVDlZYzY8fHybx0wdjkY5lK5mCtUyBtw6Mz4d87aosc1Sw==} peerDependencies: - vue: 3.4.6 + vue: 3.4.8 dependencies: - '@vue/compiler-ssr': 3.4.6 - '@vue/shared': 3.4.6 - vue: 3.4.6(typescript@5.3.3) + '@vue/compiler-ssr': 3.4.8 + '@vue/shared': 3.4.8 + vue: 3.4.8(typescript@5.3.3) - /@vue/shared@3.4.6: - resolution: {integrity: sha512-O16vewA05D0IwfG2N/OFEuVeb17pieaI32mmYXp36V8lp+/pI1YV04rRL9Eyjndj3xQO5SNjAxTh6ul4IlBa3A==} + /@vue/shared@3.4.8: + resolution: {integrity: sha512-ChLCWzXiJboQ009oVkemhEoUdrxHme7v3ip+Kh+/kDDeF1WtHWGt0knRLGm1Y4YqCRTSs9QxsZIY8paJj5Szrw==} - /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.6): + /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.8): resolution: {integrity: sha512-Ip8ZVRlI2AP7IrG1UIzGLiSClBp50tWDGgukM1cBVejqMossQ226iwN3VKpNAyRHyFirwRnvhZM2KuMt/2BYow==} peerDependencies: '@vue/compiler-sfc': '>=3.0.0' dependencies: - '@vue/compiler-sfc': 3.4.6 + '@vue/compiler-sfc': 3.4.8 convert-source-map: 1.9.0 hash-sum: 2.0.0 dev: true @@ -3623,7 +3623,7 @@ packages: /ast-metadata-inferer@0.8.0: resolution: {integrity: sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==} dependencies: - '@mdn/browser-compat-data': 5.5.4 + '@mdn/browser-compat-data': 5.5.5 dev: true /astral-regex@2.0.0: @@ -3839,7 +3839,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001576 - electron-to-chromium: 1.4.625 + electron-to-chromium: 1.4.628 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -4564,7 +4564,7 @@ packages: end-of-stream: 1.4.4 inherits: 2.0.4 readable-stream: 2.3.8 - stream-shift: 1.0.1 + stream-shift: 1.0.2 dev: true /duplexify@4.1.2: @@ -4573,7 +4573,7 @@ packages: end-of-stream: 1.4.4 inherits: 2.0.4 readable-stream: 3.6.2 - stream-shift: 1.0.1 + stream-shift: 1.0.2 dev: true /each-props@1.3.2: @@ -4599,8 +4599,8 @@ packages: jake: 10.8.7 dev: true - /electron-to-chromium@1.4.625: - resolution: {integrity: sha512-DENMhh3MFgaPDoXWrVIqSPInQoLImywfCwrSmVl3cf9QHzoZSiutHwGaB/Ql3VkqcQV30rzgdM+BjKqBAJxo5Q==} + /electron-to-chromium@1.4.628: + resolution: {integrity: sha512-2k7t5PHvLsufpP6Zwk0nof62yLOsCf032wZx7/q0mv8gwlXjhcxI3lz6f0jBr0GrnWKcm3burXzI3t5IrcdUxw==} dev: true /emoji-regex@8.0.0: @@ -4685,7 +4685,7 @@ packages: object.assign: 4.1.5 regexp.prototype.flags: 1.5.1 safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 + safe-regex-test: 1.0.1 string.prototype.trim: 1.2.8 string.prototype.trimend: 1.0.7 string.prototype.trimstart: 1.0.7 @@ -4910,7 +4910,7 @@ packages: peerDependencies: eslint: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@mdn/browser-compat-data': 5.5.4 + '@mdn/browser-compat-data': 5.5.5 ast-metadata-inferer: 0.8.0 browserslist: 4.22.2 caniuse-lite: 1.0.30001576 @@ -5001,7 +5001,7 @@ packages: peerDependencies: typescript: ^3.9.7 || ^4.0.0 || ^5.0.0 dependencies: - '@mdn/browser-compat-data': 5.5.4 + '@mdn/browser-compat-data': 5.5.5 '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) browserslist: 4.22.2 semver: 7.5.4 @@ -5011,8 +5011,8 @@ packages: - supports-color dev: true - /eslint-plugin-vue@9.19.2(eslint@8.56.0): - resolution: {integrity: sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==} + /eslint-plugin-vue@9.20.0(eslint@8.56.0): + resolution: {integrity: sha512-9/DV5CM7ItfgWmXjL6j3zyDtVTrslYdnEm+rnYNajdElx17b3erxi/Wc6FY7t3BQ6dgo0t/UBpgiWCOKtJyN8Q==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 @@ -5074,7 +5074,7 @@ packages: '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 @@ -6000,7 +6000,7 @@ packages: resolution: {integrity: sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==} engines: {node: '>=10'} dependencies: - '@types/node': 20.10.7 + '@types/node': 20.10.8 '@types/vinyl': 2.0.11 istextorbinary: 3.3.0 replacestream: 4.0.3 @@ -6037,7 +6037,7 @@ packages: vinyl: 2.2.1 dev: true - /gulp-vue-ssg@1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.6): + /gulp-vue-ssg@1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.8): resolution: {integrity: sha512-QdMsM4zCLgCmfSHtZJ/2ApX4cWYy7hzAPLUimR8p/g0ATTaK6CL7vcMJ4+FW2gvDF+LkXDwbmIqdR32asSwaJA==} engines: {node: ^18||^20} peerDependencies: @@ -6048,7 +6048,7 @@ packages: esbuild: 0.19.11 gulp: 4.0.2 gulp-through2: 1.0.1 - vue: 3.4.6(typescript@5.3.3) + vue: 3.4.8(typescript@5.3.3) optionalDependencies: global-jsdom: 9.2.0(jsdom@23.2.0) jsdom: 23.2.0 @@ -6802,7 +6802,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.10.7 + '@types/node': 20.10.8 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -8257,7 +8257,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.33 - ts-node: 10.9.2(@swc/core@1.3.102)(@types/node@20.10.7)(typescript@5.3.3) + ts-node: 10.9.2(@swc/core@1.3.102)(@types/node@20.10.8)(typescript@5.3.3) yaml: 1.10.2 dev: true @@ -8926,8 +8926,9 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + /safe-regex-test@1.0.1: + resolution: {integrity: sha512-Y5NejJTTliTyY4H7sipGqY+RX5P87i3F7c4Rcepy72nq+mNLhIsD0W4c7kEmduMDQCSqtPsXPlSTsFhh2LQv+g==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 @@ -9214,8 +9215,8 @@ packages: resolution: {integrity: sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==} dev: true - /stream-shift@1.0.1: - resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} + /stream-shift@1.0.2: + resolution: {integrity: sha512-rV4Bovi9xx0BFzOb/X0B2GqoIjvqPCttZdu0Wgtx2Dxkj7ETyWl9gmqJ4EutWRLvtZWm8dxE+InQZX1IryZn/w==} dev: true /streamfilter@3.0.0: @@ -9370,8 +9371,8 @@ packages: engines: {node: '>=8'} dev: true - /stylelint-config-clean-order@5.3.0(stylelint@16.1.0): - resolution: {integrity: sha512-P7+xJv0Tj6WnnWEYc7h+AoHBTqm0JTGQkgVYXLW1tdNOfFw3LAoR1TtBA6Y47787gT1nH1tu8SsQlc1c/8i49A==} + /stylelint-config-clean-order@5.4.0(stylelint@16.1.0): + resolution: {integrity: sha512-CQCJVDlik/TQ6/ntCj8sF+Yakec1ShB57IqERBaY7tk4KzP9ekgYZTn4PpYJV4v5T40BTxGvR3pj+DXLB4EQjQ==} peerDependencies: stylelint: '>=14' dependencies: @@ -9807,7 +9808,7 @@ packages: typescript: 5.3.3 dev: true - /ts-node@10.9.2(@swc/core@1.3.102)(@types/node@20.10.7)(typescript@5.3.3): + /ts-node@10.9.2(@swc/core@1.3.102)(@types/node@20.10.8)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -9827,7 +9828,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.10.7 + '@types/node': 20.10.8 acorn: 8.11.3 acorn-walk: 8.3.1 arg: 4.1.3 @@ -10257,7 +10258,7 @@ packages: - supports-color dev: true - /vue-i18n@9.9.0(vue@3.4.6): + /vue-i18n@9.9.0(vue@3.4.8): resolution: {integrity: sha512-xQ5SxszUAqK5n84N+uUyHH/PiQl9xZ24FOxyAaNonmOQgXeN+rD9z/6DStOpOxNFQn4Cgcquot05gZc+CdOujA==} engines: {node: '>= 16'} peerDependencies: @@ -10266,29 +10267,29 @@ packages: '@intlify/core-base': 9.9.0 '@intlify/shared': 9.9.0 '@vue/devtools-api': 6.5.1 - vue: 3.4.6(typescript@5.3.3) + vue: 3.4.8(typescript@5.3.3) - /vue-slicksort@2.0.5(vue@3.4.6): + /vue-slicksort@2.0.5(vue@3.4.8): resolution: {integrity: sha512-fXz1YrNjhUbJK7o0tMk27mIr4pMAZYLSYvtmLazCtfpvz+zafPCn34ILDL8B7hT7WLVZKreYs6JVe5VWymqmzA==} peerDependencies: vue: '>=3.0.0' dependencies: - vue: 3.4.6(typescript@5.3.3) + vue: 3.4.8(typescript@5.3.3) dev: false - /vue@3.4.6(typescript@5.3.3): - resolution: {integrity: sha512-gAzw5oP0/h34/yq1LjLNpn4wrCKYMuWp2jbs/JirFiZAFWYhd9jTkXp4wIi5ApgMJrMgD6YFyyXwKsqFYR31IQ==} + /vue@3.4.8(typescript@5.3.3): + resolution: {integrity: sha512-vJffFOe6DqWsAI10v3tDhb1nJrj7CF3CbdQwOznywAsFNoyvrQ1AWQdcIWJpmRpRnw7NFzstzh6fh4w7n1PNdg==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.4.6 - '@vue/compiler-sfc': 3.4.6 - '@vue/runtime-dom': 3.4.6 - '@vue/server-renderer': 3.4.6(vue@3.4.6) - '@vue/shared': 3.4.6 + '@vue/compiler-dom': 3.4.8 + '@vue/compiler-sfc': 3.4.8 + '@vue/runtime-dom': 3.4.8 + '@vue/server-renderer': 3.4.8(vue@3.4.8) + '@vue/shared': 3.4.8 typescript: 5.3.3 /w3c-xmlserializer@5.0.0: diff --git a/src/client/patches/migration.ts b/src/client/patches/migration.ts index e91c7fe7..9b083228 100644 --- a/src/client/patches/migration.ts +++ b/src/client/patches/migration.ts @@ -60,8 +60,9 @@ export namespace Migration { } proj.version = $getCurrentVersion(); + const callback = options.onDeprecate; /* istanbul ignore next: legacy code */ - if(deprecate) options.onDeprecate?.(proj.design!.title); + if(callback && deprecate) callback(proj.design!.title); return proj as JProject; } diff --git a/src/core/controller/layoutController.ts b/src/core/controller/layoutController.ts index 1f58ef3e..2fed1d1e 100644 --- a/src/core/controller/layoutController.ts +++ b/src/core/controller/layoutController.ts @@ -99,7 +99,6 @@ export namespace LayoutController { } function addPolygon(set: CPLine[], polygon: Polygon, type: CreaseType): void { - if(!polygon) return; for(const path of polygon) { const l = path.length; for(let i = 0; i < l; i++) { diff --git a/src/core/design/context/tree.ts b/src/core/design/context/tree.ts index f3a9e48a..14a8b766 100644 --- a/src/core/design/context/tree.ts +++ b/src/core/design/context/tree.ts @@ -52,6 +52,7 @@ export class Tree implements ITree, ISerializable { if(flaps) { for(const flap of flaps) { const node = this._nodes[flap.id]; + /* istanbul ignore else: foolproof */ if(node) node.$setFlap(flap); } } @@ -107,6 +108,7 @@ export class Tree implements ITree, ISerializable { for(const flap of flaps) { const node = this._nodes[flap.id]; const isLeaf = node && node.$isLeafLike; + /* istanbul ignore next: foolproof */ if(isLeaf) node.$setFlap(flap); } } diff --git a/src/core/design/context/treeNode.ts b/src/core/design/context/treeNode.ts index 7cdfe4d2..06918002 100644 --- a/src/core/design/context/treeNode.ts +++ b/src/core/design/context/treeNode.ts @@ -70,6 +70,7 @@ export class TreeNode implements ITreeNode { } public toJSON(): JEdge { + /* istanbul ignore next: debug */ if(!this.$parent) throw new Error("Cannot export root node"); return { n1: this.$parent.id, n2: this.id, length: this.$length }; } @@ -122,13 +123,14 @@ export class TreeNode implements ITreeNode { * Temporarily disconnects a node from the tree, without changing its subtree. */ public $cut(): void { - if(this.$parent) { - this.$parent.$children.$remove(this); - if(this.$parent.$AABB.$removeChild(this.$AABB)) { - State.$nodeAABBChanged.add(this.$parent); - } - State.$childrenChanged.add(this.$parent); + /* istanbul ignore next: foolproof */ + if(!this.$parent) return; + + this.$parent.$children.$remove(this); + if(this.$parent.$AABB.$removeChild(this.$AABB)) { + State.$nodeAABBChanged.add(this.$parent); } + State.$childrenChanged.add(this.$parent); this.$parent = undefined; } diff --git a/src/core/design/layout/nodeSet.ts b/src/core/design/layout/nodeSet.ts index 6c767897..54eb9b45 100644 --- a/src/core/design/layout/nodeSet.ts +++ b/src/core/design/layout/nodeSet.ts @@ -124,21 +124,22 @@ export class NodeSet { ///////////////////////////////////////////////////////////////////////////////////////////////////// private _dist(a: ITreeNode, b: ITreeNode): number { - if(a === b) return 0; return dist(a, b, this._lca(a, b)); } private _lca(a: ITreeNode, b: ITreeNode): ITreeNode { const lcaMap = this._lcaMap!; let lca = lcaMap.get(a.id, b.id); - if(lca) return lca; - - // Otherwise, it suffices to pick a leaf covered by each - // of the given nodes and lookup the LCA of the leaves. - const aLeaf = this.$quadrantCoverage.get(a)![0].$flap.id; - const bLeaf = this.$quadrantCoverage.get(b)![0].$flap.id; - lca = lcaMap.get(aLeaf, bLeaf)!; - lcaMap.set(a.id, b.id, lca); + + /* istanbul ignore next: completeness */ + if(!lca) { + // Otherwise, it suffices to pick a leaf covered by each + // of the given nodes and lookup the LCA of the leaves. + const aLeaf = this.$quadrantCoverage.get(a)![0].$flap.id; + const bLeaf = this.$quadrantCoverage.get(b)![0].$flap.id; + lca = lcaMap.get(aLeaf, bLeaf)!; + lcaMap.set(a.id, b.id, lca); + } return lca; } } diff --git a/src/core/design/layout/pattern/pattern.ts b/src/core/design/layout/pattern/pattern.ts index c503df50..e5558d64 100644 --- a/src/core/design/layout/pattern/pattern.ts +++ b/src/core/design/layout/pattern/pattern.ts @@ -84,9 +84,11 @@ export class Pattern implements ISerializable { if(singleMode || context.$junctions.length == 1) { return singleJunctionPositioner(context); } + /* istanbul ignore else: not implemented yet */ if(context.$junctions.length == 2) { return twoJunctionPositioner(context); } + /* istanbul ignore next: type-safety */ return false; } diff --git a/src/core/design/tasks/utils/combine.ts b/src/core/design/tasks/utils/combine.ts index 2042be3a..a2000cf9 100644 --- a/src/core/design/tasks/utils/combine.ts +++ b/src/core/design/tasks/utils/combine.ts @@ -56,6 +56,7 @@ function tryInsertOuter(patternContour: PatternContour, rough: RationalContour): for(const outer of rough.$outer) { if(tryInsert(outer, patternContour)) return true; } + /* istanbul ignore next: foolproof */ return false; } @@ -119,6 +120,7 @@ export function toGraphicalContours(contour: RationalContour): Contour[] { let inners = contour.$inner.map(toPath).map(simplify).map(reverse); // TODO: is this still possible? + /* istanbul ignore next: debug */ if(inners.some(p => p.length == 2)) debugger; rearrangeRole(outers, inners); diff --git a/src/core/math/geometry/couple.ts b/src/core/math/geometry/couple.ts index b18dd1f0..7f5ac0bf 100644 --- a/src/core/math/geometry/couple.ts +++ b/src/core/math/geometry/couple.ts @@ -21,12 +21,9 @@ export abstract class Couple { public _y: Fraction; /** Create a Couple object */ - constructor(c: Couple); - constructor(x: Rational, y: Rational); - constructor(...p: [Couple] | [Rational, Rational]) { - if(p.length == 1) p = [p[0]._x, p[0]._y]; - this._x = new Fraction(p[0]); - this._y = new Fraction(p[1]); + constructor(x: Rational, y: Rational) { + this._x = new Fraction(x); + this._y = new Fraction(y); } public get x(): number { return this._x.$value; } diff --git a/src/core/math/geometry/line.ts b/src/core/math/geometry/line.ts index f6ec5b76..b74ec695 100644 --- a/src/core/math/geometry/line.ts +++ b/src/core/math/geometry/line.ts @@ -273,6 +273,7 @@ export class Line { ///#if DEBUG + /* istanbul ignore next: debug */ public static $parseTest(jsons: TestLine[]): T[] { return jsons.map(j => { const l = j as unknown as Record; diff --git a/src/core/math/geometry/rationalPath.ts b/src/core/math/geometry/rationalPath.ts index fdcf3e5e..1cbc45e0 100644 --- a/src/core/math/geometry/rationalPath.ts +++ b/src/core/math/geometry/rationalPath.ts @@ -69,6 +69,7 @@ export function join(p1: RationalPath, p2: RationalPath): RationalPath { } } } + /* istanbul ignore next: type-safety */ return p1; } diff --git a/src/shared/data/doubleMap/intDoubleMap.ts b/src/shared/data/doubleMap/intDoubleMap.ts index 30852841..b71edf7d 100644 --- a/src/shared/data/doubleMap/intDoubleMap.ts +++ b/src/shared/data/doubleMap/intDoubleMap.ts @@ -214,9 +214,9 @@ function checkKey(key: number): boolean { return Number.isInteger(key) && key >= 0 && key <= MAX; } -export interface Node extends IDoubleLinkedNode> { } +interface Node extends IDoubleLinkedNode> { } -export class Node { +class Node { public value: V; public readonly n1: KeyNode; public readonly n2: KeyNode; @@ -228,6 +228,8 @@ export class Node { } } +export type { Node }; + interface KeyNode extends IDoubleLinkedNode> { /** The key of the coupling node (not the key of self) */ diff --git a/test/specs/geometry/line.spec.ts b/test/specs/geometry/line.spec.ts index 247fb094..33d121b5 100644 --- a/test/specs/geometry/line.spec.ts +++ b/test/specs/geometry/line.spec.ts @@ -1,15 +1,21 @@ import { Line } from "core/math/geometry/line"; import { parseLine } from "../../utils/line"; +import { Vector } from "core/math/geometry/vector"; export default function() { it("Checks equality", function() { expect(parseLine("(0,0)-(5,0)").eq(parseLine("(5,0)-(0,0)"))).to.be.true; + expect(parseLine("(0,0)-(5,0)").eq(parseLine("(0,0)-(5,0)"))).to.be.true; }); - it("List grid points", function() { - const result = [...parseLine("(6,3)-(0.0)").$gridPoints()]; - expect(result.length).to.equal(4); + it("Lists grid points", function() { + expect([...parseLine("(4,10)-(0.0)").$gridPoints()].length).to.equal(3); + expect([...parseLine("(10,4)-(0.0)").$gridPoints()].length).to.equal(3); + }); + + it("Checks perpendicularity", function() { + expect(parseLine("(0,0)-(2,4)").$perpendicular(new Vector(2, -1))).to.be.true; }); describe("Subtraction", function() { diff --git a/test/specs/geometry/polyBool.spec.ts b/test/specs/geometry/polyBool.spec.ts index 8efea43b..6174598b 100644 --- a/test/specs/geometry/polyBool.spec.ts +++ b/test/specs/geometry/polyBool.spec.ts @@ -176,6 +176,21 @@ export default function() { expect(path).to.equalPath("(0,0),(2,1),(4,0),(4,2),(4,4),(2,3),(0,4),(0,2)", true); }); + it("Handles floating error", function() { + const result = new GeneralUnion().$get([ + parsePath("(34,4),(34,-3),(40,-3),(40,2.6666666666666665),(39,4)"), + parsePath("(70,4),(66.6842105263158,4),(66.10309278350516,3.8762886597938144),(64,3),(64,-3),(70,-3)"), + parsePath("(64,36),(62,36),(62,24),(64,24)"), + parsePath("(64,42),(41,42),(40.17910447761194,40.02985074626866),(40,39.46153846153846),(40,36),(64,36)"), + parsePath("(40,52),(40,40),(64,40),(64,52)"), + parsePath("(42,36),(40,36),(40,24),(42,24)"), + parsePath("(64,8),(44,8),(40,5),(40,-8),(64,-8)"), + parsePath("(62,30),(43.333333333333336,30),(42,29),(42,22),(62,22)"), + parsePath("(62,24),(62,36),(42.5,36),(42,35.333333333333336),(42,24),(40,24),(40,-4),(64,-4),(64,24)"), + ]); + expect(result.length).to.equal(2); + }); + xit("Is quite fast", function() { this.retries(100); diff --git a/test/specs/math.spec.ts b/test/specs/math.spec.ts index 0fa00036..b95d7036 100644 --- a/test/specs/math.spec.ts +++ b/test/specs/math.spec.ts @@ -1,8 +1,17 @@ import { gcd, lcm } from "core/math/utils/gcd"; import { Fraction, toFraction } from "core/math/fraction"; +import { Matrix } from "core/math/geometry/matrix"; describe("Mathematics", function() { + describe("Matrix", function() { + it("Computes inverse", function() { + const m = new Matrix(new Fraction(1), new Fraction(2), new Fraction(3), new Fraction(4)); + const inv = m.$inverse!; + expect(inv.toString()).to.equal("-2,1,3/2,-1/2"); + }); + }); + describe("Fraction", function() { it("Approximates using continuous fraction", function() { const r = toFraction(Math.SQRT2, 0.01); diff --git a/test/specs/pattern.spec.ts b/test/specs/pattern.spec.ts index d5d4908a..169363bb 100644 --- a/test/specs/pattern.spec.ts +++ b/test/specs/pattern.spec.ts @@ -5,7 +5,7 @@ import { DesignController } from "core/controller/designController"; import { Migration } from "client/patches"; import { toPath } from "core/math/geometry/rationalPath"; import { State, fullReset } from "core/service/state"; -import { createTree, id2, id4, node, parseTree } from "../utils/tree"; +import { createTree, id1, id2, id3, id4, node, parseTree } from "../utils/tree"; import { TreeController } from "core/controller/treeController"; import * as sample from "../samples/v04.session.sample.json"; @@ -168,6 +168,17 @@ describe("Pattern", function() { } }); + it("Renders river in between", function() { + for(const [a, b, c] of THREE_PERMUTATION) { + parseTree( + `(0,4,2),(0,5,2),(5,${a},4),(4,${b},2),(4,${c},2)`, + `(${a},0,0,0,0),(${b},9,5,0,0),(${c},6,8,0,0)` + ); + const r = node(4)!; + expect(r.$graphics.$patternContours.length).to.be.equal(1); + } + }); + it("Half integral relay", function() { for(const [a, b, c] of THREE_PERMUTATION) { generateFromFlaps([ @@ -276,6 +287,26 @@ describe("Pattern", function() { expect(ridges2).to.containLine([{ x: 4.5, y: 3.5 }, { x: 7, y: 6 }]); }); + it("Update origin when all flaps move simultaneously", function() { + generateFromFlaps([ + { id: 1, x: 9, y: 5, radius: 2 }, + { id: 2, x: 0, y: 0, radius: 8 }, + { id: 3, x: 6, y: 8, radius: 2 }, + ]); + const stretch = State.$stretches.get("1,2,3")!; + expect(stretch).to.be.not.undefined; + const repo = stretch.$repo; + + LayoutController.updateFlap([ + { id: id1, x: 10, y: 6, width: 0, height: 0 }, + { id: id2, x: 1, y: 1, width: 0, height: 0 }, + { id: id3, x: 7, y: 9, width: 0, height: 0 }, + ], false, []); + + expect(State.$stretches.get("1,2,3")).to.equal(stretch); + expect(stretch.$repo).to.equal(repo); + }); + }); }); diff --git a/test/utils/tree.ts b/test/utils/tree.ts index 3be7892b..8710657a 100644 --- a/test/utils/tree.ts +++ b/test/utils/tree.ts @@ -20,6 +20,10 @@ type Substitute = { export type NEdge = Substitute; export type NFlap = Substitute; +/** + * @param edges Comma-separated list of `(n1,n2,length)`. + * @param flaps Comma-separated list of `(id,x,y,width,height)`. + */ export function parseTree(edges: string, flaps: string): Tree { const nEdges: NEdge[] = [...edges.matchAll(/\((\d+),(\d+),(\d+)\)/g)] .map(m => ({ n1: Number(m[1]), n2: Number(m[2]), length: Number(m[3]) })); From 25b9c3f0fbff922398d3f75048d8799086d0440d Mon Sep 17 00:00:00 2001 From: Mu-Tsun Tsai Date: Fri, 12 Jan 2024 11:04:36 +0800 Subject: [PATCH 05/11] Refactoring tests --- .mocharc.json | 4 +- .nycrc | 2 +- gulp/config.json | 4 +- gulp/tasks/test.js | 24 --- gulp/tasks/tool.js | 24 +++ package.json | 10 +- pnpm-lock.yaml | 196 +++++++++--------- src/core/design/context/index.d.ts | 7 + src/core/design/context/tree.ts | 15 +- src/core/design/context/treeNode.ts | 8 +- src/core/design/tasks/balance.ts | 1 + src/core/design/tasks/graphics.ts | 13 +- src/core/design/tasks/invalidJunction.ts | 5 +- src/core/design/tasks/junction.ts | 5 +- src/core/design/tasks/pattern.ts | 7 +- src/core/design/tasks/stretch.ts | 3 +- src/core/design/tasks/traceContour.ts | 4 +- src/core/design/tasks/utils/combine.ts | 2 + src/core/design/tasks/utils/expand.ts | 1 + src/core/main.ts | 5 +- src/core/service/state.ts | 27 +-- src/core/service/updateResult.ts | 95 +++++++++ test/specs/contour.spec.ts | 32 ++- test/specs/cp.spec.ts | 4 +- .../dataStructure/binarySearchTree.spec.ts | 2 +- test/specs/geometry/line.spec.ts | 2 +- test/specs/geometry/polyBool.spec.ts | 4 +- test/specs/geometry/sweepLine.spec.ts | 2 +- test/specs/junction.spec.ts | 8 +- test/specs/migration.spec.ts | 7 +- test/specs/pattern.spec.ts | 17 +- test/specs/trace.spec.ts | 2 +- test/specs/tree.spec.ts | 2 +- test/specs/treeMaker.spec.ts | 7 +- test/tests/README.md | 4 - test/tsconfig.json | 7 +- test/utils/sample.ts | 25 +++ test/utils/tree.ts | 2 +- tools/README.md | 4 + {test/tests => tools}/polyBool/index.htm | 0 {test/tests => tools}/polyBool/index.ts | 1 + tools/tsconfig.json | 23 ++ 42 files changed, 389 insertions(+), 228 deletions(-) delete mode 100644 gulp/tasks/test.js create mode 100644 gulp/tasks/tool.js create mode 100644 src/core/service/updateResult.ts delete mode 100644 test/tests/README.md create mode 100644 test/utils/sample.ts create mode 100644 tools/README.md rename {test/tests => tools}/polyBool/index.htm (100%) rename {test/tests => tools}/polyBool/index.ts (97%) create mode 100644 tools/tsconfig.json diff --git a/.mocharc.json b/.mocharc.json index edec1462..245b9875 100644 --- a/.mocharc.json +++ b/.mocharc.json @@ -9,6 +9,8 @@ "require": [ "./test/mocha.env.mjs", "ts-node/register", - "tsconfig-paths/register" + "tsconfig-paths/register", + "./test/utils/line.ts", + "./test/utils/path.ts" ] } diff --git a/.nycrc b/.nycrc index fb6ad84a..4556fa3a 100644 --- a/.nycrc +++ b/.nycrc @@ -1,6 +1,6 @@ { "check-coverage": true, - "branches": 90, + "branches": 95, "lines": 95, "functions": 95, "statements": 95, diff --git a/gulp/config.json b/gulp/config.json index fcc48e59..e98fdd7b 100644 --- a/gulp/config.json +++ b/gulp/config.json @@ -2,7 +2,7 @@ "dest": { "debug": "build/debug", "dist": "build/dist", - "test": "build/test" + "tool": "build/tools" }, "src": { "app": "src/app", @@ -17,6 +17,6 @@ "sw": "src/other/service", "worker": "src/other/worker", "shared": "src/shared", - "test": "test/tests" + "tool": "tools" } } diff --git a/gulp/tasks/test.js b/gulp/tasks/test.js deleted file mode 100644 index c3035a4e..00000000 --- a/gulp/tasks/test.js +++ /dev/null @@ -1,24 +0,0 @@ -const $ = require("../utils/proxy"); -const gulp = require("gulp"); - -const config = require("../config.json"); - -gulp.task("testPolyBoolHTML", () => - gulp.src(config.src.test + "/polyBool/index.htm") - .pipe(gulp.dest(config.dest.test)) -); - -gulp.task("testPolyBoolJS", () => - gulp.src(config.src.test + "/polyBool/index.ts") - .pipe($.esbuild({ - outfile: "index.js", - bundle: true, - treeShaking: true, - sourcemap: "linked", - sourcesContent: false, - sourceRoot: "../../", - })) - .pipe(gulp.dest(config.dest.test)) -); - -gulp.task("testPolyBool", gulp.series("testPolyBoolHTML", "testPolyBoolJS")); diff --git a/gulp/tasks/tool.js b/gulp/tasks/tool.js new file mode 100644 index 00000000..6c6ccf57 --- /dev/null +++ b/gulp/tasks/tool.js @@ -0,0 +1,24 @@ +const $ = require("../utils/proxy"); +const gulp = require("gulp"); + +const config = require("../config.json"); + +gulp.task("toolPolyBoolHTML", () => + gulp.src(config.src.tool + "/polyBool/index.htm") + .pipe(gulp.dest(config.dest.tool)) +); + +gulp.task("toolPolyBoolJS", () => + gulp.src(config.src.tool + "/polyBool/index.ts") + .pipe($.esbuild({ + outfile: "index.js", + bundle: true, + treeShaking: true, + sourcemap: "linked", + sourcesContent: false, + sourceRoot: "../../", + })) + .pipe(gulp.dest(config.dest.tool)) +); + +gulp.task("toolPolyBool", gulp.series("toolPolyBoolHTML", "toolPolyBoolJS")); diff --git a/package.json b/package.json index de2ad95b..ec460c16 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "scripts": { "build": "gulp", "cov": "nyc -r lcovonly -r text-summary mocha --require mocha-suppress-logs", - "cov:html": "nyc -r html mocha --require mocha-suppress-logs", + "cov:html": "nyc -r lcov mocha --require mocha-suppress-logs", "cov:text": "nyc -r lcovonly -r text mocha --require mocha-suppress-logs", "license-check": "pnpx license-checker --exclude \"MIT,Apache-2.0,BSD-2-Clause,ISC\"", "lint": "eslint src", @@ -39,11 +39,11 @@ "@types/gulp": "^4.0.17", "@types/gulp-load-plugins": "^0.0.37", "@types/mocha": "^10.0.6", - "@types/node": "^20.10.8", + "@types/node": "^20.11.0", "@types/wicg-file-system-access": "^2023.10.4", "@typescript-eslint/eslint-plugin": "^6.18.1", "@typescript-eslint/parser": "^6.18.1", - "@vue/compiler-sfc": "^3.4.8", + "@vue/compiler-sfc": "^3.4.10", "@vue/eslint-config-typescript": "12.0.0", "chai": "^5.0.0", "del": "7.1.0", @@ -91,7 +91,7 @@ "mocha-suppress-logs": "^0.4.1", "nyc": "^15.1.0", "postcss": "^8.4.33", - "postcss-html": "^1.5.0", + "postcss-html": "^1.6.0", "postcss-preset-env": "^9.3.0", "require-dir": "^1.2.0", "resolve": "^1.22.8", @@ -130,7 +130,7 @@ "idb-keyval": "^6.2.1", "jszip": "^3.10.1", "lzma": "^2.3.2", - "vue": "^3.4.8", + "vue": "^3.4.10", "vue-i18n": "^9.9.0", "vue-slicksort": "^2.0.5", "workbox-broadcast-update": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4cd79475..ff244397 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,14 +67,14 @@ dependencies: specifier: ^2.3.2 version: 2.3.2 vue: - specifier: ^3.4.8 - version: 3.4.8(typescript@5.3.3) + specifier: ^3.4.10 + version: 3.4.10(typescript@5.3.3) vue-i18n: specifier: ^9.9.0 - version: 9.9.0(vue@3.4.8) + version: 9.9.0(vue@3.4.10) vue-slicksort: specifier: ^2.0.5 - version: 2.0.5(vue@3.4.8) + version: 2.0.5(vue@3.4.10) workbox-broadcast-update: specifier: ^7.0.0 version: 7.0.0 @@ -97,7 +97,7 @@ devDependencies: version: 2.1.2 '@intlify/vue-i18n-extensions': specifier: ^5.0.1 - version: 5.0.1(vue-i18n@9.9.0)(vue@3.4.8) + version: 5.0.1(vue-i18n@9.9.0)(vue@3.4.10) '@makeomatic/gulp-wrap-js': specifier: ^1.0.2 version: 1.0.2 @@ -126,8 +126,8 @@ devDependencies: specifier: ^10.0.6 version: 10.0.6 '@types/node': - specifier: ^20.10.8 - version: 20.10.8 + specifier: ^20.11.0 + version: 20.11.0 '@types/wicg-file-system-access': specifier: ^2023.10.4 version: 2023.10.4 @@ -138,8 +138,8 @@ devDependencies: specifier: ^6.18.1 version: 6.18.1(eslint@8.56.0)(typescript@5.3.3) '@vue/compiler-sfc': - specifier: ^3.4.8 - version: 3.4.8 + specifier: ^3.4.10 + version: 3.4.10 '@vue/eslint-config-typescript': specifier: 12.0.0 version: 12.0.0(eslint-plugin-vue@9.20.0)(eslint@8.56.0)(typescript@5.3.3) @@ -157,7 +157,7 @@ devDependencies: version: 0.2.0(esbuild@0.19.11) esbuild-plugin-vue-next: specifier: npm:@wfrog/esbuild-plugin-vue-next@^0.1.5 - version: /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.8) + version: /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.10) esbuild-sass-plugin: specifier: ^2.16.1 version: 2.16.1(esbuild@0.19.11) @@ -250,7 +250,7 @@ devDependencies: version: 1.0.1 gulp-vue-ssg: specifier: ^1.2.2 - version: 1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.8) + version: 1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.10) gulp-workbox: specifier: ^1.0.6 version: 1.0.6(workbox-build@7.0.0) @@ -282,8 +282,8 @@ devDependencies: specifier: ^8.4.33 version: 8.4.33 postcss-html: - specifier: ^1.5.0 - version: 1.5.0 + specifier: ^1.6.0 + version: 1.6.0 postcss-preset-env: specifier: ^9.3.0 version: 9.3.0(postcss@8.4.33) @@ -304,7 +304,7 @@ devDependencies: version: 5.4.0(stylelint@16.1.0) stylelint-config-recommended-vue: specifier: ^1.5.0 - version: 1.5.0(postcss-html@1.5.0)(stylelint@16.1.0) + version: 1.5.0(postcss-html@1.6.0)(stylelint@16.1.0) stylelint-config-standard-scss: specifier: ^13.0.0 version: 13.0.0(postcss@8.4.33)(stylelint@16.1.0) @@ -316,7 +316,7 @@ devDependencies: version: 4.0.2 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.3.102)(@types/node@20.10.8)(typescript@5.3.3) + version: 10.9.2(@swc/core@1.3.102)(@types/node@20.11.0)(typescript@5.3.3) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 @@ -2225,7 +2225,7 @@ packages: resolution: {integrity: sha512-1ECUyAHRrzOJbOizyGufYP2yukqGrWXtkmTu4PcswVnWbkcjzk3YQGmJ0bLkM7JZ0ZYAaohLGdYvBYnTOGYJ9g==} engines: {node: '>= 16'} - /@intlify/vue-i18n-extensions@5.0.1(vue-i18n@9.9.0)(vue@3.4.8): + /@intlify/vue-i18n-extensions@5.0.1(vue-i18n@9.9.0)(vue@3.4.10): resolution: {integrity: sha512-bS07jIt9nFXfUUpQLqdog7O1Gi8rSCgTyEzabiho5nrrVFmaIbDRr7LSNBPA8fakPdAuY8V1lJa6xmkI33+n8w==} engines: {node: '>= 14.18'} peerDependencies: @@ -2234,9 +2234,9 @@ packages: dependencies: '@babel/parser': 7.23.6 '@intlify/shared': 9.9.0 - '@vue/compiler-dom': 3.4.8 - vue: 3.4.8(typescript@5.3.3) - vue-i18n: 9.9.0(vue@3.4.8) + '@vue/compiler-dom': 3.4.10 + vue: 3.4.10(typescript@5.3.3) + vue-i18n: 9.9.0(vue@3.4.10) dev: true /@isaacs/cliui@8.0.2: @@ -2827,7 +2827,7 @@ packages: /@types/glob-stream@8.0.2: resolution: {integrity: sha512-kyuRfGE+yiSJWzSO3t74rXxdZNdYfLcllO0IUha4eX1fl40pm9L02Q/TEc3mykTLjoWz4STBNwYnUWdFu3I0DA==} dependencies: - '@types/node': 20.10.8 + '@types/node': 20.11.0 '@types/picomatch': 2.3.3 '@types/streamx': 2.9.5 dev: true @@ -2839,13 +2839,13 @@ packages: /@types/gulp-load-plugins@0.0.37: resolution: {integrity: sha512-gmQpE77bVR5bbT7xUltn3eXQ+EEa0D3aplJHeZhnefOvPxm3cEjfJTa8UMnkVpAmi6b465vmmQqkIpDM/5H+HA==} dependencies: - '@types/node': 20.10.8 + '@types/node': 20.11.0 dev: true /@types/gulp@4.0.17: resolution: {integrity: sha512-+pKQynu2C/HS16kgmDlAicjtFYP8kaa86eE9P0Ae7GB5W29we/E2TIdbOWtEZD5XkpY+jr8fyqfwO6SWZecLpQ==} dependencies: - '@types/node': 20.10.8 + '@types/node': 20.11.0 '@types/undertaker': 1.2.11 '@types/vinyl-fs': 3.0.5 chokidar: 3.5.3 @@ -2867,8 +2867,8 @@ packages: resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} dev: true - /@types/node@20.10.8: - resolution: {integrity: sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA==} + /@types/node@20.11.0: + resolution: {integrity: sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==} dependencies: undici-types: 5.26.5 dev: true @@ -2884,7 +2884,7 @@ packages: /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 20.10.8 + '@types/node': 20.11.0 dev: true /@types/semver@7.5.6: @@ -2894,7 +2894,7 @@ packages: /@types/streamx@2.9.5: resolution: {integrity: sha512-IHYsa6jYrck8VEdSwpY141FTTf6D7boPeMq9jy4qazNrFMA4VbRz/sw5LSsfR7jwdDcx0QKWkUexZvsWBC2eIQ==} dependencies: - '@types/node': 20.10.8 + '@types/node': 20.11.0 dev: true /@types/trusted-types@2.0.7: @@ -2908,7 +2908,7 @@ packages: /@types/undertaker@1.2.11: resolution: {integrity: sha512-j1Z0V2ByRHr8ZK7eOeGq0LGkkdthNFW0uAZGY22iRkNQNL9/vAV0yFPr1QN3FM/peY5bxs9P+1f0PYJTQVa5iA==} dependencies: - '@types/node': 20.10.8 + '@types/node': 20.11.0 '@types/undertaker-registry': 1.0.4 async-done: 1.3.2 dev: true @@ -2917,7 +2917,7 @@ packages: resolution: {integrity: sha512-ckYz9giHgV6U10RFuf9WsDQ3X86EFougapxHmmoxLK7e6ICQqO8CE+4V/3lBN148V5N1pb4nQMmMjyScleVsig==} dependencies: '@types/glob-stream': 8.0.2 - '@types/node': 20.10.8 + '@types/node': 20.11.0 '@types/vinyl': 2.0.11 dev: true @@ -2925,7 +2925,7 @@ packages: resolution: {integrity: sha512-vPXzCLmRp74e9LsP8oltnWKTH+jBwt86WgRUb4Pc9Lf3pkMVGyvIo2gm9bODeGfCay2DBB/hAWDuvf07JcK4rw==} dependencies: '@types/expect': 1.20.4 - '@types/node': 20.10.8 + '@types/node': 20.11.0 dev: true /@types/wicg-file-system-access@2023.10.4: @@ -3143,39 +3143,39 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vue/compiler-core@3.4.8: - resolution: {integrity: sha512-GjAwOydZV6UyVBi1lYW5v4jjfU6wOeyi3vBATKJOwV7muYF0/nZi4kfdJc0pwdT5lXwbbx57lyA2Y356rFpw1A==} + /@vue/compiler-core@3.4.10: + resolution: {integrity: sha512-53vxh7K9qbx+JILnGEhrFRyr7H7e4NdT8RuTNU3m6HhJKFvcAqFTNXpYMHnyuAzzRGdsbsYHBgQC3H6xEXTG6w==} dependencies: '@babel/parser': 7.23.6 - '@vue/shared': 3.4.8 + '@vue/shared': 3.4.10 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.0.2 - /@vue/compiler-dom@3.4.8: - resolution: {integrity: sha512-GsPyji42zmkSJlaDFKXvwB97ukTlHzlFH/iVzPFYz/APnSzuhu/CMFQbsYmrtsnc2yscF39eC4rKzvKR27aBug==} + /@vue/compiler-dom@3.4.10: + resolution: {integrity: sha512-QAALBJksIFpXGYuo74rtMgnwpVZDvd3kYbUa4gYX9s/5QiqEvZSgbKtOdUGydXcxKPt3ifC+0/bhPVHXN2694A==} dependencies: - '@vue/compiler-core': 3.4.8 - '@vue/shared': 3.4.8 + '@vue/compiler-core': 3.4.10 + '@vue/shared': 3.4.10 - /@vue/compiler-sfc@3.4.8: - resolution: {integrity: sha512-3ZcurOa6bQdZ6VZLtMqYSUZqpsMqfX0MC3oCxQG0VIJFCqouZAgRYJN1c8QvGs7HW5wW8aXVvUOQU0ILVlYHKA==} + /@vue/compiler-sfc@3.4.10: + resolution: {integrity: sha512-sTOssaQySgrMjrhZxmAqdp6n+E51VteIVIDaOR537H2P63DyzMmig21U0XXFxiXmMIfrK91lAInnc+bIAYemGw==} dependencies: '@babel/parser': 7.23.6 - '@vue/compiler-core': 3.4.8 - '@vue/compiler-dom': 3.4.8 - '@vue/compiler-ssr': 3.4.8 - '@vue/shared': 3.4.8 + '@vue/compiler-core': 3.4.10 + '@vue/compiler-dom': 3.4.10 + '@vue/compiler-ssr': 3.4.10 + '@vue/shared': 3.4.10 estree-walker: 2.0.2 magic-string: 0.27.0 postcss: 8.4.33 source-map-js: 1.0.2 - /@vue/compiler-ssr@3.4.8: - resolution: {integrity: sha512-nxN79LHeAemhBpIa2PQ6rz57cW7W4C/XIJCOMSn2g49u6q2ekirmJI0osAOTErQPApOR0KwP2QyeTexX4zQCrw==} + /@vue/compiler-ssr@3.4.10: + resolution: {integrity: sha512-Y90TL1abretWbUiK5rv+9smS1thCHE5sSuhZgiLh6cxgZ2Pcy3BEvDd3reID0iwNcTdMbTeE6NI3Aq4Mux6hqQ==} dependencies: - '@vue/compiler-dom': 3.4.8 - '@vue/shared': 3.4.8 + '@vue/compiler-dom': 3.4.10 + '@vue/shared': 3.4.10 /@vue/devtools-api@6.5.1: resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} @@ -3201,42 +3201,42 @@ packages: - supports-color dev: true - /@vue/reactivity@3.4.8: - resolution: {integrity: sha512-UJYMQ3S2rqIGw9IvKomD4Xw2uS5VlcKEEmwcfboGOdrI79oqebxnCgTvXWLMClvg3M5SF0Cyn+9eDQoyGMLu9Q==} + /@vue/reactivity@3.4.10: + resolution: {integrity: sha512-SmGGpo37LzPcAFTopHNIJRNVOQfma9YgyPkAzx9/TJ01lbCCYigS28hEcY1hjiJ1PRK8iVX62Ov5yzmUgYH/pQ==} dependencies: - '@vue/shared': 3.4.8 + '@vue/shared': 3.4.10 - /@vue/runtime-core@3.4.8: - resolution: {integrity: sha512-sMRXOy89KnwY6fWG5epgPOsCWzpo/64FrA0QkjIeNeGnoA2YyZ6bBUxpFUyqhJ8VbrDhXEFH+6LHMOYrpzX/ZQ==} + /@vue/runtime-core@3.4.10: + resolution: {integrity: sha512-Ri2Cz9sFr66AEUewGUK8IXhIUAhshTHVUGuJR8pqMbtjIds+zPa8QPO5UZImGMQ8HTY7eEpKwztCct9V3+Iqug==} dependencies: - '@vue/reactivity': 3.4.8 - '@vue/shared': 3.4.8 + '@vue/reactivity': 3.4.10 + '@vue/shared': 3.4.10 - /@vue/runtime-dom@3.4.8: - resolution: {integrity: sha512-L4gZcYo8f3d7rQqQIHkPvyczkjjQ55cJqz2G0v6Ptmqa1mO2zkqN9F8lBT6aGPYy3hd0RDiINbs4jxhSvvy10Q==} + /@vue/runtime-dom@3.4.10: + resolution: {integrity: sha512-ROsdi5M2niRDmjXJNZ8KKiGwXyG1FO8l9n6sCN0kaJEHbjWkuigu96YAI3fK/AWUZPSXXEcMEBVPC6rL3mmUuA==} dependencies: - '@vue/runtime-core': 3.4.8 - '@vue/shared': 3.4.8 + '@vue/runtime-core': 3.4.10 + '@vue/shared': 3.4.10 csstype: 3.1.3 - /@vue/server-renderer@3.4.8(vue@3.4.8): - resolution: {integrity: sha512-pBeHM59Owevr3P0Fl1XOjBmq4DTy5JDcjMG4NuzJEVDlZYzY8fHybx0wdjkY5lK5mCtUyBtw6Mz4d87aosc1Sw==} + /@vue/server-renderer@3.4.10(vue@3.4.10): + resolution: {integrity: sha512-WpCBAhesLq44JKWfdFqb+Bi4ACUW0d8x1z90GnE0spccsAlEDMXV5nm+pwXLyW0OdP2iPrO/n/QMJh4B1v9Ciw==} peerDependencies: - vue: 3.4.8 + vue: 3.4.10 dependencies: - '@vue/compiler-ssr': 3.4.8 - '@vue/shared': 3.4.8 - vue: 3.4.8(typescript@5.3.3) + '@vue/compiler-ssr': 3.4.10 + '@vue/shared': 3.4.10 + vue: 3.4.10(typescript@5.3.3) - /@vue/shared@3.4.8: - resolution: {integrity: sha512-ChLCWzXiJboQ009oVkemhEoUdrxHme7v3ip+Kh+/kDDeF1WtHWGt0knRLGm1Y4YqCRTSs9QxsZIY8paJj5Szrw==} + /@vue/shared@3.4.10: + resolution: {integrity: sha512-C0mIVhwW1xQLMFyqMJxnhq6fWyE02lCgcE+TDdtGpg6B3H6kh/0YcqS54qYc76UJNlWegf3VgsLqgk6D9hBmzQ==} - /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.8): + /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.10): resolution: {integrity: sha512-Ip8ZVRlI2AP7IrG1UIzGLiSClBp50tWDGgukM1cBVejqMossQ226iwN3VKpNAyRHyFirwRnvhZM2KuMt/2BYow==} peerDependencies: '@vue/compiler-sfc': '>=3.0.0' dependencies: - '@vue/compiler-sfc': 3.4.8 + '@vue/compiler-sfc': 3.4.10 convert-source-map: 1.9.0 hash-sum: 2.0.0 dev: true @@ -3254,8 +3254,8 @@ packages: acorn: 8.11.3 dev: true - /acorn-walk@8.3.1: - resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} dev: true @@ -4685,7 +4685,7 @@ packages: object.assign: 4.1.5 regexp.prototype.flags: 1.5.1 safe-array-concat: 1.0.1 - safe-regex-test: 1.0.1 + safe-regex-test: 1.0.2 string.prototype.trim: 1.2.8 string.prototype.trimend: 1.0.7 string.prototype.trimstart: 1.0.7 @@ -6000,7 +6000,7 @@ packages: resolution: {integrity: sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==} engines: {node: '>=10'} dependencies: - '@types/node': 20.10.8 + '@types/node': 20.11.0 '@types/vinyl': 2.0.11 istextorbinary: 3.3.0 replacestream: 4.0.3 @@ -6037,7 +6037,7 @@ packages: vinyl: 2.2.1 dev: true - /gulp-vue-ssg@1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.8): + /gulp-vue-ssg@1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.10): resolution: {integrity: sha512-QdMsM4zCLgCmfSHtZJ/2ApX4cWYy7hzAPLUimR8p/g0ATTaK6CL7vcMJ4+FW2gvDF+LkXDwbmIqdR32asSwaJA==} engines: {node: ^18||^20} peerDependencies: @@ -6048,7 +6048,7 @@ packages: esbuild: 0.19.11 gulp: 4.0.2 gulp-through2: 1.0.1 - vue: 3.4.8(typescript@5.3.3) + vue: 3.4.10(typescript@5.3.3) optionalDependencies: global-jsdom: 9.2.0(jsdom@23.2.0) jsdom: 23.2.0 @@ -6802,7 +6802,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.10.8 + '@types/node': 20.11.0 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -8210,8 +8210,8 @@ packages: postcss: 8.4.33 dev: true - /postcss-html@1.5.0: - resolution: {integrity: sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA==} + /postcss-html@1.6.0: + resolution: {integrity: sha512-OWgQ9/Pe23MnNJC0PL4uZp8k0EDaUvqpJFSiwFxOLClAhmD7UEisyhO3x5hVsD4xFrjReVTXydlrMes45dJ71w==} engines: {node: ^12 || >=14} dependencies: htmlparser2: 8.0.2 @@ -8257,7 +8257,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.33 - ts-node: 10.9.2(@swc/core@1.3.102)(@types/node@20.10.8)(typescript@5.3.3) + ts-node: 10.9.2(@swc/core@1.3.102)(@types/node@20.11.0)(typescript@5.3.3) yaml: 1.10.2 dev: true @@ -8926,8 +8926,8 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safe-regex-test@1.0.1: - resolution: {integrity: sha512-Y5NejJTTliTyY4H7sipGqY+RX5P87i3F7c4Rcepy72nq+mNLhIsD0W4c7kEmduMDQCSqtPsXPlSTsFhh2LQv+g==} + /safe-regex-test@1.0.2: + resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 @@ -9380,14 +9380,14 @@ packages: stylelint-order: 6.0.4(stylelint@16.1.0) dev: true - /stylelint-config-html@1.1.0(postcss-html@1.5.0)(stylelint@16.1.0): + /stylelint-config-html@1.1.0(postcss-html@1.6.0)(stylelint@16.1.0): resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==} engines: {node: ^12 || >=14} peerDependencies: postcss-html: ^1.0.0 stylelint: '>=14.0.0' dependencies: - postcss-html: 1.5.0 + postcss-html: 1.6.0 stylelint: 16.1.0(typescript@5.3.3) dev: true @@ -9408,17 +9408,17 @@ packages: stylelint-scss: 6.0.0(stylelint@16.1.0) dev: true - /stylelint-config-recommended-vue@1.5.0(postcss-html@1.5.0)(stylelint@16.1.0): + /stylelint-config-recommended-vue@1.5.0(postcss-html@1.6.0)(stylelint@16.1.0): resolution: {integrity: sha512-65TAK/clUqkNtkZLcuytoxU0URQYlml+30Nhop7sRkCZ/mtWdXt7T+spPSB3KMKlb+82aEVJ4OrcstyDBdbosg==} engines: {node: ^12 || >=14} peerDependencies: postcss-html: ^1.0.0 stylelint: '>=14.0.0' dependencies: - postcss-html: 1.5.0 + postcss-html: 1.6.0 semver: 7.5.4 stylelint: 16.1.0(typescript@5.3.3) - stylelint-config-html: 1.1.0(postcss-html@1.5.0)(stylelint@16.1.0) + stylelint-config-html: 1.1.0(postcss-html@1.6.0)(stylelint@16.1.0) stylelint-config-recommended: 14.0.0(stylelint@16.1.0) dev: true @@ -9808,7 +9808,7 @@ packages: typescript: 5.3.3 dev: true - /ts-node@10.9.2(@swc/core@1.3.102)(@types/node@20.10.8)(typescript@5.3.3): + /ts-node@10.9.2(@swc/core@1.3.102)(@types/node@20.11.0)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -9828,9 +9828,9 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.10.8 + '@types/node': 20.11.0 acorn: 8.11.3 - acorn-walk: 8.3.1 + acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -10258,7 +10258,7 @@ packages: - supports-color dev: true - /vue-i18n@9.9.0(vue@3.4.8): + /vue-i18n@9.9.0(vue@3.4.10): resolution: {integrity: sha512-xQ5SxszUAqK5n84N+uUyHH/PiQl9xZ24FOxyAaNonmOQgXeN+rD9z/6DStOpOxNFQn4Cgcquot05gZc+CdOujA==} engines: {node: '>= 16'} peerDependencies: @@ -10267,29 +10267,29 @@ packages: '@intlify/core-base': 9.9.0 '@intlify/shared': 9.9.0 '@vue/devtools-api': 6.5.1 - vue: 3.4.8(typescript@5.3.3) + vue: 3.4.10(typescript@5.3.3) - /vue-slicksort@2.0.5(vue@3.4.8): + /vue-slicksort@2.0.5(vue@3.4.10): resolution: {integrity: sha512-fXz1YrNjhUbJK7o0tMk27mIr4pMAZYLSYvtmLazCtfpvz+zafPCn34ILDL8B7hT7WLVZKreYs6JVe5VWymqmzA==} peerDependencies: vue: '>=3.0.0' dependencies: - vue: 3.4.8(typescript@5.3.3) + vue: 3.4.10(typescript@5.3.3) dev: false - /vue@3.4.8(typescript@5.3.3): - resolution: {integrity: sha512-vJffFOe6DqWsAI10v3tDhb1nJrj7CF3CbdQwOznywAsFNoyvrQ1AWQdcIWJpmRpRnw7NFzstzh6fh4w7n1PNdg==} + /vue@3.4.10(typescript@5.3.3): + resolution: {integrity: sha512-c+O8qGqdWPF9joTCzMGeDDedViooh6c8RY3+eW5+6GCAIY8YjChmU06LsUu0PnMZbIk1oKUoJTqKzmghYtFypw==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.4.8 - '@vue/compiler-sfc': 3.4.8 - '@vue/runtime-dom': 3.4.8 - '@vue/server-renderer': 3.4.8(vue@3.4.8) - '@vue/shared': 3.4.8 + '@vue/compiler-dom': 3.4.10 + '@vue/compiler-sfc': 3.4.10 + '@vue/runtime-dom': 3.4.10 + '@vue/server-renderer': 3.4.10(vue@3.4.10) + '@vue/shared': 3.4.10 typescript: 5.3.3 /w3c-xmlserializer@5.0.0: diff --git a/src/core/design/context/index.d.ts b/src/core/design/context/index.d.ts index 2b07cb27..120dcdbd 100644 --- a/src/core/design/context/index.d.ts +++ b/src/core/design/context/index.d.ts @@ -15,8 +15,10 @@ import type { traceContourTask } from "core/design/tasks/traceContour"; export type NodeCollection = Readonly> & Omit, number>; export interface ITree { + /** The array of all nodes. Some indices are skipped. */ readonly $nodes: NodeCollection; + /** The root node of the tree. */ readonly $root: ITreeNode; /** Deletes an leaf, and returns if the operation is successful */ @@ -41,10 +43,15 @@ export interface ITree { * This is the readonly interface for {@link TreeNode}. */ export interface ITreeNode extends ISerializable { + /** The id of the node. */ readonly id: NodeId; readonly $parent: this | undefined; + + /** The length of its parent edge. */ readonly $length: number; readonly $children: IReadonlyHeap; + + /** The distance from the node to the root. */ readonly $dist: number; readonly $isLeaf: boolean; readonly $AABB: AABB; diff --git a/src/core/design/context/tree.ts b/src/core/design/context/tree.ts index 14a8b766..b9486f4e 100644 --- a/src/core/design/context/tree.ts +++ b/src/core/design/context/tree.ts @@ -1,5 +1,6 @@ import { TreeNode } from "./treeNode"; import { State } from "core/service/state"; +import { UpdateResult } from "core/service/updateResult"; import type { TreeData } from "core/service/updateModel"; import type { JEdge, JFlap } from "shared/json"; @@ -17,10 +18,8 @@ import type { NodeId } from "shared/json/tree"; export class Tree implements ITree, ISerializable { - /** The array of all nodes. Some indices are skipped. */ private readonly _nodes: (TreeNode | undefined)[]; - /** The root node of the tree. */ public $root!: TreeNode; /** @@ -83,7 +82,6 @@ export class Tree implements ITree, ISerializable { return result; } - /** Public node array. */ public get $nodes(): NodeCollection { return this._nodes as NodeCollection; } @@ -189,7 +187,7 @@ export class Tree implements ITree, ISerializable { this.$setLength(n2, length); } - State.$updateResult.edit.push([true, { n1, n2, length }]); + UpdateResult.$edit([true, { n1, n2, length }]); return N1; } @@ -203,7 +201,7 @@ export class Tree implements ITree, ISerializable { public $removeEdge(n1: NodeId, n2: NodeId): void { const N1 = this._nodes[n1]!, N2 = this._nodes[n2]!; const child = N1.$parent == N2 ? N1 : N2; - State.$updateResult.edit.push([false, { n1, n2, length: child.$length }]); + UpdateResult.$edit([false, { n1, n2, length: child.$length }]); State.$treeStructureChanged = true; child.$cut(); @@ -236,7 +234,7 @@ export class Tree implements ITree, ISerializable { State.$nodeAABBChanged.delete(node); delete this._nodes[id]; - State.$updateResult.remove.nodes.push(id); + UpdateResult.$removeNode(id); } this._pendingRemove.clear(); } @@ -283,17 +281,18 @@ export class Tree implements ITree, ISerializable { if(!N1) this.$root = N1 = this._addNode(n1); N2 = this._addNode(n2, N1, length); } - State.$updateResult.edit.push([true, { n1, n2, length }]); + UpdateResult.$edit([true, { n1, n2, length }]); return true; } } +/** Return the structural distance between two {@link ITreeNode}s using LCA. */ export function dist(a: ITreeNode, b: ITreeNode, lca: ITreeNode): number { return a.$dist + b.$dist - 2 * lca.$dist; } /** - * Returns the distance between two nodes on the tree. Used only in unit tests. + * Return the structural distance between two nodes without supplying LCA. Used only in unit tests. */ export function getDist(n1: TreeNode, n2: TreeNode): number { return dist(n1, n2, getLCA(n1, n2)); diff --git a/src/core/design/context/treeNode.ts b/src/core/design/context/treeNode.ts index 06918002..d588404a 100644 --- a/src/core/design/context/treeNode.ts +++ b/src/core/design/context/treeNode.ts @@ -1,6 +1,7 @@ import { AABB } from "./aabb/aabb"; import { MutableHeap } from "shared/data/heap/mutableHeap"; import { State } from "core/service/state"; +import { UpdateResult } from "core/service/updateResult"; import type { JNode } from "core/service/updateModel"; import type { Comparator } from "shared/types/types"; @@ -23,12 +24,8 @@ export const nodeComparator: Comparator = (a, b) => b.$dist - a.$dist export class TreeNode implements ITreeNode { - /** The id of the node. */ public readonly id: NodeId; - public $parent: this | undefined; - - /** The distance from the node to the root. */ public $dist: number = 0; /** @@ -54,13 +51,12 @@ export class TreeNode implements ITreeNode { $ridges: [], }; - /** The length of its parent edge. */ public $length: number = 0; constructor(id: NodeId, parent?: TreeNode, length: number = 0) { this.id = id; State.$childrenChanged.add(this); - State.$updateResult.add.nodes.push(id); + UpdateResult.$addNode(id); if(parent) { this.$length = length; this.$AABB.$setMargin(length); diff --git a/src/core/design/tasks/balance.ts b/src/core/design/tasks/balance.ts index 54019d5a..1fd33c80 100644 --- a/src/core/design/tasks/balance.ts +++ b/src/core/design/tasks/balance.ts @@ -38,6 +38,7 @@ function balance(): void { function tryBalance(root: TreeNode): TreeNode | null { // Precondition check const first = root.$children.$get(); + /* istanbul ignore next: type-safety */ if(!first) return null; const second = root.$children.$getSecond(); const secondHeight = second ? second.$height + 1 : 0; diff --git a/src/core/design/tasks/graphics.ts b/src/core/design/tasks/graphics.ts index 3e3215b9..a0fb9e10 100644 --- a/src/core/design/tasks/graphics.ts +++ b/src/core/design/tasks/graphics.ts @@ -7,6 +7,7 @@ import { getOrderedKey } from "shared/data/doubleMap/intDoubleMap"; import { Line } from "core/math/geometry/line"; import { combineContour } from "./utils/combine"; import { getOrSetEmptyArray } from "shared/utils/map"; +import { UpdateResult } from "core/service/updateResult"; import type { Point } from "core/math/geometry/point"; import type { Repository } from "../layout/repository"; @@ -25,7 +26,7 @@ function graphics(): void { // Devices for(const repo of State.$repoToProcess) addRepo(repo); for(const repo of State.$repoWithNodeSetChanged) { - State.$updateResult.update.stretches.push(repo.$stretch.$id); + UpdateResult.$updateStretch(repo.$stretch.$id); addRepo(repo); } @@ -41,21 +42,21 @@ function graphics(): void { combineContour(node); g.$ridges = node.$isLeaf ? flapRidge(node) : riverRidge(node, freeCorners); - State.$updateResult.graphics[node.$tag] = { + UpdateResult.$addGraphics(node.$tag, { contours: g.$contours, ridges: g.$ridges, - }; + }); } // Pass the updated structure to the client. - if(State.$treeStructureChanged) State.$updateResult.tree = State.$tree.toJSON(); + if(State.$treeStructureChanged) UpdateResult.$exportTree(State.$tree.toJSON()); } function addRepo(repo: Repository): void { if(!repo.$pattern) return; const forward = repo.$direction == SlashDirection.FW; for(const [i, device] of repo.$pattern.$devices.entries()) { - State.$updateResult.graphics["s" + repo.$stretch.$id + "." + i] = { + UpdateResult.$addGraphics("s" + repo.$stretch.$id + "." + i, { contours: device.$contour, ridges: device.$drawRidges, axisParallel: device.$axisParallels, @@ -63,7 +64,7 @@ function addRepo(repo: Repository): void { // Note that the range of all devices in the pattern will be updated. range: device.$getDraggingRange(), forward, - } as DeviceData; + } as DeviceData); } } diff --git a/src/core/design/tasks/invalidJunction.ts b/src/core/design/tasks/invalidJunction.ts index 9d5edd52..4264bc0e 100644 --- a/src/core/design/tasks/invalidJunction.ts +++ b/src/core/design/tasks/invalidJunction.ts @@ -1,5 +1,6 @@ import { State } from "core/service/state"; import { Task } from "./task"; +import { UpdateResult } from "core/service/updateResult"; import type { InvalidJunction } from "../layout/junction/invalidJunction"; @@ -20,11 +21,11 @@ function invalid(): void { if(junction.$processed) continue; // Calculate the shape of intersection. - State.$updateResult.add.junctions[`${a},${b}`] = junction.$getPolygon(); + UpdateResult.$addJunction(`${a},${b}`, junction.$getPolygon()); } // After the process above, the remaining ones are those that should be deleted. for(const [a, b] of State.$invalidJunctionDiff.$diff()) { - State.$updateResult.remove.junctions.push(`${a},${b}`); + UpdateResult.$removeJunction(`${a},${b}`); } } diff --git a/src/core/design/tasks/junction.ts b/src/core/design/tasks/junction.ts index a8006016..66ed5095 100644 --- a/src/core/design/tasks/junction.ts +++ b/src/core/design/tasks/junction.ts @@ -4,6 +4,7 @@ import { createJunction, Junction } from "../layout/junction/junction"; import { invalidJunctionTask } from "./invalidJunction"; import { stretchTask } from "./stretch"; import { dist } from "../context/tree"; +import { UpdateResult } from "core/service/updateResult"; import type { ITreeNode } from "../context"; @@ -20,9 +21,7 @@ export const junctionTask = new Task(junction, invalidJunctionTask, stretchTask) function junction(): void { // Delete junctions related to deleted nodes or nodes that are no longer leaves - for(const id of State.$updateResult.remove.nodes) { - State.$junctions.delete(id); - } + UpdateResult.$pruneJunctions(State.$junctions); for(const node of State.$childrenChanged) { if(node.$children.$size > 0) State.$junctions.delete(node.id); } diff --git a/src/core/design/tasks/pattern.ts b/src/core/design/tasks/pattern.ts index dd477bf1..ecdf859b 100644 --- a/src/core/design/tasks/pattern.ts +++ b/src/core/design/tasks/pattern.ts @@ -1,6 +1,7 @@ import { State } from "core/service/state"; import { Task } from "./task"; import { traceContourTask } from "./traceContour"; +import { UpdateResult } from "core/service/updateResult"; import type { Configuration } from "../layout/configuration"; import type { Pattern } from "../layout/pattern/pattern"; @@ -20,15 +21,15 @@ function pattern(): void { for(const repo of State.$repoToProcess) { const id = repo.$stretch.$id; if(repo.$pattern) { - State.$updateResult.add.stretches[id] = repo.$stretch.toJSON(); + UpdateResult.$addStretch(id, repo.$stretch.toJSON()); } else { - State.$updateResult.remove.stretches.push(id); + UpdateResult.$removeStretch(id); } } for(const s of State.$stretches.values()) { if(!s.$repo.$pattern) { - State.$updateResult.patternNotFound = true; + UpdateResult.$setPatternNotFound(); continue; } diff --git a/src/core/design/tasks/stretch.ts b/src/core/design/tasks/stretch.ts index 1df9fbdd..7ac4eab7 100644 --- a/src/core/design/tasks/stretch.ts +++ b/src/core/design/tasks/stretch.ts @@ -8,6 +8,7 @@ import { minComparator } from "shared/data/heap/heap"; import { patternTask } from "./pattern"; import { Stretch } from "../layout/stretch"; import { clearPatternContourForRepo } from "./patternContour"; +import { UpdateResult } from "core/service/updateResult"; import type { JStretch, NodeId } from "shared/json"; import type { Junctions, ValidJunction } from "../layout/junction/validJunction"; @@ -51,7 +52,7 @@ function stretches(): void { State.$stretchCache.set(id, s); } State.$stretches.delete(id); - State.$updateResult.remove.stretches.push(id); + UpdateResult.$removeStretch(id); } } diff --git a/src/core/design/tasks/traceContour.ts b/src/core/design/tasks/traceContour.ts index 78e0aff9..5bae1423 100644 --- a/src/core/design/tasks/traceContour.ts +++ b/src/core/design/tasks/traceContour.ts @@ -307,8 +307,8 @@ function createRawContourForLeaf(node: ITreeNode, leaf: ITreeNode): PathEx { const final: Path = []; const quadrants = [] as IPoint[]; for(const junction of coveredJunctions) { - const q = junction.$a === leaf ? getQuadrant(junction.$q1) : getQuadrant(junction.$q2); - quadrants[q] = junction.$o; + const code = junction.$a === leaf ? junction.$q1 : junction.$q2; + quadrants[getQuadrant(code)] = junction.$o; } for(let q = 0; q < quadrantNumber; q++) { const p = result[q]; diff --git a/src/core/design/tasks/utils/combine.ts b/src/core/design/tasks/utils/combine.ts index a2000cf9..e2081965 100644 --- a/src/core/design/tasks/utils/combine.ts +++ b/src/core/design/tasks/utils/combine.ts @@ -46,6 +46,7 @@ function insertOuter(patternContours: PatternContour[], result: RationalContour[ } else { // Otherwise fallback to trying each rough contour for(const rough of result) { + /* istanbul ignore else: foolproof */ if(tryInsertOuter(contour, rough)) break; } } @@ -71,6 +72,7 @@ function tryInsertInner(childContour: PatternContour, result: RationalContour[]) for(const inner of contour.$inner) { const leaves = inner.leaves || contour.$leaves; if(childContour.$leaves.some(l => !leaves.includes(l))) continue; + /* istanbul ignore else: foolproof */ if(tryInsert(inner, childContour)) return; } } diff --git a/src/core/design/tasks/utils/expand.ts b/src/core/design/tasks/utils/expand.ts index 6b7c79d6..64c0fbe4 100644 --- a/src/core/design/tasks/utils/expand.ts +++ b/src/core/design/tasks/utils/expand.ts @@ -27,6 +27,7 @@ export function expandPath(path: PathEx, units: number): PathEx { * vertices in the path, to prevent potential bugs in tracing logics. */ export function simplify(path: PathEx): PathEx { + /* istanbul ignore next: foolproof */ if(!path) return []; // First we need to remove duplicate vertices, // or the next step won't work correctly. diff --git a/src/core/main.ts b/src/core/main.ts index ef866475..327f59d8 100644 --- a/src/core/main.ts +++ b/src/core/main.ts @@ -5,6 +5,7 @@ import "shared/polyfill/flatMap"; import { getAction } from "./routes/routes"; import { State } from "./service/state"; +import { UpdateResult } from "./service/updateResult"; import type { CoreError } from "shared/json"; import type { CoreResponse, CoreRequest } from "core/routes"; @@ -34,9 +35,7 @@ onmessage = function(event: MessageEvent): void { response = { value: result }; } else { // Otherwise we will return the UpdateModel by default. - const update = State.$updateResult; - State.$resetResult(); - response = { update }; + response = { update: UpdateResult.$flush() }; } } catch(e: unknown) { debugger; diff --git a/src/core/service/state.ts b/src/core/service/state.ts index ae7bfa97..1426e776 100644 --- a/src/core/service/state.ts +++ b/src/core/service/state.ts @@ -1,11 +1,11 @@ import { IntDoubleMap } from "shared/data/doubleMap/intDoubleMap"; import { DiffDoubleSet } from "shared/data/diff/diffDoubleSet"; import { DiffSet } from "shared/data/diff/diffSet"; +import { UpdateResult } from "./updateResult"; import type { Repository } from "core/design/layout/repository"; import type { Device } from "core/design/layout/pattern/device"; import type { JStretch, NodeId } from "shared/json"; -import type { UpdateModel } from "./updateModel"; import type { Stretch } from "core/design/layout/stretch"; import type { Junction } from "core/design/layout/junction/junction"; import type { InvalidJunction } from "core/design/layout/junction/invalidJunction"; @@ -133,8 +133,6 @@ export namespace State { // Public methods ///////////////////////////////////////////////////////////////////////////////////////////////////// - export let $updateResult: UpdateModel; - /** Reset the temporary states after each round. */ export function $reset(): void { $childrenChanged.clear(); @@ -156,34 +154,13 @@ export namespace State { $rootChanged = false; } - export function $resetResult(): void { - $updateResult = { - add: { - nodes: [], - junctions: {}, - stretches: {}, - }, - update: { - stretches: [], - }, - remove: { - nodes: [], - junctions: [], - stretches: [], - }, - patternNotFound: false, - edit: [], - graphics: {}, - }; - } - $reset(); - $resetResult(); } /** For unit tests only */ export function fullReset(): void { State.$reset(); + UpdateResult.$flush(); State.$junctions.clear(); State.$stretches.clear(); State.$invalidJunctionDiff.clear(); diff --git a/src/core/service/updateResult.ts b/src/core/service/updateResult.ts new file mode 100644 index 00000000..bef02ce4 --- /dev/null +++ b/src/core/service/updateResult.ts @@ -0,0 +1,95 @@ +import type { IntDoubleMap } from "shared/data/doubleMap/intDoubleMap"; +import type { JStretch } from "shared/json/pattern"; +import type { JEdit, NodeId } from "shared/json/tree"; +import type { ArcPolygon } from "shared/types/geometry"; +import type { GraphicsData, TreeData, UpdateModel } from "./updateModel"; +import type { Junction } from "core/design/layout/junction/junction"; + +//================================================================= +/** + * {@link UpdateResult} isolates {@link UpdateModel} and prevents unintended access. + */ +//================================================================= +export namespace UpdateResult { + + let _updateResult: UpdateModel; + + export function $edit(e: JEdit): void { + _updateResult.edit.push(e); + } + + export function $addNode(id: NodeId): void { + _updateResult.add.nodes.push(id); + } + + export function $removeNode(id: NodeId): void { + _updateResult.remove.nodes.push(id); + } + + export function $addJunction(id: string, polygon: ArcPolygon): void { + _updateResult.add.junctions[id] = polygon; + } + + export function $removeJunction(id: string): void { + _updateResult.remove.junctions.push(id); + } + + export function $pruneJunctions(junctions: IntDoubleMap): void { + for(const id of _updateResult.remove.nodes) { + junctions.delete(id); + } + } + + export function $addStretch(id: string, stretch: JStretch): void { + _updateResult.add.stretches[id] = stretch; + } + + export function $updateStretch(id: string): void { + _updateResult.update.stretches.push(id); + } + + export function $removeStretch(id: string): void { + _updateResult.remove.stretches.push(id); + } + + export function $addGraphics(tag: string, data: GraphicsData): void { + _updateResult.graphics[tag] = data; + } + + export function $setPatternNotFound(): void { + _updateResult.patternNotFound = true; + } + + export function $exportTree(tree: TreeData): void { + _updateResult.tree = tree; + } + + export function $flush(): UpdateModel { + const result = _updateResult; + _reset(); + return result; + } + + function _reset(): void { + _updateResult = { + add: { + nodes: [], + junctions: {}, + stretches: {}, + }, + update: { + stretches: [], + }, + remove: { + nodes: [], + junctions: [], + stretches: [], + }, + patternNotFound: false, + edit: [], + graphics: {}, + }; + } + + _reset(); +} diff --git a/test/specs/contour.spec.ts b/test/specs/contour.spec.ts index 9dd4f144..d15fe8c4 100644 --- a/test/specs/contour.spec.ts +++ b/test/specs/contour.spec.ts @@ -1,8 +1,9 @@ -import { parseRationalPath } from "../utils/rationalPath"; +import { parseRationalPath } from "@utils/rationalPath"; +import { id1, id6, parseTree } from "@utils/tree"; import { toGraphicalContours } from "core/design/tasks/utils/combine"; -import { id1, id6, parseTree } from "../utils/tree"; import { State } from "core/service/state"; import { TreeController } from "core/controller/treeController"; +import { UpdateResult } from "core/service/updateResult"; import type { NodeId } from "shared/json/tree"; import type { RationalContour } from "core/design/tasks/utils/combine"; @@ -32,8 +33,18 @@ describe("Contour", function() { "(5,0,1),(5,7,1),(0,2,1),(0,1,3),(0,6,1),(7,13,1),(7,4,1),(2,11,1),(2,8,1),(2,3,2),(2,15,1),(6,10,1),(6,9,1),(13,14,6),(11,12,1)", "(1,3,6,0,0),(3,11,6,0,0),(8,8,6,0,1),(9,4,11,0,0),(10,2,11,0,0),(12,9,10,0,0),(4,7,1,0,0),(14,17,21,0,0),(15,12,9,0,2)" ); - const outer = State.$updateResult.graphics["re0,5"].contours[0].outer; - expect(outer).to.equalPath("(43/3,13),(13,14),(-1,14),(-1,2),(5,2),(5,2.5),(17/3,3),(25/3,3),(9,2.5),(9,2),(15,2),(15,13)"); + const result1 = UpdateResult.$flush(); + const outer1 = result1.graphics["re0,5"].contours[0].outer; + expect(outer1).to.equalPath("(43/3,13),(13,14),(-1,14),(-1,2),(5,2),(5,2.5),(17/3,3),(25/3,3),(9,2.5),(9,2),(15,2),(15,13)"); + + // rotate and swap some indices for branch coverage + parseTree( + "(5,0,1),(5,7,1),(0,2,1),(0,1,3),(0,6,1),(7,13,1),(7,4,1),(2,11,1),(2,8,1),(2,3,2),(2,15,1),(6,10,1),(6,9,1),(13,12,6),(11,14,1)", + "(1,6,-3,0,0),(3,6,-11,0,0),(8,6,-8,1,0),(9,11,-4,0,0),(10,11,-2,0,0),(14,10,-9,0,0),(4,1,-7,0,0),(12,21,-17,0,0),(15,9,-12,2,0)" + ); + const result2 = UpdateResult.$flush(); + const outer2 = result2.graphics["re0,5"].contours[0].outer; + expect(outer2).to.equalPath("(2,1),(2,-5),(2.5,-5),(3,-17/3),(3,-25/3),(2.5,-9),(2,-9),(2,-15),(13,-15),(13,-43/3),(14,-13),(14,1)"); }); }); @@ -61,6 +72,19 @@ describe("Contour", function() { expect(result[0]?.inner?.[0]).to.be.an("array").that.deep.contains({ x: 28, y: 26 }); }); + it("Resolves stacking", function() { + parseTree( // "hole contour 1.bps" + "(0,1,1),(0,2,1),(1,3,1),(1,4,1),(1,5,1),(1,6,1),(2,7,1)", + "(7,7,16,0,0),(3,5,4,0,3),(4,6,3,3,0),(5,6,8,3,0),(6,10,4,0,3)" + ); + const contours = UpdateResult.$flush().graphics["re0,1"].contours + .toSorted((a, b) => a.outer.length - b.outer.length); + expect(contours.length).to.equal(2); + expect(contours[0].outer).to.equalPath("(6,4),(9,4),(9,7),(6,7)", true); + expect(contours[0].inner?.length).to.equal(1); + expect(contours[0].inner![0]).to.equalPath("(7,6),(8,6),(8,5),(7,5)", true); + }); + }); }); diff --git a/test/specs/cp.spec.ts b/test/specs/cp.spec.ts index 3b87be39..9d526841 100644 --- a/test/specs/cp.spec.ts +++ b/test/specs/cp.spec.ts @@ -1,6 +1,6 @@ -import { parseTree } from "../utils/tree"; +import { parseTree } from "@utils/tree"; +import { parsePath } from "@utils/path"; import { LayoutController } from "core/controller/layoutController"; -import { parsePath } from "../utils/path"; import { CreaseType } from "shared/types/cp"; describe("CP exporting", function() { diff --git a/test/specs/dataStructure/binarySearchTree.spec.ts b/test/specs/dataStructure/binarySearchTree.spec.ts index e2056f69..1c4a8bea 100644 --- a/test/specs/dataStructure/binarySearchTree.spec.ts +++ b/test/specs/dataStructure/binarySearchTree.spec.ts @@ -1,5 +1,5 @@ +import { random } from "@utils/random"; import { RavlTree } from "shared/data/bst/ravlTree"; -import { random } from "../../utils/random"; import { minComparator } from "shared/data/heap/heap"; import type { IBinarySearchTree } from "shared/data/bst/binarySearchTree"; diff --git a/test/specs/geometry/line.spec.ts b/test/specs/geometry/line.spec.ts index 33d121b5..474f7f4b 100644 --- a/test/specs/geometry/line.spec.ts +++ b/test/specs/geometry/line.spec.ts @@ -1,5 +1,5 @@ +import { parseLine } from "@utils/line"; import { Line } from "core/math/geometry/line"; -import { parseLine } from "../../utils/line"; import { Vector } from "core/math/geometry/vector"; export default function() { diff --git a/test/specs/geometry/polyBool.spec.ts b/test/specs/geometry/polyBool.spec.ts index 6174598b..b25ab213 100644 --- a/test/specs/geometry/polyBool.spec.ts +++ b/test/specs/geometry/polyBool.spec.ts @@ -1,7 +1,7 @@ +import { random } from "@utils/random"; +import { parsePath } from "@utils/path"; import { expand } from "core/design/tasks/roughContour"; import { AAUnion, GeneralUnion, RRIntersection } from "core/math/sweepLine/polyBool"; -import { random } from "../../utils/random"; -import { parsePath } from "../../utils/path"; import { RoughUnion } from "core/math/sweepLine/polyBool/aaUnion/roughUnion"; import { isClockwise } from "core/math/geometry/path"; diff --git a/test/specs/geometry/sweepLine.spec.ts b/test/specs/geometry/sweepLine.spec.ts index c2081bba..f0600e8e 100644 --- a/test/specs/geometry/sweepLine.spec.ts +++ b/test/specs/geometry/sweepLine.spec.ts @@ -1,4 +1,4 @@ -import { parsePath } from "../../utils/path"; +import { parsePath } from "@utils/path"; import { Stacking } from "core/math/sweepLine/stacking/stacking"; import { Clip } from "core/math/sweepLine/clip/clip"; import { CreaseType } from "shared/types/cp"; diff --git a/test/specs/junction.spec.ts b/test/specs/junction.spec.ts index 8b3bdd18..70acdc59 100644 --- a/test/specs/junction.spec.ts +++ b/test/specs/junction.spec.ts @@ -1,9 +1,10 @@ +import { id0, id3, id4, parseTree } from "@utils/tree"; import { heightTask } from "core/design/tasks/height"; import { Processor } from "core/service/processor"; import { State } from "core/service/state"; import { getFirst } from "shared/utils/set"; -import { id0, id3, id4, parseTree } from "../utils/tree"; import { LayoutController } from "core/controller/layoutController"; +import { UpdateResult } from "core/service/updateResult"; import type { InvalidJunction } from "core/design/layout/junction/invalidJunction"; import type { Junction } from "core/design/layout/junction/junction"; @@ -51,13 +52,12 @@ describe("Junction", function() { expect(invalidJunctions.length).to.equal(1); const junction = invalidJunctions[0]; expect(junction.$processed).to.be.true; - expect(State.$updateResult.add.junctions["1,2"]).to.be.not.undefined; + expect(UpdateResult.$flush().add.junctions["1,2"]).to.be.not.undefined; // Moving an unrelated flap - State.$resetResult(); LayoutController.updateFlap([{ id: id3, x: 3, y: 2, width: 0, height: 0 }], false, []); expect(getJunctions(false)).to.contain(junction, "Junction is reused"); - expect(State.$updateResult.add.junctions["1,2"]).to.be.undefined; + expect(UpdateResult.$flush().add.junctions["1,2"]).to.be.undefined; }); }); diff --git a/test/specs/migration.spec.ts b/test/specs/migration.spec.ts index b700a370..cddb2cbd 100644 --- a/test/specs/migration.spec.ts +++ b/test/specs/migration.spec.ts @@ -1,5 +1,5 @@ +import { getJSON } from "@utils/sample"; import { Migration } from "client/patches"; -import * as sample from "../samples/v04.session.sample.json"; import type { JProject } from "shared/json"; @@ -19,7 +19,10 @@ describe("Migration", function() { let result: JProject; - before(function() { return result = Migration.$process(sample); }); + before(async function() { + const sample = await getJSON("v04.session.sample.json"); + result = Migration.$process(sample); + }); it("Isolates design", function() { expect(result).to.have.property("design"); diff --git a/test/specs/pattern.spec.ts b/test/specs/pattern.spec.ts index 169363bb..2a69737f 100644 --- a/test/specs/pattern.spec.ts +++ b/test/specs/pattern.spec.ts @@ -1,13 +1,12 @@ -import "../utils/line"; -import "../utils/path"; +import { createTree, id1, id2, id3, id4, node, parseTree } from "@utils/tree"; +import { getJSON } from "@utils/sample"; import { LayoutController } from "core/controller/layoutController"; import { DesignController } from "core/controller/designController"; import { Migration } from "client/patches"; import { toPath } from "core/math/geometry/rationalPath"; import { State, fullReset } from "core/service/state"; -import { createTree, id1, id2, id3, id4, node, parseTree } from "../utils/tree"; import { TreeController } from "core/controller/treeController"; -import * as sample from "../samples/v04.session.sample.json"; +import { UpdateResult } from "core/service/updateResult"; import type { Tree } from "core/design/context/tree"; @@ -15,8 +14,9 @@ describe("Pattern", function() { describe("Searching", function() { - it("Loads saved patterns", function() { + it("Loads saved patterns", async function() { fullReset(); + const sample = await getJSON("v04.session.sample.json"); const data = Migration.$process(sample); DesignController.init(data.design); complete(); @@ -33,7 +33,7 @@ describe("Pattern", function() { ]); const stretch = State.$stretches.get("1,2,3")!; expect(stretch.$repo.$pattern).to.equal(null); - expect(State.$updateResult.patternNotFound).to.be.true; + expect(UpdateResult.$flush().patternNotFound).to.be.true; }); it("Caches repo during dragging", function() { @@ -273,13 +273,12 @@ describe("Pattern", function() { it("Updates ridges when edges merge or split", function() { parseTree("(0,1,2),(0,2,2),(0,4,1),(4,3,7)", "(1,9,5,0,0),(2,6,8,0,0),(3,0,0,0,0)"); complete(); - const result1 = State.$updateResult; + const result1 = UpdateResult.$flush(); const ridges1 = result1.graphics["s1,2,3.0"].ridges; expect(ridges1).to.containLine([{ x: 4.5, y: 3.5 }, { x: 6, y: 5 }]); - State.$resetResult(); TreeController.join(id4); - const result2 = State.$updateResult; + const result2 = UpdateResult.$flush(); const data2 = result2.graphics["s1,2,3.0"]; expect(data2).to.be.not.undefined; const ridges2 = data2.ridges; diff --git a/test/specs/trace.spec.ts b/test/specs/trace.spec.ts index 775017be..4a82de40 100644 --- a/test/specs/trace.spec.ts +++ b/test/specs/trace.spec.ts @@ -1,7 +1,7 @@ +import { parsePath } from "@utils/path"; import { Trace } from "core/design/layout/trace/trace"; import { Line } from "core/math/geometry/line"; import { Direction, SlashDirection } from "shared/types/direction"; -import { parsePath } from "../utils/path"; import { mapDirections } from "core/math/geometry/path"; import { createHingeSegments } from "core/design/layout/trace/hingeSegment"; import { Point } from "core/math/geometry/point"; diff --git a/test/specs/tree.spec.ts b/test/specs/tree.spec.ts index df7d04c1..5b9810bc 100644 --- a/test/specs/tree.spec.ts +++ b/test/specs/tree.spec.ts @@ -1,8 +1,8 @@ +import { createTree, node, id0, id1, id2, id3, id4, id6, parseTree } from "@utils/tree"; import { TreeController } from "core/controller/treeController"; import { getDist } from "core/design/context/tree"; import { heightTask } from "core/design/tasks/height"; import { Processor } from "core/service/processor"; -import { createTree, node, id0, id1, id2, id3, id4, id6, parseTree } from "../utils/tree"; describe("Tree", function() { diff --git a/test/specs/treeMaker.spec.ts b/test/specs/treeMaker.spec.ts index d0583609..464a132e 100644 --- a/test/specs/treeMaker.spec.ts +++ b/test/specs/treeMaker.spec.ts @@ -1,12 +1,11 @@ -import { readFileSync } from "fs"; - +import { getText } from "@utils/sample"; import { treeMaker } from "client/plugins/treeMaker"; describe("TreeMaker importing", function() { let sample: string; - before(function() { - sample = readFileSync("./test/samples/sample.tmd5").toString(); + before(async function() { + sample = await getText("sample.tmd5"); }); it("Reads TreeMaker v5 format", function() { diff --git a/test/tests/README.md b/test/tests/README.md deleted file mode 100644 index 08c1171e..00000000 --- a/test/tests/README.md +++ /dev/null @@ -1,4 +0,0 @@ - -# Tests - -This section contains testing tools that are not part of the Mocha unit tests. diff --git a/test/tsconfig.json b/test/tsconfig.json index 8db1bbd9..ee064c60 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -13,7 +13,12 @@ "types": [ "mocha", "node" - ] + ], + "paths": { + "@utils/*": [ + "../test/utils/*" + ] + } }, "include": [ "./**/*.ts", diff --git a/test/utils/sample.ts b/test/utils/sample.ts new file mode 100644 index 00000000..14073cfd --- /dev/null +++ b/test/utils/sample.ts @@ -0,0 +1,25 @@ +import { readFile } from "fs"; + +function readFileAsync(path: string): Promise { + return new Promise((resolve, reject) => { + readFile("./test/samples/" + path, (err, data) => { + if(err) reject(err); + else resolve(data.toString()); + }); + }); +} + +const cache = new Map(); + +export async function getText(path: string): Promise { + if(cache.has(path)) return cache.get(path)!; + const data = await readFileAsync(path); + cache.set(path, data); + return data; +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export async function getJSON(path: string): Promise { + const data = await getText(path); + return JSON.parse(data); +} diff --git a/test/utils/tree.ts b/test/utils/tree.ts index 8710657a..fb1929fe 100644 --- a/test/utils/tree.ts +++ b/test/utils/tree.ts @@ -27,7 +27,7 @@ export type NFlap = Substitute; export function parseTree(edges: string, flaps: string): Tree { const nEdges: NEdge[] = [...edges.matchAll(/\((\d+),(\d+),(\d+)\)/g)] .map(m => ({ n1: Number(m[1]), n2: Number(m[2]), length: Number(m[3]) })); - const nFlaps: NFlap[] = [...flaps.matchAll(/\((\d+),(\d+),(\d+),(\d+),(\d+)\)/g)] + const nFlaps: NFlap[] = [...flaps.matchAll(/\((\d+),(-?\d+),(-?\d+),(\d+),(\d+)\)/g)] .map(m => ({ id: Number(m[1]), x: Number(m[2]), y: Number(m[3]), width: Number(m[4]), height: Number(m[5]) })); return createTree(nEdges, nFlaps); } diff --git a/tools/README.md b/tools/README.md new file mode 100644 index 00000000..364e2b90 --- /dev/null +++ b/tools/README.md @@ -0,0 +1,4 @@ + +# Tools + +This section contains tools for assisting debugging issues. diff --git a/test/tests/polyBool/index.htm b/tools/polyBool/index.htm similarity index 100% rename from test/tests/polyBool/index.htm rename to tools/polyBool/index.htm diff --git a/test/tests/polyBool/index.ts b/tools/polyBool/index.ts similarity index 97% rename from test/tests/polyBool/index.ts rename to tools/polyBool/index.ts index c29802f3..182a2d7c 100644 --- a/test/tests/polyBool/index.ts +++ b/tools/polyBool/index.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-magic-numbers */ import { AAUnion, GeneralUnion } from "core/math/sweepLine/polyBool"; import type { Polygon } from "shared/types/geometry"; diff --git a/tools/tsconfig.json b/tools/tsconfig.json new file mode 100644 index 00000000..16deafc7 --- /dev/null +++ b/tools/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "baseUrl": "../src", + "experimentalDecorators": true, + "isolatedModules": true, + "moduleResolution": "node", + "noImplicitOverride": true, + "preserveSymlinks": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "esnext", + "lib": [ + "esnext", + "dom", + "dom.iterable" + ] + }, + "include": [ + "./**/*.ts", + "../src/shared/types/**/*.d.ts" + ] +} \ No newline at end of file From 3648d62da3fbe6b5da85f65e32d28371b7f3f3ed Mon Sep 17 00:00:00 2001 From: Mu-Tsun Tsai Date: Fri, 19 Jan 2024 13:37:54 +0800 Subject: [PATCH 06/11] Add manifest categories --- src/public/manifest.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/public/manifest.json b/src/public/manifest.json index 80097cc2..ae55a295 100644 --- a/src/public/manifest.json +++ b/src/public/manifest.json @@ -9,6 +9,11 @@ "background_color": "#fff", "orientation": "any", "description": "Super-complex origami design made easy!", + "categories": [ + "education", + "entertainment", + "productivity" + ], "icons": [ { "src": "assets/icon/icon-512.png", From 5c907e4fdfa3367e8f45abbbf2280ff63ae88824 Mon Sep 17 00:00:00 2001 From: Mu-Tsun Tsai Date: Wed, 24 Jan 2024 10:28:34 +0800 Subject: [PATCH 07/11] Update dependencies --- package.json | 28 +- pnpm-lock.yaml | 854 ++++++++++++++++++++++++------------------------- 2 files changed, 441 insertions(+), 441 deletions(-) diff --git a/package.json b/package.json index ec460c16..deaf9947 100644 --- a/package.json +++ b/package.json @@ -31,23 +31,23 @@ "@fal-works/esbuild-plugin-global-externals": "^2.1.2", "@intlify/vue-i18n-extensions": "^5.0.1", "@makeomatic/gulp-wrap-js": "^1.0.2", - "@stylistic/eslint-plugin": "^1.5.3", - "@swc/core": "^1.3.102", + "@stylistic/eslint-plugin": "^1.5.4", + "@swc/core": "^1.3.105", "@types/bootstrap": "^5.2.10", "@types/chai": "^4.3.11", "@types/gtag.js": "^0.0.18", "@types/gulp": "^4.0.17", "@types/gulp-load-plugins": "^0.0.37", "@types/mocha": "^10.0.6", - "@types/node": "^20.11.0", + "@types/node": "^20.11.5", "@types/wicg-file-system-access": "^2023.10.4", - "@typescript-eslint/eslint-plugin": "^6.18.1", - "@typescript-eslint/parser": "^6.18.1", - "@vue/compiler-sfc": "^3.4.10", + "@typescript-eslint/eslint-plugin": "^6.19.1", + "@typescript-eslint/parser": "^6.19.1", + "@vue/compiler-sfc": "^3.4.15", "@vue/eslint-config-typescript": "12.0.0", "chai": "^5.0.0", "del": "7.1.0", - "esbuild": "^0.19.11", + "esbuild": "^0.19.12", "esbuild-ifdef": "^0.2.0", "esbuild-plugin-vue-next": "npm:@wfrog/esbuild-plugin-vue-next@^0.1.5", "esbuild-sass-plugin": "^2.16.1", @@ -60,7 +60,7 @@ "eslint-plugin-local-rules": "^2.0.1", "eslint-plugin-mocha": "^10.2.0", "eslint-plugin-typescript-compat": "^1.0.2", - "eslint-plugin-vue": "^9.20.0", + "eslint-plugin-vue": "^9.20.1", "fancy-log": "^2.0.0", "global-jsdom": "^9.2.0", "gulp": "^4.0.2", @@ -74,7 +74,7 @@ "gulp-if": "^3.0.0", "gulp-load-plugins": "^2.0.8", "gulp-newer": "^1.4.0", - "gulp-postcss": "^9.0.1", + "gulp-postcss": "^9.1.0", "gulp-purgecss": "5.0.0", "gulp-replace": "^1.1.4", "gulp-sass": "^5.1.0", @@ -84,7 +84,7 @@ "gulp-workbox": "^1.0.6", "http-server": "^14.1.1", "inquirer": "^9.2.12", - "jsdom": "^23.2.0", + "jsdom": "^24.0.0", "lazypipe": "^1.0.2", "marked": "^11.1.1", "mocha": "^10.2.0", @@ -95,8 +95,8 @@ "postcss-preset-env": "^9.3.0", "require-dir": "^1.2.0", "resolve": "^1.22.8", - "sass": "^1.69.7", - "stylelint": "^16.1.0", + "sass": "^1.70.0", + "stylelint": "^16.2.0", "stylelint-config-clean-order": "^5.4.0", "stylelint-config-recommended-vue": "^1.5.0", "stylelint-config-standard-scss": "^13.0.0", @@ -107,7 +107,7 @@ "ttf2woff2": "^5.0.0", "typescript": "5.3.3", "vinyl-ftp": "^0.6.1", - "vue-eslint-parser": "^9.4.0", + "vue-eslint-parser": "^9.4.2", "workbox-build": "^7.0.0", "yargs": "^17.7.2" }, @@ -130,7 +130,7 @@ "idb-keyval": "^6.2.1", "jszip": "^3.10.1", "lzma": "^2.3.2", - "vue": "^3.4.10", + "vue": "^3.4.15", "vue-i18n": "^9.9.0", "vue-slicksort": "^2.0.5", "workbox-broadcast-update": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ff244397..0932e2aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,14 +67,14 @@ dependencies: specifier: ^2.3.2 version: 2.3.2 vue: - specifier: ^3.4.10 - version: 3.4.10(typescript@5.3.3) + specifier: ^3.4.15 + version: 3.4.15(typescript@5.3.3) vue-i18n: specifier: ^9.9.0 - version: 9.9.0(vue@3.4.10) + version: 9.9.0(vue@3.4.15) vue-slicksort: specifier: ^2.0.5 - version: 2.0.5(vue@3.4.10) + version: 2.0.5(vue@3.4.15) workbox-broadcast-update: specifier: ^7.0.0 version: 7.0.0 @@ -97,16 +97,16 @@ devDependencies: version: 2.1.2 '@intlify/vue-i18n-extensions': specifier: ^5.0.1 - version: 5.0.1(vue-i18n@9.9.0)(vue@3.4.10) + version: 5.0.1(vue-i18n@9.9.0)(vue@3.4.15) '@makeomatic/gulp-wrap-js': specifier: ^1.0.2 version: 1.0.2 '@stylistic/eslint-plugin': - specifier: ^1.5.3 - version: 1.5.3(eslint@8.56.0)(typescript@5.3.3) + specifier: ^1.5.4 + version: 1.5.4(eslint@8.56.0)(typescript@5.3.3) '@swc/core': - specifier: ^1.3.102 - version: 1.3.102 + specifier: ^1.3.105 + version: 1.3.105 '@types/bootstrap': specifier: ^5.2.10 version: 5.2.10 @@ -126,23 +126,23 @@ devDependencies: specifier: ^10.0.6 version: 10.0.6 '@types/node': - specifier: ^20.11.0 - version: 20.11.0 + specifier: ^20.11.5 + version: 20.11.5 '@types/wicg-file-system-access': specifier: ^2023.10.4 version: 2023.10.4 '@typescript-eslint/eslint-plugin': - specifier: ^6.18.1 - version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) + specifier: ^6.19.1 + version: 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: ^6.18.1 - version: 6.18.1(eslint@8.56.0)(typescript@5.3.3) + specifier: ^6.19.1 + version: 6.19.1(eslint@8.56.0)(typescript@5.3.3) '@vue/compiler-sfc': - specifier: ^3.4.10 - version: 3.4.10 + specifier: ^3.4.15 + version: 3.4.15 '@vue/eslint-config-typescript': specifier: 12.0.0 - version: 12.0.0(eslint-plugin-vue@9.20.0)(eslint@8.56.0)(typescript@5.3.3) + version: 12.0.0(eslint-plugin-vue@9.20.1)(eslint@8.56.0)(typescript@5.3.3) chai: specifier: ^5.0.0 version: 5.0.0 @@ -150,23 +150,23 @@ devDependencies: specifier: 7.1.0 version: 7.1.0 esbuild: - specifier: ^0.19.11 - version: 0.19.11 + specifier: ^0.19.12 + version: 0.19.12 esbuild-ifdef: specifier: ^0.2.0 - version: 0.2.0(esbuild@0.19.11) + version: 0.2.0(esbuild@0.19.12) esbuild-plugin-vue-next: specifier: npm:@wfrog/esbuild-plugin-vue-next@^0.1.5 - version: /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.10) + version: /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.15) esbuild-sass-plugin: specifier: ^2.16.1 - version: 2.16.1(esbuild@0.19.11) + version: 2.16.1(esbuild@0.19.12) eslint: specifier: ^8.56.0 version: 8.56.0 eslint-import-resolver-typescript: specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + version: 3.6.1(@typescript-eslint/parser@6.19.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) eslint-plugin-compat: specifier: ^4.2.0 version: 4.2.0(eslint@8.56.0) @@ -175,7 +175,7 @@ devDependencies: version: 7.1.0 eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + version: 2.29.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-jsdoc: specifier: ^48.0.2 version: 48.0.2(eslint@8.56.0) @@ -189,14 +189,14 @@ devDependencies: specifier: ^1.0.2 version: 1.0.2(eslint@8.56.0)(typescript@5.3.3) eslint-plugin-vue: - specifier: ^9.20.0 - version: 9.20.0(eslint@8.56.0) + specifier: ^9.20.1 + version: 9.20.1(eslint@8.56.0) fancy-log: specifier: ^2.0.0 version: 2.0.0 global-jsdom: specifier: ^9.2.0 - version: 9.2.0(jsdom@23.2.0) + version: 9.2.0(jsdom@24.0.0) gulp: specifier: ^4.0.2 version: 4.0.2 @@ -231,8 +231,8 @@ devDependencies: specifier: ^1.4.0 version: 1.4.0 gulp-postcss: - specifier: ^9.0.1 - version: 9.0.1(postcss@8.4.33)(ts-node@10.9.2) + specifier: ^9.1.0 + version: 9.1.0(postcss@8.4.33) gulp-purgecss: specifier: 5.0.0 version: 5.0.0 @@ -250,7 +250,7 @@ devDependencies: version: 1.0.1 gulp-vue-ssg: specifier: ^1.2.2 - version: 1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.10) + version: 1.2.2(esbuild@0.19.12)(gulp@4.0.2)(vue@3.4.15) gulp-workbox: specifier: ^1.0.6 version: 1.0.6(workbox-build@7.0.0) @@ -261,8 +261,8 @@ devDependencies: specifier: ^9.2.12 version: 9.2.12 jsdom: - specifier: ^23.2.0 - version: 23.2.0 + specifier: ^24.0.0 + version: 24.0.0 lazypipe: specifier: ^1.0.2 version: 1.0.2 @@ -294,29 +294,29 @@ devDependencies: specifier: ^1.22.8 version: 1.22.8 sass: - specifier: ^1.69.7 - version: 1.69.7 + specifier: ^1.70.0 + version: 1.70.0 stylelint: - specifier: ^16.1.0 - version: 16.1.0(typescript@5.3.3) + specifier: ^16.2.0 + version: 16.2.0(typescript@5.3.3) stylelint-config-clean-order: specifier: ^5.4.0 - version: 5.4.0(stylelint@16.1.0) + version: 5.4.0(stylelint@16.2.0) stylelint-config-recommended-vue: specifier: ^1.5.0 - version: 1.5.0(postcss-html@1.6.0)(stylelint@16.1.0) + version: 1.5.0(postcss-html@1.6.0)(stylelint@16.2.0) stylelint-config-standard-scss: specifier: ^13.0.0 - version: 13.0.0(postcss@8.4.33)(stylelint@16.1.0) + version: 13.0.0(postcss@8.4.33)(stylelint@16.2.0) stylelint-no-unsupported-browser-features: specifier: ^8.0.0 - version: 8.0.0(stylelint@16.1.0) + version: 8.0.0(stylelint@16.2.0) through2: specifier: ^4.0.2 version: 4.0.2 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.3.102)(@types/node@20.11.0)(typescript@5.3.3) + version: 10.9.2(@swc/core@1.3.105)(@types/node@20.11.5)(typescript@5.3.3) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 @@ -330,8 +330,8 @@ devDependencies: specifier: ^0.6.1 version: 0.6.1 vue-eslint-parser: - specifier: ^9.4.0 - version: 9.4.0(eslint@8.56.0) + specifier: ^9.4.2 + version: 9.4.2(eslint@8.56.0) workbox-build: specifier: ^7.0.0 version: 7.0.0 @@ -351,7 +351,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 dev: true /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): @@ -366,14 +366,6 @@ packages: leven: 3.1.0 dev: true - /@asamuzakjp/dom-selector@2.0.1: - resolution: {integrity: sha512-QJAJffmCiymkv6YyQ7voyQb5caCth6jzZsQncYCpHXrJ7RqdYG5y43+is8mnFcYubdOkr7cn1+na9BdFMxqw7w==} - dependencies: - bidi-js: 1.0.3 - css-tree: 2.3.1 - is-potential-custom-element-name: 1.0.1 - dev: true - /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} @@ -416,7 +408,7 @@ packages: dependencies: '@babel/types': 7.23.6 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 jsesc: 2.5.2 dev: true @@ -490,6 +482,21 @@ packages: - supports-color dev: true + /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.23.7): + resolution: {integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} @@ -1469,10 +1476,10 @@ packages: '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7) - babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.7) + babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.7) babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) - babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.7) - core-js-compat: 3.35.0 + babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.7) + core-js-compat: 3.35.1 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -1934,8 +1941,8 @@ packages: jsdoc-type-pratt-parser: 4.0.0 dev: true - /@esbuild/aix-ppc64@0.19.11: - resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} + /@esbuild/aix-ppc64@0.19.12: + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] @@ -1943,8 +1950,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.11: - resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} + /@esbuild/android-arm64@0.19.12: + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -1952,8 +1959,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.11: - resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} + /@esbuild/android-arm@0.19.12: + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -1961,8 +1968,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.11: - resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} + /@esbuild/android-x64@0.19.12: + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -1970,8 +1977,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.11: - resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} + /@esbuild/darwin-arm64@0.19.12: + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -1979,8 +1986,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.11: - resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} + /@esbuild/darwin-x64@0.19.12: + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -1988,8 +1995,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.11: - resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} + /@esbuild/freebsd-arm64@0.19.12: + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -1997,8 +2004,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.11: - resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} + /@esbuild/freebsd-x64@0.19.12: + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -2006,8 +2013,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.11: - resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} + /@esbuild/linux-arm64@0.19.12: + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -2015,8 +2022,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.11: - resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} + /@esbuild/linux-arm@0.19.12: + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -2024,8 +2031,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.11: - resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} + /@esbuild/linux-ia32@0.19.12: + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -2033,8 +2040,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.11: - resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} + /@esbuild/linux-loong64@0.19.12: + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -2042,8 +2049,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.11: - resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} + /@esbuild/linux-mips64el@0.19.12: + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -2051,8 +2058,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.11: - resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} + /@esbuild/linux-ppc64@0.19.12: + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -2060,8 +2067,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.11: - resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} + /@esbuild/linux-riscv64@0.19.12: + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -2069,8 +2076,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.11: - resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} + /@esbuild/linux-s390x@0.19.12: + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -2078,8 +2085,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.11: - resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} + /@esbuild/linux-x64@0.19.12: + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -2087,8 +2094,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.11: - resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -2096,8 +2103,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.11: - resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} + /@esbuild/openbsd-x64@0.19.12: + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -2105,8 +2112,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.11: - resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} + /@esbuild/sunos-x64@0.19.12: + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -2114,8 +2121,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.11: - resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} + /@esbuild/win32-arm64@0.19.12: + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -2123,8 +2130,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.11: - resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} + /@esbuild/win32-ia32@0.19.12: + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -2132,8 +2139,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.11: - resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} + /@esbuild/win32-x64@0.19.12: + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -2225,7 +2232,7 @@ packages: resolution: {integrity: sha512-1ECUyAHRrzOJbOizyGufYP2yukqGrWXtkmTu4PcswVnWbkcjzk3YQGmJ0bLkM7JZ0ZYAaohLGdYvBYnTOGYJ9g==} engines: {node: '>= 16'} - /@intlify/vue-i18n-extensions@5.0.1(vue-i18n@9.9.0)(vue@3.4.10): + /@intlify/vue-i18n-extensions@5.0.1(vue-i18n@9.9.0)(vue@3.4.15): resolution: {integrity: sha512-bS07jIt9nFXfUUpQLqdog7O1Gi8rSCgTyEzabiho5nrrVFmaIbDRr7LSNBPA8fakPdAuY8V1lJa6xmkI33+n8w==} engines: {node: '>= 14.18'} peerDependencies: @@ -2234,9 +2241,9 @@ packages: dependencies: '@babel/parser': 7.23.6 '@intlify/shared': 9.9.0 - '@vue/compiler-dom': 3.4.10 - vue: 3.4.10(typescript@5.3.3) - vue-i18n: 9.9.0(vue@3.4.10) + '@vue/compiler-dom': 3.4.15 + vue: 3.4.15(typescript@5.3.3) + vue-i18n: 9.9.0(vue@3.4.15) dev: true /@isaacs/cliui@8.0.2: @@ -2273,7 +2280,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 dev: true /@jridgewell/resolve-uri@3.1.1: @@ -2290,14 +2297,14 @@ packages: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + /@jridgewell/trace-mapping@0.3.22: + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 @@ -2331,8 +2338,8 @@ packages: vinyl-sourcemaps-apply: 0.2.1 dev: true - /@mdn/browser-compat-data@5.5.5: - resolution: {integrity: sha512-gYj8JhdT7qvc7Baq4KxFDu7TJUywiOvml3D8qZsIkhxkiVfeT11ZczLBAuEPZ05neE9wPAVxHOFws45OEGU99w==} + /@mdn/browser-compat-data@5.5.7: + resolution: {integrity: sha512-DoHTZ/TjtNfUu9eiqJd+x3IcCQrhS+yOYU436TKUnlE36jZwNbK535D1CmTsSYdi/UcdCWNm5KRQZ9g1tlZCPw==} dev: true /@nodelib/fs.scandir@2.1.5: @@ -2584,8 +2591,8 @@ packages: rollup: 2.79.1 dev: true - /@stylistic/eslint-plugin-js@1.5.3(eslint@8.56.0): - resolution: {integrity: sha512-XlKnm82fD7Sw9kQ6FFigE0tobvptNBXZWsdfoKmUyK7bNxHsAHOFT8zJGY3j3MjZ0Fe7rLTu86hX/vOl0bRRdQ==} + /@stylistic/eslint-plugin-js@1.5.4(eslint@8.56.0): + resolution: {integrity: sha512-3ctWb3NvJNV1MsrZN91cYp2EGInLPSoZKphXIbIRx/zjZxKwLDr9z4LMOWtqjq14li/OgqUUcMq5pj8fgbLoTw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' @@ -2597,53 +2604,53 @@ packages: espree: 9.6.1 dev: true - /@stylistic/eslint-plugin-jsx@1.5.3(eslint@8.56.0): - resolution: {integrity: sha512-gKXWFmvg3B4e6G+bVz2p37icjj3gS5lzazZD6oLjmQ2b0Lw527VpnxGjWxQ16keKXtrVzUfebakjskOoALg3CQ==} + /@stylistic/eslint-plugin-jsx@1.5.4(eslint@8.56.0): + resolution: {integrity: sha512-JUfrpCkeBCqt1IZ4QsP4WgxGza4PhK4LPbc0VnCjHKygl+rgqoDAovqOuzFJ49wJ4Ix3r6OIHFuwiBGswZEVvg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.5.3(eslint@8.56.0) + '@stylistic/eslint-plugin-js': 1.5.4(eslint@8.56.0) eslint: 8.56.0 estraverse: 5.3.0 dev: true - /@stylistic/eslint-plugin-plus@1.5.3(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-fuOBySbH4dbfY4Dwvu+zg5y+e0lALHTyQske5+a2zNC8Ejnx4rFlVjYOmaVFtxFhTD4V0vM7o21Ozci0igcxKg==} + /@stylistic/eslint-plugin-plus@1.5.4(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-dI0Cs5vYX/0uMhQDY+NK0cKQ0Pe9B6jWYxd0Ndud+mNloDaVLrsmJocK4zn+YfhGEDs1E4Nk5uAPZEumIpDuSg==} peerDependencies: eslint: '*' dependencies: - '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@stylistic/eslint-plugin-ts@1.5.3(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-/gUEqGo0gpFeu220YmC0788VliKnmTaAz4pI82KA5cUuCp6OzEhGlrNkb1eevMwH0RRgyND20HJxOYvEGlwu+w==} + /@stylistic/eslint-plugin-ts@1.5.4(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-NZDFVIlVNjuPvhT+0Cidm5IS3emtx338xbJTqs2xfOVRDGTpYwRHhNVEGa1rFOpYHmv0sAj6+OXbMDn7ul0K/g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.5.3(eslint@8.56.0) - '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@stylistic/eslint-plugin-js': 1.5.4(eslint@8.56.0) + '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@stylistic/eslint-plugin@1.5.3(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-Vee+hHKaCd8DPRoRJTCV+mOFz+zFIaA9QiNJaAvgBzmPkcDnSC7Ewh518fN6SSNe9psS8TDIpcxd1g5v4MSY5A==} + /@stylistic/eslint-plugin@1.5.4(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-zWPXr+O67GC9KDAFkbL1U9UVqE6Iv69YMKhkIECCmE0GvClUJwdfsimm4XebEDondV7kfjMrTDZaYfrI5aS0Jg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.5.3(eslint@8.56.0) - '@stylistic/eslint-plugin-jsx': 1.5.3(eslint@8.56.0) - '@stylistic/eslint-plugin-plus': 1.5.3(eslint@8.56.0)(typescript@5.3.3) - '@stylistic/eslint-plugin-ts': 1.5.3(eslint@8.56.0)(typescript@5.3.3) + '@stylistic/eslint-plugin-js': 1.5.4(eslint@8.56.0) + '@stylistic/eslint-plugin-jsx': 1.5.4(eslint@8.56.0) + '@stylistic/eslint-plugin-plus': 1.5.4(eslint@8.56.0)(typescript@5.3.3) + '@stylistic/eslint-plugin-ts': 1.5.4(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 transitivePeerDependencies: - supports-color @@ -2659,8 +2666,8 @@ packages: string.prototype.matchall: 4.0.10 dev: true - /@swc/core-darwin-arm64@1.3.102: - resolution: {integrity: sha512-CJDxA5Wd2cUMULj3bjx4GEoiYyyiyL8oIOu4Nhrs9X+tlg8DnkCm4nI57RJGP8Mf6BaXPIJkHX8yjcefK2RlDA==} + /@swc/core-darwin-arm64@1.3.105: + resolution: {integrity: sha512-buWeweLVDXXmcnfIemH4PGnpjwsDTUGitnPchdftb0u1FU8zSSP/lw/pUCBDG/XvWAp7c/aFxgN4CyG0j7eayA==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -2668,8 +2675,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.3.102: - resolution: {integrity: sha512-X5akDkHwk6oAer49oER0qZMjNMkLH3IOZaV1m98uXIasAGyjo5WH1MKPeMLY1sY6V6TrufzwiSwD4ds571ytcg==} + /@swc/core-darwin-x64@1.3.105: + resolution: {integrity: sha512-hFmXPApqjA/8sy/9NpljHVaKi1OvL9QkJ2MbbTCCbJERuHMpMUeMBUWipHRfepGHFhU+9B9zkEup/qJaJR4XIg==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -2677,8 +2684,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.102: - resolution: {integrity: sha512-kJH3XtZP9YQdjq/wYVBeFuiVQl4HaC4WwRrIxAHwe2OyvrwUI43dpW3LpxSggBnxXcVCXYWf36sTnv8S75o2Gw==} + /@swc/core-linux-arm-gnueabihf@1.3.105: + resolution: {integrity: sha512-mwXyMC41oMKkKrPpL8uJpOxw7fyfQoVtIw3Y5p0Blabk+espNYqix0E8VymHdRKuLmM//z5wVmMsuHdGBHvZeg==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -2686,8 +2693,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.3.102: - resolution: {integrity: sha512-flQP2WDyCgO24WmKA1wjjTx+xfCmavUete2Kp6yrM+631IHLGnr17eu7rYJ/d4EnDBId/ytMyrnWbTVkaVrpbQ==} + /@swc/core-linux-arm64-gnu@1.3.105: + resolution: {integrity: sha512-H7yEIVydnUtqBSUxwmO6vpIQn7j+Rr0DF6ZOORPyd/SFzQJK9cJRtmJQ3ZMzlJ1Bb+1gr3MvjgLEnmyCYEm2Hg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -2695,8 +2702,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.3.102: - resolution: {integrity: sha512-bQEQSnC44DyoIGLw1+fNXKVGoCHi7eJOHr8BdH0y1ooy9ArskMjwobBFae3GX4T1AfnrTaejyr0FvLYIb0Zkog==} + /@swc/core-linux-arm64-musl@1.3.105: + resolution: {integrity: sha512-Jg7RTFT3pGFdGt5elPV6oDkinRy7q9cXpenjXnJnM2uvx3jOwnsAhexPyCDHom8SHL0j+9kaLLC66T3Gz1E4UA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -2704,8 +2711,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.3.102: - resolution: {integrity: sha512-dFvnhpI478svQSxqISMt00MKTDS0e4YtIr+ioZDG/uJ/q+RpcNy3QI2KMm05Fsc8Y0d4krVtvCKWgfUMsJZXAg==} + /@swc/core-linux-x64-gnu@1.3.105: + resolution: {integrity: sha512-DJghplpyusAmp1X5pW/y93MmS/u83Sx5GrpJxI6KLPa82+NItTgMcl8KBQmW5GYAJpVKZyaIvBanS5TdR8aN2w==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -2713,8 +2720,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.3.102: - resolution: {integrity: sha512-+a0M3CvjeIRNA/jTCzWEDh2V+mhKGvLreHOL7J97oULZy5yg4gf7h8lQX9J8t9QLbf6fsk+0F8bVH1Ie/PbXjA==} + /@swc/core-linux-x64-musl@1.3.105: + resolution: {integrity: sha512-wD5jL2dZH/5nPNssBo6jhOvkI0lmWnVR4vnOXWjuXgjq1S0AJpO5jdre/6pYLmf26hft3M42bteDnjR4AAZ38w==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -2722,8 +2729,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.3.102: - resolution: {integrity: sha512-w76JWLjkZNOfkB25nqdWUNCbt0zJ41CnWrJPZ+LxEai3zAnb2YtgB/cCIrwxDebRuMgE9EJXRj7gDDaTEAMOOQ==} + /@swc/core-win32-arm64-msvc@1.3.105: + resolution: {integrity: sha512-UqJtwILUHRw2+3UTPnRkZrzM/bGdQtbR4UFdp79mZQYfryeOUVNg7aJj/bWUTkKtLiZ3o+FBNrM/x2X1mJX5bA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -2731,8 +2738,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.3.102: - resolution: {integrity: sha512-vlDb09HiGqKwz+2cxDS9T5/461ipUQBplvuhW+cCbzzGuPq8lll2xeyZU0N1E4Sz3MVdSPx1tJREuRvlQjrwNg==} + /@swc/core-win32-ia32-msvc@1.3.105: + resolution: {integrity: sha512-Z95C6vZgBEJ1snidYyjVKnVWiy/ZpPiIFIXGWkDr4ZyBgL3eZX12M6LzZ+NApHKffrbO4enbFyFomueBQgS2oA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -2740,8 +2747,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.3.102: - resolution: {integrity: sha512-E/jfSD7sShllxBwwgDPeXp1UxvIqehj/ShSUqq1pjR/IDRXngcRSXKJK92mJkNFY7suH6BcCWwzrxZgkO7sWmw==} + /@swc/core-win32-x64-msvc@1.3.105: + resolution: {integrity: sha512-3J8fkyDPFsS3mszuYUY4Wfk7/B2oio9qXUwF3DzOs2MK+XgdyMLIptIxL7gdfitXJBH8k39uVjrIw1JGJDjyFA==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -2749,8 +2756,8 @@ packages: dev: true optional: true - /@swc/core@1.3.102: - resolution: {integrity: sha512-OAjNLY/f6QWKSDzaM3bk31A+OYHu6cPa9P/rFIx8X5d24tHXUpRiiq6/PYI6SQRjUPlB72GjsjoEU8F+ALadHg==} + /@swc/core@1.3.105: + resolution: {integrity: sha512-me2VZyr3OjqRpFrYQJJYy7x/zbFSl9nt+MAGnIcBtjDsN00iTVqEaKxBjPBFQV9BDAgPz2SRWes/DhhVm5SmMw==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -2762,16 +2769,16 @@ packages: '@swc/counter': 0.1.2 '@swc/types': 0.1.5 optionalDependencies: - '@swc/core-darwin-arm64': 1.3.102 - '@swc/core-darwin-x64': 1.3.102 - '@swc/core-linux-arm-gnueabihf': 1.3.102 - '@swc/core-linux-arm64-gnu': 1.3.102 - '@swc/core-linux-arm64-musl': 1.3.102 - '@swc/core-linux-x64-gnu': 1.3.102 - '@swc/core-linux-x64-musl': 1.3.102 - '@swc/core-win32-arm64-msvc': 1.3.102 - '@swc/core-win32-ia32-msvc': 1.3.102 - '@swc/core-win32-x64-msvc': 1.3.102 + '@swc/core-darwin-arm64': 1.3.105 + '@swc/core-darwin-x64': 1.3.105 + '@swc/core-linux-arm-gnueabihf': 1.3.105 + '@swc/core-linux-arm64-gnu': 1.3.105 + '@swc/core-linux-arm64-musl': 1.3.105 + '@swc/core-linux-x64-gnu': 1.3.105 + '@swc/core-linux-x64-musl': 1.3.105 + '@swc/core-win32-arm64-msvc': 1.3.105 + '@swc/core-win32-ia32-msvc': 1.3.105 + '@swc/core-win32-x64-msvc': 1.3.105 dev: true /@swc/counter@0.1.2: @@ -2827,7 +2834,7 @@ packages: /@types/glob-stream@8.0.2: resolution: {integrity: sha512-kyuRfGE+yiSJWzSO3t74rXxdZNdYfLcllO0IUha4eX1fl40pm9L02Q/TEc3mykTLjoWz4STBNwYnUWdFu3I0DA==} dependencies: - '@types/node': 20.11.0 + '@types/node': 20.11.5 '@types/picomatch': 2.3.3 '@types/streamx': 2.9.5 dev: true @@ -2839,13 +2846,13 @@ packages: /@types/gulp-load-plugins@0.0.37: resolution: {integrity: sha512-gmQpE77bVR5bbT7xUltn3eXQ+EEa0D3aplJHeZhnefOvPxm3cEjfJTa8UMnkVpAmi6b465vmmQqkIpDM/5H+HA==} dependencies: - '@types/node': 20.11.0 + '@types/node': 20.11.5 dev: true /@types/gulp@4.0.17: resolution: {integrity: sha512-+pKQynu2C/HS16kgmDlAicjtFYP8kaa86eE9P0Ae7GB5W29we/E2TIdbOWtEZD5XkpY+jr8fyqfwO6SWZecLpQ==} dependencies: - '@types/node': 20.11.0 + '@types/node': 20.11.5 '@types/undertaker': 1.2.11 '@types/vinyl-fs': 3.0.5 chokidar: 3.5.3 @@ -2867,8 +2874,8 @@ packages: resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} dev: true - /@types/node@20.11.0: - resolution: {integrity: sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==} + /@types/node@20.11.5: + resolution: {integrity: sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==} dependencies: undici-types: 5.26.5 dev: true @@ -2884,7 +2891,7 @@ packages: /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 20.11.0 + '@types/node': 20.11.5 dev: true /@types/semver@7.5.6: @@ -2894,7 +2901,7 @@ packages: /@types/streamx@2.9.5: resolution: {integrity: sha512-IHYsa6jYrck8VEdSwpY141FTTf6D7boPeMq9jy4qazNrFMA4VbRz/sw5LSsfR7jwdDcx0QKWkUexZvsWBC2eIQ==} dependencies: - '@types/node': 20.11.0 + '@types/node': 20.11.5 dev: true /@types/trusted-types@2.0.7: @@ -2908,7 +2915,7 @@ packages: /@types/undertaker@1.2.11: resolution: {integrity: sha512-j1Z0V2ByRHr8ZK7eOeGq0LGkkdthNFW0uAZGY22iRkNQNL9/vAV0yFPr1QN3FM/peY5bxs9P+1f0PYJTQVa5iA==} dependencies: - '@types/node': 20.11.0 + '@types/node': 20.11.5 '@types/undertaker-registry': 1.0.4 async-done: 1.3.2 dev: true @@ -2917,7 +2924,7 @@ packages: resolution: {integrity: sha512-ckYz9giHgV6U10RFuf9WsDQ3X86EFougapxHmmoxLK7e6ICQqO8CE+4V/3lBN148V5N1pb4nQMmMjyScleVsig==} dependencies: '@types/glob-stream': 8.0.2 - '@types/node': 20.11.0 + '@types/node': 20.11.5 '@types/vinyl': 2.0.11 dev: true @@ -2925,15 +2932,15 @@ packages: resolution: {integrity: sha512-vPXzCLmRp74e9LsP8oltnWKTH+jBwt86WgRUb4Pc9Lf3pkMVGyvIo2gm9bODeGfCay2DBB/hAWDuvf07JcK4rw==} dependencies: '@types/expect': 1.20.4 - '@types/node': 20.11.0 + '@types/node': 20.11.5 dev: true /@types/wicg-file-system-access@2023.10.4: resolution: {integrity: sha512-ewOj7hWhsUTS2+aY6zY+7BwlgqGBj5ZXxKuHt3TAWpIJH0bDW/6bO1N1SdUDAzV8r0Nc+/ZtpAEETYTwrehBMw==} dev: true - /@typescript-eslint/eslint-plugin@6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==} + /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2944,11 +2951,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.18.1 - '@typescript-eslint/type-utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.18.1 + '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.19.1 + '@typescript-eslint/type-utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.19.1 debug: 4.3.4(supports-color@8.1.1) eslint: 8.56.0 graphemer: 1.4.0 @@ -2974,8 +2981,8 @@ packages: - typescript dev: true - /@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==} + /@typescript-eslint/parser@6.19.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2984,10 +2991,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.18.1 - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.18.1 + '@typescript-eslint/scope-manager': 6.19.1 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.19.1 debug: 4.3.4(supports-color@8.1.1) eslint: 8.56.0 typescript: 5.3.3 @@ -3003,16 +3010,16 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/scope-manager@6.18.1: - resolution: {integrity: sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==} + /@typescript-eslint/scope-manager@6.19.1: + resolution: {integrity: sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/visitor-keys': 6.18.1 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/visitor-keys': 6.19.1 dev: true - /@typescript-eslint/type-utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==} + /@typescript-eslint/type-utils@6.19.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -3021,8 +3028,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) - '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) + '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4(supports-color@8.1.1) eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) @@ -3036,8 +3043,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@6.18.1: - resolution: {integrity: sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==} + /@typescript-eslint/types@6.19.1: + resolution: {integrity: sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true @@ -3062,8 +3069,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.18.1(typescript@5.3.3): - resolution: {integrity: sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==} + /@typescript-eslint/typescript-estree@6.19.1(typescript@5.3.3): + resolution: {integrity: sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -3071,8 +3078,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/visitor-keys': 6.18.1 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/visitor-keys': 6.19.1 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -3104,8 +3111,8 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==} + /@typescript-eslint/utils@6.19.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -3113,9 +3120,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.18.1 - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.19.1 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: @@ -3131,11 +3138,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@6.18.1: - resolution: {integrity: sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==} + /@typescript-eslint/visitor-keys@6.19.1: + resolution: {integrity: sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/types': 6.19.1 eslint-visitor-keys: 3.4.3 dev: true @@ -3143,44 +3150,44 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vue/compiler-core@3.4.10: - resolution: {integrity: sha512-53vxh7K9qbx+JILnGEhrFRyr7H7e4NdT8RuTNU3m6HhJKFvcAqFTNXpYMHnyuAzzRGdsbsYHBgQC3H6xEXTG6w==} + /@vue/compiler-core@3.4.15: + resolution: {integrity: sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==} dependencies: '@babel/parser': 7.23.6 - '@vue/shared': 3.4.10 + '@vue/shared': 3.4.15 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.0.2 - /@vue/compiler-dom@3.4.10: - resolution: {integrity: sha512-QAALBJksIFpXGYuo74rtMgnwpVZDvd3kYbUa4gYX9s/5QiqEvZSgbKtOdUGydXcxKPt3ifC+0/bhPVHXN2694A==} + /@vue/compiler-dom@3.4.15: + resolution: {integrity: sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==} dependencies: - '@vue/compiler-core': 3.4.10 - '@vue/shared': 3.4.10 + '@vue/compiler-core': 3.4.15 + '@vue/shared': 3.4.15 - /@vue/compiler-sfc@3.4.10: - resolution: {integrity: sha512-sTOssaQySgrMjrhZxmAqdp6n+E51VteIVIDaOR537H2P63DyzMmig21U0XXFxiXmMIfrK91lAInnc+bIAYemGw==} + /@vue/compiler-sfc@3.4.15: + resolution: {integrity: sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA==} dependencies: '@babel/parser': 7.23.6 - '@vue/compiler-core': 3.4.10 - '@vue/compiler-dom': 3.4.10 - '@vue/compiler-ssr': 3.4.10 - '@vue/shared': 3.4.10 + '@vue/compiler-core': 3.4.15 + '@vue/compiler-dom': 3.4.15 + '@vue/compiler-ssr': 3.4.15 + '@vue/shared': 3.4.15 estree-walker: 2.0.2 magic-string: 0.27.0 postcss: 8.4.33 source-map-js: 1.0.2 - /@vue/compiler-ssr@3.4.10: - resolution: {integrity: sha512-Y90TL1abretWbUiK5rv+9smS1thCHE5sSuhZgiLh6cxgZ2Pcy3BEvDd3reID0iwNcTdMbTeE6NI3Aq4Mux6hqQ==} + /@vue/compiler-ssr@3.4.15: + resolution: {integrity: sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw==} dependencies: - '@vue/compiler-dom': 3.4.10 - '@vue/shared': 3.4.10 + '@vue/compiler-dom': 3.4.15 + '@vue/shared': 3.4.15 /@vue/devtools-api@6.5.1: resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} - /@vue/eslint-config-typescript@12.0.0(eslint-plugin-vue@9.20.0)(eslint@8.56.0)(typescript@5.3.3): + /@vue/eslint-config-typescript@12.0.0(eslint-plugin-vue@9.20.1)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: @@ -3191,52 +3198,52 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 - eslint-plugin-vue: 9.20.0(eslint@8.56.0) + eslint-plugin-vue: 9.20.1(eslint@8.56.0) typescript: 5.3.3 - vue-eslint-parser: 9.4.0(eslint@8.56.0) + vue-eslint-parser: 9.4.2(eslint@8.56.0) transitivePeerDependencies: - supports-color dev: true - /@vue/reactivity@3.4.10: - resolution: {integrity: sha512-SmGGpo37LzPcAFTopHNIJRNVOQfma9YgyPkAzx9/TJ01lbCCYigS28hEcY1hjiJ1PRK8iVX62Ov5yzmUgYH/pQ==} + /@vue/reactivity@3.4.15: + resolution: {integrity: sha512-55yJh2bsff20K5O84MxSvXKPHHt17I2EomHznvFiJCAZpJTNW8IuLj1xZWMLELRhBK3kkFV/1ErZGHJfah7i7w==} dependencies: - '@vue/shared': 3.4.10 + '@vue/shared': 3.4.15 - /@vue/runtime-core@3.4.10: - resolution: {integrity: sha512-Ri2Cz9sFr66AEUewGUK8IXhIUAhshTHVUGuJR8pqMbtjIds+zPa8QPO5UZImGMQ8HTY7eEpKwztCct9V3+Iqug==} + /@vue/runtime-core@3.4.15: + resolution: {integrity: sha512-6E3by5m6v1AkW0McCeAyhHTw+3y17YCOKG0U0HDKDscV4Hs0kgNT5G+GCHak16jKgcCDHpI9xe5NKb8sdLCLdw==} dependencies: - '@vue/reactivity': 3.4.10 - '@vue/shared': 3.4.10 + '@vue/reactivity': 3.4.15 + '@vue/shared': 3.4.15 - /@vue/runtime-dom@3.4.10: - resolution: {integrity: sha512-ROsdi5M2niRDmjXJNZ8KKiGwXyG1FO8l9n6sCN0kaJEHbjWkuigu96YAI3fK/AWUZPSXXEcMEBVPC6rL3mmUuA==} + /@vue/runtime-dom@3.4.15: + resolution: {integrity: sha512-EVW8D6vfFVq3V/yDKNPBFkZKGMFSvZrUQmx196o/v2tHKdwWdiZjYUBS+0Ez3+ohRyF8Njwy/6FH5gYJ75liUw==} dependencies: - '@vue/runtime-core': 3.4.10 - '@vue/shared': 3.4.10 + '@vue/runtime-core': 3.4.15 + '@vue/shared': 3.4.15 csstype: 3.1.3 - /@vue/server-renderer@3.4.10(vue@3.4.10): - resolution: {integrity: sha512-WpCBAhesLq44JKWfdFqb+Bi4ACUW0d8x1z90GnE0spccsAlEDMXV5nm+pwXLyW0OdP2iPrO/n/QMJh4B1v9Ciw==} + /@vue/server-renderer@3.4.15(vue@3.4.15): + resolution: {integrity: sha512-3HYzaidu9cHjrT+qGUuDhFYvF/j643bHC6uUN9BgM11DVy+pM6ATsG6uPBLnkwOgs7BpJABReLmpL3ZPAsUaqw==} peerDependencies: - vue: 3.4.10 + vue: 3.4.15 dependencies: - '@vue/compiler-ssr': 3.4.10 - '@vue/shared': 3.4.10 - vue: 3.4.10(typescript@5.3.3) + '@vue/compiler-ssr': 3.4.15 + '@vue/shared': 3.4.15 + vue: 3.4.15(typescript@5.3.3) - /@vue/shared@3.4.10: - resolution: {integrity: sha512-C0mIVhwW1xQLMFyqMJxnhq6fWyE02lCgcE+TDdtGpg6B3H6kh/0YcqS54qYc76UJNlWegf3VgsLqgk6D9hBmzQ==} + /@vue/shared@3.4.15: + resolution: {integrity: sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==} - /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.10): + /@wfrog/esbuild-plugin-vue-next@0.1.5(@vue/compiler-sfc@3.4.15): resolution: {integrity: sha512-Ip8ZVRlI2AP7IrG1UIzGLiSClBp50tWDGgukM1cBVejqMossQ226iwN3VKpNAyRHyFirwRnvhZM2KuMt/2BYow==} peerDependencies: '@vue/compiler-sfc': '>=3.0.0' dependencies: - '@vue/compiler-sfc': 3.4.10 + '@vue/compiler-sfc': 3.4.15 convert-source-map: 1.9.0 hash-sum: 2.0.0 dev: true @@ -3623,7 +3630,7 @@ packages: /ast-metadata-inferer@0.8.0: resolution: {integrity: sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==} dependencies: - '@mdn/browser-compat-data': 5.5.5 + '@mdn/browser-compat-data': 5.5.7 dev: true /astral-regex@2.0.0: @@ -3676,15 +3683,15 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /autoprefixer@10.4.16(postcss@8.4.33): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + /autoprefixer@10.4.17(postcss@8.4.33): + resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: browserslist: 4.22.2 - caniuse-lite: 1.0.30001576 + caniuse-lite: 1.0.30001579 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -3697,14 +3704,14 @@ packages: engines: {node: '>= 0.4'} dev: true - /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.7): - resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} + /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.7): + resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/compat-data': 7.23.5 '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.7) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -3717,18 +3724,18 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) - core-js-compat: 3.35.0 + core-js-compat: 3.35.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.7): - resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} + /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.23.7): + resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.7) transitivePeerDependencies: - supports-color dev: true @@ -3767,12 +3774,6 @@ packages: safe-buffer: 5.1.2 dev: true - /bidi-js@1.0.3: - resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} - dependencies: - require-from-string: 2.0.2 - dev: true - /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -3838,8 +3839,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001576 - electron-to-chromium: 1.4.628 + caniuse-lite: 1.0.30001579 + electron-to-chromium: 1.4.643 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -3905,7 +3906,7 @@ packages: dependencies: function-bind: 1.1.2 get-intrinsic: 1.2.2 - set-function-length: 1.1.1 + set-function-length: 1.2.0 /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -3934,8 +3935,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001576: - resolution: {integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==} + /caniuse-lite@1.0.30001579: + resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} dev: true /chai@5.0.0: @@ -4217,8 +4218,8 @@ packages: is-plain-object: 5.0.0 dev: true - /core-js-compat@3.35.0: - resolution: {integrity: sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==} + /core-js-compat@3.35.1: + resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==} dependencies: browserslist: 4.22.2 dev: true @@ -4510,7 +4511,7 @@ packages: hasBin: true dependencies: browserslist: 4.22.2 - caniuse-lite: 1.0.30001576 + caniuse-lite: 1.0.30001579 css-tokenize: 1.0.1 duplexify: 4.1.2 ldjson-stream: 1.2.1 @@ -4564,7 +4565,7 @@ packages: end-of-stream: 1.4.4 inherits: 2.0.4 readable-stream: 2.3.8 - stream-shift: 1.0.2 + stream-shift: 1.0.3 dev: true /duplexify@4.1.2: @@ -4573,7 +4574,7 @@ packages: end-of-stream: 1.4.4 inherits: 2.0.4 readable-stream: 3.6.2 - stream-shift: 1.0.2 + stream-shift: 1.0.3 dev: true /each-props@1.3.2: @@ -4599,8 +4600,8 @@ packages: jake: 10.8.7 dev: true - /electron-to-chromium@1.4.628: - resolution: {integrity: sha512-2k7t5PHvLsufpP6Zwk0nof62yLOsCf032wZx7/q0mv8gwlXjhcxI3lz6f0jBr0GrnWKcm3burXzI3t5IrcdUxw==} + /electron-to-chromium@1.4.643: + resolution: {integrity: sha512-QHscvvS7gt155PtoRC0dR2ilhL8E9LHhfTQEq1uD5AL0524rBLAwpAREFH06f87/e45B9XkR6Ki5dbhbCsVEIg==} dev: true /emoji-regex@8.0.0: @@ -4684,7 +4685,7 @@ packages: object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 + safe-array-concat: 1.1.0 safe-regex-test: 1.0.2 string.prototype.trim: 1.2.8 string.prototype.trimend: 1.0.7 @@ -4759,53 +4760,53 @@ packages: es6-symbol: 3.1.3 dev: true - /esbuild-ifdef@0.2.0(esbuild@0.19.11): + /esbuild-ifdef@0.2.0(esbuild@0.19.12): resolution: {integrity: sha512-1+QJyEI3hIN5SY56MBgnfOQWqNTjfRBbkGKyTHvL44A+Q/NlKwJ79w1nZcIjHhvouM7ArngK99yiMjd6G3iC6A==} peerDependencies: esbuild: '*' dependencies: - esbuild: 0.19.11 + esbuild: 0.19.12 dev: true - /esbuild-sass-plugin@2.16.1(esbuild@0.19.11): + /esbuild-sass-plugin@2.16.1(esbuild@0.19.12): resolution: {integrity: sha512-mBB2aEF0xk7yo+Q9pSUh8xYED/1O2wbAM6IauGkDrqy6pl9SbJNakLeLGXiNpNujWIudu8TJTZCv2L5AQYRXtA==} peerDependencies: esbuild: '*' dependencies: - esbuild: 0.19.11 + esbuild: 0.19.12 resolve: 1.22.8 - sass: 1.69.7 + sass: 1.70.0 dev: true - /esbuild@0.19.11: - resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} + /esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.19.11 - '@esbuild/android-arm': 0.19.11 - '@esbuild/android-arm64': 0.19.11 - '@esbuild/android-x64': 0.19.11 - '@esbuild/darwin-arm64': 0.19.11 - '@esbuild/darwin-x64': 0.19.11 - '@esbuild/freebsd-arm64': 0.19.11 - '@esbuild/freebsd-x64': 0.19.11 - '@esbuild/linux-arm': 0.19.11 - '@esbuild/linux-arm64': 0.19.11 - '@esbuild/linux-ia32': 0.19.11 - '@esbuild/linux-loong64': 0.19.11 - '@esbuild/linux-mips64el': 0.19.11 - '@esbuild/linux-ppc64': 0.19.11 - '@esbuild/linux-riscv64': 0.19.11 - '@esbuild/linux-s390x': 0.19.11 - '@esbuild/linux-x64': 0.19.11 - '@esbuild/netbsd-x64': 0.19.11 - '@esbuild/openbsd-x64': 0.19.11 - '@esbuild/sunos-x64': 0.19.11 - '@esbuild/win32-arm64': 0.19.11 - '@esbuild/win32-ia32': 0.19.11 - '@esbuild/win32-x64': 0.19.11 + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 dev: true /escalade@3.1.1: @@ -4851,7 +4852,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.19.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4861,8 +4862,8 @@ packages: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.15.0 eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -4874,7 +4875,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -4895,11 +4896,11 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.19.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color dev: true @@ -4910,10 +4911,10 @@ packages: peerDependencies: eslint: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@mdn/browser-compat-data': 5.5.5 + '@mdn/browser-compat-data': 5.5.7 ast-metadata-inferer: 0.8.0 browserslist: 4.22.2 - caniuse-lite: 1.0.30001576 + caniuse-lite: 1.0.30001579 eslint: 8.56.0 find-up: 5.0.0 lodash.memoize: 4.1.2 @@ -4926,7 +4927,7 @@ packages: htmlparser2: 8.0.2 dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -4936,7 +4937,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -4945,7 +4946,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -5001,7 +5002,7 @@ packages: peerDependencies: typescript: ^3.9.7 || ^4.0.0 || ^5.0.0 dependencies: - '@mdn/browser-compat-data': 5.5.5 + '@mdn/browser-compat-data': 5.5.7 '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) browserslist: 4.22.2 semver: 7.5.4 @@ -5011,8 +5012,8 @@ packages: - supports-color dev: true - /eslint-plugin-vue@9.20.0(eslint@8.56.0): - resolution: {integrity: sha512-9/DV5CM7ItfgWmXjL6j3zyDtVTrslYdnEm+rnYNajdElx17b3erxi/Wc6FY7t3BQ6dgo0t/UBpgiWCOKtJyN8Q==} + /eslint-plugin-vue@9.20.1(eslint@8.56.0): + resolution: {integrity: sha512-GyCs8K3lkEvoyC1VV97GJhP1SvqsKCiWGHnbn0gVUYiUhaH2+nB+Dv1uekv1THFMPbBfYxukrzQdltw950k+LQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 @@ -5023,7 +5024,7 @@ packages: nth-check: 2.1.1 postcss-selector-parser: 6.0.15 semver: 7.5.4 - vue-eslint-parser: 9.4.0(eslint@8.56.0) + vue-eslint-parser: 9.4.2(eslint@8.56.0) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -5435,8 +5436,8 @@ packages: readable-stream: 2.3.8 dev: true - /follow-redirects@1.15.4: - resolution: {integrity: sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==} + /follow-redirects@1.15.5: + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -5724,13 +5725,13 @@ packages: once: 1.4.0 dev: true - /global-jsdom@9.2.0(jsdom@23.2.0): + /global-jsdom@9.2.0(jsdom@24.0.0): resolution: {integrity: sha512-mspbiuYwcl5nbl2VRvHNaF4SzSmSMCTJGXXatzHYZAf6u3rO/aLXQICbVNTVI+vN8jaq1s4QcvKYnWhVepSbFQ==} engines: {node: '>=16'} peerDependencies: jsdom: '>=23 <24' dependencies: - jsdom: 23.2.0 + jsdom: 24.0.0 dev: true /global-modules@1.0.0: @@ -5895,7 +5896,7 @@ packages: resolution: {integrity: sha512-6el2YFJK+Wiip18G4iMl1rNuetSxpEZTLT1e6GuAsi3Q/yaeoNUgTX7nlwpbFkymGXMI4NFXisg5++PMe+fNNA==} engines: {node: '>=16'} dependencies: - esbuild: 0.19.11 + esbuild: 0.19.12 plugin-error: 2.0.1 vinyl: 3.0.0 dev: true @@ -5972,19 +5973,19 @@ packages: plugin-error: 0.1.2 dev: true - /gulp-postcss@9.0.1(postcss@8.4.33)(ts-node@10.9.2): - resolution: {integrity: sha512-9QUHam5JyXwGUxaaMvoFQVT44tohpEFpM8xBdPfdwTYGM0AItS1iTQz0MpsF8Jroh7GF5Jt2GVPaYgvy8qD2Fw==} - engines: {node: ^10 || ^12 || >=14} + /gulp-postcss@9.1.0(postcss@8.4.33): + resolution: {integrity: sha512-a843mcKPApfeI987uqQbc8l50xXeWIXBsiVvYxtCI5XtVAMzTi/HnU2qzQpGwkB/PAOfsLV8OsqDv2iJZ9qvdw==} + engines: {node: '>=18'} peerDependencies: postcss: ^8.0.0 dependencies: - fancy-log: 1.3.3 - plugin-error: 1.0.1 + fancy-log: 2.0.0 + plugin-error: 2.0.1 postcss: 8.4.33 - postcss-load-config: 3.1.4(postcss@8.4.33)(ts-node@10.9.2) + postcss-load-config: 5.0.2(postcss@8.4.33) vinyl-sourcemaps-apply: 0.2.1 transitivePeerDependencies: - - ts-node + - jiti dev: true /gulp-purgecss@5.0.0: @@ -6000,7 +6001,7 @@ packages: resolution: {integrity: sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==} engines: {node: '>=10'} dependencies: - '@types/node': 20.11.0 + '@types/node': 20.11.5 '@types/vinyl': 2.0.11 istextorbinary: 3.3.0 replacestream: 4.0.3 @@ -6024,7 +6025,7 @@ packages: engines: {node: '>=10'} dependencies: plugin-error: 1.0.1 - terser: 5.26.0 + terser: 5.27.0 through2: 4.0.2 vinyl-sourcemaps-apply: 0.2.1 dev: true @@ -6037,7 +6038,7 @@ packages: vinyl: 2.2.1 dev: true - /gulp-vue-ssg@1.2.2(esbuild@0.19.11)(gulp@4.0.2)(vue@3.4.10): + /gulp-vue-ssg@1.2.2(esbuild@0.19.12)(gulp@4.0.2)(vue@3.4.15): resolution: {integrity: sha512-QdMsM4zCLgCmfSHtZJ/2ApX4cWYy7hzAPLUimR8p/g0ATTaK6CL7vcMJ4+FW2gvDF+LkXDwbmIqdR32asSwaJA==} engines: {node: ^18||^20} peerDependencies: @@ -6045,13 +6046,13 @@ packages: gulp: ^4.0.2 vue: ^3.0.0 dependencies: - esbuild: 0.19.11 + esbuild: 0.19.12 gulp: 4.0.2 gulp-through2: 1.0.1 - vue: 3.4.10(typescript@5.3.3) + vue: 3.4.15(typescript@5.3.3) optionalDependencies: - global-jsdom: 9.2.0(jsdom@23.2.0) - jsdom: 23.2.0 + global-jsdom: 9.2.0(jsdom@24.0.0) + jsdom: 24.0.0 transitivePeerDependencies: - bufferutil - canvas @@ -6201,7 +6202,7 @@ packages: entities: 4.5.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.26.0 + terser: 5.27.0 dev: true /html-tags@3.3.1: @@ -6237,7 +6238,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.4 + follow-redirects: 1.15.5 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -6802,7 +6803,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.11.0 + '@types/node': 20.11.5 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -6835,8 +6836,8 @@ packages: engines: {node: '>=12.0.0'} dev: true - /jsdom@23.2.0: - resolution: {integrity: sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==} + /jsdom@24.0.0: + resolution: {integrity: sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==} engines: {node: '>=18'} peerDependencies: canvas: ^2.11.2 @@ -6844,7 +6845,6 @@ packages: canvas: optional: true dependencies: - '@asamuzakjp/dom-selector': 2.0.1 cssstyle: 4.0.1 data-urls: 5.0.0 decimal.js: 10.4.3 @@ -6853,6 +6853,7 @@ packages: http-proxy-agent: 7.0.0 https-proxy-agent: 7.0.2 is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.7 parse5: 7.1.2 rrweb-cssom: 0.6.0 saxes: 6.0.0 @@ -7054,9 +7055,9 @@ packages: resolve: 1.22.8 dev: true - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} dev: true /lines-and-columns@1.2.4: @@ -7592,6 +7593,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /nwsapi@2.2.7: + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + dev: true + /nyc@15.1.0: resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} engines: {node: '>=8.9'} @@ -8243,22 +8248,21 @@ packages: postcss: 8.4.33 dev: true - /postcss-load-config@3.1.4(postcss@8.4.33)(ts-node@10.9.2): - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} + /postcss-load-config@5.0.2(postcss@8.4.33): + resolution: {integrity: sha512-Q8QR3FYbqOKa0bnC1UQ2bFq9/ulHX5Bi34muzitMr8aDtUelO5xKeJEYC/5smE0jNE9zdB/NBnOwXKexELbRlw==} + engines: {node: '>= 18'} peerDependencies: + jiti: '>=1.21.0' postcss: '>=8.0.9' - ts-node: '>=9.0.0' peerDependenciesMeta: - postcss: + jiti: optional: true - ts-node: + postcss: optional: true dependencies: - lilconfig: 2.1.0 + lilconfig: 3.0.0 postcss: 8.4.33 - ts-node: 10.9.2(@swc/core@1.3.102)(@types/node@20.11.0)(typescript@5.3.3) - yaml: 1.10.2 + yaml: 2.3.4 dev: true /postcss-logical@7.0.1(postcss@8.4.33): @@ -8357,7 +8361,7 @@ packages: '@csstools/postcss-text-decoration-shorthand': 3.0.4(postcss@8.4.33) '@csstools/postcss-trigonometric-functions': 3.0.4(postcss@8.4.33) '@csstools/postcss-unset-value': 3.0.1(postcss@8.4.33) - autoprefixer: 10.4.16(postcss@8.4.33) + autoprefixer: 10.4.17(postcss@8.4.33) browserslist: 4.22.2 css-blank-pseudo: 6.0.1(postcss@8.4.33) css-has-pseudo: 6.0.1(postcss@8.4.33) @@ -8877,7 +8881,7 @@ packages: jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.26.0 + terser: 5.27.0 dev: true /rollup@2.79.1: @@ -8909,8 +8913,8 @@ packages: tslib: 2.6.2 dev: true - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + /safe-array-concat@1.1.0: + resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} engines: {node: '>=0.4'} dependencies: call-bind: 1.0.5 @@ -8939,8 +8943,8 @@ packages: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /sass@1.69.7: - resolution: {integrity: sha512-rzj2soDeZ8wtE2egyLXgOOHQvaC2iosZrkF6v3EUG+tBwEvhqUCzm0VP3k9gHF9LXbSrRhT5SksoI56Iw8NPnQ==} + /sass@1.70.0: + resolution: {integrity: sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -9001,11 +9005,12 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + /set-function-length@1.2.0: + resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.1 + function-bind: 1.1.2 get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 @@ -9215,8 +9220,8 @@ packages: resolution: {integrity: sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==} dev: true - /stream-shift@1.0.2: - resolution: {integrity: sha512-rV4Bovi9xx0BFzOb/X0B2GqoIjvqPCttZdu0Wgtx2Dxkj7ETyWl9gmqJ4EutWRLvtZWm8dxE+InQZX1IryZn/w==} + /stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} dev: true /streamfilter@3.0.0: @@ -9371,16 +9376,16 @@ packages: engines: {node: '>=8'} dev: true - /stylelint-config-clean-order@5.4.0(stylelint@16.1.0): + /stylelint-config-clean-order@5.4.0(stylelint@16.2.0): resolution: {integrity: sha512-CQCJVDlik/TQ6/ntCj8sF+Yakec1ShB57IqERBaY7tk4KzP9ekgYZTn4PpYJV4v5T40BTxGvR3pj+DXLB4EQjQ==} peerDependencies: stylelint: '>=14' dependencies: - stylelint: 16.1.0(typescript@5.3.3) - stylelint-order: 6.0.4(stylelint@16.1.0) + stylelint: 16.2.0(typescript@5.3.3) + stylelint-order: 6.0.4(stylelint@16.2.0) dev: true - /stylelint-config-html@1.1.0(postcss-html@1.6.0)(stylelint@16.1.0): + /stylelint-config-html@1.1.0(postcss-html@1.6.0)(stylelint@16.2.0): resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==} engines: {node: ^12 || >=14} peerDependencies: @@ -9388,10 +9393,10 @@ packages: stylelint: '>=14.0.0' dependencies: postcss-html: 1.6.0 - stylelint: 16.1.0(typescript@5.3.3) + stylelint: 16.2.0(typescript@5.3.3) dev: true - /stylelint-config-recommended-scss@14.0.0(postcss@8.4.33)(stylelint@16.1.0): + /stylelint-config-recommended-scss@14.0.0(postcss@8.4.33)(stylelint@16.2.0): resolution: {integrity: sha512-HDvpoOAQ1RpF+sPbDOT2Q2/YrBDEJDnUymmVmZ7mMCeNiFSdhRdyGEimBkz06wsN+HaFwUh249gDR+I9JR7Onw==} engines: {node: '>=18.12.0'} peerDependencies: @@ -9403,12 +9408,12 @@ packages: dependencies: postcss: 8.4.33 postcss-scss: 4.0.9(postcss@8.4.33) - stylelint: 16.1.0(typescript@5.3.3) - stylelint-config-recommended: 14.0.0(stylelint@16.1.0) - stylelint-scss: 6.0.0(stylelint@16.1.0) + stylelint: 16.2.0(typescript@5.3.3) + stylelint-config-recommended: 14.0.0(stylelint@16.2.0) + stylelint-scss: 6.1.0(stylelint@16.2.0) dev: true - /stylelint-config-recommended-vue@1.5.0(postcss-html@1.6.0)(stylelint@16.1.0): + /stylelint-config-recommended-vue@1.5.0(postcss-html@1.6.0)(stylelint@16.2.0): resolution: {integrity: sha512-65TAK/clUqkNtkZLcuytoxU0URQYlml+30Nhop7sRkCZ/mtWdXt7T+spPSB3KMKlb+82aEVJ4OrcstyDBdbosg==} engines: {node: ^12 || >=14} peerDependencies: @@ -9417,21 +9422,21 @@ packages: dependencies: postcss-html: 1.6.0 semver: 7.5.4 - stylelint: 16.1.0(typescript@5.3.3) - stylelint-config-html: 1.1.0(postcss-html@1.6.0)(stylelint@16.1.0) - stylelint-config-recommended: 14.0.0(stylelint@16.1.0) + stylelint: 16.2.0(typescript@5.3.3) + stylelint-config-html: 1.1.0(postcss-html@1.6.0)(stylelint@16.2.0) + stylelint-config-recommended: 14.0.0(stylelint@16.2.0) dev: true - /stylelint-config-recommended@14.0.0(stylelint@16.1.0): + /stylelint-config-recommended@14.0.0(stylelint@16.2.0): resolution: {integrity: sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==} engines: {node: '>=18.12.0'} peerDependencies: stylelint: ^16.0.0 dependencies: - stylelint: 16.1.0(typescript@5.3.3) + stylelint: 16.2.0(typescript@5.3.3) dev: true - /stylelint-config-standard-scss@13.0.0(postcss@8.4.33)(stylelint@16.1.0): + /stylelint-config-standard-scss@13.0.0(postcss@8.4.33)(stylelint@16.2.0): resolution: {integrity: sha512-WaLvkP689qSYUpJQPCo30TFJSSc3VzvvoWnrgp+7PpVby5o8fRUY1cZcP0sePZfjrFl9T8caGhcKg0GO34VDiQ==} engines: {node: '>=18.12.0'} peerDependencies: @@ -9442,22 +9447,22 @@ packages: optional: true dependencies: postcss: 8.4.33 - stylelint: 16.1.0(typescript@5.3.3) - stylelint-config-recommended-scss: 14.0.0(postcss@8.4.33)(stylelint@16.1.0) - stylelint-config-standard: 36.0.0(stylelint@16.1.0) + stylelint: 16.2.0(typescript@5.3.3) + stylelint-config-recommended-scss: 14.0.0(postcss@8.4.33)(stylelint@16.2.0) + stylelint-config-standard: 36.0.0(stylelint@16.2.0) dev: true - /stylelint-config-standard@36.0.0(stylelint@16.1.0): + /stylelint-config-standard@36.0.0(stylelint@16.2.0): resolution: {integrity: sha512-3Kjyq4d62bYFp/Aq8PMKDwlgUyPU4nacXsjDLWJdNPRUgpuxALu1KnlAHIj36cdtxViVhXexZij65yM0uNIHug==} engines: {node: '>=18.12.0'} peerDependencies: stylelint: ^16.1.0 dependencies: - stylelint: 16.1.0(typescript@5.3.3) - stylelint-config-recommended: 14.0.0(stylelint@16.1.0) + stylelint: 16.2.0(typescript@5.3.3) + stylelint-config-recommended: 14.0.0(stylelint@16.2.0) dev: true - /stylelint-no-unsupported-browser-features@8.0.0(stylelint@16.1.0): + /stylelint-no-unsupported-browser-features@8.0.0(stylelint@16.2.0): resolution: {integrity: sha512-XrXaizW90HdswC+2V1XJXsvNrMUt/bk8OJ7ZDn3nKZzE5NAd4rmAIo/igKuGzHA2a6vx5FplhD5VOqSLYDPnYg==} engines: {node: '>=18.12.0'} peerDependencies: @@ -9466,21 +9471,21 @@ packages: doiuse: 6.0.2 lodash.pick: 4.4.0 postcss: 8.4.33 - stylelint: 16.1.0(typescript@5.3.3) + stylelint: 16.2.0(typescript@5.3.3) dev: true - /stylelint-order@6.0.4(stylelint@16.1.0): + /stylelint-order@6.0.4(stylelint@16.2.0): resolution: {integrity: sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==} peerDependencies: stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1 dependencies: postcss: 8.4.33 postcss-sorting: 8.0.2(postcss@8.4.33) - stylelint: 16.1.0(typescript@5.3.3) + stylelint: 16.2.0(typescript@5.3.3) dev: true - /stylelint-scss@6.0.0(stylelint@16.1.0): - resolution: {integrity: sha512-N1xV/Ef5PNRQQt9E45unzGvBUN1KZxCI8B4FgN/pMfmyRYbZGVN4y9qWlvOMdScU17c8VVCnjIHTVn38Bb6qSA==} + /stylelint-scss@6.1.0(stylelint@16.2.0): + resolution: {integrity: sha512-kCfK8TQzthGwb4vaZniZgxRsVbCM4ZckmT1b/H5m4FU3I8Dz0id9llKsy1NMp3XXqC8+OPD4rVKtUbSxXlJb5g==} engines: {node: '>=18.12.0'} peerDependencies: stylelint: ^16.0.2 @@ -9490,11 +9495,11 @@ packages: postcss-resolve-nested-selector: 0.1.1 postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 - stylelint: 16.1.0(typescript@5.3.3) + stylelint: 16.2.0(typescript@5.3.3) dev: true - /stylelint@16.1.0(typescript@5.3.3): - resolution: {integrity: sha512-Sh1rRV0lN1qxz/QsuuooLWsIZ/ona7NKw/fRZd6y6PyXYdD2W0EAzJ8yJcwSx4Iw/muz0CF09VZ+z4EiTAcKmg==} + /stylelint@16.2.0(typescript@5.3.3): + resolution: {integrity: sha512-gwqU5AkIb52wrAzzn+359S3NIJDMl02TXLUaV2tzA/L6jUdpTwNt+MCxHlc8+Hb2bUHlYVo92YeSIryF2gJthA==} engines: {node: '>=18.12.0'} hasBin: true dependencies: @@ -9657,8 +9662,8 @@ packages: through2: 3.0.2 dev: true - /terser@5.26.0: - resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} + /terser@5.27.0: + resolution: {integrity: sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==} engines: {node: '>=10'} hasBin: true dependencies: @@ -9808,7 +9813,7 @@ packages: typescript: 5.3.3 dev: true - /ts-node@10.9.2(@swc/core@1.3.102)(@types/node@20.11.0)(typescript@5.3.3): + /ts-node@10.9.2(@swc/core@1.3.105)(@types/node@20.11.5)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -9823,12 +9828,12 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.3.102 + '@swc/core': 1.3.105 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.11.0 + '@types/node': 20.11.5 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 @@ -10240,8 +10245,8 @@ packages: teex: 1.0.1 dev: true - /vue-eslint-parser@9.4.0(eslint@8.56.0): - resolution: {integrity: sha512-7KsNBb6gHFA75BtneJsoK/dbZ281whUIwFYdQxA68QrCrGMXYzUMbPDHGcOQ0OocIVKrWSKWXZ4mL7tonCXoUw==} + /vue-eslint-parser@9.4.2(eslint@8.56.0): + resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' @@ -10258,7 +10263,7 @@ packages: - supports-color dev: true - /vue-i18n@9.9.0(vue@3.4.10): + /vue-i18n@9.9.0(vue@3.4.15): resolution: {integrity: sha512-xQ5SxszUAqK5n84N+uUyHH/PiQl9xZ24FOxyAaNonmOQgXeN+rD9z/6DStOpOxNFQn4Cgcquot05gZc+CdOujA==} engines: {node: '>= 16'} peerDependencies: @@ -10267,29 +10272,29 @@ packages: '@intlify/core-base': 9.9.0 '@intlify/shared': 9.9.0 '@vue/devtools-api': 6.5.1 - vue: 3.4.10(typescript@5.3.3) + vue: 3.4.15(typescript@5.3.3) - /vue-slicksort@2.0.5(vue@3.4.10): + /vue-slicksort@2.0.5(vue@3.4.15): resolution: {integrity: sha512-fXz1YrNjhUbJK7o0tMk27mIr4pMAZYLSYvtmLazCtfpvz+zafPCn34ILDL8B7hT7WLVZKreYs6JVe5VWymqmzA==} peerDependencies: vue: '>=3.0.0' dependencies: - vue: 3.4.10(typescript@5.3.3) + vue: 3.4.15(typescript@5.3.3) dev: false - /vue@3.4.10(typescript@5.3.3): - resolution: {integrity: sha512-c+O8qGqdWPF9joTCzMGeDDedViooh6c8RY3+eW5+6GCAIY8YjChmU06LsUu0PnMZbIk1oKUoJTqKzmghYtFypw==} + /vue@3.4.15(typescript@5.3.3): + resolution: {integrity: sha512-jC0GH4KkWLWJOEQjOpkqU1bQsBwf4R1rsFtw5GQJbjHVKWDzO6P0nWWBTmjp1xSemAioDFj1jdaK1qa3DnMQoQ==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.4.10 - '@vue/compiler-sfc': 3.4.10 - '@vue/runtime-dom': 3.4.10 - '@vue/server-renderer': 3.4.10(vue@3.4.10) - '@vue/shared': 3.4.10 + '@vue/compiler-dom': 3.4.15 + '@vue/compiler-sfc': 3.4.15 + '@vue/runtime-dom': 3.4.15 + '@vue/server-renderer': 3.4.15(vue@3.4.15) + '@vue/shared': 3.4.15 typescript: 5.3.3 /w3c-xmlserializer@5.0.0: @@ -10675,11 +10680,6 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: true - /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} From 11a388cf7ef0dd16373586385cd89e67a96e5b4a Mon Sep 17 00:00:00 2001 From: Mu-Tsun Tsai Date: Wed, 24 Jan 2024 18:48:00 +0800 Subject: [PATCH 08/11] Refactor BaseJoinLogic --- .../layout/joiner/logic/baseJoinLogic.ts | 50 ++++++++++--------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/src/core/design/layout/joiner/logic/baseJoinLogic.ts b/src/core/design/layout/joiner/logic/baseJoinLogic.ts index af96ef38..c960cc7b 100644 --- a/src/core/design/layout/joiner/logic/baseJoinLogic.ts +++ b/src/core/design/layout/joiner/logic/baseJoinLogic.ts @@ -5,11 +5,13 @@ import { QV } from "../../pattern/quadrant"; import type { JoinResult } from "./joinLogic"; import type { Point } from "core/math/geometry/point"; +type NPoint = Point | null; + interface BaseJoinContext { - D1: Point | null; - D2: Point | null; - B1: Point | null; - B2: Point | null; + D1: NPoint; + D2: NPoint; + B1: NPoint; + B2: NPoint; delta: Line; } @@ -29,25 +31,10 @@ export class BaseJoinLogic extends JoinLogic { public *$join(): Generator { if(!this.data) return; const { D1, D2, B1, B2 } = this._baseJoinIntersections(); - const { j1, j2, f } = this; - - if(B1?.$isIntegral && D2?.$isIntegral && !B1.eq(D2)) { - // If the two gadgets are pointing inwards instead of outwards, - // there's no obtuse join (at least there's no such transformation so far). - // TODO: Think about this more deeply. - if(D2.x * f > B1.x * f && this.joiner.$isClockwise != j1.$isSteeperThan(j2)) return; - - if(!this._setupAnchor(D2)) return; - this._setupDetour([B1], [D2, B1]); - yield this._result(true); - } - if(B2?.$isIntegral && D1?.$isIntegral && !B2.eq(D1)) { - if(D1.x * f > B2.x * f && this.joiner.$isClockwise != j1.$isSteeperThan(j2)) return; - - if(!this._setupAnchor(D1)) return; - this._setupDetour([D1, B2], [B2]); - yield this._result(); - } + const try1 = this.tryJoin(B1, D2, true, true); + if(try1) yield try1; + const try2 = this.tryJoin(B2, D1, false, false); + if(try2) yield try2; } /** @@ -68,4 +55,21 @@ export class BaseJoinLogic extends JoinLogic { const B2 = j2.e.$intersection(pt, bv); return { D1, D2, B1, B2, delta }; } + + private tryJoin(B: NPoint, D: NPoint, Din2: boolean, shouldClone: boolean): JoinResult | undefined { + const { j1, j2, f } = this; + if(!B || !D) return; + if(B.$isIntegral && D.$isIntegral && !B.eq(D)) { + // There is no obtuse join if the two gadgets are "pointing inwards", + // as the straight-skeleton degenerates into a relay pattern. + if(D.x * f > B.x * f && this.joiner.$isClockwise != j1.$isSteeperThan(j2)) return; + + /* istanbul ignore next: debug */ + if(!this._setupAnchor(D)) return; + + if(Din2) this._setupDetour([B], [D, B]); + else this._setupDetour([D, B], [B]); + return this._result(shouldClone); + } + } } From 84450f749c7447b767042c411d5e228541d90f4d Mon Sep 17 00:00:00 2001 From: Mu-Tsun Tsai Date: Wed, 24 Jan 2024 19:01:30 +0800 Subject: [PATCH 09/11] Fix session loading in PWA mode --- package.json | 2 +- src/app/services/importService.ts | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index deaf9947..bee811c9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "box-pleating-studio", "version": "0.6.10", - "app_version": "1770", + "app_version": "1774", "description": "Super-complex origami design made easy!", "main": "./build/dist/bpstudio.js", "scripts": { diff --git a/src/app/services/importService.ts b/src/app/services/importService.ts index e2030376..e5b08744 100644 --- a/src/app/services/importService.ts +++ b/src/app/services/importService.ts @@ -19,14 +19,22 @@ namespace ImportService { }); /** - * Processing File Handling API (open files directly in PWA) + * Process File Handling API (open files directly in PWA), + * and return if any file is opened. */ export async function openQueue(): Promise { if(!("launchQueue" in window)) return false; return await new Promise(resolve => { launchQueue.setConsumer(launchParams => { - open(launchParams.files); - resolve(true); + // Since somewhere around early 2024, Chrome always call this + // callback in desktop PWA even if no file handle is passed in. + // So we need to check if there's actually any files. + if(launchParams.files.length > 0) { + open(launchParams.files); + resolve(true); + } else { + resolve(false); + } }); setTimeout(() => resolve(false), 0); }); From e528a83e3879133524430dba50b8aa7a5db4404b Mon Sep 17 00:00:00 2001 From: Mu-Tsun Tsai Date: Thu, 25 Jan 2024 10:25:27 +0800 Subject: [PATCH 10/11] Refactor pattern tests --- test/specs/pattern.spec.ts | 345 --------------------------- test/specs/pattern/index.spec.ts | 9 + test/specs/pattern/rendering.spec.ts | 44 ++++ test/specs/pattern/searching.spec.ts | 76 ++++++ test/specs/pattern/threeFlap.spec.ts | 148 ++++++++++++ test/specs/pattern/twoFlap.spec.ts | 60 +++++ test/specs/pattern/util.ts | 24 ++ 7 files changed, 361 insertions(+), 345 deletions(-) delete mode 100644 test/specs/pattern.spec.ts create mode 100644 test/specs/pattern/index.spec.ts create mode 100644 test/specs/pattern/rendering.spec.ts create mode 100644 test/specs/pattern/searching.spec.ts create mode 100644 test/specs/pattern/threeFlap.spec.ts create mode 100644 test/specs/pattern/twoFlap.spec.ts create mode 100644 test/specs/pattern/util.ts diff --git a/test/specs/pattern.spec.ts b/test/specs/pattern.spec.ts deleted file mode 100644 index 2a69737f..00000000 --- a/test/specs/pattern.spec.ts +++ /dev/null @@ -1,345 +0,0 @@ -import { createTree, id1, id2, id3, id4, node, parseTree } from "@utils/tree"; -import { getJSON } from "@utils/sample"; -import { LayoutController } from "core/controller/layoutController"; -import { DesignController } from "core/controller/designController"; -import { Migration } from "client/patches"; -import { toPath } from "core/math/geometry/rationalPath"; -import { State, fullReset } from "core/service/state"; -import { TreeController } from "core/controller/treeController"; -import { UpdateResult } from "core/service/updateResult"; - -import type { Tree } from "core/design/context/tree"; - -describe("Pattern", function() { - - describe("Searching", function() { - - it("Loads saved patterns", async function() { - fullReset(); - const sample = await getJSON("v04.session.sample.json"); - const data = Migration.$process(sample); - DesignController.init(data.design); - complete(); - const stretch = State.$stretches.get("12,27")!; - const device = stretch.$repo.$pattern!.$devices[0]; - expect(device.$offset).to.equal(4); - }); - - it("Signifies when no pattern is found", function() { - generateFromFlaps([ - { id: 1, x: 0, y: 0, radius: 10 }, - { id: 2, x: 10, y: 11, radius: 3 }, - { id: 3, x: 11, y: 5, radius: 2 }, - ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch.$repo.$pattern).to.equal(null); - expect(UpdateResult.$flush().patternNotFound).to.be.true; - }); - - it("Caches repo during dragging", function() { - parseTree("(0,1,7),(0,2,4)", "(1,0,0,0,0),(2,8,9,0,0)"); - LayoutController.completeStretch("1,2"); - - const stretch = State.$stretches.get("1,2")!; - expect(stretch.$isActive).to.be.true; - const repo = stretch.$repo; - expect(repo.$configurations.length).to.equal(1); - const config = repo.$configuration!; - expect(config.$length).to.equal(2); - expect(config.$index).to.equal(0); - - LayoutController.switchPattern("1,2", 1); - expect(config.$index).to.equal(1); - - LayoutController.updateFlap([{ id: id2, x: 8, y: 10, width: 0, height: 0 }], true, []); - expect(stretch.$repo).to.not.equal(repo); - - LayoutController.updateFlap([{ id: id2, x: 8, y: 9, width: 0, height: 0 }], true, []); - LayoutController.dragEnd(); - expect(stretch.$isActive).to.be.true; - expect(stretch.$repo).to.equal(repo); - expect(config.$index).to.equal(1); - - LayoutController.updateFlap([{ id: id2, x: 11, y: 9, width: 0, height: 0 }], true, []); - expect(stretch.$isActive).to.be.false; - - LayoutController.updateFlap([{ id: id2, x: 8, y: 9, width: 0, height: 0 }], true, []); - LayoutController.dragEnd(); - expect(stretch.$isActive).to.be.true; - - // Not cached if not dragging - LayoutController.updateFlap([{ id: id2, x: 8, y: 10, width: 0, height: 0 }], false, []); - LayoutController.updateFlap([{ id: id2, x: 8, y: 9, width: 0, height: 0 }], false, []); - expect(stretch.$repo).to.not.equal(repo); - expect(stretch.$repo.$configuration!.$index).to.equal(0); - }); - - describe("Two flap patterns", function() { - - it("Finds universal GPS patterns", function() { - for(const [a, b] of TWO_PERMUTATION) { - generateFromFlaps([ - { id: a, x: 0, y: 0, radius: 6 }, - { id: b, x: 11, y: 5, radius: 6 }, - ]); - const stretch = State.$stretches.get("1,2")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - const config = stretch.$repo.$configuration!; - expect(config.$length).to.equal(2); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(1); - const device = pattern.$devices[0]; - expect(device.$gadgets.length).to.equal(1); - const gadget = device.$gadgets[0]; - expect(gadget.pieces.length).to.equal(2, "Universal GPS has two pieces"); - expect(gadget.$slack).to.include(0.25); - } - }); - - it("Find double relay patterns", function() { - for(const [a, b] of TWO_PERMUTATION) { - generateFromFlaps([ - { id: a, x: 0, y: 0, radius: 8 }, - { id: b, x: 10, y: 7, radius: 4 }, - ]); - const stretch = State.$stretches.get("1,2")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(4); - const config = stretch.$repo.$configuration!; - expect(config.$length).to.equal(1); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(2); - } - - for(const [a, b] of TWO_PERMUTATION) { - generateFromFlaps([ - { id: a, x: 0, y: 0, radius: 8 }, - { id: b, x: 7, y: 10, radius: 4 }, - ]); - const stretch = State.$stretches.get("1,2")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(4); - const config = stretch.$repo.$configuration!; - expect(config.$length).to.equal(1); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(2); - } - }); - - }); - - describe("Three flap patterns", function() { - - it("Does not depend on the ordering of flap ids nor the transformation factors", function() { - for(const [a, b, c] of THREE_PERMUTATION) { - generateFromFlaps([ - { id: a, x: 9, y: 5, radius: 2 }, - { id: b, x: 0, y: 0, radius: 8 }, - { id: c, x: 6, y: 8, radius: 2 }, - ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - expect(stretch.$repo.$configurations[0].$length).to.equal(1); - - const B = node(b)!; - expect(B.$graphics.$patternContours.length).to.be.equal(1); - - const path = toPath(B.$graphics.$patternContours[0]); - expect(path).to.equalPath("(8,3),(7,13/3),(7,6),(16/3,6),(4,7),(4,8)"); - } - for(const [a, b, c] of THREE_PERMUTATION) { - generateFromFlaps([ - { id: a, x: -9, y: 5, radius: 2 }, - { id: b, x: 0, y: 0, radius: 8 }, - { id: c, x: -6, y: 8, radius: 2 }, - ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - expect(stretch.$repo.$configurations[0].$length).to.equal(1); - - const B = node(b)!; - expect(B.$graphics.$patternContours.length).to.be.equal(1); - - const path = toPath(B.$graphics.$patternContours[0]); - expect(path).to.equalPath("(-4,8),(-4,7),(-16/3,6),(-7,6),(-7,13/3),(-8,3)"); - } - }); - - it("Renders river in between", function() { - for(const [a, b, c] of THREE_PERMUTATION) { - parseTree( - `(0,4,2),(0,5,2),(5,${a},4),(4,${b},2),(4,${c},2)`, - `(${a},0,0,0,0),(${b},9,5,0,0),(${c},6,8,0,0)` - ); - const r = node(4)!; - expect(r.$graphics.$patternContours.length).to.be.equal(1); - } - }); - - it("Half integral relay", function() { - for(const [a, b, c] of THREE_PERMUTATION) { - generateFromFlaps([ - { id: a, x: 0, y: 0, radius: 11 }, - { id: b, x: 8, y: 14, radius: 4 }, - { id: c, x: 15, y: 8, radius: 6 }, - ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - const config = stretch.$repo.$configurations[0]; - expect(config.$length).to.equal(2, "Two half integral patterns"); - } - }); - - it("Base join", function() { - for(const [a, b, c] of THREE_PERMUTATION) { - generateFromFlaps([ - { id: a, x: 0, y: 0, radius: 11 }, - { id: b, x: 7, y: 14, radius: 4 }, - { id: c, x: 15, y: 8, radius: 6 }, - ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - const config = stretch.$repo.$configurations[0]; - expect(config.$length).to.equal(1); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(1); - const device = pattern.$devices[0]; - expect(device.$addOns.length).to.equal(0, "Base joins have no addOn"); - } - }); - - it("Standard join", function() { - for(const [a, b, c] of THREE_PERMUTATION) { - generateFromFlaps([ - { id: a, x: 0, y: 0, radius: 11 }, - { id: b, x: 5, y: 12, radius: 2 }, - { id: c, x: 15, y: 8, radius: 6 }, - ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - const config = stretch.$repo.$configurations[0]; - expect(config.$length).to.equal(2, "Should find two standard joins."); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(1, "Standard join creates 1 Device"); - const device = pattern.$devices[0]; - expect(device.$addOns.length).to.equal(1, "Standard join will have 1 addOn"); - } - }); - - it("Split join", function() { - for(const [a, b, c] of THREE_PERMUTATION) { - generateFromFlaps([ - { id: a, x: 0, y: 0, radius: 15 }, - { id: b, x: 7, y: 20, radius: 6 }, - { id: c, x: 16, y: 12, radius: 5 }, - ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - const config = stretch.$repo.$configurations[0]; - expect(config.$length).to.equal(1); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(2); - } - - for(const [a, b, c] of THREE_PERMUTATION) { - generateFromFlaps([ - { id: a, x: 0, y: 0, radius: 15 }, - { id: b, x: 20, y: 7, radius: 6 }, - { id: c, x: 12, y: 16, radius: 5 }, - ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - const config = stretch.$repo.$configurations[0]; - expect(config.$length).to.equal(1); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(2); - } - }); - - }); - - }); - - describe("Rendering", function() { - - it("Updates ridges when edges merge or split", function() { - parseTree("(0,1,2),(0,2,2),(0,4,1),(4,3,7)", "(1,9,5,0,0),(2,6,8,0,0),(3,0,0,0,0)"); - complete(); - const result1 = UpdateResult.$flush(); - const ridges1 = result1.graphics["s1,2,3.0"].ridges; - expect(ridges1).to.containLine([{ x: 4.5, y: 3.5 }, { x: 6, y: 5 }]); - - TreeController.join(id4); - const result2 = UpdateResult.$flush(); - const data2 = result2.graphics["s1,2,3.0"]; - expect(data2).to.be.not.undefined; - const ridges2 = data2.ridges; - expect(ridges2).to.not.containLine([{ x: 4.5, y: 3.5 }, { x: 6, y: 5 }]); - expect(ridges2).to.containLine([{ x: 4.5, y: 3.5 }, { x: 7, y: 6 }]); - }); - - it("Update origin when all flaps move simultaneously", function() { - generateFromFlaps([ - { id: 1, x: 9, y: 5, radius: 2 }, - { id: 2, x: 0, y: 0, radius: 8 }, - { id: 3, x: 6, y: 8, radius: 2 }, - ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - const repo = stretch.$repo; - - LayoutController.updateFlap([ - { id: id1, x: 10, y: 6, width: 0, height: 0 }, - { id: id2, x: 1, y: 1, width: 0, height: 0 }, - { id: id3, x: 7, y: 9, width: 0, height: 0 }, - ], false, []); - - expect(State.$stretches.get("1,2,3")).to.equal(stretch); - expect(stretch.$repo).to.equal(repo); - }); - - }); - -}); - -const TWO_PERMUTATION = [ - [1, 2], - [2, 1], -]; - -const THREE_PERMUTATION = [ - [1, 2, 3], - [1, 3, 2], - [2, 1, 3], - [2, 3, 1], - [3, 1, 2], - [3, 2, 1], -]; - -function complete(): void { - for(const stretch of State.$stretches.values()) stretch.$repo.$complete(); -} - -interface IFlap { - id: number; - x: number; - y: number; - radius: number; -} - -function generateFromFlaps(flaps: IFlap[]): Tree { - const tree = createTree( - flaps.map(f => ({ n1: 0, n2: f.id, length: f.radius })), - flaps.map(f => ({ id: f.id, width: 0, height: 0, x: f.x, y: f.y })) - ); - complete(); - return tree; -} diff --git a/test/specs/pattern/index.spec.ts b/test/specs/pattern/index.spec.ts new file mode 100644 index 00000000..06b78ef6 --- /dev/null +++ b/test/specs/pattern/index.spec.ts @@ -0,0 +1,9 @@ +import renderingSpec from "./rendering.spec"; +import searchingSpec from "./searching.spec"; + +describe("Pattern", function() { + + describe("Searching", searchingSpec); + describe("Rendering", renderingSpec); + +}); diff --git a/test/specs/pattern/rendering.spec.ts b/test/specs/pattern/rendering.spec.ts new file mode 100644 index 00000000..fbcfe72e --- /dev/null +++ b/test/specs/pattern/rendering.spec.ts @@ -0,0 +1,44 @@ +import { id1, id2, id3, id4, parseTree } from "@utils/tree"; +import { LayoutController } from "core/controller/layoutController"; +import { State } from "core/service/state"; +import { TreeController } from "core/controller/treeController"; +import { UpdateResult } from "core/service/updateResult"; +import { complete, generateFromFlaps } from "./util"; + +export default function() { + it("Updates ridges when edges merge or split", function() { + parseTree("(0,1,2),(0,2,2),(0,4,1),(4,3,7)", "(1,9,5,0,0),(2,6,8,0,0),(3,0,0,0,0)"); + complete(); + const result1 = UpdateResult.$flush(); + const ridges1 = result1.graphics["s1,2,3.0"].ridges; + expect(ridges1).to.containLine([{ x: 4.5, y: 3.5 }, { x: 6, y: 5 }]); + + TreeController.join(id4); + const result2 = UpdateResult.$flush(); + const data2 = result2.graphics["s1,2,3.0"]; + expect(data2).to.be.not.undefined; + const ridges2 = data2.ridges; + expect(ridges2).to.not.containLine([{ x: 4.5, y: 3.5 }, { x: 6, y: 5 }]); + expect(ridges2).to.containLine([{ x: 4.5, y: 3.5 }, { x: 7, y: 6 }]); + }); + + it("Update origin when all flaps move simultaneously", function() { + generateFromFlaps([ + { id: 1, x: 9, y: 5, radius: 2 }, + { id: 2, x: 0, y: 0, radius: 8 }, + { id: 3, x: 6, y: 8, radius: 2 }, + ]); + const stretch = State.$stretches.get("1,2,3")!; + expect(stretch).to.be.not.undefined; + const repo = stretch.$repo; + + LayoutController.updateFlap([ + { id: id1, x: 10, y: 6, width: 0, height: 0 }, + { id: id2, x: 1, y: 1, width: 0, height: 0 }, + { id: id3, x: 7, y: 9, width: 0, height: 0 }, + ], false, []); + + expect(State.$stretches.get("1,2,3")).to.equal(stretch); + expect(stretch.$repo).to.equal(repo); + }); +} diff --git a/test/specs/pattern/searching.spec.ts b/test/specs/pattern/searching.spec.ts new file mode 100644 index 00000000..43e2fe93 --- /dev/null +++ b/test/specs/pattern/searching.spec.ts @@ -0,0 +1,76 @@ +import { LayoutController } from "core/controller/layoutController"; +import twoFlapSpec from "./twoFlap.spec"; +import { id2, parseTree } from "@utils/tree"; +import threeFlapSpec from "./threeFlap.spec"; +import { UpdateResult } from "core/service/updateResult"; +import { State, fullReset } from "core/service/state"; +import { complete, generateFromFlaps } from "./util"; +import { DesignController } from "core/controller/designController"; +import { getJSON } from "@utils/sample"; +import { Migration } from "client/patches"; + +export default function() { + it("Loads saved patterns", async function() { + fullReset(); + const sample = await getJSON("v04.session.sample.json"); + const data = Migration.$process(sample); + DesignController.init(data.design); + complete(); + const stretch = State.$stretches.get("12,27")!; + const device = stretch.$repo.$pattern!.$devices[0]; + expect(device.$offset).to.equal(4); + }); + + it("Signifies when no pattern is found", function() { + generateFromFlaps([ + { id: 1, x: 0, y: 0, radius: 10 }, + { id: 2, x: 10, y: 11, radius: 3 }, + { id: 3, x: 11, y: 5, radius: 2 }, + ]); + const stretch = State.$stretches.get("1,2,3")!; + expect(stretch.$repo.$pattern).to.equal(null); + expect(UpdateResult.$flush().patternNotFound).to.be.true; + }); + + it("Caches repo during dragging", function() { + parseTree("(0,1,7),(0,2,4)", "(1,0,0,0,0),(2,8,9,0,0)"); + LayoutController.completeStretch("1,2"); + + const stretch = State.$stretches.get("1,2")!; + expect(stretch.$isActive).to.be.true; + const repo = stretch.$repo; + expect(repo.$configurations.length).to.equal(1); + const config = repo.$configuration!; + expect(config.$length).to.equal(2); + expect(config.$index).to.equal(0); + + LayoutController.switchPattern("1,2", 1); + expect(config.$index).to.equal(1); + + LayoutController.updateFlap([{ id: id2, x: 8, y: 10, width: 0, height: 0 }], true, []); + expect(stretch.$repo).to.not.equal(repo); + + LayoutController.updateFlap([{ id: id2, x: 8, y: 9, width: 0, height: 0 }], true, []); + LayoutController.dragEnd(); + expect(stretch.$isActive).to.be.true; + expect(stretch.$repo).to.equal(repo); + expect(config.$index).to.equal(1); + + LayoutController.updateFlap([{ id: id2, x: 11, y: 9, width: 0, height: 0 }], true, []); + expect(stretch.$isActive).to.be.false; + + LayoutController.updateFlap([{ id: id2, x: 8, y: 9, width: 0, height: 0 }], true, []); + LayoutController.dragEnd(); + expect(stretch.$isActive).to.be.true; + + // Not cached if not dragging + LayoutController.updateFlap([{ id: id2, x: 8, y: 10, width: 0, height: 0 }], false, []); + LayoutController.updateFlap([{ id: id2, x: 8, y: 9, width: 0, height: 0 }], false, []); + expect(stretch.$repo).to.not.equal(repo); + expect(stretch.$repo.$configuration!.$index).to.equal(0); + }); + + describe("Two flap patterns", twoFlapSpec); + describe("Three flap patterns", threeFlapSpec); +} + diff --git a/test/specs/pattern/threeFlap.spec.ts b/test/specs/pattern/threeFlap.spec.ts new file mode 100644 index 00000000..dabaae72 --- /dev/null +++ b/test/specs/pattern/threeFlap.spec.ts @@ -0,0 +1,148 @@ +import { State } from "core/service/state"; +import { generateFromFlaps } from "./util"; +import { node, parseTree } from "@utils/tree"; +import { toPath } from "core/math/geometry/rationalPath"; + +export default function() { + it("Does not depend on the ordering of flap ids nor the transformation factors", function() { + for(const [a, b, c] of THREE_PERMUTATION) { + generateFromFlaps([ + { id: a, x: 9, y: 5, radius: 2 }, + { id: b, x: 0, y: 0, radius: 8 }, + { id: c, x: 6, y: 8, radius: 2 }, + ]); + const stretch = State.$stretches.get("1,2,3")!; + expect(stretch).to.be.not.undefined; + expect(stretch.$repo.$configurations.length).to.equal(1); + expect(stretch.$repo.$configurations[0].$length).to.equal(1); + + const B = node(b)!; + expect(B.$graphics.$patternContours.length).to.be.equal(1); + + const path = toPath(B.$graphics.$patternContours[0]); + expect(path).to.equalPath("(8,3),(7,13/3),(7,6),(16/3,6),(4,7),(4,8)"); + } + for(const [a, b, c] of THREE_PERMUTATION) { + generateFromFlaps([ + { id: a, x: -9, y: 5, radius: 2 }, + { id: b, x: 0, y: 0, radius: 8 }, + { id: c, x: -6, y: 8, radius: 2 }, + ]); + const stretch = State.$stretches.get("1,2,3")!; + expect(stretch).to.be.not.undefined; + expect(stretch.$repo.$configurations.length).to.equal(1); + expect(stretch.$repo.$configurations[0].$length).to.equal(1); + + const B = node(b)!; + expect(B.$graphics.$patternContours.length).to.be.equal(1); + + const path = toPath(B.$graphics.$patternContours[0]); + expect(path).to.equalPath("(-4,8),(-4,7),(-16/3,6),(-7,6),(-7,13/3),(-8,3)"); + } + }); + + it("Renders river in between", function() { + for(const [a, b, c] of THREE_PERMUTATION) { + parseTree( + `(0,4,2),(0,5,2),(5,${a},4),(4,${b},2),(4,${c},2)`, + `(${a},0,0,0,0),(${b},9,5,0,0),(${c},6,8,0,0)` + ); + const r = node(4)!; + expect(r.$graphics.$patternContours.length).to.be.equal(1); + } + }); + + it("Half integral relay", function() { + for(const [a, b, c] of THREE_PERMUTATION) { + generateFromFlaps([ + { id: a, x: 0, y: 0, radius: 11 }, + { id: b, x: 8, y: 14, radius: 4 }, + { id: c, x: 15, y: 8, radius: 6 }, + ]); + const stretch = State.$stretches.get("1,2,3")!; + expect(stretch).to.be.not.undefined; + expect(stretch.$repo.$configurations.length).to.equal(1); + const config = stretch.$repo.$configurations[0]; + expect(config.$length).to.equal(2, "Two half integral patterns"); + } + }); + + it("Base join", function() { + for(const [a, b, c] of THREE_PERMUTATION) { + generateFromFlaps([ + { id: a, x: 0, y: 0, radius: 11 }, + { id: b, x: 7, y: 14, radius: 4 }, + { id: c, x: 15, y: 8, radius: 6 }, + ]); + const stretch = State.$stretches.get("1,2,3")!; + expect(stretch).to.be.not.undefined; + expect(stretch.$repo.$configurations.length).to.equal(1); + const config = stretch.$repo.$configurations[0]; + expect(config.$length).to.equal(1); + const pattern = config.$pattern!; + expect(pattern.$devices.length).to.equal(1); + const device = pattern.$devices[0]; + expect(device.$addOns.length).to.equal(0, "Base joins have no addOn"); + } + }); + + it("Standard join", function() { + for(const [a, b, c] of THREE_PERMUTATION) { + generateFromFlaps([ + { id: a, x: 0, y: 0, radius: 11 }, + { id: b, x: 5, y: 12, radius: 2 }, + { id: c, x: 15, y: 8, radius: 6 }, + ]); + const stretch = State.$stretches.get("1,2,3")!; + expect(stretch).to.be.not.undefined; + expect(stretch.$repo.$configurations.length).to.equal(1); + const config = stretch.$repo.$configurations[0]; + expect(config.$length).to.equal(2, "Should find two standard joins."); + const pattern = config.$pattern!; + expect(pattern.$devices.length).to.equal(1, "Standard join creates 1 Device"); + const device = pattern.$devices[0]; + expect(device.$addOns.length).to.equal(1, "Standard join will have 1 addOn"); + } + }); + + it("Split join", function() { + for(const [a, b, c] of THREE_PERMUTATION) { + generateFromFlaps([ + { id: a, x: 0, y: 0, radius: 15 }, + { id: b, x: 7, y: 20, radius: 6 }, + { id: c, x: 16, y: 12, radius: 5 }, + ]); + const stretch = State.$stretches.get("1,2,3")!; + expect(stretch).to.be.not.undefined; + expect(stretch.$repo.$configurations.length).to.equal(1); + const config = stretch.$repo.$configurations[0]; + expect(config.$length).to.equal(1); + const pattern = config.$pattern!; + expect(pattern.$devices.length).to.equal(2); + } + + for(const [a, b, c] of THREE_PERMUTATION) { + generateFromFlaps([ + { id: a, x: 0, y: 0, radius: 15 }, + { id: b, x: 20, y: 7, radius: 6 }, + { id: c, x: 12, y: 16, radius: 5 }, + ]); + const stretch = State.$stretches.get("1,2,3")!; + expect(stretch).to.be.not.undefined; + expect(stretch.$repo.$configurations.length).to.equal(1); + const config = stretch.$repo.$configurations[0]; + expect(config.$length).to.equal(1); + const pattern = config.$pattern!; + expect(pattern.$devices.length).to.equal(2); + } + }); +} + +const THREE_PERMUTATION = [ + [1, 2, 3], + [1, 3, 2], + [2, 1, 3], + [2, 3, 1], + [3, 1, 2], + [3, 2, 1], +]; diff --git a/test/specs/pattern/twoFlap.spec.ts b/test/specs/pattern/twoFlap.spec.ts new file mode 100644 index 00000000..3dd266e2 --- /dev/null +++ b/test/specs/pattern/twoFlap.spec.ts @@ -0,0 +1,60 @@ +import { State } from "core/service/state"; +import { generateFromFlaps } from "./util"; + +export default function() { + it("Finds universal GPS patterns", function() { + for(const [a, b] of TWO_PERMUTATION) { + generateFromFlaps([ + { id: a, x: 0, y: 0, radius: 6 }, + { id: b, x: 11, y: 5, radius: 6 }, + ]); + const stretch = State.$stretches.get("1,2")!; + expect(stretch).to.be.not.undefined; + expect(stretch.$repo.$configurations.length).to.equal(1); + const config = stretch.$repo.$configuration!; + expect(config.$length).to.equal(2); + const pattern = config.$pattern!; + expect(pattern.$devices.length).to.equal(1); + const device = pattern.$devices[0]; + expect(device.$gadgets.length).to.equal(1); + const gadget = device.$gadgets[0]; + expect(gadget.pieces.length).to.equal(2, "Universal GPS has two pieces"); + expect(gadget.$slack).to.include(0.25); + } + }); + + it("Find double relay patterns", function() { + for(const [a, b] of TWO_PERMUTATION) { + generateFromFlaps([ + { id: a, x: 0, y: 0, radius: 8 }, + { id: b, x: 10, y: 7, radius: 4 }, + ]); + const stretch = State.$stretches.get("1,2")!; + expect(stretch).to.be.not.undefined; + expect(stretch.$repo.$configurations.length).to.equal(4); + const config = stretch.$repo.$configuration!; + expect(config.$length).to.equal(1); + const pattern = config.$pattern!; + expect(pattern.$devices.length).to.equal(2); + } + + for(const [a, b] of TWO_PERMUTATION) { + generateFromFlaps([ + { id: a, x: 0, y: 0, radius: 8 }, + { id: b, x: 7, y: 10, radius: 4 }, + ]); + const stretch = State.$stretches.get("1,2")!; + expect(stretch).to.be.not.undefined; + expect(stretch.$repo.$configurations.length).to.equal(4); + const config = stretch.$repo.$configuration!; + expect(config.$length).to.equal(1); + const pattern = config.$pattern!; + expect(pattern.$devices.length).to.equal(2); + } + }); +} + +const TWO_PERMUTATION = [ + [1, 2], + [2, 1], +]; diff --git a/test/specs/pattern/util.ts b/test/specs/pattern/util.ts new file mode 100644 index 00000000..7ee20018 --- /dev/null +++ b/test/specs/pattern/util.ts @@ -0,0 +1,24 @@ +import { createTree } from "@utils/tree"; +import { State } from "core/service/state"; + +import type { Tree } from "core/design/context/tree"; + +export function complete(): void { + for(const stretch of State.$stretches.values()) stretch.$repo.$complete(); +} + +interface IFlap { + id: number; + x: number; + y: number; + radius: number; +} + +export function generateFromFlaps(flaps: IFlap[]): Tree { + const tree = createTree( + flaps.map(f => ({ n1: 0, n2: f.id, length: f.radius })), + flaps.map(f => ({ id: f.id, width: 0, height: 0, x: f.x, y: f.y })) + ); + complete(); + return tree; +} From 74c15bded48b26ed7bb243269e894827e435ddf3 Mon Sep 17 00:00:00 2001 From: Mu-Tsun Tsai Date: Thu, 25 Jan 2024 10:57:24 +0800 Subject: [PATCH 11/11] Fix positioning bug in 3-flap relay --- src/core/design/layout/configuration.ts | 6 +- src/core/design/layout/pattern/gadget.ts | 6 +- .../pattern/positioners/positioningContext.ts | 8 +-- .../positioners/singleJunctionPositioner.ts | 4 +- .../positioners/twoJunctionPositioner.ts | 10 ++-- src/shared/json/pattern.ts | 9 ++- test/specs/pattern/index.spec.ts | 2 + test/specs/pattern/positioning.spec.ts | 16 ++++++ test/specs/pattern/threeFlap.spec.ts | 56 ++++--------------- test/specs/pattern/twoFlap.spec.ts | 28 ++-------- test/specs/pattern/util.ts | 32 ++++++++++- 11 files changed, 91 insertions(+), 86 deletions(-) create mode 100644 test/specs/pattern/positioning.spec.ts diff --git a/src/core/design/layout/configuration.ts b/src/core/design/layout/configuration.ts index da0adc31..ab4b70df 100644 --- a/src/core/design/layout/configuration.ts +++ b/src/core/design/layout/configuration.ts @@ -111,8 +111,12 @@ export class Configuration implements ISerializable { return this._patterns.$length; } + public get $patterns(): readonly Pattern[] { + return this._patterns.$entries; + } + public get $pattern(): Pattern | null { - const patterns = this._patterns.$entries; + const patterns = this.$patterns; if(patterns.length === 0) return null; return patterns[this._index]; } diff --git a/src/core/design/layout/pattern/gadget.ts b/src/core/design/layout/pattern/gadget.ts index c3199306..2c6d9b14 100644 --- a/src/core/design/layout/pattern/gadget.ts +++ b/src/core/design/layout/pattern/gadget.ts @@ -39,11 +39,13 @@ export class Gadget implements JGadget { this.anchors = clone(data.anchors); // Must clone! } - @cache public get sx(): number { + /** The width of the stretch circumscribing rectangle (SCR). */ + @cache public get scrX(): number { return Math.ceil(this.$anchorMap[2][0].x) - Math.floor(this.$anchorMap[0][0].x); } - @cache public get sy(): number { + /** The height of the stretch circumscribing rectangle (SCR). */ + @cache public get scrY(): number { return Math.ceil(this.$anchorMap[2][0].y) - Math.floor(this.$anchorMap[0][0].y); } diff --git a/src/core/design/layout/pattern/positioners/positioningContext.ts b/src/core/design/layout/pattern/positioners/positioningContext.ts index 473203b4..c99ba360 100644 --- a/src/core/design/layout/pattern/positioners/positioningContext.ts +++ b/src/core/design/layout/pattern/positioners/positioningContext.ts @@ -47,7 +47,7 @@ export class PositioningContext { const r = this.$repo.$getMaxIntersectionDistance(j1, j2, oriented); if(j2.ox > j1.ox) [j1, j2] = [j2, j1]; let p: IPoint = { x: r - j2.ox, y: r - j1.oy }; - if(!oriented) p = { x: g.sx - p.x, y: g.sy - p.y }; + if(!oriented) p = { x: g.scrX - p.x, y: g.scrY - p.y }; return new Point(p); } @@ -102,8 +102,8 @@ export class PositioningContext { } else { // If there're mutual connections, we don't need to setup // the slack for real, but we keep a record for later usage. - const tx1 = g1.sx + g2.rx(q, corner.q!); - const tx2 = g2.sx + g1.rx(2 - q, opposite(corner.q!)); + const tx1 = g1.scrX + g2.rx(q, corner.q!); + const tx2 = g2.scrX + g1.rx(2 - q, opposite(corner.q!)); if(tx2 > tx1) this._slackMap.set(corner, tx2 - tx1); } } @@ -128,7 +128,7 @@ export class PositioningContext { while(overlapIndices.size > 0) { const first = getFirst(overlapIndices)!; overlapIndices.delete(first); - const result = this.$gadgets[first].sx + + const result = this.$gadgets[first].scrX + this._getSpan(first, 0, callback) + this._getSpan(first, 2, callback); if(result > maxSpan) maxSpan = result; diff --git a/src/core/design/layout/pattern/positioners/singleJunctionPositioner.ts b/src/core/design/layout/pattern/positioners/singleJunctionPositioner.ts index 50e41a48..57cc7c99 100644 --- a/src/core/design/layout/pattern/positioners/singleJunctionPositioner.ts +++ b/src/core/design/layout/pattern/positioners/singleJunctionPositioner.ts @@ -15,7 +15,7 @@ export function singleJunctionPositioner(context: PositioningContext): boolean { if(devices.length == 1) { // If there's only one GOPS, center it - devices[0].$offset = Math.floor((sx - devices[0].$gadgets[0].sx) / 2); + devices[0].$offset = Math.floor((sx - devices[0].$gadgets[0].scrX) / 2); return true; } @@ -23,7 +23,7 @@ export function singleJunctionPositioner(context: PositioningContext): boolean { if(devices.length == 2) { const [g1, g2] = devices.map(d => d.$gadgets[0]); const o2 = devices[1].$partition.$overlaps[0]; - const tx = g2.sx + g1.rx(o2.c[0].q!, 0); + const tx = g2.scrX + g1.rx(o2.c[0].q!, 0); // There's no need to check for total span here anymore, // as the general checking covers it already. diff --git a/src/core/design/layout/pattern/positioners/twoJunctionPositioner.ts b/src/core/design/layout/pattern/positioners/twoJunctionPositioner.ts index 1a111afa..954ecaaf 100644 --- a/src/core/design/layout/pattern/positioners/twoJunctionPositioner.ts +++ b/src/core/design/layout/pattern/positioners/twoJunctionPositioner.ts @@ -46,9 +46,9 @@ function makeTwoDeviceRelayPattern(context: PositioningContext): boolean { if(g2.$intersects(deltaPt, oriented ? QV[0] : QV[2])) return false; // Push them towards the shared corner as much as possible - const offsets = oriented ? - [Math.floor(g1.$slack[0]), 0] : - [j1.sx - context.$getSpan(g1, 2) - g1.sx, j2.sx - g2.sx]; + const slack = Math.floor(g1.$slack[oriented ? 0 : 2]); + const offsets = oriented ? [slack, 0] : + [j1.sx - context.$getSpan(g1, 2) - g1.scrX - slack, j2.sx - g2.scrX]; if(reversed) offsets.reverse(); context.$devices.forEach((d, i) => d.$offset = offsets[i]); return true; @@ -70,7 +70,7 @@ function makeSpitJoinPattern(context: PositioningContext): boolean { const j = context.$getJunctions(device)[0]; if(overlap.c[0].e! < 0) { const gadget = device.$gadgets[0]; - device.$offset = j.sx - context.$getSpan(gadget, 0) - gadget.sx; + device.$offset = j.sx - context.$getSpan(gadget, 0) - gadget.scrX; } } @@ -82,6 +82,6 @@ function pushJoinDeviceTowardsJoint(context: PositioningContext, device: Device) const oriented = j1.c[0].e == j2.c[0].e; if(!oriented) { const gadget = device.$gadgets[0]; - device.$offset = j1.sx - context.$getSpan(gadget, 0) - gadget.sx; + device.$offset = j1.sx - context.$getSpan(gadget, 0) - gadget.scrX; } } diff --git a/src/shared/json/pattern.ts b/src/shared/json/pattern.ts index 9787098a..3c6e7a71 100644 --- a/src/shared/json/pattern.ts +++ b/src/shared/json/pattern.ts @@ -43,7 +43,7 @@ export interface JConfiguration { } export interface JJunction extends JQuadrilateral { - /** The maximal space between the {@link Flap}s; always positive. */ + /** The width of the flap rectangle (FR); always positive. */ sx: number; /** Coefficients of transformation. */ @@ -105,9 +105,16 @@ export interface JAnchor { } export interface JPiece { + /** The width of the corresponding overlap rectangle (OR). */ ox: number; + + /** The height of the corresponding overlap rectangle (OR). */ oy: number; + + /** The width of the margin rectangle (MR). */ u: number; + + /** The height of the margin rectangle (MR). */ v: number; /** Detour in clockwise direction. The coordinates are before adding the shift. */ diff --git a/test/specs/pattern/index.spec.ts b/test/specs/pattern/index.spec.ts index 06b78ef6..ad350782 100644 --- a/test/specs/pattern/index.spec.ts +++ b/test/specs/pattern/index.spec.ts @@ -1,9 +1,11 @@ +import positioningSpec from "./positioning.spec"; import renderingSpec from "./rendering.spec"; import searchingSpec from "./searching.spec"; describe("Pattern", function() { describe("Searching", searchingSpec); + describe("Positioning", positioningSpec); describe("Rendering", renderingSpec); }); diff --git a/test/specs/pattern/positioning.spec.ts b/test/specs/pattern/positioning.spec.ts new file mode 100644 index 00000000..ac352cd3 --- /dev/null +++ b/test/specs/pattern/positioning.spec.ts @@ -0,0 +1,16 @@ +import { parseTree } from "@utils/tree"; +import { expectRepo } from "./util"; + +export default function() { + describe("Three flap relay", function() { + + it("Pushes gadgets towards the shared corner as much as possible", function() { + parseTree("(0,1,1),(0,2,18),(0,3,1)", "(1,7,18,0,0),(2,0,0,0,0),(3,9,17,0,0)"); + const devices = expectRepo("1,2,3", 1, 1, 2); + const device = devices.find(d => d.$gadgets[0].scrX == 3)!; + expect(device).to.be.not.undefined; + expect(device.$offset).to.equal(0); + }); + + }); +} diff --git a/test/specs/pattern/threeFlap.spec.ts b/test/specs/pattern/threeFlap.spec.ts index dabaae72..7fe0e7ad 100644 --- a/test/specs/pattern/threeFlap.spec.ts +++ b/test/specs/pattern/threeFlap.spec.ts @@ -1,5 +1,4 @@ -import { State } from "core/service/state"; -import { generateFromFlaps } from "./util"; +import { expectRepo, generateFromFlaps } from "./util"; import { node, parseTree } from "@utils/tree"; import { toPath } from "core/math/geometry/rationalPath"; @@ -11,10 +10,7 @@ export default function() { { id: b, x: 0, y: 0, radius: 8 }, { id: c, x: 6, y: 8, radius: 2 }, ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - expect(stretch.$repo.$configurations[0].$length).to.equal(1); + expectRepo("1,2,3", 1, 1); const B = node(b)!; expect(B.$graphics.$patternContours.length).to.be.equal(1); @@ -28,10 +24,7 @@ export default function() { { id: b, x: 0, y: 0, radius: 8 }, { id: c, x: -6, y: 8, radius: 2 }, ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - expect(stretch.$repo.$configurations[0].$length).to.equal(1); + expectRepo("1,2,3", 1, 1); const B = node(b)!; expect(B.$graphics.$patternContours.length).to.be.equal(1); @@ -59,11 +52,7 @@ export default function() { { id: b, x: 8, y: 14, radius: 4 }, { id: c, x: 15, y: 8, radius: 6 }, ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - const config = stretch.$repo.$configurations[0]; - expect(config.$length).to.equal(2, "Two half integral patterns"); + expectRepo("1,2,3", 1, 2); // Two half integral patterns } }); @@ -74,14 +63,7 @@ export default function() { { id: b, x: 7, y: 14, radius: 4 }, { id: c, x: 15, y: 8, radius: 6 }, ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - const config = stretch.$repo.$configurations[0]; - expect(config.$length).to.equal(1); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(1); - const device = pattern.$devices[0]; + const device = expectRepo("1,2,3", 1, 1, 1)[0]; expect(device.$addOns.length).to.equal(0, "Base joins have no addOn"); } }); @@ -93,14 +75,10 @@ export default function() { { id: b, x: 5, y: 12, radius: 2 }, { id: c, x: 15, y: 8, radius: 6 }, ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - const config = stretch.$repo.$configurations[0]; - expect(config.$length).to.equal(2, "Should find two standard joins."); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(1, "Standard join creates 1 Device"); - const device = pattern.$devices[0]; + const device = expectRepo("1,2,3", 1, + 2, //Should find two standard joins. + 1 // Standard join creates 1 Device + )[0]; expect(device.$addOns.length).to.equal(1, "Standard join will have 1 addOn"); } }); @@ -112,13 +90,7 @@ export default function() { { id: b, x: 7, y: 20, radius: 6 }, { id: c, x: 16, y: 12, radius: 5 }, ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - const config = stretch.$repo.$configurations[0]; - expect(config.$length).to.equal(1); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(2); + expectRepo("1,2,3", 1, 1, 2); } for(const [a, b, c] of THREE_PERMUTATION) { @@ -127,13 +99,7 @@ export default function() { { id: b, x: 20, y: 7, radius: 6 }, { id: c, x: 12, y: 16, radius: 5 }, ]); - const stretch = State.$stretches.get("1,2,3")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - const config = stretch.$repo.$configurations[0]; - expect(config.$length).to.equal(1); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(2); + expectRepo("1,2,3", 1, 1, 2); } }); } diff --git a/test/specs/pattern/twoFlap.spec.ts b/test/specs/pattern/twoFlap.spec.ts index 3dd266e2..a14f94e0 100644 --- a/test/specs/pattern/twoFlap.spec.ts +++ b/test/specs/pattern/twoFlap.spec.ts @@ -1,5 +1,4 @@ -import { State } from "core/service/state"; -import { generateFromFlaps } from "./util"; +import { expectRepo, generateFromFlaps } from "./util"; export default function() { it("Finds universal GPS patterns", function() { @@ -8,14 +7,7 @@ export default function() { { id: a, x: 0, y: 0, radius: 6 }, { id: b, x: 11, y: 5, radius: 6 }, ]); - const stretch = State.$stretches.get("1,2")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(1); - const config = stretch.$repo.$configuration!; - expect(config.$length).to.equal(2); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(1); - const device = pattern.$devices[0]; + const device = expectRepo("1,2", 1, 2, 1)[0]; expect(device.$gadgets.length).to.equal(1); const gadget = device.$gadgets[0]; expect(gadget.pieces.length).to.equal(2, "Universal GPS has two pieces"); @@ -29,13 +21,7 @@ export default function() { { id: a, x: 0, y: 0, radius: 8 }, { id: b, x: 10, y: 7, radius: 4 }, ]); - const stretch = State.$stretches.get("1,2")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(4); - const config = stretch.$repo.$configuration!; - expect(config.$length).to.equal(1); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(2); + expectRepo("1,2", 4, 1, 2); } for(const [a, b] of TWO_PERMUTATION) { @@ -43,13 +29,7 @@ export default function() { { id: a, x: 0, y: 0, radius: 8 }, { id: b, x: 7, y: 10, radius: 4 }, ]); - const stretch = State.$stretches.get("1,2")!; - expect(stretch).to.be.not.undefined; - expect(stretch.$repo.$configurations.length).to.equal(4); - const config = stretch.$repo.$configuration!; - expect(config.$length).to.equal(1); - const pattern = config.$pattern!; - expect(pattern.$devices.length).to.equal(2); + expectRepo("1,2", 4, 1, 2); } }); } diff --git a/test/specs/pattern/util.ts b/test/specs/pattern/util.ts index 7ee20018..3bd0e9ef 100644 --- a/test/specs/pattern/util.ts +++ b/test/specs/pattern/util.ts @@ -1,7 +1,10 @@ import { createTree } from "@utils/tree"; import { State } from "core/service/state"; +import type { Pattern } from "core/design/layout/pattern/pattern"; +import type { Configuration } from "core/design/layout/configuration"; import type { Tree } from "core/design/context/tree"; +import type { Device } from "core/design/layout/pattern/device"; export function complete(): void { for(const stretch of State.$stretches.values()) stretch.$repo.$complete(); @@ -15,10 +18,35 @@ interface IFlap { } export function generateFromFlaps(flaps: IFlap[]): Tree { - const tree = createTree( + return createTree( flaps.map(f => ({ n1: 0, n2: f.id, length: f.radius })), flaps.map(f => ({ id: f.id, width: 0, height: 0, x: f.x, y: f.y })) ); +} + +export function expectRepo(id: string, configCount: number): readonly Configuration[]; +export function expectRepo(id: string, configCount: number, patternCount: number): readonly Pattern[]; +export function expectRepo( + id: string, configCount: number, patternCount: number, deviceCount: number +): readonly Device[]; +export function expectRepo( + id: string, + configCount: number, + patternCount?: number, + deviceCount?: number +): readonly Configuration[] | readonly Pattern[] | readonly Device[] { + complete(); - return tree; + const stretch = State.$stretches.get(id)!; + expect(stretch).to.be.not.undefined; + expect(stretch.$repo.$configurations.length).to.equal(configCount); + if(patternCount === undefined) return stretch.$repo.$configurations; + + const config = stretch.$repo.$configurations[0]; + expect(config.$length).to.equal(patternCount); + if(deviceCount === undefined) return config.$patterns; + + const pattern = config.$pattern!; + expect(pattern.$devices.length).to.equal(deviceCount); + return pattern.$devices; }