Home / File/ model.ts — vue Source File

model.ts — vue Source File

Architecture documentation for model.ts, a typescript file in the vue codebase. 2 imports, 1 dependents.

File typescript ServerRenderer BundleRenderer 2 imports 1 dependents 3 functions

Entity Profile

Dependency Diagram

graph LR
  e8745e03_5237_d9bd_a77b_dbfba77d2d10["model.ts"]
  09aa5370_2caa_6b33_3f44_6ac5211bd11b["util"]
  e8745e03_5237_d9bd_a77b_dbfba77d2d10 --> 09aa5370_2caa_6b33_3f44_6ac5211bd11b
  ba925ef2_b0f4_efe3_c23d_fe293c46b2c1["vnode"]
  e8745e03_5237_d9bd_a77b_dbfba77d2d10 --> ba925ef2_b0f4_efe3_c23d_fe293c46b2c1
  46a6b9a7_36e9_3c32_fe1c_dd07fd47f339["index.ts"]
  46a6b9a7_36e9_3c32_fe1c_dd07fd47f339 --> e8745e03_5237_d9bd_a77b_dbfba77d2d10
  style e8745e03_5237_d9bd_a77b_dbfba77d2d10 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { looseEqual, looseIndexOf } from 'shared/util'
import type { VNodeDirective, VNodeWithData } from 'types/vnode'

// this is only applied for <select v-model> because it is the only edge case
// that must be done at runtime instead of compile time.
export default function model(node: VNodeWithData, dir: VNodeDirective) {
  if (!node.children) return
  const value = dir.value
  const isMultiple = node.data.attrs && node.data.attrs.multiple
  for (let i = 0, l = node.children.length; i < l; i++) {
    const option = node.children[i]
    if (option.tag === 'option') {
      if (isMultiple) {
        const selected =
          Array.isArray(value) && looseIndexOf(value, getValue(option)) > -1
        if (selected) {
          setSelected(option)
        }
      } else {
        if (looseEqual(value, getValue(option))) {
          setSelected(option)
          return
        }
      }
    }
  }
}

function getValue(option) {
  const data = option.data || {}
  return (
    (data.attrs && data.attrs.value) ||
    (data.domProps && data.domProps.value) ||
    (option.children && option.children[0] && option.children[0].text)
  )
}

function setSelected(option) {
  const data = option.data || (option.data = {})
  const attrs = data.attrs || (data.attrs = {})
  attrs.selected = ''
}

Subdomains

Dependencies

  • util
  • vnode

Frequently Asked Questions

What does model.ts do?
model.ts is a source file in the vue codebase, written in typescript. It belongs to the ServerRenderer domain, BundleRenderer subdomain.
What functions are defined in model.ts?
model.ts defines 3 function(s): getValue, model, setSelected.
What does model.ts depend on?
model.ts imports 2 module(s): util, vnode.
What files import model.ts?
model.ts is imported by 1 file(s): index.ts.
Where is model.ts in the architecture?
model.ts is located at packages/server-renderer/src/directives/model.ts (domain: ServerRenderer, subdomain: BundleRenderer, directory: packages/server-renderer/src/directives).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free