3.3.13 • Published 3 months ago

@kdujs/reactivity-transform v3.3.13

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

@kdujs/reactivity-transform

⚠️ This is experimental and the proposal has been dropped. The feature is now marked as deprecated and will be removed from Kdu core in 3.4.

Basic Rules

  • Ref-creating APIs have $-prefixed versions that create reactive variables instead. They also do not need to be explicitly imported. These include:
    • ref
    • computed
    • shallowRef
    • customRef
    • toRef
  • $() can be used to destructure an object into reactive variables, or turn existing refs into reactive variables
  • $$() to "escape" the transform, which allows access to underlying refs
import { watchEffect } from 'kdu'

// bind ref as a variable
let count = $ref(0)

watchEffect(() => {
  // no need for .value
  console.log(count)
})

// assignments are reactive
count++

// get the actual ref
console.log($$(count)) // { value: 1 }

Macros can be optionally imported to make it more explicit:

// not necessary, but also works
import { $, $ref } from 'kdu/macros'

let count = $ref(0)
const { x, y } = $(useMouse())

Global Types

To enable types for the macros globally, include the following in a .d.ts file:

/// <reference types="kdu/macros-global" />

API

This package is the lower-level transform that can be used standalone. Higher-level tooling (e.g. @lahmjs/plugin-kdu and kdu-loader) will provide integration via options.

shouldTransform

Can be used to do a cheap check to determine whether full transform should be performed.

import { shouldTransform } from '@kdujs/reactivity-transform'

shouldTransform(`let a = ref(0)`) // false
shouldTransform(`let a = $ref(0)`) // true

transform

import { transform } from '@kdujs/reactivity-transform'

const src = `let a = $ref(0); a++`
const {
  code, // import { ref as _ref } from 'kdu'; let a = (ref(0)); a.value++"
  map
} = transform(src, {
  filename: 'foo.ts',
  sourceMap: true,

  // @babel/parser plugins to enable.
  // 'typescript' and 'jsx' will be auto-inferred from filename if provided,
  // so in most cases explicit parserPlugins are not necessary
  parserPlugins: [
    /* ... */
  ]
})

Options

interface RefTransformOptions {
  filename?: string
  sourceMap?: boolean // default: false
  parserPlugins?: ParserPlugin[]
  importHelpersFrom?: string // default: "kdu"
}

transformAST

Transform with an existing Babel AST + MagicString instance. This is used internally by @kdujs/compiler-sfc to avoid double parse/transform cost.

import { transformAST } from '@kdujs/reactivity-transform'
import { parse } from '@babel/parser'
import MagicString from 'magic-string'

const src = `let a = $ref(0); a++`
const ast = parse(src, { sourceType: 'module' })
const s = new MagicString(src)

const {
  rootRefs, // ['a']
  importedHelpers // ['ref']
} = transformAST(ast, s)

console.log(s.toString()) // let a = _ref(0); a.value++
3.3.13

3 months ago

3.3.10

3 months ago

3.3.11

3 months ago

3.3.12

3 months ago

3.3.9

3 months ago

3.3.8

5 months ago

3.3.7

5 months ago

3.3.6

5 months ago

3.3.5

5 months ago

3.3.1

5 months ago

3.3.4

5 months ago

3.3.3

5 months ago

3.3.2

5 months ago

3.3.0

5 months ago

3.2.46

12 months ago

3.2.45

12 months ago

3.2.48

12 months ago

3.2.38

1 year ago

3.2.33

1 year ago

3.2.37

2 years ago

3.2.37-alpha.1

2 years ago

3.2.33-alpha.1

2 years ago

3.2.25-alpha.2

2 years ago

3.2.25-alpha.1

2 years ago