kiru 0.45.2 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/appContext.d.ts +0 -13
  2. package/dist/appContext.d.ts.map +1 -1
  3. package/dist/appContext.js +15 -55
  4. package/dist/appContext.js.map +1 -1
  5. package/dist/constants.d.ts +5 -7
  6. package/dist/constants.d.ts.map +1 -1
  7. package/dist/constants.js +5 -7
  8. package/dist/constants.js.map +1 -1
  9. package/dist/context.d.ts.map +1 -1
  10. package/dist/context.js +2 -4
  11. package/dist/context.js.map +1 -1
  12. package/dist/dom.d.ts +2 -2
  13. package/dist/dom.d.ts.map +1 -1
  14. package/dist/dom.js +36 -32
  15. package/dist/dom.js.map +1 -1
  16. package/dist/form/index.d.ts.map +1 -1
  17. package/dist/form/index.js +17 -3
  18. package/dist/form/index.js.map +1 -1
  19. package/dist/form/types.d.ts +1 -0
  20. package/dist/form/types.d.ts.map +1 -1
  21. package/dist/globals.d.ts +1 -6
  22. package/dist/globals.d.ts.map +1 -1
  23. package/dist/globals.js +1 -5
  24. package/dist/globals.js.map +1 -1
  25. package/dist/hmr.d.ts +1 -1
  26. package/dist/hmr.d.ts.map +1 -1
  27. package/dist/hmr.js +2 -4
  28. package/dist/hmr.js.map +1 -1
  29. package/dist/hooks/useViewTransition.d.ts.map +1 -1
  30. package/dist/hooks/useViewTransition.js +3 -3
  31. package/dist/hooks/useViewTransition.js.map +1 -1
  32. package/dist/hooks/utils.d.ts +1 -5
  33. package/dist/hooks/utils.d.ts.map +1 -1
  34. package/dist/hooks/utils.js +8 -20
  35. package/dist/hooks/utils.js.map +1 -1
  36. package/dist/index.d.ts +1 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +2 -3
  39. package/dist/index.js.map +1 -1
  40. package/dist/lazy.d.ts.map +1 -1
  41. package/dist/lazy.js +4 -4
  42. package/dist/lazy.js.map +1 -1
  43. package/dist/portal.d.ts.map +1 -1
  44. package/dist/portal.js +2 -3
  45. package/dist/portal.js.map +1 -1
  46. package/dist/props.js +1 -1
  47. package/dist/props.js.map +1 -1
  48. package/dist/reconciler.d.ts.map +1 -1
  49. package/dist/reconciler.js +105 -79
  50. package/dist/reconciler.js.map +1 -1
  51. package/dist/renderToString.d.ts.map +1 -1
  52. package/dist/renderToString.js +5 -8
  53. package/dist/renderToString.js.map +1 -1
  54. package/dist/router/router.d.ts.map +1 -1
  55. package/dist/router/router.js +5 -6
  56. package/dist/router/router.js.map +1 -1
  57. package/dist/scheduler.d.ts +4 -11
  58. package/dist/scheduler.d.ts.map +1 -1
  59. package/dist/scheduler.js +365 -390
  60. package/dist/scheduler.js.map +1 -1
  61. package/dist/signals/base.d.ts +4 -4
  62. package/dist/signals/base.d.ts.map +1 -1
  63. package/dist/signals/base.js +38 -24
  64. package/dist/signals/base.js.map +1 -1
  65. package/dist/signals/computed.d.ts +2 -2
  66. package/dist/signals/computed.d.ts.map +1 -1
  67. package/dist/signals/computed.js +11 -3
  68. package/dist/signals/computed.js.map +1 -1
  69. package/dist/signals/effect.d.ts +1 -1
  70. package/dist/signals/effect.d.ts.map +1 -1
  71. package/dist/signals/globals.d.ts +2 -2
  72. package/dist/signals/globals.d.ts.map +1 -1
  73. package/dist/signals/globals.js.map +1 -1
  74. package/dist/signals/jsx.d.ts +4 -3
  75. package/dist/signals/jsx.d.ts.map +1 -1
  76. package/dist/signals/jsx.js +1 -1
  77. package/dist/signals/jsx.js.map +1 -1
  78. package/dist/signals/types.d.ts +2 -2
  79. package/dist/signals/types.d.ts.map +1 -1
  80. package/dist/signals/utils.d.ts +1 -1
  81. package/dist/signals/utils.d.ts.map +1 -1
  82. package/dist/signals/utils.js +1 -1
  83. package/dist/signals/utils.js.map +1 -1
  84. package/dist/ssr/server.d.ts.map +1 -1
  85. package/dist/ssr/server.js +1 -5
  86. package/dist/ssr/server.js.map +1 -1
  87. package/dist/types.d.ts +9 -2
  88. package/dist/types.d.ts.map +1 -1
  89. package/dist/utils.d.ts +1 -1
  90. package/dist/utils.d.ts.map +1 -1
  91. package/dist/utils.js +17 -17
  92. package/dist/utils.js.map +1 -1
  93. package/package.json +1 -1
  94. package/src/appContext.ts +21 -67
  95. package/src/constants.ts +8 -7
  96. package/src/context.ts +2 -4
  97. package/src/dom.ts +50 -29
  98. package/src/env.ts +6 -6
  99. package/src/form/index.ts +17 -3
  100. package/src/form/types.ts +1 -0
  101. package/src/globals.ts +1 -9
  102. package/src/hmr.ts +3 -5
  103. package/src/hooks/useViewTransition.ts +3 -3
  104. package/src/hooks/utils.ts +7 -22
  105. package/src/index.ts +3 -3
  106. package/src/lazy.ts +4 -4
  107. package/src/portal.ts +2 -3
  108. package/src/props.ts +1 -1
  109. package/src/reconciler.ts +116 -90
  110. package/src/renderToString.ts +5 -8
  111. package/src/router/router.ts +4 -6
  112. package/src/scheduler.ts +369 -407
  113. package/src/signals/base.ts +40 -33
  114. package/src/signals/computed.ts +8 -3
  115. package/src/signals/effect.ts +1 -1
  116. package/src/signals/globals.ts +2 -2
  117. package/src/signals/jsx.ts +12 -11
  118. package/src/signals/types.ts +2 -2
  119. package/src/signals/utils.ts +1 -1
  120. package/src/ssr/server.ts +1 -5
  121. package/src/types.ts +9 -2
  122. package/src/utils.ts +26 -21
  123. package/dist/flags.d.ts +0 -6
  124. package/dist/flags.d.ts.map +0 -1
  125. package/dist/flags.js +0 -16
  126. package/dist/flags.js.map +0 -1
  127. package/src/flags.ts +0 -15
@@ -1,36 +1,34 @@
1
1
  import { $HMR_ACCEPT, $SIGNAL } from "../constants.js"
2
2
  import { __DEV__ } from "../env.js"
3
3
  import type { HMRAccept } from "../hmr.js"
4
- import {
5
- getVNodeAppContext,
6
- latest,
7
- safeStringify,
8
- sideEffectsEnabled,
9
- } from "../utils.js"
4
+ import { latest, safeStringify, sideEffectsEnabled } from "../utils.js"
10
5
  import { tracking, signalSubsMap } from "./globals.js"
11
6
  import { type SignalSubscriber, ReadonlySignal } from "./types.js"
12
7
  import { node } from "../globals.js"
13
8
  import { useHook } from "../hooks/utils.js"
14
9
  import { generateRandomID } from "../generateId.js"
10
+ import { requestUpdate } from "../scheduler.js"
15
11
 
16
12
  export class Signal<T> {
17
13
  [$SIGNAL] = true;
18
14
  [$HMR_ACCEPT]?: HMRAccept<Signal<any>>
19
15
  displayName?: string
20
16
  private onBeforeRead?: () => void
17
+ protected $subs?: Set<SignalSubscriber<any>>
21
18
  protected $id: string
22
19
  protected $value: T
20
+ protected $prevValue?: T
23
21
  protected $initialValue?: string
24
22
  protected __next?: Signal<T>
25
23
  protected $isDisposed?: boolean
26
24
 
27
25
  constructor(initial: T, displayName?: string) {
28
26
  this.$id = generateRandomID()
29
- signalSubsMap.set(this.$id, new Set())
30
-
31
27
  this.$value = initial
32
28
  if (displayName) this.displayName = displayName
29
+
33
30
  if (__DEV__) {
31
+ signalSubsMap.set(this.$id, new Set())
34
32
  this.$initialValue = safeStringify(initial)
35
33
  this[$HMR_ACCEPT] = {
36
34
  provide: () => {
@@ -50,6 +48,8 @@ export class Signal<T> {
50
48
  },
51
49
  destroy: () => {},
52
50
  } satisfies HMRAccept<Signal<any>>
51
+ } else {
52
+ this.$subs = new Set()
53
53
  }
54
54
  }
55
55
 
@@ -68,11 +68,13 @@ export class Signal<T> {
68
68
  if (__DEV__) {
69
69
  const tgt = latest(this)
70
70
  if (Object.is(tgt.$value, next)) return
71
+ tgt.$prevValue = tgt.$value
71
72
  tgt.$value = next
72
73
  tgt.notify()
73
74
  return
74
75
  }
75
76
  if (Object.is(this.$value, next)) return
77
+ this.$prevValue = this.$value
76
78
  this.$value = next
77
79
  this.notify()
78
80
  }
@@ -88,9 +90,11 @@ export class Signal<T> {
88
90
  sneak(newValue: T) {
89
91
  if (__DEV__) {
90
92
  const tgt = latest(this)
93
+ tgt.$prevValue = tgt.$value
91
94
  tgt.$value = newValue
92
95
  return
93
96
  }
97
+ this.$prevValue = this.$value
94
98
  this.$value = newValue
95
99
  }
96
100
 
@@ -105,23 +109,27 @@ export class Signal<T> {
105
109
  return `${this.$value}`
106
110
  }
107
111
 
108
- subscribe(cb: (state: T) => void): () => void {
109
- const subs = signalSubsMap.get(this.$id)!
110
- subs!.add(cb)
111
- return () => signalSubsMap.get(this.$id)?.delete(cb)
112
+ subscribe(cb: (state: T, prevState?: T) => void): () => void {
113
+ if (__DEV__) {
114
+ const subs = signalSubsMap.get(this.$id)!
115
+ subs!.add(cb)
116
+ return () => signalSubsMap.get(this.$id)?.delete(cb)
117
+ }
118
+ this.$subs!.add(cb)
119
+ return () => this.$subs!.delete(cb)
112
120
  }
113
121
 
114
122
  notify(options?: { filter?: (sub: Function | Kiru.VNode) => boolean }) {
115
- signalSubsMap.get(this.$id)?.forEach((sub) => {
123
+ if (__DEV__) {
124
+ return signalSubsMap.get(this.$id)?.forEach((sub) => {
125
+ if (options?.filter && !options.filter(sub)) return
126
+ const { $value, $prevValue } = latest(this)
127
+ return sub($value, $prevValue)
128
+ })
129
+ }
130
+ this.$subs!.forEach((sub) => {
116
131
  if (options?.filter && !options.filter(sub)) return
117
- if (typeof sub === "function") {
118
- if (__DEV__) {
119
- const value = latest(this).$value
120
- return sub(value)
121
- }
122
- return sub(this.$value)
123
- }
124
- getVNodeAppContext(sub).requestUpdate(sub)
132
+ return sub(this.$value, this.$prevValue)
125
133
  })
126
134
  }
127
135
 
@@ -129,12 +137,11 @@ export class Signal<T> {
129
137
  return typeof x === "object" && !!x && $SIGNAL in x
130
138
  }
131
139
 
132
- static unsubscribe(sub: SignalSubscriber, id: string) {
133
- signalSubsMap.get(id)?.delete(sub)
134
- }
135
-
136
140
  static subscribers(signal: Signal<any>) {
137
- return signalSubsMap.get(signal.$id)!
141
+ if (__DEV__) {
142
+ return signalSubsMap.get(signal.$id)!
143
+ }
144
+ return signal.$subs
138
145
  }
139
146
 
140
147
  static makeReadonly<T>(signal: Signal<T>): ReadonlySignal<T> {
@@ -165,10 +172,6 @@ export class Signal<T> {
165
172
  })
166
173
  }
167
174
 
168
- static getId<T>(signal: Signal<T>) {
169
- return signal.$id
170
- }
171
-
172
175
  static entangle<T>(signal: Signal<T>) {
173
176
  const vNode = node.current
174
177
  const trackedSignalObservations = tracking.current()
@@ -179,8 +182,8 @@ export class Signal<T> {
179
182
  return
180
183
  }
181
184
  if (!vNode || !sideEffectsEnabled()) return
182
- ;(vNode.subs ??= new Set()).add(signal.$id)
183
- Signal.subscribers(signal).add(vNode)
185
+ const unsub = signal.subscribe(() => requestUpdate(vNode))
186
+ ;(vNode.subs ??= new Set()).add(unsub)
184
187
  }
185
188
 
186
189
  static configure(signal: Signal<any>, onBeforeRead?: () => void) {
@@ -189,7 +192,11 @@ export class Signal<T> {
189
192
 
190
193
  static dispose(signal: Signal<any>) {
191
194
  signal.$isDisposed = true
192
- signalSubsMap.delete(signal.$id)
195
+ if (__DEV__) {
196
+ signalSubsMap.delete(signal.$id)
197
+ return
198
+ }
199
+ signal.$subs!.clear()
193
200
  }
194
201
  }
195
202
 
@@ -1,5 +1,5 @@
1
1
  import { __DEV__ } from "../env.js"
2
- import { Signal } from "./base.js"
2
+ import { Signal } from "./index.js"
3
3
  import { effectQueue, signalSubsMap } from "./globals.js"
4
4
  import { $HMR_ACCEPT } from "../constants.js"
5
5
  import type { HMRAccept } from "../hmr.js"
@@ -57,7 +57,7 @@ export class ComputedSignal<T> extends Signal<T> {
57
57
  // @ts-expect-error
58
58
  set value(next: T) {}
59
59
 
60
- subscribe(cb: (state: T) => void): () => void {
60
+ subscribe(cb: (state: T, prevState?: T) => void): () => void {
61
61
  if (this.$isDirty) {
62
62
  ComputedSignal.run(this)
63
63
  }
@@ -88,8 +88,13 @@ export class ComputedSignal<T> extends Signal<T> {
88
88
  fn: () => $getter($computed.$value),
89
89
  onDepChanged: () => {
90
90
  $computed.$isDirty = true
91
- if (!signalSubsMap?.get(id)?.size) return
91
+ if (__DEV__) {
92
+ if (!signalSubsMap?.get(id)?.size) return
93
+ } else {
94
+ if (!computed.$subs!.size) return
95
+ }
92
96
  ComputedSignal.run($computed)
97
+ if (Object.is($computed.$value, $computed.$prevValue)) return
93
98
  $computed.notify()
94
99
  },
95
100
  })
@@ -1,7 +1,7 @@
1
1
  import { node } from "../globals.js"
2
2
  import { sideEffectsEnabled } from "../utils.js"
3
3
  import { tracking, effectQueue } from "./globals.js"
4
- import type { Signal } from "./base.js"
4
+ import type { Signal } from "./index.js"
5
5
  import type { SignalValues } from "./types.js"
6
6
 
7
7
  type TrackedExecutionContext<T, Deps extends readonly Signal<unknown>[]> = {
@@ -1,4 +1,4 @@
1
- import type { Signal } from "./base.js"
1
+ import type { Signal } from "./index.js"
2
2
  import type { SignalSubscriber } from "./types.js"
3
3
 
4
4
  export const tracking = {
@@ -8,4 +8,4 @@ export const tracking = {
8
8
  },
9
9
  }
10
10
  export const effectQueue = new Map<string, Function>()
11
- export const signalSubsMap: Map<string, Set<SignalSubscriber>> = new Map()
11
+ export const signalSubsMap: Map<string, Set<SignalSubscriber<any>>> = new Map()
@@ -1,17 +1,18 @@
1
- import type { Signal } from "./base.js"
1
+ import type { Signal } from "./index.js"
2
2
  import type { SignalValues } from "./types.js"
3
3
 
4
- type ForProps<T extends Signal<any[]>> = {
4
+ type InferArraySignalItemType<T extends Signal<any[]>> = T extends Signal<
5
+ infer V
6
+ >
7
+ ? V extends Array<infer W>
8
+ ? W
9
+ : never
10
+ : never
11
+
12
+ type ForProps<T extends Signal<any[]>, U = InferArraySignalItemType<T>> = {
5
13
  each: T
6
14
  fallback?: JSX.Element
7
- children: (
8
- value: T extends Signal<infer U>
9
- ? U extends Array<infer V>
10
- ? V
11
- : never
12
- : never,
13
- index: number
14
- ) => JSX.Element
15
+ children: (value: U, index: number, array: U[]) => JSX.Element
15
16
  }
16
17
 
17
18
  export function For<T extends Signal<any[]>>({
@@ -21,7 +22,7 @@ export function For<T extends Signal<any[]>>({
21
22
  }: ForProps<T>) {
22
23
  const items = each.value
23
24
  if (items.length === 0) return fallback
24
- return items.map((v, i) => children(v, i))
25
+ return items.map(children)
25
26
  }
26
27
 
27
28
  type DeriveChildrenArgs<T extends Signal<any> | Signal<any>[]> =
@@ -1,9 +1,9 @@
1
- import { type Signal } from "./base"
1
+ import { type Signal } from "./index.js"
2
2
 
3
3
  export type ReadonlySignal<T> = Signal<T> & {
4
4
  readonly value: T
5
5
  }
6
- export type SignalSubscriber = Kiru.VNode | Function
6
+ export type SignalSubscriber<T = unknown> = (value: T, prevValue?: T) => void
7
7
 
8
8
  export type SignalValues<T extends readonly Signal<unknown>[]> = {
9
9
  [I in keyof T]: T[I] extends Signal<infer V> ? V : never
@@ -1,4 +1,4 @@
1
- import { Signal } from "./base.js"
1
+ import { Signal } from "./index.js"
2
2
  import { effectQueue } from "./globals.js"
3
3
 
4
4
  export function unwrap<T>(value: T | Signal<T>, reactive = false): T {
package/src/ssr/server.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Readable } from "node:stream"
2
2
  import { Fragment } from "../element.js"
3
3
  import { AppContext, createAppContext } from "../appContext.js"
4
- import { renderMode, ctx, node, nodeToCtxMap } from "../globals.js"
4
+ import { renderMode, node } from "../globals.js"
5
5
  import {
6
6
  isVNode,
7
7
  encodeHtmlEntities,
@@ -29,12 +29,9 @@ export function renderToReadableStream<T extends Record<string, unknown>>(
29
29
  stream: new Readable(),
30
30
  ctx: createAppContext(appFunc, appProps, { rootType: Fragment }),
31
31
  }
32
- const prevCtx = ctx.current
33
- ctx.current = state.ctx
34
32
  renderToStream_internal(state, state.ctx.rootNode, null, 0)
35
33
  state.stream.push(null)
36
34
  renderMode.current = prev
37
- ctx.current = prevCtx
38
35
 
39
36
  return state.stream
40
37
  }
@@ -89,7 +86,6 @@ function renderToStream_internal(
89
86
  }
90
87
 
91
88
  if (typeof type !== "string") {
92
- nodeToCtxMap.set(el, state.ctx)
93
89
  node.current = el
94
90
  const res = type(props)
95
91
  node.current = null
package/src/types.ts CHANGED
@@ -17,6 +17,7 @@ import type {
17
17
  SVGTagToElement,
18
18
  } from "./types.dom"
19
19
  import { Signalable, SomeDom } from "./types.utils"
20
+ import type { AppContext } from "./appContext"
20
21
 
21
22
  export type { ElementProps, StyleObject }
22
23
 
@@ -169,6 +170,7 @@ declare global {
169
170
  | typeof $HYDRATION_BOUNDARY
170
171
 
171
172
  type VNode = {
173
+ app?: AppContext
172
174
  dom?: SomeDom
173
175
  lastChildDom?: SomeDom
174
176
  type: Function | ExoticSymbol | "#text" | (string & {})
@@ -183,11 +185,11 @@ declare global {
183
185
  parent: VNode | null
184
186
  child: VNode | null
185
187
  sibling: VNode | null
186
- prev: VNode | null
188
+ prev: VNodeSnapshot | null
187
189
  deletions: VNode[] | null
188
190
  flags: number
189
191
  hooks?: Hook<unknown>[]
190
- subs?: Set<string>
192
+ subs?: Set<Function>
191
193
  cleanups?: Record<string, Function>
192
194
  effects?: Array<Function>
193
195
  immediateEffects?: Array<Function>
@@ -202,6 +204,11 @@ declare global {
202
204
  hmrUpdated?: boolean
203
205
  }
204
206
  }
207
+ type VNodeSnapshot = {
208
+ props: Kiru.VNode["props"]
209
+ memoizedProps: Kiru.VNode["memoizedProps"]
210
+ index: number
211
+ }
205
212
 
206
213
  interface Element {
207
214
  __kiruNode?: Kiru.VNode
package/src/utils.ts CHANGED
@@ -1,17 +1,18 @@
1
- import { node, nodeToCtxMap, renderMode } from "./globals.js"
1
+ import { node, renderMode } from "./globals.js"
2
2
  import {
3
3
  $CONTEXT_PROVIDER,
4
4
  $FRAGMENT,
5
5
  $HYDRATION_BOUNDARY,
6
6
  booleanAttributes,
7
- FLAG,
7
+ FLAG_DELETION,
8
+ FLAG_HAS_MEMO_ANCESTOR,
9
+ FLAG_PLACEMENT,
10
+ FLAG_UPDATE,
8
11
  REGEX_UNIT,
9
12
  } from "./constants.js"
10
13
  import { unwrap } from "./signals/utils.js"
11
- import { KiruError } from "./error.js"
12
- import type { AppContext } from "./appContext"
13
14
  import { __DEV__ } from "./env.js"
14
- import { flags } from "./flags.js"
15
+ import type { AppContext } from "./appContext"
15
16
 
16
17
  export {
17
18
  isVNode,
@@ -74,7 +75,7 @@ function sideEffectsEnabled(): boolean {
74
75
  }
75
76
 
76
77
  function isVNodeDeleted(vNode: VNode): boolean {
77
- return flags.get(vNode.flags, FLAG.DELETION)
78
+ return (vNode.flags & FLAG_DELETION) !== 0
78
79
  }
79
80
 
80
81
  function isVNode(thing: unknown): thing is VNode {
@@ -119,22 +120,30 @@ function getCurrentVNode(): VNode | null {
119
120
  return node.current
120
121
  }
121
122
 
122
- function getVNodeAppContext(vNode: VNode): AppContext {
123
- const n = nodeToCtxMap.get(vNode)
124
- if (!n)
125
- throw new KiruError({
126
- message: "Unable to find VNode's AppContext.",
127
- vNode,
128
- })
129
- return n
123
+ function getVNodeAppContext(vNode: VNode): AppContext | null {
124
+ let n: VNode | null = vNode
125
+ while (n) {
126
+ if (n.app) {
127
+ return (vNode.app = n.app)
128
+ }
129
+ n = n.parent
130
+ }
131
+
132
+ return null
130
133
  }
131
134
 
132
135
  function commitSnapshot(vNode: VNode): void {
133
- vNode.prev = { ...vNode, props: { ...vNode.props }, prev: null }
134
- vNode.flags = flags.unsetRange(vNode.flags, FLAG.UPDATE, FLAG.DELETION)
136
+ const {
137
+ props: { children, ...props },
138
+ memoizedProps,
139
+ index,
140
+ } = vNode
141
+ vNode.prev = { props, memoizedProps, index }
142
+ vNode.flags &= ~(FLAG_UPDATE | FLAG_PLACEMENT | FLAG_DELETION)
135
143
  }
136
144
 
137
145
  function vNodeContains(haystack: VNode, needle: VNode): boolean {
146
+ if (needle.depth < haystack.depth) return false
138
147
  if (haystack === needle) return true
139
148
  let checkSiblings = false
140
149
  const stack: VNode[] = [haystack]
@@ -151,11 +160,7 @@ function vNodeContains(haystack: VNode, needle: VNode): boolean {
151
160
  function willMemoBlockUpdate(root: VNode, target: VNode): boolean {
152
161
  let node: VNode | null = target
153
162
 
154
- while (
155
- node &&
156
- node !== root &&
157
- flags.get(node.flags, FLAG.HAS_MEMO_ANCESTOR)
158
- ) {
163
+ while (node && node !== root && node.flags & FLAG_HAS_MEMO_ANCESTOR) {
159
164
  const parent = node.parent
160
165
  if (
161
166
  parent?.isMemoized &&
package/dist/flags.d.ts DELETED
@@ -1,6 +0,0 @@
1
- export declare const flags: {
2
- readonly set: (field: number, flag: number) => number;
3
- readonly get: (field: number, n: number) => boolean;
4
- readonly unsetRange: (field: number, start: number, end: number) => number;
5
- };
6
- //# sourceMappingURL=flags.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../src/flags.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK;0BAEL,MAAM,QAAQ,MAAM,KAAG,MAAM;0BAI7B,MAAM,KAAK,MAAM,KAAG,OAAO;iCAIpB,MAAM,SAAS,MAAM,OAAO,MAAM,KAAG,MAAM;CAIrD,CAAA"}
package/dist/flags.js DELETED
@@ -1,16 +0,0 @@
1
- export const flags = {
2
- // Set the flag at position `n` (0-based index)
3
- set(field, flag) {
4
- return (field |= 1 << flag);
5
- },
6
- // Check if the flag at position `n` is set (true) or not (false)
7
- get(field, n) {
8
- return (field & (1 << n)) !== 0;
9
- },
10
- // Unset all flags between `start` and `end`
11
- unsetRange(field, start, end) {
12
- const mask = ((1 << (end - start + 1)) - 1) << start;
13
- return field & ~mask;
14
- },
15
- };
16
- //# sourceMappingURL=flags.js.map
package/dist/flags.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"flags.js","sourceRoot":"","sources":["../src/flags.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,+CAA+C;IAC/C,GAAG,CAAC,KAAa,EAAE,IAAY;QAC7B,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;IAC7B,CAAC;IACD,iEAAiE;IACjE,GAAG,CAAC,KAAa,EAAE,CAAS;QAC1B,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;IACD,4CAA4C;IAC5C,UAAU,CAAC,KAAa,EAAE,KAAa,EAAE,GAAW;QAClD,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAA;QACpD,OAAO,KAAK,GAAG,CAAC,IAAI,CAAA;IACtB,CAAC;CACO,CAAA"}
package/src/flags.ts DELETED
@@ -1,15 +0,0 @@
1
- export const flags = {
2
- // Set the flag at position `n` (0-based index)
3
- set(field: number, flag: number): number {
4
- return (field |= 1 << flag)
5
- },
6
- // Check if the flag at position `n` is set (true) or not (false)
7
- get(field: number, n: number): boolean {
8
- return (field & (1 << n)) !== 0
9
- },
10
- // Unset all flags between `start` and `end`
11
- unsetRange(field: number, start: number, end: number): number {
12
- const mask = ((1 << (end - start + 1)) - 1) << start
13
- return field & ~mask
14
- },
15
- } as const