Home / File/ readonly.ts — vue Source File

readonly.ts — vue Source File

Architecture documentation for readonly.ts, a typescript file in the vue codebase. 10 imports, 0 dependents.

File typescript VueCore VDom 10 imports 4 functions

Entity Profile

Dependency Diagram

graph LR
  8420591a_8fdc_59a9_134d_e2c52487724c["readonly.ts"]
  e84ea476_9f30_e7b9_aaa0_4026f0c97365["reactive.ts"]
  8420591a_8fdc_59a9_134d_e2c52487724c --> e84ea476_9f30_e7b9_aaa0_4026f0c97365
  24d1b598_7844_eabd_7bf3_b06754c98fbb["isCollectionType"]
  8420591a_8fdc_59a9_134d_e2c52487724c --> 24d1b598_7844_eabd_7bf3_b06754c98fbb
  f4212d06_3802_22f2_e5de_b57826dd5a8e["isReadonly"]
  8420591a_8fdc_59a9_134d_e2c52487724c --> f4212d06_3802_22f2_e5de_b57826dd5a8e
  9c37c7df_b33a_f5b7_931d_e335ff41ce94["isShallow"]
  8420591a_8fdc_59a9_134d_e2c52487724c --> 9c37c7df_b33a_f5b7_931d_e335ff41ce94
  02125244_44e5_bcdb_5575_964348bb90d8["ReactiveFlags"]
  8420591a_8fdc_59a9_134d_e2c52487724c --> 02125244_44e5_bcdb_5575_964348bb90d8
  5d0a6641_6a75_731b_3f9f_33f266a91cda["UnwrapNestedRefs"]
  8420591a_8fdc_59a9_134d_e2c52487724c --> 5d0a6641_6a75_731b_3f9f_33f266a91cda
  22b44e72_ad0a_6a98_e36a_e325291fd02b["ref.ts"]
  8420591a_8fdc_59a9_134d_e2c52487724c --> 22b44e72_ad0a_6a98_e36a_e325291fd02b
  f264de96_ce30_ab7e_6f2f_bd7a1a19804f["isRef"]
  8420591a_8fdc_59a9_134d_e2c52487724c --> f264de96_ce30_ab7e_6f2f_bd7a1a19804f
  29d11db1_dfc1_094c_66f0_0ae7d09000cd["Ref"]
  8420591a_8fdc_59a9_134d_e2c52487724c --> 29d11db1_dfc1_094c_66f0_0ae7d09000cd
  6d8f8976_7066_720b_0d45_45fe42921eaf["util"]
  8420591a_8fdc_59a9_134d_e2c52487724c --> 6d8f8976_7066_720b_0d45_45fe42921eaf
  style 8420591a_8fdc_59a9_134d_e2c52487724c fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { def, warn, isPlainObject, isArray } from 'core/util'
import {
  isCollectionType,
  isReadonly,
  isShallow,
  ReactiveFlags,
  UnwrapNestedRefs
} from './reactive'
import { isRef, Ref, RefFlag } from './ref'

type Primitive = string | number | boolean | bigint | symbol | undefined | null
type Builtin = Primitive | Function | Date | Error | RegExp
export type DeepReadonly<T> = T extends Builtin
  ? T
  : T extends Map<infer K, infer V>
  ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>>
  : T extends ReadonlyMap<infer K, infer V>
  ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>>
  : T extends WeakMap<infer K, infer V>
  ? WeakMap<DeepReadonly<K>, DeepReadonly<V>>
  : T extends Set<infer U>
  ? ReadonlySet<DeepReadonly<U>>
  : T extends ReadonlySet<infer U>
  ? ReadonlySet<DeepReadonly<U>>
  : T extends WeakSet<infer U>
  ? WeakSet<DeepReadonly<U>>
  : T extends Promise<infer U>
  ? Promise<DeepReadonly<U>>
  : T extends Ref<infer U>
  ? Readonly<Ref<DeepReadonly<U>>>
  : T extends {}
  ? { readonly [K in keyof T]: DeepReadonly<T[K]> }
  : Readonly<T>

const rawToReadonlyFlag = `__v_rawToReadonly`
const rawToShallowReadonlyFlag = `__v_rawToShallowReadonly`

export function readonly<T extends object>(
  target: T
): DeepReadonly<UnwrapNestedRefs<T>> {
  return createReadonly(target, false)
}

function createReadonly(target: any, shallow: boolean) {
  if (!isPlainObject(target)) {
    if (__DEV__) {
      if (isArray(target)) {
        warn(`Vue 2 does not support readonly arrays.`)
      } else if (isCollectionType(target)) {
        warn(
          `Vue 2 does not support readonly collection types such as Map or Set.`
        )
      } else {
        warn(`value cannot be made readonly: ${typeof target}`)
      }
    }
    return target as any
  }

  if (__DEV__ && !Object.isExtensible(target)) {
// ... (68 more lines)

Domain

Subdomains

Frequently Asked Questions

What does readonly.ts do?
readonly.ts is a source file in the vue codebase, written in typescript. It belongs to the VueCore domain, VDom subdomain.
What functions are defined in readonly.ts?
readonly.ts defines 4 function(s): createReadonly, defineReadonlyProperty, readonly, shallowReadonly.
What does readonly.ts depend on?
readonly.ts imports 10 module(s): ReactiveFlags, Ref, UnwrapNestedRefs, isCollectionType, isReadonly, isRef, isShallow, reactive.ts, and 2 more.
Where is readonly.ts in the architecture?
readonly.ts is located at src/v3/reactivity/readonly.ts (domain: VueCore, subdomain: VDom, directory: src/v3/reactivity).

Analyze Your Own Codebase

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

Try Supermodel Free