microtags 0.0.0 → 0.0.1
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.
- package/README.md +165 -31
- package/dist/attributes.d.ts +10 -0
- package/dist/attributes.d.ts.map +1 -0
- package/dist/builders.d.ts +43 -4
- package/dist/builders.d.ts.map +1 -1
- package/dist/context.cjs.map +2 -2
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js.map +2 -2
- package/dist/context.min.js.map +2 -2
- package/dist/factory.d.ts.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +4 -4
- package/dist/meta.json +4 -4
- package/dist/reactivity.d.ts.map +1 -1
- package/dist/render.cjs.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js.map +1 -1
- package/dist/render.min.js.map +1 -1
- package/dist/setup-context.d.ts.map +1 -1
- package/dist/types.d.ts +45 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/{utils.d.ts → util.d.ts} +1 -1
- package/dist/util.d.ts.map +1 -0
- package/package.json +13 -6
- package/dist/utils.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -5,32 +5,38 @@
|
|
|
5
5
|
[](README.md)
|
|
6
6
|
[](https://semver.org/)
|
|
7
7
|
[](./CHANGELOG.md)
|
|
8
|
+
[](https://packagephobia.com/result?p=microtags)
|
|
9
|
+
[](https://bundlephobia.com/package/microtags)
|
|
8
10
|
[](LICENSE)
|
|
9
11
|
|
|
10
12
|
Web component helper with reactive props, automatic cleanup,
|
|
11
13
|
and no Shadow DOM. Reactive via
|
|
12
14
|
[alien-signals](https://github.com/stackblitz/alien-signals).
|
|
13
15
|
|
|
14
|
-
Inspired by [nanotags](https://nanotags.psdcoder.dev/)
|
|
15
|
-
|
|
16
|
-
You call `count()` to read and `count(42)` to write — no `$` prefix,
|
|
17
|
-
no `.get()` / `.set()`.
|
|
16
|
+
Inspired by [nanotags](https://nanotags.psdcoder.dev/). Reactive props use
|
|
17
|
+
**alien-signals** instead of nanostores atoms.
|
|
18
18
|
|
|
19
19
|
<details><summary><h2>Contents</h2></summary>
|
|
20
20
|
|
|
21
|
+
<!-- toc -->
|
|
22
|
+
|
|
21
23
|
- [Install](#install)
|
|
22
|
-
- [
|
|
24
|
+
- [Example](#example)
|
|
25
|
+
- [Serverside Example](#serverside-example)
|
|
23
26
|
- [API](#api)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
* [Props](#props)
|
|
28
|
+
* [define](#define)
|
|
29
|
+
* [withProps](#withprops)
|
|
30
|
+
* [withRefs](#withrefs)
|
|
31
|
+
* [withContexts](#withcontexts)
|
|
32
|
+
* [setup and ctx](#setup-and-ctx)
|
|
29
33
|
- [Subpaths](#subpaths)
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
* [microtags/context](#microtagscontext)
|
|
35
|
+
* [microtags/render](#microtagsrender)
|
|
32
36
|
- [Divergence from nanotags](#divergence-from-nanotags)
|
|
33
37
|
|
|
38
|
+
<!-- tocstop -->
|
|
39
|
+
|
|
34
40
|
</details>
|
|
35
41
|
|
|
36
42
|
## Install
|
|
@@ -39,32 +45,67 @@ no `.get()` / `.set()`.
|
|
|
39
45
|
npm i -S microtags
|
|
40
46
|
```
|
|
41
47
|
|
|
42
|
-
|
|
48
|
+
----------------------------------------------------------------------
|
|
49
|
+
## Example
|
|
50
|
+
----------------------------------------------------------------------
|
|
51
|
+
|
|
52
|
+
This example depends on having the full HTML already in the DOM. If you want
|
|
53
|
+
to do client-side-rendered components, that is possible. You would update the
|
|
54
|
+
DOM inside `.setup`.
|
|
55
|
+
|
|
56
|
+
Since the full HTML exists already, defining your components in the
|
|
57
|
+
client-side JS is about "hydrating" the page only (adding behavior).
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
`withProps`, `withRefs`, and `withContexts` are optional and can appear in
|
|
62
|
+
any order. setup ends the chain: it calls `customElements.define` under the hood
|
|
63
|
+
and returns a typed constructor.
|
|
43
64
|
|
|
44
65
|
```ts
|
|
45
66
|
import { define } from 'microtags'
|
|
46
67
|
import { signal } from 'alien-signals'
|
|
47
68
|
|
|
48
|
-
|
|
69
|
+
/**
|
|
70
|
+
* - attribute-backed prop (`start`)
|
|
71
|
+
* - data-ref elements (the <count-button> and <copy-btn> children)
|
|
72
|
+
* - ctx.effect, ctx.on
|
|
73
|
+
*/
|
|
74
|
+
export const myCounter = define('my-counter')
|
|
49
75
|
.withProps(p => ({
|
|
50
|
-
start: p.number(),
|
|
76
|
+
start: p.number(),
|
|
51
77
|
}))
|
|
52
|
-
.withRefs(r => ({
|
|
53
|
-
display: r.one,
|
|
54
|
-
inc: r.one,
|
|
55
|
-
dec: r.one,
|
|
78
|
+
.withRefs(r => ({ // the keys in this object are the ref names
|
|
79
|
+
display: r.one<HTMLDivElement>(), // typed as HTMLDivElement
|
|
80
|
+
inc: r.one(), // defaults to HTMLElement
|
|
81
|
+
dec: r.one(),
|
|
82
|
+
copy: r.one(),
|
|
56
83
|
}))
|
|
57
84
|
.setup(ctx => {
|
|
58
|
-
//
|
|
85
|
+
// all event <-> state logic here
|
|
59
86
|
const count = signal(ctx.props.start())
|
|
87
|
+
const display = ctx.refs.display
|
|
60
88
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
()
|
|
89
|
+
ctx.effect(() => {
|
|
90
|
+
display.textContent = `Count: ${count()}`
|
|
91
|
+
display.style.color = count() < 0 ? 'red' : 'inherit'
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
// Reflect the live count onto the copy button's `value` attribute.
|
|
95
|
+
// Because `value` is attribute-backed, this flows into <copy-btn>'s
|
|
96
|
+
// own signal, so it always copies the current count.
|
|
97
|
+
ctx.effect(() => {
|
|
98
|
+
const copy = ctx.refs.copy
|
|
99
|
+
copy.setAttribute('value', String(count()))
|
|
100
|
+
})
|
|
64
101
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
102
|
+
ctx.on(ctx.refs.inc, 'click', () => {
|
|
103
|
+
count(count() + 1)
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
ctx.on(ctx.refs.dec, 'click', () => {
|
|
107
|
+
count(count() - 1)
|
|
108
|
+
})
|
|
68
109
|
})
|
|
69
110
|
```
|
|
70
111
|
|
|
@@ -76,7 +117,58 @@ define('my-counter')
|
|
|
76
117
|
</my-counter>
|
|
77
118
|
```
|
|
78
119
|
|
|
120
|
+
|
|
121
|
+
----------------------------------------------------------------------
|
|
122
|
+
## Serverside Example
|
|
123
|
+
----------------------------------------------------------------------
|
|
124
|
+
|
|
125
|
+
Each tag name that you pass to `define` is exposed as a property `.TAG`
|
|
126
|
+
on the return value. It is possible to import your web components in Node,
|
|
127
|
+
even though Node does not have browser APIs.
|
|
128
|
+
|
|
129
|
+
```ts
|
|
130
|
+
import { myCounter, countBtn, copyBtn } from './index.js'
|
|
131
|
+
|
|
132
|
+
// this runs in Node
|
|
133
|
+
|
|
134
|
+
export function render ():string {
|
|
135
|
+
return `
|
|
136
|
+
<div>
|
|
137
|
+
<${myCounter.TAG} start="5">
|
|
138
|
+
<div data-ref="display" role="status" class="count"></div>
|
|
139
|
+
|
|
140
|
+
<div class="controls">
|
|
141
|
+
<${countBtn.TAG} data-ref="dec" label="-" aria-label="Decrement">
|
|
142
|
+
</${countBtn.TAG}>
|
|
143
|
+
<${copyBtn.TAG} data-ref="copy"></${copyBtn.TAG}>
|
|
144
|
+
<${countBtn.TAG} data-ref="inc" label="+" aria-label="Increment">
|
|
145
|
+
</${countBtn.TAG}>
|
|
146
|
+
</div>
|
|
147
|
+
</${myCounter.TAG}>
|
|
148
|
+
</div>
|
|
149
|
+
`
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
----------------------------------------------------------------------
|
|
79
154
|
## API
|
|
155
|
+
----------------------------------------------------------------------
|
|
156
|
+
|
|
157
|
+
### Props
|
|
158
|
+
|
|
159
|
+
Declare reactive attributes via withProps. Each prop becomes:
|
|
160
|
+
|
|
161
|
+
* An observed HTML attribute (auto-synced via `attributeChangedCallback`)
|
|
162
|
+
* A signal at `ctx.props.propName`
|
|
163
|
+
* A typed getter/setter on the element instance
|
|
164
|
+
* Four built-in validators coerce raw attribute strings to typed values:
|
|
165
|
+
|
|
166
|
+
| Validator | Coercion | `null` attr |
|
|
167
|
+
|-----------|----------|-------------|
|
|
168
|
+
| `p.string()` | `String(val)` | `""` |
|
|
169
|
+
| `p.number()` | `Number(val)` | `0` |
|
|
170
|
+
| `p.boolean()` | `"true"` / `""` → `true`, `"false"` → `false` | `false` |
|
|
171
|
+
| `p.oneOf(opts)` | Picklist enum, throws on invalid | throws |
|
|
80
172
|
|
|
81
173
|
### define
|
|
82
174
|
|
|
@@ -113,18 +205,56 @@ ctx.props.count(42) // write
|
|
|
113
205
|
|
|
114
206
|
```ts
|
|
115
207
|
.withRefs(r => ({
|
|
116
|
-
button: r.one, // resolves [data-ref="button"] — throws if missing
|
|
117
|
-
items: r.all, // resolves all [data-ref="items"] — empty array if none
|
|
208
|
+
button: r.one(), // resolves [data-ref="button"] — throws if missing
|
|
209
|
+
items: r.all(), // resolves all [data-ref="items"] — empty array if none
|
|
210
|
+
}))
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Call `r.one()` / `r.all()` with no argument to match `[data-ref="<key>"]`,
|
|
214
|
+
or pass a CSS selector to query by it instead — resolved relative to the
|
|
215
|
+
host element:
|
|
216
|
+
|
|
217
|
+
```ts
|
|
218
|
+
.withRefs(r => ({
|
|
219
|
+
code: r.one('code'), // host.querySelector('code')
|
|
220
|
+
items: r.all('li'), // host.querySelectorAll('li')
|
|
118
221
|
}))
|
|
119
222
|
```
|
|
120
223
|
|
|
121
224
|
Refs are resolved from within the element during `connectedCallback`.
|
|
122
225
|
|
|
226
|
+
#### Element types
|
|
227
|
+
|
|
228
|
+
An un-annotated `r.one()` is typed as `HTMLElement`, so `.style`,
|
|
229
|
+
`.textContent`, and `.dataset` work without a cast. There are two ways to
|
|
230
|
+
get a more specific element type:
|
|
231
|
+
|
|
123
232
|
```ts
|
|
124
|
-
|
|
125
|
-
|
|
233
|
+
.withRefs(r => ({
|
|
234
|
+
// Generic argument: sets the type, keeps the [data-ref] selector.
|
|
235
|
+
display: r.one<HTMLDivElement>(),
|
|
236
|
+
|
|
237
|
+
// Tag string: infers the type AND queries by that tag, exactly like
|
|
238
|
+
// document.querySelector('button'). It does NOT keep [data-ref].
|
|
239
|
+
save: r.one('button'), // SingleRefDef<HTMLButtonElement>
|
|
240
|
+
items: r.all('li'), // MultipleRefDef<HTMLLIElement>
|
|
241
|
+
button: r.one(), // HTMLElement (un-annotated default)
|
|
242
|
+
}))
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
These flow straight through to `ctx.refs`:
|
|
246
|
+
|
|
247
|
+
```ts
|
|
248
|
+
ctx.refs.display // HTMLDivElement
|
|
249
|
+
ctx.refs.save // HTMLButtonElement
|
|
250
|
+
ctx.refs.items // HTMLLIElement[]
|
|
251
|
+
ctx.refs.button // HTMLElement (the un-annotated default)
|
|
126
252
|
```
|
|
127
253
|
|
|
254
|
+
Non-HTML refs (SVG / MathML) are out of scope: the type parameter is
|
|
255
|
+
constrained to `HTMLElement`, so cast at the use site if you need one
|
|
256
|
+
(e.g. `ctx.refs.icon as unknown as SVGSVGElement`).
|
|
257
|
+
|
|
128
258
|
### withContexts
|
|
129
259
|
|
|
130
260
|
```ts
|
|
@@ -161,7 +291,7 @@ define('my-child')
|
|
|
161
291
|
})
|
|
162
292
|
|
|
163
293
|
// Bind a DOM property to a signal expression; auto-cleaned.
|
|
164
|
-
ctx.bind(
|
|
294
|
+
ctx.bind(() => String(ctx.props.count()), el, { prop: 'textContent' })
|
|
165
295
|
|
|
166
296
|
// Add an event listener; auto-removed on disconnect.
|
|
167
297
|
ctx.on(el, 'click', handler)
|
|
@@ -244,3 +374,7 @@ renderList(container, template, {
|
|
|
244
374
|
|
|
245
375
|
Props declared with `withProps` are native alien-signals callable signals.
|
|
246
376
|
There is no `$` prefix convention — all prop names are plain identifiers.
|
|
377
|
+
|
|
378
|
+
```
|
|
379
|
+
/ed3d-plan-and-execute:execute-implementation-plan /Users/nick/code/microtags/docs/implementation-plans/2026-06-27-two-way-bind-design/ /Users/nick/code/microtags/
|
|
380
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type Attrs = Record<string, undefined | null | string | number | boolean | (string | number)[]>;
|
|
2
|
+
/**
|
|
3
|
+
* Transform an object into an HTML attributes string. The object should be
|
|
4
|
+
* like `{ attributeName: value }`.
|
|
5
|
+
*
|
|
6
|
+
* @param attrs An object for the attributes.
|
|
7
|
+
* @returns {string} A string suitable for use as HTML attributes.
|
|
8
|
+
*/
|
|
9
|
+
export declare function toAttributes(attrs: Attrs): string;
|
|
10
|
+
//# sourceMappingURL=attributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../src/attributes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAC,IAAI,GAAC,MAAM,GAAC,MAAM,GAAC,OAAO,GAAC,CAAC,MAAM,GAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAE1F;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAE,KAAK,EAAC,KAAK,GAAE,MAAM,CAgBhD"}
|
package/dist/builders.d.ts
CHANGED
|
@@ -12,11 +12,20 @@ export type PropDSL = {
|
|
|
12
12
|
export declare const propDSL: PropDSL;
|
|
13
13
|
/**
|
|
14
14
|
* DSL object passed to the withRefs callback.
|
|
15
|
-
*
|
|
15
|
+
* Call `r.one()` for a single element or `r.all()` for multiple. Pass a
|
|
16
|
+
* CSS selector to query by it, or omit it to match `[data-ref="<key>"]`.
|
|
17
|
+
*
|
|
18
|
+
* Element typing:
|
|
19
|
+
* - `r.one()` defaults to `HTMLElement`.
|
|
20
|
+
* - `r.one<T>()` sets the type and keeps the `[data-ref]` selector.
|
|
21
|
+
* - `r.one('button')` infers the type from the tag AND queries by that
|
|
22
|
+
* tag, exactly like `document.querySelector('button')`.
|
|
16
23
|
*/
|
|
17
24
|
export type RefsDSL = {
|
|
18
|
-
|
|
19
|
-
|
|
25
|
+
one<K extends keyof HTMLElementTagNameMap>(selector: K): SingleRefDef<HTMLElementTagNameMap[K]>;
|
|
26
|
+
one<T extends HTMLElement = HTMLElement>(selector?: string): SingleRefDef<T>;
|
|
27
|
+
all<K extends keyof HTMLElementTagNameMap>(selector: K): MultipleRefDef<HTMLElementTagNameMap[K]>;
|
|
28
|
+
all<T extends HTMLElement = HTMLElement>(selector?: string): MultipleRefDef<T>;
|
|
20
29
|
};
|
|
21
30
|
export declare const refsDSL: RefsDSL;
|
|
22
31
|
/**
|
|
@@ -25,6 +34,30 @@ export declare const refsDSL: RefsDSL;
|
|
|
25
34
|
* context tokens directly in the returned record.
|
|
26
35
|
*/
|
|
27
36
|
export type ContextDSL = Record<never, never>;
|
|
37
|
+
/**
|
|
38
|
+
* Maps each declared ref key to its own name as a string literal. Exposed
|
|
39
|
+
* as the static `refs` on a registered element so server-rendered templates
|
|
40
|
+
* can fill in `data-ref` values without hardcoding the names, e.g.
|
|
41
|
+
* `data-ref="${myCounter.refs.dec}"`.
|
|
42
|
+
*/
|
|
43
|
+
export type RefNames<RefDefs extends Record<string, RefDef>> = {
|
|
44
|
+
readonly [K in keyof RefDefs]: K & string;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* A registered custom element class that also exposes, as static members,
|
|
48
|
+
* the tag name it was registered under (`TAG`) and the names of its
|
|
49
|
+
* declared refs (`refs`).
|
|
50
|
+
*/
|
|
51
|
+
export type MicrotagElementClass<RefDefs extends Record<string, RefDef> = Record<never, never>> = typeof HTMLElement & {
|
|
52
|
+
/** The custom element tag name, e.g. 'my-counter'. */
|
|
53
|
+
readonly TAG: string;
|
|
54
|
+
/**
|
|
55
|
+
* The declared ref names, each mapping to its own `data-ref` string.
|
|
56
|
+
* Lets server-rendered markup reference refs by key instead of a magic
|
|
57
|
+
* string: `myCounter.refs.dec`.
|
|
58
|
+
*/
|
|
59
|
+
readonly refs: RefNames<RefDefs>;
|
|
60
|
+
};
|
|
28
61
|
/**
|
|
29
62
|
* Fluent builder that accumulates props/refs/contexts config
|
|
30
63
|
* before registering a custom element via `.setup()`.
|
|
@@ -36,10 +69,16 @@ export declare class ComponentBuilder<Props extends Record<string, PropDef> = Re
|
|
|
36
69
|
private readonly _refDefs;
|
|
37
70
|
private readonly _ctxDefs;
|
|
38
71
|
constructor(tagName: string, coercers?: Record<string, Coercer<unknown>>, observed?: string[], refDefs?: Record<string, RefDef>, ctxDefs?: Record<string, ContextToken<unknown>>);
|
|
72
|
+
/**
|
|
73
|
+
* The custom element tag name, e.g. 'my-counter'. Available at every
|
|
74
|
+
* point in the fluent chain since each builder method returns a new
|
|
75
|
+
* builder carrying the same tag name.
|
|
76
|
+
*/
|
|
77
|
+
get TAG(): string;
|
|
39
78
|
withProps<P extends Record<string, PropDef>>(fn: (p: PropDSL) => P): ComponentBuilder<P, RefDefs, CtxDefs>;
|
|
40
79
|
withRefs<R extends Record<string, RefDef>>(fn: (r: RefsDSL) => R): ComponentBuilder<Props, R, CtxDefs>;
|
|
41
80
|
withContexts<C extends Record<string, ContextToken<unknown>>>(fn: (c: ContextDSL) => C): ComponentBuilder<Props, RefDefs, C>;
|
|
42
|
-
setup(fn: (ctx: SetupContext<Props, RefsMap<RefDefs>, ContextsMap<CtxDefs>>) => void):
|
|
81
|
+
setup(fn: (ctx: SetupContext<Props, RefsMap<RefDefs>, ContextsMap<CtxDefs>>) => void): MicrotagElementClass<RefDefs>;
|
|
43
82
|
}
|
|
44
83
|
/** Create a new component builder for the given tag name. */
|
|
45
84
|
export declare function define(tagName: string): ComponentBuilder;
|
package/dist/builders.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EACR,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,OAAO,EACP,MAAM,EACN,YAAY,EACZ,cAAc,EACd,OAAO,EACP,YAAY,EACZ,WAAW,EACd,MAAM,YAAY,CAAA;AAiDnB,uDAAuD;AACvD,MAAM,MAAM,OAAO,GAAG;IAClB,MAAM,
|
|
1
|
+
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"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"}
|
package/dist/context.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/context.ts"],
|
|
4
|
-
"sourcesContent": ["import { signal } from './reactivity.js'\nimport type { ContextToken, Signal } from './types.js'\n\n// Provider storage: element -> (contextId -> Signal)\nconst providerStorage = new WeakMap<Element, Map<symbol, Signal<unknown>>>()\n\n// Pending consumers waiting for a context by id\nconst pendingCallbacks = new Map<symbol, Set<() => void>>()\n\n/**\n * Create a new context token.\n * Each token uniquely identifies a type of shared context.\n */\nexport function createContext<T> ():
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAuB;AAIvB,MAAM,kBAAkB,oBAAI,QAA+C;AAG3E,MAAM,mBAAmB,oBAAI,IAA6B;AAMnD,SAAS,
|
|
4
|
+
"sourcesContent": ["import { signal } from './reactivity.js'\nimport type { ContextToken, Signal } from './types.js'\n\n// Provider storage: element -> (contextId -> Signal)\nconst providerStorage = new WeakMap<Element, Map<symbol, Signal<unknown>>>()\n\n// Pending consumers waiting for a context by id\nconst pendingCallbacks = new Map<symbol, Set<() => void>>()\n\n/**\n * Create a new context token.\n * Each token uniquely identifies a type of shared context.\n */\nexport function createContext<T> ():ContextToken<T> {\n return { id: Symbol('microtag-context') }\n}\n\n/**\n * Provide a context value from an element to its descendants.\n * Returns a cleanup function that removes the provided value.\n */\nexport function provide<T> (\n element:Element,\n token:ContextToken<T>,\n value:T\n):() => void {\n let map = providerStorage.get(element)\n if (!map) {\n map = new Map()\n providerStorage.set(element, map)\n }\n\n const existing = map.get(token.id) as Signal<T> | undefined\n if (existing) {\n existing(value)\n } else {\n const sig = signal(value) as unknown as Signal<T>\n map.set(token.id, sig as Signal<unknown>)\n }\n\n notifyPending(token.id)\n\n return () => {\n const m = providerStorage.get(element)\n if (m) {\n m.delete(token.id)\n if (m.size === 0) providerStorage.delete(element)\n }\n }\n}\n\n/**\n * Walk up the DOM from element to find the nearest provider signal.\n * Returns the signal (not the value) so callers can subscribe to changes.\n */\nexport function resolveContextSignal<T> (\n element:Element,\n token:ContextToken<T>\n):Signal<T> | undefined {\n let current:Element | null = element.parentElement\n while (current) {\n const map = providerStorage.get(current)\n if (map && map.has(token.id)) {\n return map.get(token.id) as Signal<T>\n }\n current = current.parentElement\n }\n return undefined\n}\n\n/**\n * Register a callback to run when the given context becomes available.\n * Returns a cleanup function to unregister.\n */\nexport function onContextAvailable (\n id:symbol,\n callback:() => void\n):() => void {\n let set = pendingCallbacks.get(id)\n if (!set) {\n set = new Set()\n pendingCallbacks.set(id, set)\n }\n set.add(callback)\n return () => { pendingCallbacks.get(id)?.delete(callback) }\n}\n\nfunction notifyPending (id:symbol):void {\n const set = pendingCallbacks.get(id)\n if (set) {\n for (const cb of set) cb()\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAuB;AAIvB,MAAM,kBAAkB,oBAAI,QAA+C;AAG3E,MAAM,mBAAmB,oBAAI,IAA6B;AAMnD,SAAS,gBAAoC;AAChD,SAAO,EAAE,IAAI,uBAAO,kBAAkB,EAAE;AAC5C;AAFgB;AAQT,SAAS,QACZ,SACA,OACA,OACS;AACT,MAAI,MAAM,gBAAgB,IAAI,OAAO;AACrC,MAAI,CAAC,KAAK;AACN,UAAM,oBAAI,IAAI;AACd,oBAAgB,IAAI,SAAS,GAAG;AAAA,EACpC;AAEA,QAAM,WAAW,IAAI,IAAI,MAAM,EAAE;AACjC,MAAI,UAAU;AACV,aAAS,KAAK;AAAA,EAClB,OAAO;AACH,UAAM,UAAM,0BAAO,KAAK;AACxB,QAAI,IAAI,MAAM,IAAI,GAAsB;AAAA,EAC5C;AAEA,gBAAc,MAAM,EAAE;AAEtB,SAAO,MAAM;AACT,UAAM,IAAI,gBAAgB,IAAI,OAAO;AACrC,QAAI,GAAG;AACH,QAAE,OAAO,MAAM,EAAE;AACjB,UAAI,EAAE,SAAS,EAAG,iBAAgB,OAAO,OAAO;AAAA,IACpD;AAAA,EACJ;AACJ;AA5BgB;AAkCT,SAAS,qBACZ,SACA,OACoB;AACpB,MAAI,UAAyB,QAAQ;AACrC,SAAO,SAAS;AACZ,UAAM,MAAM,gBAAgB,IAAI,OAAO;AACvC,QAAI,OAAO,IAAI,IAAI,MAAM,EAAE,GAAG;AAC1B,aAAO,IAAI,IAAI,MAAM,EAAE;AAAA,IAC3B;AACA,cAAU,QAAQ;AAAA,EACtB;AACA,SAAO;AACX;AAbgB;AAmBT,SAAS,mBACZ,IACA,UACS;AACT,MAAI,MAAM,iBAAiB,IAAI,EAAE;AACjC,MAAI,CAAC,KAAK;AACN,UAAM,oBAAI,IAAI;AACd,qBAAiB,IAAI,IAAI,GAAG;AAAA,EAChC;AACA,MAAI,IAAI,QAAQ;AAChB,SAAO,MAAM;AAAE,qBAAiB,IAAI,EAAE,GAAG,OAAO,QAAQ;AAAA,EAAE;AAC9D;AAXgB;AAahB,SAAS,cAAe,IAAgB;AACpC,QAAM,MAAM,iBAAiB,IAAI,EAAE;AACnC,MAAI,KAAK;AACL,eAAW,MAAM,IAAK,IAAG;AAAA,EAC7B;AACJ;AALS;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAQtD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAQtD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAElD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACrB,OAAO,EAAC,OAAO,EACf,KAAK,EAAC,YAAY,CAAC,CAAC,CAAC,EACrB,KAAK,EAAC,CAAC,GACT,MAAM,IAAI,CAwBX;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAClC,OAAO,EAAC,OAAO,EACf,KAAK,EAAC,YAAY,CAAC,CAAC,CAAC,GACvB,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAUtB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAC9B,EAAE,EAAC,MAAM,EACT,QAAQ,EAAC,MAAM,IAAI,GACrB,MAAM,IAAI,CAQX"}
|
package/dist/context.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/context.ts"],
|
|
4
|
-
"sourcesContent": ["import { signal } from './reactivity.js'\nimport type { ContextToken, Signal } from './types.js'\n\n// Provider storage: element -> (contextId -> Signal)\nconst providerStorage = new WeakMap<Element, Map<symbol, Signal<unknown>>>()\n\n// Pending consumers waiting for a context by id\nconst pendingCallbacks = new Map<symbol, Set<() => void>>()\n\n/**\n * Create a new context token.\n * Each token uniquely identifies a type of shared context.\n */\nexport function createContext<T> ():
|
|
5
|
-
"mappings": ";;AAAA,SAAS,cAAc;AAIvB,MAAM,kBAAkB,oBAAI,QAA+C;AAG3E,MAAM,mBAAmB,oBAAI,IAA6B;AAMnD,SAAS,
|
|
4
|
+
"sourcesContent": ["import { signal } from './reactivity.js'\nimport type { ContextToken, Signal } from './types.js'\n\n// Provider storage: element -> (contextId -> Signal)\nconst providerStorage = new WeakMap<Element, Map<symbol, Signal<unknown>>>()\n\n// Pending consumers waiting for a context by id\nconst pendingCallbacks = new Map<symbol, Set<() => void>>()\n\n/**\n * Create a new context token.\n * Each token uniquely identifies a type of shared context.\n */\nexport function createContext<T> ():ContextToken<T> {\n return { id: Symbol('microtag-context') }\n}\n\n/**\n * Provide a context value from an element to its descendants.\n * Returns a cleanup function that removes the provided value.\n */\nexport function provide<T> (\n element:Element,\n token:ContextToken<T>,\n value:T\n):() => void {\n let map = providerStorage.get(element)\n if (!map) {\n map = new Map()\n providerStorage.set(element, map)\n }\n\n const existing = map.get(token.id) as Signal<T> | undefined\n if (existing) {\n existing(value)\n } else {\n const sig = signal(value) as unknown as Signal<T>\n map.set(token.id, sig as Signal<unknown>)\n }\n\n notifyPending(token.id)\n\n return () => {\n const m = providerStorage.get(element)\n if (m) {\n m.delete(token.id)\n if (m.size === 0) providerStorage.delete(element)\n }\n }\n}\n\n/**\n * Walk up the DOM from element to find the nearest provider signal.\n * Returns the signal (not the value) so callers can subscribe to changes.\n */\nexport function resolveContextSignal<T> (\n element:Element,\n token:ContextToken<T>\n):Signal<T> | undefined {\n let current:Element | null = element.parentElement\n while (current) {\n const map = providerStorage.get(current)\n if (map && map.has(token.id)) {\n return map.get(token.id) as Signal<T>\n }\n current = current.parentElement\n }\n return undefined\n}\n\n/**\n * Register a callback to run when the given context becomes available.\n * Returns a cleanup function to unregister.\n */\nexport function onContextAvailable (\n id:symbol,\n callback:() => void\n):() => void {\n let set = pendingCallbacks.get(id)\n if (!set) {\n set = new Set()\n pendingCallbacks.set(id, set)\n }\n set.add(callback)\n return () => { pendingCallbacks.get(id)?.delete(callback) }\n}\n\nfunction notifyPending (id:symbol):void {\n const set = pendingCallbacks.get(id)\n if (set) {\n for (const cb of set) cb()\n }\n}\n"],
|
|
5
|
+
"mappings": ";;AAAA,SAAS,cAAc;AAIvB,MAAM,kBAAkB,oBAAI,QAA+C;AAG3E,MAAM,mBAAmB,oBAAI,IAA6B;AAMnD,SAAS,gBAAoC;AAChD,SAAO,EAAE,IAAI,uBAAO,kBAAkB,EAAE;AAC5C;AAFgB;AAQT,SAAS,QACZ,SACA,OACA,OACS;AACT,MAAI,MAAM,gBAAgB,IAAI,OAAO;AACrC,MAAI,CAAC,KAAK;AACN,UAAM,oBAAI,IAAI;AACd,oBAAgB,IAAI,SAAS,GAAG;AAAA,EACpC;AAEA,QAAM,WAAW,IAAI,IAAI,MAAM,EAAE;AACjC,MAAI,UAAU;AACV,aAAS,KAAK;AAAA,EAClB,OAAO;AACH,UAAM,MAAM,OAAO,KAAK;AACxB,QAAI,IAAI,MAAM,IAAI,GAAsB;AAAA,EAC5C;AAEA,gBAAc,MAAM,EAAE;AAEtB,SAAO,MAAM;AACT,UAAM,IAAI,gBAAgB,IAAI,OAAO;AACrC,QAAI,GAAG;AACH,QAAE,OAAO,MAAM,EAAE;AACjB,UAAI,EAAE,SAAS,EAAG,iBAAgB,OAAO,OAAO;AAAA,IACpD;AAAA,EACJ;AACJ;AA5BgB;AAkCT,SAAS,qBACZ,SACA,OACoB;AACpB,MAAI,UAAyB,QAAQ;AACrC,SAAO,SAAS;AACZ,UAAM,MAAM,gBAAgB,IAAI,OAAO;AACvC,QAAI,OAAO,IAAI,IAAI,MAAM,EAAE,GAAG;AAC1B,aAAO,IAAI,IAAI,MAAM,EAAE;AAAA,IAC3B;AACA,cAAU,QAAQ;AAAA,EACtB;AACA,SAAO;AACX;AAbgB;AAmBT,SAAS,mBACZ,IACA,UACS;AACT,MAAI,MAAM,iBAAiB,IAAI,EAAE;AACjC,MAAI,CAAC,KAAK;AACN,UAAM,oBAAI,IAAI;AACd,qBAAiB,IAAI,IAAI,GAAG;AAAA,EAChC;AACA,MAAI,IAAI,QAAQ;AAChB,SAAO,MAAM;AAAE,qBAAiB,IAAI,EAAE,GAAG,OAAO,QAAQ;AAAA,EAAE;AAC9D;AAXgB;AAahB,SAAS,cAAe,IAAgB;AACpC,QAAM,MAAM,iBAAiB,IAAI,EAAE;AACnC,MAAI,KAAK;AACL,eAAW,MAAM,IAAK,IAAG;AAAA,EAC7B;AACJ;AALS;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/context.min.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../node_modules/alien-signals/esm/system.mjs", "../node_modules/alien-signals/esm/index.mjs", "../src/context.ts"],
|
|
4
|
-
"sourcesContent": ["export const ReactiveFlags = {\n None: 0,\n Mutable: 1,\n Watching: 2,\n RecursedCheck: 4,\n Recursed: 8,\n Dirty: 16,\n Pending: 32,\n};\nexport function createReactiveSystem({ update, notify, unwatched, }) {\n return {\n link,\n unlink,\n propagate,\n checkDirty,\n shallowPropagate,\n };\n function link(dep, sub, version) {\n const prevDep = sub.depsTail;\n if (prevDep !== undefined && prevDep.dep === dep) {\n return;\n }\n const nextDep = prevDep !== undefined ? prevDep.nextDep : sub.deps;\n if (nextDep !== undefined && nextDep.dep === dep) {\n nextDep.version = version;\n sub.depsTail = nextDep;\n return;\n }\n const prevSub = dep.subsTail;\n if (prevSub !== undefined && prevSub.version === version && prevSub.sub === sub) {\n return;\n }\n const newLink = sub.depsTail\n = dep.subsTail\n = {\n version,\n dep,\n sub,\n prevDep,\n nextDep,\n prevSub,\n nextSub: undefined,\n };\n if (nextDep !== undefined) {\n nextDep.prevDep = newLink;\n }\n if (prevDep !== undefined) {\n prevDep.nextDep = newLink;\n }\n else {\n sub.deps = newLink;\n }\n if (prevSub !== undefined) {\n prevSub.nextSub = newLink;\n }\n else {\n dep.subs = newLink;\n }\n }\n function unlink(link, sub = link.sub) {\n const { dep, prevDep, nextDep, nextSub, prevSub } = link;\n if (nextDep !== undefined) {\n nextDep.prevDep = prevDep;\n }\n else {\n sub.depsTail = prevDep;\n }\n if (prevDep !== undefined) {\n prevDep.nextDep = nextDep;\n }\n else {\n sub.deps = nextDep;\n }\n if (nextSub !== undefined) {\n nextSub.prevSub = prevSub;\n }\n else {\n dep.subsTail = prevSub;\n }\n if (prevSub !== undefined) {\n prevSub.nextSub = nextSub;\n }\n else if ((dep.subs = nextSub) === undefined) {\n unwatched(dep);\n }\n return nextDep;\n }\n function propagate(link, innerWrite) {\n let next = link.nextSub;\n let stack;\n top: do {\n const sub = link.sub;\n let flags = sub.flags;\n if (!(flags & (4 | 8 | 16 | 32))) {\n sub.flags = flags | 32;\n if (innerWrite) {\n sub.flags |= 8;\n }\n }\n else if (!(flags & (4 | 8))) {\n flags = 0;\n }\n else if (!(flags & 4)) {\n sub.flags = (flags & ~8) | 32;\n }\n else if (!(flags & (16 | 32)) && isValidLink(link, sub)) {\n sub.flags = flags | (8 | 32);\n flags &= 1;\n }\n else {\n flags = 0;\n }\n if (flags & 2) {\n notify(sub);\n }\n if (flags & 1) {\n const subSubs = sub.subs;\n if (subSubs !== undefined) {\n const nextSub = (link = subSubs).nextSub;\n if (nextSub !== undefined) {\n stack = { value: next, prev: stack };\n next = nextSub;\n }\n continue;\n }\n }\n if ((link = next) !== undefined) {\n next = link.nextSub;\n continue;\n }\n while (stack !== undefined) {\n link = stack.value;\n stack = stack.prev;\n if (link !== undefined) {\n next = link.nextSub;\n continue top;\n }\n }\n break;\n } while (true);\n }\n function checkDirty(link, sub) {\n let stack;\n let checkDepth = 0;\n let dirty = false;\n top: do {\n const dep = link.dep;\n const flags = dep.flags;\n if (sub.flags & 16) {\n dirty = true;\n }\n else if ((flags & (1 | 16)) === (1 | 16)) {\n const subs = dep.subs;\n if (update(dep)) {\n if (subs.nextSub !== undefined) {\n shallowPropagate(subs);\n }\n dirty = true;\n }\n }\n else if ((flags & (1 | 32)) === (1 | 32)) {\n stack = { value: link, prev: stack };\n link = dep.deps;\n sub = dep;\n ++checkDepth;\n continue;\n }\n if (!dirty) {\n const nextDep = link.nextDep;\n if (nextDep !== undefined) {\n link = nextDep;\n continue;\n }\n }\n while (checkDepth--) {\n link = stack.value;\n stack = stack.prev;\n if (dirty) {\n const subs = sub.subs;\n if (update(sub)) {\n if (subs.nextSub !== undefined) {\n shallowPropagate(subs);\n }\n sub = link.sub;\n continue;\n }\n dirty = false;\n }\n else {\n sub.flags &= ~32;\n }\n sub = link.sub;\n const nextDep = link.nextDep;\n if (nextDep !== undefined) {\n link = nextDep;\n continue top;\n }\n }\n return dirty && !!sub.flags;\n } while (true);\n }\n function shallowPropagate(link) {\n do {\n const sub = link.sub;\n const flags = sub.flags;\n if ((flags & (32 | 16)) === 32) {\n sub.flags = flags | 16;\n if ((flags & (2 | 4)) === 2) {\n notify(sub);\n }\n }\n } while ((link = link.nextSub) !== undefined);\n }\n function isValidLink(checkLink, sub) {\n let link = sub.depsTail;\n while (link !== undefined) {\n if (link === checkLink) {\n return true;\n }\n link = link.prevDep;\n }\n return false;\n }\n}\n", "import { createReactiveSystem } from './system.mjs';\nconst HasChildEffect = 64;\nlet cycle = 0;\nlet runDepth = 0;\nlet batchDepth = 0;\nlet notifyIndex = 0;\nlet queuedLength = 0;\nlet activeSub;\nconst queued = [];\nconst { link, unlink, propagate, checkDirty, shallowPropagate, } = createReactiveSystem({\n update(node) {\n if ('getter' in node) {\n return updateComputed(node);\n }\n if ('currentValue' in node) {\n return updateSignal(node);\n }\n node.flags = 1;\n return true;\n },\n notify(effect) {\n let insertIndex = queuedLength;\n let firstInsertedIndex = insertIndex;\n do {\n queued[insertIndex++] = effect;\n effect.flags &= ~2;\n effect = effect.subs?.sub;\n if (effect === undefined || !(effect.flags & 2)) {\n break;\n }\n } while (true);\n queuedLength = insertIndex;\n while (firstInsertedIndex < --insertIndex) {\n const left = queued[firstInsertedIndex];\n queued[firstInsertedIndex++] = queued[insertIndex];\n queued[insertIndex] = left;\n }\n },\n unwatched(node) {\n if ('getter' in node) {\n if (node.depsTail !== undefined) {\n node.flags = 1 | 16;\n disposeAllDepsInReverse(node);\n }\n }\n else if ('currentValue' in node) {\n }\n else if ('fn' in node) {\n effectOper.call(node);\n }\n else {\n effectScopeOper.call(node);\n }\n },\n});\nexport function getActiveSub() {\n return activeSub;\n}\nexport function setActiveSub(sub) {\n const prevSub = activeSub;\n activeSub = sub;\n return prevSub;\n}\nexport function getBatchDepth() {\n return batchDepth;\n}\nexport function startBatch() {\n ++batchDepth;\n}\nexport function endBatch() {\n if (!--batchDepth) {\n flush();\n }\n}\nexport function isSignal(fn) {\n return fn.name === 'bound ' + signalOper.name;\n}\nexport function isComputed(fn) {\n return fn.name === 'bound ' + computedOper.name;\n}\nexport function isEffect(fn) {\n return fn.name === 'bound ' + effectOper.name;\n}\nexport function isEffectScope(fn) {\n return fn.name === 'bound ' + effectScopeOper.name;\n}\nexport function signal(initialValue) {\n return signalOper.bind({\n currentValue: initialValue,\n pendingValue: initialValue,\n subs: undefined,\n subsTail: undefined,\n flags: 1,\n });\n}\nexport function computed(getter) {\n return computedOper.bind({\n value: undefined,\n subs: undefined,\n subsTail: undefined,\n deps: undefined,\n depsTail: undefined,\n flags: 0,\n getter: getter,\n });\n}\nexport function effect(fn) {\n const e = {\n fn,\n cleanup: undefined,\n subs: undefined,\n subsTail: undefined,\n deps: undefined,\n depsTail: undefined,\n flags: 2 | 4,\n };\n const prevSub = setActiveSub(e);\n if (prevSub !== undefined) {\n link(e, prevSub, 0);\n prevSub.flags |= HasChildEffect;\n }\n try {\n ++runDepth;\n e.cleanup = e.fn();\n }\n finally {\n --runDepth;\n activeSub = prevSub;\n e.flags &= ~4;\n }\n return effectOper.bind(e);\n}\nexport function effectScope(fn) {\n const e = {\n deps: undefined,\n depsTail: undefined,\n subs: undefined,\n subsTail: undefined,\n flags: 1,\n };\n const prevSub = setActiveSub(e);\n if (prevSub !== undefined) {\n link(e, prevSub, 0);\n prevSub.flags |= HasChildEffect;\n }\n try {\n fn();\n }\n finally {\n activeSub = prevSub;\n }\n return effectScopeOper.bind(e);\n}\nexport function trigger(fn) {\n const sub = {\n deps: undefined,\n depsTail: undefined,\n flags: 2,\n };\n const prevSub = setActiveSub(sub);\n try {\n fn();\n }\n finally {\n activeSub = prevSub;\n sub.flags = 0;\n let link = sub.deps;\n while (link !== undefined) {\n const dep = link.dep;\n link = unlink(link, sub);\n const subs = dep.subs;\n if (subs !== undefined) {\n propagate(subs, !!runDepth);\n shallowPropagate(subs);\n }\n }\n if (!batchDepth) {\n flush();\n }\n }\n}\nfunction updateComputed(c) {\n if (c.flags & HasChildEffect) {\n let link = c.depsTail;\n while (link !== undefined) {\n const prev = link.prevDep;\n const dep = link.dep;\n if (!('getter' in dep) && !('currentValue' in dep)) {\n unlink(link, c);\n }\n link = prev;\n }\n }\n c.depsTail = undefined;\n c.flags = 1 | 4;\n const prevSub = setActiveSub(c);\n try {\n ++cycle;\n const oldValue = c.value;\n return oldValue !== (c.value = c.getter(oldValue));\n }\n finally {\n activeSub = prevSub;\n c.flags &= ~4;\n purgeDeps(c);\n }\n}\nfunction updateSignal(s) {\n s.flags = 1;\n return s.currentValue !== (s.currentValue = s.pendingValue);\n}\nfunction run(e) {\n const flags = e.flags;\n if (flags & 16\n || (flags & 32\n && checkDirty(e.deps, e))) {\n if (flags & HasChildEffect) {\n let link = e.depsTail;\n while (link !== undefined) {\n const prev = link.prevDep;\n const dep = link.dep;\n if (!('getter' in dep) && !('currentValue' in dep)) {\n unlink(link, e);\n }\n link = prev;\n }\n }\n if (e.cleanup) {\n runCleanup(e);\n if (!e.flags) {\n return;\n }\n }\n e.depsTail = undefined;\n e.flags = 2 | 4;\n const prevSub = setActiveSub(e);\n try {\n ++cycle;\n ++runDepth;\n e.cleanup = e.fn();\n }\n finally {\n --runDepth;\n activeSub = prevSub;\n e.flags &= ~4;\n purgeDeps(e);\n }\n }\n else if (e.deps !== undefined) {\n e.flags = 2 | (flags & HasChildEffect);\n }\n}\nfunction flush() {\n try {\n while (notifyIndex < queuedLength) {\n const effect = queued[notifyIndex];\n queued[notifyIndex++] = undefined;\n run(effect);\n }\n }\n finally {\n while (notifyIndex < queuedLength) {\n const effect = queued[notifyIndex];\n queued[notifyIndex++] = undefined;\n effect.flags |= 2 | 8;\n }\n notifyIndex = 0;\n queuedLength = 0;\n }\n}\nfunction computedOper() {\n const flags = this.flags;\n if (flags & 16\n || (flags & 32\n && (checkDirty(this.deps, this)\n || (this.flags = flags & ~32, false)))) {\n if (updateComputed(this)) {\n const subs = this.subs;\n if (subs !== undefined) {\n shallowPropagate(subs);\n }\n }\n }\n else if (!flags) {\n this.flags = 1 | 4;\n const prevSub = setActiveSub(this);\n try {\n this.value = this.getter();\n }\n finally {\n activeSub = prevSub;\n this.flags &= ~4;\n }\n }\n const sub = activeSub;\n if (sub !== undefined) {\n link(this, sub, cycle);\n }\n return this.value;\n}\nfunction signalOper(...value) {\n if (value.length) {\n if (this.pendingValue !== (this.pendingValue = value[0])) {\n this.flags = 1 | 16;\n const subs = this.subs;\n if (subs !== undefined) {\n propagate(subs, !!runDepth);\n if (!batchDepth) {\n flush();\n }\n }\n }\n }\n else {\n if (this.flags & 16) {\n if (updateSignal(this)) {\n const subs = this.subs;\n if (subs !== undefined) {\n shallowPropagate(subs);\n }\n }\n }\n const sub = activeSub;\n if (sub !== undefined) {\n link(this, sub, cycle);\n }\n return this.currentValue;\n }\n}\nfunction runCleanup(e) {\n const cleanup = e.cleanup;\n e.cleanup = undefined;\n const prevSub = activeSub;\n activeSub = undefined;\n try {\n cleanup();\n }\n finally {\n activeSub = prevSub;\n }\n}\nfunction effectOper() {\n effectScopeOper.call(this);\n if (this.cleanup) {\n runCleanup(this);\n }\n}\nfunction effectScopeOper() {\n this.flags = 0;\n disposeAllDepsInReverse(this);\n const sub = this.subs;\n if (sub !== undefined) {\n unlink(sub);\n }\n}\nfunction disposeAllDepsInReverse(sub) {\n let link = sub.depsTail;\n while (link !== undefined) {\n const prev = link.prevDep;\n unlink(link, sub);\n link = prev;\n }\n}\nfunction purgeDeps(sub) {\n const depsTail = sub.depsTail;\n let dep = depsTail !== undefined ? depsTail.nextDep : sub.deps;\n while (dep !== undefined) {\n dep = unlink(dep, sub);\n }\n}\n", "import { signal } from './reactivity.js'\nimport type { ContextToken, Signal } from './types.js'\n\n// Provider storage: element -> (contextId -> Signal)\nconst providerStorage = new WeakMap<Element, Map<symbol, Signal<unknown>>>()\n\n// Pending consumers waiting for a context by id\nconst pendingCallbacks = new Map<symbol, Set<() => void>>()\n\n/**\n * Create a new context token.\n * Each token uniquely identifies a type of shared context.\n */\nexport function createContext<T> (): ContextToken<T> {\n return { id: Symbol('microtag-context') }\n}\n\n/**\n * Provide a context value from an element to its descendants.\n * Returns a cleanup function that removes the provided value.\n */\nexport function provide<T> (\n element: Element,\n token: ContextToken<T>,\n value: T\n): () => void {\n let map = providerStorage.get(element)\n if (!map) {\n map = new Map()\n providerStorage.set(element, map)\n }\n\n const existing = map.get(token.id) as Signal<T> | undefined\n if (existing) {\n existing(value)\n } else {\n const sig = signal(value) as unknown as Signal<T>\n map.set(token.id, sig as Signal<unknown>)\n }\n\n notifyPending(token.id)\n\n return () => {\n const m = providerStorage.get(element)\n if (m) {\n m.delete(token.id)\n if (m.size === 0) providerStorage.delete(element)\n }\n }\n}\n\n/**\n * Walk up the DOM from element to find the nearest provider signal.\n * Returns the signal (not the value) so callers can subscribe to changes.\n */\nexport function resolveContextSignal<T> (\n element: Element,\n token: ContextToken<T>\n): Signal<T> | undefined {\n let current: Element | null = element.parentElement\n while (current) {\n const map = providerStorage.get(current)\n if (map && map.has(token.id)) {\n return map.get(token.id) as Signal<T>\n }\n current = current.parentElement\n }\n return undefined\n}\n\n/**\n * Register a callback to run when the given context becomes available.\n * Returns a cleanup function to unregister.\n */\nexport function onContextAvailable (\n id: symbol,\n callback: () => void\n): () => void {\n let set = pendingCallbacks.get(id)\n if (!set) {\n set = new Set()\n pendingCallbacks.set(id, set)\n }\n set.add(callback)\n return () => { pendingCallbacks.get(id)?.delete(callback) }\n}\n\nfunction notifyPending (id: symbol): void {\n const set = pendingCallbacks.get(id)\n if (set) {\n for (const cb of set) cb()\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["export const ReactiveFlags = {\n None: 0,\n Mutable: 1,\n Watching: 2,\n RecursedCheck: 4,\n Recursed: 8,\n Dirty: 16,\n Pending: 32,\n};\nexport function createReactiveSystem({ update, notify, unwatched, }) {\n return {\n link,\n unlink,\n propagate,\n checkDirty,\n shallowPropagate,\n };\n function link(dep, sub, version) {\n const prevDep = sub.depsTail;\n if (prevDep !== undefined && prevDep.dep === dep) {\n return;\n }\n const nextDep = prevDep !== undefined ? prevDep.nextDep : sub.deps;\n if (nextDep !== undefined && nextDep.dep === dep) {\n nextDep.version = version;\n sub.depsTail = nextDep;\n return;\n }\n const prevSub = dep.subsTail;\n if (prevSub !== undefined && prevSub.version === version && prevSub.sub === sub) {\n return;\n }\n const newLink = sub.depsTail\n = dep.subsTail\n = {\n version,\n dep,\n sub,\n prevDep,\n nextDep,\n prevSub,\n nextSub: undefined,\n };\n if (nextDep !== undefined) {\n nextDep.prevDep = newLink;\n }\n if (prevDep !== undefined) {\n prevDep.nextDep = newLink;\n }\n else {\n sub.deps = newLink;\n }\n if (prevSub !== undefined) {\n prevSub.nextSub = newLink;\n }\n else {\n dep.subs = newLink;\n }\n }\n function unlink(link, sub = link.sub) {\n const { dep, prevDep, nextDep, nextSub, prevSub } = link;\n if (nextDep !== undefined) {\n nextDep.prevDep = prevDep;\n }\n else {\n sub.depsTail = prevDep;\n }\n if (prevDep !== undefined) {\n prevDep.nextDep = nextDep;\n }\n else {\n sub.deps = nextDep;\n }\n if (nextSub !== undefined) {\n nextSub.prevSub = prevSub;\n }\n else {\n dep.subsTail = prevSub;\n }\n if (prevSub !== undefined) {\n prevSub.nextSub = nextSub;\n }\n else if ((dep.subs = nextSub) === undefined) {\n unwatched(dep);\n }\n return nextDep;\n }\n function propagate(link, innerWrite) {\n let next = link.nextSub;\n let stack;\n top: do {\n const sub = link.sub;\n let flags = sub.flags;\n if (!(flags & (4 | 8 | 16 | 32))) {\n sub.flags = flags | 32;\n if (innerWrite) {\n sub.flags |= 8;\n }\n }\n else if (!(flags & (4 | 8))) {\n flags = 0;\n }\n else if (!(flags & 4)) {\n sub.flags = (flags & ~8) | 32;\n }\n else if (!(flags & (16 | 32)) && isValidLink(link, sub)) {\n sub.flags = flags | (8 | 32);\n flags &= 1;\n }\n else {\n flags = 0;\n }\n if (flags & 2) {\n notify(sub);\n }\n if (flags & 1) {\n const subSubs = sub.subs;\n if (subSubs !== undefined) {\n const nextSub = (link = subSubs).nextSub;\n if (nextSub !== undefined) {\n stack = { value: next, prev: stack };\n next = nextSub;\n }\n continue;\n }\n }\n if ((link = next) !== undefined) {\n next = link.nextSub;\n continue;\n }\n while (stack !== undefined) {\n link = stack.value;\n stack = stack.prev;\n if (link !== undefined) {\n next = link.nextSub;\n continue top;\n }\n }\n break;\n } while (true);\n }\n function checkDirty(link, sub) {\n let stack;\n let checkDepth = 0;\n let dirty = false;\n top: do {\n const dep = link.dep;\n const flags = dep.flags;\n if (sub.flags & 16) {\n dirty = true;\n }\n else if ((flags & (1 | 16)) === (1 | 16)) {\n const subs = dep.subs;\n if (update(dep)) {\n if (subs.nextSub !== undefined) {\n shallowPropagate(subs);\n }\n dirty = true;\n }\n }\n else if ((flags & (1 | 32)) === (1 | 32)) {\n stack = { value: link, prev: stack };\n link = dep.deps;\n sub = dep;\n ++checkDepth;\n continue;\n }\n if (!dirty) {\n const nextDep = link.nextDep;\n if (nextDep !== undefined) {\n link = nextDep;\n continue;\n }\n }\n while (checkDepth--) {\n link = stack.value;\n stack = stack.prev;\n if (dirty) {\n const subs = sub.subs;\n if (update(sub)) {\n if (subs.nextSub !== undefined) {\n shallowPropagate(subs);\n }\n sub = link.sub;\n continue;\n }\n dirty = false;\n }\n else {\n sub.flags &= ~32;\n }\n sub = link.sub;\n const nextDep = link.nextDep;\n if (nextDep !== undefined) {\n link = nextDep;\n continue top;\n }\n }\n return dirty && !!sub.flags;\n } while (true);\n }\n function shallowPropagate(link) {\n do {\n const sub = link.sub;\n const flags = sub.flags;\n if ((flags & (32 | 16)) === 32) {\n sub.flags = flags | 16;\n if ((flags & (2 | 4)) === 2) {\n notify(sub);\n }\n }\n } while ((link = link.nextSub) !== undefined);\n }\n function isValidLink(checkLink, sub) {\n let link = sub.depsTail;\n while (link !== undefined) {\n if (link === checkLink) {\n return true;\n }\n link = link.prevDep;\n }\n return false;\n }\n}\n", "import { createReactiveSystem } from './system.mjs';\nconst HasChildEffect = 64;\nlet cycle = 0;\nlet runDepth = 0;\nlet batchDepth = 0;\nlet notifyIndex = 0;\nlet queuedLength = 0;\nlet activeSub;\nconst queued = [];\nconst { link, unlink, propagate, checkDirty, shallowPropagate, } = createReactiveSystem({\n update(node) {\n if ('getter' in node) {\n return updateComputed(node);\n }\n if ('currentValue' in node) {\n return updateSignal(node);\n }\n node.flags = 1;\n return true;\n },\n notify(effect) {\n let insertIndex = queuedLength;\n let firstInsertedIndex = insertIndex;\n do {\n queued[insertIndex++] = effect;\n effect.flags &= ~2;\n effect = effect.subs?.sub;\n if (effect === undefined || !(effect.flags & 2)) {\n break;\n }\n } while (true);\n queuedLength = insertIndex;\n while (firstInsertedIndex < --insertIndex) {\n const left = queued[firstInsertedIndex];\n queued[firstInsertedIndex++] = queued[insertIndex];\n queued[insertIndex] = left;\n }\n },\n unwatched(node) {\n if ('getter' in node) {\n if (node.depsTail !== undefined) {\n node.flags = 1 | 16;\n disposeAllDepsInReverse(node);\n }\n }\n else if ('currentValue' in node) {\n }\n else if ('fn' in node) {\n effectOper.call(node);\n }\n else {\n effectScopeOper.call(node);\n }\n },\n});\nexport function getActiveSub() {\n return activeSub;\n}\nexport function setActiveSub(sub) {\n const prevSub = activeSub;\n activeSub = sub;\n return prevSub;\n}\nexport function getBatchDepth() {\n return batchDepth;\n}\nexport function startBatch() {\n ++batchDepth;\n}\nexport function endBatch() {\n if (!--batchDepth) {\n flush();\n }\n}\nexport function isSignal(fn) {\n return fn.name === 'bound ' + signalOper.name;\n}\nexport function isComputed(fn) {\n return fn.name === 'bound ' + computedOper.name;\n}\nexport function isEffect(fn) {\n return fn.name === 'bound ' + effectOper.name;\n}\nexport function isEffectScope(fn) {\n return fn.name === 'bound ' + effectScopeOper.name;\n}\nexport function signal(initialValue) {\n return signalOper.bind({\n currentValue: initialValue,\n pendingValue: initialValue,\n subs: undefined,\n subsTail: undefined,\n flags: 1,\n });\n}\nexport function computed(getter) {\n return computedOper.bind({\n value: undefined,\n subs: undefined,\n subsTail: undefined,\n deps: undefined,\n depsTail: undefined,\n flags: 0,\n getter: getter,\n });\n}\nexport function effect(fn) {\n const e = {\n fn,\n cleanup: undefined,\n subs: undefined,\n subsTail: undefined,\n deps: undefined,\n depsTail: undefined,\n flags: 2 | 4,\n };\n const prevSub = setActiveSub(e);\n if (prevSub !== undefined) {\n link(e, prevSub, 0);\n prevSub.flags |= HasChildEffect;\n }\n try {\n ++runDepth;\n e.cleanup = e.fn();\n }\n finally {\n --runDepth;\n activeSub = prevSub;\n e.flags &= ~4;\n }\n return effectOper.bind(e);\n}\nexport function effectScope(fn) {\n const e = {\n deps: undefined,\n depsTail: undefined,\n subs: undefined,\n subsTail: undefined,\n flags: 1,\n };\n const prevSub = setActiveSub(e);\n if (prevSub !== undefined) {\n link(e, prevSub, 0);\n prevSub.flags |= HasChildEffect;\n }\n try {\n fn();\n }\n finally {\n activeSub = prevSub;\n }\n return effectScopeOper.bind(e);\n}\nexport function trigger(fn) {\n const sub = {\n deps: undefined,\n depsTail: undefined,\n flags: 2,\n };\n const prevSub = setActiveSub(sub);\n try {\n fn();\n }\n finally {\n activeSub = prevSub;\n sub.flags = 0;\n let link = sub.deps;\n while (link !== undefined) {\n const dep = link.dep;\n link = unlink(link, sub);\n const subs = dep.subs;\n if (subs !== undefined) {\n propagate(subs, !!runDepth);\n shallowPropagate(subs);\n }\n }\n if (!batchDepth) {\n flush();\n }\n }\n}\nfunction updateComputed(c) {\n if (c.flags & HasChildEffect) {\n let link = c.depsTail;\n while (link !== undefined) {\n const prev = link.prevDep;\n const dep = link.dep;\n if (!('getter' in dep) && !('currentValue' in dep)) {\n unlink(link, c);\n }\n link = prev;\n }\n }\n c.depsTail = undefined;\n c.flags = 1 | 4;\n const prevSub = setActiveSub(c);\n try {\n ++cycle;\n const oldValue = c.value;\n return oldValue !== (c.value = c.getter(oldValue));\n }\n finally {\n activeSub = prevSub;\n c.flags &= ~4;\n purgeDeps(c);\n }\n}\nfunction updateSignal(s) {\n s.flags = 1;\n return s.currentValue !== (s.currentValue = s.pendingValue);\n}\nfunction run(e) {\n const flags = e.flags;\n if (flags & 16\n || (flags & 32\n && checkDirty(e.deps, e))) {\n if (flags & HasChildEffect) {\n let link = e.depsTail;\n while (link !== undefined) {\n const prev = link.prevDep;\n const dep = link.dep;\n if (!('getter' in dep) && !('currentValue' in dep)) {\n unlink(link, e);\n }\n link = prev;\n }\n }\n if (e.cleanup) {\n runCleanup(e);\n if (!e.flags) {\n return;\n }\n }\n e.depsTail = undefined;\n e.flags = 2 | 4;\n const prevSub = setActiveSub(e);\n try {\n ++cycle;\n ++runDepth;\n e.cleanup = e.fn();\n }\n finally {\n --runDepth;\n activeSub = prevSub;\n e.flags &= ~4;\n purgeDeps(e);\n }\n }\n else if (e.deps !== undefined) {\n e.flags = 2 | (flags & HasChildEffect);\n }\n}\nfunction flush() {\n try {\n while (notifyIndex < queuedLength) {\n const effect = queued[notifyIndex];\n queued[notifyIndex++] = undefined;\n run(effect);\n }\n }\n finally {\n while (notifyIndex < queuedLength) {\n const effect = queued[notifyIndex];\n queued[notifyIndex++] = undefined;\n effect.flags |= 2 | 8;\n }\n notifyIndex = 0;\n queuedLength = 0;\n }\n}\nfunction computedOper() {\n const flags = this.flags;\n if (flags & 16\n || (flags & 32\n && (checkDirty(this.deps, this)\n || (this.flags = flags & ~32, false)))) {\n if (updateComputed(this)) {\n const subs = this.subs;\n if (subs !== undefined) {\n shallowPropagate(subs);\n }\n }\n }\n else if (!flags) {\n this.flags = 1 | 4;\n const prevSub = setActiveSub(this);\n try {\n this.value = this.getter();\n }\n finally {\n activeSub = prevSub;\n this.flags &= ~4;\n }\n }\n const sub = activeSub;\n if (sub !== undefined) {\n link(this, sub, cycle);\n }\n return this.value;\n}\nfunction signalOper(...value) {\n if (value.length) {\n if (this.pendingValue !== (this.pendingValue = value[0])) {\n this.flags = 1 | 16;\n const subs = this.subs;\n if (subs !== undefined) {\n propagate(subs, !!runDepth);\n if (!batchDepth) {\n flush();\n }\n }\n }\n }\n else {\n if (this.flags & 16) {\n if (updateSignal(this)) {\n const subs = this.subs;\n if (subs !== undefined) {\n shallowPropagate(subs);\n }\n }\n }\n const sub = activeSub;\n if (sub !== undefined) {\n link(this, sub, cycle);\n }\n return this.currentValue;\n }\n}\nfunction runCleanup(e) {\n const cleanup = e.cleanup;\n e.cleanup = undefined;\n const prevSub = activeSub;\n activeSub = undefined;\n try {\n cleanup();\n }\n finally {\n activeSub = prevSub;\n }\n}\nfunction effectOper() {\n effectScopeOper.call(this);\n if (this.cleanup) {\n runCleanup(this);\n }\n}\nfunction effectScopeOper() {\n this.flags = 0;\n disposeAllDepsInReverse(this);\n const sub = this.subs;\n if (sub !== undefined) {\n unlink(sub);\n }\n}\nfunction disposeAllDepsInReverse(sub) {\n let link = sub.depsTail;\n while (link !== undefined) {\n const prev = link.prevDep;\n unlink(link, sub);\n link = prev;\n }\n}\nfunction purgeDeps(sub) {\n const depsTail = sub.depsTail;\n let dep = depsTail !== undefined ? depsTail.nextDep : sub.deps;\n while (dep !== undefined) {\n dep = unlink(dep, sub);\n }\n}\n", "import { signal } from './reactivity.js'\nimport type { ContextToken, Signal } from './types.js'\n\n// Provider storage: element -> (contextId -> Signal)\nconst providerStorage = new WeakMap<Element, Map<symbol, Signal<unknown>>>()\n\n// Pending consumers waiting for a context by id\nconst pendingCallbacks = new Map<symbol, Set<() => void>>()\n\n/**\n * Create a new context token.\n * Each token uniquely identifies a type of shared context.\n */\nexport function createContext<T> ():ContextToken<T> {\n return { id: Symbol('microtag-context') }\n}\n\n/**\n * Provide a context value from an element to its descendants.\n * Returns a cleanup function that removes the provided value.\n */\nexport function provide<T> (\n element:Element,\n token:ContextToken<T>,\n value:T\n):() => void {\n let map = providerStorage.get(element)\n if (!map) {\n map = new Map()\n providerStorage.set(element, map)\n }\n\n const existing = map.get(token.id) as Signal<T> | undefined\n if (existing) {\n existing(value)\n } else {\n const sig = signal(value) as unknown as Signal<T>\n map.set(token.id, sig as Signal<unknown>)\n }\n\n notifyPending(token.id)\n\n return () => {\n const m = providerStorage.get(element)\n if (m) {\n m.delete(token.id)\n if (m.size === 0) providerStorage.delete(element)\n }\n }\n}\n\n/**\n * Walk up the DOM from element to find the nearest provider signal.\n * Returns the signal (not the value) so callers can subscribe to changes.\n */\nexport function resolveContextSignal<T> (\n element:Element,\n token:ContextToken<T>\n):Signal<T> | undefined {\n let current:Element | null = element.parentElement\n while (current) {\n const map = providerStorage.get(current)\n if (map && map.has(token.id)) {\n return map.get(token.id) as Signal<T>\n }\n current = current.parentElement\n }\n return undefined\n}\n\n/**\n * Register a callback to run when the given context becomes available.\n * Returns a cleanup function to unregister.\n */\nexport function onContextAvailable (\n id:symbol,\n callback:() => void\n):() => void {\n let set = pendingCallbacks.get(id)\n if (!set) {\n set = new Set()\n pendingCallbacks.set(id, set)\n }\n set.add(callback)\n return () => { pendingCallbacks.get(id)?.delete(callback) }\n}\n\nfunction notifyPending (id:symbol):void {\n const set = pendingCallbacks.get(id)\n if (set) {\n for (const cb of set) cb()\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["createReactiveSystem", "update", "notify", "unwatched", "link", "unlink", "propagate", "checkDirty", "shallowPropagate", "dep", "sub", "version", "prevDep", "nextDep", "prevSub", "newLink", "nextSub", "innerWrite", "next", "stack", "top", "flags", "isValidLink", "subSubs", "checkDepth", "dirty", "subs", "checkLink", "__name", "HasChildEffect", "cycle", "runDepth", "batchDepth", "notifyIndex", "queuedLength", "activeSub", "queued", "link", "unlink", "propagate", "checkDirty", "shallowPropagate", "createReactiveSystem", "node", "updateComputed", "updateSignal", "effect", "insertIndex", "firstInsertedIndex", "left", "disposeAllDepsInReverse", "effectOper", "effectScopeOper", "setActiveSub", "sub", "prevSub", "activeSub", "__name", "signal", "initialValue", "signalOper", "__name", "updateComputed", "c", "HasChildEffect", "link", "prev", "dep", "unlink", "prevSub", "setActiveSub", "cycle", "oldValue", "activeSub", "purgeDeps", "__name", "updateSignal", "s", "run", "flags", "checkDirty", "runCleanup", "runDepth", "flush", "notifyIndex", "queuedLength", "effect", "queued", "signalOper", "value", "subs", "propagate", "runDepth", "batchDepth", "flush", "updateSignal", "shallowPropagate", "sub", "activeSub", "link", "cycle", "__name", "runCleanup", "cleanup", "prevSub", "effectOper", "effectScopeOper", "disposeAllDepsInReverse", "unlink", "prev", "purgeDeps", "depsTail", "dep", "providerStorage", "pendingCallbacks", "createContext", "__name", "provide", "element", "token", "value", "map", "existing", "sig", "signal", "notifyPending", "m", "resolveContextSignal", "current", "onContextAvailable", "id", "callback", "set", "cb"]
|
|
7
7
|
}
|
package/dist/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGR,YAAY,EAEZ,OAAO,EACP,YAAY,EACZ,MAAM,EACT,MAAM,YAAY,CAAA;AAEnB;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGR,YAAY,EAEZ,OAAO,EACP,YAAY,EACZ,MAAM,EACT,MAAM,YAAY,CAAA;AAEnB;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;AAY3D,yCAAyC;AACzC,MAAM,WAAW,aAAa,CAAC,KAAK,SAAS,YAAY,GAAG,YAAY;IACpE,kDAAkD;IAClD,KAAK,EAAC,KAAK,CAAA;IACX,qDAAqD;IACrD,iBAAiB,EAAC,MAAM,EAAE,CAAA;IAC1B,qCAAqC;IACrC,IAAI,CAAC,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,oCAAoC;IACpC,QAAQ,CAAC,EAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;IAC/C,sDAAsD;IACtD,KAAK,EAAC,CAAC,GAAG,EAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,CAAA;CACpD;AAiCD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,SAAS,YAAY,GAAG,YAAY,EAC7D,MAAM,EAAC,aAAa,CAAC,KAAK,CAAC,GAC7B,OAAO,WAAW,CAuHnB"}
|