From: Evan You Date: Thu, 26 Jan 2023 08:12:08 +0000 (+0800) Subject: wip(vitest-migration): ssr tests passing X-Git-Tag: v3.2.46~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f0d78e8c8fedc3e960cf52a09d442ae9e6a9c11f;p=thirdparty%2Fvuejs%2Fcore.git wip(vitest-migration): ssr tests passing --- diff --git a/packages/compiler-sfc/__tests__/compileStyle.spec.ts b/packages/compiler-sfc/__tests__/compileStyle.spec.ts index a343fe6b6f..b33dabfd2c 100644 --- a/packages/compiler-sfc/__tests__/compileStyle.spec.ts +++ b/packages/compiler-sfc/__tests__/compileStyle.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { compileStyle, compileStyleAsync, diff --git a/packages/runtime-core/src/componentOptions.ts b/packages/runtime-core/src/componentOptions.ts index ea70d41a90..2e15b17dfe 100644 --- a/packages/runtime-core/src/componentOptions.ts +++ b/packages/runtime-core/src/componentOptions.ts @@ -5,8 +5,7 @@ import { ComponentInternalOptions, Component, ConcreteComponent, - InternalRenderFunction, - LifecycleHooks + InternalRenderFunction } from './component' import { isFunction, @@ -72,6 +71,7 @@ import { softAssertCompatEnabled } from './compat/compatConfig' import { OptionMergeFunction } from './apiCreateApp' +import { LifecycleHooks } from './enums' /** * Interface for declaring custom options. diff --git a/packages/runtime-core/src/components/KeepAlive.ts b/packages/runtime-core/src/components/KeepAlive.ts index 554b9f2451..c3c2b63e45 100644 --- a/packages/runtime-core/src/components/KeepAlive.ts +++ b/packages/runtime-core/src/components/KeepAlive.ts @@ -3,7 +3,6 @@ import { getCurrentInstance, SetupContext, ComponentInternalInstance, - LifecycleHooks, currentInstance, getComponentName, ComponentOptions @@ -44,6 +43,7 @@ import { ComponentRenderContext } from '../componentPublicInstance' import { devtoolsComponentAdded } from '../devtools' import { isAsyncWrapper } from '../apiAsyncComponent' import { isSuspense } from './Suspense' +import { LifecycleHooks } from '../enums' type MatchPattern = string | RegExp | (string | RegExp)[] diff --git a/packages/server-renderer/__tests__/render.spec.ts b/packages/server-renderer/__tests__/render.spec.ts index e307bdc2ed..f18001a0ae 100644 --- a/packages/server-renderer/__tests__/render.spec.ts +++ b/packages/server-renderer/__tests__/render.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { vi } from 'vitest' import { createApp, diff --git a/packages/server-renderer/__tests__/ssrAttrFallthrough.spec.ts b/packages/server-renderer/__tests__/ssrAttrFallthrough.spec.ts index 3cc2efc31e..fb974f9792 100644 --- a/packages/server-renderer/__tests__/ssrAttrFallthrough.spec.ts +++ b/packages/server-renderer/__tests__/ssrAttrFallthrough.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { createApp } from 'vue' import { renderToString } from '../src/renderToString' diff --git a/packages/server-renderer/__tests__/ssrCompilerOptions.spec.ts b/packages/server-renderer/__tests__/ssrCompilerOptions.spec.ts index 2ff588a5c7..34fcd4ef48 100644 --- a/packages/server-renderer/__tests__/ssrCompilerOptions.spec.ts +++ b/packages/server-renderer/__tests__/ssrCompilerOptions.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { createApp } from 'vue' import { renderToString } from '../src/renderToString' diff --git a/packages/server-renderer/__tests__/ssrDirectives.spec.ts b/packages/server-renderer/__tests__/ssrDirectives.spec.ts index 74b01204d3..102e95d5b2 100644 --- a/packages/server-renderer/__tests__/ssrDirectives.spec.ts +++ b/packages/server-renderer/__tests__/ssrDirectives.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { renderToString } from '../src/renderToString' import { createApp, diff --git a/packages/server-renderer/__tests__/ssrDynamicComponent.spec.ts b/packages/server-renderer/__tests__/ssrDynamicComponent.spec.ts index 751c229a8b..dff16c781b 100644 --- a/packages/server-renderer/__tests__/ssrDynamicComponent.spec.ts +++ b/packages/server-renderer/__tests__/ssrDynamicComponent.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { createApp, createVNode } from 'vue' import { renderToString } from '../src/renderToString' diff --git a/packages/server-renderer/__tests__/ssrInterpolate.spec.ts b/packages/server-renderer/__tests__/ssrInterpolate.spec.ts index d024555825..fc9a4a3b40 100644 --- a/packages/server-renderer/__tests__/ssrInterpolate.spec.ts +++ b/packages/server-renderer/__tests__/ssrInterpolate.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { ssrInterpolate } from '../src/helpers/ssrInterpolate' import { escapeHtml } from '@vue/shared' diff --git a/packages/server-renderer/__tests__/ssrRenderAttrs.spec.ts b/packages/server-renderer/__tests__/ssrRenderAttrs.spec.ts index 16de44f55b..2439c35145 100644 --- a/packages/server-renderer/__tests__/ssrRenderAttrs.spec.ts +++ b/packages/server-renderer/__tests__/ssrRenderAttrs.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { ssrRenderAttrs, ssrRenderClass, diff --git a/packages/server-renderer/__tests__/ssrRenderList.spec.ts b/packages/server-renderer/__tests__/ssrRenderList.spec.ts index e485bef758..56c9b7c359 100644 --- a/packages/server-renderer/__tests__/ssrRenderList.spec.ts +++ b/packages/server-renderer/__tests__/ssrRenderList.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { ssrRenderList } from '../src/helpers/ssrRenderList' describe('ssr: renderList', () => { diff --git a/packages/server-renderer/__tests__/ssrScopeId.spec.ts b/packages/server-renderer/__tests__/ssrScopeId.spec.ts index e49c4d3b78..3091153e1e 100644 --- a/packages/server-renderer/__tests__/ssrScopeId.spec.ts +++ b/packages/server-renderer/__tests__/ssrScopeId.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { createApp, h, mergeProps, withCtx } from 'vue' import { renderToString } from '../src/renderToString' import { ssrRenderComponent, ssrRenderAttrs, ssrRenderSlot } from '../src' diff --git a/packages/server-renderer/__tests__/ssrSlot.spec.ts b/packages/server-renderer/__tests__/ssrSlot.spec.ts index 9b93a55c0f..9b3a2cdcc9 100644 --- a/packages/server-renderer/__tests__/ssrSlot.spec.ts +++ b/packages/server-renderer/__tests__/ssrSlot.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { createApp } from 'vue' import { renderToString } from '../src/renderToString' diff --git a/packages/server-renderer/__tests__/ssrSuspense.spec.ts b/packages/server-renderer/__tests__/ssrSuspense.spec.ts index bff752bebc..0b31c4559f 100644 --- a/packages/server-renderer/__tests__/ssrSuspense.spec.ts +++ b/packages/server-renderer/__tests__/ssrSuspense.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { vi } from 'vitest' import { createApp, h, Suspense } from 'vue' import { renderToString } from '../src/renderToString' diff --git a/packages/server-renderer/__tests__/ssrTeleport.spec.ts b/packages/server-renderer/__tests__/ssrTeleport.spec.ts index 76c5c8eb3d..4de6b44bb5 100644 --- a/packages/server-renderer/__tests__/ssrTeleport.spec.ts +++ b/packages/server-renderer/__tests__/ssrTeleport.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { createApp, h, Teleport } from 'vue' import { renderToString } from '../src/renderToString' import { renderToSimpleStream } from '../src/renderToStream' diff --git a/packages/server-renderer/__tests__/ssrVModelHelpers.spec.ts b/packages/server-renderer/__tests__/ssrVModelHelpers.spec.ts index 4958612a4c..d003c54064 100644 --- a/packages/server-renderer/__tests__/ssrVModelHelpers.spec.ts +++ b/packages/server-renderer/__tests__/ssrVModelHelpers.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { ssrRenderDynamicModel, ssrGetDynamicModelProps diff --git a/packages/server-renderer/__tests__/webStream.spec.ts b/packages/server-renderer/__tests__/webStream.spec.ts index 2bdc775354..97588fe4e1 100644 --- a/packages/server-renderer/__tests__/webStream.spec.ts +++ b/packages/server-renderer/__tests__/webStream.spec.ts @@ -1,7 +1,3 @@ -/** - * @jest-environment node - */ - import { createApp, h, defineAsyncComponent } from 'vue' import { ReadableStream, TransformStream } from 'stream/web' import { pipeToWebWritable, renderToWebStream } from '../src' diff --git a/packages/server-renderer/src/helpers/ssrCompile.ts b/packages/server-renderer/src/helpers/ssrCompile.ts index a44feb5fc0..722997c1a9 100644 --- a/packages/server-renderer/src/helpers/ssrCompile.ts +++ b/packages/server-renderer/src/helpers/ssrCompile.ts @@ -4,6 +4,9 @@ import { extend, generateCodeFrame, isFunction, NO } from '@vue/shared' import { CompilerError, CompilerOptions } from '@vue/compiler-core' import { PushFn } from '../render' +import * as Vue from 'vue' +import * as helpers from '../internal' + type SSRRenderFunction = ( context: any, push: PushFn, @@ -16,6 +19,7 @@ export function ssrCompile( template: string, instance: ComponentInternalInstance ): SSRRenderFunction { + // TODO: this branch should now work in ESM builds, enable it in a minor if (!__NODE_JS__) { throw new Error( `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) - 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)) } diff --git a/packages/server-renderer/src/index.ts b/packages/server-renderer/src/index.ts index b6d973ea59..81946fac81 100644 --- a/packages/server-renderer/src/index.ts +++ b/packages/server-renderer/src/index.ts @@ -16,27 +16,4 @@ export { } from './renderToStream' // 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' +export * from './internal' diff --git a/packages/server-renderer/src/internal.ts b/packages/server-renderer/src/internal.ts new file mode 100644 index 0000000000..93919fcb04 --- /dev/null +++ b/packages/server-renderer/src/internal.ts @@ -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' diff --git a/vitest.config.ts b/vitest.config.ts index 1d573eae59..422766c9d4 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -4,11 +4,21 @@ import { fileURLToPath } from 'node:url' import { readdirSync } from 'node:fs' 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 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) { - alias[`@vue/${dir}`] = resolve(dir) + const key = `@vue/${dir}` + if (dir !== 'vue' && !(key in alias)) { + alias[key] = resolve(dir) + } } export default defineConfig({ @@ -28,13 +38,7 @@ export default defineConfig({ __COMPAT__: true }, resolve: { - alias: { - ...alias, - vue: resolve('vue'), - 'vue/compiler-sfc': resolve('compiler-sfc'), - 'vue/server-renderer': resolve('server-renderer'), - '@vue/compat': resolve('vue-compat') - } + alias }, test: { globals: true,