sigmx 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -41
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +2 -2
- package/dist/kernel/compile.js.map +2 -2
- package/dist/kernel/contracts.d.ts +1 -8
- package/dist/kernel/index.d.ts +10 -11
- package/dist/kernel/index.js +10 -7
- package/dist/kernel/index.js.map +3 -3
- package/dist/kernel/precompile.d.ts +0 -2
- package/dist/kernel/precompile.js +11 -4
- package/dist/kernel/precompile.js.map +2 -2
- package/dist/kernel/precompiled.js.map +2 -2
- package/dist/kernel/reactive.d.ts +6 -10
- package/dist/kernel/reactive.js +4 -8
- package/dist/kernel/reactive.js.map +2 -2
- package/dist/kernel/runtime.js +19 -7
- package/dist/kernel/runtime.js.map +2 -2
- package/dist/kernel/scan.d.ts +1 -10
- package/dist/kernel/scan.js +24 -7
- package/dist/kernel/scan.js.map +2 -2
- package/dist/kernel/state.d.ts +1 -5
- package/dist/kernel/state.js +49 -22
- package/dist/kernel/state.js.map +2 -2
- package/dist/kernel/strict-csp.js.map +1 -1
- package/dist/lib/casing.js.map +2 -2
- package/dist/lib/objects.d.ts +0 -1
- package/dist/lib/objects.js +4 -1
- package/dist/lib/objects.js.map +2 -2
- package/dist/lib/schedule.d.ts +0 -2
- package/dist/lib/schedule.js.map +2 -2
- package/dist/lib/sse.d.ts +0 -1
- package/dist/lib/sse.js +3 -2
- package/dist/lib/sse.js.map +2 -2
- package/dist/plugins/directives/attribute-sync.js.map +1 -1
- package/dist/plugins/directives/boost.js +2 -1
- package/dist/plugins/directives/boost.js.map +2 -2
- package/dist/plugins/directives/busy-flag.js.map +1 -1
- package/dist/plugins/directives/class-toggle.js.map +1 -1
- package/dist/plugins/directives/cloak.js.map +1 -1
- package/dist/plugins/directives/collapse.js.map +1 -1
- package/dist/plugins/directives/declare.js.map +1 -1
- package/dist/plugins/directives/derive.js +4 -1
- package/dist/plugins/directives/derive.js.map +2 -2
- package/dist/plugins/directives/element-ref.js.map +1 -1
- package/dist/plugins/directives/event-listener.js +4 -1
- package/dist/plugins/directives/event-listener.js.map +2 -2
- package/dist/plugins/directives/frame-loop.js.map +1 -1
- package/dist/plugins/directives/html.js.map +1 -1
- package/dist/plugins/directives/inline-style.js +1 -1
- package/dist/plugins/directives/inline-style.js.map +2 -2
- package/dist/plugins/directives/mask.js.map +1 -1
- package/dist/plugins/directives/media-query.js +2 -1
- package/dist/plugins/directives/media-query.js.map +2 -2
- package/dist/plugins/directives/on-mount.js +4 -1
- package/dist/plugins/directives/on-mount.js.map +2 -2
- package/dist/plugins/directives/patch-listener.js.map +1 -1
- package/dist/plugins/directives/remove-me.js.map +1 -1
- package/dist/plugins/directives/scroll-to.js.map +1 -1
- package/dist/plugins/directives/size-watch.js.map +1 -1
- package/dist/plugins/directives/state-dump.js.map +1 -1
- package/dist/plugins/directives/storage-sync.js.map +1 -1
- package/dist/plugins/directives/teleport.js.map +1 -1
- package/dist/plugins/directives/text-content.js.map +1 -1
- package/dist/plugins/directives/timer.js.map +1 -1
- package/dist/plugins/directives/transition-name.js.map +1 -1
- package/dist/plugins/directives/transition.js.map +1 -1
- package/dist/plugins/directives/trap.js +8 -2
- package/dist/plugins/directives/trap.js.map +2 -2
- package/dist/plugins/directives/tween.js.map +2 -2
- package/dist/plugins/directives/two-way-bind.js +37 -7
- package/dist/plugins/directives/two-way-bind.js.map +2 -2
- package/dist/plugins/directives/url-params.js +2 -1
- package/dist/plugins/directives/url-params.js.map +2 -2
- package/dist/plugins/directives/url-replace.js.map +1 -1
- package/dist/plugins/directives/validity.js.map +1 -1
- package/dist/plugins/directives/viewport.js +4 -1
- package/dist/plugins/directives/viewport.js.map +2 -2
- package/dist/plugins/directives/visibility.js.map +1 -1
- package/dist/plugins/directives/watch.d.ts +0 -1
- package/dist/plugins/directives/watch.js.map +2 -2
- package/dist/plugins/functions/bulk-set.js +5 -3
- package/dist/plugins/functions/bulk-set.js.map +2 -2
- package/dist/plugins/functions/bulk-toggle.js +5 -3
- package/dist/plugins/functions/bulk-toggle.js.map +2 -2
- package/dist/plugins/functions/confirm.js.map +1 -1
- package/dist/plugins/functions/copy-text.js.map +1 -1
- package/dist/plugins/functions/dispatch.js.map +2 -2
- package/dist/plugins/functions/locale-format.js.map +1 -1
- package/dist/plugins/functions/range-map.js.map +1 -1
- package/dist/plugins/functions/request.js +19 -5
- package/dist/plugins/functions/request.js.map +2 -2
- package/dist/plugins/functions/untracked-read.js.map +1 -1
- package/dist/plugins/functions/websocket.js +5 -1
- package/dist/plugins/functions/websocket.js.map +2 -2
- package/dist/plugins/index.d.ts +36 -36
- package/dist/plugins/index.js +33 -33
- package/dist/plugins/index.js.map +2 -2
- package/dist/plugins/server-events/apply-elements.js +4 -1
- package/dist/plugins/server-events/apply-elements.js.map +2 -2
- package/dist/plugins/server-events/apply-state.js.map +1 -1
- package/dist/plugins/server-events/morph.d.ts +0 -2
- package/dist/plugins/server-events/morph.js +31 -8
- package/dist/plugins/server-events/morph.js.map +2 -2
- package/dist/presets/all.d.ts +0 -1
- package/dist/presets/all.js +23 -23
- package/dist/presets/all.js.map +2 -2
- package/dist/presets/essentials.d.ts +0 -1
- package/dist/presets/essentials.js +27 -9
- package/dist/presets/essentials.js.map +2 -2
- package/dist/presets/minimal.d.ts +0 -1
- package/dist/presets/minimal.js +2 -2
- package/dist/presets/minimal.js.map +2 -2
- package/dist/server.d.ts +102 -0
- package/dist/server.js +190 -0
- package/dist/server.js.map +7 -0
- package/dist/sigmx.standalone.js +1 -1
- package/dist/standalone.js.map +2 -2
- package/dist/vite.d.ts +2 -2
- package/dist/vite.js +31 -8
- package/dist/vite.js.map +2 -2
- package/package.json +19 -2
- package/dist/auto.d.ts +0 -1
- package/dist/auto.js +0 -7
- package/dist/auto.js.map +0 -7
- package/dist/core/csp.d.ts +0 -7
- package/dist/core/csp.js +0 -20
- package/dist/core/csp.js.map +0 -7
- package/dist/core/engine.d.ts +0 -10
- package/dist/core/engine.js +0 -200
- package/dist/core/engine.js.map +0 -7
- package/dist/core/expr.d.ts +0 -12
- package/dist/core/expr.js +0 -94
- package/dist/core/expr.js.map +0 -7
- package/dist/core/index.d.ts +0 -16
- package/dist/core/index.js +0 -46
- package/dist/core/index.js.map +0 -7
- package/dist/core/signals.d.ts +0 -42
- package/dist/core/signals.js +0 -195
- package/dist/core/signals.js.map +0 -7
- package/dist/core/store.d.ts +0 -32
- package/dist/core/store.js +0 -185
- package/dist/core/store.js.map +0 -7
- package/dist/core/types.d.ts +0 -101
- package/dist/core/types.js +0 -1
- package/dist/core/types.js.map +0 -7
- package/dist/plugins/actions/clipboard.d.ts +0 -2
- package/dist/plugins/actions/clipboard.js +0 -11
- package/dist/plugins/actions/clipboard.js.map +0 -7
- package/dist/plugins/actions/fit.d.ts +0 -2
- package/dist/plugins/actions/fit.js +0 -14
- package/dist/plugins/actions/fit.js.map +0 -7
- package/dist/plugins/actions/intl.d.ts +0 -2
- package/dist/plugins/actions/intl.js +0 -21
- package/dist/plugins/actions/intl.js.map +0 -7
- package/dist/plugins/actions/peek.d.ts +0 -2
- package/dist/plugins/actions/peek.js +0 -6
- package/dist/plugins/actions/peek.js.map +0 -7
- package/dist/plugins/actions/setAll.d.ts +0 -2
- package/dist/plugins/actions/setAll.js +0 -11
- package/dist/plugins/actions/setAll.js.map +0 -7
- package/dist/plugins/actions/toggleAll.d.ts +0 -2
- package/dist/plugins/actions/toggleAll.js +0 -11
- package/dist/plugins/actions/toggleAll.js.map +0 -7
- package/dist/plugins/attributes/attr.d.ts +0 -2
- package/dist/plugins/attributes/attr.js +0 -20
- package/dist/plugins/attributes/attr.js.map +0 -7
- package/dist/plugins/attributes/bind.d.ts +0 -6
- package/dist/plugins/attributes/bind.js +0 -81
- package/dist/plugins/attributes/bind.js.map +0 -7
- package/dist/plugins/attributes/class.d.ts +0 -2
- package/dist/plugins/attributes/class.js +0 -22
- package/dist/plugins/attributes/class.js.map +0 -7
- package/dist/plugins/attributes/computed.d.ts +0 -2
- package/dist/plugins/attributes/computed.js +0 -20
- package/dist/plugins/attributes/computed.js.map +0 -7
- package/dist/plugins/attributes/customValidity.d.ts +0 -2
- package/dist/plugins/attributes/customValidity.js +0 -14
- package/dist/plugins/attributes/customValidity.js.map +0 -7
- package/dist/plugins/attributes/effect.d.ts +0 -2
- package/dist/plugins/attributes/effect.js +0 -12
- package/dist/plugins/attributes/effect.js.map +0 -7
- package/dist/plugins/attributes/indicator.d.ts +0 -2
- package/dist/plugins/attributes/indicator.js +0 -20
- package/dist/plugins/attributes/indicator.js.map +0 -7
- package/dist/plugins/attributes/init.d.ts +0 -2
- package/dist/plugins/attributes/init.js +0 -14
- package/dist/plugins/attributes/init.js.map +0 -7
- package/dist/plugins/attributes/jsonSignals.d.ts +0 -2
- package/dist/plugins/attributes/jsonSignals.js +0 -15
- package/dist/plugins/attributes/jsonSignals.js.map +0 -7
- package/dist/plugins/attributes/matchMedia.d.ts +0 -2
- package/dist/plugins/attributes/matchMedia.js +0 -19
- package/dist/plugins/attributes/matchMedia.js.map +0 -7
- package/dist/plugins/attributes/on.d.ts +0 -5
- package/dist/plugins/attributes/on.js +0 -28
- package/dist/plugins/attributes/on.js.map +0 -7
- package/dist/plugins/attributes/onIntersect.d.ts +0 -2
- package/dist/plugins/attributes/onIntersect.js +0 -28
- package/dist/plugins/attributes/onIntersect.js.map +0 -7
- package/dist/plugins/attributes/onInterval.d.ts +0 -2
- package/dist/plugins/attributes/onInterval.js +0 -18
- package/dist/plugins/attributes/onInterval.js.map +0 -7
- package/dist/plugins/attributes/onRaf.d.ts +0 -1
- package/dist/plugins/attributes/onRaf.js +0 -19
- package/dist/plugins/attributes/onRaf.js.map +0 -7
- package/dist/plugins/attributes/onResize.d.ts +0 -1
- package/dist/plugins/attributes/onResize.js +0 -17
- package/dist/plugins/attributes/onResize.js.map +0 -7
- package/dist/plugins/attributes/onSignalPatch.d.ts +0 -5
- package/dist/plugins/attributes/onSignalPatch.js +0 -35
- package/dist/plugins/attributes/onSignalPatch.js.map +0 -7
- package/dist/plugins/attributes/persist.d.ts +0 -6
- package/dist/plugins/attributes/persist.js +0 -16
- package/dist/plugins/attributes/persist.js.map +0 -7
- package/dist/plugins/attributes/queryString.d.ts +0 -5
- package/dist/plugins/attributes/queryString.js +0 -54
- package/dist/plugins/attributes/queryString.js.map +0 -7
- package/dist/plugins/attributes/ref.d.ts +0 -2
- package/dist/plugins/attributes/ref.js +0 -13
- package/dist/plugins/attributes/ref.js.map +0 -7
- package/dist/plugins/attributes/replaceUrl.d.ts +0 -1
- package/dist/plugins/attributes/replaceUrl.js +0 -11
- package/dist/plugins/attributes/replaceUrl.js.map +0 -7
- package/dist/plugins/attributes/scrollIntoView.d.ts +0 -2
- package/dist/plugins/attributes/scrollIntoView.js +0 -19
- package/dist/plugins/attributes/scrollIntoView.js.map +0 -7
- package/dist/plugins/attributes/show.d.ts +0 -2
- package/dist/plugins/attributes/show.js +0 -19
- package/dist/plugins/attributes/show.js.map +0 -7
- package/dist/plugins/attributes/signals.d.ts +0 -2
- package/dist/plugins/attributes/signals.js +0 -13
- package/dist/plugins/attributes/signals.js.map +0 -7
- package/dist/plugins/attributes/style.d.ts +0 -2
- package/dist/plugins/attributes/style.js +0 -25
- package/dist/plugins/attributes/style.js.map +0 -7
- package/dist/plugins/attributes/text.d.ts +0 -1
- package/dist/plugins/attributes/text.js +0 -13
- package/dist/plugins/attributes/text.js.map +0 -7
- package/dist/plugins/attributes/viewTransition.d.ts +0 -1
- package/dist/plugins/attributes/viewTransition.js +0 -11
- package/dist/plugins/attributes/viewTransition.js.map +0 -7
- package/dist/sigmx.auto.js +0 -5
- package/dist/utils/object.d.ts +0 -9
- package/dist/utils/object.js +0 -26
- package/dist/utils/object.js.map +0 -7
- package/dist/utils/text.d.ts +0 -7
- package/dist/utils/text.js +0 -15
- package/dist/utils/text.js.map +0 -7
- package/dist/utils/timing.d.ts +0 -14
- package/dist/utils/timing.js +0 -58
- package/dist/utils/timing.js.map +0 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/plugins/server-events/morph.ts"],
|
|
4
|
-
"sourcesContent": ["// Id-aware DOM morphing: update `target` in place to match `next`, keeping elements whose ids\n// appear in both trees (and their state: focus, input values, scroll) instead of recreating them.\n\nexport type MorphOptions = {\n /** Attribute that marks a subtree to leave alone when present on both sides. */\n ignoreAttr?: string
|
|
5
|
-
"mappings": "AAYA,MAAM,MAAM,oBAAI,QAAc;AAC9B,MAAM,OAAO,CAAC,MAAiC,CAAC,CAAC,KAAK,EAAE,aAAa;AAG9D,MAAM,kBAAkB,CAAC,SAAqB;AACnD,MAAI,CAAC,KAAK,IAAI,EAAG;AACjB,aAAW,OAAQ,KAAK,QAAQ,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,iBAAiB,QAAQ,CAAC,GAA2B;AACjH,QAAI,IAAI,IAAI,GAAG,EAAG;AAClB,UAAM,IAAI,SAAS,cAAc,QAAQ;AACzC,eAAW,EAAE,MAAM,MAAM,KAAK,IAAI,WAAY,GAAE,aAAa,MAAM,KAAK;AACxE,MAAE,OAAO,IAAI;AACb,QAAI,IAAI,CAAC;AACT,QAAI,YAAY,CAAC;AAAA,EACnB;AACF;
|
|
4
|
+
"sourcesContent": ["// Id-aware DOM morphing: update `target` in place to match `next`, keeping elements whose ids\n// appear in both trees (and their state: focus, input values, scroll) instead of recreating them.\n\nexport type MorphOptions = {\n /** Attribute that marks a subtree to leave alone when present on both sides. */\n ignoreAttr?: string;\n /** Attribute listing space-separated attribute names to keep from the old element. */\n preserveAttr?: string;\n};\n\ntype Ctx = { keep: Set<string>; pantry: DocumentFragment; ignore: string; preserve: string };\n\nconst ran = new WeakSet<Node>();\nconst isEl = (n: Node | null): n is Element => !!n && n.nodeType === 1;\n\n/** Scripts inserted through the DOM do not execute; replace them with fresh copies that do. */\nexport const activateScripts = (root: Node): void => {\n if (!isEl(root)) return;\n for (const old of (root.matches('script') ? [root] : [...root.querySelectorAll('script')]) as HTMLScriptElement[]) {\n if (ran.has(old)) continue;\n const s = document.createElement('script');\n for (const { name, value } of old.attributes) s.setAttribute(name, value);\n s.text = old.text;\n ran.add(s);\n old.replaceWith(s);\n }\n};\n\nconst idsIn = (n: Node): Element[] => [...(isEl(n) && n.id ? [n] : []), ...(n as ParentNode).querySelectorAll('[id]')];\nconst containsKept = (n: Node, ctx: Ctx): boolean => isEl(n) && idsIn(n).some((e) => ctx.keep.has(e.id));\n\n/** Remove a node, or park it if it (or a descendant) is wanted elsewhere in the new tree. */\nconst discard = (n: Node, ctx: Ctx): void => {\n containsKept(n, ctx) ? ctx.pantry.append(n) : (n as ChildNode).remove();\n};\n\nconst place = (parent: Node, node: Node, before: Node | null): void => {\n const p = parent as Node & { moveBefore?: (n: Node, b: Node | null) => void };\n try {\n p.moveBefore ? p.moveBefore(node, before) : parent.insertBefore(node, before);\n } catch {\n parent.insertBefore(node, before);\n }\n};\n\nconst findKept = (id: string, from: Node | null, ctx: Ctx): Element | null => {\n for (let n = from; n; n = n.nextSibling) if (isEl(n) && n.id === id) return n;\n return ctx.pantry.querySelector(`#${CSS.escape(id)}`) ?? document.getElementById(id);\n};\n\nconst compatible = (old: Node, next: Node, ctx: Ctx): boolean =>\n old.nodeType === next.nodeType &&\n old.nodeName === next.nodeName &&\n (!isEl(old) || !old.id || old.id === (next as Element).id) &&\n !(isEl(old) && ctx.keep.has(old.id) && old.id !== (next as Element).id);\n\nconst syncAttributes = (a: Element, b: Element, ctx: Ctx): void => {\n const keep = new Set(\n (b.getAttribute(ctx.preserve) ?? a.getAttribute(ctx.preserve) ?? '').split(/\\s+/).filter(Boolean),\n );\n // Live form state (what the user typed or ticked) is only overwritten when the server's\n // default actually changed, i.e. the *attribute* differs between old and new markup.\n let changed = false;\n const attrDiffers = (name: string) => !keep.has(name) && a.getAttribute(name) !== b.getAttribute(name);\n if (a instanceof HTMLInputElement && b instanceof HTMLInputElement && a.type !== 'file') {\n if (attrDiffers('value')) {\n a.value = b.getAttribute('value') ?? '';\n changed = true;\n }\n if (attrDiffers('checked')) {\n a.checked = b.hasAttribute('checked');\n changed = true;\n }\n } else if (a instanceof HTMLTextAreaElement && b instanceof HTMLTextAreaElement) {\n if (!keep.has('value') && a.defaultValue !== b.defaultValue) {\n a.value = b.defaultValue;\n changed = true;\n }\n } else if (a instanceof HTMLOptionElement && b instanceof HTMLOptionElement) {\n if (attrDiffers('selected')) {\n a.selected = b.hasAttribute('selected');\n changed = true;\n }\n }\n for (const { name, value } of b.attributes)\n if (!keep.has(name) && a.getAttribute(name) !== value) a.setAttribute(name, value);\n for (const { name } of [...a.attributes]) if (!keep.has(name) && !b.hasAttribute(name)) a.removeAttribute(name);\n\n if (changed)\n (a instanceof HTMLOptionElement ? a.closest('select') : a)?.dispatchEvent(\n new Event('sigmx-prop-change', { bubbles: true }),\n );\n};\n\nconst morphNode = (a: Node, b: Node, ctx: Ctx): void => {\n if (a.nodeType !== b.nodeType || a.nodeName !== b.nodeName) {\n const fresh = document.importNode(b, true);\n (a as ChildNode).replaceWith(fresh);\n activateScripts(fresh);\n return;\n }\n if (!isEl(a) || !isEl(b)) {\n if (a.nodeValue !== b.nodeValue) a.nodeValue = b.nodeValue;\n return;\n }\n if (a.hasAttribute(ctx.ignore) && b.hasAttribute(ctx.ignore)) return;\n syncAttributes(a, b, ctx);\n if (a instanceof HTMLTemplateElement && b instanceof HTMLTemplateElement) {\n a.innerHTML = b.innerHTML;\n } else if (!a.isEqualNode(b)) {\n morphChildren(a, b, ctx);\n }\n};\n\nconst morphChildren = (parent: Node, next: Node, ctx: Ctx): void => {\n let cur: Node | null = parent.firstChild;\n /** Discard old siblings from `cur` up to (not including) `stop`; returns whether `stop` was reached. */\n const dropUntil = (stop: Node | null): boolean => {\n while (cur && cur !== stop) {\n const n = cur;\n cur = cur.nextSibling;\n discard(n, ctx);\n }\n return cur === stop;\n };\n for (const nb of [...next.childNodes]) {\n if (isEl(nb) && nb.id && ctx.keep.has(nb.id)) {\n const match = findKept(nb.id, cur, ctx);\n if (match) {\n if (dropUntil(match) && cur) cur = match.nextSibling;\n else place(parent, match, cur);\n morphNode(match, nb, ctx);\n continue;\n }\n }\n let m: Node | null = cur;\n while (m && !compatible(m, nb, ctx)) m = m.nextSibling;\n if (m) {\n dropUntil(m);\n cur = m.nextSibling;\n morphNode(m, nb, ctx);\n } else if (isEl(nb) && containsKept(nb, ctx)) {\n // Build a shell so the wanted descendants can be pulled in rather than recreated.\n const shell = document.createElementNS(nb.namespaceURI ?? 'http://www.w3.org/1999/xhtml', nb.tagName);\n parent.insertBefore(shell, cur);\n morphNode(shell, nb, ctx);\n } else {\n const fresh = document.importNode(nb, true);\n parent.insertBefore(fresh, cur);\n activateScripts(fresh);\n }\n }\n dropUntil(null);\n};\n\nconst context = (target: Node, next: Node, o: MorphOptions): Ctx => {\n const keep = new Set<string>();\n const wanted = new Map(idsIn(next).map((e) => [e.id, e.tagName]));\n for (const e of idsIn(target)) if (wanted.get(e.id) === e.tagName) keep.add(e.id);\n return {\n keep,\n pantry: document.createDocumentFragment(),\n ignore: o.ignoreAttr ?? 'data-ignore-morph',\n preserve: o.preserveAttr ?? 'data-preserve-attr',\n };\n};\n\nexport const morph = (target: Element, next: Element, o: MorphOptions = {}): void => {\n const ctx = context(target, next, o);\n morphNode(target, next, ctx);\n};\n\nexport const morphInner = (target: Element, next: ParentNode, o: MorphOptions = {}): void => {\n const ctx = context(target, next, o);\n morphChildren(target, next, ctx);\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/presets/all.d.ts
CHANGED
package/dist/presets/all.js
CHANGED
|
@@ -1,13 +1,31 @@
|
|
|
1
1
|
import {
|
|
2
|
+
animate,
|
|
3
|
+
applyElements,
|
|
4
|
+
applyState,
|
|
2
5
|
attr,
|
|
3
6
|
bind,
|
|
7
|
+
boost,
|
|
4
8
|
className,
|
|
9
|
+
clipboard,
|
|
10
|
+
cloak,
|
|
11
|
+
collapse,
|
|
5
12
|
computed,
|
|
13
|
+
confirm,
|
|
6
14
|
customValidity,
|
|
15
|
+
dispatch,
|
|
7
16
|
effect,
|
|
17
|
+
fit,
|
|
18
|
+
html,
|
|
19
|
+
httpDelete,
|
|
20
|
+
httpGet,
|
|
21
|
+
httpPatch,
|
|
22
|
+
httpPost,
|
|
23
|
+
httpPut,
|
|
8
24
|
indicator,
|
|
9
25
|
init,
|
|
26
|
+
intl,
|
|
10
27
|
jsonSignals,
|
|
28
|
+
mask,
|
|
11
29
|
matchMedia,
|
|
12
30
|
on,
|
|
13
31
|
onIntersect,
|
|
@@ -15,41 +33,23 @@ import {
|
|
|
15
33
|
onRaf,
|
|
16
34
|
onResize,
|
|
17
35
|
onSignalPatch,
|
|
36
|
+
peek,
|
|
18
37
|
persist,
|
|
19
38
|
queryString,
|
|
20
39
|
ref,
|
|
40
|
+
removeMe,
|
|
21
41
|
replaceUrl,
|
|
22
42
|
scrollIntoView,
|
|
43
|
+
setAll,
|
|
23
44
|
show,
|
|
24
45
|
signals,
|
|
25
46
|
style,
|
|
47
|
+
teleport,
|
|
26
48
|
text,
|
|
27
|
-
viewTransition,
|
|
28
|
-
clipboard,
|
|
29
|
-
fit,
|
|
30
|
-
intl,
|
|
31
|
-
peek,
|
|
32
|
-
setAll,
|
|
33
49
|
toggleAll,
|
|
34
|
-
animate,
|
|
35
|
-
httpDelete,
|
|
36
|
-
httpGet,
|
|
37
|
-
httpPatch,
|
|
38
|
-
httpPost,
|
|
39
|
-
httpPut,
|
|
40
|
-
applyElements,
|
|
41
|
-
applyState,
|
|
42
|
-
boost,
|
|
43
|
-
cloak,
|
|
44
|
-
collapse,
|
|
45
|
-
html,
|
|
46
|
-
mask,
|
|
47
|
-
removeMe,
|
|
48
|
-
teleport,
|
|
49
50
|
transition,
|
|
50
51
|
trap,
|
|
51
|
-
|
|
52
|
-
dispatch,
|
|
52
|
+
viewTransition,
|
|
53
53
|
websocket
|
|
54
54
|
} from "../plugins/index.js";
|
|
55
55
|
const all = [
|
package/dist/presets/all.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/presets/all.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Plugin } from '../kernel/contracts.js'
|
|
5
|
-
"mappings": "AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;
|
|
4
|
+
"sourcesContent": ["import type { Plugin } from '../kernel/contracts.js';\nimport {\n animate,\n applyElements,\n applyState,\n attr,\n bind,\n boost,\n className,\n clipboard,\n cloak,\n collapse,\n computed,\n confirm,\n customValidity,\n dispatch,\n effect,\n fit,\n html,\n httpDelete,\n httpGet,\n httpPatch,\n httpPost,\n httpPut,\n indicator,\n init,\n intl,\n jsonSignals,\n mask,\n matchMedia,\n on,\n onIntersect,\n onInterval,\n onRaf,\n onResize,\n onSignalPatch,\n peek,\n persist,\n queryString,\n ref,\n removeMe,\n replaceUrl,\n scrollIntoView,\n setAll,\n show,\n signals,\n style,\n teleport,\n text,\n toggleAll,\n transition,\n trap,\n viewTransition,\n websocket,\n} from '../plugins/index.js';\n\nexport const all: Plugin[] = [\n attr,\n bind,\n className,\n computed,\n customValidity,\n effect,\n indicator,\n init,\n jsonSignals,\n matchMedia,\n on,\n onIntersect,\n onInterval,\n onRaf,\n onResize,\n onSignalPatch,\n persist,\n queryString,\n ref,\n replaceUrl,\n scrollIntoView,\n show,\n signals,\n style,\n text,\n viewTransition,\n clipboard,\n fit,\n intl,\n peek,\n setAll,\n toggleAll,\n animate,\n httpDelete,\n httpGet,\n httpPatch,\n httpPost,\n httpPut,\n applyElements,\n applyState,\n boost,\n cloak,\n collapse,\n html,\n mask,\n removeMe,\n teleport,\n transition,\n trap,\n confirm,\n dispatch,\n websocket,\n];\n"],
|
|
5
|
+
"mappings": "AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,MAAM,MAAgB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,17 +1,35 @@
|
|
|
1
|
-
import { applyElements } from "../plugins/server-events/apply-elements.js";
|
|
2
|
-
import { applyState } from "../plugins/server-events/apply-state.js";
|
|
3
1
|
import { attr } from "../plugins/directives/attribute-sync.js";
|
|
4
|
-
import {
|
|
2
|
+
import { indicator } from "../plugins/directives/busy-flag.js";
|
|
5
3
|
import { className } from "../plugins/directives/class-toggle.js";
|
|
4
|
+
import { signals } from "../plugins/directives/declare.js";
|
|
6
5
|
import { computed } from "../plugins/directives/derive.js";
|
|
7
|
-
import { httpDelete, httpGet, httpPatch, httpPost, httpPut } from "../plugins/functions/request.js";
|
|
8
|
-
import { indicator } from "../plugins/directives/busy-flag.js";
|
|
9
|
-
import { init } from "../plugins/directives/on-mount.js";
|
|
10
6
|
import { on } from "../plugins/directives/event-listener.js";
|
|
11
|
-
import {
|
|
12
|
-
import { signals } from "../plugins/directives/declare.js";
|
|
7
|
+
import { init } from "../plugins/directives/on-mount.js";
|
|
13
8
|
import { text } from "../plugins/directives/text-content.js";
|
|
14
|
-
|
|
9
|
+
import { bind } from "../plugins/directives/two-way-bind.js";
|
|
10
|
+
import { show } from "../plugins/directives/visibility.js";
|
|
11
|
+
import { httpDelete, httpGet, httpPatch, httpPost, httpPut } from "../plugins/functions/request.js";
|
|
12
|
+
import { applyElements } from "../plugins/server-events/apply-elements.js";
|
|
13
|
+
import { applyState } from "../plugins/server-events/apply-state.js";
|
|
14
|
+
const essentials = [
|
|
15
|
+
signals,
|
|
16
|
+
computed,
|
|
17
|
+
text,
|
|
18
|
+
show,
|
|
19
|
+
className,
|
|
20
|
+
attr,
|
|
21
|
+
bind,
|
|
22
|
+
on,
|
|
23
|
+
init,
|
|
24
|
+
indicator,
|
|
25
|
+
httpGet,
|
|
26
|
+
httpPost,
|
|
27
|
+
httpPut,
|
|
28
|
+
httpPatch,
|
|
29
|
+
httpDelete,
|
|
30
|
+
applyElements,
|
|
31
|
+
applyState
|
|
32
|
+
];
|
|
15
33
|
export {
|
|
16
34
|
essentials
|
|
17
35
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/presets/essentials.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Plugin } from '../kernel/contracts.js'
|
|
5
|
-
"mappings": "AACA,SAAS,
|
|
4
|
+
"sourcesContent": ["import type { Plugin } from '../kernel/contracts.js';\nimport { attr } from '../plugins/directives/attribute-sync.js';\nimport { indicator } from '../plugins/directives/busy-flag.js';\nimport { className } from '../plugins/directives/class-toggle.js';\nimport { signals } from '../plugins/directives/declare.js';\nimport { computed } from '../plugins/directives/derive.js';\nimport { on } from '../plugins/directives/event-listener.js';\nimport { init } from '../plugins/directives/on-mount.js';\nimport { text } from '../plugins/directives/text-content.js';\nimport { bind } from '../plugins/directives/two-way-bind.js';\nimport { show } from '../plugins/directives/visibility.js';\nimport { httpDelete, httpGet, httpPatch, httpPost, httpPut } from '../plugins/functions/request.js';\nimport { applyElements } from '../plugins/server-events/apply-elements.js';\nimport { applyState } from '../plugins/server-events/apply-state.js';\n\nexport const essentials: Plugin[] = [\n signals,\n computed,\n text,\n show,\n className,\n attr,\n bind,\n on,\n init,\n indicator,\n httpGet,\n httpPost,\n httpPut,\n httpPatch,\n httpDelete,\n applyElements,\n applyState,\n];\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAC1B,SAAS,iBAAiB;AAC1B,SAAS,eAAe;AACxB,SAAS,gBAAgB;AACzB,SAAS,UAAU;AACnB,SAAS,YAAY;AACrB,SAAS,YAAY;AACrB,SAAS,YAAY;AACrB,SAAS,YAAY;AACrB,SAAS,YAAY,SAAS,WAAW,UAAU,eAAe;AAClE,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAEpB,MAAM,aAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/presets/minimal.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { on } from "../plugins/directives/event-listener.js";
|
|
2
|
-
import { show } from "../plugins/directives/visibility.js";
|
|
3
1
|
import { signals } from "../plugins/directives/declare.js";
|
|
2
|
+
import { on } from "../plugins/directives/event-listener.js";
|
|
4
3
|
import { text } from "../plugins/directives/text-content.js";
|
|
4
|
+
import { show } from "../plugins/directives/visibility.js";
|
|
5
5
|
const minimal = [signals, text, show, on];
|
|
6
6
|
export {
|
|
7
7
|
minimal
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/presets/minimal.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Plugin } from '../kernel/contracts.js'
|
|
5
|
-
"mappings": "AACA,SAAS,UAAU;AACnB,SAAS,YAAY;AACrB,SAAS,
|
|
4
|
+
"sourcesContent": ["import type { Plugin } from '../kernel/contracts.js';\nimport { signals } from '../plugins/directives/declare.js';\nimport { on } from '../plugins/directives/event-listener.js';\nimport { text } from '../plugins/directives/text-content.js';\nimport { show } from '../plugins/directives/visibility.js';\n\nexport const minimal: Plugin[] = [signals, text, show, on];\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,eAAe;AACxB,SAAS,UAAU;AACnB,SAAS,YAAY;AACrB,SAAS,YAAY;AAEd,MAAM,UAAoB,CAAC,SAAS,MAAM,MAAM,EAAE;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
export declare const SIGNALS_KEY = "sigmx";
|
|
2
|
+
export declare const EVENT_PATCH_ELEMENTS = "sigmx-patch-elements";
|
|
3
|
+
export declare const EVENT_PATCH_SIGNALS = "sigmx-patch-signals";
|
|
4
|
+
export declare const SSE_HEADERS: {
|
|
5
|
+
readonly 'content-type': "text/event-stream";
|
|
6
|
+
readonly 'cache-control': "no-cache";
|
|
7
|
+
readonly connection: "keep-alive";
|
|
8
|
+
};
|
|
9
|
+
/** HTML as a string, or anything that renders to one such as a JSX node or an `html` template. */
|
|
10
|
+
export type Markup = string | {
|
|
11
|
+
toString(): string;
|
|
12
|
+
};
|
|
13
|
+
export type PatchMode = 'outer' | 'inner' | 'replace' | 'prepend' | 'append' | 'before' | 'after' | 'remove';
|
|
14
|
+
export interface ServerEvent {
|
|
15
|
+
event: string;
|
|
16
|
+
/** Data lines, each `key value`. */
|
|
17
|
+
lines: string[];
|
|
18
|
+
id?: string;
|
|
19
|
+
retry?: number;
|
|
20
|
+
}
|
|
21
|
+
export interface EventOptions {
|
|
22
|
+
id?: string;
|
|
23
|
+
retry?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface PatchElementsOptions extends EventOptions {
|
|
26
|
+
selector?: string;
|
|
27
|
+
mode?: PatchMode;
|
|
28
|
+
useViewTransition?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface PatchSignalsOptions extends EventOptions {
|
|
31
|
+
onlyIfMissing?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface ExecuteScriptOptions extends EventOptions {
|
|
34
|
+
/** Remove the script element after it runs (default true). */
|
|
35
|
+
autoRemove?: boolean;
|
|
36
|
+
attributes?: Record<string, string>;
|
|
37
|
+
}
|
|
38
|
+
/** Patch HTML into the page. Without a selector, top-level elements are morphed by id. */
|
|
39
|
+
export declare const patchElements: (html: Markup, o?: PatchElementsOptions) => ServerEvent;
|
|
40
|
+
export declare const removeElements: (selector: string, o?: EventOptions) => ServerEvent;
|
|
41
|
+
/** Merge signals (JSON merge-patch: null removes). Accepts an object or pre-serialised JSON. */
|
|
42
|
+
export declare const patchSignals: (signals: Record<string, unknown> | string, o?: PatchSignalsOptions) => ServerEvent;
|
|
43
|
+
export declare const removeSignals: (paths: string[], o?: EventOptions) => ServerEvent;
|
|
44
|
+
export declare const executeScript: (script: string, o?: ExecuteScriptOptions) => ServerEvent;
|
|
45
|
+
export declare const formatEvent: (e: ServerEvent) => string;
|
|
46
|
+
export declare class SigmxStream {
|
|
47
|
+
readonly response: Response;
|
|
48
|
+
private controller;
|
|
49
|
+
private readonly encoder;
|
|
50
|
+
private open;
|
|
51
|
+
constructor(init?: ResponseInit);
|
|
52
|
+
get closed(): boolean;
|
|
53
|
+
send(event: ServerEvent): this;
|
|
54
|
+
patchElements(html: Markup, o?: PatchElementsOptions): this;
|
|
55
|
+
removeElements(selector: string, o?: EventOptions): this;
|
|
56
|
+
patchSignals(signals: Record<string, unknown> | string, o?: PatchSignalsOptions): this;
|
|
57
|
+
removeSignals(paths: string[], o?: EventOptions): this;
|
|
58
|
+
executeScript(script: string, o?: ExecuteScriptOptions): this;
|
|
59
|
+
close(): void;
|
|
60
|
+
}
|
|
61
|
+
export declare const sse: (...events: ServerEvent[]) => Response;
|
|
62
|
+
/** Stream events while `fn` runs; the response closes when it resolves. */
|
|
63
|
+
export declare const sseStream: (fn: (stream: SigmxStream) => Promise<void> | void, init?: ResponseInit) => Response;
|
|
64
|
+
/** A plain HTML response; the client morphs it by id, or honours the selector and mode headers. */
|
|
65
|
+
export declare const html: (body: Markup, o?: PatchElementsOptions & {
|
|
66
|
+
status?: number;
|
|
67
|
+
}) => Response;
|
|
68
|
+
export declare const json: (signals: Record<string, unknown>, o?: PatchSignalsOptions & {
|
|
69
|
+
status?: number;
|
|
70
|
+
}) => Response;
|
|
71
|
+
/** Minimal Standard Schema (standardschema.dev) so any compliant validator works without a dependency. */
|
|
72
|
+
export interface StandardSchema<Output = unknown> {
|
|
73
|
+
readonly '~standard': {
|
|
74
|
+
readonly validate: (value: unknown) => SchemaResult<Output> | Promise<SchemaResult<Output>>;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export type SchemaIssue = {
|
|
78
|
+
readonly message: string;
|
|
79
|
+
readonly path?: ReadonlyArray<PropertyKey | {
|
|
80
|
+
readonly key: PropertyKey;
|
|
81
|
+
}>;
|
|
82
|
+
};
|
|
83
|
+
export type SchemaResult<T> = {
|
|
84
|
+
readonly value: T;
|
|
85
|
+
readonly issues?: undefined;
|
|
86
|
+
} | {
|
|
87
|
+
readonly issues: ReadonlyArray<SchemaIssue>;
|
|
88
|
+
};
|
|
89
|
+
export declare class SignalsError extends Error {
|
|
90
|
+
readonly issues: ReadonlyArray<SchemaIssue>;
|
|
91
|
+
readonly status: 400 | 422;
|
|
92
|
+
constructor(message: string, issues?: ReadonlyArray<SchemaIssue>, status?: 400 | 422);
|
|
93
|
+
response(): Response;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Read the signals a sigmx request carries: the `sigmx` query parameter on GET/DELETE, a JSON
|
|
97
|
+
* body otherwise, or form fields for `contentType: 'form'` requests. Validates with `schema` if given.
|
|
98
|
+
*/
|
|
99
|
+
export declare function readSignals(request: Request): Promise<Record<string, any>>;
|
|
100
|
+
export declare function readSignals<T>(request: Request, schema: StandardSchema<T>): Promise<T>;
|
|
101
|
+
export declare function validateSignals(raw: unknown, schema?: StandardSchema<any>): Promise<any>;
|
|
102
|
+
export declare const isSigmxRequest: (request: Request) => boolean;
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
const SIGNALS_KEY = "sigmx";
|
|
2
|
+
const EVENT_PATCH_ELEMENTS = "sigmx-patch-elements";
|
|
3
|
+
const EVENT_PATCH_SIGNALS = "sigmx-patch-signals";
|
|
4
|
+
const SSE_HEADERS = {
|
|
5
|
+
"content-type": "text/event-stream",
|
|
6
|
+
"cache-control": "no-cache",
|
|
7
|
+
connection: "keep-alive"
|
|
8
|
+
};
|
|
9
|
+
const patchElements = (html2, o = {}) => {
|
|
10
|
+
const lines = [];
|
|
11
|
+
if (o.selector) lines.push(`selector ${o.selector}`);
|
|
12
|
+
if (o.mode && o.mode !== "outer") lines.push(`mode ${o.mode}`);
|
|
13
|
+
if (o.useViewTransition) lines.push("useViewTransition true");
|
|
14
|
+
for (const l of String(html2).trim().split("\n")) lines.push(`elements ${l}`);
|
|
15
|
+
return { event: EVENT_PATCH_ELEMENTS, lines, id: o.id, retry: o.retry };
|
|
16
|
+
};
|
|
17
|
+
const removeElements = (selector, o = {}) => ({
|
|
18
|
+
event: EVENT_PATCH_ELEMENTS,
|
|
19
|
+
lines: [`selector ${selector}`, "mode remove"],
|
|
20
|
+
...o
|
|
21
|
+
});
|
|
22
|
+
const patchSignals = (signals, o = {}) => ({
|
|
23
|
+
event: EVENT_PATCH_SIGNALS,
|
|
24
|
+
lines: [
|
|
25
|
+
...o.onlyIfMissing ? ["onlyIfMissing true"] : [],
|
|
26
|
+
`signals ${typeof signals === "string" ? signals : JSON.stringify(signals)}`
|
|
27
|
+
],
|
|
28
|
+
id: o.id,
|
|
29
|
+
retry: o.retry
|
|
30
|
+
});
|
|
31
|
+
const removeSignals = (paths, o = {}) => {
|
|
32
|
+
const patch = {};
|
|
33
|
+
for (const p of paths) {
|
|
34
|
+
const keys = p.split(".");
|
|
35
|
+
const last = keys.pop();
|
|
36
|
+
let cur = patch;
|
|
37
|
+
for (const k of keys) cur = cur[k] ??= {};
|
|
38
|
+
cur[last] = null;
|
|
39
|
+
}
|
|
40
|
+
return patchSignals(patch, o);
|
|
41
|
+
};
|
|
42
|
+
const executeScript = (script, o = {}) => {
|
|
43
|
+
const attrs = { ...o.autoRemove ?? true ? { "data-init": "el.remove()" } : {}, ...o.attributes };
|
|
44
|
+
const attrText = Object.entries(attrs).map(([k, v]) => ` ${k}="${v.replace(/"/g, """)}"`).join("");
|
|
45
|
+
return patchElements(`<script${attrText}>${script}<\/script>`, {
|
|
46
|
+
selector: "body",
|
|
47
|
+
mode: "append",
|
|
48
|
+
id: o.id,
|
|
49
|
+
retry: o.retry
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
const formatEvent = (e) => `${[
|
|
53
|
+
e.id !== void 0 && `id: ${e.id}`,
|
|
54
|
+
e.retry !== void 0 && `retry: ${e.retry}`,
|
|
55
|
+
`event: ${e.event}`,
|
|
56
|
+
...e.lines.map((l) => `data: ${l}`)
|
|
57
|
+
].filter(Boolean).join("\n")}
|
|
58
|
+
|
|
59
|
+
`;
|
|
60
|
+
class SigmxStream {
|
|
61
|
+
response;
|
|
62
|
+
controller;
|
|
63
|
+
encoder = new TextEncoder();
|
|
64
|
+
open = true;
|
|
65
|
+
constructor(init = {}) {
|
|
66
|
+
const body = new ReadableStream({
|
|
67
|
+
start: (c) => {
|
|
68
|
+
this.controller = c;
|
|
69
|
+
},
|
|
70
|
+
cancel: () => {
|
|
71
|
+
this.open = false;
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
this.response = new Response(body, {
|
|
75
|
+
...init,
|
|
76
|
+
headers: { ...SSE_HEADERS, ...init.headers }
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
get closed() {
|
|
80
|
+
return !this.open;
|
|
81
|
+
}
|
|
82
|
+
send(event) {
|
|
83
|
+
if (this.open) this.controller.enqueue(this.encoder.encode(formatEvent(event)));
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
patchElements(html2, o) {
|
|
87
|
+
return this.send(patchElements(html2, o));
|
|
88
|
+
}
|
|
89
|
+
removeElements(selector, o) {
|
|
90
|
+
return this.send(removeElements(selector, o));
|
|
91
|
+
}
|
|
92
|
+
patchSignals(signals, o) {
|
|
93
|
+
return this.send(patchSignals(signals, o));
|
|
94
|
+
}
|
|
95
|
+
removeSignals(paths, o) {
|
|
96
|
+
return this.send(removeSignals(paths, o));
|
|
97
|
+
}
|
|
98
|
+
executeScript(script, o) {
|
|
99
|
+
return this.send(executeScript(script, o));
|
|
100
|
+
}
|
|
101
|
+
close() {
|
|
102
|
+
if (this.open) {
|
|
103
|
+
this.open = false;
|
|
104
|
+
this.controller.close();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const sse = (...events) => new Response(events.map(formatEvent).join(""), { headers: SSE_HEADERS });
|
|
109
|
+
const sseStream = (fn, init) => {
|
|
110
|
+
const stream = new SigmxStream(init);
|
|
111
|
+
Promise.resolve().then(() => fn(stream)).catch((e) => console.error("sigmx sseStream:", e)).finally(() => stream.close());
|
|
112
|
+
return stream.response;
|
|
113
|
+
};
|
|
114
|
+
const html = (body, o = {}) => new Response(String(body), {
|
|
115
|
+
status: o.status ?? 200,
|
|
116
|
+
headers: {
|
|
117
|
+
"content-type": "text/html; charset=utf-8",
|
|
118
|
+
...o.selector ? { "sigmx-selector": o.selector } : {},
|
|
119
|
+
...o.mode ? { "sigmx-mode": o.mode } : {},
|
|
120
|
+
...o.useViewTransition ? { "sigmx-use-view-transition": "true" } : {}
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
const json = (signals, o = {}) => new Response(JSON.stringify(signals), {
|
|
124
|
+
status: o.status ?? 200,
|
|
125
|
+
headers: { "content-type": "application/json", ...o.onlyIfMissing ? { "sigmx-only-if-missing": "true" } : {} }
|
|
126
|
+
});
|
|
127
|
+
class SignalsError extends Error {
|
|
128
|
+
constructor(message, issues = [], status = 422) {
|
|
129
|
+
super(message);
|
|
130
|
+
this.issues = issues;
|
|
131
|
+
this.status = status;
|
|
132
|
+
this.name = "SignalsError";
|
|
133
|
+
}
|
|
134
|
+
issues;
|
|
135
|
+
status;
|
|
136
|
+
response() {
|
|
137
|
+
return Response.json({ error: this.message, issues: this.issues }, { status: this.status });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async function readSignals(request, schema) {
|
|
141
|
+
let raw;
|
|
142
|
+
const method = request.method.toUpperCase();
|
|
143
|
+
const type = request.headers.get("content-type") ?? "";
|
|
144
|
+
try {
|
|
145
|
+
if (method === "GET" || method === "DELETE") {
|
|
146
|
+
const q = new URL(request.url).searchParams.get(SIGNALS_KEY);
|
|
147
|
+
raw = q ? JSON.parse(q) : {};
|
|
148
|
+
} else if (type.includes("application/json")) {
|
|
149
|
+
const text = await request.text();
|
|
150
|
+
raw = text ? JSON.parse(text) : {};
|
|
151
|
+
} else if (type.includes("form")) {
|
|
152
|
+
raw = Object.fromEntries((await request.formData()).entries());
|
|
153
|
+
} else {
|
|
154
|
+
raw = {};
|
|
155
|
+
}
|
|
156
|
+
} catch (e) {
|
|
157
|
+
throw new SignalsError(`could not parse signals: ${e.message}`, [], 400);
|
|
158
|
+
}
|
|
159
|
+
return validateSignals(raw, schema);
|
|
160
|
+
}
|
|
161
|
+
async function validateSignals(raw, schema) {
|
|
162
|
+
if (!schema) return raw;
|
|
163
|
+
const result = await schema["~standard"].validate(raw);
|
|
164
|
+
if (result.issues)
|
|
165
|
+
throw new SignalsError(`invalid signals: ${result.issues.map((i) => i.message).join("; ")}`, result.issues);
|
|
166
|
+
return result.value;
|
|
167
|
+
}
|
|
168
|
+
const isSigmxRequest = (request) => request.headers.get("sigmx-request") === "true";
|
|
169
|
+
export {
|
|
170
|
+
EVENT_PATCH_ELEMENTS,
|
|
171
|
+
EVENT_PATCH_SIGNALS,
|
|
172
|
+
SIGNALS_KEY,
|
|
173
|
+
SSE_HEADERS,
|
|
174
|
+
SigmxStream,
|
|
175
|
+
SignalsError,
|
|
176
|
+
executeScript,
|
|
177
|
+
formatEvent,
|
|
178
|
+
html,
|
|
179
|
+
isSigmxRequest,
|
|
180
|
+
json,
|
|
181
|
+
patchElements,
|
|
182
|
+
patchSignals,
|
|
183
|
+
readSignals,
|
|
184
|
+
removeElements,
|
|
185
|
+
removeSignals,
|
|
186
|
+
sse,
|
|
187
|
+
sseStream,
|
|
188
|
+
validateSignals
|
|
189
|
+
};
|
|
190
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/server.ts"],
|
|
4
|
+
"sourcesContent": ["export const SIGNALS_KEY = 'sigmx';\nexport const EVENT_PATCH_ELEMENTS = 'sigmx-patch-elements';\nexport const EVENT_PATCH_SIGNALS = 'sigmx-patch-signals';\nexport const SSE_HEADERS = {\n 'content-type': 'text/event-stream',\n 'cache-control': 'no-cache',\n connection: 'keep-alive',\n} as const;\n\n/** HTML as a string, or anything that renders to one such as a JSX node or an `html` template. */\nexport type Markup = string | { toString(): string };\n\nexport type PatchMode = 'outer' | 'inner' | 'replace' | 'prepend' | 'append' | 'before' | 'after' | 'remove';\n\nexport interface ServerEvent {\n event: string;\n /** Data lines, each `key value`. */\n lines: string[];\n id?: string;\n retry?: number;\n}\nexport interface EventOptions {\n id?: string;\n retry?: number;\n}\nexport interface PatchElementsOptions extends EventOptions {\n selector?: string;\n mode?: PatchMode;\n useViewTransition?: boolean;\n}\nexport interface PatchSignalsOptions extends EventOptions {\n onlyIfMissing?: boolean;\n}\nexport interface ExecuteScriptOptions extends EventOptions {\n /** Remove the script element after it runs (default true). */\n autoRemove?: boolean;\n attributes?: Record<string, string>;\n}\n\n/** Patch HTML into the page. Without a selector, top-level elements are morphed by id. */\nexport const patchElements = (html: Markup, o: PatchElementsOptions = {}): ServerEvent => {\n const lines: string[] = [];\n if (o.selector) lines.push(`selector ${o.selector}`);\n if (o.mode && o.mode !== 'outer') lines.push(`mode ${o.mode}`);\n if (o.useViewTransition) lines.push('useViewTransition true');\n for (const l of String(html).trim().split('\\n')) lines.push(`elements ${l}`);\n return { event: EVENT_PATCH_ELEMENTS, lines, id: o.id, retry: o.retry };\n};\n\nexport const removeElements = (selector: string, o: EventOptions = {}): ServerEvent => ({\n event: EVENT_PATCH_ELEMENTS,\n lines: [`selector ${selector}`, 'mode remove'],\n ...o,\n});\n\n/** Merge signals (JSON merge-patch: null removes). Accepts an object or pre-serialised JSON. */\nexport const patchSignals = (signals: Record<string, unknown> | string, o: PatchSignalsOptions = {}): ServerEvent => ({\n event: EVENT_PATCH_SIGNALS,\n lines: [\n ...(o.onlyIfMissing ? ['onlyIfMissing true'] : []),\n `signals ${typeof signals === 'string' ? signals : JSON.stringify(signals)}`,\n ],\n id: o.id,\n retry: o.retry,\n});\n\nexport const removeSignals = (paths: string[], o: EventOptions = {}): ServerEvent => {\n const patch: Record<string, any> = {};\n for (const p of paths) {\n const keys = p.split('.');\n const last = keys.pop() as string;\n let cur = patch;\n for (const k of keys) cur = cur[k] ??= {};\n cur[last] = null;\n }\n return patchSignals(patch, o);\n};\n\nexport const executeScript = (script: string, o: ExecuteScriptOptions = {}): ServerEvent => {\n const attrs = { ...((o.autoRemove ?? true) ? { 'data-init': 'el.remove()' } : {}), ...o.attributes };\n const attrText = Object.entries(attrs)\n .map(([k, v]) => ` ${k}=\"${v.replace(/\"/g, '"')}\"`)\n .join('');\n return patchElements(`<script${attrText}>${script}</script>`, {\n selector: 'body',\n mode: 'append',\n id: o.id,\n retry: o.retry,\n });\n};\n\nexport const formatEvent = (e: ServerEvent): string =>\n `${[\n e.id !== undefined && `id: ${e.id}`,\n e.retry !== undefined && `retry: ${e.retry}`,\n `event: ${e.event}`,\n ...e.lines.map((l) => `data: ${l}`),\n ]\n .filter(Boolean)\n .join('\\n')}\\n\\n`;\n\nexport class SigmxStream {\n readonly response: Response;\n private controller!: ReadableStreamDefaultController<Uint8Array>;\n private readonly encoder = new TextEncoder();\n private open = true;\n\n constructor(init: ResponseInit = {}) {\n const body = new ReadableStream<Uint8Array>({\n start: (c) => {\n this.controller = c;\n },\n cancel: () => {\n this.open = false;\n },\n });\n this.response = new Response(body, {\n ...init,\n headers: { ...SSE_HEADERS, ...(init.headers as Record<string, string>) },\n });\n }\n get closed(): boolean {\n return !this.open;\n }\n send(event: ServerEvent): this {\n if (this.open) this.controller.enqueue(this.encoder.encode(formatEvent(event)));\n return this;\n }\n patchElements(html: Markup, o?: PatchElementsOptions): this {\n return this.send(patchElements(html, o));\n }\n removeElements(selector: string, o?: EventOptions): this {\n return this.send(removeElements(selector, o));\n }\n patchSignals(signals: Record<string, unknown> | string, o?: PatchSignalsOptions): this {\n return this.send(patchSignals(signals, o));\n }\n removeSignals(paths: string[], o?: EventOptions): this {\n return this.send(removeSignals(paths, o));\n }\n executeScript(script: string, o?: ExecuteScriptOptions): this {\n return this.send(executeScript(script, o));\n }\n close(): void {\n if (this.open) {\n this.open = false;\n this.controller.close();\n }\n }\n}\n\nexport const sse = (...events: ServerEvent[]): Response =>\n new Response(events.map(formatEvent).join(''), { headers: SSE_HEADERS });\n\n/** Stream events while `fn` runs; the response closes when it resolves. */\nexport const sseStream = (fn: (stream: SigmxStream) => Promise<void> | void, init?: ResponseInit): Response => {\n const stream = new SigmxStream(init);\n Promise.resolve()\n .then(() => fn(stream))\n .catch((e) => console.error('sigmx sseStream:', e))\n .finally(() => stream.close());\n return stream.response;\n};\n\n/** A plain HTML response; the client morphs it by id, or honours the selector and mode headers. */\nexport const html = (body: Markup, o: PatchElementsOptions & { status?: number } = {}): Response =>\n new Response(String(body), {\n status: o.status ?? 200,\n headers: {\n 'content-type': 'text/html; charset=utf-8',\n ...(o.selector ? { 'sigmx-selector': o.selector } : {}),\n ...(o.mode ? { 'sigmx-mode': o.mode } : {}),\n ...(o.useViewTransition ? { 'sigmx-use-view-transition': 'true' } : {}),\n },\n });\n\nexport const json = (signals: Record<string, unknown>, o: PatchSignalsOptions & { status?: number } = {}): Response =>\n new Response(JSON.stringify(signals), {\n status: o.status ?? 200,\n headers: { 'content-type': 'application/json', ...(o.onlyIfMissing ? { 'sigmx-only-if-missing': 'true' } : {}) },\n });\n\n/** Minimal Standard Schema (standardschema.dev) so any compliant validator works without a dependency. */\nexport interface StandardSchema<Output = unknown> {\n readonly '~standard': {\n readonly validate: (value: unknown) => SchemaResult<Output> | Promise<SchemaResult<Output>>;\n };\n}\nexport type SchemaIssue = {\n readonly message: string;\n readonly path?: ReadonlyArray<PropertyKey | { readonly key: PropertyKey }>;\n};\nexport type SchemaResult<T> =\n | { readonly value: T; readonly issues?: undefined }\n | { readonly issues: ReadonlyArray<SchemaIssue> };\n\nexport class SignalsError extends Error {\n constructor(\n message: string,\n readonly issues: ReadonlyArray<SchemaIssue> = [],\n readonly status: 400 | 422 = 422,\n ) {\n super(message);\n this.name = 'SignalsError';\n }\n response(): Response {\n return Response.json({ error: this.message, issues: this.issues }, { status: this.status });\n }\n}\n\n/**\n * Read the signals a sigmx request carries: the `sigmx` query parameter on GET/DELETE, a JSON\n * body otherwise, or form fields for `contentType: 'form'` requests. Validates with `schema` if given.\n */\nexport async function readSignals(request: Request): Promise<Record<string, any>>;\nexport async function readSignals<T>(request: Request, schema: StandardSchema<T>): Promise<T>;\nexport async function readSignals(request: Request, schema?: StandardSchema<any>): Promise<any> {\n let raw: unknown;\n const method = request.method.toUpperCase();\n const type = request.headers.get('content-type') ?? '';\n try {\n if (method === 'GET' || method === 'DELETE') {\n const q = new URL(request.url).searchParams.get(SIGNALS_KEY);\n raw = q ? JSON.parse(q) : {};\n } else if (type.includes('application/json')) {\n const text = await request.text();\n raw = text ? JSON.parse(text) : {};\n } else if (type.includes('form')) {\n raw = Object.fromEntries((await request.formData()).entries());\n } else {\n raw = {};\n }\n } catch (e) {\n throw new SignalsError(`could not parse signals: ${(e as Error).message}`, [], 400);\n }\n return validateSignals(raw, schema);\n}\n\nexport async function validateSignals(raw: unknown, schema?: StandardSchema<any>): Promise<any> {\n if (!schema) return raw;\n const result = await schema['~standard'].validate(raw);\n if (result.issues)\n throw new SignalsError(`invalid signals: ${result.issues.map((i) => i.message).join('; ')}`, result.issues);\n return result.value;\n}\n\nexport const isSigmxRequest = (request: Request): boolean => request.headers.get('sigmx-request') === 'true';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["html"]
|
|
7
|
+
}
|