Skip to content
This repository was archived by the owner on Apr 6, 2023. It is now read-only.

fix(kit): move relative path handling back into nuxt templates #6430

Merged
merged 2 commits into from
Aug 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion packages/kit/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
"knitwork": "^0.1.2",
"lodash.template": "^4.5.0",
"mlly": "^0.5.7",
"ohash": "^0.1.5",
"pathe": "^0.3.3",
"pkg-types": "^0.3.3",
"scule": "^0.3.2",
Expand Down
33 changes: 14 additions & 19 deletions packages/kit/src/internal/template.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ import lodashTemplate from 'lodash.template'
import { genSafeVariableName, genDynamicImport, genImport } from 'knitwork'

import type { NuxtTemplate } from '@nuxt/schema'
import { relative } from 'pathe'
import { hash } from 'ohash'

export async function compileTemplate (template: NuxtTemplate, ctx: any) {
const data = { ...ctx, options: template.options }
Expand All @@ -23,27 +21,24 @@ export async function compileTemplate (template: NuxtTemplate, ctx: any) {
throw new Error('Invalid template: ' + JSON.stringify(template))
}

/** @deprecated */
const serialize = (data: any) => JSON.stringify(data, null, 2).replace(/"{(.+)}"(?=,?$)/gm, r => JSON.parse(r).replace(/^{(.*)}$/, '$1'))

const importSources = (sources: string | string[], root: string, { lazy = false } = {}) => {
/** @deprecated */
const importSources = (sources: string | string[], { lazy = false } = {}) => {
if (!Array.isArray(sources)) {
sources = [sources]
}
const exports: string[] = []
const imports: string[] = []
for (const src of sources) {
const path = relative(root, src)
const variable = genSafeVariableName(path).replace(/_(45|46|47)/g, '_') + '_' + hash(path)
exports.push(variable)
imports.push(lazy
? `const ${variable} = ${genDynamicImport(src, { comment: `webpackChunkName: ${JSON.stringify(src)}` })}`
: genImport(src, variable)
)
}
return {
exports,
imports
}
return sources.map((src) => {
if (lazy) {
return `const ${genSafeVariableName(src)} = ${genDynamicImport(src, { comment: `webpackChunkName: ${JSON.stringify(src)}` })}`
}
return genImport(src, genSafeVariableName(src))
}).join('\n')
}

export const templateUtils = { serialize, importName: genSafeVariableName, importSources }
/** @deprecated */
const importName = genSafeVariableName

/** @deprecated */
export const templateUtils = { serialize, importName, importSources }
28 changes: 18 additions & 10 deletions packages/nuxt/src/core/templates.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { templateUtils } from '@nuxt/kit'
import type { Nuxt, NuxtApp, NuxtTemplate } from '@nuxt/schema'
import { genArrayFromRaw, genDynamicImport, genExport, genImport, genObjectFromRawEntries, genString, genSafeVariableName } from 'knitwork'

import { isAbsolute, join, relative } from 'pathe'
import { resolveSchema, generateTypes } from 'untyped'
import escapeRE from 'escape-string-regexp'
import { hash } from 'ohash'

export interface TemplateContext {
nuxt: Nuxt
Expand Down Expand Up @@ -48,8 +48,14 @@ export const clientPluginTemplate = {
filename: 'plugins/client.mjs',
getContents (ctx: TemplateContext) {
const clientPlugins = ctx.app.plugins.filter(p => !p.mode || p.mode !== 'server')
const rootDir = ctx.nuxt.options.rootDir
const { imports, exports } = templateUtils.importSources(clientPlugins.map(p => p.src), rootDir)
const exports: string[] = []
const imports: string[] = []
for (const plugin of clientPlugins) {
const path = relative(ctx.nuxt.options.rootDir, plugin.src)
const variable = genSafeVariableName(path).replace(/_(45|46|47)/g, '_') + '_' + hash(path)
exports.push(variable)
imports.push(genImport(plugin.src, variable))
}
return [
...imports,
`export default ${genArrayFromRaw(exports)}`
Expand All @@ -61,15 +67,17 @@ export const serverPluginTemplate = {
filename: 'plugins/server.mjs',
getContents (ctx: TemplateContext) {
const serverPlugins = ctx.app.plugins.filter(p => !p.mode || p.mode !== 'client')
const rootDir = ctx.nuxt.options.rootDir
const { imports, exports } = templateUtils.importSources(serverPlugins.map(p => p.src), rootDir)
const exports: string[] = ['preload']
const imports: string[] = ["import preload from '#app/plugins/preload.server'"]
for (const plugin of serverPlugins) {
const path = relative(ctx.nuxt.options.rootDir, plugin.src)
const variable = genSafeVariableName(path).replace(/_(45|46|47)/g, '_') + '_' + hash(path)
exports.push(variable)
imports.push(genImport(plugin.src, variable))
}
return [
"import preload from '#app/plugins/preload.server'",
...imports,
`export default ${genArrayFromRaw([
'preload',
...exports
])}`
`export default ${genArrayFromRaw(exports)}`
].join('\n')
}
}
Expand Down
1 change: 0 additions & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1736,7 +1736,6 @@ __metadata:
knitwork: ^0.1.2
lodash.template: ^4.5.0
mlly: ^0.5.7
ohash: ^0.1.5
pathe: ^0.3.3
pkg-types: ^0.3.3
scule: ^0.3.2
Expand Down