perf!: allow tree-shaking unstorage drivers (#1516)

* perf: allow tree-shaking unstorage drivers

* fix: allow overriding fsBase at runtime

* fix: remove `fsBase` export
This commit is contained in:
Daniel Roe 2023-01-29 07:52:01 -08:00 committed by GitHub
parent 415d36ce32
commit fa44fae991
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 8 deletions

View file

@ -22,6 +22,7 @@ export default defineNuxtModule({
...nuxt.options.alias, ...nuxt.options.alias,
'unstorage/drivers/fs': 'unenv/runtime/mock/proxy', 'unstorage/drivers/fs': 'unenv/runtime/mock/proxy',
'unstorage/drivers/cloudflare-kv-http': 'unenv/runtime/mock/proxy', 'unstorage/drivers/cloudflare-kv-http': 'unenv/runtime/mock/proxy',
'#storage-config': resolve('./runtime/storage-config'),
'node:events': 'unenv/runtime/node/events/index', 'node:events': 'unenv/runtime/node/events/index',
'#build-info': resolve('./runtime/build-info'), '#build-info': resolve('./runtime/build-info'),
} }

View file

@ -0,0 +1,2 @@
export const driver = undefined
export const fsBase = ''

View file

@ -1,4 +1,4 @@
import { createResolver } from '@nuxt/kit' import { createResolver, useNuxt } from '@nuxt/kit'
import Inspect from 'vite-plugin-inspect' import Inspect from 'vite-plugin-inspect'
import { isCI, isDevelopment, isWindows } from 'std-env' import { isCI, isDevelopment, isWindows } from 'std-env'
import { isPreview } from './config/env' import { isPreview } from './config/env'
@ -86,6 +86,11 @@ export default defineNuxtConfig({
'postcss-nested': {}, 'postcss-nested': {},
}, },
}, },
appConfig: {
storage: {
driver: process.env.NUXT_STORAGE_DRIVER ?? (isCI ? 'cloudflare' : 'fs'),
},
},
runtimeConfig: { runtimeConfig: {
adminKey: '', adminKey: '',
cloudflare: { cloudflare: {
@ -102,8 +107,7 @@ export default defineNuxtConfig({
defaultServer: 'm.webtoo.ls', defaultServer: 'm.webtoo.ls',
}, },
storage: { storage: {
driver: isCI ? 'cloudflare' : 'fs', fsBase: 'node_modules/.cache/app',
fsBase: 'node_modules/.cache/servers',
}, },
}, },
routeRules: { routeRules: {
@ -126,6 +130,13 @@ export default defineNuxtConfig({
ignore: ['/settings'], ignore: ['/settings'],
}, },
}, },
hooks: {
'nitro:config': function (config) {
const nuxt = useNuxt()
config.virtual = config.virtual || {}
config.virtual['#storage-config'] = `export const driver = ${JSON.stringify(nuxt.options.appConfig.storage.driver)}`
},
},
app: { app: {
keepalive: true, keepalive: true,
head: { head: {

View file

@ -14,29 +14,31 @@ import cached from './cache-driver'
// @ts-expect-error virtual import // @ts-expect-error virtual import
import { env } from '#build-info' import { env } from '#build-info'
// @ts-expect-error virtual import
import { driver } from '#storage-config'
import type { AppInfo } from '~/types' import type { AppInfo } from '~/types'
import { APP_NAME } from '~/constants' import { APP_NAME } from '~/constants'
const config = useRuntimeConfig()
const fs = _fs as typeof import('unstorage/dist/drivers/fs')['default'] const fs = _fs as typeof import('unstorage/dist/drivers/fs')['default']
const kv = _kv as typeof import('unstorage/dist/drivers/cloudflare-kv-http')['default'] const kv = _kv as typeof import('unstorage/dist/drivers/cloudflare-kv-http')['default']
const memory = _memory as typeof import('unstorage/dist/drivers/memory')['default'] const memory = _memory as typeof import('unstorage/dist/drivers/memory')['default']
const storage = useStorage() as Storage const storage = useStorage() as Storage
if (config.storage.driver === 'fs') { if (driver === 'fs') {
const config = useRuntimeConfig()
storage.mount('servers', fs({ base: config.storage.fsBase })) storage.mount('servers', fs({ base: config.storage.fsBase }))
} }
else if (config.storage.driver === 'cloudflare') { else if (driver === 'cloudflare') {
const config = useRuntimeConfig()
storage.mount('servers', cached(kv({ storage.mount('servers', cached(kv({
accountId: config.cloudflare.accountId, accountId: config.cloudflare.accountId,
namespaceId: config.cloudflare.namespaceId, namespaceId: config.cloudflare.namespaceId,
apiToken: config.cloudflare.apiToken, apiToken: config.cloudflare.apiToken,
}))) })))
} }
else if (config.storage.driver === 'memory') { else if (driver === 'memory') {
storage.mount('servers', memory()) storage.mount('servers', memory())
} }