balises 0.2.1 → 0.4.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.
- package/README.md +257 -46
- package/dist/balises.esm.js +143 -111
- package/dist/balises.esm.js.map +1 -1
- package/dist/balises.iife.js +143 -114
- package/dist/balises.iife.js.map +1 -1
- package/dist/balises.iife.min.js +1 -2
- package/dist/balises.iife.min.js.map +1 -1
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/parser.d.ts +2 -3
- package/dist/esm/parser.d.ts.map +1 -1
- package/dist/esm/parser.js +17 -18
- package/dist/esm/parser.js.map +1 -1
- package/dist/esm/signals/computed.d.ts.map +1 -1
- package/dist/esm/signals/computed.js +12 -22
- package/dist/esm/signals/computed.js.map +1 -1
- package/dist/esm/signals/context.d.ts +24 -1
- package/dist/esm/signals/context.d.ts.map +1 -1
- package/dist/esm/signals/context.js +52 -2
- package/dist/esm/signals/context.js.map +1 -1
- package/dist/esm/signals/effect.d.ts.map +1 -1
- package/dist/esm/signals/effect.js +1 -0
- package/dist/esm/signals/effect.js.map +1 -1
- package/dist/esm/signals/index.d.ts +2 -2
- package/dist/esm/signals/index.d.ts.map +1 -1
- package/dist/esm/signals/index.js +2 -2
- package/dist/esm/signals/index.js.map +1 -1
- package/dist/esm/signals/store.d.ts.map +1 -1
- package/dist/esm/signals/store.js +3 -4
- package/dist/esm/signals/store.js.map +1 -1
- package/dist/esm/template.d.ts.map +1 -1
- package/dist/esm/template.js +116 -107
- package/dist/esm/template.js.map +1 -1
- package/package.json +17 -6
|
@@ -35,13 +35,63 @@ export function isBatching() {
|
|
|
35
35
|
return batchDepth > 0;
|
|
36
36
|
}
|
|
37
37
|
/** Add a subscriber to the batch queue */
|
|
38
|
-
export function
|
|
38
|
+
export function enqueueBatchOne(sub) {
|
|
39
39
|
batchQueue.add(sub);
|
|
40
40
|
}
|
|
41
41
|
/** Add multiple subscribers to the batch queue */
|
|
42
42
|
export function enqueueBatchAll(subs) {
|
|
43
|
-
for (let i = 0; i < subs.length; i++)
|
|
43
|
+
for (let i = 0; i < subs.length; i++)
|
|
44
44
|
batchQueue.add(subs[i]);
|
|
45
|
+
}
|
|
46
|
+
/** Scope disposal: collect all disposers in a scope */
|
|
47
|
+
let disposalStack = null;
|
|
48
|
+
/**
|
|
49
|
+
* Create a disposal scope that collects all subscriptions and computeds created within.
|
|
50
|
+
* Returns the result of the function and a dispose function that cleans up all resources.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```ts
|
|
54
|
+
* const [result, dispose] = scope(() => {
|
|
55
|
+
* const count = signal(0);
|
|
56
|
+
* const doubled = computed(() => count.value * 2);
|
|
57
|
+
* effect(() => console.log(doubled.value));
|
|
58
|
+
* return { count, doubled };
|
|
59
|
+
* });
|
|
60
|
+
*
|
|
61
|
+
* // Later: clean up all subscriptions and computeds
|
|
62
|
+
* dispose();
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export function scope(fn) {
|
|
66
|
+
const disposers = [];
|
|
67
|
+
// Push new disposal context
|
|
68
|
+
if (!disposalStack)
|
|
69
|
+
disposalStack = [];
|
|
70
|
+
disposalStack.push(disposers);
|
|
71
|
+
try {
|
|
72
|
+
const result = fn();
|
|
73
|
+
return [
|
|
74
|
+
result,
|
|
75
|
+
() => {
|
|
76
|
+
for (let i = disposers.length - 1; i >= 0; i--) {
|
|
77
|
+
disposers[i]();
|
|
78
|
+
}
|
|
79
|
+
disposers.length = 0;
|
|
80
|
+
},
|
|
81
|
+
];
|
|
45
82
|
}
|
|
83
|
+
finally {
|
|
84
|
+
// Pop disposal context
|
|
85
|
+
disposalStack.pop();
|
|
86
|
+
if (disposalStack.length === 0)
|
|
87
|
+
disposalStack = null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Register a disposer in the current scope (if any).
|
|
92
|
+
* This is called internally by computed/effect when they create cleanup functions.
|
|
93
|
+
*/
|
|
94
|
+
export function registerDisposer(dispose) {
|
|
95
|
+
disposalStack?.at(-1)?.push(dispose);
|
|
46
96
|
}
|
|
47
97
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/signals/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,iEAAiE;AACjE,MAAM,CAAC,IAAI,OAAO,GAA6B,IAAI,CAAC;AAEpD,wCAAwC;AACxC,MAAM,UAAU,UAAU,CAAC,CAA2B;IACpD,OAAO,GAAG,CAAC,CAAC;AACd,CAAC;AAED,qEAAqE;AACrE,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,UAAU,GAA2B,IAAI,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAI,EAAW;IAClC,UAAU,EAAE,CAAC;IACb,IAAI,UAAU,KAAK,CAAC;QAAE,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,EAAE,UAAU,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,UAAW,CAAC;YACtB,UAAU,GAAG,IAAI,CAAC;YAClB,KAAK,MAAM,GAAG,IAAI,CAAC;gBAAE,GAAG,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,UAAU;IACxB,OAAO,UAAU,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/signals/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,iEAAiE;AACjE,MAAM,CAAC,IAAI,OAAO,GAA6B,IAAI,CAAC;AAEpD,wCAAwC;AACxC,MAAM,UAAU,UAAU,CAAC,CAA2B;IACpD,OAAO,GAAG,CAAC,CAAC;AACd,CAAC;AAED,qEAAqE;AACrE,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,UAAU,GAA2B,IAAI,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAI,EAAW;IAClC,UAAU,EAAE,CAAC;IACb,IAAI,UAAU,KAAK,CAAC;QAAE,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,EAAE,UAAU,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,UAAW,CAAC;YACtB,UAAU,GAAG,IAAI,CAAC;YAClB,KAAK,MAAM,GAAG,IAAI,CAAC;gBAAE,GAAG,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,UAAU;IACxB,OAAO,UAAU,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,eAAe,CAAC,GAAe;IAC7C,UAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,UAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;AAClE,CAAC;AAED,uDAAuD;AACvD,IAAI,aAAa,GAAoC,IAAI,CAAC;AAE1D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,KAAK,CAAI,EAAW;IAClC,MAAM,SAAS,GAAsB,EAAE,CAAC;IAExC,4BAA4B;IAC5B,IAAI,CAAC,aAAa;QAAE,aAAa,GAAG,EAAE,CAAC;IACvC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;QACpB,OAAO;YACL,MAAM;YACN,GAAG,EAAE;gBACH,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/C,SAAS,CAAC,CAAC,CAAE,EAAE,CAAC;gBAClB,CAAC;gBACD,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACvB,CAAC;SACF,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,uBAAuB;QACvB,aAAa,CAAC,GAAG,EAAE,CAAC;QACpB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,aAAa,GAAG,IAAI,CAAC;IACvD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAmB;IAClD,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../../src/signals/effect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../../src/signals/effect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAYjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../src/signals/effect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,MAAM,CAAC,EAAc;IACnC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QACtB,EAAE,EAAE,CAAC;QACL,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../src/signals/effect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,MAAM,CAAC,EAAc;IACnC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QACtB,EAAE,EAAE,CAAC;QACL,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,8DAA8D;IAC9D,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACpC,sDAAsD;IACtD,OAAO,GAAG,EAAE;QACV,KAAK,EAAE,CAAC;QACR,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -9,12 +9,12 @@ export { Signal, signal } from "./signal.js";
|
|
|
9
9
|
export { Computed, computed } from "./computed.js";
|
|
10
10
|
export { effect } from "./effect.js";
|
|
11
11
|
export { store } from "./store.js";
|
|
12
|
-
export { batch, type Subscriber } from "./context.js";
|
|
12
|
+
export { batch, scope, type Subscriber } from "./context.js";
|
|
13
13
|
/** Common interface for reactive values (Signal or Computed). */
|
|
14
14
|
export interface Reactive<T> {
|
|
15
15
|
readonly value: T;
|
|
16
16
|
subscribe(fn: () => void): () => void;
|
|
17
17
|
}
|
|
18
|
-
/** Check if a value is a reactive signal or computed. */
|
|
18
|
+
/** Check if a value is a reactive signal or computed. @internal */
|
|
19
19
|
export declare const isSignal: (value: unknown) => value is Reactive<unknown>;
|
|
20
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signals/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signals/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAK7D,iEAAiE;AACjE,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CACvC;AAED,mEAAmE;AACnE,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,QAAQ,CAAC,OAAO,CACb,CAAC"}
|
|
@@ -9,9 +9,9 @@ export { Signal, signal } from "./signal.js";
|
|
|
9
9
|
export { Computed, computed } from "./computed.js";
|
|
10
10
|
export { effect } from "./effect.js";
|
|
11
11
|
export { store } from "./store.js";
|
|
12
|
-
export { batch } from "./context.js";
|
|
12
|
+
export { batch, scope } from "./context.js";
|
|
13
13
|
import { Signal } from "./signal.js";
|
|
14
14
|
import { Computed } from "./computed.js";
|
|
15
|
-
/** Check if a value is a reactive signal or computed. */
|
|
15
|
+
/** Check if a value is a reactive signal or computed. @internal */
|
|
16
16
|
export const isSignal = (value) => value instanceof Signal || value instanceof Computed;
|
|
17
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/signals/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAmB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/signals/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAmB,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAQzC,mEAAmE;AACnE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAA8B,EAAE,CACrE,KAAK,YAAY,MAAM,IAAI,KAAK,YAAY,QAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/signals/store.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/signals/store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAuDjD"}
|
|
@@ -3,9 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Signal } from "./signal.js";
|
|
5
5
|
const STORE = Symbol();
|
|
6
|
-
const isPlainObject = (value) => value !== null &&
|
|
7
|
-
typeof value === "object" &&
|
|
8
|
-
Object.getPrototypeOf(value) === Object.prototype;
|
|
9
6
|
/**
|
|
10
7
|
* Create a reactive store from a plain object.
|
|
11
8
|
* Each property becomes a signal, and nested objects are recursively wrapped.
|
|
@@ -17,7 +14,9 @@ export function store(obj) {
|
|
|
17
14
|
if (value !== null && typeof value === "object" && STORE in value) {
|
|
18
15
|
return value; // Already a store
|
|
19
16
|
}
|
|
20
|
-
if (
|
|
17
|
+
if (value !== null &&
|
|
18
|
+
typeof value === "object" &&
|
|
19
|
+
Object.getPrototypeOf(value) === Object.prototype) {
|
|
21
20
|
return store(value);
|
|
22
21
|
}
|
|
23
22
|
if (Array.isArray(value)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/signals/store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;AAEvB
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/signals/store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;AAEvB;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAmB,GAAM;IAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoC,CAAC;IAE5D,iDAAiD;IACjD,MAAM,IAAI,GAAG,CAAC,KAAc,EAAW,EAAE;QACvC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;YAClE,OAAO,KAAK,CAAC,CAAC,kBAAkB;QAClC,CAAC;QACD,IACE,KAAK,KAAK,IAAI;YACd,OAAO,KAAK,KAAK,QAAQ;YACzB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS,EACjD,CAAC;YACD,OAAO,KAAK,CAAC,KAAgC,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,4CAA4C;IAC5C,MAAM,SAAS,GAAG,CAAC,GAAoB,EAAE,YAAqB,EAAE,EAAE;QAChE,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE;QACpB,GAAG,CAAC,MAAM,EAAE,GAAG;YACb,mEAAmE;YACnE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,MAAM,CAAC,GAAc,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,GAAc,CAAC,CAAC,CAAC,KAAK,CAAC;QACtD,CAAC;QAED,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK;YACpB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAc,CAAC,GAAG,KAAK,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,GAAc,CAAC,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC;YACvD,MAAM,CAAC,GAAc,CAAC,GAAG,OAAqB,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,GAAG,CAAC,MAAM,EAAE,GAAG;YACb,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC;QACxC,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAA8B,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAA8B,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AA+B/E,gEAAgE;AAChE,qBAAa,QAAQ;IAEjB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;gBADN,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,OAAO,EAAE;IAG3B;;;OAGG;IACH,MAAM,IAAI;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE;CAuH9D;AA0HD,mEAAmE;AACnE,eAAO,MAAM,IAAI,GAAI,SAAS,oBAAoB,EAAE,GAAG,QAAQ,OAAO,EAAE,aACzC,CAAC;AAEhC,2CAA2C;AAC3C,QAAA,MAAM,IAAI,eAAW,CAAC;AAEtB,4BAA4B;AAC5B,UAAU,cAAc,CAAC,CAAC;IACxB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACpB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,QAAQ,CAAC;CACjC;AAED,6EAA6E;AAC7E,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,IAAI,CAAC,CAAC,EACpB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,QAAQ,GAC9B,cAAc,CAAC,CAAC,CAAC,CAAC;AACrB,wBAAgB,IAAI,CAAC,CAAC,EACpB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAClB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,EAC1C,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,QAAQ,GAC9B,cAAc,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/esm/template.js
CHANGED
|
@@ -11,17 +11,27 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { computed, isSignal, signal } from "./signals/index.js";
|
|
13
13
|
import { HTMLParser } from "./parser.js";
|
|
14
|
+
const SVG_NS = "http://www.w3.org/2000/svg";
|
|
14
15
|
/**
|
|
15
16
|
* Bind a value to an update function.
|
|
16
17
|
* If reactive, subscribes and returns unsubscribe. Otherwise returns null.
|
|
18
|
+
* Functions are wrapped in computed() for automatic reactivity.
|
|
17
19
|
*/
|
|
18
20
|
function bind(value, update) {
|
|
21
|
+
if (typeof value === "function") {
|
|
22
|
+
const c = computed(value);
|
|
23
|
+
update(c.value);
|
|
24
|
+
const unsub = c.subscribe(() => update(c.value));
|
|
25
|
+
return () => {
|
|
26
|
+
unsub();
|
|
27
|
+
c.dispose();
|
|
28
|
+
};
|
|
29
|
+
}
|
|
19
30
|
if (isSignal(value)) {
|
|
20
31
|
update(value.value);
|
|
21
32
|
return value.subscribe(() => update(value.value));
|
|
22
33
|
}
|
|
23
34
|
update(value);
|
|
24
|
-
return null;
|
|
25
35
|
}
|
|
26
36
|
/** A parsed HTML template. Call render() to create live DOM. */
|
|
27
37
|
export class Template {
|
|
@@ -41,12 +51,97 @@ export class Template {
|
|
|
41
51
|
const stack = [fragment];
|
|
42
52
|
const parser = new HTMLParser();
|
|
43
53
|
const values = this.values;
|
|
54
|
+
const handleAttribute = (el, name, parts) => {
|
|
55
|
+
const part0 = parts[0];
|
|
56
|
+
// Event binding: @click=${handler}
|
|
57
|
+
if (name[0] === "@") {
|
|
58
|
+
if (part0 && typeof part0 !== "string") {
|
|
59
|
+
const handler = values[part0.index];
|
|
60
|
+
el.addEventListener(name.slice(1), handler);
|
|
61
|
+
disposers.push(() => el.removeEventListener(name.slice(1), handler));
|
|
62
|
+
}
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// Property binding: .value=${data} - sets DOM property directly
|
|
66
|
+
if (name[0] === ".") {
|
|
67
|
+
if (part0 && typeof part0 !== "string") {
|
|
68
|
+
const unsub = bind(values[part0.index], (v) => {
|
|
69
|
+
el[name.slice(1)] = v;
|
|
70
|
+
});
|
|
71
|
+
if (unsub)
|
|
72
|
+
disposers.push(unsub);
|
|
73
|
+
}
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Dynamic attribute - collect dynamic parts
|
|
77
|
+
const dynParts = [];
|
|
78
|
+
for (const p of parts) {
|
|
79
|
+
if (typeof p !== "string")
|
|
80
|
+
dynParts.push(p);
|
|
81
|
+
}
|
|
82
|
+
// Static attribute (all parts are strings)
|
|
83
|
+
if (!dynParts.length) {
|
|
84
|
+
const value = parts.join("");
|
|
85
|
+
if (value || !parts.length)
|
|
86
|
+
el.setAttribute(name, value);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Wrap functions in computed, collect all reactive sources
|
|
90
|
+
const reactives = [];
|
|
91
|
+
for (const p of dynParts) {
|
|
92
|
+
const v = values[p.index];
|
|
93
|
+
if (typeof v === "function") {
|
|
94
|
+
const c = computed(v);
|
|
95
|
+
values[p.index] = c;
|
|
96
|
+
reactives.push(c);
|
|
97
|
+
disposers.push(() => c.dispose());
|
|
98
|
+
}
|
|
99
|
+
else if (isSignal(v)) {
|
|
100
|
+
reactives.push(v);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const getValue = (idx) => {
|
|
104
|
+
const v = values[idx];
|
|
105
|
+
return isSignal(v) ? v.value : v;
|
|
106
|
+
};
|
|
107
|
+
const update = () => {
|
|
108
|
+
if (parts.length === 1) {
|
|
109
|
+
const val = getValue(dynParts[0].index);
|
|
110
|
+
if (val == null || val === false)
|
|
111
|
+
el.removeAttribute(name);
|
|
112
|
+
else
|
|
113
|
+
el.setAttribute(name, val === true ? "" : String(val));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
el.setAttribute(name, parts
|
|
117
|
+
.map((p) => {
|
|
118
|
+
if (typeof p === "string")
|
|
119
|
+
return p;
|
|
120
|
+
const val = getValue(p.index);
|
|
121
|
+
return val == null ? "" : String(val);
|
|
122
|
+
})
|
|
123
|
+
.join(""));
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
update();
|
|
127
|
+
for (const s of reactives)
|
|
128
|
+
disposers.push(s.subscribe(update));
|
|
129
|
+
};
|
|
44
130
|
parser.parseTemplate(this.strings, {
|
|
45
131
|
onText: (text) => {
|
|
46
|
-
stack.at(-1).
|
|
132
|
+
stack.at(-1).append(text);
|
|
47
133
|
},
|
|
48
|
-
|
|
49
|
-
stack.at(-1)
|
|
134
|
+
onOpenTag: (tag, attrs, selfClosing) => {
|
|
135
|
+
const parent = stack.at(-1);
|
|
136
|
+
const el = tag === "svg" ||
|
|
137
|
+
tag === "SVG" ||
|
|
138
|
+
(parent instanceof Element && parent.namespaceURI === SVG_NS)
|
|
139
|
+
? document.createElementNS(SVG_NS, tag)
|
|
140
|
+
: document.createElement(tag);
|
|
141
|
+
for (const [name, parts] of attrs) {
|
|
142
|
+
handleAttribute(el, name, parts);
|
|
143
|
+
}
|
|
144
|
+
parent.appendChild(el);
|
|
50
145
|
if (!selfClosing)
|
|
51
146
|
stack.push(el);
|
|
52
147
|
},
|
|
@@ -54,74 +149,6 @@ export class Template {
|
|
|
54
149
|
if (stack.length > 1)
|
|
55
150
|
stack.pop();
|
|
56
151
|
},
|
|
57
|
-
onAttribute: (el, name, parts) => {
|
|
58
|
-
const prefix = name[0];
|
|
59
|
-
// Event binding: @click=${handler}
|
|
60
|
-
if (prefix === "@") {
|
|
61
|
-
const event = name.slice(1);
|
|
62
|
-
const part = parts[0];
|
|
63
|
-
if (part && typeof part !== "string") {
|
|
64
|
-
const handler = values[part.index];
|
|
65
|
-
el.addEventListener(event, handler);
|
|
66
|
-
disposers.push(() => el.removeEventListener(event, handler));
|
|
67
|
-
}
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
// Property binding: .value=${data} - sets DOM property directly
|
|
71
|
-
if (prefix === ".") {
|
|
72
|
-
const prop = name.slice(1);
|
|
73
|
-
const part = parts[0];
|
|
74
|
-
if (part && typeof part !== "string") {
|
|
75
|
-
const unsub = bind(values[part.index], (v) => {
|
|
76
|
-
el[prop] = v;
|
|
77
|
-
});
|
|
78
|
-
if (unsub)
|
|
79
|
-
disposers.push(unsub);
|
|
80
|
-
}
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
// Static attribute (all parts are strings)
|
|
84
|
-
if (parts.every((p) => typeof p === "string")) {
|
|
85
|
-
const value = parts.join("");
|
|
86
|
-
if (value || parts.length === 0) {
|
|
87
|
-
el.setAttribute(name, value);
|
|
88
|
-
}
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
// Dynamic attribute - has at least one interpolated value
|
|
92
|
-
const dynamicParts = parts.filter((p) => typeof p !== "string");
|
|
93
|
-
const signals = dynamicParts
|
|
94
|
-
.map((p) => values[p.index])
|
|
95
|
-
.filter(isSignal);
|
|
96
|
-
// Single dynamic with no static parts: handle null/false as removal
|
|
97
|
-
const isSingleDynamic = parts.length === 1 && typeof parts[0] !== "string";
|
|
98
|
-
const update = () => {
|
|
99
|
-
if (isSingleDynamic) {
|
|
100
|
-
// Boolean/null handling: false/null removes, true sets empty string
|
|
101
|
-
const v = values[dynamicParts[0].index];
|
|
102
|
-
const val = isSignal(v) ? v.value : v;
|
|
103
|
-
if (val == null || val === false)
|
|
104
|
-
el.removeAttribute(name);
|
|
105
|
-
else
|
|
106
|
-
el.setAttribute(name, val === true ? "" : String(val));
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
// Multi-part: concatenate all parts
|
|
110
|
-
const resolved = parts
|
|
111
|
-
.map((p) => {
|
|
112
|
-
if (typeof p === "string")
|
|
113
|
-
return p;
|
|
114
|
-
const v = values[p.index];
|
|
115
|
-
const val = isSignal(v) ? v.value : v;
|
|
116
|
-
return val == null ? "" : String(val);
|
|
117
|
-
})
|
|
118
|
-
.join("");
|
|
119
|
-
el.setAttribute(name, resolved);
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
update();
|
|
123
|
-
signals.forEach((s) => disposers.push(s.subscribe(update)));
|
|
124
|
-
},
|
|
125
152
|
onSlot: (index) => {
|
|
126
153
|
// Marker comment anchors dynamic content
|
|
127
154
|
const marker = document.createComment("");
|
|
@@ -147,10 +174,10 @@ function bindContent(marker, value) {
|
|
|
147
174
|
nodes = [];
|
|
148
175
|
};
|
|
149
176
|
// Handle each() - keyed list for efficient list rendering
|
|
150
|
-
if (
|
|
177
|
+
if (value != null && typeof value === "object" && EACH in value) {
|
|
151
178
|
const cache = new Map();
|
|
152
179
|
const { list, keyFn, renderFn } = value;
|
|
153
|
-
let
|
|
180
|
+
let warned = 0;
|
|
154
181
|
const updateList = () => {
|
|
155
182
|
const parent = marker.parentNode;
|
|
156
183
|
const items = list.value;
|
|
@@ -160,11 +187,7 @@ function bindContent(marker, value) {
|
|
|
160
187
|
const item = items[i];
|
|
161
188
|
const key = keyFn(item, i);
|
|
162
189
|
if (newKeys.has(key)) {
|
|
163
|
-
|
|
164
|
-
warnedDuplicate = true;
|
|
165
|
-
console.warn(`[balises] Duplicate key in each(): ${String(key)}. ` +
|
|
166
|
-
`Each item should have a unique key. Consider providing a keyFn.`);
|
|
167
|
-
}
|
|
190
|
+
void (warned++ || console.warn("Duplicate key:", key));
|
|
168
191
|
continue; // Skip duplicate
|
|
169
192
|
}
|
|
170
193
|
newKeys.add(key);
|
|
@@ -239,37 +262,23 @@ function bindContent(marker, value) {
|
|
|
239
262
|
export const html = (strings, ...values) => new Template(strings, values);
|
|
240
263
|
/** Marker symbol for keyed list objects */
|
|
241
264
|
const EACH = Symbol();
|
|
242
|
-
/** Type guard for Each descriptor */
|
|
243
|
-
const isEach = (v) => v != null && typeof v === "object" && EACH in v;
|
|
244
|
-
/** Normalize list input to a reactive signal */
|
|
245
|
-
function toReactiveList(list) {
|
|
246
|
-
if (Array.isArray(list))
|
|
247
|
-
return signal(list);
|
|
248
|
-
if (typeof list === "function")
|
|
249
|
-
return computed(list);
|
|
250
|
-
return list;
|
|
251
|
-
}
|
|
252
265
|
export function each(list, keyFnOrRenderFn, renderFn) {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
keyFn: (item, index) => item !== null &&
|
|
261
|
-
(typeof item === "object" || typeof item === "function")
|
|
262
|
-
? item
|
|
263
|
-
: index,
|
|
264
|
-
renderFn: keyFnOrRenderFn,
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
// Three-arg form: each(list, keyFn, renderFn)
|
|
266
|
+
// Two-arg form: each(list, renderFn) - use object ref for objects, index for primitives
|
|
267
|
+
const keyFn = renderFn
|
|
268
|
+
? keyFnOrRenderFn
|
|
269
|
+
: (item, index) => item !== null &&
|
|
270
|
+
(typeof item === "object" || typeof item === "function")
|
|
271
|
+
? item
|
|
272
|
+
: index;
|
|
268
273
|
return {
|
|
269
274
|
[EACH]: true,
|
|
270
|
-
list:
|
|
271
|
-
|
|
272
|
-
|
|
275
|
+
list: Array.isArray(list)
|
|
276
|
+
? signal(list)
|
|
277
|
+
: typeof list === "function"
|
|
278
|
+
? computed(list)
|
|
279
|
+
: list,
|
|
280
|
+
keyFn,
|
|
281
|
+
renderFn: renderFn ?? keyFnOrRenderFn,
|
|
273
282
|
};
|
|
274
283
|
}
|
|
275
284
|
//# sourceMappingURL=template.js.map
|
package/dist/esm/template.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAiB,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/template.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "balises",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "A very simple reactive html templating library",
|
|
5
5
|
"author": "Julien Elbaz <elbywan@hotmail.com>",
|
|
6
6
|
"type": "module",
|
|
@@ -56,15 +56,26 @@
|
|
|
56
56
|
},
|
|
57
57
|
"scripts": {
|
|
58
58
|
"build": "rm -rf dist && tsc && rolldown -c",
|
|
59
|
-
"test": "node --
|
|
59
|
+
"test": "node --import tsx/esm --import ./tests/setup.ts --test tests/*.test.ts",
|
|
60
|
+
"typecheck": "tsc --project tsconfig.typecheck.json",
|
|
60
61
|
"lint": "eslint .",
|
|
62
|
+
"lint:fix": "eslint . --fix",
|
|
63
|
+
"format": "prettier --write .",
|
|
64
|
+
"check": "yarn format && yarn lint:fix && yarn typecheck",
|
|
61
65
|
"pretty": "prettier --write .",
|
|
62
66
|
"examples": "rolldown -c examples/rolldown.config.ts && yarn dlx serve examples",
|
|
63
67
|
"examples:build": "rolldown -c examples/rolldown.config.ts && cp docs/base.css examples/ && cp docs/example.css examples/",
|
|
64
|
-
"bench": "cd bench && yarn && yarn start",
|
|
65
|
-
"bench:
|
|
68
|
+
"bench": "cd bench && yarn && yarn start --isolate",
|
|
69
|
+
"bench:update-readme": "cd bench && yarn && node update-readme.mjs",
|
|
70
|
+
"bench:self": "cd bench && yarn && yarn start:self --isolate",
|
|
71
|
+
"bench:layers": "cd bench && yarn && yarn start:layers --isolate",
|
|
72
|
+
"bench:wide": "cd bench && yarn && yarn start:wide --isolate",
|
|
73
|
+
"bench:diamond": "cd bench && yarn && yarn start:diamond --isolate",
|
|
74
|
+
"bench:create": "cd bench && yarn && yarn start:create --isolate",
|
|
75
|
+
"bench:conditional": "cd bench && yarn && yarn start:conditional --isolate",
|
|
76
|
+
"bench:list": "cd bench && yarn && yarn start:list --isolate",
|
|
66
77
|
"docs": "yarn docs:build && yarn dlx serve _site",
|
|
67
|
-
"docs:build": "yarn build && yarn examples:build && rm -rf _site && mkdir -p _site/assets && cp docs/index.html _site/ && cp docs/*.css _site/ && cp docs
|
|
78
|
+
"docs:build": "yarn build && yarn examples:build && rm -rf _site && mkdir -p _site/assets && cp docs/index.html _site/ && cp docs/*.css _site/ && cp docs/*.js _site/ && cp assets/logo.svg _site/assets/ && cp assets/logo-icon.svg _site/assets/ && cp -r examples _site/examples && cp dist/balises.esm.js _site/examples/"
|
|
68
79
|
},
|
|
69
80
|
"devDependencies": {
|
|
70
81
|
"@eslint/js": "9.39.2",
|
|
@@ -79,6 +90,6 @@
|
|
|
79
90
|
"typescript-eslint": "8.50.1"
|
|
80
91
|
},
|
|
81
92
|
"dependencies": {
|
|
82
|
-
"balises": "
|
|
93
|
+
"balises": "0.4.0"
|
|
83
94
|
}
|
|
84
95
|
}
|