wip(vitest-migration): ssr tests passing

This commit is contained in:
Evan You 2023-01-26 16:12:08 +08:00
parent 681775a13c
commit f0d78e8c8f
21 changed files with 53 additions and 98 deletions

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { import {
compileStyle, compileStyle,
compileStyleAsync, compileStyleAsync,

View File

@ -5,8 +5,7 @@ import {
ComponentInternalOptions, ComponentInternalOptions,
Component, Component,
ConcreteComponent, ConcreteComponent,
InternalRenderFunction, InternalRenderFunction
LifecycleHooks
} from './component' } from './component'
import { import {
isFunction, isFunction,
@ -72,6 +71,7 @@ import {
softAssertCompatEnabled softAssertCompatEnabled
} from './compat/compatConfig' } from './compat/compatConfig'
import { OptionMergeFunction } from './apiCreateApp' import { OptionMergeFunction } from './apiCreateApp'
import { LifecycleHooks } from './enums'
/** /**
* Interface for declaring custom options. * Interface for declaring custom options.

View File

@ -3,7 +3,6 @@ import {
getCurrentInstance, getCurrentInstance,
SetupContext, SetupContext,
ComponentInternalInstance, ComponentInternalInstance,
LifecycleHooks,
currentInstance, currentInstance,
getComponentName, getComponentName,
ComponentOptions ComponentOptions
@ -44,6 +43,7 @@ import { ComponentRenderContext } from '../componentPublicInstance'
import { devtoolsComponentAdded } from '../devtools' import { devtoolsComponentAdded } from '../devtools'
import { isAsyncWrapper } from '../apiAsyncComponent' import { isAsyncWrapper } from '../apiAsyncComponent'
import { isSuspense } from './Suspense' import { isSuspense } from './Suspense'
import { LifecycleHooks } from '../enums'
type MatchPattern = string | RegExp | (string | RegExp)[] type MatchPattern = string | RegExp | (string | RegExp)[]

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { vi } from 'vitest' import { vi } from 'vitest'
import { import {
createApp, createApp,

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { createApp } from 'vue' import { createApp } from 'vue'
import { renderToString } from '../src/renderToString' import { renderToString } from '../src/renderToString'

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { createApp } from 'vue' import { createApp } from 'vue'
import { renderToString } from '../src/renderToString' import { renderToString } from '../src/renderToString'

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { renderToString } from '../src/renderToString' import { renderToString } from '../src/renderToString'
import { import {
createApp, createApp,

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { createApp, createVNode } from 'vue' import { createApp, createVNode } from 'vue'
import { renderToString } from '../src/renderToString' import { renderToString } from '../src/renderToString'

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { ssrInterpolate } from '../src/helpers/ssrInterpolate' import { ssrInterpolate } from '../src/helpers/ssrInterpolate'
import { escapeHtml } from '@vue/shared' import { escapeHtml } from '@vue/shared'

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { import {
ssrRenderAttrs, ssrRenderAttrs,
ssrRenderClass, ssrRenderClass,

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { ssrRenderList } from '../src/helpers/ssrRenderList' import { ssrRenderList } from '../src/helpers/ssrRenderList'
describe('ssr: renderList', () => { describe('ssr: renderList', () => {

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { createApp, h, mergeProps, withCtx } from 'vue' import { createApp, h, mergeProps, withCtx } from 'vue'
import { renderToString } from '../src/renderToString' import { renderToString } from '../src/renderToString'
import { ssrRenderComponent, ssrRenderAttrs, ssrRenderSlot } from '../src' import { ssrRenderComponent, ssrRenderAttrs, ssrRenderSlot } from '../src'

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { createApp } from 'vue' import { createApp } from 'vue'
import { renderToString } from '../src/renderToString' import { renderToString } from '../src/renderToString'

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { vi } from 'vitest' import { vi } from 'vitest'
import { createApp, h, Suspense } from 'vue' import { createApp, h, Suspense } from 'vue'
import { renderToString } from '../src/renderToString' import { renderToString } from '../src/renderToString'

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { createApp, h, Teleport } from 'vue' import { createApp, h, Teleport } from 'vue'
import { renderToString } from '../src/renderToString' import { renderToString } from '../src/renderToString'
import { renderToSimpleStream } from '../src/renderToStream' import { renderToSimpleStream } from '../src/renderToStream'

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { import {
ssrRenderDynamicModel, ssrRenderDynamicModel,
ssrGetDynamicModelProps ssrGetDynamicModelProps

View File

@ -1,7 +1,3 @@
/**
* @jest-environment node
*/
import { createApp, h, defineAsyncComponent } from 'vue' import { createApp, h, defineAsyncComponent } from 'vue'
import { ReadableStream, TransformStream } from 'stream/web' import { ReadableStream, TransformStream } from 'stream/web'
import { pipeToWebWritable, renderToWebStream } from '../src' import { pipeToWebWritable, renderToWebStream } from '../src'

View File

@ -4,6 +4,9 @@ import { extend, generateCodeFrame, isFunction, NO } from '@vue/shared'
import { CompilerError, CompilerOptions } from '@vue/compiler-core' import { CompilerError, CompilerOptions } from '@vue/compiler-core'
import { PushFn } from '../render' import { PushFn } from '../render'
import * as Vue from 'vue'
import * as helpers from '../internal'
type SSRRenderFunction = ( type SSRRenderFunction = (
context: any, context: any,
push: PushFn, push: PushFn,
@ -16,6 +19,7 @@ export function ssrCompile(
template: string, template: string,
instance: ComponentInternalInstance instance: ComponentInternalInstance
): SSRRenderFunction { ): SSRRenderFunction {
// TODO: this branch should now work in ESM builds, enable it in a minor
if (!__NODE_JS__) { if (!__NODE_JS__) {
throw new Error( throw new Error(
`On-the-fly template compilation is not supported in the ESM build of ` + `On-the-fly template compilation is not supported in the ESM build of ` +
@ -76,5 +80,10 @@ export function ssrCompile(
} }
const { code } = compile(template, finalCompilerOptions) const { code } = compile(template, finalCompilerOptions)
return (compileCache[cacheKey] = Function('require', code)(require)) const requireMap = {
vue: Vue,
'vue/server-renderer': helpers
}
const fakeRequire = (id: 'vue' | 'vue/server-renderer') => requireMap[id]
return (compileCache[cacheKey] = Function('require', code)(fakeRequire))
} }

View File

@ -16,27 +16,4 @@ export {
} from './renderToStream' } from './renderToStream'
// internal runtime helpers // internal runtime helpers
export { renderVNode as ssrRenderVNode } from './render' export * from './internal'
export { ssrRenderComponent } from './helpers/ssrRenderComponent'
export { ssrRenderSlot, ssrRenderSlotInner } from './helpers/ssrRenderSlot'
export { ssrRenderTeleport } from './helpers/ssrRenderTeleport'
export {
ssrRenderClass,
ssrRenderStyle,
ssrRenderAttrs,
ssrRenderAttr,
ssrRenderDynamicAttr
} from './helpers/ssrRenderAttrs'
export { ssrInterpolate } from './helpers/ssrInterpolate'
export { ssrRenderList } from './helpers/ssrRenderList'
export { ssrRenderSuspense } from './helpers/ssrRenderSuspense'
export { ssrGetDirectiveProps } from './helpers/ssrGetDirectiveProps'
export { includeBooleanAttr as ssrIncludeBooleanAttr } from '@vue/shared'
// v-model helpers
export {
ssrLooseEqual,
ssrLooseContain,
ssrRenderDynamicModel,
ssrGetDynamicModelProps
} from './helpers/ssrVModelHelpers'

View File

@ -0,0 +1,25 @@
// internal runtime helpers
export { renderVNode as ssrRenderVNode } from './render'
export { ssrRenderComponent } from './helpers/ssrRenderComponent'
export { ssrRenderSlot, ssrRenderSlotInner } from './helpers/ssrRenderSlot'
export { ssrRenderTeleport } from './helpers/ssrRenderTeleport'
export {
ssrRenderClass,
ssrRenderStyle,
ssrRenderAttrs,
ssrRenderAttr,
ssrRenderDynamicAttr
} from './helpers/ssrRenderAttrs'
export { ssrInterpolate } from './helpers/ssrInterpolate'
export { ssrRenderList } from './helpers/ssrRenderList'
export { ssrRenderSuspense } from './helpers/ssrRenderSuspense'
export { ssrGetDirectiveProps } from './helpers/ssrGetDirectiveProps'
export { includeBooleanAttr as ssrIncludeBooleanAttr } from '@vue/shared'
// v-model helpers
export {
ssrLooseEqual,
ssrLooseContain,
ssrRenderDynamicModel,
ssrGetDynamicModelProps
} from './helpers/ssrVModelHelpers'

View File

@ -4,11 +4,21 @@ import { fileURLToPath } from 'node:url'
import { readdirSync } from 'node:fs' import { readdirSync } from 'node:fs'
const resolve = p => const resolve = p =>
path.resolve(fileURLToPath(import.meta.url), `../packages/${p}/src`) path.resolve(fileURLToPath(import.meta.url), `../packages/${p}/src/index.ts`)
const dirs = readdirSync(new URL('./packages', import.meta.url)) const dirs = readdirSync(new URL('./packages', import.meta.url))
const alias = {}
const alias = {
vue: resolve('vue'),
'vue/compiler-sfc': resolve('compiler-sfc'),
'vue/server-renderer': resolve('server-renderer'),
'@vue/compat': resolve('vue-compat')
}
for (const dir of dirs) { for (const dir of dirs) {
alias[`@vue/${dir}`] = resolve(dir) const key = `@vue/${dir}`
if (dir !== 'vue' && !(key in alias)) {
alias[key] = resolve(dir)
}
} }
export default defineConfig({ export default defineConfig({
@ -28,13 +38,7 @@ export default defineConfig({
__COMPAT__: true __COMPAT__: true
}, },
resolve: { resolve: {
alias: { alias
...alias,
vue: resolve('vue'),
'vue/compiler-sfc': resolve('compiler-sfc'),
'vue/server-renderer': resolve('server-renderer'),
'@vue/compat': resolve('vue-compat')
}
}, },
test: { test: {
globals: true, globals: true,