microtags 0.0.1 → 0.0.3

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/dist/meta.json CHANGED
@@ -1,18 +1,146 @@
1
1
  {
2
2
  "inputs": {
3
- "src/index.ts": {
4
- "bytes": 89,
5
- "imports": [],
3
+ "src/reactivity.ts": {
4
+ "bytes": 790,
5
+ "imports": [
6
+ {
7
+ "path": "alien-signals",
8
+ "kind": "import-statement",
9
+ "external": true
10
+ },
11
+ {
12
+ "path": "<runtime>",
13
+ "kind": "import-statement",
14
+ "external": true
15
+ }
16
+ ],
6
17
  "format": "esm"
7
18
  },
8
- "src/render.ts": {
9
- "bytes": 2601,
10
- "imports": [],
19
+ "src/util.ts": {
20
+ "bytes": 1451,
21
+ "imports": [
22
+ {
23
+ "path": "<runtime>",
24
+ "kind": "import-statement",
25
+ "external": true
26
+ }
27
+ ],
11
28
  "format": "esm"
12
29
  },
13
30
  "src/context.ts": {
14
31
  "bytes": 2503,
15
- "imports": [],
32
+ "imports": [
33
+ {
34
+ "path": "src/reactivity.ts",
35
+ "kind": "import-statement",
36
+ "original": "./reactivity.js"
37
+ },
38
+ {
39
+ "path": "<runtime>",
40
+ "kind": "import-statement",
41
+ "external": true
42
+ }
43
+ ],
44
+ "format": "esm"
45
+ },
46
+ "src/setup-context.ts": {
47
+ "bytes": 2877,
48
+ "imports": [
49
+ {
50
+ "path": "src/reactivity.ts",
51
+ "kind": "import-statement",
52
+ "original": "./reactivity.js"
53
+ },
54
+ {
55
+ "path": "src/context.ts",
56
+ "kind": "import-statement",
57
+ "original": "./context.js"
58
+ },
59
+ {
60
+ "path": "<runtime>",
61
+ "kind": "import-statement",
62
+ "external": true
63
+ }
64
+ ],
65
+ "format": "esm"
66
+ },
67
+ "src/factory.ts": {
68
+ "bytes": 7090,
69
+ "imports": [
70
+ {
71
+ "path": "src/reactivity.ts",
72
+ "kind": "import-statement",
73
+ "original": "./reactivity.js"
74
+ },
75
+ {
76
+ "path": "src/util.ts",
77
+ "kind": "import-statement",
78
+ "original": "./util.js"
79
+ },
80
+ {
81
+ "path": "src/setup-context.ts",
82
+ "kind": "import-statement",
83
+ "original": "./setup-context.js"
84
+ },
85
+ {
86
+ "path": "src/context.ts",
87
+ "kind": "import-statement",
88
+ "original": "./context.js"
89
+ },
90
+ {
91
+ "path": "<runtime>",
92
+ "kind": "import-statement",
93
+ "external": true
94
+ }
95
+ ],
96
+ "format": "esm"
97
+ },
98
+ "src/builders.ts": {
99
+ "bytes": 8523,
100
+ "imports": [
101
+ {
102
+ "path": "src/util.ts",
103
+ "kind": "import-statement",
104
+ "original": "./util.js"
105
+ },
106
+ {
107
+ "path": "src/factory.ts",
108
+ "kind": "import-statement",
109
+ "original": "./factory.js"
110
+ },
111
+ {
112
+ "path": "<runtime>",
113
+ "kind": "import-statement",
114
+ "external": true
115
+ }
116
+ ],
117
+ "format": "esm"
118
+ },
119
+ "src/index.ts": {
120
+ "bytes": 89,
121
+ "imports": [
122
+ {
123
+ "path": "src/reactivity.ts",
124
+ "kind": "import-statement",
125
+ "original": "./reactivity.js"
126
+ },
127
+ {
128
+ "path": "src/builders.ts",
129
+ "kind": "import-statement",
130
+ "original": "./builders.js"
131
+ }
132
+ ],
133
+ "format": "esm"
134
+ },
135
+ "src/render.ts": {
136
+ "bytes": 2601,
137
+ "imports": [
138
+ {
139
+ "path": "<runtime>",
140
+ "kind": "import-statement",
141
+ "external": true
142
+ }
143
+ ],
16
144
  "format": "esm"
17
145
  }
18
146
  },
@@ -21,19 +149,21 @@
21
149
  "imports": [],
22
150
  "exports": [],
23
151
  "inputs": {},
24
- "bytes": 241
152
+ "bytes": 25428
25
153
  },
26
154
  "dist/index.js": {
27
155
  "imports": [
28
156
  {
29
- "path": "./reactivity.js",
30
- "kind": "import-statement",
31
- "external": true
157
+ "path": "dist/chunk-CCYWRJW6.js",
158
+ "kind": "import-statement"
32
159
  },
33
160
  {
34
- "path": "./builders.js",
35
- "kind": "import-statement",
36
- "external": true
161
+ "path": "dist/chunk-E7ZGOHL3.js",
162
+ "kind": "import-statement"
163
+ },
164
+ {
165
+ "path": "dist/chunk-7QVYU63E.js",
166
+ "kind": "import-statement"
37
167
  }
38
168
  ],
39
169
  "exports": [
@@ -44,19 +174,33 @@
44
174
  "entryPoint": "src/index.ts",
45
175
  "inputs": {
46
176
  "src/index.ts": {
47
- "bytesInOutput": 91
177
+ "bytesInOutput": 0
178
+ },
179
+ "src/setup-context.ts": {
180
+ "bytesInOutput": 1747
181
+ },
182
+ "src/factory.ts": {
183
+ "bytesInOutput": 3594
184
+ },
185
+ "src/builders.ts": {
186
+ "bytesInOutput": 3646
48
187
  }
49
188
  },
50
- "bytes": 167
189
+ "bytes": 9416
51
190
  },
52
191
  "dist/render.js.map": {
53
192
  "imports": [],
54
193
  "exports": [],
55
194
  "inputs": {},
56
- "bytes": 4201
195
+ "bytes": 4204
57
196
  },
58
197
  "dist/render.js": {
59
- "imports": [],
198
+ "imports": [
199
+ {
200
+ "path": "dist/chunk-7QVYU63E.js",
201
+ "kind": "import-statement"
202
+ }
203
+ ],
60
204
  "exports": [
61
205
  "render",
62
206
  "renderList"
@@ -64,23 +208,26 @@
64
208
  "entryPoint": "src/render.ts",
65
209
  "inputs": {
66
210
  "src/render.ts": {
67
- "bytesInOutput": 1833
211
+ "bytesInOutput": 1827
68
212
  }
69
213
  },
70
- "bytes": 2032
214
+ "bytes": 1963
71
215
  },
72
216
  "dist/context.js.map": {
73
217
  "imports": [],
74
218
  "exports": [],
75
219
  "inputs": {},
76
- "bytes": 3913
220
+ "bytes": 93
77
221
  },
78
222
  "dist/context.js": {
79
223
  "imports": [
80
224
  {
81
- "path": "./reactivity.js",
82
- "kind": "import-statement",
83
- "external": true
225
+ "path": "dist/chunk-CCYWRJW6.js",
226
+ "kind": "import-statement"
227
+ },
228
+ {
229
+ "path": "dist/chunk-7QVYU63E.js",
230
+ "kind": "import-statement"
84
231
  }
85
232
  ],
86
233
  "exports": [
@@ -90,12 +237,115 @@
90
237
  "resolveContextSignal"
91
238
  ],
92
239
  "entryPoint": "src/context.ts",
240
+ "inputs": {},
241
+ "bytes": 263
242
+ },
243
+ "dist/chunk-CCYWRJW6.js.map": {
244
+ "imports": [],
245
+ "exports": [],
246
+ "inputs": {},
247
+ "bytes": 4998
248
+ },
249
+ "dist/chunk-CCYWRJW6.js": {
250
+ "imports": [
251
+ {
252
+ "path": "dist/chunk-7QVYU63E.js",
253
+ "kind": "import-statement"
254
+ },
255
+ {
256
+ "path": "alien-signals",
257
+ "kind": "import-statement",
258
+ "external": true
259
+ }
260
+ ],
261
+ "exports": [
262
+ "createContext",
263
+ "effect",
264
+ "onContextAvailable",
265
+ "peek",
266
+ "provide",
267
+ "resolveContextSignal",
268
+ "signal",
269
+ "untracked"
270
+ ],
93
271
  "inputs": {
272
+ "src/reactivity.ts": {
273
+ "bytesInOutput": 324
274
+ },
94
275
  "src/context.ts": {
95
- "bytesInOutput": 1649
276
+ "bytesInOutput": 1603
277
+ }
278
+ },
279
+ "bytes": 2186
280
+ },
281
+ "dist/util.js.map": {
282
+ "imports": [],
283
+ "exports": [],
284
+ "inputs": {},
285
+ "bytes": 93
286
+ },
287
+ "dist/util.js": {
288
+ "imports": [
289
+ {
290
+ "path": "dist/chunk-E7ZGOHL3.js",
291
+ "kind": "import-statement"
292
+ },
293
+ {
294
+ "path": "dist/chunk-7QVYU63E.js",
295
+ "kind": "import-statement"
296
+ }
297
+ ],
298
+ "exports": [
299
+ "coerceBoolean",
300
+ "coerceJson",
301
+ "coerceNumber",
302
+ "coerceString",
303
+ "runCleanups"
304
+ ],
305
+ "entryPoint": "src/util.ts",
306
+ "inputs": {},
307
+ "bytes": 268
308
+ },
309
+ "dist/chunk-E7ZGOHL3.js.map": {
310
+ "imports": [],
311
+ "exports": [],
312
+ "inputs": {},
313
+ "bytes": 2135
314
+ },
315
+ "dist/chunk-E7ZGOHL3.js": {
316
+ "imports": [
317
+ {
318
+ "path": "dist/chunk-7QVYU63E.js",
319
+ "kind": "import-statement"
320
+ }
321
+ ],
322
+ "exports": [
323
+ "coerceBoolean",
324
+ "coerceJson",
325
+ "coerceNumber",
326
+ "coerceString",
327
+ "runCleanups"
328
+ ],
329
+ "inputs": {
330
+ "src/util.ts": {
331
+ "bytesInOutput": 759
96
332
  }
97
333
  },
98
- "bytes": 1899
334
+ "bytes": 956
335
+ },
336
+ "dist/chunk-7QVYU63E.js.map": {
337
+ "imports": [],
338
+ "exports": [],
339
+ "inputs": {},
340
+ "bytes": 93
341
+ },
342
+ "dist/chunk-7QVYU63E.js": {
343
+ "imports": [],
344
+ "exports": [
345
+ "__name"
346
+ ],
347
+ "inputs": {},
348
+ "bytes": 194
99
349
  }
100
350
  }
101
351
  }
package/dist/render.cjs CHANGED
@@ -17,14 +17,16 @@ var __copyProps = (to, from, except, desc) => {
17
17
  return to;
18
18
  };
19
19
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/render.ts
20
22
  var render_exports = {};
21
23
  __export(render_exports, {
22
24
  render: () => render,
23
25
  renderList: () => renderList
24
26
  });
25
27
  module.exports = __toCommonJS(render_exports);
26
- const elementData = /* @__PURE__ */ new WeakMap();
27
- const elementKeys = /* @__PURE__ */ new WeakMap();
28
+ var elementData = /* @__PURE__ */ new WeakMap();
29
+ var elementKeys = /* @__PURE__ */ new WeakMap();
28
30
  function renderList(container, template, options) {
29
31
  const { data, key: getKey, update } = options;
30
32
  const existingByKey = /* @__PURE__ */ new Map();
@@ -63,8 +65,8 @@ function renderList(container, template, options) {
63
65
  }
64
66
  }
65
67
  __name(renderList, "renderList");
66
- let _tplCounter = 0;
67
- const tplIds = /* @__PURE__ */ new WeakMap();
68
+ var _tplCounter = 0;
69
+ var tplIds = /* @__PURE__ */ new WeakMap();
68
70
  function render(container, template, options) {
69
71
  renderList(container, template, {
70
72
  data: [
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/render.ts"],
4
4
  "sourcesContent": ["export type RenderListOptions<T, E extends Element = Element> = {\n data:readonly T[];\n key:(item:T, index:number) => string | number;\n update:(el:E, item:T) => void;\n}\n\nexport type RenderOptions<T, E extends Element = Element> = {\n data?:T;\n update?:(el:E, item:T) => void;\n}\n\nconst elementData = new WeakMap<Element, unknown>()\nconst elementKeys = new WeakMap<Element, string | number>()\n\nexport function renderList<T, E extends Element = Element> (\n container:Element,\n template:HTMLTemplateElement,\n options:RenderListOptions<T, E>\n):void {\n const { data, key: getKey, update } = options\n const existingByKey = new Map<string | number, E>()\n\n for (const child of Array.from(container.children)) {\n const key = elementKeys.get(child)\n if (key !== undefined) existingByKey.set(key, child as E)\n }\n\n const dataKeys = new Set(data.map(getKey))\n\n for (const child of Array.from(container.children)) {\n const key = elementKeys.get(child)\n if (key === undefined || !dataKeys.has(key)) {\n child.remove()\n elementKeys.delete(child)\n elementData.delete(child)\n }\n }\n\n let prev:E | null = null\n for (let i = 0; i < data.length; i++) {\n const item = data[i]\n const key = getKey(item, i)\n let el = existingByKey.get(key)\n\n if (!el) {\n el = (template.content.cloneNode(true) as Element)\n .firstElementChild as E\n elementKeys.set(el, key)\n }\n\n if (elementData.get(el) !== item) {\n update(el, item)\n elementData.set(el, item)\n }\n\n const expected = prev ?\n prev.nextElementSibling :\n container.firstElementChild\n\n if (el !== expected) {\n if (prev) prev.after(el)\n else container.prepend(el)\n }\n\n prev = el\n }\n}\n\nlet _tplCounter = 0\nconst tplIds = new WeakMap<HTMLTemplateElement, number>()\n\nexport function render<T, E extends Element = Element> (\n container:Element,\n template:HTMLTemplateElement,\n options?:RenderOptions<T, E>\n):void {\n renderList<T, E>(container, template, {\n data: [\n options !== undefined && 'data' in options ?\n options.data as T :\n {} as T\n ],\n key: () => {\n let id = tplIds.get(template)\n if (id === undefined) {\n id = _tplCounter++\n tplIds.set(template, id)\n }\n return id\n },\n update: options?.update ?? (() => {}),\n })\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,MAAM,cAAc,oBAAI,QAA0B;AAClD,MAAM,cAAc,oBAAI,QAAkC;AAEnD,SAAS,WACZ,WACA,UACA,SACG;AACH,QAAM,EAAE,MAAM,KAAK,QAAQ,OAAO,IAAI;AACtC,QAAM,gBAAgB,oBAAI,IAAwB;AAElD,aAAW,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG;AAChD,UAAM,MAAM,YAAY,IAAI,KAAK;AACjC,QAAI,QAAQ,OAAW,eAAc,IAAI,KAAK,KAAU;AAAA,EAC5D;AAEA,QAAM,WAAW,IAAI,IAAI,KAAK,IAAI,MAAM,CAAC;AAEzC,aAAW,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG;AAChD,UAAM,MAAM,YAAY,IAAI,KAAK;AACjC,QAAI,QAAQ,UAAa,CAAC,SAAS,IAAI,GAAG,GAAG;AACzC,YAAM,OAAO;AACb,kBAAY,OAAO,KAAK;AACxB,kBAAY,OAAO,KAAK;AAAA,IAC5B;AAAA,EACJ;AAEA,MAAI,OAAgB;AACpB,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,UAAM,OAAO,KAAK,CAAC;AACnB,UAAM,MAAM,OAAO,MAAM,CAAC;AAC1B,QAAI,KAAK,cAAc,IAAI,GAAG;AAE9B,QAAI,CAAC,IAAI;AACL,WAAM,SAAS,QAAQ,UAAU,IAAI,EAChC;AACL,kBAAY,IAAI,IAAI,GAAG;AAAA,IAC3B;AAEA,QAAI,YAAY,IAAI,EAAE,MAAM,MAAM;AAC9B,aAAO,IAAI,IAAI;AACf,kBAAY,IAAI,IAAI,IAAI;AAAA,IAC5B;AAEA,UAAM,WAAW,OACb,KAAK,qBACL,UAAU;AAEd,QAAI,OAAO,UAAU;AACjB,UAAI,KAAM,MAAK,MAAM,EAAE;AAAA,UAClB,WAAU,QAAQ,EAAE;AAAA,IAC7B;AAEA,WAAO;AAAA,EACX;AACJ;AApDgB;AAsDhB,IAAI,cAAc;AAClB,MAAM,SAAS,oBAAI,QAAqC;AAEjD,SAAS,OACZ,WACA,UACA,SACG;AACH,aAAiB,WAAW,UAAU;AAAA,IAClC,MAAM;AAAA,MACF,YAAY,UAAa,UAAU,UAC/B,QAAQ,OACR,CAAC;AAAA,IACT;AAAA,IACA,KAAK,6BAAM;AACP,UAAI,KAAK,OAAO,IAAI,QAAQ;AAC5B,UAAI,OAAO,QAAW;AAClB,aAAK;AACL,eAAO,IAAI,UAAU,EAAE;AAAA,MAC3B;AACA,aAAO;AAAA,IACX,GAPK;AAAA,IAQL,QAAQ,SAAS,WAAW,MAAM;AAAA,IAAC;AAAA,EACvC,CAAC;AACL;AArBgB;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,IAAM,cAAc,oBAAI,QAA0B;AAClD,IAAM,cAAc,oBAAI,QAAkC;AAEnD,SAAS,WACZ,WACA,UACA,SACG;AACH,QAAM,EAAE,MAAM,KAAK,QAAQ,OAAO,IAAI;AACtC,QAAM,gBAAgB,oBAAI,IAAwB;AAElD,aAAW,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG;AAChD,UAAM,MAAM,YAAY,IAAI,KAAK;AACjC,QAAI,QAAQ,OAAW,eAAc,IAAI,KAAK,KAAU;AAAA,EAC5D;AAEA,QAAM,WAAW,IAAI,IAAI,KAAK,IAAI,MAAM,CAAC;AAEzC,aAAW,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG;AAChD,UAAM,MAAM,YAAY,IAAI,KAAK;AACjC,QAAI,QAAQ,UAAa,CAAC,SAAS,IAAI,GAAG,GAAG;AACzC,YAAM,OAAO;AACb,kBAAY,OAAO,KAAK;AACxB,kBAAY,OAAO,KAAK;AAAA,IAC5B;AAAA,EACJ;AAEA,MAAI,OAAgB;AACpB,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,UAAM,OAAO,KAAK,CAAC;AACnB,UAAM,MAAM,OAAO,MAAM,CAAC;AAC1B,QAAI,KAAK,cAAc,IAAI,GAAG;AAE9B,QAAI,CAAC,IAAI;AACL,WAAM,SAAS,QAAQ,UAAU,IAAI,EAChC;AACL,kBAAY,IAAI,IAAI,GAAG;AAAA,IAC3B;AAEA,QAAI,YAAY,IAAI,EAAE,MAAM,MAAM;AAC9B,aAAO,IAAI,IAAI;AACf,kBAAY,IAAI,IAAI,IAAI;AAAA,IAC5B;AAEA,UAAM,WAAW,OACb,KAAK,qBACL,UAAU;AAEd,QAAI,OAAO,UAAU;AACjB,UAAI,KAAM,MAAK,MAAM,EAAE;AAAA,UAClB,WAAU,QAAQ,EAAE;AAAA,IAC7B;AAEA,WAAO;AAAA,EACX;AACJ;AApDgB;AAsDhB,IAAI,cAAc;AAClB,IAAM,SAAS,oBAAI,QAAqC;AAEjD,SAAS,OACZ,WACA,UACA,SACG;AACH,aAAiB,WAAW,UAAU;AAAA,IAClC,MAAM;AAAA,MACF,YAAY,UAAa,UAAU,UAC/B,QAAQ,OACR,CAAC;AAAA,IACT;AAAA,IACA,KAAK,6BAAM;AACP,UAAI,KAAK,OAAO,IAAI,QAAQ;AAC5B,UAAI,OAAO,QAAW;AAClB,aAAK;AACL,eAAO,IAAI,UAAU,EAAE;AAAA,MAC3B;AACA,aAAO;AAAA,IACX,GAPK;AAAA,IAQL,QAAQ,SAAS,WAAW,MAAM;AAAA,IAAC;AAAA,EACvC,CAAC;AACL;AArBgB;",
6
6
  "names": []
7
7
  }
package/dist/render.js CHANGED
@@ -1,7 +1,10 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- const elementData = /* @__PURE__ */ new WeakMap();
4
- const elementKeys = /* @__PURE__ */ new WeakMap();
1
+ import {
2
+ __name
3
+ } from "./chunk-7QVYU63E.js";
4
+
5
+ // src/render.ts
6
+ var elementData = /* @__PURE__ */ new WeakMap();
7
+ var elementKeys = /* @__PURE__ */ new WeakMap();
5
8
  function renderList(container, template, options) {
6
9
  const { data, key: getKey, update } = options;
7
10
  const existingByKey = /* @__PURE__ */ new Map();
@@ -40,8 +43,8 @@ function renderList(container, template, options) {
40
43
  }
41
44
  }
42
45
  __name(renderList, "renderList");
43
- let _tplCounter = 0;
44
- const tplIds = /* @__PURE__ */ new WeakMap();
46
+ var _tplCounter = 0;
47
+ var tplIds = /* @__PURE__ */ new WeakMap();
45
48
  function render(container, template, options) {
46
49
  renderList(container, template, {
47
50
  data: [
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/render.ts"],
4
4
  "sourcesContent": ["export type RenderListOptions<T, E extends Element = Element> = {\n data:readonly T[];\n key:(item:T, index:number) => string | number;\n update:(el:E, item:T) => void;\n}\n\nexport type RenderOptions<T, E extends Element = Element> = {\n data?:T;\n update?:(el:E, item:T) => void;\n}\n\nconst elementData = new WeakMap<Element, unknown>()\nconst elementKeys = new WeakMap<Element, string | number>()\n\nexport function renderList<T, E extends Element = Element> (\n container:Element,\n template:HTMLTemplateElement,\n options:RenderListOptions<T, E>\n):void {\n const { data, key: getKey, update } = options\n const existingByKey = new Map<string | number, E>()\n\n for (const child of Array.from(container.children)) {\n const key = elementKeys.get(child)\n if (key !== undefined) existingByKey.set(key, child as E)\n }\n\n const dataKeys = new Set(data.map(getKey))\n\n for (const child of Array.from(container.children)) {\n const key = elementKeys.get(child)\n if (key === undefined || !dataKeys.has(key)) {\n child.remove()\n elementKeys.delete(child)\n elementData.delete(child)\n }\n }\n\n let prev:E | null = null\n for (let i = 0; i < data.length; i++) {\n const item = data[i]\n const key = getKey(item, i)\n let el = existingByKey.get(key)\n\n if (!el) {\n el = (template.content.cloneNode(true) as Element)\n .firstElementChild as E\n elementKeys.set(el, key)\n }\n\n if (elementData.get(el) !== item) {\n update(el, item)\n elementData.set(el, item)\n }\n\n const expected = prev ?\n prev.nextElementSibling :\n container.firstElementChild\n\n if (el !== expected) {\n if (prev) prev.after(el)\n else container.prepend(el)\n }\n\n prev = el\n }\n}\n\nlet _tplCounter = 0\nconst tplIds = new WeakMap<HTMLTemplateElement, number>()\n\nexport function render<T, E extends Element = Element> (\n container:Element,\n template:HTMLTemplateElement,\n options?:RenderOptions<T, E>\n):void {\n renderList<T, E>(container, template, {\n data: [\n options !== undefined && 'data' in options ?\n options.data as T :\n {} as T\n ],\n key: () => {\n let id = tplIds.get(template)\n if (id === undefined) {\n id = _tplCounter++\n tplIds.set(template, id)\n }\n return id\n },\n update: options?.update ?? (() => {}),\n })\n}\n"],
5
- "mappings": ";;AAWA,MAAM,cAAc,oBAAI,QAA0B;AAClD,MAAM,cAAc,oBAAI,QAAkC;AAEnD,SAAS,WACZ,WACA,UACA,SACG;AACH,QAAM,EAAE,MAAM,KAAK,QAAQ,OAAO,IAAI;AACtC,QAAM,gBAAgB,oBAAI,IAAwB;AAElD,aAAW,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG;AAChD,UAAM,MAAM,YAAY,IAAI,KAAK;AACjC,QAAI,QAAQ,OAAW,eAAc,IAAI,KAAK,KAAU;AAAA,EAC5D;AAEA,QAAM,WAAW,IAAI,IAAI,KAAK,IAAI,MAAM,CAAC;AAEzC,aAAW,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG;AAChD,UAAM,MAAM,YAAY,IAAI,KAAK;AACjC,QAAI,QAAQ,UAAa,CAAC,SAAS,IAAI,GAAG,GAAG;AACzC,YAAM,OAAO;AACb,kBAAY,OAAO,KAAK;AACxB,kBAAY,OAAO,KAAK;AAAA,IAC5B;AAAA,EACJ;AAEA,MAAI,OAAgB;AACpB,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,UAAM,OAAO,KAAK,CAAC;AACnB,UAAM,MAAM,OAAO,MAAM,CAAC;AAC1B,QAAI,KAAK,cAAc,IAAI,GAAG;AAE9B,QAAI,CAAC,IAAI;AACL,WAAM,SAAS,QAAQ,UAAU,IAAI,EAChC;AACL,kBAAY,IAAI,IAAI,GAAG;AAAA,IAC3B;AAEA,QAAI,YAAY,IAAI,EAAE,MAAM,MAAM;AAC9B,aAAO,IAAI,IAAI;AACf,kBAAY,IAAI,IAAI,IAAI;AAAA,IAC5B;AAEA,UAAM,WAAW,OACb,KAAK,qBACL,UAAU;AAEd,QAAI,OAAO,UAAU;AACjB,UAAI,KAAM,MAAK,MAAM,EAAE;AAAA,UAClB,WAAU,QAAQ,EAAE;AAAA,IAC7B;AAEA,WAAO;AAAA,EACX;AACJ;AApDgB;AAsDhB,IAAI,cAAc;AAClB,MAAM,SAAS,oBAAI,QAAqC;AAEjD,SAAS,OACZ,WACA,UACA,SACG;AACH,aAAiB,WAAW,UAAU;AAAA,IAClC,MAAM;AAAA,MACF,YAAY,UAAa,UAAU,UAC/B,QAAQ,OACR,CAAC;AAAA,IACT;AAAA,IACA,KAAK,6BAAM;AACP,UAAI,KAAK,OAAO,IAAI,QAAQ;AAC5B,UAAI,OAAO,QAAW;AAClB,aAAK;AACL,eAAO,IAAI,UAAU,EAAE;AAAA,MAC3B;AACA,aAAO;AAAA,IACX,GAPK;AAAA,IAQL,QAAQ,SAAS,WAAW,MAAM;AAAA,IAAC;AAAA,EACvC,CAAC;AACL;AArBgB;",
5
+ "mappings": ";;;;;AAWA,IAAM,cAAc,oBAAI,QAA0B;AAClD,IAAM,cAAc,oBAAI,QAAkC;AAEnD,SAAS,WACZ,WACA,UACA,SACG;AACH,QAAM,EAAE,MAAM,KAAK,QAAQ,OAAO,IAAI;AACtC,QAAM,gBAAgB,oBAAI,IAAwB;AAElD,aAAW,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG;AAChD,UAAM,MAAM,YAAY,IAAI,KAAK;AACjC,QAAI,QAAQ,OAAW,eAAc,IAAI,KAAK,KAAU;AAAA,EAC5D;AAEA,QAAM,WAAW,IAAI,IAAI,KAAK,IAAI,MAAM,CAAC;AAEzC,aAAW,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG;AAChD,UAAM,MAAM,YAAY,IAAI,KAAK;AACjC,QAAI,QAAQ,UAAa,CAAC,SAAS,IAAI,GAAG,GAAG;AACzC,YAAM,OAAO;AACb,kBAAY,OAAO,KAAK;AACxB,kBAAY,OAAO,KAAK;AAAA,IAC5B;AAAA,EACJ;AAEA,MAAI,OAAgB;AACpB,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,UAAM,OAAO,KAAK,CAAC;AACnB,UAAM,MAAM,OAAO,MAAM,CAAC;AAC1B,QAAI,KAAK,cAAc,IAAI,GAAG;AAE9B,QAAI,CAAC,IAAI;AACL,WAAM,SAAS,QAAQ,UAAU,IAAI,EAChC;AACL,kBAAY,IAAI,IAAI,GAAG;AAAA,IAC3B;AAEA,QAAI,YAAY,IAAI,EAAE,MAAM,MAAM;AAC9B,aAAO,IAAI,IAAI;AACf,kBAAY,IAAI,IAAI,IAAI;AAAA,IAC5B;AAEA,UAAM,WAAW,OACb,KAAK,qBACL,UAAU;AAEd,QAAI,OAAO,UAAU;AACjB,UAAI,KAAM,MAAK,MAAM,EAAE;AAAA,UAClB,WAAU,QAAQ,EAAE;AAAA,IAC7B;AAEA,WAAO;AAAA,EACX;AACJ;AApDgB;AAsDhB,IAAI,cAAc;AAClB,IAAM,SAAS,oBAAI,QAAqC;AAEjD,SAAS,OACZ,WACA,UACA,SACG;AACH,aAAiB,WAAW,UAAU;AAAA,IAClC,MAAM;AAAA,MACF,YAAY,UAAa,UAAU,UAC/B,QAAQ,OACR,CAAC;AAAA,IACT;AAAA,IACA,KAAK,6BAAM;AACP,UAAI,KAAK,OAAO,IAAI,QAAQ;AAC5B,UAAI,OAAO,QAAW;AAClB,aAAK;AACL,eAAO,IAAI,UAAU,EAAE;AAAA,MAC3B;AACA,aAAO;AAAA,IACX,GAPK;AAAA,IAQL,QAAQ,SAAS,WAAW,MAAM;AAAA,IAAC;AAAA,EACvC,CAAC;AACL;AArBgB;",
6
6
  "names": []
7
7
  }
package/dist/util.cjs ADDED
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/util.ts
22
+ var util_exports = {};
23
+ __export(util_exports, {
24
+ coerceBoolean: () => coerceBoolean,
25
+ coerceJson: () => coerceJson,
26
+ coerceNumber: () => coerceNumber,
27
+ coerceString: () => coerceString,
28
+ runCleanups: () => runCleanups
29
+ });
30
+ module.exports = __toCommonJS(util_exports);
31
+ function coerceNumber(raw) {
32
+ return raw === null ? NaN : Number(raw);
33
+ }
34
+ __name(coerceNumber, "coerceNumber");
35
+ function coerceString(raw) {
36
+ return raw ?? "";
37
+ }
38
+ __name(coerceString, "coerceString");
39
+ function coerceBoolean(raw) {
40
+ return raw !== null;
41
+ }
42
+ __name(coerceBoolean, "coerceBoolean");
43
+ function coerceJson(raw) {
44
+ if (raw === null) return void 0;
45
+ try {
46
+ return JSON.parse(raw);
47
+ } catch {
48
+ return void 0;
49
+ }
50
+ }
51
+ __name(coerceJson, "coerceJson");
52
+ function runCleanups(fns) {
53
+ let firstError;
54
+ let caught = false;
55
+ for (const fn of fns) {
56
+ try {
57
+ fn();
58
+ } catch (err) {
59
+ if (!caught) {
60
+ firstError = err;
61
+ caught = true;
62
+ }
63
+ }
64
+ }
65
+ if (caught) throw firstError;
66
+ }
67
+ __name(runCleanups, "runCleanups");
68
+ //# sourceMappingURL=util.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/util.ts"],
4
+ "sourcesContent": ["import type { Cleanup } from './types.js'\n\n/**\n * Coerce a raw attribute string to a number.\n * Returns NaN if the value cannot be parsed.\n */\nexport function coerceNumber (raw:string | null):number {\n return raw === null ? NaN : Number(raw)\n}\n\n/**\n * Coerce a raw attribute string to a string.\n * Converts null to empty string.\n */\nexport function coerceString (raw:string | null):string {\n return raw ?? ''\n}\n\n/**\n * Coerce a raw attribute string to a boolean.\n * Absence (null) is false; presence of any value (including '') is true.\n */\nexport function coerceBoolean (raw:string | null):boolean {\n return raw !== null\n}\n\n/**\n * Coerce a raw attribute string to a parsed JSON value.\n * Returns undefined if the value is null or cannot be parsed.\n */\nexport function coerceJson<T = unknown> (raw:string | null):T | undefined {\n if (raw === null) return undefined\n try {\n return JSON.parse(raw) as T\n } catch {\n return undefined\n }\n}\n\n/**\n * Run every cleanup in the list, ensuring all run even if some throw.\n * After all have run, re-throws the first error encountered.\n */\nexport function runCleanups (fns:Cleanup[]):void {\n let firstError:unknown\n let caught = false\n for (const fn of fns) {\n try {\n fn()\n } catch (err) {\n if (!caught) {\n firstError = err\n caught = true\n }\n }\n }\n if (caught) throw firstError\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,SAAS,aAAc,KAA0B;AACpD,SAAO,QAAQ,OAAO,MAAM,OAAO,GAAG;AAC1C;AAFgB;AAQT,SAAS,aAAc,KAA0B;AACpD,SAAO,OAAO;AAClB;AAFgB;AAQT,SAAS,cAAe,KAA2B;AACtD,SAAO,QAAQ;AACnB;AAFgB;AAQT,SAAS,WAAyB,KAAiC;AACtE,MAAI,QAAQ,KAAM,QAAO;AACzB,MAAI;AACA,WAAO,KAAK,MAAM,GAAG;AAAA,EACzB,QAAQ;AACJ,WAAO;AAAA,EACX;AACJ;AAPgB;AAaT,SAAS,YAAa,KAAoB;AAC7C,MAAI;AACJ,MAAI,SAAS;AACb,aAAW,MAAM,KAAK;AAClB,QAAI;AACA,SAAG;AAAA,IACP,SAAS,KAAK;AACV,UAAI,CAAC,QAAQ;AACT,qBAAa;AACb,iBAAS;AAAA,MACb;AAAA,IACJ;AAAA,EACJ;AACA,MAAI,OAAQ,OAAM;AACtB;AAdgB;",
6
+ "names": []
7
+ }
package/dist/util.js ADDED
@@ -0,0 +1,16 @@
1
+ import {
2
+ coerceBoolean,
3
+ coerceJson,
4
+ coerceNumber,
5
+ coerceString,
6
+ runCleanups
7
+ } from "./chunk-E7ZGOHL3.js";
8
+ import "./chunk-7QVYU63E.js";
9
+ export {
10
+ coerceBoolean,
11
+ coerceJson,
12
+ coerceNumber,
13
+ coerceString,
14
+ runCleanups
15
+ };
16
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ var l=Object.defineProperty;var r=(n,e)=>l(n,"name",{value:e,configurable:!0});function c(n){return n===null?NaN:Number(n)}r(c,"coerceNumber");function f(n){return n??""}r(f,"coerceString");function s(n){return n!==null}r(s,"coerceBoolean");function p(n){if(n!==null)try{return JSON.parse(n)}catch{return}}r(p,"coerceJson");function a(n){let e,t=!1;for(let u of n)try{u()}catch(o){t||(e=o,t=!0)}if(t)throw e}r(a,"runCleanups");export{s as coerceBoolean,p as coerceJson,c as coerceNumber,f as coerceString,a as runCleanups};
2
+ //# sourceMappingURL=util.min.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/util.ts"],
4
+ "sourcesContent": ["import type { Cleanup } from './types.js'\n\n/**\n * Coerce a raw attribute string to a number.\n * Returns NaN if the value cannot be parsed.\n */\nexport function coerceNumber (raw:string | null):number {\n return raw === null ? NaN : Number(raw)\n}\n\n/**\n * Coerce a raw attribute string to a string.\n * Converts null to empty string.\n */\nexport function coerceString (raw:string | null):string {\n return raw ?? ''\n}\n\n/**\n * Coerce a raw attribute string to a boolean.\n * Absence (null) is false; presence of any value (including '') is true.\n */\nexport function coerceBoolean (raw:string | null):boolean {\n return raw !== null\n}\n\n/**\n * Coerce a raw attribute string to a parsed JSON value.\n * Returns undefined if the value is null or cannot be parsed.\n */\nexport function coerceJson<T = unknown> (raw:string | null):T | undefined {\n if (raw === null) return undefined\n try {\n return JSON.parse(raw) as T\n } catch {\n return undefined\n }\n}\n\n/**\n * Run every cleanup in the list, ensuring all run even if some throw.\n * After all have run, re-throws the first error encountered.\n */\nexport function runCleanups (fns:Cleanup[]):void {\n let firstError:unknown\n let caught = false\n for (const fn of fns) {\n try {\n fn()\n } catch (err) {\n if (!caught) {\n firstError = err\n caught = true\n }\n }\n }\n if (caught) throw firstError\n}\n"],
5
+ "mappings": "+EAMO,SAASA,EAAcC,EAA0B,CACpD,OAAOA,IAAQ,KAAO,IAAM,OAAOA,CAAG,CAC1C,CAFgBC,EAAAF,EAAA,gBAQT,SAASG,EAAcF,EAA0B,CACpD,OAAOA,GAAO,EAClB,CAFgBC,EAAAC,EAAA,gBAQT,SAASC,EAAeH,EAA2B,CACtD,OAAOA,IAAQ,IACnB,CAFgBC,EAAAE,EAAA,iBAQT,SAASC,EAAyBJ,EAAiC,CACtE,GAAIA,IAAQ,KACZ,GAAI,CACA,OAAO,KAAK,MAAMA,CAAG,CACzB,MAAQ,CACJ,MACJ,CACJ,CAPgBC,EAAAG,EAAA,cAaT,SAASC,EAAaC,EAAoB,CAC7C,IAAIC,EACAC,EAAS,GACb,QAAWC,KAAMH,EACb,GAAI,CACAG,EAAG,CACP,OAASC,EAAK,CACLF,IACDD,EAAaG,EACbF,EAAS,GAEjB,CAEJ,GAAIA,EAAQ,MAAMD,CACtB,CAdgBN,EAAAI,EAAA",
6
+ "names": ["coerceNumber", "raw", "__name", "coerceString", "coerceBoolean", "coerceJson", "runCleanups", "fns", "firstError", "caught", "fn", "err"]
7
+ }
package/package.json CHANGED
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "name": "microtags",
3
3
  "type": "module",
4
- "version": "0.0.1",
5
- "sideEffects": false,
4
+ "version": "0.0.3",
5
+ "sideEffects": [
6
+ "./example/**"
7
+ ],
6
8
  "main": "dist/index.js",
7
9
  "files": [
8
10
  "./dist/*"
@@ -12,15 +14,18 @@
12
14
  "typecheck": "tsc --noEmit -p tsconfig.typecheck.json",
13
15
  "test": "npm run typecheck && esbuild --bundle ./test/index.ts | tapout",
14
16
  "test:ssr": "npx esbuild ./test/ssr.ts --bundle --format=cjs --platform=node | node",
15
- "build-cjs": "esbuild src/index.ts src/render.ts src/context.ts --format=cjs --keep-names --tsconfig=tsconfig.build.json --outdir=./dist --out-extension:.js=.cjs --sourcemap",
16
- "build-esm": "esbuild src/index.ts src/render.ts src/context.ts --format=esm --metafile=dist/meta.json --keep-names --tsconfig=tsconfig.build.json --outdir=./dist --sourcemap && tsc --emitDeclarationOnly --project tsconfig.build.json --outDir dist",
17
- "build-esm:min": "esbuild src/index.ts src/render.ts src/context.ts --format=esm --keep-names --bundle --tsconfig=tsconfig.build.json --minify --out-extension:.js=.min.js --outdir=./dist --sourcemap",
18
- "build-example": "mkdir -p ./public && rm -rf ./public/* && NODE_ENV=development vite --mode staging --base=\"/microtags\" build",
17
+ "test:importmap": "esbuild ./test/importmap/run.ts --bundle --platform=node --format=cjs --packages=external | node",
18
+ "build-cjs": "esbuild src/index.ts src/render.ts src/context.ts src/util.ts --bundle --packages=external --format=cjs --keep-names --tsconfig=tsconfig.build.json --outdir=./dist --out-extension:.js=.cjs --sourcemap",
19
+ "build-esm": "esbuild src/index.ts src/render.ts src/context.ts src/util.ts --bundle --packages=external --splitting --format=esm --metafile=dist/meta.json --keep-names --tsconfig=tsconfig.build.json --outdir=./dist --sourcemap && tsc --emitDeclarationOnly --project tsconfig.build.json --outDir dist",
20
+ "build-esm:min": "esbuild src/index.ts src/render.ts src/context.ts src/util.ts --format=esm --keep-names --bundle --tsconfig=tsconfig.build.json --minify --out-extension:.js=.min.js --outdir=./dist --sourcemap",
21
+ "build-example": "npm run build-html && mkdir -p ./public && rm -rf ./public/* && NODE_ENV=development vite --mode staging --base=\"/microtags\" build",
19
22
  "build-docs": "typedoc --tsconfig tsconfig.build.json ./src/index.ts",
20
23
  "build": "mkdir -p ./dist && rm -rf ./dist/* && npm run build-cjs && npm run build-esm && npm run build-esm:min",
21
- "start": "vite",
24
+ "build-html": "npm run --silent ssr > example/index.html",
25
+ "size": "size-limit",
26
+ "start": "npm run build-html && vite",
22
27
  "ssr": "esbuild ./example/ssr.ts --bundle --platform=node --format=cjs | node ",
23
- "toc": "markdown-toc --maxdepth 3 -i README.md",
28
+ "toc": "markdown-toc --maxdepth 4 -i README.md",
24
29
  "preversion": "npm run lint",
25
30
  "version": "npm run toc && auto-changelog -p --template keepachangelog --breaking-pattern 'BREAKING CHANGE:' && git add CHANGELOG.md README.md",
26
31
  "postversion": "git push --follow-tags && npm publish",
@@ -32,6 +37,10 @@
32
37
  "import": "./dist/index.js",
33
38
  "require": "./dist/index.cjs"
34
39
  },
40
+ "./min": {
41
+ "types": "./dist/index.d.ts",
42
+ "import": "./dist/index.min.js"
43
+ },
35
44
  "./render": {
36
45
  "types": "./dist/render.d.ts",
37
46
  "import": "./dist/render.js",
@@ -48,7 +57,12 @@
48
57
  "require": "./dist/util.cjs"
49
58
  }
50
59
  },
60
+ "dependencies": {
61
+ "@standard-schema/spec": "^1.1.0",
62
+ "alien-signals": "^3.2.1"
63
+ },
51
64
  "devDependencies": {
65
+ "@size-limit/preset-small-lib": "^12.1.0",
52
66
  "@substrate-system/debug": "^0.9.64",
53
67
  "@substrate-system/dom": "^0.1.13",
54
68
  "@substrate-system/tapout": "^0.0.38",
@@ -62,15 +76,13 @@
62
76
  "markdown-toc": "^1.2.0",
63
77
  "nanotags": "^0.15.2",
64
78
  "newneostandard": "^0.14.1",
79
+ "size-limit": "^12.1.0",
65
80
  "tap-spec": "^5.0.0",
66
81
  "typedoc": "^0.28.1",
67
82
  "typescript": "^6.0.3",
68
- "vite": "^8.0.5"
83
+ "vite": "^8.0.5",
84
+ "zod": "^4.4.3"
69
85
  },
70
86
  "author": "nichoth <nichoth@nichoth.com> (https://nichoth.com)",
71
- "license": "SEE LICENSE IN LICENSE",
72
- "dependencies": {
73
- "@standard-schema/spec": "^1.1.0",
74
- "alien-signals": "^3.2.1"
75
- }
87
+ "license": "SEE LICENSE IN LICENSE"
76
88
  }