microtags 0.0.0 → 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/README.md +343 -46
- 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/chunk-7QVYU63E.js +7 -0
- package/dist/chunk-7QVYU63E.js.map +7 -0
- package/dist/chunk-CCYWRJW6.js +98 -0
- package/dist/chunk-CCYWRJW6.js.map +7 -0
- package/dist/chunk-E7ZGOHL3.js +51 -0
- package/dist/chunk-E7ZGOHL3.js.map +7 -0
- package/dist/context.cjs +10 -4
- package/dist/context.cjs.map +3 -3
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +7 -63
- package/dist/context.js.map +3 -3
- package/dist/context.min.js.map +2 -2
- package/dist/factory.d.ts.map +1 -1
- package/dist/index.cjs +416 -5
- package/dist/index.cjs.map +3 -3
- package/dist/index.js +345 -2
- package/dist/index.js.map +3 -3
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +4 -4
- package/dist/meta.json +277 -27
- package/dist/reactivity.d.ts.map +1 -1
- package/dist/render.cjs +6 -4
- package/dist/render.cjs.map +2 -2
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +9 -6
- package/dist/render.js.map +2 -2
- 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/util.cjs +68 -0
- package/dist/util.cjs.map +7 -0
- package/dist/{utils.d.ts → util.d.ts} +1 -1
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +16 -0
- package/dist/util.js.map +7 -0
- package/dist/util.min.js +2 -0
- package/dist/util.min.js.map +7 -0
- package/package.json +38 -19
- package/dist/utils.d.ts.map +0 -1
package/dist/reactivity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactivity.d.ts","sourceRoot":"","sources":["../src/reactivity.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,MAAM,EACN,WAAW,EAEd,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA;AAEtC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"reactivity.d.ts","sourceRoot":"","sources":["../src/reactivity.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,MAAM,EACN,WAAW,EAEd,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA;AAEtC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAG,EAAE,EAAC,MAAM,CAAC,GAAE,CAAC,CAO1C;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAG,GAAG,EAAC,MAAM,CAAC,CAAC,CAAC,GAAE,CAAC,CAExC"}
|
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
|
-
|
|
27
|
-
|
|
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
|
-
|
|
67
|
-
|
|
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: [
|
package/dist/render.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/render.ts"],
|
|
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}
|
|
5
|
-
"mappings": "
|
|
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,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.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI;IAC5D,IAAI,EAAC,SAAS,CAAC,EAAE,CAAC;IAClB,GAAG,EAAC,CAAC,IAAI,EAAC,CAAC,EAAE,KAAK,EAAC,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC;IAC9C,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,EAAE,IAAI,EAAC,CAAC,KAAK,IAAI,CAAC;CACjC,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI;IAC5D,IAAI,EAAC,SAAS,CAAC,EAAE,CAAC;IAClB,GAAG,EAAC,CAAC,IAAI,EAAC,CAAC,EAAE,KAAK,EAAC,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC;IAC9C,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,EAAE,IAAI,EAAC,CAAC,KAAK,IAAI,CAAC;CACjC,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI;IACxD,IAAI,CAAC,EAAC,CAAC,CAAC;IACR,MAAM,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,EAAE,IAAI,EAAC,CAAC,KAAK,IAAI,CAAC;CAClC,CAAA;AAKD,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EACrD,SAAS,EAAC,OAAO,EACjB,QAAQ,EAAC,mBAAmB,EAC5B,OAAO,EAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,GACjC,IAAI,CAgDL;AAKD,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EACjD,SAAS,EAAC,OAAO,EACjB,QAAQ,EAAC,mBAAmB,EAC5B,OAAO,CAAC,EAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAC9B,IAAI,CAiBL"}
|
package/dist/render.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
44
|
-
|
|
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: [
|
package/dist/render.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/render.ts"],
|
|
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}
|
|
5
|
-
"mappings": "
|
|
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,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.min.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/render.ts"],
|
|
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}
|
|
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
5
|
"mappings": "+EAWA,IAAMA,EAAc,IAAI,QAClBC,EAAc,IAAI,QAEjB,SAASC,EACZC,EACAC,EACAC,EACG,CACH,GAAM,CAAE,KAAAC,EAAM,IAAKC,EAAQ,OAAAC,CAAO,EAAIH,EAChCI,EAAgB,IAAI,IAE1B,QAAWC,KAAS,MAAM,KAAKP,EAAU,QAAQ,EAAG,CAChD,IAAMQ,EAAMV,EAAY,IAAIS,CAAK,EAC7BC,IAAQ,QAAWF,EAAc,IAAIE,EAAKD,CAAU,CAC5D,CAEA,IAAME,EAAW,IAAI,IAAIN,EAAK,IAAIC,CAAM,CAAC,EAEzC,QAAWG,KAAS,MAAM,KAAKP,EAAU,QAAQ,EAAG,CAChD,IAAMQ,EAAMV,EAAY,IAAIS,CAAK,GAC7BC,IAAQ,QAAa,CAACC,EAAS,IAAID,CAAG,KACtCD,EAAM,OAAO,EACbT,EAAY,OAAOS,CAAK,EACxBV,EAAY,OAAOU,CAAK,EAEhC,CAEA,IAAIG,EAAgB,KACpB,QAASC,EAAI,EAAGA,EAAIR,EAAK,OAAQQ,IAAK,CAClC,IAAMC,EAAOT,EAAKQ,CAAC,EACbH,EAAMJ,EAAOQ,EAAMD,CAAC,EACtBE,EAAKP,EAAc,IAAIE,CAAG,EAEzBK,IACDA,EAAMZ,EAAS,QAAQ,UAAU,EAAI,EAChC,kBACLH,EAAY,IAAIe,EAAIL,CAAG,GAGvBX,EAAY,IAAIgB,CAAE,IAAMD,IACxBP,EAAOQ,EAAID,CAAI,EACff,EAAY,IAAIgB,EAAID,CAAI,GAG5B,IAAME,EAAWJ,EACbA,EAAK,mBACLV,EAAU,kBAEVa,IAAOC,IACHJ,EAAMA,EAAK,MAAMG,CAAE,EAClBb,EAAU,QAAQa,CAAE,GAG7BH,EAAOG,CACX,CACJ,CApDgBE,EAAAhB,EAAA,cAsDhB,IAAIiB,EAAc,EACZC,EAAS,IAAI,QAEZ,SAASC,EACZlB,EACAC,EACAC,EACG,CACHH,EAAiBC,EAAWC,EAAU,CAClC,KAAM,CACFC,IAAY,QAAa,SAAUA,EAC/BA,EAAQ,KACR,CAAC,CACT,EACA,IAAKa,EAAA,IAAM,CACP,IAAII,EAAKF,EAAO,IAAIhB,CAAQ,EAC5B,OAAIkB,IAAO,SACPA,EAAKH,IACLC,EAAO,IAAIhB,EAAUkB,CAAE,GAEpBA,CACX,EAPK,OAQL,OAAQjB,GAAS,SAAW,IAAM,CAAC,EACvC,CAAC,CACL,CArBgBa,EAAAG,EAAA",
|
|
6
6
|
"names": ["elementData", "elementKeys", "renderList", "container", "template", "options", "data", "getKey", "update", "existingByKey", "child", "key", "dataKeys", "prev", "i", "item", "el", "expected", "__name", "_tplCounter", "tplIds", "render", "id"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-context.d.ts","sourceRoot":"","sources":["../src/setup-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,YAAY,EACZ,OAAO,
|
|
1
|
+
{"version":3,"file":"setup-context.d.ts","sourceRoot":"","sources":["../src/setup-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,YAAY,EACZ,OAAO,EAEP,YAAY,EACZ,OAAO,EAEV,MAAM,YAAY,CAAA;AAEnB;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC5B,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAE/D,IAAI,EAAC,WAAW,EAChB,KAAK,EAAC,YAAY,CAAC,KAAK,CAAC,EACzB,IAAI,EAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC,EACxC,QAAQ,EAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAC,OAAO,EAAE,GACpB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CA2E9B"}
|
package/dist/types.d.ts
CHANGED
|
@@ -42,22 +42,48 @@ export type ContextValue<Tok> = Tok extends ContextToken<infer T> ? T : never;
|
|
|
42
42
|
export type ContextsMap<Tokens extends Record<string, ContextToken<unknown>>> = {
|
|
43
43
|
[K in keyof Tokens]: ContextValue<Tokens[K]> | undefined;
|
|
44
44
|
};
|
|
45
|
-
/**
|
|
46
|
-
|
|
45
|
+
/**
|
|
46
|
+
* The shape every ref marker shares. Used as the constraint for `withRefs`
|
|
47
|
+
* and `RefsMap`. It deliberately omits the phantom `_type`, so it provides
|
|
48
|
+
* no inference site that could pin the element type during inference — this
|
|
49
|
+
* is what lets an un-annotated `r.one()` fall back to the `HTMLElement`
|
|
50
|
+
* default instead of collapsing to `Element`.
|
|
51
|
+
*/
|
|
52
|
+
export interface RefDef {
|
|
53
|
+
readonly _microtag: 'ref:one' | 'ref:all';
|
|
54
|
+
readonly selector?: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Marker: a single element. Resolved by the optional CSS `selector`,
|
|
58
|
+
* or by `[data-ref="<key>"]` when no selector is given. The phantom `T`
|
|
59
|
+
* carries the resolved element type to `RefsMap`.
|
|
60
|
+
*/
|
|
61
|
+
export interface SingleRefDef<T extends HTMLElement = HTMLElement> extends RefDef {
|
|
47
62
|
readonly _microtag: 'ref:one';
|
|
63
|
+
/** Phantom only: carries the element type for RefsMap. Never set. */
|
|
64
|
+
readonly _type?: T;
|
|
48
65
|
}
|
|
49
|
-
/**
|
|
50
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Marker: all matching elements. Resolved by the optional CSS `selector`,
|
|
68
|
+
* or by `[data-ref="<key>"]` when no selector is given. The phantom `T`
|
|
69
|
+
* carries the resolved element type to `RefsMap`.
|
|
70
|
+
*/
|
|
71
|
+
export interface MultipleRefDef<T extends HTMLElement = HTMLElement> extends RefDef {
|
|
51
72
|
readonly _microtag: 'ref:all';
|
|
73
|
+
/** Phantom only: carries the element type for RefsMap. Never set. */
|
|
74
|
+
readonly _type?: T;
|
|
52
75
|
}
|
|
53
|
-
/** Union of ref definition markers. */
|
|
54
|
-
export type RefDef = SingleRefDef | MultipleRefDef;
|
|
55
76
|
/** Resolve a record of RefDefs to their DOM types. */
|
|
56
77
|
export type RefsMap<Defs extends Record<string, RefDef>> = {
|
|
57
|
-
[K in keyof Defs]: Defs[K] extends MultipleRefDef ?
|
|
78
|
+
[K in keyof Defs]: Defs[K] extends MultipleRefDef<infer T> ? T[] : Defs[K] extends SingleRefDef<infer T> ? T : never;
|
|
58
79
|
};
|
|
59
80
|
/** A teardown function registered via ctx.onCleanup or ctx.on. */
|
|
60
81
|
export type Cleanup = () => void;
|
|
82
|
+
/** Options for ctx.bind. Omit `event` for a one-way binding. */
|
|
83
|
+
export type BindOptions = {
|
|
84
|
+
prop?: string;
|
|
85
|
+
event?: string;
|
|
86
|
+
};
|
|
61
87
|
/**
|
|
62
88
|
* The setup context (ctx) passed to every component's setup() callback.
|
|
63
89
|
* This is the shape declaration so factory.ts and define.ts can typecheck
|
|
@@ -86,10 +112,19 @@ export interface SetupContext<Props extends Record<string, PropDef> = Record<str
|
|
|
86
112
|
*/
|
|
87
113
|
effect(fn: () => void | Cleanup): void;
|
|
88
114
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
115
|
+
* Bind a signal to a DOM element. The signal is the source of
|
|
116
|
+
* truth: the element property is set from the signal on bind and
|
|
117
|
+
* on every change, auto-cleaned on disconnect.
|
|
118
|
+
*
|
|
119
|
+
* With no options the control type is auto-detected and the
|
|
120
|
+
* binding is two-way (user input flows back into the signal).
|
|
121
|
+
* With an options object, `prop` defaults to the auto-detected
|
|
122
|
+
* property and `event` is the write-back event; omit `event` for
|
|
123
|
+
* a one-way binding. A read-only getter (`() => T`) is also
|
|
124
|
+
* accepted as the source for a one-way derived value — pass it
|
|
125
|
+
* with options and omit `event`.
|
|
91
126
|
*/
|
|
92
|
-
bind<T>(
|
|
127
|
+
bind<T>(signal: Signal<T>, element: Element, options?: BindOptions): void;
|
|
93
128
|
/** Register custom teardown to run on disconnect. */
|
|
94
129
|
onCleanup(fn: Cleanup): void;
|
|
95
130
|
/** Read an optional context value. */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D;;;;GAIG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI;IACpB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
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
|
+
}
|
|
@@ -24,4 +24,4 @@ export declare function coerceJson<T = unknown>(raw: string | null): T | undefin
|
|
|
24
24
|
* After all have run, re-throws the first error encountered.
|
|
25
25
|
*/
|
|
26
26
|
export declare function runCleanups(fns: Cleanup[]): void;
|
|
27
|
-
//# sourceMappingURL=
|
|
27
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC;;;GAGG;AACH,wBAAgB,YAAY,CAAE,GAAG,EAAC,MAAM,GAAG,IAAI,GAAE,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAE,GAAG,EAAC,MAAM,GAAG,IAAI,GAAE,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAE,GAAG,EAAC,MAAM,GAAG,IAAI,GAAE,OAAO,CAExD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAG,GAAG,EAAC,MAAM,GAAG,IAAI,GAAE,CAAC,GAAG,SAAS,CAOxE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAC,OAAO,EAAE,GAAE,IAAI,CAc/C"}
|
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
|
package/dist/util.js.map
ADDED
package/dist/util.min.js
ADDED
|
@@ -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,23 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "microtags",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
5
|
-
"sideEffects":
|
|
4
|
+
"version": "0.0.3",
|
|
5
|
+
"sideEffects": [
|
|
6
|
+
"./example/**"
|
|
7
|
+
],
|
|
6
8
|
"main": "dist/index.js",
|
|
7
9
|
"files": [
|
|
8
10
|
"./dist/*"
|
|
9
11
|
],
|
|
10
12
|
"scripts": {
|
|
11
13
|
"lint": "eslint \"./**/*.{ts,js}\"",
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"build-
|
|
14
|
+
"typecheck": "tsc --noEmit -p tsconfig.typecheck.json",
|
|
15
|
+
"test": "npm run typecheck && esbuild --bundle ./test/index.ts | tapout",
|
|
16
|
+
"test:ssr": "npx esbuild ./test/ssr.ts --bundle --format=cjs --platform=node | node",
|
|
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",
|
|
17
22
|
"build-docs": "typedoc --tsconfig tsconfig.build.json ./src/index.ts",
|
|
18
23
|
"build": "mkdir -p ./dist && rm -rf ./dist/* && npm run build-cjs && npm run build-esm && npm run build-esm:min",
|
|
19
|
-
"
|
|
20
|
-
"
|
|
24
|
+
"build-html": "npm run --silent ssr > example/index.html",
|
|
25
|
+
"size": "size-limit",
|
|
26
|
+
"start": "npm run build-html && vite",
|
|
27
|
+
"ssr": "esbuild ./example/ssr.ts --bundle --platform=node --format=cjs | node ",
|
|
28
|
+
"toc": "markdown-toc --maxdepth 4 -i README.md",
|
|
21
29
|
"preversion": "npm run lint",
|
|
22
30
|
"version": "npm run toc && auto-changelog -p --template keepachangelog --breaking-pattern 'BREAKING CHANGE:' && git add CHANGELOG.md README.md",
|
|
23
31
|
"postversion": "git push --follow-tags && npm publish",
|
|
@@ -29,6 +37,10 @@
|
|
|
29
37
|
"import": "./dist/index.js",
|
|
30
38
|
"require": "./dist/index.cjs"
|
|
31
39
|
},
|
|
40
|
+
"./min": {
|
|
41
|
+
"types": "./dist/index.d.ts",
|
|
42
|
+
"import": "./dist/index.min.js"
|
|
43
|
+
},
|
|
32
44
|
"./render": {
|
|
33
45
|
"types": "./dist/render.d.ts",
|
|
34
46
|
"import": "./dist/render.js",
|
|
@@ -38,32 +50,39 @@
|
|
|
38
50
|
"types": "./dist/context.d.ts",
|
|
39
51
|
"import": "./dist/context.js",
|
|
40
52
|
"require": "./dist/context.cjs"
|
|
53
|
+
},
|
|
54
|
+
"./util": {
|
|
55
|
+
"types": "./dist/util.d.ts",
|
|
56
|
+
"import": "./dist/util.js",
|
|
57
|
+
"require": "./dist/util.cjs"
|
|
41
58
|
}
|
|
42
59
|
},
|
|
60
|
+
"dependencies": {
|
|
61
|
+
"@standard-schema/spec": "^1.1.0",
|
|
62
|
+
"alien-signals": "^3.2.1"
|
|
63
|
+
},
|
|
43
64
|
"devDependencies": {
|
|
65
|
+
"@size-limit/preset-small-lib": "^12.1.0",
|
|
44
66
|
"@substrate-system/debug": "^0.9.64",
|
|
45
67
|
"@substrate-system/dom": "^0.1.13",
|
|
46
68
|
"@substrate-system/tapout": "^0.0.38",
|
|
47
69
|
"@substrate-system/tapzero": "^0.10.16",
|
|
48
|
-
"@
|
|
49
|
-
"@typescript-eslint/parser": "^8.7.0",
|
|
70
|
+
"@types/node": "^26.0.1",
|
|
50
71
|
"auto-changelog": "^2.4.0",
|
|
51
72
|
"browserslist": "^4.28.4",
|
|
52
73
|
"esbuild": "^0.28.0",
|
|
53
|
-
"eslint": "^
|
|
54
|
-
"eslint-config-standard": "^17.1.0",
|
|
74
|
+
"eslint": "^10.6.0",
|
|
55
75
|
"lightningcss": "^1.32.0",
|
|
56
76
|
"markdown-toc": "^1.2.0",
|
|
57
77
|
"nanotags": "^0.15.2",
|
|
78
|
+
"newneostandard": "^0.14.1",
|
|
79
|
+
"size-limit": "^12.1.0",
|
|
58
80
|
"tap-spec": "^5.0.0",
|
|
59
81
|
"typedoc": "^0.28.1",
|
|
60
82
|
"typescript": "^6.0.3",
|
|
61
|
-
"vite": "^8.0.5"
|
|
83
|
+
"vite": "^8.0.5",
|
|
84
|
+
"zod": "^4.4.3"
|
|
62
85
|
},
|
|
63
86
|
"author": "nichoth <nichoth@nichoth.com> (https://nichoth.com)",
|
|
64
|
-
"license": "SEE LICENSE IN LICENSE"
|
|
65
|
-
"dependencies": {
|
|
66
|
-
"@standard-schema/spec": "^1.1.0",
|
|
67
|
-
"alien-signals": "^3.2.1"
|
|
68
|
-
}
|
|
87
|
+
"license": "SEE LICENSE IN LICENSE"
|
|
69
88
|
}
|
package/dist/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC;;;GAGG;AACH,wBAAgB,YAAY,CAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAG,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,CAO1E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAcjD"}
|