feat: use native esm for all packages (#539)

This commit is contained in:
pooya parsa 2021-10-02 18:01:17 +02:00 committed by GitHub
parent f21b7de3d1
commit 6e496373f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
83 changed files with 472 additions and 366 deletions

View File

@ -48,8 +48,8 @@ jobs:
- name: Install dependencies
run: yarn --immutable
- name: Stub
run: yarn stub
- name: Build
run: yarn build
- name: Test (unit)
run: yarn test:unit
@ -81,8 +81,8 @@ jobs:
- name: Install dependencies (bridge fixture)
run: yarn --immutable && cd test/fixtures/bridge && yarn --immutable
- name: Stub
run: yarn stub
- name: Build
run: yarn build
- name: Test (presets bridge)
run: yarn test:bridge

View File

@ -1,6 +1,7 @@
{
"name": "nuxt-framework",
"license": "MIT",
"type": "module",
"workspaces": [
"packages/*",
"examples/*",

View File

@ -1,6 +1,7 @@
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
emitCJS: false,
entries: [
'src/module',
{ input: 'src/runtime/', outDir: 'dist/runtime', format: 'esm' }

View File

@ -0,0 +1,4 @@
// CommonJS proxy to bypass jiti transforms from nuxt 2
module.exports = function (...args) {
return import('./dist/module.mjs').then(m => m.default.call(this, ...args))
}

View File

@ -3,9 +3,11 @@
"version": "0.0.0",
"repository": "nuxt/framework",
"license": "MIT",
"main": "./dist/module.cjs",
"type": "module",
"exports": "./module.cjs",
"types": "./dist/index.d.ts",
"files": [
"module.cjs",
"dist"
],
"scripts": {
@ -22,6 +24,7 @@
"estree-walker": "^2.0.2",
"fs-extra": "^10.0.0",
"magic-string": "^0.25.7",
"mlly": "^0.2.2",
"node-fetch": "^3.0.0",
"nuxi": "^0.10.0",
"nuxt-swc": "^0.1.0",

View File

@ -1,15 +1,24 @@
// Based on https://github.com/webpack/webpack/blob/v4.46.0/lib/node/NodeMainTemplatePlugin.js#L81-L191
import { createRequire } from 'module'
import type { Compiler } from 'webpack'
export class AsyncLoadingPlugin {
private opts: any
private Template: any
constructor (opts) {
this.opts = opts
const _require = createRequire(import.meta.url)
const TemplatePath = _require.resolve('webpack/lib/Template', { paths: [...this.opts.modulesDir] })
this.Template = _require(TemplatePath)
}
apply (compiler: Compiler) {
const Template = require('webpack/lib/Template')
compiler.hooks.compilation.tap('AsyncLoading', (compilation) => {
const mainTemplate = compilation.mainTemplate
mainTemplate.hooks.requireEnsure.tap(
'AsyncLoading',
(_source, chunk, hash) => {
const Template = this.Template
const chunkFilename = mainTemplate.outputOptions.chunkFilename
const chunkMaps = chunk.getChunkMaps()
const insertMoreModules = [

View File

@ -1,6 +1,6 @@
import { createRequire } from 'module'
import { useNuxt, addPlugin, addPluginTemplate, addVitePlugin, addWebpackPlugin } from '@nuxt/kit'
import { resolve } from 'pathe'
import { distDir } from './dirs'
import { KeyPlugin } from './capi-legacy-key-plugin'
@ -13,7 +13,8 @@ export function setupCAPIBridge (_options: any) {
}
// Add composition-api support
const vueCapiEntry = require.resolve('@vue/composition-api/dist/vue-composition-api.mjs')
const _require = createRequire(import.meta.url)
const vueCapiEntry = _require.resolve('@vue/composition-api/dist/vue-composition-api.mjs')
nuxt.options.alias['@vue/composition-api/dist/vue-composition-api.common.js'] = vueCapiEntry
nuxt.options.alias['@vue/composition-api/dist/vue-composition-api.common.prod.js'] = vueCapiEntry
nuxt.options.alias['@vue/composition-api/dist/vue-composition-api.esm.js'] = vueCapiEntry

View File

@ -1,4 +1,5 @@
import { resolve } from 'pathe'
import { fileURLToPath } from 'url'
import { dirname, resolve } from 'pathe'
export const distDir = __dirname
export const distDir = dirname(fileURLToPath(import.meta.url))
export const pkgDir = resolve(distDir, '..')

View File

@ -1,3 +1,4 @@
import { createRequire } from 'module'
import { defineNuxtModule, installModule } from '@nuxt/kit'
import { setupNitroBridge } from './nitro'
import { setupAppBridge } from './app'
@ -30,14 +31,15 @@ export default defineNuxtModule({
}
await setupCAPIBridge(opts.capi)
}
const _require = createRequire(import.meta.url)
if (opts.vite) {
await installModule(nuxt, require.resolve('nuxt-vite'))
await installModule(nuxt, _require.resolve('nuxt-vite'))
}
if (opts.postcss8) {
await installModule(nuxt, require.resolve('@nuxt/postcss8'))
await installModule(nuxt, _require.resolve('@nuxt/postcss8'))
}
if (opts.swc) {
await installModule(nuxt, require.resolve('nuxt-swc'))
await installModule(nuxt, _require.resolve('nuxt-swc'))
}
if (opts.resolve) {
setupBetterResolve()

View File

@ -1,8 +1,8 @@
import { promises as fsp } from 'fs'
import fetch from 'node-fetch'
import { addPluginTemplate, useNuxt } from '@nuxt/kit'
import { stringifyQuery } from 'ufo'
import { resolve } from 'pathe'
import { readFile, writeFile } from 'fs-extra'
import { build, generate, prepare, getNitroContext, NitroContext, createDevServer, wpfs, resolveMiddleware } from '@nuxt/nitro'
import { AsyncLoadingPlugin } from './async-loading'
import { distDir } from './dirs'
@ -68,7 +68,9 @@ export function setupNitroBridge () {
const serverConfig = webpackConfigs.find(config => config.name === 'server')
if (serverConfig) {
serverConfig.plugins = serverConfig.plugins || []
serverConfig.plugins.push(new AsyncLoadingPlugin())
serverConfig.plugins.push(new AsyncLoadingPlugin({
modulesDir: nuxt.options.modulesDir
}))
}
})
@ -98,11 +100,11 @@ export function setupNitroBridge () {
nuxt.hook('build:compiled', async ({ name }) => {
if (name === 'server') {
const jsServerEntry = resolve(nuxt.options.buildDir, 'dist/server/server.js')
await writeFile(jsServerEntry.replace(/.js$/, '.cjs'), 'module.exports = require("./server.js")', 'utf8')
await writeFile(jsServerEntry.replace(/.js$/, '.mjs'), 'export { default } from "./server.cjs"', 'utf8')
await fsp.writeFile(jsServerEntry.replace(/.js$/, '.cjs'), 'module.exports = require("./server.js")', 'utf8')
await fsp.writeFile(jsServerEntry.replace(/.js$/, '.mjs'), 'export { default } from "./server.cjs"', 'utf8')
} else if (name === 'client') {
const manifest = await readFile(resolve(nuxt.options.buildDir, 'dist/server/client.manifest.json'), 'utf8')
await writeFile(resolve(nuxt.options.buildDir, 'dist/server/client.manifest.mjs'), 'export default ' + manifest, 'utf8')
const manifest = await fsp.readFile(resolve(nuxt.options.buildDir, 'dist/server/client.manifest.json'), 'utf8')
await fsp.writeFile(resolve(nuxt.options.buildDir, 'dist/server/client.manifest.mjs'), 'export default ' + manifest, 'utf8')
}
})

View File

@ -1,16 +1,15 @@
import fs from 'fs'
import { promisify } from 'util'
import defu from 'defu'
import { CachedInputFileSystem, ResolveContext, ResolverFactory } from 'enhanced-resolve'
import enhancedResolve from 'enhanced-resolve'
import { ResolveOptions } from 'webpack/types'
import { extendWebpackConfig, useNuxt } from '@nuxt/kit'
type UserResolveOptions = Parameters<typeof ResolverFactory['createResolver']>[0]
type ResolverOptions = Omit<UserResolveOptions, 'fileSystem'> & { fileSystem?: CachedInputFileSystem }
type UserResolveOptions = Parameters<typeof enhancedResolve.ResolverFactory['createResolver']>[0]
type ResolverOptions = Omit<UserResolveOptions, 'fileSystem'> & { fileSystem?: enhancedResolve.CachedInputFileSystem }
const DEFAULTS: UserResolveOptions = {
fileSystem: new CachedInputFileSystem(fs, 4000),
fileSystem: new enhancedResolve.CachedInputFileSystem(fs, 4000),
extensions: ['.ts', '.mjs', '.cjs', '.js', '.json'],
mainFields: ['module', 'main']
}
@ -18,11 +17,11 @@ const DEFAULTS: UserResolveOptions = {
// Abstracted resolver factory which can be used in rollup, webpack, etc.
const createResolver = (resolveOptions: ResolverOptions) => {
const options = defu(resolveOptions, DEFAULTS) as UserResolveOptions
const resolver = ResolverFactory.createResolver(options)
const resolver = enhancedResolve.ResolverFactory.createResolver(options)
const root = options.roots?.[0] || '.'
const promisifiedResolve = promisify(resolver.resolve.bind(resolver)) as (context: object, path: string, request: string, resolveContext: ResolveContext) => Promise<string | false>
const promisifiedResolve = promisify(resolver.resolve.bind(resolver)) as (context: object, path: string, request: string, resolveContext: enhancedResolve.ResolveContext) => Promise<string | false>
const resolve = (id: string, importer?: string) => promisifiedResolve({}, importer || root, id, {})

View File

@ -2,6 +2,7 @@ import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
declaration: true,
emitCJS: false,
entries: [
{
input: 'src/config/schema/index',

View File

@ -3,7 +3,8 @@
"version": "0.10.0",
"repository": "nuxt/framework",
"license": "MIT",
"main": "./dist/index.cjs",
"type": "module",
"exports": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"files": [
"dist",
@ -13,7 +14,7 @@
"prepack": "unbuild"
},
"devDependencies": {
"@types/lodash": "^4.14.175",
"@types/lodash.template": "^4",
"unbuild": "latest"
},
"dependencies": {
@ -25,7 +26,7 @@
"hash-sum": "^2.0.0",
"hookable": "^5.0.0",
"jiti": "^1.12.6",
"lodash": "^4.17.21",
"lodash.template": "^4.5.0",
"pathe": "^0.2.0",
"rc9": "^1.2.0",
"scule": "^0.2.1",

View File

@ -1,6 +1,6 @@
import { existsSync, promises as fsp } from 'fs'
import { resolve } from 'pathe'
import dotenv from 'dotenv'
import { parse as parseDotEnv } from 'dotenv'
import { LoadNuxtConfigOptions } from './load'
export interface LoadDotEnvOptions {
@ -62,7 +62,7 @@ export async function loadDotenv (opts: LoadDotEnvOptions) {
const dotenvFile = resolve(opts.rootDir, opts.dotenvFile)
if (existsSync(dotenvFile)) {
const parsed = dotenv.parse(await fsp.readFile(dotenvFile, 'utf-8'))
const parsed = parseDotEnv(await fsp.readFile(dotenvFile, 'utf-8'))
Object.assign(env, parsed)
}

View File

@ -627,7 +627,7 @@ export default {
* @example
* ```js
* import fs from 'fs'
* import path from 'pathe'
* import path from 'path'
* export default {
* hooks: {
* build: {

View File

@ -1,4 +1,4 @@
import path from 'pathe'
import { parse, relative } from 'pathe'
import consola from 'consola'
import type { Nuxt, NuxtPluginTemplate, NuxtTemplate } from '../types/nuxt'
import { chainFn } from '../utils/task'
@ -66,7 +66,7 @@ export function createModuleContainer (nuxt: Nuxt) {
/** Register a custom layout. If its name is 'error' it will override the default error layout. */
addLayout (tmpl: NuxtTemplate, name: string) {
const { filename, src } = addTemplate(tmpl)
const layoutName = name || path.parse(src).name
const layoutName = name || parse(src).name
const layout = nuxt.options.layouts[layoutName]
if (layout) {
@ -88,7 +88,7 @@ export function createModuleContainer (nuxt: Nuxt) {
* @param dst - Path to layout file within the buildDir (`.nuxt/<dst>.vue`)
*/
addErrorLayout (dst: string) {
const relativeBuildDir = path.relative(nuxt.options.rootDir, nuxt.options.buildDir)
const relativeBuildDir = relative(nuxt.options.rootDir, nuxt.options.buildDir)
nuxt.options.ErrorPage = `~/${relativeBuildDir}/${dst}`
},

View File

@ -1,6 +1,6 @@
import { existsSync, promises as fsp } from 'fs'
import { basename, extname, parse, resolve } from 'pathe'
import lodashTemplate from 'lodash/template'
import lodashTemplate from 'lodash.template'
import hash from 'hash-sum'
import type { WebpackPluginInstance, Configuration as WebpackConfig } from 'webpack'
import type { Plugin as VitePlugin, UserConfig as ViteConfig } from 'vite'

View File

@ -1,5 +1,5 @@
import { getContext } from 'unctx'
import { requireModule, tryRequireModule, tryResolveModule } from './utils/cjs'
import { importModule, tryImportModule, tryResolveModule } from './utils/cjs'
import type { Nuxt } from './types/nuxt'
import type { NuxtConfig } from './types/config'
import type { LoadNuxtConfigOptions } from './config/load'
@ -50,14 +50,14 @@ export async function loadNuxt (opts: LoadNuxtOptions): Promise<Nuxt> {
// Nuxt 3
if (opts.version !== 2) {
const { loadNuxt } = requireModule('nuxt3', resolveOpts)
const { loadNuxt } = await importModule('nuxt3', resolveOpts)
const nuxt = await loadNuxt(opts)
return nuxt
}
// Nuxt 2
// @ts-ignore
const { loadNuxt } = tryRequireModule('nuxt-edge', resolveOpts) || requireModule('nuxt', resolveOpts)
const { loadNuxt } = await tryImportModule('nuxt-edge', resolveOpts) || await importModule('nuxt', resolveOpts)
const nuxt = await loadNuxt({
rootDir: opts.rootDir,
for: opts.dev ? 'dev' : 'build',
@ -68,17 +68,17 @@ export async function loadNuxt (opts: LoadNuxtOptions): Promise<Nuxt> {
return nuxt as Nuxt
}
export function buildNuxt (nuxt: Nuxt): Promise<any> {
export async function buildNuxt (nuxt: Nuxt): Promise<any> {
const resolveOpts = { paths: nuxt.options.rootDir }
// Nuxt 3
if (nuxt.options._majorVersion === 3) {
const { build } = requireModule('nuxt3', resolveOpts)
const { build } = await importModule('nuxt3', resolveOpts)
return build(nuxt)
}
// Nuxt 2
// @ts-ignore
const { build } = tryRequireModule('nuxt-edge', resolveOpts) || requireModule('nuxt', resolveOpts)
const { build } = tryImportModule('nuxt-edge', resolveOpts) || tryImportModule('nuxt', resolveOpts)
return build(nuxt)
}

View File

@ -1,8 +1,9 @@
import { pathToFileURL } from 'url'
import { join, normalize } from 'pathe'
import jiti from 'jiti'
// TODO: use create-require for jest environment
const _require = jiti(process.cwd())
const _require = jiti(process.cwd(), { interopDefault: true })
export interface ResolveModuleOptions {
paths?: string | string[]
@ -125,6 +126,15 @@ export function requireModule (id: string, opts: RequireModuleOptions = {}) {
return requiredModule
}
export function importModule (id: string, opts: RequireModuleOptions = {}) {
const resolvedPath = resolveModule(id, opts)
return import(pathToFileURL(resolvedPath).href)
}
export function tryImportModule (id: string, opts: RequireModuleOptions = {}) {
return importModule(id, opts).catch(() => undefined)
}
/** Try to require a module, but don't emit an error if the module can't be required. */
export function tryRequireModule (id: string, opts: RequireModuleOptions = {}) {
try {

View File

@ -2,6 +2,7 @@ import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
declaration: true,
emitCJS: false,
entries: [
'src/index',
{ input: 'src/runtime/', outDir: 'dist/runtime', format: 'esm' },

View File

@ -1,3 +0,0 @@
export default function () {
throw new Error('Nitro compat for nuxt2 moved to nuxt bridge. Please check documentation for more details.')
}

View File

@ -2,12 +2,12 @@
"name": "@nuxt/nitro",
"version": "0.10.0",
"license": "MIT",
"main": "./dist/index.cjs",
"type": "module",
"exports": "./dist/index.mjs",
"types": "./types/index.d.ts",
"files": [
"dist",
"types",
"compat.js"
"types"
],
"scripts": {
"prepack": "unbuild"
@ -50,6 +50,7 @@
"jiti": "^1.12.6",
"listhen": "^0.2.4",
"mime": "^2.5.2",
"mlly": "^0.2.2",
"node-fetch": "^3.0.0",
"ohmyfetch": "^0.3.1",
"ora": "^6.0.1",
@ -65,7 +66,6 @@
"ufo": "^0.7.9",
"unenv": "^0.3.10",
"unstorage": "^0.2.8",
"upath": "^2.0.1",
"vue": "3.2.19",
"vue-bundle-renderer": "^0.3.1",
"vue-server-renderer": "^2.6.14"

View File

@ -1,7 +1,7 @@
import { resolve, join } from 'pathe'
import consola from 'consola'
import { rollup, watch as rollupWatch } from 'rollup'
import { readFile, emptyDir, copy } from 'fs-extra'
import fse from 'fs-extra'
import { printFSTree } from './utils/tree'
import { getRollupConfig } from './rollup/config'
import { hl, prettyPath, serializeTemplate, writeFile, isDirectory } from './utils'
@ -24,7 +24,7 @@ export async function prepare (nitroContext: NitroContext) {
async function cleanupDir (dir: string) {
consola.info('Cleaning up', prettyPath(dir))
await emptyDir(dir)
await fse.emptyDir(dir)
}
export async function generate (nitroContext: NitroContext) {
@ -32,12 +32,12 @@ export async function generate (nitroContext: NitroContext) {
const clientDist = resolve(nitroContext._nuxt.buildDir, 'dist/client')
if (await isDirectory(clientDist)) {
await copy(clientDist, join(nitroContext.output.publicDir, nitroContext._nuxt.publicPath))
await fse.copy(clientDist, join(nitroContext.output.publicDir, nitroContext._nuxt.publicPath))
}
const publicDir = nitroContext._nuxt.publicDir
if (await isDirectory(publicDir)) {
await copy(publicDir, nitroContext.output.publicDir)
await fse.copy(publicDir, nitroContext.output.publicDir)
}
consola.success('Generated public ' + prettyPath(nitroContext.output.publicDir))
@ -48,7 +48,7 @@ export async function build (nitroContext: NitroContext) {
const htmlSrc = resolve(nitroContext._nuxt.buildDir, `views/${{ 2: 'app', 3: 'document' }[2]}.template.html`)
const htmlTemplate = { src: htmlSrc, contents: '', dst: '', compiled: '' }
htmlTemplate.dst = htmlTemplate.src.replace(/.html$/, '.mjs').replace('app.', 'document.')
htmlTemplate.contents = nitroContext.vfs[htmlTemplate.src] || await readFile(htmlTemplate.src, 'utf-8')
htmlTemplate.contents = nitroContext.vfs[htmlTemplate.src] || await fse.readFile(htmlTemplate.src, 'utf-8')
await nitroContext._internal.hooks.callHook('nitro:document', htmlTemplate)
htmlTemplate.compiled = 'export default ' + serializeTemplate(htmlTemplate.contents)
await writeFile(htmlTemplate.dst, htmlTemplate.compiled)

View File

@ -1,6 +1,5 @@
/* eslint-disable no-use-before-define */
import { resolve, dirname } from 'pathe'
import { resolve } from 'pathe'
import defu from 'defu'
import { createHooks, Hookable, NestedHooks } from 'hookable'
import type { Preset } from 'unenv'
@ -13,6 +12,7 @@ import type { AssetOptions } from './rollup/plugins/assets'
import type { ServerMiddleware } from './server/middleware'
import type { RollupConfig } from './rollup/config'
import type { Options as EsbuildOptions } from './rollup/plugins/esbuild'
import { runtimeDir } from './dirs'
export interface NitroHooks {
'nitro:document': (htmlTemplate: { src: string, contents: string, dst: string, compiled: string }) => void
@ -136,7 +136,7 @@ export function getNitroContext (nuxtOptions: NuxtOptions, input: NitroInput): N
}
},
_internal: {
runtimeDir: resolve(dirname(require.resolve('@nuxt/nitro')), 'runtime'),
runtimeDir,
hooks: createHooks<NitroHooks>()
}
}

View File

@ -0,0 +1,6 @@
import { fileURLToPath } from 'url'
import { dirname, resolve } from 'pathe'
export const distDir = dirname(fileURLToPath(import.meta.url))
export const pkgDir = resolve(distDir, '..')
export const runtimeDir = resolve(distDir, 'runtime')

View File

@ -1,6 +1,6 @@
import { createWriteStream } from 'fs'
import archiver from 'archiver'
import consola from 'consola'
import { createWriteStream } from 'fs-extra'
import { join, resolve } from 'pathe'
import { prettyPath, writeFile } from '../utils'
import { NitroPreset, NitroContext } from '../context'

View File

@ -1,4 +1,4 @@
import { existsSync, writeFile } from 'fs-extra'
import { existsSync, promises as fsp } from 'fs'
import { resolve } from 'pathe'
import consola from 'consola'
import { extendPreset, prettyPath } from '../utils'
@ -62,17 +62,17 @@ if ('serviceWorker' in navigator) {
tmpl.compiled = tmpl.compiled.replace('</body>', script + '</body>')
},
async 'nitro:compiled' ({ output }: NitroContext) {
await writeFile(resolve(output.publicDir, 'sw.js'), `self.importScripts('${input._nuxt.routerBase}_server/index.mjs');`)
await fsp.writeFile(resolve(output.publicDir, 'sw.js'), `self.importScripts('${input._nuxt.routerBase}_server/index.mjs');`, 'utf8')
// Temp fix
if (!existsSync(resolve(output.publicDir, 'index.html'))) {
await writeFile(resolve(output.publicDir, 'index.html'), html)
await fsp.writeFile(resolve(output.publicDir, 'index.html'), html, 'utf8')
}
if (!existsSync(resolve(output.publicDir, '200.html'))) {
await writeFile(resolve(output.publicDir, '200.html'), html)
await fsp.writeFile(resolve(output.publicDir, '200.html'), html, 'utf8')
}
if (!existsSync(resolve(output.publicDir, '404.html'))) {
await writeFile(resolve(output.publicDir, '404.html'), html)
await fsp.writeFile(resolve(output.publicDir, '404.html'), html, 'utf8')
}
consola.info('Ready to deploy to static hosting:', prettyPath(output.publicDir as string))
}

View File

@ -1,5 +1,6 @@
import { createRequire } from 'module'
import { join, relative, resolve } from 'pathe'
import { existsSync, readJSONSync } from 'fs-extra'
import fse from 'fs-extra'
import consola from 'consola'
import globby from 'globby'
@ -16,7 +17,7 @@ export const firebase: NitroPreset = {
}
async function writeRoutes ({ output: { publicDir, serverDir }, _nuxt: { rootDir } }: NitroContext) {
if (!existsSync(join(rootDir, 'firebase.json'))) {
if (!fse.existsSync(join(rootDir, 'firebase.json'))) {
const firebase = {
functions: {
source: relative(rootDir, serverDir)
@ -38,20 +39,22 @@ async function writeRoutes ({ output: { publicDir, serverDir }, _nuxt: { rootDir
await writeFile(resolve(rootDir, 'firebase.json'), JSON.stringify(firebase))
}
const _require = createRequire(import.meta.url)
const jsons = await globby(`${serverDir}/node_modules/**/package.json`)
const prefixLength = `${serverDir}/node_modules/`.length
const suffixLength = '/package.json'.length
const dependencies = jsons.reduce((obj, packageJson) => {
const dirname = packageJson.slice(prefixLength, -suffixLength)
if (!dirname.includes('node_modules')) {
obj[dirname] = require(packageJson).version
obj[dirname] = _require(packageJson).version
}
return obj
}, {} as Record<string, string>)
let nodeVersion = '12'
try {
const currentNodeVersion = readJSONSync(join(rootDir, 'package.json')).engines.node
const currentNodeVersion = fse.readJSONSync(join(rootDir, 'package.json')).engines.node
if (['12', '10'].includes(currentNodeVersion)) {
nodeVersion = currentNodeVersion
}
@ -66,8 +69,8 @@ async function writeRoutes ({ output: { publicDir, serverDir }, _nuxt: { rootDir
dependencies,
devDependencies: {
'firebase-functions-test': 'latest',
'firebase-admin': require('firebase-admin/package.json').version,
'firebase-functions': require('firebase-functions/package.json')
'firebase-admin': _require('firebase-admin/package.json').version,
'firebase-functions': _require('firebase-functions/package.json')
.version
},
engines: { node: nodeVersion }

View File

@ -1,5 +1,5 @@
import { existsSync, promises as fsp } from 'fs'
import { join } from 'pathe'
import { existsSync, readFile, writeFile } from 'fs-extra'
import consola from 'consola'
import { extendPreset } from '../utils'
import { NitroContext, NitroPreset } from '../context'
@ -15,7 +15,7 @@ export const netlify: NitroPreset = extendPreset(lambda, {
const redirectsPath = join(ctx.output.publicDir, '_redirects')
let contents = '/* /.netlify/functions/server 200'
if (existsSync(redirectsPath)) {
const currentRedirects = await readFile(redirectsPath, 'utf-8')
const currentRedirects = await fsp.readFile(redirectsPath, 'utf-8')
if (currentRedirects.match(/^\/\* /m)) {
consola.info('Not adding Nitro fallback to `_redirects` (as an existing fallback was found).')
return
@ -23,7 +23,7 @@ export const netlify: NitroPreset = extendPreset(lambda, {
consola.info('Adding Nitro fallback to `_redirects` to handle all unmatched routes.')
contents = currentRedirects + '\n' + contents
}
await writeFile(redirectsPath, contents)
await fsp.writeFile(redirectsPath, contents)
},
'nitro:rollup:before' (ctx: NitroContext) {
ctx.rollupConfig.output.entryFileNames = 'server.ts'

View File

@ -1,5 +1,6 @@
import { pathToFileURL } from 'url'
import { dirname, join, normalize, relative, resolve } from 'pathe'
import { createRequire } from 'module'
import { dirname, join, relative, resolve } from 'pathe'
import type { InputOptions, OutputOptions } from 'rollup'
import defu from 'defu'
import { terser } from 'rollup-plugin-terser'
@ -15,7 +16,8 @@ import * as unenv from 'unenv'
import type { Preset } from 'unenv'
import { NitroContext } from '../context'
import { resolvePath, MODULE_DIR } from '../utils'
import { resolvePath } from '../utils'
import { pkgDir } from '../dirs'
import { dynamicRequire } from './plugins/dynamic-require'
import { externals } from './plugins/externals'
@ -63,10 +65,11 @@ export const getRollupConfig = (nitroContext: NitroContext) => {
}
// TODO: #590
const _require = createRequire(import.meta.url)
if (nitroContext._nuxt.majorVersion === 3) {
env.alias['vue/server-renderer'] = 'vue/server-renderer'
env.alias['vue/compiler-sfc'] = 'vue/compiler-sfc'
env.alias.vue = require.resolve(`vue/dist/vue.cjs${nitroContext._nuxt.dev ? '' : '.prod'}.js`)
env.alias.vue = _require.resolve(`vue/dist/vue.cjs${nitroContext._nuxt.dev ? '' : '.prod'}.js`)
}
const buildServerDir = join(nitroContext._nuxt.buildDir, 'dist/server')
@ -216,8 +219,8 @@ export const getRollupConfig = (nitroContext: NitroContext) => {
rollupConfig.plugins.push(alias({
entries: {
'#nitro': nitroContext._internal.runtimeDir,
'#nitro-renderer': normalize(require.resolve(resolve(nitroContext._internal.runtimeDir, 'app', renderer))),
'#config': normalize(require.resolve(resolve(nitroContext._internal.runtimeDir, 'app/config'))),
'#nitro-renderer': resolve(nitroContext._internal.runtimeDir, 'app', renderer),
'#config': resolve(nitroContext._internal.runtimeDir, 'app/config'),
'#nitro-vue-renderer': vue2ServerRenderer,
// Only file and data URLs are supported by the default ESM loader on Windows (#427)
'#build': nitroContext._nuxt.dev && process.platform === 'win32'
@ -234,7 +237,7 @@ export const getRollupConfig = (nitroContext: NitroContext) => {
const moduleDirectories = [
resolve(nitroContext._nuxt.rootDir, 'node_modules'),
...nitroContext._nuxt.modulesDir,
resolve(MODULE_DIR, '../node_modules'),
resolve(pkgDir, '../node_modules'),
'node_modules'
]

View File

@ -1,10 +1,11 @@
import { pathToFileURL } from 'url'
import { resolve } from 'pathe'
import globby from 'globby'
import type { Plugin } from 'rollup'
import { serializeImportName } from '../../utils'
const PLUGIN_NAME = 'dynamic-require'
const HELPER_DYNAMIC = `\0${PLUGIN_NAME}.js`
const HELPER_DYNAMIC = `\0${PLUGIN_NAME}.mjs`
const DYNAMIC_REQUIRE_RE = /import\("\.\/" ?\+(.*)\).then/g
interface Options {
@ -57,24 +58,25 @@ export function dynamicRequire ({ dir, ignore, inline }: Options): Plugin {
let files = []
try {
const wpManifest = resolve(dir, './server.manifest.json')
files = await import(wpManifest).then(r => Object.keys(r.files).filter(file => !ignore.includes(file)))
files = await import(pathToFileURL(wpManifest).href).then(r => Object.keys(r.files).filter(file => !ignore.includes(file)))
} catch {
files = await globby('**/*.{cjs,mjs,js}', { cwd: dir, absolute: false, ignore })
}
const chunks = files.map(id => ({
const chunks = (await Promise.all(files.map(async id => ({
id,
src: resolve(dir, id).replace(/\\/g, '/'),
name: serializeImportName(id),
meta: getWebpackChunkMeta(resolve(dir, id))
})).filter(chunk => chunk.meta)
meta: await getWebpackChunkMeta(resolve(dir, id))
})))).filter(chunk => chunk.meta)
return inline ? TMPL_INLINE({ chunks }) : TMPL_LAZY({ chunks })
}
}
}
function getWebpackChunkMeta (src: string) {
const chunk = require(src) || {}
async function getWebpackChunkMeta (src: string) {
const chunk = await import(pathToFileURL(src).href).then(r => r.default || r || {})
const { id, ids, modules } = chunk
if (!id && !ids) {
return null // Not a webpack chunk

View File

@ -1,5 +1,5 @@
import { resolve, dirname } from 'pathe'
import { copyFile, mkdirp } from 'fs-extra'
import fse from 'fs-extra'
import { nodeFileTrace, NodeFileTraceOptions } from '@vercel/nft'
import type { Plugin } from 'rollup'
@ -84,8 +84,8 @@ export function externals (opts: NodeExternalsOptions): Plugin {
const writeFile = async (file) => {
const src = resolve(opts.traceOptions.base, file)
const dst = resolve(opts.outDir, 'node_modules', file.split('node_modules/').pop())
await mkdirp(dirname(dst))
await copyFile(src, dst)
await fse.mkdirp(dirname(dst))
await fse.copyFile(src, dst)
}
if (process.platform === 'win32') {
// Workaround for EBUSY on windows (#424)

View File

@ -1,5 +1,5 @@
import { readFileSync, statSync } from 'fs'
import createEtag from 'etag'
import { readFileSync, statSync } from 'fs-extra'
import mime from 'mime'
import { relative, resolve } from 'pathe'
import virtual from '@rollup/plugin-virtual'

View File

@ -1,4 +1,4 @@
import * as path from 'pathe'
import { resolve, dirname } from 'pathe'
import type { Plugin } from 'rollup'
// Based on https://github.com/rollup/plugins/blob/master/packages/virtual/src/index.ts
@ -16,7 +16,7 @@ export default function virtual (modules: RollupVirtualOptions): Plugin {
for (const [id, mod] of Object.entries(modules)) {
_modules.set(id, mod)
_modules.set(path.resolve(id), mod)
_modules.set(resolve(id), mod)
}
return {
@ -29,7 +29,7 @@ export default function virtual (modules: RollupVirtualOptions): Plugin {
const importerNoPrefix = importer.startsWith(PREFIX)
? importer.slice(PREFIX.length)
: importer
const resolved = path.resolve(path.dirname(importerNoPrefix), id)
const resolved = resolve(dirname(importerNoPrefix), id)
if (_modules.has(resolved)) { return PREFIX + resolved }
}

View File

@ -1,7 +1,7 @@
import '#polyfill'
// @ts-ignore
import functions from 'firebase-functions'
import { handle } from '../server'
const functions = require('firebase-functions')
export const server = functions.https.onRequest(handle)

View File

@ -1,17 +1,17 @@
import { Worker } from 'worker_threads'
import { IncomingMessage, ServerResponse } from 'http'
import { promises as fsp } from 'fs'
import { loading as loadingTemplate } from '@nuxt/design'
import chokidar, { FSWatcher } from 'chokidar'
import debounce from 'debounce'
import { stat } from 'fs-extra'
import { promisifyHandle, createApp, Middleware, useBase } from 'h3'
import { createProxy } from 'http-proxy'
import httpProxy from 'http-proxy'
import { listen, Listener, ListenOptions } from 'listhen'
import servePlaceholder from 'serve-placeholder'
import serveStatic from 'serve-static'
import { resolve } from 'pathe'
import type { Server } from 'connect'
import connect from 'connect'
import type { NitroContext } from '../context'
import { handleVfs } from './vfs'
@ -27,7 +27,7 @@ export function createDevServer (nitroContext: NitroContext) {
workerAddress = null
pendingWorker = null
}
if (!(await stat(workerEntry)).isFile) {
if (!(await fsp.stat(workerEntry)).isFile) {
throw new Error('Entry not found: ' + workerEntry)
}
return new Promise((resolve, reject) => {
@ -72,7 +72,7 @@ export function createDevServer (nitroContext: NitroContext) {
app.use(nitroContext._nuxt.publicPath, servePlaceholder())
// SSR Proxy
const proxy = createProxy()
const proxy = httpProxy.createProxy()
const proxyHandle = promisifyHandle((req: IncomingMessage, res: ServerResponse) => proxy.web(req, res, { target: workerAddress }, (_err: unknown) => {
// console.error('[proxy]', err)
}))
@ -151,7 +151,7 @@ function createDynamicMiddleware (): DynamicMiddleware {
middleware = input
return
}
const app: Server = require('connect')()
const app = connect()
for (const m of input) {
app.use(m.path || m.route || '/', m.handler || m.handle!)
}

View File

@ -1,3 +1,4 @@
import { createRequire } from 'module'
import { relative, dirname, resolve } from 'pathe'
import fse from 'fs-extra'
import jiti from 'jiti'
@ -8,8 +9,6 @@ import chalk from 'chalk'
import { get } from 'dot-prop'
import type { NitroPreset, NitroInput } from '../context'
export const MODULE_DIR = resolve(__dirname, '..')
export function hl (str: string) {
return chalk.cyan(str)
}
@ -35,7 +34,7 @@ export function serializeTemplate (contents: string) {
}
export function jitiImport (dir: string, path: string) {
return jiti(dir)(path)
return jiti(dir, { interopDefault: true })(path)
}
export function tryImport (dir: string, path: string) {
@ -107,9 +106,10 @@ const _getDependenciesMode = {
prod: ['dependencies'],
all: ['devDependencies', 'dependencies']
}
const _require = createRequire(import.meta.url)
export function getDependencies (dir: string, mode: keyof typeof _getDependenciesMode = 'all') {
const fields = _getDependenciesMode[mode]
const pkg = require(resolve(dir, 'package.json'))
const pkg = _require(resolve(dir, 'package.json'))
const dependencies = []
for (const field of fields) {
if (pkg[field]) {

View File

@ -1,8 +1,8 @@
import { promises as fsp } from 'fs'
import { resolve, dirname, relative } from 'pathe'
import globby from 'globby'
import prettyBytes from 'pretty-bytes'
import gzipSize from 'gzip-size'
import { readFile } from 'fs-extra'
import chalk from 'chalk'
import stdenv from 'std-env'
@ -15,7 +15,7 @@ export async function printFSTree (dir: string) {
const items = (await Promise.all(files.map(async (file) => {
const path = resolve(dir, file)
const src = await readFile(path)
const src = await fsp.readFile(path)
const size = src.byteLength
const gzip = await gzipSize(src)
return { file, path, size, gzip }

View File

@ -1,4 +0,0 @@
#!/usr/bin/env node
process._startTime = Date.now()
require('../dist/index.cjs').main()

3
packages/nuxi/bin/nuxi.mjs Executable file
View File

@ -0,0 +1,3 @@
#!/usr/bin/env node
process._startTime = Date.now()
import('../dist/index.mjs').then(r => (r.default || r).main())

View File

@ -3,6 +3,8 @@ import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
declaration: true,
inlineDependencies: true,
emitCJS: false,
cjsBridge: true,
entries: [
'src/index'
],

View File

@ -3,10 +3,14 @@
"version": "0.10.0",
"repository": "nuxt/framework",
"license": "MIT",
"main": "./dist/index.cjs",
"type": "module",
"exports": {
".": "./dist/index.mjs",
"./cli": "./bin/nuxi.mjs"
},
"bin": {
"nu": "./bin/nuxi.cjs",
"nuxi": "./bin/nuxi.cjs"
"nu": "./bin/nuxi.mjs",
"nuxi": "./bin/nuxi.mjs"
},
"scripts": {
"prepack": "unbuild"
@ -34,6 +38,7 @@
"flat": "^5.0.2",
"jiti": "^1.12.6",
"listhen": "^0.2.4",
"mlly": "^0.2.2",
"mri": "^1.2.0",
"pathe": "^0.2.0",
"scule": "^0.2.1",

View File

@ -1,5 +1,5 @@
import { resolve } from 'pathe'
import { requireModule } from '../utils/cjs'
import { importModule } from '../utils/cjs'
import { error } from '../utils/log'
import { defineNuxtCommand } from './index'
@ -14,7 +14,7 @@ export default defineNuxtCommand({
process.env.NODE_ENV = process.env.NODE_ENV || 'production'
const rootDir = resolve(args._[0] || '.')
const { loadNuxt, buildNuxt } = requireModule('@nuxt/kit', rootDir) as typeof import('@nuxt/kit')
const { loadNuxt, buildNuxt } = await importModule('@nuxt/kit', rootDir) as typeof import('@nuxt/kit')
const nuxt = await loadNuxt({ rootDir })

View File

@ -4,7 +4,7 @@ import debounce from 'debounce-promise'
import type { Nuxt } from '@nuxt/kit'
import { createServer, createLoadingHandler } from '../utils/server'
import { showBanner } from '../utils/banner'
import { requireModule } from '../utils/cjs'
import { importModule } from '../utils/cjs'
import { error } from '../utils/log'
import { defineNuxtCommand } from './index'
@ -24,7 +24,7 @@ export default defineNuxtCommand({
const rootDir = resolve(args._[0] || '.')
const { loadNuxt, buildNuxt } = requireModule('@nuxt/kit', rootDir) as typeof import('@nuxt/kit')
const { loadNuxt, buildNuxt } = await importModule('@nuxt/kit', rootDir) as typeof import('@nuxt/kit')
let currentNuxt: Nuxt
const load = async (isRestart: boolean, reason?: string) => {

View File

@ -1,11 +1,13 @@
import type { Argv } from 'mri'
const _rDefault = r => r.default || r
export const commands = {
dev: () => import('./dev'),
build: () => import('./build'),
prepare: () => import('./prepare'),
usage: () => import('./usage'),
info: () => import('./info')
dev: () => import('./dev').then(_rDefault),
build: () => import('./build').then(_rDefault),
prepare: () => import('./prepare').then(_rDefault),
usage: () => import('./usage').then(_rDefault),
info: () => import('./info').then(_rDefault)
}
export type Command = keyof typeof commands

View File

@ -1,5 +1,6 @@
import os from 'os'
import { existsSync, readFileSync } from 'fs'
import { createRequire } from 'module'
import { resolve, dirname } from 'pathe'
import jiti from 'jiti'
import destr from 'destr'
@ -129,7 +130,8 @@ function getPkg (name, rootDir) {
let pkgPath = resolve(rootDir, 'node_modules', name, 'package.json')
// Try to resolve for more accuracy
try { pkgPath = require.resolve(name + '/package.json', { paths: [rootDir] }) } catch (_err) {
const _require = createRequire(rootDir)
try { pkgPath = _require.resolve(name + '/package.json') } catch (_err) {
// console.log('not found:', name)
}

View File

@ -2,7 +2,7 @@ import { promises as fsp } from 'fs'
import { relative, resolve } from 'pathe'
import { cyan } from 'colorette'
import type { TSReference } from '@nuxt/kit'
import { requireModule, getModulePaths, getNearestPackage } from '../utils/cjs'
import { importModule, getModulePaths, getNearestPackage } from '../utils/cjs'
import { success } from '../utils/log'
import { defineNuxtCommand } from './index'
@ -16,7 +16,7 @@ export default defineNuxtCommand({
process.env.NODE_ENV = process.env.NODE_ENV || 'production'
const rootDir = resolve(args._[0] || '.')
const { loadNuxt } = requireModule('@nuxt/kit', rootDir) as typeof import('@nuxt/kit')
const { loadNuxt } = await importModule('@nuxt/kit', rootDir) as typeof import('@nuxt/kit')
const nuxt = await loadNuxt({ rootDir })
const adHocModules = nuxt.options._majorVersion === 3

View File

@ -1,4 +1,3 @@
import 'v8-compile-cache'
import mri from 'mri'
import { red, cyan } from 'colorette'
import { commands, Command, NuxtCommand } from './commands'
@ -30,7 +29,7 @@ async function _main () {
try {
// @ts-ignore default.default is hotfix for #621
const cmd = await commands[command as Command]().then(c => c.default.default) as NuxtCommand
const cmd = await commands[command as Command]() as NuxtCommand
if (args.h || args.help) {
showHelp(cmd.meta)
} else {

View File

@ -1,3 +1,5 @@
import { createRequire } from 'module'
import { pathToFileURL } from 'url'
import { normalize, dirname } from 'pathe'
export function getModulePaths (paths?: string | string[]): string[] {
@ -11,8 +13,10 @@ export function getModulePaths (paths?: string | string[]): string[] {
).filter(Boolean)
}
const _require = createRequire(process.cwd())
export function resolveModule (id: string, paths?: string | string[]) {
return normalize(require.resolve(id, { paths: getModulePaths(paths) }))
return normalize(_require.resolve(id, { paths: getModulePaths(paths) }))
}
export function tryResolveModule (id: string, paths?: string | string[]) {
@ -22,7 +26,12 @@ export function tryResolveModule (id: string, paths?: string | string[]) {
}
export function requireModule (id: string, paths?: string | string[]) {
return require(resolveModule(id, paths))
return _require(resolveModule(id, paths))
}
export function importModule (id: string, paths?: string | string[]) {
const resolvedPath = resolveModule(id, paths)
return import(pathToFileURL(resolvedPath).href)
}
export function getNearestPackage (id: string, paths?: string | string[]) {

View File

@ -1,2 +0,0 @@
#!/usr/bin/env node
require('nuxi/bin/nuxi.cjs')

2
packages/nuxt3/bin/nuxt.mjs Executable file
View File

@ -0,0 +1,2 @@
#!/usr/bin/env node
import 'nuxi/cli'

View File

@ -2,6 +2,7 @@ import { defineBuildConfig, BuildEntry } from 'unbuild'
export default defineBuildConfig({
declaration: true,
emitCJS: false,
entries: [
// Core
{ input: 'src/index' },

View File

@ -3,10 +3,11 @@
"version": "0.10.0",
"repository": "nuxt/framework",
"license": "MIT",
"main": "./dist/index.cjs",
"type": "module",
"exports": "./dist/index.mjs",
"types": "./types.d.ts",
"bin": {
"nuxt": "./bin/nuxt.cjs"
"nuxt": "./bin/nuxt.mjs"
},
"files": [
"bin",
@ -32,6 +33,7 @@
"hash-sum": "^2.0.0",
"hookable": "^5.0.0",
"ignore": "^5.1.8",
"mlly": "^0.2.2",
"nuxi": "^0.10.0",
"ohmyfetch": "^0.3.1",
"pathe": "^0.2.0",

View File

@ -1,7 +1,7 @@
import { promises as fsp } from 'fs'
import { resolve } from 'pathe'
import defu from 'defu'
import { tryResolvePath, resolveFiles, Nuxt, NuxtApp, normalizePlugin, normalizeTemplate, compileTemplate, templateUtils } from '@nuxt/kit'
import { writeFile } from 'fs-extra'
import * as defaultTemplates from '../app/templates'
@ -44,7 +44,7 @@ export async function generateApp (nuxt: Nuxt, app: NuxtApp) {
}
if (template.write) {
await writeFile(fullPath, contents, 'utf8')
await fsp.writeFile(fullPath, contents, 'utf8')
}
}))

View File

@ -1,11 +1,11 @@
import chokidar from 'chokidar'
import { Nuxt } from '@nuxt/kit'
import { emptyDir } from 'fs-extra'
import fse from 'fs-extra'
import { createApp, generateApp } from './app'
export async function build (nuxt: Nuxt) {
// Clear buildDir once
await emptyDir(nuxt.options.buildDir)
await fse.emptyDir(nuxt.options.buildDir)
const app = createApp(nuxt)
await generateApp(nuxt, app)

View File

@ -1,4 +1,4 @@
import { normalize } from 'pathe'
import { resolve } from 'pathe'
import { wpfs, getNitroContext, createDevServer, resolveMiddleware, build, prepare, generate } from '@nuxt/nitro'
import type { Nuxt } from '@nuxt/kit'
@ -28,7 +28,7 @@ export function initNitro (nuxt: Nuxt) {
// Add nitro client plugin (to inject $fetch helper)
nuxt.hook('app:resolve', (app) => {
app.plugins.push({ src: normalize(require.resolve('@nuxt/nitro/dist/runtime/app/nitro.client.mjs')) })
app.plugins.push({ src: resolve(nitroContext._internal.runtimeDir, 'app/nitro.client.mjs') })
})
// Expose process.env.NITRO_PRESET

View File

@ -1,4 +1,5 @@
import { resolve } from 'pathe'
import { fileURLToPath } from 'url'
import { dirname, resolve } from 'pathe'
export const distDir = __dirname
export const distDir = dirname(fileURLToPath(import.meta.url))
export const pkgDir = resolve(distDir, '..')

View File

@ -2,6 +2,7 @@ import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
declaration: true,
emitCJS: false,
entries: [
'src/index'
],

View File

@ -3,8 +3,9 @@
"version": "0.10.0",
"repository": "nuxt/framework",
"license": "MIT",
"main": "./dist/index.cjs",
"type": "module",
"types": "./dist/index.d.ts",
"exports": "./dist/index.mjs",
"files": [
"dist"
],

View File

@ -1,6 +1,6 @@
import * as vite from 'vite'
import { resolve } from 'pathe'
import { mkdirp, readJSON, writeFile } from 'fs-extra'
import * as vite from 'vite'
import fse from 'fs-extra'
import consola from 'consola'
import vitePlugin from '@vitejs/plugin-vue'
@ -84,9 +84,9 @@ export async function buildClient (ctx: ViteBuildContext) {
const clientManifest = ctx.nuxt.options.dev
? devClientManifest
: await readJSON(resolve(clientDist, 'manifest.json'))
: await fse.readJSON(resolve(clientDist, 'manifest.json'))
await mkdirp(serverDist)
await writeFile(resolve(serverDist, 'client.manifest.json'), JSON.stringify(clientManifest, null, 2), 'utf8')
await writeFile(resolve(serverDist, 'client.manifest.mjs'), 'export default ' + JSON.stringify(clientManifest, null, 2), 'utf8')
await fse.mkdirp(serverDist)
await fse.writeFile(resolve(serverDist, 'client.manifest.json'), JSON.stringify(clientManifest, null, 2), 'utf8')
await fse.writeFile(resolve(serverDist, 'client.manifest.mjs'), 'export default ' + JSON.stringify(clientManifest, null, 2), 'utf8')
}

View File

@ -1,7 +1,7 @@
import { join } from 'pathe'
import fsExtra from 'fs-extra'
import fse from 'fs-extra'
export const wpfs = {
...fsExtra,
...fse,
join
}

View File

@ -2,6 +2,7 @@ import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
declaration: true,
emitCJS: false,
entries: [
'src/index'
],

View File

@ -3,8 +3,12 @@
"version": "0.10.0",
"repository": "nuxt/framework",
"license": "MIT",
"main": "./dist/index.cjs",
"type": "module",
"types": "./dist/index.d.ts",
"exports": {
".": "./dist/index.mjs",
"./dist/*": "./dist/*"
},
"files": [
"dist"
],
@ -27,9 +31,10 @@
"fs-extra": "^10.0.0",
"glob": "^7.2.0",
"hash-sum": "^2.0.0",
"lodash": "^4.17.21",
"lodash-es": "^4.17.21",
"memfs": "^3.3.0",
"mini-css-extract-plugin": "^2.3.0",
"mlly": "^0.2.2",
"pathe": "^0.2.0",
"pify": "^5.0.0",
"postcss": "^8.3.8",

View File

@ -1,5 +1,5 @@
import querystring from 'querystring'
import path from 'pathe'
import { resolve } from 'pathe'
import webpack from 'webpack'
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'
@ -81,7 +81,7 @@ function clientPlugins (ctx: WebpackConfigContext) {
// Webpack Bundle Analyzer
// https://github.com/webpack-contrib/webpack-bundle-analyzer
if (!ctx.isDev && options.build.analyze) {
const statsDir = path.resolve(options.buildDir, 'stats')
const statsDir = resolve(options.buildDir, 'stats')
// @ts-ignore
config.plugins.push(new BundleAnalyzerPlugin({
@ -89,8 +89,8 @@ function clientPlugins (ctx: WebpackConfigContext) {
defaultSizes: 'gzip',
generateStatsFile: true,
openAnalyzer: !options.build.quiet,
reportFilename: path.resolve(statsDir, `${ctx.name}.html`),
statsFilename: path.resolve(statsDir, `${ctx.name}.json`),
reportFilename: resolve(statsDir, `${ctx.name}.html`),
statsFilename: resolve(statsDir, `${ctx.name}.json`),
...options.build.analyze as any
}))
}

View File

@ -1,5 +1,5 @@
import { isAbsolute } from 'pathe'
import { ProvidePlugin } from 'webpack'
import webpack from 'webpack'
import { WebpackConfigContext, applyPresets, getWebpackConfig } from '../utils/config'
import { nuxt } from '../presets/nuxt'
import { node } from '../presets/node'
@ -68,7 +68,7 @@ function serverPlugins (ctx: WebpackConfigContext) {
// Server polyfills
if (options.build.serverURLPolyfill) {
config.plugins.push(new ProvidePlugin({
config.plugins.push(new webpack.ProvidePlugin({
URL: [options.build.serverURLPolyfill, 'URL'],
URLSearchParams: [options.build.serverURLPolyfill, 'URLSearchParams']
}))

View File

@ -5,8 +5,8 @@
import { dirname } from 'pathe'
import hash from 'hash-sum'
import { uniq } from 'lodash'
import { writeFile, mkdirp } from 'fs-extra'
import { uniq } from 'lodash-es'
import fse from 'fs-extra'
import { isJS, isCSS, isHotUpdate } from './util'
@ -111,11 +111,11 @@ export default class VueSSRClientPlugin {
const src = JSON.stringify(manifest, null, 2)
await mkdirp(dirname(this.options.filename))
await writeFile(this.options.filename, src)
await fse.mkdirp(dirname(this.options.filename))
await fse.writeFile(this.options.filename, src)
const mjsSrc = 'export default ' + src
await writeFile(this.options.filename.replace('.json', '.mjs'), mjsSrc)
await fse.writeFile(this.options.filename.replace('.json', '.mjs'), mjsSrc)
// assets[this.options.filename] = {
// source: () => src,

View File

@ -1,5 +1,5 @@
import { Compilation } from 'webpack'
import webpack from 'webpack'
import { validate, isJS, extractQueryPartJS } from './util'
export default class VueSSRServerPlugin {
@ -18,7 +18,7 @@ export default class VueSSRServerPlugin {
compiler.hooks.make.tap('VueSSRServerPlugin', (compilation: any) => {
compilation.hooks.processAssets.tapAsync({
name: 'VueSSRServerPlugin',
stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL
stage: webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL
}, (assets, cb) => {
const stats = compilation.getStats().toJson()
const [entryName] = Object.keys(stats.entrypoints)

View File

@ -1,4 +1,4 @@
import { WebpackError } from 'webpack'
import type { WebpackError } from 'webpack'
export default class WarningIgnorePlugin {
filter: (warn: WebpackError) => boolean

View File

@ -1,13 +1,16 @@
import { createRequire } from 'module'
import { normalize } from 'pathe'
import TerserWebpackPlugin from 'terser-webpack-plugin'
import { reservedVueTags } from '../utils/reserved-tags'
import { WebpackConfigContext } from '../utils/config'
const _require = createRequire(import.meta.url)
export function babel (ctx: WebpackConfigContext) {
const { config, options } = ctx
const babelLoader = {
loader: normalize(require.resolve('babel-loader')),
loader: normalize(_require.resolve('babel-loader')),
options: getBabelOptions(ctx)
}
@ -67,7 +70,7 @@ function getBabelOptions (ctx: WebpackConfigContext) {
babelOptions.plugins = babelOptions.plugins(ctx)
}
const defaultPreset = [normalize(require.resolve('../../babel-preset-app')), {}]
const defaultPreset = [normalize(_require.resolve('../../babel-preset-app')), {}]
if (typeof babelOptions.presets === 'function') {
babelOptions.presets = babelOptions.presets(ctx, defaultPreset)

View File

@ -2,9 +2,9 @@ import { resolve, normalize } from 'pathe'
import TimeFixPlugin from 'time-fix-plugin'
import WebpackBar from 'webpackbar'
import consola from 'consola'
import { DefinePlugin, Configuration } from 'webpack'
import webpack from 'webpack'
import FriendlyErrorsWebpackPlugin from '@nuxt/friendly-errors-webpack-plugin'
import { escapeRegExp } from 'lodash'
import { escapeRegExp } from 'lodash-es'
import { hasProtocol, joinURL } from 'ufo'
import WarningIgnorePlugin from '../plugins/warning-ignore'
import { WebpackConfigContext, applyPresets, fileName } from '../utils/config'
@ -55,7 +55,7 @@ function basePlugins (ctx: WebpackConfigContext) {
config.plugins.push(new WarningIgnorePlugin(getWarningIgnoreFilter(ctx)))
// Provide env via DefinePlugin
config.plugins.push(new DefinePlugin(getEnv(ctx)))
config.plugins.push(new webpack.DefinePlugin(getEnv(ctx)))
// Friendly errors
if (
@ -164,7 +164,7 @@ export function baseTranspile (ctx: WebpackConfigContext) {
ctx.transpile = [...transpile, ...ctx.transpile]
}
function getCache (ctx: WebpackConfigContext): Configuration['cache'] {
function getCache (ctx: WebpackConfigContext): webpack.Configuration['cache'] {
const { options } = ctx
if (!options.dev) {
@ -187,7 +187,7 @@ function getCache (ctx: WebpackConfigContext): Configuration['cache'] {
// }
}
function getOutput (ctx: WebpackConfigContext): Configuration['output'] {
function getOutput (ctx: WebpackConfigContext): webpack.Configuration['output'] {
const { options } = ctx
return {

View File

@ -1,4 +1,4 @@
import path from 'pathe'
import { resolve } from 'pathe'
import MiniCssExtractPlugin from 'mini-css-extract-plugin'
import CssMinimizerPlugin from 'css-minimizer-webpack-plugin'
import { fileName, WebpackConfigContext, applyPresets } from '../utils/config'
@ -130,7 +130,7 @@ function createStyleResourcesLoaderRule (styleLang, styleResources, rootDir) {
return {
loader: 'style-resources-loader',
options: {
patterns: Array.from(styleResources[styleLang]).map(p => path.resolve(rootDir, p as string)),
patterns: Array.from(styleResources[styleLang]).map(p => resolve(rootDir, p as string)),
...styleResources.options
}
}

View File

@ -1,6 +1,6 @@
import { resolve } from 'pathe'
import VueLoaderPlugin from 'vue-loader/dist/pluginWebpack5'
import { DefinePlugin } from 'webpack'
import VueLoaderPlugin from 'vue-loader/dist/pluginWebpack5.js'
import webpack from 'webpack'
import VueSSRClientPlugin from '../plugins/vue/client'
import VueSSRServerPlugin from '../plugins/vue/server'
import { WebpackConfigContext } from '../utils/config'
@ -8,7 +8,8 @@ import { WebpackConfigContext } from '../utils/config'
export function vue (ctx: WebpackConfigContext) {
const { options, config } = ctx
config.plugins.push(new VueLoaderPlugin())
// @ts-ignore
config.plugins.push(new (VueLoaderPlugin.default || VueLoaderPlugin)())
config.module.rules.push({
test: /\.vue$/i,
@ -29,7 +30,7 @@ export function vue (ctx: WebpackConfigContext) {
// Feature flags
// https://github.com/vuejs/vue-next/tree/master/packages/vue#bundler-build-feature-flags
// TODO: Provide options to toggle
config.plugins.push(new DefinePlugin({
config.plugins.push(new webpack.DefinePlugin({
__VUE_OPTIONS_API__: 'true',
__VUE_PROD_DEVTOOLS__: 'false'
}))

View File

@ -1,6 +1,6 @@
import consola from 'consola'
import { cloneDeep } from 'lodash'
import { Configuration } from 'webpack'
import { cloneDeep } from 'lodash-es'
import type { Configuration } from 'webpack'
import type { Nuxt } from '@nuxt/kit'
export interface WebpackConfigContext extends ReturnType<typeof createWebpackConfigContext>{ }

View File

@ -1,4 +1,4 @@
import path from 'pathe'
import { join } from 'pathe'
import pify from 'pify'
import { Volume, createFsFromVolume } from 'memfs'
@ -13,7 +13,7 @@ export function createMFS () {
// fs.join method is (still) expected by webpack-dev-middleware
// There might be differences with https://github.com/webpack/memory-fs/blob/master/lib/join.js
_fs.join = path.join
_fs.join = join
// Used by vue-renderer
_fs.exists = p => Promise.resolve(_fs.existsSync(p))

View File

@ -1,7 +1,8 @@
import fs from 'fs'
import path from 'pathe'
import { resolve } from 'pathe'
import consola from 'consola'
import { defaults, merge, cloneDeep } from 'lodash'
import { createCommonJS } from 'mlly'
import { defaults, merge, cloneDeep } from 'lodash-es'
import createResolver from 'postcss-import-resolver'
import { Nuxt, requireModule } from '@nuxt/kit'
@ -111,7 +112,7 @@ export class PostcssConfig {
'.postcssrc.json',
'.postcssrc.yaml'
]) {
const configFile = path.resolve(dir, file)
const configFile = resolve(dir, file)
if (fs.existsSync(configFile)) {
postcssConfigFileWarning()
return configFile
@ -140,8 +141,9 @@ export class PostcssConfig {
loadPlugins (config) {
if (!isPureObject(config.plugins)) { return }
// Map postcss plugins into instances on object mode once
const cjs = createCommonJS(import.meta.url)
config.plugins = this.sortPlugins(config).map((pluginName) => {
const pluginFn = requireModule(pluginName, { paths: [__dirname] })
const pluginFn = requireModule(pluginName, { paths: [cjs.__dirname] })
const pluginOptions = config.plugins[pluginName]
if (!pluginOptions || typeof pluginFn !== 'function') { return null }
return pluginFn(pluginOptions)

View File

@ -1,5 +1,5 @@
import type { IncomingMessage, ServerResponse } from 'http'
import path from 'pathe'
import { resolve } from 'pathe'
import pify from 'pify'
import webpack from 'webpack'
import Glob from 'glob'
@ -100,7 +100,7 @@ class WebpackBundler {
)
for (const ext of Object.keys(styleResources)) {
await Promise.all(Array.from(styleResources[ext]).map(async (p) => {
const styleResourceFiles = await glob(path.resolve(this.nuxt.options.rootDir, p as string))
const styleResourceFiles = await glob(resolve(this.nuxt.options.rootDir, p as string))
if (!styleResourceFiles || styleResourceFiles.length === 0) {
throw new Error(`Style Resource not found: ${p}`)

View File

@ -1,9 +1,7 @@
import { defineNuxtConfig } from '@nuxt/kit'
// @ts-ignore
global.__NUXT_PREPATHS__ = (global.__NUXT_PREPATHS__ || []).concat(__dirname)
export default defineNuxtConfig({
export default {
components: true,
buildModules: [
'@nuxt/bridge'
@ -21,4 +19,4 @@ export default defineNuxtConfig({
nitro: {
output: { dir: process.env.NITRO_OUTPUT_DIR }
}
})
}

View File

@ -1690,9 +1690,9 @@ __metadata:
linkType: hard
"@polka/url@npm:^1.0.0-next.20":
version: 1.0.0-next.20
resolution: "@polka/url@npm:1.0.0-next.20"
checksum: a37138ed3314606c7a8984368e29413e29b24f0b877588c161ccc5464daaa235a03bc62ebffe51063a9917f5542afb29c8181b877579b33570ec6d9304c42d2e
version: 1.0.0-next.21
resolution: "@polka/url@npm:1.0.0-next.21"
checksum: c7654046d38984257dd639eab3dc770d1b0340916097b2fac03ce5d23506ada684e05574a69b255c32ea6a144a957c8cd84264159b545fca031c772289d88788
languageName: node
linkType: hard
@ -1718,9 +1718,9 @@ __metadata:
linkType: hard
"@types/node@npm:*":
version: 16.9.4
resolution: "@types/node@npm:16.9.4"
checksum: ae281eec8e0ead86fd5fd76f56312db85dce27d0ac086d07bc917df98e16af792adc4f26dab099698509e2c3704cbd17224ec8138e822d569e3cadfc15569a71
version: 16.10.2
resolution: "@types/node@npm:16.10.2"
checksum: 83c1c3c68e7500103908c3f16094e458879c840a719c15b6ea577f81fe1f24a1b3473bb6c8e8091fe79a82543ca7639c6b1088fcf80292ec091d1d1c9504a87e
languageName: node
linkType: hard
@ -2218,11 +2218,11 @@ __metadata:
linkType: hard
"ansi-align@npm:^3.0.0":
version: 3.0.0
resolution: "ansi-align@npm:3.0.0"
version: 3.0.1
resolution: "ansi-align@npm:3.0.1"
dependencies:
string-width: ^3.0.0
checksum: 6bc5f3712d28a899063845a15c5da75b2f350dda8ffac6098581619b80a85d249cdd23c3dc7b596cd31e44477382bcdedff47e31201eaa10bb9708c9fce45330
string-width: ^4.1.0
checksum: 6abfa08f2141d231c257162b15292467081fa49a208593e055c866aa0455b57f3a86b5a678c190c618faa79b4c59e254493099cb700dd9cf2293c6be2c8f5d8d
languageName: node
linkType: hard
@ -2258,14 +2258,7 @@ __metadata:
languageName: node
linkType: hard
"ansi-regex@npm:^4.1.0":
version: 4.1.0
resolution: "ansi-regex@npm:4.1.0"
checksum: 97aa4659538d53e5e441f5ef2949a3cffcb838e57aeaad42c4194e9d7ddb37246a6526c4ca85d3940a9d1e19b11cc2e114530b54c9d700c8baf163c31779baf8
languageName: node
linkType: hard
"ansi-regex@npm:^5.0.0":
"ansi-regex@npm:^5.0.1":
version: 5.0.1
resolution: "ansi-regex@npm:5.0.1"
checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b
@ -2438,19 +2431,19 @@ __metadata:
linkType: hard
"autoprefixer@npm:^9.6.1":
version: 9.8.6
resolution: "autoprefixer@npm:9.8.6"
version: 9.8.7
resolution: "autoprefixer@npm:9.8.7"
dependencies:
browserslist: ^4.12.0
caniuse-lite: ^1.0.30001109
colorette: ^1.2.1
nanocolors: ^0.2.8
normalize-range: ^0.1.2
num2fraction: ^1.2.2
postcss: ^7.0.32
postcss-value-parser: ^4.1.0
bin:
autoprefixer: bin/autoprefixer
checksum: 46987bc3de6612f0276c3643061901e33cc5721d07aaeb6f0daf237554448884a59c0b17087bf0f00a07d940abcb5a6eaf2203b962c24fe33d52f76aa845cb70
checksum: d9c6cb1ee3497f6f9346e0ea8619a8bc85844cd7ec6a86dcd6e9f8d29eed2b1a7c80135852af53b2380fb8347cc5b080ea77c294faae707e799e7b9025a40e70
languageName: node
linkType: hard
@ -2492,14 +2485,14 @@ __metadata:
linkType: hard
"babel-plugin-polyfill-corejs3@npm:^0.2.2":
version: 0.2.4
resolution: "babel-plugin-polyfill-corejs3@npm:0.2.4"
version: 0.2.5
resolution: "babel-plugin-polyfill-corejs3@npm:0.2.5"
dependencies:
"@babel/helper-define-polyfill-provider": ^0.2.2
core-js-compat: ^3.14.0
core-js-compat: ^3.16.2
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 49e9b1709fd76bff8b577da38548d05ec0317acaa9cba893bf447af7b0f26494d635b70814452782d079b2b6f25c09dd8fa76e151c0e4ae1397e8295af14e685
checksum: 7d464001f6cecc6b85aef71307e3ef17980b15aae4b2ae75d38a3fc3166005f6354932f9c694566970a3fb428f8fbc44f94c46e055a5a85b7fe8820ca16f85b6
languageName: node
linkType: hard
@ -2734,18 +2727,18 @@ __metadata:
languageName: node
linkType: hard
"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.16.6, browserslist@npm:^4.17.0, browserslist@npm:^4.6.4":
version: 4.17.0
resolution: "browserslist@npm:4.17.0"
"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.16.6, browserslist@npm:^4.17.1, browserslist@npm:^4.6.4":
version: 4.17.2
resolution: "browserslist@npm:4.17.2"
dependencies:
caniuse-lite: ^1.0.30001254
colorette: ^1.3.0
electron-to-chromium: ^1.3.830
caniuse-lite: ^1.0.30001261
electron-to-chromium: ^1.3.854
escalade: ^3.1.1
node-releases: ^1.1.75
nanocolors: ^0.2.12
node-releases: ^1.1.76
bin:
browserslist: cli.js
checksum: 9b45ec283d7ba1513bd8be6143dadb34a65e8be7f7210b3a2bce947e019184408df6126238e54f8061e9be74362b19d04eaba739b3ee0d5d41d57ac0ae5fe4cd
checksum: 9102023e8a8f541110c2905854d8398245811dfa6a02c3c94a0862c402f11fd42900cd595cb8494e5ee1104120b40e4721108219931bdbb4c59855f138e684da
languageName: node
linkType: hard
@ -2968,10 +2961,10 @@ __metadata:
languageName: node
linkType: hard
"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001228, caniuse-lite@npm:^1.0.30001254":
version: 1.0.30001258
resolution: "caniuse-lite@npm:1.0.30001258"
checksum: 2e87875a7792444f18060f836dbe1a3fcf58dcdd4608c63725dac503aadd617c2bb771c766963fb31528c10fd55201a7cf3ece555a3e754f94ee4a991626c302
"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001228, caniuse-lite@npm:^1.0.30001261":
version: 1.0.30001263
resolution: "caniuse-lite@npm:1.0.30001263"
checksum: 0657b995276a35aaa9ff6900b6e9d3876ef049c8d6065fe9f162cc0b9ac00d8b9c6e6740e87def73876a522dce8e9124170334c157cfbf5c383b7c6db79e520e
languageName: node
linkType: hard
@ -3079,7 +3072,7 @@ __metadata:
languageName: node
linkType: hard
"ci-info@npm:^3.0.0, ci-info@npm:^3.1.1":
"ci-info@npm:^3.1.1":
version: 3.2.0
resolution: "ci-info@npm:3.2.0"
checksum: c68995a94e95ce3f233ff845e62dfc56f2e8ff1e3f5c1361bcdd520cbbc9726d8a54cbc1a685cb9ee19c3c5e71a1dade6dda23eb364b59b8e6c32508a9b761bc
@ -3227,7 +3220,7 @@ __metadata:
languageName: node
linkType: hard
"colorette@npm:^1.2.1, colorette@npm:^1.2.2, colorette@npm:^1.3.0":
"colorette@npm:^1.2.2":
version: 1.4.0
resolution: "colorette@npm:1.4.0"
checksum: 01c3c16058b182a4ab4c126a65a75faa4d38a20fa7c845090b25453acec6c371bb2c5dceb0a2338511f17902b9d1a9af0cadd8509c9403894b79311032c256c3
@ -3398,13 +3391,13 @@ __metadata:
languageName: node
linkType: hard
"core-js-compat@npm:^3.12.1, core-js-compat@npm:^3.14.0, core-js-compat@npm:^3.16.0":
version: 3.18.0
resolution: "core-js-compat@npm:3.18.0"
"core-js-compat@npm:^3.12.1, core-js-compat@npm:^3.16.0, core-js-compat@npm:^3.16.2":
version: 3.18.1
resolution: "core-js-compat@npm:3.18.1"
dependencies:
browserslist: ^4.17.0
browserslist: ^4.17.1
semver: 7.0.0
checksum: 2bf11676215d912c099078564bbbd837ff6b4a18635661414f3d72b4b78bee883117d583645629999407f910be311624d0380aefec69b3b77ef91001bcb30b19
checksum: d7afbd879fa1fd6bd20778308bfafc8b4993b13a4c24cb0793baad4b027d13f59fef78b867137b0a570df708ea2d0766a067d8c5b3dc4e5e4747d70dc91e1c98
languageName: node
linkType: hard
@ -3416,9 +3409,9 @@ __metadata:
linkType: hard
"core-js@npm:^3":
version: 3.18.0
resolution: "core-js@npm:3.18.0"
checksum: 192c345eb0c8b9d582ebed798cf124e00cd8241303c3c801987563f8ebb8cb991e2ff91494c258752014c29d5515070d2c0a862687401c7d7e1e2f96f8980d42
version: 3.18.1
resolution: "core-js@npm:3.18.1"
checksum: 89cac0fe657df722d10b0e658ee76af12a614c0a75fe3fb11e87c2e3f27f6d7e609e3bf40748da5d8feb055b0535766a583ff1d1ac89dba57105f6f1ad64dc21
languageName: node
linkType: hard
@ -4096,10 +4089,10 @@ __metadata:
languageName: node
linkType: hard
"electron-to-chromium@npm:^1.3.830":
version: 1.3.843
resolution: "electron-to-chromium@npm:1.3.843"
checksum: 4adb18cf1c0f3ee8014fe6976c3e9a2c5f05353a9fd9712cf95a578ede66cd3d85106a764b6d0291c81ca31edcd8f5da4a2f7606858a11e31e410c1e6ea3f303
"electron-to-chromium@npm:^1.3.854":
version: 1.3.857
resolution: "electron-to-chromium@npm:1.3.857"
checksum: 59d3dcf7ec7d3c8209647cadb6cc9d2a14b9ef9cb2ae7c9837c9dbe38301838e6629bfa002121d3dc4c00e982327d6337d6d5460902f02f8a80d0d81c63f1728
languageName: node
linkType: hard
@ -4118,13 +4111,6 @@ __metadata:
languageName: node
linkType: hard
"emoji-regex@npm:^7.0.1":
version: 7.0.3
resolution: "emoji-regex@npm:7.0.3"
checksum: 9159b2228b1511f2870ac5920f394c7e041715429a68459ebe531601555f11ea782a8e1718f969df2711d38c66268174407cbca57ce36485544f695c2dfdc96e
languageName: node
linkType: hard
"emoji-regex@npm:^8.0.0":
version: 8.0.0
resolution: "emoji-regex@npm:8.0.0"
@ -4226,8 +4212,8 @@ __metadata:
linkType: hard
"es-abstract@npm:^1.17.2, es-abstract@npm:^1.18.0-next.2, es-abstract@npm:^1.18.2":
version: 1.18.6
resolution: "es-abstract@npm:1.18.6"
version: 1.19.0
resolution: "es-abstract@npm:1.19.0"
dependencies:
call-bind: ^1.0.2
es-to-primitive: ^1.2.1
@ -4240,14 +4226,16 @@ __metadata:
is-callable: ^1.2.4
is-negative-zero: ^2.0.1
is-regex: ^1.1.4
is-shared-array-buffer: ^1.0.1
is-string: ^1.0.7
is-weakref: ^1.0.1
object-inspect: ^1.11.0
object-keys: ^1.1.1
object.assign: ^4.1.2
string.prototype.trimend: ^1.0.4
string.prototype.trimstart: ^1.0.4
unbox-primitive: ^1.0.1
checksum: 8903ed187a9f66a8b21385401770124b37ded75a9cd99c7ea22e709ca667e7b549f37dc8bf9bf458a6cdb908c95a16fed389e2871bb3a28bfaab46db555cb1f3
checksum: 107eaf54c72405c4956211aae5ee13fab95582ad40efa3890355a4f6a65fe48b6968fe9e36e9a4f408d330d56655703cf214fa750776c07990dc189ffe67cd26
languageName: node
linkType: hard
@ -4911,8 +4899,8 @@ fsevents@~2.3.2:
linkType: hard
"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.1.7":
version: 7.1.7
resolution: "glob@npm:7.1.7"
version: 7.2.0
resolution: "glob@npm:7.2.0"
dependencies:
fs.realpath: ^1.0.0
inflight: ^1.0.4
@ -4920,7 +4908,7 @@ fsevents@~2.3.2:
minimatch: ^3.0.4
once: ^1.3.0
path-is-absolute: ^1.0.0
checksum: b61f48973bbdcf5159997b0874a2165db572b368b931135832599875919c237fc05c12984e38fe828e69aa8a921eb0e8a4997266211c517c9cfaae8a93988bb8
checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134
languageName: node
linkType: hard
@ -5597,11 +5585,11 @@ fsevents@~2.3.2:
linkType: hard
"is-core-module@npm:^2.2.0":
version: 2.6.0
resolution: "is-core-module@npm:2.6.0"
version: 2.7.0
resolution: "is-core-module@npm:2.7.0"
dependencies:
has: ^1.0.3
checksum: 183b3b96fed19822b13959876b0317e61fc2cb5ebcbc21639904c81f7ae328af57f8e18cc4750a9c4abebd686130c70d34a89521e57dbe002edfa4614507ce18
checksum: 8ec6dc714438ef9dc4dae10c94d21bd5aa67244da7e85bd9e42f0fd298514181214f6bebe358a486477c1242458b170ad7a8c936be0be15d465862fa61d3d1c7
languageName: node
linkType: hard
@ -5726,11 +5714,11 @@ fsevents@~2.3.2:
linkType: hard
"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:~4.0.1":
version: 4.0.1
resolution: "is-glob@npm:4.0.1"
version: 4.0.3
resolution: "is-glob@npm:4.0.3"
dependencies:
is-extglob: ^2.1.1
checksum: 84627cad11b4e745f5db5a163f32c47b711585a5ff6e14f8f8d026db87f4cdd3e2c95f6fa1f94ad22e469f36d819ae2814f03f9c668b164422ac3354a94672d3
checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4
languageName: node
linkType: hard
@ -5813,6 +5801,13 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"is-shared-array-buffer@npm:^1.0.1":
version: 1.0.1
resolution: "is-shared-array-buffer@npm:1.0.1"
checksum: 2ffb92533e64e2876e6cfe6906871d28400b6f1a53130fe652ec8007bc0e5044d05e7af8e31bdc992fbba520bd92938cfbeedd0f286be92f250c7c76191c4d90
languageName: node
linkType: hard
"is-ssh@npm:^1.3.0":
version: 1.3.3
resolution: "is-ssh@npm:1.3.3"
@ -5847,6 +5842,15 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"is-weakref@npm:^1.0.1":
version: 1.0.1
resolution: "is-weakref@npm:1.0.1"
dependencies:
call-bind: ^1.0.0
checksum: fdafb7b955671dd2f9658ff47c86e4025c0650fc68a3542a40e5a75898a763b1abd6b1e1f9f13207eed49541cdd76af67d73c44989ea358b201b70274cf8f6c1
languageName: node
linkType: hard
"is-windows@npm:^1.0.2":
version: 1.0.2
resolution: "is-windows@npm:1.0.2"
@ -5903,11 +5907,11 @@ fsevents@~2.3.2:
linkType: hard
"jiti@npm:^1.9.2":
version: 1.12.0
resolution: "jiti@npm:1.12.0"
version: 1.12.5
resolution: "jiti@npm:1.12.5"
bin:
jiti: bin/jiti.js
checksum: 7490f80be8504f107c0983f9e6dd38ff55764f295a334075580468d01d63a2c7057be1847e389ae3c86e09cfcd60e653b51a2c00ca4d175a26e392eb3471f96a
checksum: 00a1674f38b77c725597c175389da67894d08b386d1d3dac9ecafec3abaf75793b2ea369ed2e688f2e03f495488c843da790c111cc5e24aa533c09051a6fe704
languageName: node
linkType: hard
@ -6436,14 +6440,7 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"mime-db@npm:1.49.0":
version: 1.49.0
resolution: "mime-db@npm:1.49.0"
checksum: 3744efc45b17896ff8a5934a761c434d5ffe3c7816662002d799ca9934347e00f99ae4d9b4ddf1c48d391cc9e522cc4523a6e77e7701f8e27c426e3e1d6e215a
languageName: node
linkType: hard
"mime-db@npm:>= 1.43.0 < 2":
"mime-db@npm:1.50.0, mime-db@npm:>= 1.43.0 < 2":
version: 1.50.0
resolution: "mime-db@npm:1.50.0"
checksum: 95fcc19c3664ae72391c8a7e4015dde7fb6817c98c951493ca3a1d48050feb8ee08810a372ce7d9e16310042d26e5bda168916f600583a9a583655eeea8ff5f5
@ -6451,11 +6448,11 @@ fsevents@~2.3.2:
linkType: hard
"mime-types@npm:^2.1.19, mime-types@npm:^2.1.27, mime-types@npm:^2.1.30, mime-types@npm:~2.1.24":
version: 2.1.32
resolution: "mime-types@npm:2.1.32"
version: 2.1.33
resolution: "mime-types@npm:2.1.33"
dependencies:
mime-db: 1.49.0
checksum: 4487dfd2f872126d2c219ec731ad47a6169a438d5a4cce6ecef7594ce08eaefaf0d85429485a76ec005f095016c7ec488a24cf8bfcc0ea06de0355e23395746f
mime-db: 1.50.0
checksum: 05f2a0b3f169fbc51d79bdc7674ceb379dd07dbeadb0143059a7def865224686ee9f9051aeb340e98b6c11dbc06794ce0122181db4312cb1ad054fd90b0d510e
languageName: node
linkType: hard
@ -6706,12 +6703,19 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"nanocolors@npm:^0.2.12, nanocolors@npm:^0.2.2, nanocolors@npm:^0.2.8":
version: 0.2.12
resolution: "nanocolors@npm:0.2.12"
checksum: a34a63dcca29eede3db41afd1421f130423fc99e73f6c89166f57815bbf0441f02a6112651b068acfd309707215f48eec15dd38e790a8225d6762503a7c175c6
languageName: node
linkType: hard
"nanoid@npm:^3.1.23":
version: 3.1.25
resolution: "nanoid@npm:3.1.25"
version: 3.1.28
resolution: "nanoid@npm:3.1.28"
bin:
nanoid: bin/nanoid.cjs
checksum: e2353828c7d8fde65265e9c981380102e2021f292038a93fd27288bad390339833286e8cbc7531abe1cb2c6b317e55f38b895dcb775151637bb487388558e0ff
checksum: ae2fa9f3ce7a690ec62fc2fdf92345f023b20db760024f767c25ad392bde6414dc0b44a8e66dc1209426f36e4771e63b09ad2b49d8f1b04063b37e21b46af8d0
languageName: node
linkType: hard
@ -6768,9 +6772,11 @@ fsevents@~2.3.2:
linkType: hard
"node-fetch@npm:^2.6.1":
version: 2.6.2
resolution: "node-fetch@npm:2.6.2"
checksum: de367eae1dfbc0e12283c1cf92256ea7fba7eac8655e2e51ebb217727162396fc6cf24689ef9fc6accf075e3991e2ffaa061f7cfaa958215329649b2297ff06d
version: 2.6.5
resolution: "node-fetch@npm:2.6.5"
dependencies:
whatwg-url: ^5.0.0
checksum: 4e83db450718e70762882f00d96f647a7f2f3170035225934ddd5450cb1d91ef339ceb180d3687bcb0a6ed78c3fa5636ce8d3e44ec81ab59e0224ebf8965f65f
languageName: node
linkType: hard
@ -6842,10 +6848,10 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"node-releases@npm:^1.1.75":
version: 1.1.76
resolution: "node-releases@npm:1.1.76"
checksum: 10174cb880fffbb2896954599a2551da66127dd3c65703c827536fe9a4b4431545a9e3378c2006fb5ba59d0f0764ceff87c9f7eb0e84fabf7958411fccd0edd1
"node-releases@npm:^1.1.76":
version: 1.1.77
resolution: "node-releases@npm:1.1.77"
checksum: eb2fcb45310e7d77f82bfdadeca546a698d258e011f15d88ad9a452a5e838a672ec532906581096ca19c66284a788330c3b09227ffc540e67228730f41b9c2e2
languageName: node
linkType: hard
@ -8249,13 +8255,12 @@ fsevents@~2.3.2:
linkType: hard
"postcss@npm:^7.0.0, postcss@npm:^7.0.1, postcss@npm:^7.0.14, postcss@npm:^7.0.17, postcss@npm:^7.0.2, postcss@npm:^7.0.27, postcss@npm:^7.0.32, postcss@npm:^7.0.36, postcss@npm:^7.0.5, postcss@npm:^7.0.6":
version: 7.0.36
resolution: "postcss@npm:7.0.36"
version: 7.0.38
resolution: "postcss@npm:7.0.38"
dependencies:
chalk: ^2.4.2
nanocolors: ^0.2.2
source-map: ^0.6.1
supports-color: ^6.1.0
checksum: 4cfc0989b9ad5d0e8971af80d87f9c5beac5c84cb89ff22ad69852edf73c0a2fa348e7e0a135b5897bf893edad0fe86c428769050431ad9b532f072ff530828d
checksum: 737ba0355721880532167d3fbdc580a5ba95a5398b86f3ace610eff99aa11f3c32eb8eac0cfd8ea201a5372f43af3ed7bb6e7643263956fe1d36e927aaf3c4d4
languageName: node
linkType: hard
@ -9117,9 +9122,9 @@ fsevents@~2.3.2:
linkType: hard
"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3":
version: 3.0.4
resolution: "signal-exit@npm:3.0.4"
checksum: e72633b05df8d65035a0b31718b1a587f55b25953a8e7b959f6c3a963cc0abcb70a0d78a7e0792bc104c874525efdc619e823095d382a775641e3867b1b68c54
version: 3.0.5
resolution: "signal-exit@npm:3.0.5"
checksum: a1d3d0d63f581bd298b30ed8f6de21b73a0fe5a0c0f123b2e8ed7168bbff8f4c1a45e681de12a1966a89bb725d8eb727816be1c436e136951f31953e4a201587
languageName: node
linkType: hard
@ -9377,11 +9382,11 @@ fsevents@~2.3.2:
linkType: hard
"std-env@npm:^2.2.1, std-env@npm:^2.3.0":
version: 2.3.0
resolution: "std-env@npm:2.3.0"
version: 2.3.1
resolution: "std-env@npm:2.3.1"
dependencies:
ci-info: ^3.0.0
checksum: da0b81e217d920770448e53d660b6b0800d3f6fde201812cb7f5505a6fffe578b21188301214fecc227cc2db6849eb736f6d1975e5fa7ee179e9240da81fc88b
ci-info: ^3.1.1
checksum: 049be0d6fb7ff544b3061a53ccaddd3ab2f6930f50b432f54dc82b22cb813c6e408ed69807c7c6bc592fccfc92d5c431dcc1aacd7c9ca99d304948f3149a08da
languageName: node
linkType: hard
@ -9460,25 +9465,14 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"string-width@npm:^3.0.0":
version: 3.1.0
resolution: "string-width@npm:3.1.0"
dependencies:
emoji-regex: ^7.0.1
is-fullwidth-code-point: ^2.0.0
strip-ansi: ^5.1.0
checksum: 57f7ca73d201682816d573dc68bd4bb8e1dff8dc9fcf10470fdfc3474135c97175fec12ea6a159e67339b41e86963112355b64529489af6e7e70f94a7caf08b2
languageName: node
linkType: hard
"string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.2":
version: 4.2.2
resolution: "string-width@npm:4.2.2"
version: 4.2.3
resolution: "string-width@npm:4.2.3"
dependencies:
emoji-regex: ^8.0.0
is-fullwidth-code-point: ^3.0.0
strip-ansi: ^6.0.0
checksum: 343e089b0e66e0f72aab4ad1d9b6f2c9cc5255844b0c83fd9b53f2a3b3fd0421bdd6cb05be96a73117eb012db0887a6c1d64ca95aaa50c518e48980483fea0ab
strip-ansi: ^6.0.1
checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb
languageName: node
linkType: hard
@ -9538,21 +9532,12 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"strip-ansi@npm:^5.1.0":
version: 5.2.0
resolution: "strip-ansi@npm:5.2.0"
"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1":
version: 6.0.1
resolution: "strip-ansi@npm:6.0.1"
dependencies:
ansi-regex: ^4.1.0
checksum: bdb5f76ade97062bd88e7723aa019adbfacdcba42223b19ccb528ffb9fb0b89a5be442c663c4a3fb25268eaa3f6ea19c7c3fbae830bd1562d55adccae1fcec46
languageName: node
linkType: hard
"strip-ansi@npm:^6.0.0":
version: 6.0.0
resolution: "strip-ansi@npm:6.0.0"
dependencies:
ansi-regex: ^5.0.0
checksum: 04c3239ede44c4d195b0e66c0ad58b932f08bec7d05290416d361ff908ad282ecdaf5d9731e322c84f151d427436bde01f05b7422c3ec26dd927586736b0e5d0
ansi-regex: ^5.0.1
checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c
languageName: node
linkType: hard
@ -9603,15 +9588,6 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"supports-color@npm:^6.1.0":
version: 6.1.0
resolution: "supports-color@npm:6.1.0"
dependencies:
has-flag: ^3.0.0
checksum: 74358f9535c83ee113fbaac354b11e808060f6e7d8722082ee43af3578469134e89d00026dce2a6b93ce4e5b89d0e9a10f638b2b9f64c7838c2fb2883a47b3d5
languageName: node
linkType: hard
"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0":
version: 7.2.0
resolution: "supports-color@npm:7.2.0"
@ -9724,15 +9700,15 @@ fsevents@~2.3.2:
linkType: hard
"terser@npm:^5.3.4":
version: 5.8.0
resolution: "terser@npm:5.8.0"
version: 5.9.0
resolution: "terser@npm:5.9.0"
dependencies:
commander: ^2.20.0
source-map: ~0.7.2
source-map-support: ~0.5.20
bin:
terser: bin/terser
checksum: 770b7d3fad7eece4a423464a9774e4456b7aca70b869d0c783bde42d7453fac2670ef7532dbce0a5a6f79038c367f2cb6353995190b730e2c52cb4914f3d671e
checksum: 11c1246b1991015a8881742878af779e3863fad42f626ffda957dbf28c94bf51e7994cffb9ffbec86ff3c23ab45ffa6d79d453c15e664306e35fc7b2c4eee5f4
languageName: node
linkType: hard
@ -9877,6 +9853,13 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"tr46@npm:~0.0.3":
version: 0.0.3
resolution: "tr46@npm:0.0.3"
checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3
languageName: node
linkType: hard
"ts-pnp@npm:^1.1.6":
version: 1.2.0
resolution: "ts-pnp@npm:1.2.0"
@ -10380,6 +10363,13 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"webidl-conversions@npm:^3.0.0":
version: 3.0.1
resolution: "webidl-conversions@npm:3.0.1"
checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c
languageName: node
linkType: hard
"webpack-bundle-analyzer@npm:^4.4.1":
version: 4.4.2
resolution: "webpack-bundle-analyzer@npm:4.4.2"
@ -10500,6 +10490,16 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"whatwg-url@npm:^5.0.0":
version: 5.0.0
resolution: "whatwg-url@npm:5.0.0"
dependencies:
tr46: ~0.0.3
webidl-conversions: ^3.0.0
checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c
languageName: node
linkType: hard
"which-boxed-primitive@npm:^1.0.2":
version: 1.0.2
resolution: "which-boxed-primitive@npm:1.0.2"

View File

@ -9,11 +9,11 @@ import { fixtureDir, resolveWorkspace } from '../utils.mjs'
const isBridge = Boolean(process.env.TEST_BRIDGE)
export function importModule (path) {
export function importModule(path) {
return import(pathToFileURL(path).href)
}
export function setupTest (preset) {
export function setupTest(preset) {
const fixture = isBridge ? 'bridge' : 'basic'
const rootDir = fixtureDir(fixture)
const buildDir = resolve(rootDir, '.nuxt-' + preset)
@ -28,7 +28,7 @@ export function setupTest (preset) {
this.timeout(60000)
const nuxtCLI = isBridge
? resolve(ctx.rootDir, 'node_modules/nuxt/bin/nuxt.js')
: resolveWorkspace('packages/nuxi/bin/nuxi.cjs')
: resolveWorkspace('packages/nuxi/bin/nuxi.mjs')
await execa('node', [nuxtCLI, 'build', ctx.rootDir], {
env: {
@ -49,11 +49,11 @@ export function setupTest (preset) {
return ctx
}
export async function startServer (ctx, handle) {
export async function startServer(ctx, handle) {
ctx.server = await listen(handle)
}
export function testNitroBehavior (_ctx, getHandler) {
export function testNitroBehavior(_ctx, getHandler) {
let handler
it('setup handler', async () => {

View File

@ -1,23 +1,23 @@
import { existsSync, readFileSync, writeFileSync, rmSync, mkdirSync } from 'fs'
import { execSync } from 'child_process'
import { resolve, dirname } from 'pathe'
import { fileURLToPath } from 'url'
import defu from 'defu'
import hash from 'object-hash'
import execa from 'execa'
import { createCommonJS } from 'mlly'
const __dirname = dirname(fileURLToPath(import.meta.url))
const cjs = createCommonJS(import.meta.url)
export function resolveWorkspace (name) {
return resolve(__dirname, '../', name)
return resolve(cjs.__dirname, '../', name)
}
export function fixtureDir (name) {
return resolve(__dirname, 'fixtures', name)
return resolve(cjs.__dirname, 'fixtures', name)
}
export async function execNuxtCLI (args, opts) {
const nuxtCLI = resolveWorkspace('packages/nuxi/bin/nuxi.cjs')
const nuxtCLI = resolveWorkspace('packages/nuxi/bin/nuxi.mjs')
await execa('node', [nuxtCLI, ...args], opts)
}

View File

@ -1,6 +1,7 @@
{
"compilerOptions": {
"esModuleInterop": true,
"esModuleInterop": false,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"target": "ESNext",
"module": "ESNext",
@ -15,8 +16,12 @@
"chai"
],
"paths": {
"#app": ["./packages/nuxt3/src/app/index"],
"#app/*": ["./packages/nuxt3/src/app/*"]
"#app": [
"./packages/nuxt3/src/app/index"
],
"#app/*": [
"./packages/nuxt3/src/app/*"
]
}
},
"exclude": [

View File

@ -1448,6 +1448,7 @@ __metadata:
estree-walker: ^2.0.2
fs-extra: ^10.0.0
magic-string: ^0.25.7
mlly: ^0.2.2
node-fetch: ^3.0.0
nuxi: ^0.10.0
nuxt-swc: ^0.1.0
@ -1492,7 +1493,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@nuxt/kit@workspace:packages/kit"
dependencies:
"@types/lodash": ^4.14.175
"@types/lodash.template": ^4
consola: ^2.15.3
create-require: ^1.1.1
defu: ^5.0.0
@ -1501,7 +1502,7 @@ __metadata:
hash-sum: ^2.0.0
hookable: ^5.0.0
jiti: ^1.12.6
lodash: ^4.17.21
lodash.template: ^4.5.0
pathe: ^0.2.0
rc9: ^1.2.0
scule: ^0.2.1
@ -1559,6 +1560,7 @@ __metadata:
jiti: ^1.12.6
listhen: ^0.2.4
mime: ^2.5.2
mlly: ^0.2.2
node-fetch: ^3.0.0
ohmyfetch: ^0.3.1
ora: ^6.0.1
@ -1575,7 +1577,6 @@ __metadata:
unbuild: latest
unenv: ^0.3.10
unstorage: ^0.2.8
upath: ^2.0.1
vue: 3.2.19
vue-bundle-renderer: ^0.3.1
vue-server-renderer: ^2.6.14
@ -1643,9 +1644,10 @@ __metadata:
fs-extra: ^10.0.0
glob: ^7.2.0
hash-sum: ^2.0.0
lodash: ^4.17.21
lodash-es: ^4.17.21
memfs: ^3.3.0
mini-css-extract-plugin: ^2.3.0
mlly: ^0.2.2
pathe: ^0.2.0
pify: ^5.0.0
postcss: ^8.3.8
@ -2281,7 +2283,16 @@ __metadata:
languageName: node
linkType: hard
"@types/lodash@npm:^4.14.175":
"@types/lodash.template@npm:^4":
version: 4.5.0
resolution: "@types/lodash.template@npm:4.5.0"
dependencies:
"@types/lodash": "*"
checksum: 7650ecfad4ee1d51404913891f74f48c7837ba9b66fd4681624c943fa8df85231e5efb5339927f6542e9ef4bedb6aaac99f6e878118f2bdb04198bc86013209a
languageName: node
linkType: hard
"@types/lodash@npm:*":
version: 4.14.175
resolution: "@types/lodash@npm:4.14.175"
checksum: 50721f33faa542f1b9f62f2ba769ed353c6036711e92bd89ce569f2ed247e38fb2a2899f6fd46466b1690fea7ae0239471e6a6093c54e8f2b0613e43e8eac19c
@ -8827,6 +8838,13 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"lodash-es@npm:^4.17.21":
version: 4.17.21
resolution: "lodash-es@npm:4.17.21"
checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2
languageName: node
linkType: hard
"lodash._reinterpolate@npm:^3.0.0":
version: 3.0.0
resolution: "lodash._reinterpolate@npm:3.0.0"
@ -9460,7 +9478,7 @@ fsevents@~2.3.2:
languageName: node
linkType: hard
"mlly@npm:^0.2.4":
"mlly@npm:^0.2.2, mlly@npm:^0.2.4":
version: 0.2.4
resolution: "mlly@npm:0.2.4"
dependencies:
@ -10050,6 +10068,7 @@ fsevents@~2.3.2:
fsevents: ~2.3.2
jiti: ^1.12.6
listhen: ^0.2.4
mlly: ^0.2.2
mri: ^1.2.0
pathe: ^0.2.0
scule: ^0.2.1
@ -10059,8 +10078,8 @@ fsevents@~2.3.2:
fsevents:
optional: true
bin:
nu: ./bin/nuxi.cjs
nuxi: ./bin/nuxi.cjs
nu: ./bin/nuxi.mjs
nuxi: ./bin/nuxi.mjs
languageName: unknown
linkType: soft
@ -10153,6 +10172,7 @@ fsevents@~2.3.2:
hash-sum: ^2.0.0
hookable: ^5.0.0
ignore: ^5.1.8
mlly: ^0.2.2
nuxi: ^0.10.0
ohmyfetch: ^0.3.1
pathe: ^0.2.0
@ -10169,7 +10189,7 @@ fsevents@~2.3.2:
"@vue/shared": 3.2.19
vue: 3.2.19
bin:
nuxt: ./bin/nuxt.cjs
nuxt: ./bin/nuxt.mjs
languageName: unknown
linkType: soft