From 06f26b10d510d7f9db545eb2bd562b30f017280c Mon Sep 17 00:00:00 2001 From: Joery <44531907+Joery-M@users.noreply.github.com> Date: Sun, 7 Apr 2024 16:40:56 +0200 Subject: [PATCH] Made basic layout for editor Removed controllers from safelight Fixed exports --- .../src/components/Editor/Library/Library.vue | 42 +++++- .../src/components/Editor/Monitor.vue | 62 --------- .../src/components/Editor/Monitor/Monitor.vue | 7 + .../Editor/Properties/ItemProperties.vue | 5 + .../components/Editor/Timeline/Timeline.vue | 68 ++++++++++ .../Compiler/EsbuildScriptCompiler.ts | 95 -------------- .../src/controllers/Decoder/AVdecoder.ts | 0 .../safelight/src/controllers/Media/Media.ts | 32 ----- .../src/controllers/Project/SimpleProject.ts | 21 --- .../src/controllers/Storage/IndexDbStorage.ts | 16 --- .../Storage/MediaStorage/IdbMediaManager.ts | 121 ------------------ .../safelight/src/controllers/Storage/db.ts | 53 -------- .../controllers/Timeline/SimpleTimeline.ts | 39 ------ .../TimelineItem/AVTimelineItem.ts | 14 -- .../safelight/src/controllers/base/Project.ts | 20 --- .../src/controllers/base/Renderer.ts | 0 .../safelight/src/controllers/base/Storage.ts | 16 --- .../src/controllers/base/Timeline.ts | 17 --- .../src/controllers/base/TimelineItem.ts | 24 ---- packages/safelight/src/style.scss | 1 + .../safelight/src/views/Editor/Editor.vue | 86 ++++++------- packages/shared/package.json | 4 +- packages/shared/src/base/Project.ts | 2 +- packages/timeline/package.json | 11 +- packages/timeline/src/Timeline.vue | 1 - pnpm-lock.yaml | 32 +++-- 26 files changed, 182 insertions(+), 607 deletions(-) delete mode 100644 packages/safelight/src/components/Editor/Monitor.vue create mode 100644 packages/safelight/src/components/Editor/Monitor/Monitor.vue create mode 100644 packages/safelight/src/components/Editor/Properties/ItemProperties.vue create mode 100644 packages/safelight/src/components/Editor/Timeline/Timeline.vue delete mode 100644 packages/safelight/src/controllers/Compiler/EsbuildScriptCompiler.ts delete mode 100644 packages/safelight/src/controllers/Decoder/AVdecoder.ts delete mode 100644 packages/safelight/src/controllers/Media/Media.ts delete mode 100644 packages/safelight/src/controllers/Project/SimpleProject.ts delete mode 100644 packages/safelight/src/controllers/Storage/IndexDbStorage.ts delete mode 100644 packages/safelight/src/controllers/Storage/MediaStorage/IdbMediaManager.ts delete mode 100644 packages/safelight/src/controllers/Storage/db.ts delete mode 100644 packages/safelight/src/controllers/Timeline/SimpleTimeline.ts delete mode 100644 packages/safelight/src/controllers/TimelineItem/AVTimelineItem.ts delete mode 100644 packages/safelight/src/controllers/base/Project.ts delete mode 100644 packages/safelight/src/controllers/base/Renderer.ts delete mode 100644 packages/safelight/src/controllers/base/Storage.ts delete mode 100644 packages/safelight/src/controllers/base/Timeline.ts delete mode 100644 packages/safelight/src/controllers/base/TimelineItem.ts diff --git a/packages/safelight/src/components/Editor/Library/Library.vue b/packages/safelight/src/components/Editor/Library/Library.vue index dff947e1..5220bcb2 100644 --- a/packages/safelight/src/components/Editor/Library/Library.vue +++ b/packages/safelight/src/components/Editor/Library/Library.vue @@ -79,9 +79,11 @@ diff --git a/packages/safelight/src/components/Editor/Monitor/Monitor.vue b/packages/safelight/src/components/Editor/Monitor/Monitor.vue new file mode 100644 index 00000000..59bb9432 --- /dev/null +++ b/packages/safelight/src/components/Editor/Monitor/Monitor.vue @@ -0,0 +1,7 @@ + + + diff --git a/packages/safelight/src/components/Editor/Properties/ItemProperties.vue b/packages/safelight/src/components/Editor/Properties/ItemProperties.vue new file mode 100644 index 00000000..c5769be3 --- /dev/null +++ b/packages/safelight/src/components/Editor/Properties/ItemProperties.vue @@ -0,0 +1,5 @@ + diff --git a/packages/safelight/src/components/Editor/Timeline/Timeline.vue b/packages/safelight/src/components/Editor/Timeline/Timeline.vue new file mode 100644 index 00000000..04e66b58 --- /dev/null +++ b/packages/safelight/src/components/Editor/Timeline/Timeline.vue @@ -0,0 +1,68 @@ + + + diff --git a/packages/safelight/src/controllers/Compiler/EsbuildScriptCompiler.ts b/packages/safelight/src/controllers/Compiler/EsbuildScriptCompiler.ts deleted file mode 100644 index 91f031de..00000000 --- a/packages/safelight/src/controllers/Compiler/EsbuildScriptCompiler.ts +++ /dev/null @@ -1,95 +0,0 @@ -import * as esbuild from 'esbuild-wasm'; -import esbuildWasmUrl from 'esbuild-wasm/esbuild.wasm?url'; -import Path from 'path-browserify'; - -// https://github.com/evanw/esbuild/issues/1952#issuecomment-1020006960 -function customResolver(tree: Record): esbuild.Plugin { - const map = new Map(Object.entries(tree)); - - return { - name: 'inmemory-plugin-file-resolver', - - setup: (build: esbuild.PluginBuild) => { - build.onResolve({ filter: /.*/ }, (args: esbuild.OnResolveArgs) => { - if (args.kind === 'entry-point') { - return { path: '/' + args.path }; - } - - if (args.kind === 'import-statement') { - const dirname = Path.dirname(args.importer); - - const path = Path.join(dirname, args.path); - - return { path }; - } - - throw Error('not resolvable'); - }); - - build.onLoad({ filter: /.*/ }, (args: esbuild.OnLoadArgs) => { - if (!map.has(args.path) && !map.has(args.path + '.ts')) { - throw Error('Could not load ' + args.path); - } - const ext = Path.extname(args.path) ?? '.ts'; - - const contents = map.get(args.path)!; - - const loader = - ext === '.ts' - ? 'ts' - : ext === '.tsx' - ? 'tsx' - : ext === '.js' - ? 'js' - : ext === '.jsx' - ? 'jsx' - : 'default'; - - return { contents, loader }; - }); - } - }; -} - -const esBuildOptions: esbuild.BuildOptions = { - target: ['es6'], - jsx: 'automatic', - minifyIdentifiers: true, - sourcemap: true -}; -// const esbuildTransformOptions: esbuild.TransformOptions = { -// target: ['es6'], -// loader: 'ts', -// jsx: 'automatic', -// minifyIdentifiers: true, -// sourcemap: true -// }; - -export default class EsBuildScriptCompiler { - private esbuildReady: Promise; - - constructor() { - esbuild.stop(); - this.esbuildReady = esbuild.initialize({ - wasmURL: esbuildWasmUrl - }); - } - - async compile(source: { title: string; content: string }[]) { - await this.esbuildReady; - - const tree: { [key: string]: string } = {}; - - source.forEach((file) => { - tree['/' + file.title] = file.content; - }); - - return await esbuild.build({ - ...esBuildOptions, - entryPoints: ['index.ts'], - bundle: false, - write: false, - plugins: [customResolver(tree)] - }); - } -} diff --git a/packages/safelight/src/controllers/Decoder/AVdecoder.ts b/packages/safelight/src/controllers/Decoder/AVdecoder.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/safelight/src/controllers/Media/Media.ts b/packages/safelight/src/controllers/Media/Media.ts deleted file mode 100644 index 87a00ac3..00000000 --- a/packages/safelight/src/controllers/Media/Media.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { type FileInfo } from 'ffprobe-wasm'; - -export default class Media { - public id = ref(); - public name = ref('Untitled Media'); - public previewImage = ref(); - public loaded = ref(false); - - /** - * @description The duration of this media item. By default it is set to 5 seconds, which will apply to images - * @default 5000 - */ - public duration = ref(0); - public fileInfo = ref(); - - constructor(mediaId: string) { - this.id.value = mediaId; - db.media.get({ id: mediaId }).then((med) => { - if (med) { - this.name.value = med.name; - - if (med.fileInfo) - this.duration.value = parseFloat(med.fileInfo.format.duration) * 1000; - if (med.previewImage) - this.previewImage.value = URL.createObjectURL(med.previewImage); - - this.id.value = med.id; - this.loaded.value = true; - } - }); - } -} diff --git a/packages/safelight/src/controllers/Project/SimpleProject.ts b/packages/safelight/src/controllers/Project/SimpleProject.ts deleted file mode 100644 index 208bb38c..00000000 --- a/packages/safelight/src/controllers/Project/SimpleProject.ts +++ /dev/null @@ -1,21 +0,0 @@ -import Media from '../Media/Media'; -import SimpleTimeline from '../Timeline/SimpleTimeline'; -import BaseProject, { type ProjectType } from '../base/Project'; - -export default class SimpleProject extends BaseProject { - public name = 'Untitled'; - public type: ProjectType = 'Simple'; - - public media: Media[] = reactive([]); - public timelines: SimpleTimeline[] = []; - public activeTimeline: SimpleTimeline; - - constructor() { - super(); - - const tl = new SimpleTimeline(); - - this.timelines = [tl]; - this.activeTimeline = tl; - } -} diff --git a/packages/safelight/src/controllers/Storage/IndexDbStorage.ts b/packages/safelight/src/controllers/Storage/IndexDbStorage.ts deleted file mode 100644 index a47b6047..00000000 --- a/packages/safelight/src/controllers/Storage/IndexDbStorage.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import BaseProject from '../base/Project'; -import type { SaveResults, StorageControllerType } from '../base/Storage'; -import BaseStorageController from '../base/Storage'; - -export default class IndexedDbStorageController extends BaseStorageController { - public type: StorageControllerType = 'IndexedDB'; - public version = '0.0.1'; - - public async Save(timeline: BaseProject): Promise { - return 'Error'; - } - public async Load(id: string): Promise { - return 'Not implemented'; - } -} diff --git a/packages/safelight/src/controllers/Storage/MediaStorage/IdbMediaManager.ts b/packages/safelight/src/controllers/Storage/MediaStorage/IdbMediaManager.ts deleted file mode 100644 index 16ddffcb..00000000 --- a/packages/safelight/src/controllers/Storage/MediaStorage/IdbMediaManager.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { generateMediaThumbnail } from '@/helpers/Video/GenerateMediaThumbnail'; -import { getVideoInfo } from '@/helpers/Video/GetVideoInfo'; -import { createMD5 } from 'hash-wasm'; -import { Observable } from 'rxjs'; -import { v4 as uuidv4 } from 'uuid'; -import type { StoredMedia } from '../db'; - -const chunkSize = 64 * 1024 * 1024; - -export default class IdbMediaManager { - static storedMedia = shallowRef([]); - - static storeMedia(file: File) { - return new Observable((subscriber) => { - // Thanks RxJs, makes sense - (async () => { - // Hash file - const reader = new FileReader(); - - const hasher = await createMD5(); - - function hashChunk(chunk: Blob) { - return new Promise((resolve) => { - reader.onload = async (e) => { - const view = new Uint8Array(e.target!.result! as ArrayBuffer); - hasher.update(view); - resolve(); - }; - - reader.readAsArrayBuffer(chunk); - }); - } - - const chunkNumber = Math.ceil(file.size / chunkSize); - - for (let i = 0; i <= chunkNumber; i++) { - const chunk = file.slice( - chunkSize * i, - Math.min(chunkSize * (i + 1), file.size) - ); - await hashChunk(chunk); - subscriber.next({ - hashProgress: Math.min(i / chunkNumber, 1), - type: 'hash' - }); - } - - const hash = hasher.digest(); - - // Check if a file with the same has already is stored, if so, use it - const existingMedia = await db.media.get({ - contentHash: hash - }); - - if (existingMedia) { - subscriber.next({ - type: 'done', - id: existingMedia.id, - hashProgress: 1 - }); - } else { - // Generate fileInfo - subscriber.next({ - type: 'fileInfo', - hashProgress: 1 - }); - const fileInfo = await getVideoInfo(file).catch(() => { - return undefined; - }); - - // Get thumbnail - subscriber.next({ - hashProgress: 1, - type: 'thumbnail' - }); - const thumbnail = (await generateMediaThumbnail(file)) ?? undefined; // Typescript shenanigans - - const uuid = uuidv4(); - - db.media.add({ - id: uuid, - name: file.name, - contentHash: hash, - data: file, - fileInfo: fileInfo, - previewImage: thumbnail - }); - subscriber.next({ - type: 'done', - id: uuid, - hashProgress: 1 - }); - } - - subscriber.complete(); - })(); - }); - } -} - -interface LoadMediaProgress { - type: 'fileInfo' | 'thumbnail' | 'hash' | 'done'; - id?: string; - hashProgress: number; -} - -db.media.hook.creating.subscribe(async () => { - IdbMediaManager.storedMedia.value = await db.media.toArray(); - triggerRef(IdbMediaManager.storedMedia); -}); -db.media.hook.deleting.subscribe(async () => { - IdbMediaManager.storedMedia.value = await db.media.toArray(); - triggerRef(IdbMediaManager.storedMedia); -}); -db.media.hook.updating.subscribe(async () => { - IdbMediaManager.storedMedia.value = await db.media.toArray(); - triggerRef(IdbMediaManager.storedMedia); -}); -db.media.toArray().then((media) => { - IdbMediaManager.storedMedia.value = media; -}); diff --git a/packages/safelight/src/controllers/Storage/db.ts b/packages/safelight/src/controllers/Storage/db.ts deleted file mode 100644 index 8d229e60..00000000 --- a/packages/safelight/src/controllers/Storage/db.ts +++ /dev/null @@ -1,53 +0,0 @@ -import Dexie, { type Table } from 'dexie'; -import type { FileInfo } from 'ffprobe-wasm'; -import type { ProjectType } from '../base/Project'; -import type { TimelineItemType } from '../base/TimelineItem'; - -export class SafelightIndexedDB extends Dexie { - media!: Table; - project!: Table; - - constructor() { - super('SafelightIdb'); - this.version(1).stores({ - media: 'id, name, contentHash', - project: 'id, name, type' - }); - } -} - -export interface StoredMedia { - id: string; - name: string; - contentHash: string; - fileInfo?: FileInfo; - previewImage?: Blob; - data: Blob; -} - -export interface StoredProject { - id: string; - name: string; - type: ProjectType; - media: Pick[]; - timelines: Pick[]; -} - -// TODO -export interface StoredTimeline { - id: string; -} -export interface StoredTimelineItem { - id: string; - type: TimelineItemType; - /** - * The ID of a stored media item. - * - * Media has to be a part of the project to be used. - */ - media?: Pick; - start?: number; - end?: number; -} - -export const db = new SafelightIndexedDB(); diff --git a/packages/safelight/src/controllers/Timeline/SimpleTimeline.ts b/packages/safelight/src/controllers/Timeline/SimpleTimeline.ts deleted file mode 100644 index f96a69db..00000000 --- a/packages/safelight/src/controllers/Timeline/SimpleTimeline.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { v4 as uuidv4 } from 'uuid'; -import type Media from '../Media/Media'; -import AVTimelineItem from '../TimelineItem/AVTimelineItem'; -import BaseTimeline, { type TimelineType } from '../base/Timeline'; -import type BaseTimelineItem from '../base/TimelineItem'; - -export default class SimpleTimeline extends BaseTimeline { - public name = 'Untitled'; - public id = uuidv4(); - public type: TimelineType = 'Simple'; - - public items: BaseTimelineItem[] = reactive([]); - - public duration = 0; - public viewportWidth = 1920; - public viewportWeight = 1080; - public framerate = 60; - - constructor() { - super(); - this.duration = 0; - this.width = 1920; - this.height = 1080; - this.framerate = 60; - } - - createTimelineItem(media: Media) { - console.log(media); - const ti = new AVTimelineItem(this); - - ti.media.value = media; - ti.layer = this.items.length; - this.items.push(ti); - - return ti; - } - - updateDuration() {} -} diff --git a/packages/safelight/src/controllers/TimelineItem/AVTimelineItem.ts b/packages/safelight/src/controllers/TimelineItem/AVTimelineItem.ts deleted file mode 100644 index 532ba866..00000000 --- a/packages/safelight/src/controllers/TimelineItem/AVTimelineItem.ts +++ /dev/null @@ -1,14 +0,0 @@ -import Media from '../Media/Media'; -import type SimpleTimeline from '../Timeline/SimpleTimeline'; -import type { TimelineItemType } from '../base/TimelineItem'; - -export default class AVTimelineItem extends TimelineItem { - public type: TimelineItemType = 'AudioVideo'; - public media = ref(); - - constructor(public parentTimeline: SimpleTimeline) { - super(); - } - - public RenderVideoFrame() {} -} diff --git a/packages/safelight/src/controllers/base/Project.ts b/packages/safelight/src/controllers/base/Project.ts deleted file mode 100644 index 60a65485..00000000 --- a/packages/safelight/src/controllers/base/Project.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type SimpleProject from '../Project/SimpleProject'; -import type Media from '../Media/Media'; -import type BaseTimeline from './Timeline'; - -export default abstract class BaseProject { - public abstract name: string; - public type: ProjectType = 'Base'; - - public abstract media: Media[]; - public abstract timelines: BaseTimeline[]; - - isBaseProject(): this is BaseProject { - return this.type == 'Base'; - } - isBaseSimpleProject(): this is SimpleProject { - return this.type == 'Simple'; - } -} - -export type ProjectType = 'Base' | 'Simple'; diff --git a/packages/safelight/src/controllers/base/Renderer.ts b/packages/safelight/src/controllers/base/Renderer.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/safelight/src/controllers/base/Storage.ts b/packages/safelight/src/controllers/base/Storage.ts deleted file mode 100644 index 71bab20e..00000000 --- a/packages/safelight/src/controllers/base/Storage.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type IndexedDbStorageController from '../Storage/IndexDbStorage'; -import type BaseProject from './Project'; - -export default abstract class BaseStorageController { - public abstract type: StorageControllerType; - public version: string = '0.0.0'; - - abstract Save(project: BaseProject): Promise | SaveResults; - - abstract Load(projectId: string): Promise | (BaseProject | string); - - isIndexDBstorage = (): this is IndexedDbStorageController => this.type == 'IndexedDB'; -} - -export type StorageControllerType = 'IndexedDB'; -export type SaveResults = 'Success' | 'Cancelled' | (string & {}); diff --git a/packages/safelight/src/controllers/base/Timeline.ts b/packages/safelight/src/controllers/base/Timeline.ts deleted file mode 100644 index b1979d20..00000000 --- a/packages/safelight/src/controllers/base/Timeline.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type SimpleTimeline from '../Timeline/SimpleTimeline'; - -export default abstract class BaseTimeline { - public abstract name: string; - public abstract id: string; - public type: TimelineType = 'Base'; - - public width = 1920; - public height = 1080; - - public abstract duration: number; - - isBaseTimeline = (): this is BaseTimeline => this.type == 'Base'; - isSimpleTimeline = (): this is SimpleTimeline => this.type == 'Simple'; -} - -export type TimelineType = 'Base' | 'Simple'; diff --git a/packages/safelight/src/controllers/base/TimelineItem.ts b/packages/safelight/src/controllers/base/TimelineItem.ts deleted file mode 100644 index f63bc9ca..00000000 --- a/packages/safelight/src/controllers/base/TimelineItem.ts +++ /dev/null @@ -1,24 +0,0 @@ -import Timecode, { type TimecodeRef } from '@safelight/shared/timecode'; -import { v4 as uuidv4 } from 'uuid'; -import type AVTimelineItem from '../TimelineItem/AVTimelineItem'; -import type BaseTimeline from './Timeline'; - -export default abstract class BaseTimelineItem { - public id = uuidv4(); - public layer = 0; - public abstract type: TimelineItemType; - public abstract parentTimeline: BaseTimeline; - - public start = Timecode.from(0); - public end = Timecode.from(0); - - public onMove(newStart: TimecodeRef) { - this.start = newStart; - - if (this.parentTimeline.isSimpleTimeline()) this.parentTimeline.updateDuration(); - } - - isAudioVideo = (): this is AVTimelineItem => this.type == 'AudioVideo'; -} - -export type TimelineItemType = 'AudioVideo' | 'EffectLayer'; diff --git a/packages/safelight/src/style.scss b/packages/safelight/src/style.scss index d56fdc37..cf60635c 100644 --- a/packages/safelight/src/style.scss +++ b/packages/safelight/src/style.scss @@ -57,6 +57,7 @@ body { // color: var(--color-text); // background: var(--color-background); + margin: 0; transition: color 0.5s, background-color 0.5s; line-height: 1.6; font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, diff --git a/packages/safelight/src/views/Editor/Editor.vue b/packages/safelight/src/views/Editor/Editor.vue index 4fdbdd14..5363bb15 100644 --- a/packages/safelight/src/views/Editor/Editor.vue +++ b/packages/safelight/src/views/Editor/Editor.vue @@ -1,60 +1,46 @@ + + { "path": "/editor", diff --git a/packages/shared/package.json b/packages/shared/package.json index 80b4954e..bb73eb95 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -4,9 +4,7 @@ "private": "true", "type": "module", "exports": { - "./timecode": { - "default": "./src/Timecode.ts" - } + "./*": "./src/*.ts" }, "dependencies": { "@vueuse/core": "^10.9.0", diff --git a/packages/shared/src/base/Project.ts b/packages/shared/src/base/Project.ts index 60a65485..d9559281 100644 --- a/packages/shared/src/base/Project.ts +++ b/packages/shared/src/base/Project.ts @@ -12,7 +12,7 @@ export default abstract class BaseProject { isBaseProject(): this is BaseProject { return this.type == 'Base'; } - isBaseSimpleProject(): this is SimpleProject { + isSimpleProject(): this is SimpleProject { return this.type == 'Simple'; } } diff --git a/packages/timeline/package.json b/packages/timeline/package.json index f9debc47..d7e85549 100644 --- a/packages/timeline/package.json +++ b/packages/timeline/package.json @@ -11,15 +11,12 @@ "main": "./dist/index.cjs", "module": "./dist/index.mjs", "exports": { + "./style.css": "./dist/style.css", ".": { "import": "./dist/index.mjs", - "require": "./dist/index.cjs" - }, - "./*": [ - "./packages/timeline/src/*", - "./src/*" - ], - "./style.css": "./dist/style.css" + "require": "./dist/index.cjs", + "types": "./dist/index.d.ts" + } }, "types": "./dist/index.d.ts", "scripts": { diff --git a/packages/timeline/src/Timeline.vue b/packages/timeline/src/Timeline.vue index 317bd609..85ff4d7a 100644 --- a/packages/timeline/src/Timeline.vue +++ b/packages/timeline/src/Timeline.vue @@ -192,7 +192,6 @@ function endResize(ev: MouseEvent) { #horizontalContainer { display: flex; - height: 250px; } #verticalContainer { flex-grow: 1; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 581ad797..b929802f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -427,8 +427,8 @@ packages: picocolors: 1.0.0 dev: false - /@babel/generator@7.24.1: - resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==} + /@babel/generator@7.24.4: + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 @@ -482,8 +482,8 @@ packages: picocolors: 1.0.0 dev: false - /@babel/parser@7.24.1: - resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: @@ -494,7 +494,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 dev: false @@ -503,12 +503,12 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.1 + '@babel/generator': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 @@ -622,7 +622,7 @@ packages: resolution: {integrity: sha512-uOuWqxRv0OB9mV4x+dPGkAEw4P5oPtzcqqldM1VN9nXjLAp5K+3rq3dE6pOgOvUxO7pzJ4GVm2fs+XIUKTXBCQ==} dependencies: '@agoric/babel-generator': 7.17.6 - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 ses: 1.4.0 @@ -1855,7 +1855,7 @@ packages: '@vitest/utils': 1.4.0 magic-string: 0.30.8 sirv: 2.0.4 - vitest: 1.4.0(@types/node@20.12.3)(@vitest/browser@1.4.0)(@vitest/ui@1.4.0)(jsdom@24.0.0) + vitest: 1.4.0(@vitest/browser@1.4.0)(@vitest/ui@1.4.0) webdriverio: 8.35.1(typescript@5.4.3) dev: true @@ -1901,7 +1901,7 @@ packages: pathe: 1.1.2 picocolors: 1.0.0 sirv: 2.0.4 - vitest: 1.4.0(@types/node@20.12.3)(@vitest/browser@1.4.0)(@vitest/ui@1.4.0)(jsdom@24.0.0) + vitest: 1.4.0(@vitest/browser@1.4.0)(@vitest/ui@1.4.0) dev: true /@vitest/utils@1.4.0: @@ -1974,7 +1974,7 @@ packages: /@vue/compiler-core@3.4.21: resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} dependencies: - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@vue/shared': 3.4.21 entities: 4.5.0 estree-walker: 2.0.2 @@ -1989,7 +1989,7 @@ packages: /@vue/compiler-sfc@3.4.21: resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} dependencies: - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@vue/compiler-core': 3.4.21 '@vue/compiler-dom': 3.4.21 '@vue/compiler-ssr': 3.4.21 @@ -2432,7 +2432,7 @@ packages: resolution: {integrity: sha512-qdwwKEhckRk0XE22/xDdmU3v/60E8Edu4qFhgTLIhGGDs/PAJwLw9pQn8Rj99PitlbBZbYpx0k/lbir4kg0SuA==} engines: {node: '>=16.14.0'} dependencies: - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 '@rollup/pluginutils': 5.1.0 pathe: 1.1.2 transitivePeerDependencies: @@ -2443,7 +2443,7 @@ packages: resolution: {integrity: sha512-O+33g7x6irsESUcd47KdfWUrS2F6aGp9KeVJFGj0YjIznfXpBxVGjA0w+y/1OKqX4mFOfmZ9Xpf1ixPT4n9xxw==} engines: {node: '>=16.14.0'} dependencies: - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 pathe: 1.1.2 dev: true @@ -2458,7 +2458,7 @@ packages: resolution: {integrity: sha512-0ZdQEsSfH3mX4BFbRCc3xOBjx5bDbm73+aAdQOHerPQNf8K0XFMAv79ucd2BpnSc4UMyvBDixiroT8yjm2Y6bw==} engines: {node: '>=16.14.0'} dependencies: - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.4 ast-kit: 0.12.1 dev: true @@ -2836,7 +2836,6 @@ packages: /commander@9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} - requiresBuild: true dev: true /compress-commons@6.0.2: @@ -5824,7 +5823,6 @@ packages: /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - requiresBuild: true dev: true /source-map@0.7.4: