]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-vapor): import helper with type check
author三咲智子 Kevin Deng <sxzz@sxzz.moe>
Tue, 30 Jan 2024 14:21:59 +0000 (22:21 +0800)
committer三咲智子 Kevin Deng <sxzz@sxzz.moe>
Tue, 30 Jan 2024 14:21:59 +0000 (22:21 +0800)
packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap
packages/compiler-vapor/src/generate.ts
packages/compiler-vapor/src/generators/directive.ts
packages/compiler-vapor/src/generators/prop.ts
packages/compiler-vapor/src/ir.ts
packages/compiler-vapor/src/transforms/vModel.ts
packages/runtime-vapor/src/directive.ts
packages/runtime-vapor/src/directives/vModel.ts

index dfde624753fc3b1f9c4f592d7ffa376e53c1cd09..7b66d766a7becbbfb647975c81d6903ae2b66244 100644 (file)
@@ -17,7 +17,7 @@ export function render(_ctx) {
 `;
 
 exports[`compile > custom directive > basic 1`] = `
-"import { template as _template, children as _children, resolveDirective("vTest") as _resolveDirective("vTest"), resolveDirective("vHello") as _resolveDirective("vHello"), withDirectives as _withDirectives } from 'vue/vapor';
+"import { template as _template, children as _children, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from 'vue/vapor';
 
 export function render(_ctx) {
   const t0 = _template("<div></div>")
index 9910b3d28665c2cc47761b37f3034ff89d42516c..ca1b9fcbc7248dde79d3a26c6b34bdf21ad28e41 100644 (file)
@@ -67,7 +67,7 @@ export interface CodegenContext {
   helpers: Set<string>
   vaporHelpers: Set<string>
   helper(name: string): string
-  vaporHelper(name: string): string
+  vaporHelper(name: VaporHelper): string
 }
 
 function createCodegenContext(ir: RootIRNode, options: CodegenOptions) {
index 2367bb8d9ea6eb9df7cf97428c246c9793c30fd2..b9cc8cf019082bd2c52005a262fa5b357c14aec2 100644 (file)
@@ -16,11 +16,11 @@ export function genWithDirective(
 
   return [
     newline(),
-    ...call(vaporHelper('withDirectives'), [element], directives),
+    ...call(vaporHelper('withDirectives'), element, directives),
   ]
 
   function genDirective({ dir, builtin }: WithDirectiveIRNode): CodeFragment[] {
-    const NULL = ['void 0']
+    const NULL = 'void 0'
 
     const directive = genDirective()
     const value = dir.exp
@@ -39,7 +39,7 @@ export function genWithDirective(
 
     return multi(['[', ']', ', '], directive, value, argument, modifiers)
 
-    function genDirective(): CodeFragment[] {
+    function genDirective() {
       const {
         vaporHelper,
         options: { bindingMetadata },
@@ -56,7 +56,7 @@ export function genWithDirective(
           directiveExpression.ast = null
           return genExpression(directiveExpression, context)
         } else {
-          return [vaporHelper(`resolveDirective("${directiveReference}")`)]
+          return `${vaporHelper('resolveDirective')}("${directiveReference}")`
         }
       }
     }
index 85af01ec46dbd7b6339a4ed886e156a930c1cabb..0387d10499e389ac96d3ecd67e652e5e35664199 100644 (file)
@@ -1,5 +1,5 @@
 import type { CodeFragment, CodegenContext } from '../generate'
-import type { SetPropIRNode } from '../ir'
+import type { SetPropIRNode, VaporHelper } from '../ir'
 import { genExpression } from './expression'
 import { isString } from '@vue/shared'
 
@@ -16,7 +16,7 @@ export function genSetProp(
   if (isString(oper.key) || oper.key.isStatic) {
     const keyName = isString(oper.key) ? oper.key : oper.key.content
 
-    let helperName: string | undefined
+    let helperName: VaporHelper | undefined
     let omitKey = false
     if (keyName === 'class') {
       helperName = 'setClass'
index a9c9d8f7cfb8c030dc18a88198b2807f504c6abc..ae57c648907ef4a418937292f4bbaa15f1675a60 100644 (file)
@@ -156,7 +156,7 @@ export interface WithDirectiveIRNode extends BaseIRNode {
   type: IRNodeTypes.WITH_DIRECTIVE
   element: number
   dir: VaporDirectiveNode
-  builtin?: string
+  builtin?: VaporHelper
 }
 
 export type IRNode =
index d91a9e090a7dd6222239faeefc0db3d33a0a9161..a4fe26f9a92cdf8aef454b3f1a228275c1aecade 100644 (file)
@@ -13,7 +13,7 @@ import {
   isStaticArgOf,
 } from '@vue/compiler-dom'
 import type { DirectiveTransform } from '../transform'
-import { IRNodeTypes } from '..'
+import { IRNodeTypes, type VaporHelper } from '../ir'
 
 export const transformVModel: DirectiveTransform = (dir, node, context) => {
   const { exp, arg, loc } = dir
@@ -61,7 +61,7 @@ export const transformVModel: DirectiveTransform = (dir, node, context) => {
   }
 
   const isComponent = node.tagType === ElementTypes.COMPONENT
-  let runtimeDirective: string | undefined
+  let runtimeDirective: VaporHelper | undefined
 
   if (isComponent) {
     if (dir.arg)
index 228f751c8c7fb9e44b7173b7398bb6765239ce76..68e2c43afb31998aa590440eb06ba1a261c50da6 100644 (file)
@@ -144,3 +144,7 @@ function callDirectiveHook(
   resetTracking()
   if (name !== 'beforeUpdate') binding.oldValue = binding.value
 }
+
+export function resolveDirective() {
+  // TODO
+}
index 2ce4ce5b64dfc24adf93278f257850436a11bcde..7138989e8614c76bd50d43560b414edef018c071 100644 (file)
@@ -98,3 +98,9 @@ export const vModelText: ObjectDirective<
     el.value = newValue
   },
 }
+
+// TODO
+export const vModelDynamic = {}
+export const vModelRadio = {}
+export const vModelCheckbox = {}
+export const vModelSelect = {}