fix(fe2): more fixes and performance improvements (#5281)

* fix(fe2): further preview image cleanup/optimization

* server log streaming

* more hydration mismatch fixes

* lint fix
This commit is contained in:
Kristaps Fabians Geikins
2025-08-21 09:57:47 +03:00
committed by GitHub
parent d17113c154
commit 9688ef68ea
14 changed files with 140 additions and 609 deletions
@@ -112,7 +112,7 @@ const {
hasDoneFirstLoad,
isPanoramaPlaceholder
} = usePreviewImageBlob(basePreviewUrl, {
enabled: isInViewport,
enabled: computed(() => props.eagerLoad || isInViewport.value),
eagerLoad: props.eagerLoad
})
@@ -1,21 +1,21 @@
import { BaseError } from '~~/lib/core/errors/base'
export class InvalidLoginParametersError extends BaseError {
static defaultMessage = 'Invalid parameters for logging in!'
static override defaultMessage = 'Invalid parameters for logging in!'
}
export class AuthFailedError extends BaseError {
static defaultMessage = 'Logging in failed!'
static override defaultMessage = 'Logging in failed!'
}
export class InvalidRegisterParametersError extends BaseError {
static defaultMessage = 'Invalid parameters for signing up!'
static override defaultMessage = 'Invalid parameters for signing up!'
}
export class PasswordResetError extends BaseError {
static defaultMessage = 'Something went wrong while resetting password'
static override defaultMessage = 'Something went wrong while resetting password'
}
export class OnboardingError extends BaseError {
static defaultMessage = 'Something went wrong while onboarding the user'
static override defaultMessage = 'Something went wrong while onboarding the user'
}
@@ -1,5 +1,5 @@
import { BaseError } from '~~/lib/core/errors/base'
export class AutomationPublicKeysRetrievalError extends BaseError {
static defaultMessage = 'Failed to retrieve automation public keys'
static override defaultMessage = 'Failed to retrieve automation public keys'
}
@@ -19,7 +19,7 @@ export type SuccessfullyUploadedFileItem = Merge<
>
export class BlobRetrievalError extends BaseError {
static defaultMessage = 'An error occurred while trying to retrieve the blob'
static override defaultMessage = 'An error occurred while trying to retrieve the blob'
}
export function isSuccessfullyUploaded(
@@ -216,7 +216,7 @@ export function uploadFiles(params: {
}
export class BlobDeleteFailedError extends BaseError {
static defaultMessage = 'Unable to delete the file'
static override defaultMessage = 'Unable to delete the file'
}
export async function deleteBlob(params: {
@@ -366,10 +366,10 @@ function createCache(): InMemoryCache {
)
},
plan: {
merge: incomingOverwritesExistingMergeFunction
merge: mergeAsObjectsFunction
},
planPrices: {
merge: incomingOverwritesExistingMergeFunction
merge: mergeAsObjectsFunction
},
projects: {
keyArgs: ['filter', 'limit'],
+1 -1
View File
@@ -9,5 +9,5 @@ export {
} from '@speckle/ui-components'
export class ResourceLoadError extends BaseError {
static defaultMessage = 'External resource failed to load'
static override defaultMessage = 'External resource failed to load'
}
@@ -32,7 +32,7 @@ export const prettify = (log: object, msg: string) =>
* Wrap any logger call w/ logic that prettifies the error message like pino-pretty does
* and emits bindings if they are provided
*/
const prettifiedLoggerFactory =
export const prettifiedLoggerFactory =
(logger: (...args: unknown[]) => void, bindings?: () => Record<string, unknown>) =>
(...vals: unknown[]) => {
const finalVals = vals.slice()
@@ -1,5 +1,5 @@
import type { MaybeRef } from '@vueuse/core'
import type { MaybeNullOrUndefined, Nullable } from '@speckle/shared'
import type { Nullable } from '@speckle/shared'
import { onProjectVersionsPreviewGeneratedSubscription } from '~~/lib/projects/graphql/subscriptions'
import { useSubscription } from '@vue/apollo-composable'
import { useLock } from '~~/lib/common/composables/singleton'
@@ -72,18 +72,14 @@ export function usePreviewImageBlob(
const logger = useLogger()
const lazyLoad = !eagerLoad
const url = ref<Nullable<string>>(
(eagerLoad ? unref(previewUrl) : PreviewPlaceholder) || null
)
const hasDoneFirstLoad = ref(eagerLoad)
const url = ref<Nullable<string>>(PreviewPlaceholder)
const hasDoneFirstLoad = ref(false)
const panoramaUrl = ref(null as Nullable<string>)
const isLoadingPanorama = ref(false)
const shouldLoadPanorama = ref(false)
const basePanoramaUrl = computed(() => unref(previewUrl) + '/all')
const isEnabled = computed(() => {
if (import.meta.server) return true // always true on server
if (eagerLoad) return true // always true if eagerLoad
return unref(enabled)
})
const cacheBust = ref(0)
@@ -95,21 +91,10 @@ export function usePreviewImageBlob(
isLoadingPanorama,
shouldLoadPanorama,
hasDoneFirstLoad: computed(() => hasDoneFirstLoad.value),
isPanoramaPlaceholder: computed(() => isPanoramaPlaceholder.value)
isPanoramaPlaceholder: computed(() => isPanoramaPlaceholder.value),
wasEagerLoaded: eagerLoad
}
// Preload the image
const directPreviewUrl = unref(previewUrl)
useHead({
link: [
...(directPreviewUrl?.length
? [{ rel: 'preload', as: <const>'image', href: directPreviewUrl }]
: [])
]
})
if (import.meta.server) return ret
const previewUrlPath = computed(() => {
const basePreviewUrl = unref(previewUrl)
if (!basePreviewUrl) return null
@@ -139,6 +124,8 @@ export function usePreviewImageBlob(
return val
})
const isPreviewServiceUrl = computed(() => !!projectId.value)
const { hasLock } = useLock(
computed(() => `useProjectModelUpdateTracking-${unref(previewUrl) || ''}`)
)
@@ -147,7 +134,10 @@ export function usePreviewImageBlob(
() => ({
id: projectId.value || ''
}),
() => ({ enabled: !!projectId.value && hasLock.value && isEnabled.value })
() => ({
enabled:
!!projectId.value && hasLock.value && isEnabled.value && !import.meta.server
})
)
onProjectPreviewGenerated((res) => {
@@ -162,13 +152,14 @@ export function usePreviewImageBlob(
}
if (regenerate) {
regeneratePreviews()
void regeneratePreviews()
}
})
async function processBasePreviewUrl(basePreviewUrl: MaybeNullOrUndefined<string>) {
async function processBasePreviewUrl() {
if (!isEnabled.value) return
const basePreviewUrl = unref(previewUrl)
try {
if (!basePreviewUrl) {
url.value = PreviewPlaceholder
@@ -207,7 +198,7 @@ export function usePreviewImageBlob(
}
async function processPanoramaPreviewUrl() {
if (!isEnabled.value) return
if (!isEnabled.value || import.meta.server) return
const basePreviewUrl = unref(previewUrl)
try {
@@ -251,34 +242,51 @@ export function usePreviewImageBlob(
}
}
const regeneratePreviews = async (basePreviewUrl?: string) => {
const regeneratePreviews = async () => {
cacheBust.value++
await Promise.all([
processBasePreviewUrl(basePreviewUrl || unref(previewUrl)),
processBasePreviewUrl(),
...(shouldLoadPanorama.value ? [processPanoramaPreviewUrl()] : [])
])
}
watch(shouldLoadPanorama, (newVal) => {
if (newVal) processPanoramaPreviewUrl()
})
if (import.meta.client) {
watch(shouldLoadPanorama, (newVal) => {
if (newVal) processPanoramaPreviewUrl()
})
watch(
() => unref(previewUrl),
(newVal) => {
void regeneratePreviews(newVal || undefined)
},
{ immediate: true }
)
watch(
() => unref(previewUrl),
() => {
void regeneratePreviews()
},
{ immediate: true }
)
watch(
() => isEnabled.value,
(newVal) => {
if (!newVal) return
watch(
() => isEnabled.value,
(newVal) => {
if (!newVal) return
void regeneratePreviews()
}
)
void regeneratePreviews()
}
)
} else {
onServerPrefetch(async () => {
await regeneratePreviews()
// Preload the image
if (isPreviewServiceUrl && url.value?.length) {
useHead({
link: [
...(url.value?.length
? [{ rel: 'preload', as: <const>'image', href: url.value }]
: [])
]
})
}
})
}
return ret
}
@@ -57,7 +57,7 @@ export class PassReader extends Extension {
return renderer.properties.get(pass.outputTarget).__webglFramebuffer !== undefined
}
public onRender(): void {
public override onRender(): void {
if (!this.needsRead || !this.renderTarget) return
const renderer = this.viewer.getRenderer().renderer
+3
View File
@@ -260,5 +260,8 @@ export default defineNuxtConfig({
},
prometheus: {
verbose: false
},
features: {
devLogs: true
}
})
+45 -5
View File
@@ -1,5 +1,6 @@
import { collectLongTrace } from '@speckle/shared'
import { omit } from 'lodash-es'
import type { LogType } from 'consola'
import { get, omit } from 'lodash-es'
import type { SetRequired } from 'type-fest'
import { useReadUserId } from '~/lib/auth/composables/activeUser'
import {
@@ -31,7 +32,7 @@ const simpleStripHtml = (str: string) => str.replace(/<[^>]*>?/gm, '')
export default defineNuxtPlugin(async (nuxtApp) => {
const {
public: {
logLevel,
logLevel: untypedLogLevel,
logPretty,
logClientApiToken,
speckleServerVersion,
@@ -40,6 +41,8 @@ export default defineNuxtPlugin(async (nuxtApp) => {
logCsrEmitProps
}
} = useRuntimeConfig()
const logLevel = untypedLogLevel as LogType
const route = useRoute()
const router = useRouter()
const reqId = useRequestId()
@@ -71,9 +74,12 @@ export default defineNuxtPlugin(async (nuxtApp) => {
const unhandledErrorHandlers: AbstractUnhandledErrorHandler[] = []
if (import.meta.server) {
const { buildLogger, enableDynamicBindings, serializeRequest } = await import(
'~/server/lib/core/helpers/observability'
)
const {
buildLogger,
enableDynamicBindings,
serializeRequest,
prettifiedLoggerFactory
} = await import('~/server/lib/core/helpers/observability')
logger = enableDynamicBindings(buildLogger(logLevel, logPretty).child({}), () => ({
...collectMainInfo({ isBrowser: false }),
...(nuxtApp.ssrContext
@@ -90,6 +96,33 @@ export default defineNuxtPlugin(async (nuxtApp) => {
'res'
])
})
// Send to consola for SSR log streaming
const { consola, LogLevels } = await import('consola')
// remove print to stdout, pino already handles all that
consola.setReporters(
consola.options.reporters.filter(
(r) => get(r, 'constructor.name') !== 'FancyReporter'
)
)
consola.level = LogLevels[logLevel] || 0
const unhandledHandler: AbstractUnhandledErrorHandler = ({
error,
message,
isUnhandledRejection
}) => {
consola.error({ err: error, isUnhandledRejection }, message)
}
unhandledErrorHandlers.push(unhandledHandler)
const errorHandler: AbstractLoggerHandler = ({ args, level }) => {
// applying pino-like message templating, cause consola doesnt have it
// the arg slice is TS appeasement
prettifiedLoggerFactory(consola[level])(args[0], ...args.slice(1))
}
logHandlers.push(errorHandler)
} else {
const localTimeFormat = new Intl.DateTimeFormat('en-GB', {
dateStyle: 'full',
@@ -326,6 +359,13 @@ export default defineNuxtPlugin(async (nuxtApp) => {
speckleServerVersion
})
})
} else {
nuxtApp.hook('app:rendered', () => {
logger.info('App SSR rendered', {
important: true,
speckleServerVersion
})
})
}
return {
@@ -3,6 +3,7 @@ import type { IncomingMessage } from 'node:http'
import { get } from 'lodash-es'
import type { Logger } from 'pino'
import type express from 'express'
import { prettifiedLoggerFactory } from '~/lib/core/helpers/observability'
const redactedReqHeaders = ['authorization', 'cookie']
@@ -65,3 +66,5 @@ export const getRequestPath = (req: IncomingMessage | express.Request) => {
)[0] as string
return path?.length ? path : null
}
export { prettifiedLoggerFactory }
+14 -4
View File
@@ -1,4 +1,4 @@
import { Page, Browser } from 'puppeteer'
import { Page, Browser, type ConsoleMessage } from 'puppeteer'
import type { Logger } from 'pino'
import type {
@@ -30,6 +30,16 @@ type PageArgs = SharedArgs & {
page: Page
}
const serializeConsoleMessage = (msg: ConsoleMessage): Record<string, unknown> => {
return {
type: msg.type(),
text: msg.text(),
args: msg.args(),
stackTrace: msg.stackTrace(),
location: msg.location()
}
}
export const jobProcessor = async ({
logger,
browser,
@@ -98,13 +108,13 @@ const pageFunction = async ({
case 'debug':
logger.debug(msg.text())
case 'error':
logger.warn({ err: msg }, 'Page error')
logger.warn({ err: serializeConsoleMessage(msg) }, 'Page error')
break
case 'warn':
logger.info({ err: msg }, msg.text())
logger.info({ err: serializeConsoleMessage(msg) }, msg.text())
break
default:
logger.debug({ msg }, msg.text())
logger.debug({ msg: serializeConsoleMessage(msg) }, msg.text())
break
}
})
+10 -543
View File
@@ -2630,29 +2630,6 @@ __metadata:
languageName: node
linkType: hard
"@babel/core@npm:^7.23.7":
version: 7.24.0
resolution: "@babel/core@npm:7.24.0"
dependencies:
"@ampproject/remapping": "npm:^2.2.0"
"@babel/code-frame": "npm:^7.23.5"
"@babel/generator": "npm:^7.23.6"
"@babel/helper-compilation-targets": "npm:^7.23.6"
"@babel/helper-module-transforms": "npm:^7.23.3"
"@babel/helpers": "npm:^7.24.0"
"@babel/parser": "npm:^7.24.0"
"@babel/template": "npm:^7.24.0"
"@babel/traverse": "npm:^7.24.0"
"@babel/types": "npm:^7.24.0"
convert-source-map: "npm:^2.0.0"
debug: "npm:^4.1.0"
gensync: "npm:^1.0.0-beta.2"
json5: "npm:^2.2.3"
semver: "npm:^6.3.1"
checksum: 10/1e22215cc89e061e0cbfed72f265ad24d363f3e9b24b51e9c4cf3ccb9222260a29a1c1e62edb439cb7e2229a3fce924edd43300500416613236c13fc8d62a947
languageName: node
linkType: hard
"@babel/core@npm:^7.23.9":
version: 7.24.3
resolution: "@babel/core@npm:7.24.3"
@@ -2805,18 +2782,6 @@ __metadata:
languageName: node
linkType: hard
"@babel/generator@npm:^7.23.6":
version: 7.23.6
resolution: "@babel/generator@npm:7.23.6"
dependencies:
"@babel/types": "npm:^7.23.6"
"@jridgewell/gen-mapping": "npm:^0.3.2"
"@jridgewell/trace-mapping": "npm:^0.3.17"
jsesc: "npm:^2.5.1"
checksum: 10/864090d5122c0aa3074471fd7b79d8a880c1468480cbd28925020a3dcc7eb6e98bedcdb38983df299c12b44b166e30915b8085a7bc126e68fa7e2aadc7bd1ac5
languageName: node
linkType: hard
"@babel/generator@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/generator@npm:7.24.1"
@@ -4457,17 +4422,6 @@ __metadata:
languageName: node
linkType: hard
"@babel/helpers@npm:^7.24.0":
version: 7.24.0
resolution: "@babel/helpers@npm:7.24.0"
dependencies:
"@babel/template": "npm:^7.24.0"
"@babel/traverse": "npm:^7.24.0"
"@babel/types": "npm:^7.24.0"
checksum: 10/cc82012161b30185c2698da359c7311cf019f0932f8fcb805e985fec9e0053c354f0534dc9961f3170eee579df6724eecd34b0f5ffaa155cdd456af59fbff86e
languageName: node
linkType: hard
"@babel/helpers@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/helpers@npm:7.24.1"
@@ -7975,20 +7929,6 @@ __metadata:
languageName: node
linkType: hard
"@babel/standalone@npm:^7.22.9":
version: 7.23.4
resolution: "@babel/standalone@npm:7.23.4"
checksum: 10/41182a8a1b276ac2a82c062d82a08eae83a51715e266850451aeafb03507a7f29201e1d21af22ebe5ca59f66aaaa6ec7735fc7cd030383e829cc3ce0116f1f7d
languageName: node
linkType: hard
"@babel/standalone@npm:^7.23.8":
version: 7.24.0
resolution: "@babel/standalone@npm:7.24.0"
checksum: 10/a5ff8292f0cf94719245e17dd4b850458851eb80db1da8dc034cfef210a3af5474e7ba923e7faaf76ef3f62ea3b0e7f5a4a96413da4868440f2a65288733d00b
languageName: node
linkType: hard
"@babel/standalone@npm:^7.26.4":
version: 7.26.4
resolution: "@babel/standalone@npm:7.26.4"
@@ -8084,7 +8024,7 @@ __metadata:
languageName: node
linkType: hard
"@babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.7, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.17.10, @babel/traverse@npm:^7.17.3, @babel/traverse@npm:^7.17.9, @babel/traverse@npm:^7.18.0, @babel/traverse@npm:^7.18.2, @babel/traverse@npm:^7.18.5, @babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.19.4, @babel/traverse@npm:^7.19.6, @babel/traverse@npm:^7.20.10, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.21.5, @babel/traverse@npm:^7.22.11, @babel/traverse@npm:^7.22.5, @babel/traverse@npm:^7.22.6, @babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.3, @babel/traverse@npm:^7.23.4, @babel/traverse@npm:^7.24.0, @babel/traverse@npm:^7.24.1, @babel/traverse@npm:^7.24.7":
"@babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.7, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.17.10, @babel/traverse@npm:^7.17.3, @babel/traverse@npm:^7.17.9, @babel/traverse@npm:^7.18.0, @babel/traverse@npm:^7.18.2, @babel/traverse@npm:^7.18.5, @babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.19.4, @babel/traverse@npm:^7.19.6, @babel/traverse@npm:^7.20.10, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.21.5, @babel/traverse@npm:^7.22.11, @babel/traverse@npm:^7.22.5, @babel/traverse@npm:^7.22.6, @babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.3, @babel/traverse@npm:^7.23.4, @babel/traverse@npm:^7.24.1, @babel/traverse@npm:^7.24.7":
version: 7.24.7
resolution: "@babel/traverse@npm:7.24.7"
dependencies:
@@ -8236,7 +8176,7 @@ __metadata:
languageName: node
linkType: hard
"@babel/types@npm:^7.23.6, @babel/types@npm:^7.24.0":
"@babel/types@npm:^7.24.0":
version: 7.24.0
resolution: "@babel/types@npm:7.24.0"
dependencies:
@@ -13045,7 +12985,7 @@ __metadata:
languageName: node
linkType: hard
"@nuxt/kit@npm:3.15.0, @nuxt/kit@npm:^3.14.1592, @nuxt/kit@npm:^3.15.0":
"@nuxt/kit@npm:3.15.0":
version: 3.15.0
resolution: "@nuxt/kit@npm:3.15.0"
dependencies:
@@ -13073,35 +13013,7 @@ __metadata:
languageName: node
linkType: hard
"@nuxt/kit@npm:^3.13.2":
version: 3.13.2
resolution: "@nuxt/kit@npm:3.13.2"
dependencies:
"@nuxt/schema": "npm:3.13.2"
c12: "npm:^1.11.2"
consola: "npm:^3.2.3"
defu: "npm:^6.1.4"
destr: "npm:^2.0.3"
globby: "npm:^14.0.2"
hash-sum: "npm:^2.0.0"
ignore: "npm:^5.3.2"
jiti: "npm:^1.21.6"
klona: "npm:^2.0.6"
knitwork: "npm:^1.1.0"
mlly: "npm:^1.7.1"
pathe: "npm:^1.1.2"
pkg-types: "npm:^1.2.0"
scule: "npm:^1.3.0"
semver: "npm:^7.6.3"
ufo: "npm:^1.5.4"
unctx: "npm:^2.3.1"
unimport: "npm:^3.12.0"
untyped: "npm:^1.4.2"
checksum: 10/0c8a67cb1b42841e0f7a297eefc703398674e220565b5aa56056646b1aa29f08482ff8db2e778f85f2e4059d1c9a6fb97a204a70904dd8ce66aaa0a70d403c98
languageName: node
linkType: hard
"@nuxt/kit@npm:^3.15.4":
"@nuxt/kit@npm:^3.13.2, @nuxt/kit@npm:^3.14.1592, @nuxt/kit@npm:^3.15.0, @nuxt/kit@npm:^3.15.4, @nuxt/kit@npm:^3.6.5, @nuxt/kit@npm:^3.8.2":
version: 3.15.4
resolution: "@nuxt/kit@npm:3.15.4"
dependencies:
@@ -13129,79 +13041,7 @@ __metadata:
languageName: node
linkType: hard
"@nuxt/kit@npm:^3.6.5":
version: 3.9.0
resolution: "@nuxt/kit@npm:3.9.0"
dependencies:
"@nuxt/schema": "npm:3.9.0"
c12: "npm:^1.5.1"
consola: "npm:^3.2.3"
defu: "npm:^6.1.3"
globby: "npm:^14.0.0"
hash-sum: "npm:^2.0.0"
ignore: "npm:^5.3.0"
jiti: "npm:^1.21.0"
knitwork: "npm:^1.0.0"
mlly: "npm:^1.4.2"
pathe: "npm:^1.1.1"
pkg-types: "npm:^1.0.3"
scule: "npm:^1.1.1"
semver: "npm:^7.5.4"
ufo: "npm:^1.3.2"
unctx: "npm:^2.3.1"
unimport: "npm:^3.7.0"
untyped: "npm:^1.4.0"
checksum: 10/03cc51ca5d2199cdb57ad86a10b1791ac48cbbd906ca44e4de944f015d094374be4661c1ef2374f1d4f42b03da411d2944284617068dd874ffa8d2a66b306023
languageName: node
linkType: hard
"@nuxt/kit@npm:^3.8.2":
version: 3.8.2
resolution: "@nuxt/kit@npm:3.8.2"
dependencies:
"@nuxt/schema": "npm:3.8.2"
c12: "npm:^1.5.1"
consola: "npm:^3.2.3"
defu: "npm:^6.1.3"
globby: "npm:^14.0.0"
hash-sum: "npm:^2.0.0"
ignore: "npm:^5.3.0"
jiti: "npm:^1.21.0"
knitwork: "npm:^1.0.0"
mlly: "npm:^1.4.2"
pathe: "npm:^1.1.1"
pkg-types: "npm:^1.0.3"
scule: "npm:^1.1.0"
semver: "npm:^7.5.4"
ufo: "npm:^1.3.2"
unctx: "npm:^2.3.1"
unimport: "npm:^3.5.0"
untyped: "npm:^1.4.0"
checksum: 10/ce1c4de8e2945d64fa6c9fcae7325f32a491413698060ebd7385b6d8250b6c4438e1eb2258bfb92c8f6b30ffd2e62bdf9f50b4f72c27b7e9d9856f59d4550c6d
languageName: node
linkType: hard
"@nuxt/schema@npm:3.13.2":
version: 3.13.2
resolution: "@nuxt/schema@npm:3.13.2"
dependencies:
compatx: "npm:^0.1.8"
consola: "npm:^3.2.3"
defu: "npm:^6.1.4"
hookable: "npm:^5.5.3"
pathe: "npm:^1.1.2"
pkg-types: "npm:^1.2.0"
scule: "npm:^1.3.0"
std-env: "npm:^3.7.0"
ufo: "npm:^1.5.4"
uncrypto: "npm:^0.1.3"
unimport: "npm:^3.12.0"
untyped: "npm:^1.4.2"
checksum: 10/698520eb9095f7ab40f9308a9f8153578f506cf6b27635493a04e0e363d7f9d43e2174f718adc8fc948205d5300e0b1d1097f044d0615515c9374455f192a3ab
languageName: node
linkType: hard
"@nuxt/schema@npm:3.15.0, @nuxt/schema@npm:^3.15.0":
"@nuxt/schema@npm:3.15.0":
version: 3.15.0
resolution: "@nuxt/schema@npm:3.15.0"
dependencies:
@@ -13222,45 +13062,7 @@ __metadata:
languageName: node
linkType: hard
"@nuxt/schema@npm:3.8.2":
version: 3.8.2
resolution: "@nuxt/schema@npm:3.8.2"
dependencies:
"@nuxt/ui-templates": "npm:^1.3.1"
consola: "npm:^3.2.3"
defu: "npm:^6.1.3"
hookable: "npm:^5.5.3"
pathe: "npm:^1.1.1"
pkg-types: "npm:^1.0.3"
scule: "npm:^1.1.0"
std-env: "npm:^3.5.0"
ufo: "npm:^1.3.2"
unimport: "npm:^3.5.0"
untyped: "npm:^1.4.0"
checksum: 10/788fa780a93047503815293df081b14c6f08f22958c480ee5063f81a503ab6cd4dfb15fe71c8217a72317bd64c490f4e532ee56d7df229f1a6ee8ecb0af2257b
languageName: node
linkType: hard
"@nuxt/schema@npm:3.9.0":
version: 3.9.0
resolution: "@nuxt/schema@npm:3.9.0"
dependencies:
"@nuxt/ui-templates": "npm:^1.3.1"
consola: "npm:^3.2.3"
defu: "npm:^6.1.3"
hookable: "npm:^5.5.3"
pathe: "npm:^1.1.1"
pkg-types: "npm:^1.0.3"
scule: "npm:^1.1.1"
std-env: "npm:^3.7.0"
ufo: "npm:^1.3.2"
unimport: "npm:^3.7.0"
untyped: "npm:^1.4.0"
checksum: 10/49164c93b643621cfc5ccaf9716b671c00340e168397610491024541f887d09d8fdb9d90cf53fc2b0df852fb21bc6c5dc5e72604f0c551d0e58ad6e70146f7dc
languageName: node
linkType: hard
"@nuxt/schema@npm:^3.15.4":
"@nuxt/schema@npm:^3.15.0, @nuxt/schema@npm:^3.15.4":
version: 3.15.4
resolution: "@nuxt/schema@npm:3.15.4"
dependencies:
@@ -13296,13 +13098,6 @@ __metadata:
languageName: node
linkType: hard
"@nuxt/ui-templates@npm:^1.3.1":
version: 1.3.1
resolution: "@nuxt/ui-templates@npm:1.3.1"
checksum: 10/432ce9ccdc1de23e93412dfb381a06e01afb00350df57a2140f38d0c4b81cb53a1975c60a761573e6d977c5277d3ccb1f04d078ce87fa9a5d8298f7bbcf7af02
languageName: node
linkType: hard
"@nuxt/vite-builder@npm:3.15.0":
version: 3.15.0
resolution: "@nuxt/vite-builder@npm:3.15.0"
@@ -14688,22 +14483,6 @@ __metadata:
languageName: node
linkType: hard
"@rollup/pluginutils@npm:^5.0.5":
version: 5.0.5
resolution: "@rollup/pluginutils@npm:5.0.5"
dependencies:
"@types/estree": "npm:^1.0.0"
estree-walker: "npm:^2.0.2"
picomatch: "npm:^2.3.1"
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
checksum: 10/7c07bdb6bc898a3188a860c16df3d26fcd4c632f8ea93a1e1c2387445f86f877c717f714e09652d7442c791b9fed10a2332525036bcb6fb99aad64888ce1d690
languageName: node
linkType: hard
"@rollup/pluginutils@npm:^5.1.0":
version: 5.1.0
resolution: "@rollup/pluginutils@npm:5.1.0"
@@ -15232,13 +15011,6 @@ __metadata:
languageName: node
linkType: hard
"@sindresorhus/merge-streams@npm:^1.0.0":
version: 1.0.0
resolution: "@sindresorhus/merge-streams@npm:1.0.0"
checksum: 10/453c2a28164113a5ec4fd23ba636e291a4112f6ee9e91cd5476b9a96e0fc9ee5ff40d405fe81bbf284c9773b7ed718a3a0f31df7895a0efd413b1f9775d154fe
languageName: node
linkType: hard
"@sindresorhus/merge-streams@npm:^2.1.0":
version: 2.3.0
resolution: "@sindresorhus/merge-streams@npm:2.3.0"
@@ -21543,15 +21315,6 @@ __metadata:
languageName: node
linkType: hard
"acorn@npm:^8.10.0, acorn@npm:^8.11.2":
version: 8.11.2
resolution: "acorn@npm:8.11.2"
bin:
acorn: bin/acorn
checksum: 10/ff559b891382ad4cd34cc3c493511d0a7075a51f5f9f02a03440e92be3705679367238338566c5fbd3521ecadd565d29301bc8e16cb48379206bffbff3d72500
languageName: node
linkType: hard
"acorn@npm:^8.11.3, acorn@npm:^8.8.0":
version: 8.11.3
resolution: "acorn@npm:8.11.3"
@@ -23482,50 +23245,6 @@ __metadata:
languageName: node
linkType: hard
"c12@npm:^1.11.2":
version: 1.11.2
resolution: "c12@npm:1.11.2"
dependencies:
chokidar: "npm:^3.6.0"
confbox: "npm:^0.1.7"
defu: "npm:^6.1.4"
dotenv: "npm:^16.4.5"
giget: "npm:^1.2.3"
jiti: "npm:^1.21.6"
mlly: "npm:^1.7.1"
ohash: "npm:^1.1.3"
pathe: "npm:^1.1.2"
perfect-debounce: "npm:^1.0.0"
pkg-types: "npm:^1.2.0"
rc9: "npm:^2.1.2"
peerDependencies:
magicast: ^0.3.4
peerDependenciesMeta:
magicast:
optional: true
checksum: 10/ba568cac969692a3324135e6d292e2e7d414a0394753c3afdefcb1fb799cd26dda05f8258e58b22c95253db7ec0cd29788780d291b6c6f60ddf88d5ba414d325
languageName: node
linkType: hard
"c12@npm:^1.5.1":
version: 1.5.1
resolution: "c12@npm:1.5.1"
dependencies:
chokidar: "npm:^3.5.3"
defu: "npm:^6.1.2"
dotenv: "npm:^16.3.1"
giget: "npm:^1.1.3"
jiti: "npm:^1.20.0"
mlly: "npm:^1.4.2"
ohash: "npm:^1.1.3"
pathe: "npm:^1.1.1"
perfect-debounce: "npm:^1.0.0"
pkg-types: "npm:^1.0.3"
rc9: "npm:^2.1.1"
checksum: 10/56f69292e9d6d8cd1d49bc675f4607f014317ce0f2da3272e9ca43914ff1a8723784b5a5eac6b9a8b53f29a13619c90f6a892c765b1079c74050dcf48afc669d
languageName: node
linkType: hard
"c8@npm:^10.1.3":
version: 10.1.3
resolution: "c8@npm:10.1.3"
@@ -24499,13 +24218,6 @@ __metadata:
languageName: node
linkType: hard
"colorette@npm:^2.0.20":
version: 2.0.20
resolution: "colorette@npm:2.0.20"
checksum: 10/0b8de48bfa5d10afc160b8eaa2b9938f34a892530b2f7d7897e0458d9535a066e3998b49da9d21161c78225b272df19ae3a64d6df28b4c9734c0e55bbd02406f
languageName: node
linkType: hard
"colornames@npm:^1.1.1":
version: 1.1.1
resolution: "colornames@npm:1.1.1"
@@ -26830,13 +26542,6 @@ __metadata:
languageName: node
linkType: hard
"dotenv@npm:^16.3.1":
version: 16.3.1
resolution: "dotenv@npm:16.3.1"
checksum: 10/dbb778237ef8750e9e3cd1473d3c8eaa9cc3600e33a75c0e36415d0fa0848197f56c3800f77924c70e7828f0b03896818cd52f785b07b9ad4d88dba73fbba83f
languageName: node
linkType: hard
"dotenv@npm:^16.4.5":
version: 16.4.5
resolution: "dotenv@npm:16.4.5"
@@ -30554,23 +30259,6 @@ __metadata:
languageName: node
linkType: hard
"giget@npm:^1.1.3":
version: 1.1.3
resolution: "giget@npm:1.1.3"
dependencies:
colorette: "npm:^2.0.20"
defu: "npm:^6.1.2"
https-proxy-agent: "npm:^7.0.2"
mri: "npm:^1.2.0"
node-fetch-native: "npm:^1.4.0"
pathe: "npm:^1.1.1"
tar: "npm:^6.2.0"
bin:
giget: dist/cli.mjs
checksum: 10/d46faa23d7ea747e8f854843d6b8f1be645f2a374af10a7590156ac5703b82cc3beec5fe723fc900099c8da7d810a7a2b0e0e3cd9db9ad58b453ce4b5090eb5f
languageName: node
linkType: hard
"giget@npm:^1.2.3":
version: 1.2.3
resolution: "giget@npm:1.2.3"
@@ -30942,20 +30630,6 @@ __metadata:
languageName: node
linkType: hard
"globby@npm:^14.0.0":
version: 14.0.0
resolution: "globby@npm:14.0.0"
dependencies:
"@sindresorhus/merge-streams": "npm:^1.0.0"
fast-glob: "npm:^3.3.2"
ignore: "npm:^5.2.4"
path-type: "npm:^5.0.0"
slash: "npm:^5.1.0"
unicorn-magic: "npm:^0.1.0"
checksum: 10/6e7d84bbc69d8d21a07507af090998c6546c385702a350ff14f6fb08207f90ed40bd41c7b19c11a23851c3b86666e79503373e0f8b400a91a29b13952b1e960c
languageName: node
linkType: hard
"globby@npm:^14.0.1":
version: 14.0.1
resolution: "globby@npm:14.0.1"
@@ -32088,13 +31762,6 @@ __metadata:
languageName: node
linkType: hard
"ignore@npm:^5.3.0":
version: 5.3.0
resolution: "ignore@npm:5.3.0"
checksum: 10/51594355cea4c6ad6b28b3b85eb81afa7b988a1871feefd7062baf136c95aa06760ee934fa9590e43d967bd377ce84a4cf6135fbeb6063e063f1182a0e9a3bcd
languageName: node
linkType: hard
"ignore@npm:^5.3.1":
version: 5.3.1
resolution: "ignore@npm:5.3.1"
@@ -32102,13 +31769,6 @@ __metadata:
languageName: node
linkType: hard
"ignore@npm:^5.3.2":
version: 5.3.2
resolution: "ignore@npm:5.3.2"
checksum: 10/cceb6a457000f8f6a50e1196429750d782afce5680dd878aa4221bd79972d68b3a55b4b1458fc682be978f4d3c6a249046aa0880637367216444ab7b014cfc98
languageName: node
linkType: hard
"ignore@npm:^7.0.0":
version: 7.0.0
resolution: "ignore@npm:7.0.0"
@@ -34163,7 +33823,7 @@ __metadata:
languageName: node
linkType: hard
"jiti@npm:^1.20.0, jiti@npm:^1.21.0":
"jiti@npm:^1.21.0":
version: 1.21.0
resolution: "jiti@npm:1.21.0"
bin:
@@ -34317,13 +33977,6 @@ __metadata:
languageName: node
linkType: hard
"js-tokens@npm:^9.0.0":
version: 9.0.0
resolution: "js-tokens@npm:9.0.0"
checksum: 10/65e7a55a1a18d61f1cf94bfd7704da870b74337fa08d4c58118e69a8b10225b5ad887ff3ae595d720301b0924811a9b0594c679621a85ecbac6e3aac8533c53b
languageName: node
linkType: hard
"js-tokens@npm:^9.0.1":
version: 9.0.1
resolution: "js-tokens@npm:9.0.1"
@@ -35297,16 +34950,6 @@ __metadata:
languageName: node
linkType: hard
"local-pkg@npm:^0.5.0":
version: 0.5.0
resolution: "local-pkg@npm:0.5.0"
dependencies:
mlly: "npm:^1.4.2"
pkg-types: "npm:^1.0.3"
checksum: 10/20f4caba50dc6fb00ffcc1a78bc94b5acb33995e0aadf4d4edcdeab257e891aa08f50afddf02f3240b2c3d02432bc2078f2a916a280ed716b64753a3d250db70
languageName: node
linkType: hard
"local-pkg@npm:^0.5.1":
version: 0.5.1
resolution: "local-pkg@npm:0.5.1"
@@ -35836,7 +35479,7 @@ __metadata:
languageName: node
linkType: hard
"magic-string@npm:^0.30.3, magic-string@npm:^0.30.4, magic-string@npm:^0.30.5":
"magic-string@npm:^0.30.3, magic-string@npm:^0.30.4":
version: 0.30.5
resolution: "magic-string@npm:0.30.5"
dependencies:
@@ -37472,18 +37115,6 @@ __metadata:
languageName: node
linkType: hard
"mlly@npm:^1.4.2":
version: 1.4.2
resolution: "mlly@npm:1.4.2"
dependencies:
acorn: "npm:^8.10.0"
pathe: "npm:^1.1.1"
pkg-types: "npm:^1.0.3"
ufo: "npm:^1.3.0"
checksum: 10/ea5dc1a6cb2795cd15c6cdc84bbf431e0649917e673ef4de5d5ace6f74f74f02d22cd3c3faf7f868c3857115d33cccaaf5a070123b9a6c997af06ebeb8ab3bb5
languageName: node
linkType: hard
"mlly@npm:^1.6.1":
version: 1.6.1
resolution: "mlly@npm:1.6.1"
@@ -42195,17 +41826,6 @@ __metadata:
languageName: node
linkType: hard
"rc9@npm:^2.1.1":
version: 2.1.1
resolution: "rc9@npm:2.1.1"
dependencies:
defu: "npm:^6.1.2"
destr: "npm:^2.0.0"
flat: "npm:^5.0.2"
checksum: 10/d704e4f4ecf321b691b37e5cfeee11bb2c5d3eb7393cef32096ed4bc3c7f7a64d2c79e2ad159b5e20c15917290ca80a1343fc25c86a3c8d0c67f4601ce8c4085
languageName: node
linkType: hard
"rc9@npm:^2.1.2":
version: 2.1.2
resolution: "rc9@npm:2.1.2"
@@ -44012,28 +43632,7 @@ __metadata:
languageName: node
linkType: hard
"scule@npm:^1.0.0":
version: 1.0.0
resolution: "scule@npm:1.0.0"
checksum: 10/57f745022ef391868c6adfc77cd8bf1e8a10096cb4e7ba7bbb04f57fab5651804b419da9435692cd012abf1fd020f4b3f823385536f4ddc7247ea725488451c4
languageName: node
linkType: hard
"scule@npm:^1.1.0":
version: 1.1.0
resolution: "scule@npm:1.1.0"
checksum: 10/3a3393f97255a0ea5e2a8cf2eef19a13078b23c77a0d30beef2a52a4a3fd73ee40906a6f0f8deee1e026e6360da6a55757379a2552008c7c3c99a52c772caa81
languageName: node
linkType: hard
"scule@npm:^1.1.1":
version: 1.1.1
resolution: "scule@npm:1.1.1"
checksum: 10/17c4dcd2861a43e9495d468c8fb52806881c74efcf62d6c2a41f76933f380d0a4d352cec4b2b3d6c3476e0373b3cd301680675b7692ae7e932fca8654740e82d
languageName: node
linkType: hard
"scule@npm:^1.2.0, scule@npm:^1.3.0":
"scule@npm:^1.3.0":
version: 1.3.0
resolution: "scule@npm:1.3.0"
checksum: 10/f2968b292e33c0eddca4a68b5c70f08dfc8479e492461c248f72873deaf77ae87c9f27dde7a342b3cb6394d2fae9665890b07a2243f79cff5cba65c9525ccf7e
@@ -45203,13 +44802,6 @@ __metadata:
languageName: node
linkType: hard
"std-env@npm:^3.5.0":
version: 3.5.0
resolution: "std-env@npm:3.5.0"
checksum: 10/6071a727e1f1e67d6598648a085473671672ad6b2e0fc7220bb731c4c7584979047565c81b4c482a59cc25b7f14d5e6d06d5682250d06a9fefd1a571daaa711c
languageName: node
linkType: hard
"std-env@npm:^3.7.0":
version: 3.7.0
resolution: "std-env@npm:3.7.0"
@@ -45593,24 +45185,6 @@ __metadata:
languageName: node
linkType: hard
"strip-literal@npm:^1.3.0":
version: 1.3.0
resolution: "strip-literal@npm:1.3.0"
dependencies:
acorn: "npm:^8.10.0"
checksum: 10/f5fa7e289df8ebe82e90091fd393974faf8871be087ca50114327506519323cf15f2f8fee6ebe68b5e58bfc795269cae8bdc7cb5a83e27b02b3fe953f37b0a89
languageName: node
linkType: hard
"strip-literal@npm:^2.1.0":
version: 2.1.0
resolution: "strip-literal@npm:2.1.0"
dependencies:
js-tokens: "npm:^9.0.0"
checksum: 10/21c813aa1e669944e7e2318c8c927939fb90b0c52f53f57282bfc3dd6e19d53f70004f1f1693e33e5e790ad5ef102b0fce2b243808229d1ce07ae71f326c0e82
languageName: node
linkType: hard
"strip-literal@npm:^2.1.1":
version: 2.1.1
resolution: "strip-literal@npm:2.1.1"
@@ -47756,27 +47330,6 @@ __metadata:
languageName: node
linkType: hard
"unimport@npm:^3.12.0":
version: 3.13.1
resolution: "unimport@npm:3.13.1"
dependencies:
"@rollup/pluginutils": "npm:^5.1.2"
acorn: "npm:^8.12.1"
escape-string-regexp: "npm:^5.0.0"
estree-walker: "npm:^3.0.3"
fast-glob: "npm:^3.3.2"
local-pkg: "npm:^0.5.0"
magic-string: "npm:^0.30.11"
mlly: "npm:^1.7.1"
pathe: "npm:^1.1.2"
pkg-types: "npm:^1.2.0"
scule: "npm:^1.3.0"
strip-literal: "npm:^2.1.0"
unplugin: "npm:^1.14.1"
checksum: 10/e8ec260915ebec7641f4bf545a6f272188235d1fe25876646465c954b163ac661b769918fac7a4351f2ae3170aae9e34a8739a270c2ad284461d399cb8413e0e
languageName: node
linkType: hard
"unimport@npm:^3.13.1, unimport@npm:^3.14.5":
version: 3.14.5
resolution: "unimport@npm:3.14.5"
@@ -47799,46 +47352,6 @@ __metadata:
languageName: node
linkType: hard
"unimport@npm:^3.5.0":
version: 3.6.0
resolution: "unimport@npm:3.6.0"
dependencies:
"@rollup/pluginutils": "npm:^5.0.5"
escape-string-regexp: "npm:^5.0.0"
fast-glob: "npm:^3.3.2"
local-pkg: "npm:^0.5.0"
magic-string: "npm:^0.30.5"
mlly: "npm:^1.4.2"
pathe: "npm:^1.1.1"
pkg-types: "npm:^1.0.3"
scule: "npm:^1.1.0"
strip-literal: "npm:^1.3.0"
unplugin: "npm:^1.5.1"
checksum: 10/566603d4bea1313c57038a9aa284fbcfb40dccf9f2204efc48170780275728bd1b450cd1ffa8875edcc6d35914e805e2c2d157d5b0b5b9b2a20a66cfd3c8b27e
languageName: node
linkType: hard
"unimport@npm:^3.7.0":
version: 3.7.1
resolution: "unimport@npm:3.7.1"
dependencies:
"@rollup/pluginutils": "npm:^5.1.0"
acorn: "npm:^8.11.2"
escape-string-regexp: "npm:^5.0.0"
estree-walker: "npm:^3.0.3"
fast-glob: "npm:^3.3.2"
local-pkg: "npm:^0.5.0"
magic-string: "npm:^0.30.5"
mlly: "npm:^1.4.2"
pathe: "npm:^1.1.1"
pkg-types: "npm:^1.0.3"
scule: "npm:^1.1.1"
strip-literal: "npm:^1.3.0"
unplugin: "npm:^1.5.1"
checksum: 10/923336e88d20542d75b9028ca718026e6d0d3cd09b3b201dbb3547ef2af8341b9a04550a39385861a1821f1e7676743dec88b8c1d6336d7ca3423cb456a3cadb
languageName: node
linkType: hard
"unimport@npm:^4.0.0, unimport@npm:^4.1.2":
version: 4.1.2
resolution: "unimport@npm:4.1.2"
@@ -48062,18 +47575,6 @@ __metadata:
languageName: node
linkType: hard
"unplugin@npm:^1.5.1":
version: 1.5.1
resolution: "unplugin@npm:1.5.1"
dependencies:
acorn: "npm:^8.11.2"
chokidar: "npm:^3.5.3"
webpack-sources: "npm:^3.2.3"
webpack-virtual-modules: "npm:^0.6.0"
checksum: 10/470575a98514a394b667305878390ed244cf0bea80cc65c4700806dc12e48d3ae03e38c72ce1a4db23540307e98b68a8213c5fda319cecc5e844ad1975d2d9b0
languageName: node
linkType: hard
"unplugin@npm:^2.1.0":
version: 2.1.2
resolution: "unplugin@npm:2.1.2"
@@ -48245,40 +47746,6 @@ __metadata:
languageName: node
linkType: hard
"untyped@npm:^1.4.0":
version: 1.4.0
resolution: "untyped@npm:1.4.0"
dependencies:
"@babel/core": "npm:^7.22.9"
"@babel/standalone": "npm:^7.22.9"
"@babel/types": "npm:^7.22.5"
defu: "npm:^6.1.2"
jiti: "npm:^1.19.1"
mri: "npm:^1.2.0"
scule: "npm:^1.0.0"
bin:
untyped: dist/cli.mjs
checksum: 10/7e87c34672d42afc438a79b759c5ed0d3b12ecc5aaaf187318f9b890ccab140caf44a8889229ac20079cb48eacc3be75646bce892d9ce4f2375999c827ecb0d5
languageName: node
linkType: hard
"untyped@npm:^1.4.2":
version: 1.4.2
resolution: "untyped@npm:1.4.2"
dependencies:
"@babel/core": "npm:^7.23.7"
"@babel/standalone": "npm:^7.23.8"
"@babel/types": "npm:^7.23.6"
defu: "npm:^6.1.4"
jiti: "npm:^1.21.0"
mri: "npm:^1.2.0"
scule: "npm:^1.2.0"
bin:
untyped: dist/cli.mjs
checksum: 10/f7054b7e3f1645dd3e702049ae8813a64e41086fc52fa04f8d7580bdd9a9438f9e86249b252587f085a78f576a0f1ce8bddb039757c9d3096fe73e7389973dd0
languageName: node
linkType: hard
"untyped@npm:^1.5.1, untyped@npm:^1.5.2":
version: 1.5.2
resolution: "untyped@npm:1.5.2"
@@ -49640,7 +49107,7 @@ __metadata:
languageName: node
linkType: hard
"webpack-virtual-modules@npm:^0.6.0, webpack-virtual-modules@npm:^0.6.1":
"webpack-virtual-modules@npm:^0.6.1":
version: 0.6.1
resolution: "webpack-virtual-modules@npm:0.6.1"
checksum: 10/12a43ecdb910185c9d7e4ec19cc3b13bff228dae362e8a487c0bd292b393555e017ad16f771d5ce5b692d91d65b71a7bcd64763958d39066a5351ea325395539