sigmx 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/dist/kernel/compile.d.ts +8 -9
- package/dist/kernel/compile.js +102 -67
- package/dist/kernel/compile.js.map +2 -2
- package/dist/kernel/contracts.d.ts +11 -5
- package/dist/kernel/index.d.ts +2 -2
- package/dist/kernel/index.js +5 -6
- package/dist/kernel/index.js.map +2 -2
- package/dist/kernel/precompile.d.ts +8 -10
- package/dist/kernel/precompile.js +25 -75
- package/dist/kernel/precompile.js.map +2 -2
- package/dist/kernel/precompiled.d.ts +7 -4
- package/dist/kernel/precompiled.js +5 -5
- package/dist/kernel/precompiled.js.map +2 -2
- package/dist/kernel/reactive.d.ts +8 -2
- package/dist/kernel/reactive.js +91 -62
- package/dist/kernel/reactive.js.map +3 -3
- package/dist/kernel/runtime.js +78 -68
- package/dist/kernel/runtime.js.map +3 -3
- package/dist/kernel/scan.d.ts +1 -1
- package/dist/kernel/scan.js +3 -3
- package/dist/kernel/scan.js.map +2 -2
- package/dist/kernel/state.d.ts +4 -3
- package/dist/kernel/state.js +91 -80
- package/dist/kernel/state.js.map +2 -2
- package/dist/kernel/strict-csp.d.ts +0 -5
- package/dist/kernel/strict-csp.js +2 -2
- package/dist/kernel/strict-csp.js.map +2 -2
- package/dist/lib/casing.d.ts +4 -1
- package/dist/lib/casing.js +8 -1
- package/dist/lib/casing.js.map +2 -2
- package/dist/lib/objects.d.ts +5 -3
- package/dist/lib/objects.js +10 -5
- package/dist/lib/objects.js.map +2 -2
- package/dist/lib/schedule.d.ts +3 -3
- package/dist/lib/schedule.js +12 -10
- package/dist/lib/schedule.js.map +2 -2
- package/dist/lib/sse.d.ts +10 -0
- package/dist/lib/sse.js +32 -29
- package/dist/lib/sse.js.map +2 -2
- package/dist/plugins/def.d.ts +5 -0
- package/dist/plugins/def.js +22 -0
- package/dist/plugins/def.js.map +7 -0
- package/dist/plugins/directives/attribute-sync.js +8 -12
- package/dist/plugins/directives/attribute-sync.js.map +2 -2
- package/dist/plugins/directives/boost.d.ts +1 -1
- package/dist/plugins/directives/boost.js +34 -31
- package/dist/plugins/directives/boost.js.map +2 -2
- package/dist/plugins/directives/busy-flag.js +13 -16
- package/dist/plugins/directives/busy-flag.js.map +2 -2
- package/dist/plugins/directives/class-toggle.js +17 -16
- package/dist/plugins/directives/class-toggle.js.map +2 -2
- package/dist/plugins/directives/cloak.js +2 -7
- package/dist/plugins/directives/cloak.js.map +2 -2
- package/dist/plugins/directives/collapse.js +36 -37
- package/dist/plugins/directives/collapse.js.map +2 -2
- package/dist/plugins/directives/declare.js +5 -8
- package/dist/plugins/directives/declare.js.map +2 -2
- package/dist/plugins/directives/derive.js +9 -18
- package/dist/plugins/directives/derive.js.map +2 -2
- package/dist/plugins/directives/element-ref.js +8 -8
- package/dist/plugins/directives/element-ref.js.map +2 -2
- package/dist/plugins/directives/event-listener.js +18 -26
- package/dist/plugins/directives/event-listener.js.map +2 -2
- package/dist/plugins/directives/frame-loop.js +9 -14
- package/dist/plugins/directives/frame-loop.js.map +2 -2
- package/dist/plugins/directives/html.js +6 -7
- package/dist/plugins/directives/html.js.map +2 -2
- package/dist/plugins/directives/inline-style.js +17 -20
- package/dist/plugins/directives/inline-style.js.map +2 -2
- package/dist/plugins/directives/mask.js +19 -23
- package/dist/plugins/directives/mask.js.map +2 -2
- package/dist/plugins/directives/media-query.d.ts +4 -1
- package/dist/plugins/directives/media-query.js +13 -13
- package/dist/plugins/directives/media-query.js.map +2 -2
- package/dist/plugins/directives/on-mount.js +4 -12
- package/dist/plugins/directives/on-mount.js.map +2 -2
- package/dist/plugins/directives/patch-listener.js +24 -19
- package/dist/plugins/directives/patch-listener.js.map +2 -2
- package/dist/plugins/directives/remove-me.js +7 -8
- package/dist/plugins/directives/remove-me.js.map +2 -2
- package/dist/plugins/directives/scroll-to.d.ts +4 -1
- package/dist/plugins/directives/scroll-to.js +8 -14
- package/dist/plugins/directives/scroll-to.js.map +2 -2
- package/dist/plugins/directives/size-watch.js +7 -12
- package/dist/plugins/directives/size-watch.js.map +2 -2
- package/dist/plugins/directives/state-dump.js +6 -10
- package/dist/plugins/directives/state-dump.js.map +2 -2
- package/dist/plugins/directives/storage-sync.js +13 -9
- package/dist/plugins/directives/storage-sync.js.map +2 -2
- package/dist/plugins/directives/teleport.js +8 -14
- package/dist/plugins/directives/teleport.js.map +2 -2
- package/dist/plugins/directives/text-content.js +6 -7
- package/dist/plugins/directives/text-content.js.map +2 -2
- package/dist/plugins/directives/timer.js +7 -13
- package/dist/plugins/directives/timer.js.map +2 -2
- package/dist/plugins/directives/transition.d.ts +1 -2
- package/dist/plugins/directives/transition.js +32 -34
- package/dist/plugins/directives/transition.js.map +2 -2
- package/dist/plugins/directives/tween.d.ts +2 -2
- package/dist/plugins/directives/tween.js +34 -50
- package/dist/plugins/directives/tween.js.map +2 -2
- package/dist/plugins/directives/two-way-bind.d.ts +1 -1
- package/dist/plugins/directives/two-way-bind.js +70 -97
- package/dist/plugins/directives/two-way-bind.js.map +2 -2
- package/dist/plugins/directives/url-params.js +35 -59
- package/dist/plugins/directives/url-params.js.map +3 -3
- package/dist/plugins/directives/url-replace.js +6 -7
- package/dist/plugins/directives/url-replace.js.map +2 -2
- package/dist/plugins/directives/validity.js +6 -9
- package/dist/plugins/directives/validity.js.map +2 -2
- package/dist/plugins/directives/viewport.js +18 -26
- package/dist/plugins/directives/viewport.js.map +2 -2
- package/dist/plugins/directives/visibility.js +9 -14
- package/dist/plugins/directives/visibility.js.map +2 -2
- package/dist/plugins/directives/watch.js +2 -8
- package/dist/plugins/directives/watch.js.map +2 -2
- package/dist/plugins/functions/bulk-set.js +7 -6
- package/dist/plugins/functions/bulk-set.js.map +2 -2
- package/dist/plugins/functions/bulk-toggle.js +7 -6
- package/dist/plugins/functions/bulk-toggle.js.map +2 -2
- package/dist/plugins/functions/confirm.js +2 -2
- package/dist/plugins/functions/confirm.js.map +2 -2
- package/dist/plugins/functions/copy-text.js +5 -5
- package/dist/plugins/functions/copy-text.js.map +2 -2
- package/dist/plugins/functions/dispatch.js +5 -5
- package/dist/plugins/functions/dispatch.js.map +2 -2
- package/dist/plugins/functions/locale-format.d.ts +4 -1
- package/dist/plugins/functions/locale-format.js +9 -16
- package/dist/plugins/functions/locale-format.js.map +2 -2
- package/dist/plugins/functions/range-map.js +6 -6
- package/dist/plugins/functions/range-map.js.map +2 -2
- package/dist/plugins/functions/request.d.ts +7 -3
- package/dist/plugins/functions/request.js +77 -86
- package/dist/plugins/functions/request.js.map +2 -2
- package/dist/plugins/functions/untracked-read.js +3 -2
- package/dist/plugins/functions/untracked-read.js.map +2 -2
- package/dist/plugins/functions/websocket.d.ts +3 -3
- package/dist/plugins/functions/websocket.js +13 -24
- package/dist/plugins/functions/websocket.js.map +2 -2
- package/dist/plugins/index.d.ts +0 -2
- package/dist/plugins/index.js +0 -4
- package/dist/plugins/index.js.map +2 -2
- package/dist/plugins/server-events/apply-elements.d.ts +1 -1
- package/dist/plugins/server-events/apply-elements.js +41 -43
- package/dist/plugins/server-events/apply-elements.js.map +2 -2
- package/dist/plugins/server-events/apply-state.js +9 -12
- package/dist/plugins/server-events/apply-state.js.map +2 -2
- package/dist/plugins/server-events/morph.js +46 -66
- package/dist/plugins/server-events/morph.js.map +3 -3
- package/dist/presets/all.js +0 -4
- package/dist/presets/all.js.map +2 -2
- package/dist/server.d.ts +10 -4
- package/dist/server.js +42 -14
- package/dist/server.js.map +2 -2
- package/dist/sigmx.standalone.js +1 -1
- package/dist/vite.js +17 -7
- package/dist/vite.js.map +2 -2
- package/package.json +4 -2
- package/dist/plugins/directives/transition-name.d.ts +0 -1
- package/dist/plugins/directives/transition-name.js +0 -11
- package/dist/plugins/directives/transition-name.js.map +0 -7
- package/dist/plugins/directives/trap.d.ts +0 -5
- package/dist/plugins/directives/trap.js +0 -54
- package/dist/plugins/directives/trap.js.map +0 -7
package/dist/presets/all.js
CHANGED
|
@@ -48,8 +48,6 @@ import {
|
|
|
48
48
|
text,
|
|
49
49
|
toggleAll,
|
|
50
50
|
transition,
|
|
51
|
-
trap,
|
|
52
|
-
viewTransition,
|
|
53
51
|
websocket
|
|
54
52
|
} from "../plugins/index.js";
|
|
55
53
|
const all = [
|
|
@@ -78,7 +76,6 @@ const all = [
|
|
|
78
76
|
signals,
|
|
79
77
|
style,
|
|
80
78
|
text,
|
|
81
|
-
viewTransition,
|
|
82
79
|
clipboard,
|
|
83
80
|
fit,
|
|
84
81
|
intl,
|
|
@@ -101,7 +98,6 @@ const all = [
|
|
|
101
98
|
removeMe,
|
|
102
99
|
teleport,
|
|
103
100
|
transition,
|
|
104
|
-
trap,
|
|
105
101
|
confirm,
|
|
106
102
|
dispatch,
|
|
107
103
|
websocket
|
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';\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
|
|
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,
|
|
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 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 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 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,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;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/server.d.ts
CHANGED
|
@@ -4,7 +4,6 @@ export declare const EVENT_PATCH_SIGNALS = "sigmx-patch-signals";
|
|
|
4
4
|
export declare const SSE_HEADERS: {
|
|
5
5
|
readonly 'content-type': "text/event-stream";
|
|
6
6
|
readonly 'cache-control': "no-cache";
|
|
7
|
-
readonly connection: "keep-alive";
|
|
8
7
|
};
|
|
9
8
|
/** HTML as a string, or anything that renders to one such as a JSX node or an `html` template. */
|
|
10
9
|
export type Markup = string | {
|
|
@@ -25,7 +24,6 @@ export interface EventOptions {
|
|
|
25
24
|
export interface PatchElementsOptions extends EventOptions {
|
|
26
25
|
selector?: string;
|
|
27
26
|
mode?: PatchMode;
|
|
28
|
-
useViewTransition?: boolean;
|
|
29
27
|
}
|
|
30
28
|
export interface PatchSignalsOptions extends EventOptions {
|
|
31
29
|
onlyIfMissing?: boolean;
|
|
@@ -42,6 +40,10 @@ export declare const removeElements: (selector: string, o?: EventOptions) => Ser
|
|
|
42
40
|
export declare const patchSignals: (signals: Record<string, unknown> | string, o?: PatchSignalsOptions) => ServerEvent;
|
|
43
41
|
export declare const removeSignals: (paths: string[], o?: EventOptions) => ServerEvent;
|
|
44
42
|
export declare const executeScript: (script: string, o?: ExecuteScriptOptions) => ServerEvent;
|
|
43
|
+
/**
|
|
44
|
+
* One event on the wire. A `key value` line whose value spans several lines becomes several
|
|
45
|
+
* `data: key …` lines (the client joins them again), so no value can inject an extra field or event.
|
|
46
|
+
*/
|
|
45
47
|
export declare const formatEvent: (e: ServerEvent) => string;
|
|
46
48
|
export declare class SigmxStream {
|
|
47
49
|
readonly response: Response;
|
|
@@ -57,6 +59,8 @@ export declare class SigmxStream {
|
|
|
57
59
|
removeSignals(paths: string[], o?: EventOptions): this;
|
|
58
60
|
executeScript(script: string, o?: ExecuteScriptOptions): this;
|
|
59
61
|
close(): void;
|
|
62
|
+
/** End the stream with an error so the client sees a failure (and retries) rather than a clean end. */
|
|
63
|
+
error(reason: unknown): void;
|
|
60
64
|
}
|
|
61
65
|
export declare const sse: (...events: ServerEvent[]) => Response;
|
|
62
66
|
/** Stream events while `fn` runs; the response closes when it resolves. */
|
|
@@ -92,9 +96,11 @@ export declare class SignalsError extends Error {
|
|
|
92
96
|
constructor(message: string, issues?: ReadonlyArray<SchemaIssue>, status?: 400 | 422);
|
|
93
97
|
response(): Response;
|
|
94
98
|
}
|
|
99
|
+
/** Form fields as an object; a repeated name becomes an array. */
|
|
100
|
+
export declare const fieldsToObject: (entries: Iterable<[string, unknown]>) => Record<string, any>;
|
|
95
101
|
/**
|
|
96
|
-
* Read the signals a sigmx request carries: the `sigmx` query parameter on GET/DELETE
|
|
97
|
-
*
|
|
102
|
+
* Read the signals a sigmx request carries: the `sigmx` query parameter on GET/DELETE (or the plain
|
|
103
|
+
* query parameters of a `contentType: 'form'` GET), a JSON body, or form fields. Validates with `schema` if given.
|
|
98
104
|
*/
|
|
99
105
|
export declare function readSignals(request: Request): Promise<Record<string, any>>;
|
|
100
106
|
export declare function readSignals<T>(request: Request, schema: StandardSchema<T>): Promise<T>;
|
package/dist/server.js
CHANGED
|
@@ -3,15 +3,13 @@ const EVENT_PATCH_ELEMENTS = "sigmx-patch-elements";
|
|
|
3
3
|
const EVENT_PATCH_SIGNALS = "sigmx-patch-signals";
|
|
4
4
|
const SSE_HEADERS = {
|
|
5
5
|
"content-type": "text/event-stream",
|
|
6
|
-
"cache-control": "no-cache"
|
|
7
|
-
connection: "keep-alive"
|
|
6
|
+
"cache-control": "no-cache"
|
|
8
7
|
};
|
|
9
8
|
const patchElements = (html2, o = {}) => {
|
|
10
9
|
const lines = [];
|
|
11
10
|
if (o.selector) lines.push(`selector ${o.selector}`);
|
|
12
11
|
if (o.mode && o.mode !== "outer") lines.push(`mode ${o.mode}`);
|
|
13
|
-
|
|
14
|
-
for (const l of String(html2).trim().split("\n")) lines.push(`elements ${l}`);
|
|
12
|
+
lines.push(`elements ${String(html2).trim()}`);
|
|
15
13
|
return { event: EVENT_PATCH_ELEMENTS, lines, id: o.id, retry: o.retry };
|
|
16
14
|
};
|
|
17
15
|
const removeElements = (selector, o = {}) => ({
|
|
@@ -49,11 +47,16 @@ const executeScript = (script, o = {}) => {
|
|
|
49
47
|
retry: o.retry
|
|
50
48
|
});
|
|
51
49
|
};
|
|
50
|
+
const oneLine = (s) => s.replace(/[\r\n]+/g, " ");
|
|
52
51
|
const formatEvent = (e) => `${[
|
|
53
|
-
e.id !== void 0 && `id: ${e.id}`,
|
|
52
|
+
e.id !== void 0 && `id: ${oneLine(e.id)}`,
|
|
54
53
|
e.retry !== void 0 && `retry: ${e.retry}`,
|
|
55
|
-
`event: ${e.event}`,
|
|
56
|
-
...e.lines.
|
|
54
|
+
`event: ${oneLine(e.event)}`,
|
|
55
|
+
...e.lines.flatMap((l) => {
|
|
56
|
+
const i = l.indexOf(" ");
|
|
57
|
+
const key = i < 0 ? l : l.slice(0, i);
|
|
58
|
+
return (i < 0 ? [""] : l.slice(i + 1).split(/\r?\n/)).map((v) => `data: ${key}${i < 0 ? "" : ` ${v}`}`);
|
|
59
|
+
})
|
|
57
60
|
].filter(Boolean).join("\n")}
|
|
58
61
|
|
|
59
62
|
`;
|
|
@@ -104,11 +107,24 @@ class SigmxStream {
|
|
|
104
107
|
this.controller.close();
|
|
105
108
|
}
|
|
106
109
|
}
|
|
110
|
+
/** End the stream with an error so the client sees a failure (and retries) rather than a clean end. */
|
|
111
|
+
error(reason) {
|
|
112
|
+
if (this.open) {
|
|
113
|
+
this.open = false;
|
|
114
|
+
this.controller.error(reason);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
107
117
|
}
|
|
108
118
|
const sse = (...events) => new Response(events.map(formatEvent).join(""), { headers: SSE_HEADERS });
|
|
109
119
|
const sseStream = (fn, init) => {
|
|
110
120
|
const stream = new SigmxStream(init);
|
|
111
|
-
Promise.resolve().then(() => fn(stream)).
|
|
121
|
+
Promise.resolve().then(() => fn(stream)).then(
|
|
122
|
+
() => stream.close(),
|
|
123
|
+
(e) => {
|
|
124
|
+
console.error("sigmx sseStream:", e);
|
|
125
|
+
stream.error(e);
|
|
126
|
+
}
|
|
127
|
+
);
|
|
112
128
|
return stream.response;
|
|
113
129
|
};
|
|
114
130
|
const html = (body, o = {}) => new Response(String(body), {
|
|
@@ -116,8 +132,7 @@ const html = (body, o = {}) => new Response(String(body), {
|
|
|
116
132
|
headers: {
|
|
117
133
|
"content-type": "text/html; charset=utf-8",
|
|
118
134
|
...o.selector ? { "sigmx-selector": o.selector } : {},
|
|
119
|
-
...o.mode ? { "sigmx-mode": o.mode } : {}
|
|
120
|
-
...o.useViewTransition ? { "sigmx-use-view-transition": "true" } : {}
|
|
135
|
+
...o.mode ? { "sigmx-mode": o.mode } : {}
|
|
121
136
|
}
|
|
122
137
|
});
|
|
123
138
|
const json = (signals, o = {}) => new Response(JSON.stringify(signals), {
|
|
@@ -137,32 +152,44 @@ class SignalsError extends Error {
|
|
|
137
152
|
return Response.json({ error: this.message, issues: this.issues }, { status: this.status });
|
|
138
153
|
}
|
|
139
154
|
}
|
|
155
|
+
const fieldsToObject = (entries) => {
|
|
156
|
+
const out = {};
|
|
157
|
+
for (const [k, v] of entries) out[k] = k in out ? [].concat(out[k], v) : v;
|
|
158
|
+
return out;
|
|
159
|
+
};
|
|
160
|
+
const isObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
140
161
|
async function readSignals(request, schema) {
|
|
141
162
|
let raw;
|
|
142
163
|
const method = request.method.toUpperCase();
|
|
143
164
|
const type = request.headers.get("content-type") ?? "";
|
|
144
165
|
try {
|
|
145
166
|
if (method === "GET" || method === "DELETE") {
|
|
146
|
-
const
|
|
147
|
-
|
|
167
|
+
const params = new URL(request.url).searchParams;
|
|
168
|
+
const q = params.get(SIGNALS_KEY);
|
|
169
|
+
raw = q ? JSON.parse(q) : fieldsToObject(params);
|
|
148
170
|
} else if (type.includes("application/json")) {
|
|
149
171
|
const text = await request.text();
|
|
150
172
|
raw = text ? JSON.parse(text) : {};
|
|
151
173
|
} else if (type.includes("form")) {
|
|
152
|
-
raw =
|
|
174
|
+
raw = fieldsToObject(await request.formData());
|
|
153
175
|
} else {
|
|
154
176
|
raw = {};
|
|
155
177
|
}
|
|
156
178
|
} catch (e) {
|
|
157
179
|
throw new SignalsError(`could not parse signals: ${e.message}`, [], 400);
|
|
158
180
|
}
|
|
181
|
+
if (!isObject(raw)) throw new SignalsError("signals must be an object", [], 400);
|
|
159
182
|
return validateSignals(raw, schema);
|
|
160
183
|
}
|
|
184
|
+
const describeIssue = (i) => {
|
|
185
|
+
const path = i.path?.map((p) => typeof p === "object" ? p.key : p).join(".");
|
|
186
|
+
return path ? `${path}: ${i.message}` : i.message;
|
|
187
|
+
};
|
|
161
188
|
async function validateSignals(raw, schema) {
|
|
162
189
|
if (!schema) return raw;
|
|
163
190
|
const result = await schema["~standard"].validate(raw);
|
|
164
191
|
if (result.issues)
|
|
165
|
-
throw new SignalsError(`invalid signals: ${result.issues.map(
|
|
192
|
+
throw new SignalsError(`invalid signals: ${result.issues.map(describeIssue).join("; ")}`, result.issues);
|
|
166
193
|
return result.value;
|
|
167
194
|
}
|
|
168
195
|
const isSigmxRequest = (request) => request.headers.get("sigmx-request") === "true";
|
|
@@ -174,6 +201,7 @@ export {
|
|
|
174
201
|
SigmxStream,
|
|
175
202
|
SignalsError,
|
|
176
203
|
executeScript,
|
|
204
|
+
fieldsToObject,
|
|
177
205
|
formatEvent,
|
|
178
206
|
html,
|
|
179
207
|
isSigmxRequest,
|
package/dist/server.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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": "AAAO,MAAM,cAAc;AACpB,MAAM,uBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,MAAM,cAAc;AAAA,EACzB,gBAAgB;AAAA,EAChB,iBAAiB;
|
|
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} 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}\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 lines.push(`elements ${String(html).trim()}`);\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\nconst oneLine = (s: string) => s.replace(/[\\r\\n]+/g, ' ');\n\n/**\n * One event on the wire. A `key value` line whose value spans several lines becomes several\n * `data: key \u2026` lines (the client joins them again), so no value can inject an extra field or event.\n */\nexport const formatEvent = (e: ServerEvent): string =>\n `${[\n e.id !== undefined && `id: ${oneLine(e.id)}`,\n e.retry !== undefined && `retry: ${e.retry}`,\n `event: ${oneLine(e.event)}`,\n ...e.lines.flatMap((l) => {\n const i = l.indexOf(' ');\n const key = i < 0 ? l : l.slice(0, i);\n return (i < 0 ? [''] : l.slice(i + 1).split(/\\r?\\n/)).map((v) => `data: ${key}${i < 0 ? '' : ` ${v}`}`);\n }),\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 /** End the stream with an error so the client sees a failure (and retries) rather than a clean end. */\n error(reason: unknown): void {\n if (this.open) {\n this.open = false;\n this.controller.error(reason);\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 .then(\n () => stream.close(),\n (e) => {\n console.error('sigmx sseStream:', e);\n stream.error(e);\n },\n );\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 },\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/** Form fields as an object; a repeated name becomes an array. */\nexport const fieldsToObject = (entries: Iterable<[string, unknown]>): Record<string, any> => {\n const out: Record<string, any> = {};\n for (const [k, v] of entries) out[k] = k in out ? ([] as unknown[]).concat(out[k], v) : v;\n return out;\n};\n\nconst isObject = (v: unknown): v is Record<string, unknown> => typeof v === 'object' && v !== null && !Array.isArray(v);\n\n/**\n * Read the signals a sigmx request carries: the `sigmx` query parameter on GET/DELETE (or the plain\n * query parameters of a `contentType: 'form'` GET), a JSON body, or form fields. 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 params = new URL(request.url).searchParams;\n const q = params.get(SIGNALS_KEY);\n raw = q ? JSON.parse(q) : fieldsToObject(params);\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 = fieldsToObject(await request.formData());\n } else {\n raw = {};\n }\n } catch (e) {\n throw new SignalsError(`could not parse signals: ${(e as Error).message}`, [], 400);\n }\n if (!isObject(raw)) throw new SignalsError('signals must be an object', [], 400);\n return validateSignals(raw, schema);\n}\n\nconst describeIssue = (i: SchemaIssue): string => {\n const path = i.path?.map((p) => (typeof p === 'object' ? p.key : p)).join('.');\n return path ? `${path}: ${i.message}` : i.message;\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(describeIssue).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
6
|
"names": ["html"]
|
|
7
7
|
}
|
package/dist/sigmx.standalone.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e,t,n=e=>e.replace(/([a-z0-9])([A-Z])|([A-Z]+)([A-Z][a-z])/g,"$1$3 $2$4").split(/[^A-Za-z0-9]+/).filter(Boolean).map(e=>e.toLowerCase()),r=e=>e[0].toUpperCase()+e.slice(1),a=e=>n(e).join("-"),i=e=>n(e).map((e,t)=>t?r(e):e).join(""),l={camel:i,kebab:a,snake:e=>n(e).join("_"),pascal:e=>n(e).map(r).join("")},o=e=>{if(null===e||"object"!=typeof e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||null===t},s=(e,t,n)=>{let r=t.split("."),a=r.pop(),i=e;for(let e of r)o(i[e])||(i[e]={}),i=i[e];return i[a]=n,e},u=(e,t)=>void 0===e?t:"string"==typeof e?new RegExp(e.replace(/^\/|\/$/g,"")):e,d=e=>{if("function"==typeof e)return e;let t=u(e?.include,/(?:)/),n=u(e?.exclude,/(?!)/);return e=>t.test(e)&&!n.test(e)},c=(e,t=0)=>{for(let t of e??[]){let e=/^(\d+(?:\.\d+)?)(ms|s)?$/.exec(t);if(e)return+e[1]*("s"===e[2]?1e3:1)}return t},f=(e,t,n,r,a)=>{let i,l,o=()=>{i=void 0,r&&l&&e(...l),l=void 0};return(...r)=>{if(i)return l=r,void(a&&(clearTimeout(i),i=setTimeout(o,t)));n?e(...r):l=r,i=setTimeout(o,t)}},m=(e,t)=>{let n=t.get("delay");n&&(e=((e,t)=>(...n)=>{setTimeout(e,t,...n)})(e,c(n)));let r=t.get("debounce");r&&(e=((e,t,n=!1,r=!0)=>f(e,t,n,r,!0))(e,c(r,300),r.includes("leading"),!r.includes("notrailing")));let a=t.get("throttle");return a&&(e=((e,t,n=!0,r=!1)=>f(e,t,n,r,!1))(e,c(a,300),!a.includes("noleading"),a.includes("trailing"))),e},h=(e,t)=>t.has("viewtransition")&&"startViewTransition"in document?(...t)=>{document.startViewTransition(()=>e(...t))}:e,p=(e,t)=>Function(...e,t),g=new Map,v=e=>/[A-Za-z0-9_$]/.test(e),y=(e,t)=>{let n=0,r=e.length;for(;n<r;){let a=e[n],i=e[n+1];if('"'===a||"'"===a||"`"===a){let i=n+1;for(;i<r&&e[i]!==a;)i+="\\"===e[i]?2:1;t(e.slice(n,i+1),n),n=i+1}else if("/"===a&&"/"===i){let t=e.indexOf("\n",n);n=t<0?r:t}else if("/"===a&&"*"===i){let t=e.indexOf("*/",n+2);n=t<0?r:t+2}else n+=t(a,n)||1}},b=e=>(t,n,r)=>((e,t,n,r)=>{let a=`${+r}|${n.join()}|${t}`,i=g.get(a);if(i)return i;let l,o=(e=>{let t="";return y(e,(n,r)=>{if("@"===n){let n=r+1;for(;n<e.length&&v(e[n]);)n++;let a=n;for(;a<e.length&&/\s/.test(e[a]);)a++;if(n>r+1&&"("===e[a])return t+=`__a.${e.slice(r+1,n)}(`,a+1-r}t+=n}),t})(t.trim()),s=t=>e(["$","__a",...n],`with($.scope){${t}\n}`);if(r)try{l=s(`return(${o}\n)`)}catch{let e=(e=>{let t=[],n=0,r=0;return y(e,(a,i)=>{a.length>1||("([{".includes(a)?n++:")]}".includes(a)?n--:";"===a&&!n&&(t.push(e.slice(r,i)),r=i+1))}),t.push(e.slice(r)),t.filter(e=>e.trim())})(o),t=e.pop()??"";try{l=s(`${e.join(";")};return(${t}\n)`)}catch{l=s(o)}}else l=s(o);return g.set(a,l),l})(e,t,n,r),w=0,k=!1,S=new Set,x=new Set,A=class{e;i=0;s=new Set;constructor(e){this.e=e}get value(){return e&&(e.t.set(this,this.i),this.s.add(e)),this.e}set value(e){Object.is(e,this.e)||(this.e=e,this.bump())}peek(){return this.e}bump(){this.i++;for(let e of this.s)e.u();w||N()}},E=e=>{for(let t of e.t.keys())t.s.delete(e);e.t.clear()},T=e=>{for(let[t,n]of e.t)if(t instanceof M&&t.f(),t.i!==n)return!0;return!1},$=(t,n)=>{E(t);let r=e;e=t;try{return n()}finally{e=r}},M=class extends A{t=new Map;c=!0;r;constructor(e){super(void 0),this.r=e}f(){if(!this.c||(this.c=!1,this.t.size&&!T(this)))return;let e=$(this,this.r);Object.is(e,this.e)||(this.e=e,this.i++)}get value(){return this.f(),super.value}set value(e){throw new Error("computed signals are read-only")}peek(){return this.f(),this.e}u(){if(!this.c){this.c=!0;for(let e of this.s)e.u()}}},L=class{t=new Map;d=!1;p=!1;o=new Set;r;m;constructor(e,t){this.r=e,this.m=t}u(){!this.p&&!this.d&&(this.d=!0,S.add(this))}b(){if(this.d=!1,this.p||this.t.size&&!T(this))return;for(let e of this.o)e.g();this.o.clear();let e=t;t=this,w++;try{$(this,this.r)}catch(e){if(!this.m)throw e;this.m(e)}finally{w--,t=e}}g(){this.p=!0,E(this);for(let e of this.o)e.g();this.o.clear(),S.delete(this)}},q=e=>new M(e),O=e=>{w++;try{return e()}finally{--w||N()}},P=t=>{let n=e;e=void 0;try{return t()}finally{e=n}},N=()=>{if(!k&&!w){k=!0;try{let e=0;for(;S.size;){if(++e>1e5)throw S.clear(),new Error("effect loop");let t=S.values().next().value;S.delete(t),t.b()}}finally{k=!1}for(let e of x)e()}},j=e=>e.slice(0,Math.max(0,e.lastIndexOf("."))),C=e=>e.slice(e.lastIndexOf(".")+1),H=(e,t)=>e?`${e}.${t}`:t,R=(e,t)=>!t||e===t||e.startsWith(`${t}.`),I=e=>"string"==typeof e,V=()=>{let e=new Map,t=new Map([["",new Set]]),n=new A(0),r=new Map,a=new Set,i=new Map,l=new WeakMap,u=r=>{let a=t.get(r);return a||(e.has(r)&&c(r),a=new Set,t.set(r,a),u(j(r)).add(C(r)),n.bump()),a},c=a=>{let i=e.get(a);i&&(e.delete(a),t.get(j(a))?.delete(C(a)),r.set(a,null),i.bump(),n.bump())},f=e=>{let r=t.get(e);if(r){for(let t of[...r])m(H(e,t));e&&(t.delete(e),t.get(j(e))?.delete(C(e)),i.delete(e)),n.bump()}},m=e=>O(()=>{c(e),f(e)}),h=(r,a)=>O(()=>{t.has(r)&&f(r);let i=e.get(r);e.set(r,a),u(j(r)).add(C(r)),i?.bump(),n.bump()}),p=(n,a)=>O(()=>{if(null==a)return m(n);if(o(a)){let e=u(n);for(let t of[...e])t in a||m(H(n,t));for(let e in a)p(H(n,e),a[e]);return}t.has(n)&&f(n);let i=e.get(n);if(i instanceof M)throw new Error(`"${n}" is a computed signal and cannot be assigned`);if(i){if(Object.is(i.peek(),a))return;i.value=a}else h(n,new A(a));r.set(n,a)}),g=(n,{at:r="",ifMissing:a=!1}={})=>O(()=>{if(o(n)){u(r);for(let i in n){let l=H(r,i),s=n[i];null===s?a||m(l):o(s)?g(s,{at:l,ifMissing:a}):(!a||!e.has(l)&&!t.has(l))&&!(e.get(l)instanceof M)&&p(l,s)}}}),v=a=>{let i=e.get(a);if(i){let e=i.value;return Array.isArray(e)?((e,t,n)=>{let a=l.get(e);if(!a){let i=()=>{r.set(n,e),t.bump()};a=new Proxy(e,{set:(e,t,n)=>(e[t]=n,i(),!0),deleteProperty:(e,t)=>(delete e[t],i(),!0)}),l.set(e,a)}return a})(e,i,a):e}if(t.has(a))return y(a);n.value},y=e=>{let r=i.get(e);if(!r){let a=()=>(n.value,t.get(e));r=new Proxy({},{get:(t,n)=>I(n)?"toJSON"===n?()=>w(void 0,{at:e}):v(H(e,n)):void 0,set:(t,n,r)=>(I(n)&&p(H(e,n),r),!0),deleteProperty:(t,n)=>(I(n)&&m(H(e,n)),!0),has:(e,t)=>I(t)&&!!a()?.has(t),ownKeys:()=>[...a()??[]],getOwnPropertyDescriptor:(t,n)=>I(n)&&a()?.has(n)?{enumerable:!0,configurable:!0,writable:!0,value:v(H(e,n))}:void 0}),i.set(e,r)}return r},b=new Proxy({},{has:(e,t)=>I(t)&&"$"===t[0],get:(e,t)=>I(t)?"$"===t?y(""):v(t.slice(1)):void 0,set:(e,t,n)=>(I(t)&&("$"===t?g(n):p(t.slice(1),n)),!0)}),w=(r,{at:a="",computed:i=!0}={})=>{n.value;let l=d(r),o={},u=e=>a?e.slice(a.length+1):e;for(let[t,n]of e)!R(t,a)||!l(t)||!i&&n instanceof M||s(o,u(t),n.value);for(let e of t.keys())e&&e!==a&&R(e,a)&&l(e)&&!t.get(e)?.size&&s(o,u(e),{});return o};return x.add(()=>{if(!r.size)return;let e={};for(let[t,n]of r)s(e,t,n);r.clear();for(let t of a)t(e)}),{get:v,set:p,merge:g,remove:m,has:n=>e.has(n)||t.has(n),define:h,paths:t=>{n.value;let r=d(t);return[...e.keys()].filter(r)},snapshot:w,onPatch:e=>(a.add(e),()=>a.delete(e)),get $(){return y("")},scope:b}},z=e=>1===e.nodeType,D=e=>z(e)?[e,...e.querySelectorAll("*")]:e instanceof ShadowRoot?[...e.querySelectorAll("*")]:[],B=new Map,F=e=>({type:"attribute",...e}),U=e=>({type:"action",...e}),W=e=>({type:"handler",...e}),J=(e,t,n)=>{!1===n||null==n?e.removeAttribute(t):e.setAttribute(t,!0===n?"":"object"==typeof n?JSON.stringify(n):String(n))},_=F({name:"attr",value:"required",mount({el:e,key:t,cased:n,evaluate:r,effect:a}){a(()=>{if(t)return J(e,n("kebab"),r());let a=r();for(let t in a)J(e,t,a[t])})}}),Z=F({name:"boost",key:"forbidden",value:"forbidden",mount({el:e,mods:t,store:n,runtime:r,listen:a,error:i,cleanup:l}){let o={el:e,store:n,runtime:r,error:i,cleanup:l},s=(n,a="get",i,l)=>{let s=l?{contentType:"form",selector:void 0,openWhenHidden:!0}:{openWhenHidden:!0},u=r.call(a,{...o,el:l??e,evt:i},[n,s]);history[t.has("replace")?"replaceState":"pushState"](null,"",n),Promise.resolve(u).then(()=>scrollTo(0,0))};a(e,"click",e=>{let t=e.target.closest("a[href]");!t||e.defaultPrevented||e.button||e.metaKey||e.ctrlKey||e.shiftKey||t.target||t.hasAttribute("download")||t.origin!==location.origin||t.hash&&t.pathname===location.pathname||(e.preventDefault(),s(t.href,"get",e))}),a(e,"submit",e=>{let t=e.target;if(e.defaultPrevented||t.target)return;let n=new URL(t.action||location.href);n.origin===location.origin&&(e.preventDefault(),s(n.href,"post"===t.method.toLowerCase()?"post":"get",e,t))}),a(window,"popstate",()=>r.call("get",o,[location.href,{openWhenHidden:!0}]))}}),K=F({name:"indicator",mount({el:e,key:t,value:n,cased:r,store:a,listen:i}){let l=t?r():n.trim(),o=new Set;return a.set(l,!1),i(document,"sigmx-fetch",t=>{let{el:n,type:r,rid:i}=t.detail;if("started"!==r||n!==e&&!e.contains(n)){if("finished"!==r)return;o.delete(i)}else o.add(i);a.set(l,o.size>0)}),()=>a.set(l,!1)}}),G=F({name:"class",value:"required",mount({el:e,key:t,cased:n,evaluate:r,effect:a}){let i=new Set;return a(()=>{let a=t?{[n("kebab")]:r()}:r();for(let t in a)for(let n of t.split(/\s+/).filter(Boolean))e.classList.toggle(n,!!a[t]),a[t]?i.add(n):i.delete(n)}),()=>e.classList.remove(...i)}}),Q=F({name:"cloak",key:"forbidden",value:"forbidden",mount:({el:e,attr:t})=>e.removeAttribute(t)}),X=F({name:"collapse",key:"forbidden",value:"required",mount({el:e,mods:t,evaluate:n,effect:r,cleanup:a}){let i,l,o=e.style,s=c(t.get("duration"),250),u=t.get("min")?.[0]??"0px",d=matchMedia("(prefers-reduced-motion: reduce)").matches,f=!0,m=e=>{o.transition="",o.overflow=e?"":"hidden",o.height=e?"":u};r(()=>{let t=!!n();if(t===l)return;if(l=t,clearTimeout(i),f||d)return f=!1,m(t);let r=`${e.getBoundingClientRect().height}px`;o.overflow="hidden",o.height=t?u:r,e.getBoundingClientRect(),o.transition=`height ${s}ms ease`,o.height=t?`${e.scrollHeight}px`:u,i=setTimeout(()=>m(t),s+20)}),a(()=>clearTimeout(i))}}),Y=F({name:"signals",value:"required",mount({key:e,cased:t,evaluate:n,store:r,mods:a}){let i=n();r.merge(e?s({},t(),i):i,{ifMissing:a.has("ifmissing")})}}),ee=F({name:"computed",value:"required",mount({key:e,cased:t,evaluate:n,store:r,error:a}){if(e)return void r.define(t(),q(()=>n()));let i=n();for(let e in i){if("function"!=typeof i[e])throw a(`"${e}" must be a function`);r.define(e,q(i[e]))}}}),te=F({name:"ref",mount({el:e,key:t,value:n,cased:r,store:a}){let i=t?r():n.trim();return a.set(i,e),()=>a.remove(i)}}),ne=F({name:"on",key:"required",value:"required",returns:!1,mount({el:e,mods:t,cased:n,evaluate:r,listen:a}){let i=n("kebab"),l=t.has("outside"),o=t.has("window")?window:t.has("document")||l||i.startsWith("sigmx-")?document:e,s=m(h(e=>r(e),t),t);a(o,i,n=>{l&&e.contains(n.target)||((t.has("prevent")||"submit"===i&&e instanceof HTMLFormElement)&&n.preventDefault(),t.has("stop")&&n.stopPropagation(),s(n))},{capture:t.has("capture"),passive:t.has("passive"),once:t.has("once")})}}),re=F({name:"on-raf",key:"forbidden",value:"required",returns:!1,mount({mods:e,evaluate:t}){let n=m(()=>t(),e),r=requestAnimationFrame(function e(){n(),r=requestAnimationFrame(e)});return()=>cancelAnimationFrame(r)}}),ae=F({name:"html",key:"forbidden",value:"required",mount:({el:e,evaluate:t,effect:n})=>n(()=>{e.innerHTML=String(t()??"")})}),ie=F({name:"style",value:"required",mount({el:e,key:t,cased:n,evaluate:r,effect:i}){let l=new Map,o=(t,n)=>{l.has(t)||l.set(t,e.style.getPropertyValue(t)),n||0===n?e.style.setProperty(t,String(n)):e.style.setProperty(t,l.get(t)??"")};return i(()=>{let e=t?{[n("kebab")]:r()}:r();for(let t of l.keys())t in e||o(t,"");for(let t in e)o(a(t),e[t])}),()=>{for(let[t,n]of l)e.style.setProperty(t,n)}}}),le={9:/\d/,a:/[a-zA-Z]/,"*":/[a-zA-Z0-9]/},oe=F({name:"mask",key:"forbidden",value:"required",mount({el:e,value:t,mods:n,evaluate:r,listen:a,effect:i}){let l=e,o=t,s=()=>{let e=((e,t)=>{let n="",r=0;for(let a of e){if(r>=t.length)break;let e=le[a];if(e){for(;r<t.length&&!e.test(t[r]);)r++;if(r>=t.length)break;n+=t[r++]}else n+=a,t[r]===a&&r++}return n})(o,l.value);e!==l.value&&(l.value=e,l.dispatchEvent(new Event("input",{bubbles:!0})))};a(l,"input",s),n.has("dynamic")?i(()=>{o=String(r()??""),s()}):s()}}),se=F({name:"match-media",key:"required",value:"required",mount({cased:e,evaluate:t,store:n,listen:r}){let a=String(t()).trim();(!/^[(a-z]/.test(a)||!a.startsWith("(")&&a.includes(":")&&!/^(not|only|all|screen|print)\b/.test(a))&&(a=`(${a})`);let i=window.matchMedia(a),l=e(),o=()=>n.set(l,i.matches);o(),r(i,"change",o)}}),ue=F({name:"init",key:"forbidden",value:"required",returns:!1,mount({mods:e,evaluate:t}){m(h(()=>t(),e),e)()}}),de=F({name:"on-signal-patch",value:"required",returns:!1,args:["patch"],mount({key:e,cased:t,mods:n,evaluate:r,listen:a}){let i=e?t():"",l=!1,o=m(e=>{if(!l){l=!0;try{r(void 0,e)}finally{l=!1}}},n);a(document,"sigmx-signal-patch",e=>{(!i||((e,t)=>{let n=e;for(let e of t.split(".")){if(null==n||"object"!=typeof n||!(e in n))return!1;n=n[e]}return!0})(e.detail,i))&&o(e.detail)})}}),ce=F({name:"remove-me",key:"forbidden",mount({el:e,value:t,cleanup:n}){let r=setTimeout(()=>e.remove(),c([t],0));n(()=>clearTimeout(r))}}),fe=(e,t,n)=>t.find(t=>e.has(t))??n,me=F({name:"scroll-into-view",key:"forbidden",value:"forbidden",mount({el:e,mods:t}){e.scrollIntoView({behavior:fe(t,["smooth","instant","auto"],"smooth"),block:fe(t,["vstart","vcenter","vend","vnearest"],"vcenter").slice(1),inline:fe(t,["hstart","hcenter","hend","hnearest"],"hcenter").slice(1)}),t.has("focus")&&e.focus?.()}}),he=F({name:"on-resize",key:"forbidden",value:"required",returns:!1,mount({el:e,mods:t,evaluate:n}){let r=m(()=>n(),t),a=new ResizeObserver(()=>r());return a.observe(e),()=>a.disconnect()}}),pe=F({name:"json-signals",key:"forbidden",mount({el:e,value:t,mods:n,evaluate:r,effect:a,store:i}){let l=t?r():void 0;a(()=>{e.textContent=JSON.stringify(i.snapshot(l),null,n.has("terse")?0:2)})}}),ge=F({name:"persist",mount({key:e,value:t,mods:n,evaluate:r,store:a,effect:i}){let l=n.has("session")?sessionStorage:localStorage,o=e||"sigmx",s=t?r():void 0,u=l.getItem(o);u&&a.merge(JSON.parse(u)),i(()=>l.setItem(o,JSON.stringify(a.snapshot(s,{computed:!1}))))}}),ve=F({name:"teleport",key:"forbidden",value:"required",mount({el:e,value:t,mods:n,error:r}){let a=document.querySelector(t);if(!a)throw r(`no element matches "${t}"`);if(e.parentElement===a)return;let i=n.has("prepend")?a.firstChild:null,l=a;l.moveBefore?l.moveBefore(e,i):a.insertBefore(e,i)}}),ye=F({name:"text",key:"forbidden",value:"required",mount:({el:e,evaluate:t,effect:n})=>n(()=>{e.textContent=String(t()??"")})}),be=F({name:"on-interval",key:"forbidden",value:"required",returns:!1,mount({mods:e,evaluate:t}){let n=e.get("duration"),r=h(()=>t(),e);n?.includes("leading")&&r();let a=setInterval(r,c(n,1e3));return()=>clearInterval(a)}}),we=F({name:"transition",key:"forbidden",value:"required",mount({el:e,mods:t,evaluate:n,effect:r}){let a=e.style,i=matchMedia("(prefers-reduced-motion: reduce)").matches?0:c(t.get("duration"),200),l=t.has("scale")?+(t.get("scale")?.[0]??95)/100:1,o=t.get("origin")?.join(" ");o&&(a.transformOrigin=o);let s,u,d={opacity:0,transform:`scale(${l})`},f={opacity:1,transform:"scale(1)"},m="none"===a.display?"":a.display,h=!0;r(()=>{let t=!!n();if(t!==u){if(u=t,s?.cancel(),h)return h=!1,void(a.display=t?m:"none");t&&(a.display=m),s=e.animate(t?[d,f]:[f,d],{duration:i,easing:"ease-out",fill:"forwards"}),s.onfinish=()=>{s?.cancel(),t||(a.display="none")}}})}}),ke=F({name:"view-transition",key:"forbidden",value:"required",mount:({el:e,evaluate:t,effect:n})=>n(()=>e.style.setProperty("view-transition-name",String(t())))}),Se=F({name:"trap",key:"forbidden",value:"required",mount({el:e,mods:t,evaluate:n,effect:r,listen:a,cleanup:i}){let l=null,o=!1,s=[],u=()=>[...e.querySelectorAll('a[href],button:not([disabled]),input:not([disabled]):not([type=hidden]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"]),[contenteditable]')].filter(e=>null!==e.offsetParent||e===document.activeElement),d=()=>{if(o){o=!1;for(let e of s.splice(0))e.removeAttribute("inert");l?.focus?.()}};a(document,"keydown",e=>{if(!o||"Tab"!==e.key)return;let t=u();if(!t.length)return e.preventDefault();let n=t.indexOf(document.activeElement),r=e.shiftKey?n<=0?t.length-1:n-1:n===t.length-1?0:n+1;(n<0||r!==n+(e.shiftKey?-1:1))&&(e.preventDefault(),t[r].focus())}),r(()=>{if(n()){if(o)return;if(o=!0,l=document.activeElement,t.has("inert"))for(let t=e;t&&t!==document.body;t=t.parentElement)for(let e of t.parentElement?.children??[])e!==t&&!e.hasAttribute("inert")&&(e.setAttribute("inert",""),s.push(e));queueMicrotask(()=>(u()[0]??e).focus?.())}else d()}),i(d)}}),xe={linear:e=>e,"ease-in":e=>e*e,"ease-out":e=>1-(1-e)*(1-e),"ease-in-out":e=>e<.5?2*e*e:1-(-2*e+2)**2/2},Ae=e=>{let t=/^\s*(-?\d*\.?\d+)([a-z%]*)\s*$/i.exec(e);return t?{n:+t[1],unit:t[2]}:void 0},Ee=F({name:"animate",key:"required",value:"required",mount({el:e,mods:t,cased:n,evaluate:r,effect:a,cleanup:i}){let l,o=n("kebab"),s=CSS.supports(o,"inherit"),u=c(t.get("duration"),300),d=xe[t.get("easing")?.[0]??"ease-out"]??xe["ease-out"],f=matchMedia("(prefers-reduced-motion: reduce)").matches,m=t=>s?e.style.setProperty(o,t):e.setAttribute(o,t),h=0,p=!0;a(()=>{let t=String(r());if(t===l)return;l=t,cancelAnimationFrame(h);let n=Ae(s?e.style.getPropertyValue(o)||getComputedStyle(e).getPropertyValue(o):e.getAttribute(o)??""),a=Ae(t);if(n&&a&&"px"===n.unit&&"%"===a.unit&&("width"===o||"height"===o)&&e.parentElement){let t="width"===o?e.parentElement.clientWidth:e.parentElement.clientHeight;t&&(n={n:n.n/t*100,unit:"%"})}if(p||f||!n||!a||n.unit!==a.unit)return p=!1,m(t);let i=n.n,c=a.n,g=performance.now(),v=e=>{let t=Math.min(1,(e-g)/u);m(`${i+(c-i)*d(t)}${a.unit}`),t<1&&(h=requestAnimationFrame(v))};h=requestAnimationFrame(v)}),i(()=>cancelAnimationFrame(h))}}),Te=(e,t,...n)=>({l:e,h:t,y:n}),$e=F({name:"bind",mount({el:e,key:t,value:n,cased:r,mods:a,store:i,listen:l,effect:o}){let s,u=t?r():n.trim(),d=()=>i.get(u),c=e=>"number"==typeof d()?+e:e,f=a.get("prop")?.[0];if(f)s=Te(()=>e[f],t=>e[f]=t,"input","change");else if(e instanceof HTMLInputElement){let t=e.type;if("checkbox"===t){let t=e.hasAttribute("value")&&"on"!==e.value;s={l:()=>{let n=d();if(Array.isArray(n)){let t=new Set(n);return e.checked?t.add(e.value):t.delete(e.value),[...t]}return t?e.checked?e.value:"":e.checked},h:n=>{e.checked=Array.isArray(n)?n.includes(e.value):t?n===e.value:!!n},y:["input"]}}else if("radio"===t)e.name||(e.name=u),s=Te(()=>e.checked?c(e.value):d(),t=>e.checked=String(t)===e.value,"input");else{if("file"===t)return void l(e,"change",()=>(e=>Promise.all([...e.files??[]].map(e=>new Promise(t=>{let n=new FileReader;n.onloadend=()=>t({name:e.name,type:e.type,size:e.size,contents:String(n.result).split(",")[1]??""}),n.readAsDataURL(e)}))))(e).then(e=>i.set(u,e)));s=Te("number"===t||"range"===t?()=>""===e.value?"":+e.value:()=>e.value,t=>e.value=String(t??""),"input")}}else s=e instanceof HTMLSelectElement?{l:()=>e.multiple?[...e.selectedOptions].map(e=>c(e.value)):c(e.value),h:t=>{if(e.multiple)for(let n of e.options)n.selected=Array.isArray(t)&&t.map(String).includes(n.value);else e.value=String(t??"")},y:["change"]}:e instanceof HTMLTextAreaElement||"value"in e?Te(()=>e.value,t=>e.value=String(t??""),"input","change"):Te(()=>e.getAttribute("value"),t=>e.setAttribute("value",String(t??"")),"change");if(!i.has(u)){let e=s.l();void 0!==e&&""!==e&&i.set(u,e)}let m=()=>i.set(u,s.l());for(let t of a.get("event")??s.y)l(e,t,m);l(e,"sigmx-prop-change",m),o(()=>{let e=d();void 0!==e&&s.h(e)})}}),Me=e=>{try{return JSON.parse(e)}catch{return e}},Le=F({name:"query-string",mount({key:e,value:t,mods:n,evaluate:r,cased:a,store:i,listen:l,effect:o}){let u=n.has("history"),c=e=>{e!==location.pathname+location.search+location.hash&&window.history[u?"pushState":"replaceState"](null,"",e)},f=e=>`${location.pathname}${e.size?`?${e}`:""}${location.hash}`,m=!1,h=e=>{m=!0;try{e()}finally{m=!1}};if(e){let n=a(),s=t?r():"",d=()=>{let t=new URLSearchParams(location.search).get(e);i.set(n,null===t?s:Me(t))};return(!i.has(n)||new URLSearchParams(location.search).has(e))&&d(),o(()=>{let t=i.get(n);if(m)return;let r=new URLSearchParams(location.search);void 0===t||((e,t)=>JSON.stringify(e)===JSON.stringify(t))(t,s)?r.delete(e):r.set(e,"string"==typeof t?t:JSON.stringify(t)),c(f(r))}),void(u&&l(window,"popstate",()=>h(d)))}let p=t?r():void 0,g=d(p),v=()=>{let e={};for(let[t,n]of new URLSearchParams(location.search))g(t)&&s(e,t,Me(n));i.merge(e)};v(),o(()=>{let e=i.snapshot(p,{computed:!1});if(m)return;let t=new URLSearchParams(location.search),r=(e,a)=>{for(let i in e){let l=a?`${a}.${i}`:i,o=e[i];o&&"object"==typeof o&&!Array.isArray(o)?r(o,l):!n.has("filter")||""!==o&&null!=o?t.set(l,"string"==typeof o?o:JSON.stringify(o)):t.delete(l)}};r(e,""),c(f(t))}),u&&l(window,"popstate",()=>h(v))}}),qe=F({name:"replace-url",key:"forbidden",value:"required",mount:({evaluate:e,effect:t})=>t(()=>history.replaceState(history.state,"",new URL(String(e()),location.href)))}),Oe=F({name:"custom-validity",key:"forbidden",value:"required",mount({el:e,evaluate:t,effect:n,error:r}){if(!("setCustomValidity"in e))throw r("only works on form fields");n(()=>e.setCustomValidity(String(t()??"")))}}),Pe=F({name:"on-intersect",key:"forbidden",value:"required",returns:!1,mount({el:e,mods:t,evaluate:n}){let r=t.get("threshold")?.[0],a=t.has("full")?1:t.has("half")?.5:r?Math.min(100,Math.max(0,+r))/100:0,i=m(h(()=>n(),t),t),l=new IntersectionObserver(e=>{for(let n of e)n.isIntersecting!==t.has("exit")&&(i(),t.has("once")&&l.disconnect())},{threshold:a});return l.observe(e),()=>l.disconnect()}}),Ne=F({name:"show",key:"forbidden",value:"required",mount({el:e,evaluate:t,effect:n}){let r="none"===e.style.display?"":e.style.display;return n(()=>{e.style.display=t()?r:"none"}),()=>{e.style.display=r}}}),je=F({name:"effect",key:"forbidden",value:"required",returns:!1,mount:e=>e.effect(()=>e.evaluate())}),Ce=U({name:"setAll",call:({store:e},t,n)=>O(()=>P(()=>{for(let r of e.paths(n))e.set(r,t)}))}),He=U({name:"toggleAll",call:({store:e},t)=>O(()=>P(()=>{for(let n of e.paths(t))e.set(n,!e.get(n))}))}),Re=U({name:"confirm",call:(e,t)=>window.confirm(t)}),Ie=U({name:"clipboard",call:(e,t,n=!1)=>navigator.clipboard.writeText(n?(new TextDecoder).decode(Uint8Array.from(atob(t),e=>e.charCodeAt(0))):t)}),Ve=U({name:"dispatch",call:({el:e},t,n)=>e.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0}))}),ze={number:(e,t,n)=>new Intl.NumberFormat(e,n).format(t),datetime:(e,t,n)=>new Intl.DateTimeFormat(e,n).format(t),pluralRules:(e,t,n)=>new Intl.PluralRules(e,n).select(t),relativeTime:(e,t,n)=>new Intl.RelativeTimeFormat(e,n).format(t[0],t[1]),list:(e,t,n)=>new Intl.ListFormat(e,n).format(t),displayNames:(e,t,n)=>new Intl.DisplayNames(e,n).of(t)??""},De=U({name:"intl",call:({error:e},t,n,r,a)=>{let i=ze[t];if(!i)throw e(`unknown @intl type "${t}"`);return i(a,n,r)}}),Be=U({name:"fit",call:(e,t,n,r,a,i,l=!1,o=!1)=>{let s=(t-n)/(r-n);l&&(s=Math.min(1,Math.max(0,s)));let u=a+s*(i-a);return o?Math.round(u):u}}),Fe=async(e,t)=>{let n,r,a=e.getReader(),i=new TextDecoder,l="",o="",s=[],u=()=>{s.length&&t({event:o||"message",data:s.join("\n"),id:n,retry:r}),o="",s=[]},d=e=>{if(!e)return u();if(":"===e[0])return;let t=e.indexOf(":"),a=t<0?e:e.slice(0,t),i=t<0?"":e.slice(t+1);" "===i[0]&&(i=i.slice(1)),"event"===a?o=i:"data"===a?s.push(i):"id"===a?n=i:"retry"===a&&/^\d+$/.test(i)&&(r=+i)};for(;;){let{value:e,done:t}=await a.read();if(t)break;for(l+=i.decode(e,{stream:!0});;){let e=l.search(/\r\n|\r|\n/);if(e<0)break;let t=l.slice(0,e);l=l.slice(e+("\r"===l[e]&&"\n"===l[e+1]?2:1)),d(t)}}l&&d(l),u()},Ue=new Map,We=0,Je=()=>new Promise(e=>document.addEventListener("visibilitychange",()=>!document.hidden&&e(),{once:!0})),_e=(e,t,n)=>{for(let r of t){let t=e.headers.get(`sigmx-${r}`);t&&(n[i(r)]=t)}return n},Ze=e=>{let t=document.createElement("script");t.text=e,document.head.append(t),t.remove()},Ke=(e,t)=>U({name:e,call:(e,n,r)=>(async(e,t,n,r={})=>{let{el:a,evt:i,store:l,runtime:o,error:s}=t;if(!n)throw s(`@${e.toLowerCase()} needs a URL`);let u=`${e} ${n}`,d=r.abort instanceof AbortController?r.abort:new AbortController;"none"!==r.abort&&(Ue.get(u)?.abort(),Ue.set(u,d)),t.cleanup(()=>d.abort());let c,f=++We,m=(t,r={})=>o.emit("fetch",{el:a,type:t,method:e,url:n,rid:f,...r}),h={attempts:5,interval:1e3,factor:2,max:3e4,onStatusError:!1,...r.retry},p=!(r.openWhenHidden??"GET"!==e),g="GET"!==e&&"DELETE"!==e,v=()=>{let t,o=new URL(n,location.href),u={Accept:"text/event-stream, text/html, application/json","Sigmx-Request":"true",...r.headers};if("json"===(r.contentType??"json")){let e=r.payload??P(()=>l.snapshot(r.filter??{exclude:/(^|\.)_/})),n=JSON.stringify(e);g?(t=n,u["Content-Type"]??="application/json"):o.searchParams.set("sigmx",n)}else{let e=r.selector?document.querySelector(r.selector):a.closest("form");if(!e)throw s("no form found",{selector:r.selector});if(!e.noValidate&&!e.checkValidity())return void e.reportValidity();let n=i instanceof SubmitEvent?i.submitter:a instanceof HTMLButtonElement&&a.form===e?a:null,l=new FormData(e,n),d="multipart/form-data"===e.enctype;if(g)t=d?l:new URLSearchParams(l),d||(u["Content-Type"]="application/x-www-form-urlencoded");else for(let[e,t]of new URLSearchParams(l))o.searchParams.append(e,t)}return{url:o.toString(),init:{method:e,headers:u,body:t}}},y=(e,t)=>{let n=(e=>{let t={};for(let n of e.split("\n")){let e=n.indexOf(" "),r=e<0?n:n.slice(0,e),a=e<0?"":n.slice(e+1);t[r]=r in t?`${t[r]}\n${a}`:a}return t})(t);o.emit("server-event",{el:a,event:e,data:n}),o.handle(e,n)},b=0,w=h.interval,k=async()=>{if(b++>=h.attempts)throw new Error("retries exhausted");m("retrying",{attempt:b}),await((e,t)=>new Promise(n=>{let r=setTimeout(n,e);t.addEventListener("abort",()=>{clearTimeout(r),n()},{once:!0})}))(w,d.signal),w=Math.min(w*h.factor,h.max)};m("started");try{for(;!d.signal.aborted;){let e=v();if(!e)return;c&&(e.init.headers["Last-Event-ID"]=c);let t=new AbortController,n=()=>document.hidden&&t.abort();p&&document.addEventListener("visibilitychange",n);try{let n=await fetch(e.url,{...e.init,signal:AbortSignal.any([d.signal,t.signal])}),a=n.headers.get("content-type")??"";if(n.status>=400){if(m("error",{status:n.status}),!h.onStatusError)return;await k();continue}if(204===n.status||304===n.status||!n.body)return;if(a.includes("text/event-stream")){if(b=0,w=h.interval,await Fe(n.body,e=>{void 0!==e.id&&(c=e.id),e.retry&&(w=h.interval=e.retry),y(e.event,e.data)}),!r.reconnect)return;await k();continue}let i=await n.text();return void(a.includes("text/html")?o.handle("patch-elements",_e(n,["selector","mode","use-view-transition"],{elements:i})):a.includes("application/json")?o.handle("patch-signals",_e(n,["only-if-missing"],{signals:i})):a.includes("javascript")&&Ze(i))}catch{if(d.signal.aborted)return;t.signal.aborted?await Je():await k()}finally{document.removeEventListener("visibilitychange",n)}}}catch(t){throw m("error",{message:t?.message}),s(`${e} ${n}: ${t?.message??t}`)}finally{m("finished"),Ue.get(u)===d&&Ue.delete(u)}})(t,e,n,r)}),Ge=Ke("get","GET"),Qe=Ke("post","POST"),Xe=Ke("put","PUT"),Ye=Ke("patch","PATCH"),et=Ke("delete","DELETE"),tt=U({name:"peek",call:(e,t)=>P(t)}),nt=U({name:"ws",call({el:e,runtime:t,cleanup:n},r,a={}){let i=new WebSocket(new URL(r,location.href.replace(/^http/,"ws")),a.protocols);return i.onmessage=n=>{for(let r of String(n.data).split(/\n\n+/)){let n="message",a={};for(let e of r.split("\n")){let t=e.indexOf(":");if(t<0)continue;let r=e.slice(0,t),i=e.slice(t+1).trimStart();if("event"===r)n=i;else if("data"===r){let e=i.indexOf(" "),t=e<0?i:i.slice(0,e),n=e<0?"":i.slice(e+1);a[t]=t in a?`${a[t]}\n${n}`:n}}t.emit("server-event",{el:e,event:n,data:a}),t.handle(n,a)}},n(()=>i.close()),{send:e=>i.send("string"==typeof e?e:JSON.stringify(e)),close:()=>i.close(),socket:i}}}),rt=new WeakSet,at=e=>!!e&&1===e.nodeType,it=e=>{if(at(e))for(let t of e.matches("script")?[e]:[...e.querySelectorAll("script")]){if(rt.has(t))continue;let e=document.createElement("script");for(let{name:n,value:r}of t.attributes)e.setAttribute(n,r);e.text=t.text,rt.add(e),t.replaceWith(e)}},lt=e=>[...at(e)&&e.id?[e]:[],...e.querySelectorAll("[id]")],ot=(e,t)=>at(e)&<(e).some(e=>t.keep.has(e.id)),st=(e,t)=>{ot(e,t)?t.pantry.append(e):e.remove()},ut=(e,t,n)=>{let r=e;try{r.moveBefore?r.moveBefore(t,n):e.insertBefore(t,n)}catch{e.insertBefore(t,n)}},dt=(e,t,n)=>{for(let n=t;n;n=n.nextSibling)if(at(n)&&n.id===e)return n;return n.pantry.querySelector(`#${CSS.escape(e)}`)??document.getElementById(e)},ct=(e,t,n)=>!(e.nodeType!==t.nodeType||e.nodeName!==t.nodeName||at(e)&&e.id&&e.id!==t.id||at(e)&&n.keep.has(e.id)&&e.id!==t.id),ft=(e,t,n)=>{if(e.nodeType!==t.nodeType||e.nodeName!==t.nodeName){let n=document.importNode(t,!0);return e.replaceWith(n),void it(n)}at(e)&&at(t)?e.hasAttribute(n.ignore)&&t.hasAttribute(n.ignore)||(((e,t,n)=>{let r=new Set((t.getAttribute(n.preserve)??e.getAttribute(n.preserve)??"").split(/\s+/).filter(Boolean)),a=!1,i=n=>!r.has(n)&&e.getAttribute(n)!==t.getAttribute(n);e instanceof HTMLInputElement&&t instanceof HTMLInputElement&&"file"!==e.type?(i("value")&&(e.value=t.getAttribute("value")??"",a=!0),i("checked")&&(e.checked=t.hasAttribute("checked"),a=!0)):e instanceof HTMLTextAreaElement&&t instanceof HTMLTextAreaElement?!r.has("value")&&e.defaultValue!==t.defaultValue&&(e.value=t.defaultValue,a=!0):e instanceof HTMLOptionElement&&t instanceof HTMLOptionElement&&i("selected")&&(e.selected=t.hasAttribute("selected"),a=!0);for(let{name:n,value:a}of t.attributes)!r.has(n)&&e.getAttribute(n)!==a&&e.setAttribute(n,a);for(let{name:n}of[...e.attributes])!r.has(n)&&!t.hasAttribute(n)&&e.removeAttribute(n);a&&(e instanceof HTMLOptionElement?e.closest("select"):e)?.dispatchEvent(new Event("sigmx-prop-change",{bubbles:!0}))})(e,t,n),e instanceof HTMLTemplateElement&&t instanceof HTMLTemplateElement?e.innerHTML=t.innerHTML:e.isEqualNode(t)||mt(e,t,n)):e.nodeValue!==t.nodeValue&&(e.nodeValue=t.nodeValue)},mt=(e,t,n)=>{let r=e.firstChild,a=e=>{for(;r&&r!==e;){let e=r;r=r.nextSibling,st(e,n)}return r===e};for(let i of[...t.childNodes]){if(at(i)&&i.id&&n.keep.has(i.id)){let t=dt(i.id,r,n);if(t){a(t)&&r?r=t.nextSibling:ut(e,t,r),ft(t,i,n);continue}}let t=r;for(;t&&!ct(t,i,n);)t=t.nextSibling;if(t)a(t),r=t.nextSibling,ft(t,i,n);else if(at(i)&&ot(i,n)){let t=document.createElementNS(i.namespaceURI??"http://www.w3.org/1999/xhtml",i.tagName);e.insertBefore(t,r),ft(t,i,n)}else{let t=document.importNode(i,!0);e.insertBefore(t,r),it(t)}}a(null)},ht=(e,t,n)=>{let r=new Set,a=new Map(lt(t).map(e=>[e.id,e.tagName]));for(let t of lt(e))a.get(t.id)===t.tagName&&r.add(t.id);return{keep:r,pantry:document.createDocumentFragment(),ignore:n.ignoreAttr??"data-ignore-morph",preserve:n.preserveAttr??"data-preserve-attr"}},pt=(e,t,n={})=>{let r=ht(e,t,n);ft(e,t,r)},gt=(e,t,n={})=>{let r=ht(e,t,n);mt(e,t,r)},vt=["outer","inner","replace","prepend","append","before","after","remove"],yt=e=>1===e.nodeType,bt=((e={})=>(e=>{let n=[].concat(e.prefix??"data-"),r=[].concat(e.eventPrefix??"sigmx-"),a=e.store??V(),i=e.compile??p,{expressions:o}=e,s=e.onError??((e,t)=>console.error(e,t)),u=Object.create(null),d=Object.create(null),c=Object.create(null),f={prefixes:n,attr:e=>n[0]+e,store:a,compiler:i,emit:(e,t)=>document.dispatchEvent(new CustomEvent(`sigmx-${e}`,{detail:t})),call:(e,t,n)=>{let r=d[e];if(!r)throw t.error(`unknown action @${e}`);return r.call(t,...n)},eventPrefixes:r,handle:(e,t)=>{let n=r.find(t=>e.startsWith(t)),a=c[n?e.slice(n.length):e];return a?.handle(f,t),!!a},attributes:u,actions:d,handlers:c},m=new Map,h=new Set,g=n.map(e=>`[${e}ignore__self]`).join(),v=n.map(e=>`[${e}ignore]`).join(),y=e=>e.matches(g)||!!e.closest(v),b=e=>{for(let t of n)if(e.startsWith(t))return e.slice(t.length)},k=e=>{for(let t of e){let e=m.get(t);if(e&&m.delete(t))for(let t of e.values())t()}},S=(e,t)=>{let n=m.get(e);n?.get(t)?.(),n?.delete(t)},x=(e,r,i,d,c)=>{let{plugin:h,key:p,mods:g}=(e=>{let t=B.get(e);if(!t){let[n,...r]=e.split("__"),a=n.indexOf(":"),i=new Map;for(let e of r){let[t,...n]=e.split(".");i.set(t,n)}t={plugin:a<0?n:n.slice(0,a),key:a<0?void 0:n.slice(a+1),mods:i},B.set(e,t)}return t})(i),v=u[h];if(!v||c&&!c.has(h))return;S(e,r);let y,b=[],k={plugin:h,el:e,attr:r},x=(e,t)=>((e,t)=>Object.assign(new Error(e),{info:t}))(`${n[0]}${h}: ${e}`,{...k,...t}),A=e=>s(e,k),E={el:e,plugin:h,attr:r,key:p,value:d,mods:g,cased:(e="camel")=>((e,t)=>e.split(".").map(l[t]).join("."))(p??"",g.get("case")?.[0]||e),evaluate:(t,...n)=>(y??=o(d,["el","evt",...v.args??[]],v.returns??!0),y(a,((e,t,n,r,i)=>{let l={el:e,evt:t,store:a,runtime:f,error:n,cleanup:r};return new Proxy({},{get:(e,t)=>(...e)=>{let n=f.call(t,l,e);return n instanceof Promise&&n.catch(i),n}})})(e,t,x,E.cleanup,A),e,t,...n)),effect:e=>b.push(((e,n)=>{let r=new L(e,n);return t?.o.add(r),r.b(),w||N(),()=>r.g()})(e,A)),listen:(e,t,n,r)=>{let a=e=>{try{n(e)}catch(e){A(e)}};e.addEventListener(t,a,r),b.push(()=>e.removeEventListener(t,a,r))},cleanup:e=>b.push(e),error:x,store:a,runtime:f},T=m.get(e);T||(T=new Map,m.set(e,T)),T.set(r,()=>{for(let e of b.splice(0))e()});try{if("required"===v.key&&!p)throw x("needs a key");if("forbidden"===v.key&&p)throw x("takes no key");if("required"===v.value&&!d)throw x("needs a value");if("forbidden"===v.value&&d)throw x("takes no value");let e=v.mount(E);"function"==typeof e&&b.push(e)}catch(e){A(e)}},A=(e,t)=>{for(let n of e)if(!y(n))for(let{name:e,value:r}of[...n.attributes]){let a=b(e);a&&!m.get(n)?.has(e)&&x(n,e,a,r,t)}},E=new MutationObserver(e=>{for(let{type:t,target:n,attributeName:r,addedNodes:a,removedNodes:i}of e)if("childList"===t){for(let e of i)k(D(e));for(let e of a)A(D(e))}else if(r&&z(n)&&!y(n)){let e=b(r);if(!e)continue;let t=n.getAttribute(r);null===t?S(n,r):x(n,r,e,t)}}),T=!1,$=(e=document.documentElement,t=!0,n)=>{A(D(e),n),t&&!h.has(e)&&(E.observe(e,{subtree:!0,childList:!0,attributes:!0}),h.add(e)),!T&&h.has(document.documentElement)&&(T=!0,f.emit("ready"))},M=(...e)=>{let t=new Set;for(let n of e)"attribute"===n.type?(u[n.name]=n,t.add(n.name)):"action"===n.type?d[n.name]=n:c[n.name]=n;if(t.size)for(let e of h)$(e,!1,t)},q=a.onPatch(e=>f.emit("signal-patch",e));M(...e.plugins??[]);let O={runtime:f,store:a,get $(){return a.$},apply:(e,t)=>$(e,t),use:M,destroy:()=>{E.disconnect(),q(),k([...m.keys()]),h.clear()}};return(e.autoStart??!0)&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>O.apply(),{once:!0}):O.apply()),O})({...e,expressions:e.expressions??b(e.compile??p)}))({plugins:[_,$e,G,ee,Oe,je,K,ue,pe,se,ne,Pe,be,re,he,de,ge,Le,te,qe,me,Ne,Y,ie,ye,ke,Ie,Be,De,tt,Ce,He,Ee,et,Ge,Ye,Qe,Xe,W({name:"patch-elements",handle(e,{elements:t="",selector:n="",mode:r="outer",useViewTransition:a}){if(!vt.includes(r))throw new Error(`patch-elements: unknown mode "${r}"`);let i=()=>((e,t,n,r)=>{let a={ignoreAttr:e.attr("ignore-morph"),preserveAttr:e.attr("preserve-attr")},i=(e=>{if(/<\/(html|head|body)>/i.test(e))return(new DOMParser).parseFromString(e,"text/html");let t=document.createElement("template");return t.innerHTML=e,t.content})(t);if(i instanceof Document)return i.head.childNodes.length&>(document.head,i.head,a),void pt(document.body,i.body,a);let l=i;if("remove"===r){for(let e of document.querySelectorAll(n))e.remove();return}if(!n){if("outer"!==r&&"replace"!==r)throw new Error(`patch-elements mode "${r}" needs a selector`);for(let e of[...l.children]){let t=e.id&&document.getElementById(e.id);t?"outer"===r?pt(t,e,a):(t.replaceWith(e),it(e)):console.warn("patch-elements: no element with id",e.id)}return}let o=[...document.querySelectorAll(n)];o.length||console.warn("patch-elements: no elements match",n),o.forEach((e,t)=>{let n=t===o.length-1?l:l.cloneNode(!0),i=[...n.childNodes];if("outer"===r&&1===i.length&&yt(i[0]))pt(e,i[0],a);else if("inner"===r)gt(e,n,a);else{"outer"===r||"replace"===r?e.replaceWith(n):e[r](n);for(let e of i)it(e)}})})(e,t,n,r);"true"===a&&"startViewTransition"in document?document.startViewTransition(i):i()}}),W({name:"patch-signals",handle(e,{signals:t,onlyIfMissing:n}){if(!t)return;let r;try{r=JSON.parse(t)}catch{r=e.compiler([],`return (${t})`)()}e.store.merge(r,{ifMissing:"true"===n})}}),Z,Q,X,ae,oe,ce,ve,we,Se,Re,Ve,nt]});globalThis.sigmx=bt;export{bt as sigmx};
|
|
1
|
+
var e,t,r=e=>e.replace(/([a-z0-9])([A-Z])|([A-Z]+)([A-Z][a-z])/g,"$1$3 $2$4").split(/[^A-Za-z0-9]+/).filter(Boolean).map(e=>e.toLowerCase()),l=e=>e[0].toUpperCase()+e.slice(1),n=e=>r(e).join("-"),a=e=>r(e).map((e,t)=>t?l(e):e).join(""),i={camel:a,kebab:n,snake:e=>r(e).join("_"),pascal:e=>r(e).map(l).join("")},o=e=>{if(null===e||"object"!=typeof e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||null===t},s=e=>"__proto__"!==e&&"constructor"!==e&&"prototype"!==e,c=(e,t,r)=>{let l=t.split(".");if(!l.every(s))return e;let n=l.pop(),a=e;for(let e of l)(!o(a[e])||!Object.hasOwn(a,e))&&(a[e]={}),a=a[e];return a[n]=r,e},u=(e,t=0)=>{for(let t of e?.length?[e.join("."),...e]:[]){let e=/^(\d+(?:\.\d+)?)(ms|s)?$/.exec(t);if(e)return+e[1]*("s"===e[2]?1e3:1)}return t},d=(e,t,r,l,n)=>{let a,i,o=()=>{a=void 0,l&&i&&e(...i),i=void 0},s=(...l)=>{if(a)return i=l,void(n&&(clearTimeout(a),a=setTimeout(o,t)));r?e(...l):i=l,a=setTimeout(o,t)};return s.cancel=()=>{clearTimeout(a),a=i=void 0},s},f=(e,t,r)=>{let l=t.get("debounce"),n=t.get("throttle");return l&&(e=d(e,u(l,300),l.includes("leading"),!l.includes("notrailing"),!0)),n&&(e=d(e,u(n,300),!n.includes("noleading"),n.includes("trailing"),!1)),(l||n)&&r?.(e.cancel),e},h=(e,t)=>Function(...e,t),p=/[A-Za-z_$]/,m=/[\w$]/,g=/(^|[(,=:[!&|?{};+\-*%<>~^]|\b(?:return|typeof|case|in|of|do|else|void|delete|throw|new))$/,v=(e,t,r)=>{let l="",n=t,a=0,i=e.length,o=()=>l.trimEnd();for(;n<i;){let t=e[n],s=e[n+1];if('"'===t||"'"===t){let r=n+1;for(;r<i&&e[r]!==t;)r+="\\"===e[r]?2:1;l+=e.slice(n,r+1),n=r+1}else if("`"===t){for(l+=t,n++;n<i&&"`"!==e[n];)if("\\"===e[n])l+=e.slice(n,n+2),n+=2;else if("$"===e[n]&&"{"===e[n+1]){let[t,r]=v(e,n+2,!0);l+=`\${${t}}`,n=r}else l+=e[n++];l+="`",n++}else if("/"===t&&"/"===s){let t=e.indexOf("\n",n);n=t<0?i:t}else if("/"===t&&"*"===s){let t=e.indexOf("*/",n+2);n=t<0?i:t+2}else if("/"===t&&g.test(o())){let t=n+1,r=!1;for(;t<i&&(r||"/"!==e[t]);t++)"\\"===e[t]?t++:"["===e[t]?r=!0:"]"===e[t]&&(r=!1);for(t++;t<i&&/[a-z]/i.test(e[t]);t++);l+=e.slice(n,t),n=t}else if(!r||"{"!==t&&"}"!==t)if("$"===t&&p.test(s??"")&&"$"!==s&&!m.test(l.at(-1)??"")){let r=o();if(r.endsWith(".")&&!r.endsWith("...")){l+=t,n++;continue}let a=n+1;for(;a<i&&m.test(e[a]);)a++;l+=`$.${e.slice(n+1,a)}`,n=a}else if("@"===t&&p.test(s??"")){let r=n+1;for(;r<i&&m.test(e[r]);)r++;let a=r;for(;a<i&&/\s/.test(e[a]);)a++;"("===e[a]?(l+=`__a.${e.slice(n+1,r)}(`,n=a+1):(l+=t,n++)}else l+=t,n++;else{if("{"===t)a++;else{if(!a)return[l,n+1];a--}l+=t,n++}}return[l,n]},y=new Map,w=e=>(t,r)=>{let l=((e,t,r)=>{let l=`${r.join()}|${t}`,n=y.get(l);return n||(n=((e,t,r)=>{let l;for(let n of(e=>{let t=[`return(${e}\n)`];for(let r=e.lastIndexOf(";");r>=0;r=e.lastIndexOf(";",r-1))t.push(`${e.slice(0,r)};return(${e.slice(r+1)}\n)`);return t.push(e),t.map(e=>`"use strict";${e}`)})((e=>v(e,0,!1)[0])(t.trim())))try{return[n,e(["$","__a",...r],n)]}catch(e){l=e}throw l})(e,t,r)[1],y.size>=2e3&&y.delete(y.keys().next().value),y.set(l,n)),n})(e,t,r);return(e,t,...r)=>l(e.$,t,...r)},b=0,x=!1,S=new Set,$=new Set,A=class{i=0;c=new Set;constructor(e){this.t=e}get value(){return e&&(e.e.set(this,this.i),this.c.add(e)),this.t}set value(e){Object.is(e,this.t)||(this.t=e,this.bump())}peek(){return this.t}bump(){this.i++;for(let e of this.c)e.p();b||j()}},k=e=>{for(let t of e.e.keys())t.c.delete(e);e.e.clear()},E=(t,r)=>{k(t);let l=e;e=t;try{return r()}finally{e=l}},M=e=>{if(!e.e.size)return!0;for(let[t,r]of e.e)if(t instanceof T&&t.g(),t.i!==r)return!0;return!1},T=class extends A{e=new Map;o=!0;constructor(e){super(void 0),this.f=e}g(){if(!this.o||(this.o=!1,!M(this)))return;let e=E(this,this.f);Object.is(e,this.t)||(this.t=e,this.i++)}get value(){return this.g(),super.value}set value(e){throw new Error("computed is read-only")}p(){if(!this.o){this.o=!0;for(let e of this.c)e.p()}}dispose(){k(this),this.o=!1}},L=class{e=new Map;l=!1;u=!1;d=new Set;constructor(e,t){this.f=e,this.h=t}p(){!this.u&&!this.l&&(this.l=!0,S.add(this))}y(){if(this.l=!1,this.u)return;let e=t;t=this,b++;try{M(this)&&(this.x(),E(this,this.f))}catch(e){if(!this.h)throw e;this.h(e)}finally{b--,t=e}}x(){for(let e of this.d)e.m();this.d.clear()}m(){this.u=!0,k(this),e===this&&(e=void 0),this.x(),S.delete(this)}},O=e=>{b++;try{return e()}finally{--b||j()}},P=t=>{let r=e;e=void 0;try{return t()}finally{e=r}},j=()=>{if(x||b)return;x=!0;let e,t=!1;try{let r=0;for(;S.size;){if(++r>1e5){for(let e of S)e.l=!1;throw S.clear(),new Error("effect loop")}let l=S.values().next().value;S.delete(l);try{l.y()}catch(r){t||(t=!0,e=r)}}}finally{x=!1}for(let e of $)e();if(t)throw e},N=e=>{let t=e.lastIndexOf(".");return[t<0?"":e.slice(0,t),e.slice(t+1)]},C=(e,t)=>e?`${e}.${t}`:t,I=(e,t)=>!t||e.startsWith(`${t}.`),q=e=>"string"==typeof e,R=new WeakMap,z=()=>{let e=new Map,t=new Map([["",new Set]]),r=new A(0),l=new Map,n=new Set,a=new Map,i=new WeakMap,u=e=>{let[t,l]=N(e);f(t).add(l),r.bump()},d=e=>{let[l,n]=N(e);t.get(l)?.delete(n),r.bump()},f=r=>{let l=t.get(r);return l||(e.has(r)&&h(r),l=new Set,t.set(r,l),u(r)),l},h=t=>{let r=e.get(t);r&&(e.delete(t),d(t),l.set(t,null),r.bump(),r instanceof T&&r.dispose())},p=e=>{let r=t.get(e);if(r){for(let t of[...r])m(C(e,t));e&&(t.delete(e),a.delete(e),d(e))}},m=e=>O(()=>{h(e),p(e)}),g=(t,r)=>O(()=>{p(t);let l=e.get(t);e.set(t,r),u(t),l&&(l.bump(),l instanceof T&&l.dispose())}),v=(t,r)=>O(()=>{if(null==r)return m(t);if(r=(r&&R.get(r))??r,o(r)){for(let e of[...f(t)])e in r||m(C(t,e));for(let e in r)s(e)&&v(C(t,e),r[e]);return}p(t);let n=e.get(t);if(n instanceof T)throw new Error(`computed "${t}" is read-only`);if(n){if(Object.is(n.peek(),r))return;n.value=r}else g(t,new A(r));l.set(t,r)}),y=(r,{at:l="",ifMissing:n=!1}={})=>O(()=>{if(!o(r))return;let a=Object.keys(r).filter(s);a.length&&f(l);for(let i of a){let a=C(l,i),s=r[i],c=e.get(a);c&&(n||c instanceof T)||(null===s?n||m(a):o(s)?y(s,{at:a,ifMissing:n}):n&&t.has(a)||v(a,s))}}),w=n=>{let a=e.get(n);if(a){let e=a.value;return Array.isArray(e)?((e,t,r)=>{let n=i.get(t);n||(n=new WeakMap,i.set(t,n));let a=()=>(l.set(r,e),t.bump(),!0),s=e=>{let t=n?.get(e);return t||(t=new Proxy(e,{get:(e,t,r)=>{let l=Reflect.get(e,t,r);if("function"==typeof l&&Array.isArray(e))return(...e)=>O(()=>l.apply(r,e));if(!l||"object"!=typeof l||!Array.isArray(l)&&!o(l))return l;let n=Object.getOwnPropertyDescriptor(e,t);return!n||n.configurable||n.writable?s(l):l},set:(e,t,r)=>(e[t]=(r&&R.get(r))??r,a()),deleteProperty:(e,t)=>(delete e[t],a())}),n?.set(e,t),R.set(t,e)),t};return s(e)})(e,a,n):e}if(r.value,t.has(n))return b(n)},b=e=>{let l=a.get(e);if(!l){let n=l=>(r.value,q(l)&&!!t.get(e)?.has(l));l=new Proxy({},{get:(t,r)=>q(r)?"toJSON"===r?()=>S(void 0,{at:e}):w(C(e,r)):void 0,set:(t,r,l)=>(q(r)&&v(C(e,r),l),!0),deleteProperty:(t,r)=>(q(r)&&m(C(e,r)),!0),has:(e,t)=>n(t),ownKeys:()=>(r.value,[...t.get(e)??[]]),getOwnPropertyDescriptor:(t,r)=>n(r)?{enumerable:!0,configurable:!0,writable:!0,value:w(C(e,r))}:void 0}),a.set(e,l)}return l},x=(t,{computed:l=!0}={})=>{r.value;let n=(e=>{if("function"==typeof e)return e;let t=(e,t)=>{if(e)return e.lastIndex=0,e.test(t)};return r=>(t(e?.include,r)??!0)&&!t(e?.exclude,r)})(t);return[...e].filter(([e,t])=>n(e)&&(l||!(t instanceof T))).map(([e])=>e)},S=(t,{at:r="",computed:l=!0}={})=>{let n={};for(let a of x(t,{computed:l}))I(a,r)&&c(n,r?a.slice(r.length+1):a,e.get(a)?.value);return n};return $.add(()=>{if(!l.size)return;let e={};for(let[t,r]of l)c(e,t,r);l.clear();for(let t of n)t(e)}),{get:w,set:v,merge:y,remove:m,has:r=>e.has(r)||t.has(r),define:g,paths:x,snapshot:S,onPatch:e=>(n.add(e),()=>n.delete(e)),get $(){return b("")}}},V=e=>1===e.nodeType,H=e=>e.querySelectorAll?[...V(e)?[e]:[],...e.querySelectorAll("*")]:[],W=(e,t)=>{for(let r of e)if(t.startsWith(r))return t.slice(r.length)},D=e=>{let r=[].concat(e.prefix??"data-"),l=[].concat(e.eventPrefix??"sigmx-"),n=e.store??z(),{expressions:a}=e,o=e.onError??((e,t)=>console.error(e,t)),s=Object.create(null),c={prefixes:r,attr:e=>r[0]+e,store:n,compiler:e.compile??h,emit:(e,t)=>document.dispatchEvent(new CustomEvent(`sigmx-${e}`,{detail:t})),call:(e,t,r)=>{let l=c.actions[e];if(!l)throw t.error(`unknown action @${e}`);return l.call(t,...r)},eventPrefixes:l,handle:(e,t)=>{let r=c.handlers[W(l,e)??e];return r?.handle(c,t),!!r},attributes:s,actions:Object.create(null),handlers:Object.create(null)},u=new Map,d=new Set,f=r.map(e=>`[${e}ignore]`).join(),p=e=>!!e.closest(f),m=!1,g=e=>{for(let t of e){let e=u.get(t);if(e&&u.delete(t))for(let t of e.values())t()}},v=(e,t)=>{let r=u.get(e);r?.get(t)?.(),r?.delete(t)},y=(e,l,d,f,h)=>{let{plugin:p,key:m,mods:g}=(e=>{let[t,...r]=e.split("__"),[,l,n]=/^([^:]*)(?::(.*))?$/.exec(t);return{plugin:l,key:n,mods:new Map(r.map(e=>{let[t,...r]=e.split(".");return[t,r]}))}})(d),y=s[p];if(!y||h&&!h.has(p))return;v(e,l);let w,x=[],S=e=>(x.push(e),()=>{let t=x.indexOf(e);t>=0&&x.splice(t,1)}),$={plugin:p,el:e,attr:l},A=(e,t)=>Object.assign(new Error(`${r[0]}${p}: ${e}`),{info:{...$,...t}}),k=e=>o(e,$),E=new WeakSet,M=e=>{e instanceof Promise&&!E.has(e)&&(E.add(e),e.catch(k))},T={el:e,plugin:p,attr:l,key:m,value:f,mods:g,cased:(e="camel")=>((e,t)=>{let r=i[t];if(!r)throw new Error(`unknown case "${t}"`);return e.split(".").map(e=>{let t=/^_+/.exec(e)?.[0]??"";return t+r(e.slice(t.length))}).join(".")})(m??"",g.get("case")?.[0]||e),evaluate:(t,...r)=>{if(y.literal&&!g.has("dynamic"))return f;w??=a(f,["el","evt",...y.args??[]]);let l={el:e,evt:t,store:n,runtime:c,error:A,cleanup:S,report:k},i=new Proxy({},{get:(e,t)=>(...e)=>{let r=c.call(t,l,e);return M(r),r}}),o=w(n,i,e,t,...r);return M(o),o},effect:e=>{S(((e,r)=>{let l=t;t=void 0;try{return((e,r)=>{let l=new L(e,r);t?.d.add(l);try{l.y(),b||j()}catch(e){throw l.m(),e}return()=>l.m()})(e,r)}finally{t=l}})(e,k))},listen:(e,t,r,l)=>{let n=e=>{try{r(e)}catch(e){k(e)}};e.addEventListener(t,n,l),S(()=>e.removeEventListener(t,n,l))},cleanup:S,error:A,report:k,store:n,runtime:c},O=u.get(e);O||(O=new Map,u.set(e,O)),O.set(l,()=>{for(let e of x.splice(0))e()});try{for(let[e,t]of[["key",m],["value",f]]){let r=y[e];if(r&&"required"===r==!t)throw A(`${"required"===r?"needs a":"takes no"} ${e}`)}let e=y.mount(T);"function"==typeof e?S(e):M(e)}catch(e){k(e)}},w=(e,t)=>{for(let l of e)if(!p(l))for(let{name:e,value:n}of[...l.attributes]){let a=W(r,e);a&&!u.get(l)?.has(e)&&y(l,e,a,n,t)}},x=new MutationObserver(e=>{for(let{type:t,target:l,attributeName:n,addedNodes:a,removedNodes:i}of e)if("childList"===t){for(let e of i)e.isConnected||g(H(e));for(let e of a)w(H(e))}else if(n&&V(l)&&!p(l)){let e=W(r,n);if(!e)continue;let t=l.getAttribute(n);null===t?v(l,n):y(l,n,e,t)}}),S=(e=document.documentElement,t=!0,r)=>{m||(w(H(e),r),t&&!d.has(e)&&(x.observe(e,{subtree:!0,childList:!0,attributes:!0}),d.add(e)))},$=(...e)=>{let t=new Set;for(let r of e)c[`${r.type}s`][r.name]=r,"attribute"===r.type&&t.add(r.name);if(t.size)for(let e of d)S(e,!1,t)},A=n.onPatch(e=>c.emit("signal-patch",e));$(...e.plugins??[]);let k={runtime:c,store:n,get $(){return n.$},apply:(e,t)=>S(e,t),use:$,destroy:()=>{m=!0,x.disconnect(),A(),g([...u.keys()]),d.clear()}};return(e.autoStart??!0)&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>k.apply(),{once:!0}):k.apply()),k},F=(e,t,r)=>e&t?"required":e&r?"forbidden":void 0,_=(e,t,r,l)=>({type:"attribute",name:e,key:F(t,1,2),value:F(t,4,8),literal:!!(32&t),args:l,mount:r}),U=(e,t)=>({type:"action",name:e,call:t}),B=(e,t)=>({type:"handler",name:e,handle:t}),J=(e,t,r)=>{!1===r||null==r?e.removeAttribute(t):e.setAttribute(t,!0===r?"":String(r))},Z=_("attr",4,({el:e,key:t,cased:r,evaluate:l,effect:n})=>{n(()=>{if(t)return J(e,r("kebab"),l());let n=l();for(let t in n)J(e,t,n[t])})}),K=_("boost",10,({el:e,store:t,runtime:r,listen:l,error:n,cleanup:a,report:i})=>{let o={el:e,store:t,runtime:r,error:n,cleanup:a,report:i},s=location.pathname+location.search,c=(t,l,n,a)=>{n.preventDefault();let c=r.call(l,{...o,el:a??e,evt:n},[t.href,{contentType:a&&"form"}]);Promise.resolve(c).then(e=>{let r=new URL(e&&(e.redirected||a&&"get"===l)?e.url:t.href);s=r.pathname+r.search,history.pushState(null,"",r.href);let n=r.hash&&document.querySelector(r.hash);n?n.scrollIntoView():scrollTo(0,0)},i)};l(e,"click",e=>{let t=e.target.closest("a[href]");t&&!(e.defaultPrevented||e.button||e.metaKey||e.ctrlKey||e.shiftKey||t.target)&&!t.hasAttribute("download")&&t.origin===location.origin&&(!t.hash||t.pathname!==location.pathname||t.search!==location.search)&&c(new URL(t.href),"get",e)}),l(e,"submit",e=>{let t=e.target,r=r=>e.submitter?.getAttribute(`form${r}`)??t.getAttribute(r),l=(r("method")??"get").toLowerCase(),n=new URL(r("action")||location.href,location.href);!e.defaultPrevented&&!t.target&&"dialog"!==l&&n.origin===location.origin&&c(n,"post"===l?"post":"get",e,t)}),l(window,"popstate",()=>{let e=location.pathname+location.search;e!==s&&(s=e,Promise.resolve(r.call("get",o,[location.href,{}])).then(void 0,i))})}),G=_("indicator",0,({el:e,key:t,value:r,cased:l,store:n,listen:a})=>{let i=t?l():r.trim(),o=new Set;return n.set(i,!1),a(document,"sigmx-fetch",t=>{let{el:r,type:l,rid:a}=t.detail;if("started"===l&&e.contains(r))o.add(a);else{if("finished"!==l)return;o.delete(a)}n.set(i,o.size>0)}),()=>n.set(i,!1)}),Q=_("class",4,({el:e,key:t,cased:r,evaluate:l,effect:n})=>{let a=new Set;return n(()=>{let n=t?{[r("kebab")]:l()}:l(),i=new Set;for(let t in n)for(let r of t.split(/\s+/).filter(Boolean))i.add(r),n[t]?(e.classList.contains(r)||a.add(r),e.classList.add(r)):a.delete(r)&&e.classList.remove(r);for(let t of a)!i.has(t)&&a.delete(t)&&e.classList.remove(t)}),()=>e.classList.remove(...a)}),X=_("cloak",10,({el:e,attr:t})=>e.removeAttribute(t)),Y=_("collapse",6,({el:e,mods:t,evaluate:r,effect:l,cleanup:n})=>{let a,i,o=e.style,s=u(t.get("duration"),250),c=matchMedia("(prefers-reduced-motion: reduce)").matches,d=[o.height,o.overflow,o.transition],f=!0,h=e=>{o.transition="",o.overflow=e?"":"hidden",o.height=e?"":"0px"};l(()=>{let t=!!r();if(t===i)return;if(i=t,clearTimeout(a),f||c)return f=!1,h(t);let l=`${e.getBoundingClientRect().height}px`;o.overflow="hidden",o.height=t?"0px":l,e.getBoundingClientRect(),o.transition=`height ${s}ms ease`,o.height=t?`${e.scrollHeight}px`:"0px",a=setTimeout(()=>h(t),s+20)}),n(()=>{clearTimeout(a),[o.height,o.overflow,o.transition]=d})}),ee=_("signals",4,({key:e,cased:t,evaluate:r,store:l,mods:n})=>{let a=r();l.merge(e?c({},t(),a):a,{ifMissing:n.has("ifmissing")})}),te=_("computed",5,({cased:e,evaluate:t,store:r})=>{let l=e();return r.define(l,new T(()=>t())),()=>r.remove(l)}),re=_("ref",0,({el:e,key:t,value:r,cased:l,store:n})=>{let a=t?l():r.trim();return n.set(a,e),()=>{P(()=>n.get(a))===e&&n.remove(a)}}),le=_("on",21,({el:e,mods:t,cased:r,evaluate:l,listen:n,cleanup:a})=>{let i=r("kebab"),o=t.has("outside"),s=t.has("window")?window:t.has("document")||o||i.startsWith("sigmx-")?document:e,c=f(e=>l(e),t,a);n(s,i,r=>{o&&e.contains(r.target)||((t.has("prevent")||"submit"===i&&e instanceof HTMLFormElement)&&r.preventDefault(),t.has("stop")&&r.stopPropagation(),c(r))},{once:t.has("once")})}),ne=_("on-raf",22,({mods:e,evaluate:t,cleanup:r})=>{let l=f(()=>t(),e,r),n=requestAnimationFrame(function e(){l(),n=requestAnimationFrame(e)});return()=>cancelAnimationFrame(n)}),ae=_("html",6,({el:e,evaluate:t,effect:r})=>r(()=>{e.innerHTML=String(t()??"")})),ie=_("style",4,({el:e,key:t,cased:r,evaluate:l,effect:a})=>{let i=new Map,o=(t,r)=>{i.has(t)||i.set(t,e.style.getPropertyValue(t)),r||0===r?e.style.setProperty(t,String(r)):e.style.setProperty(t,i.get(t)??"")};return a(()=>{let e=t?{[r("kebab")]:l()}:l();for(let t of i.keys())t in e||o(t,"");for(let t in e)o(t.startsWith("--")?t:n(t),e[t])}),()=>{for(let[t,r]of i)e.style.setProperty(t,r)}}),oe={9:/\d/,a:/[a-zA-Z]/,"*":/[a-zA-Z0-9]/},se=_("mask",38,({el:e,evaluate:t,listen:r,effect:l})=>{let n=e,a="",i=()=>{let e=((e,t)=>{let r="",l=0;for(let n of e){if(l>=t.length)break;let e=oe[n];if(e){for(;l<t.length&&!e.test(t[l]);)l++;if(l>=t.length)break;r+=t[l++]}else r+=n,t[l]===n&&l++}return r})(a,n.value);if(e!==n.value){let t=n.selectionStart,r=null===t||t>=n.value.length;n.value=e,r||n.setSelectionRange(t,t),n.dispatchEvent(new Event("input",{bubbles:!0}))}};r(n,"input",i),l(()=>{a=String(t()??""),i()})}),ce=_("match-media",37,({cased:e,evaluate:t,store:r,effect:l,cleanup:n})=>{let a,i=e(),o=()=>r.set(i,!!a?.matches),s=()=>a?.removeEventListener("change",o);l(()=>{let e=String(t()).trim();/^[\w-]+\s*:/.test(e)&&(e=`(${e})`),s(),a=window.matchMedia(e),o(),a.addEventListener("change",o)}),n(s)}),ue=_("init",22,({mods:e,evaluate:t,cleanup:r})=>{f(()=>t(),e,r)()}),de=_("on-signal-patch",20,({key:e,cased:t,mods:r,evaluate:l,listen:n,cleanup:a})=>{let i=e?t():"",o=!1,s=f(e=>{if(!o){o=!0;try{l(void 0,e)}finally{o=!1}}},r,a);n(document,"sigmx-signal-patch",e=>{(!i||((e,t)=>{let r=e;for(let e of t.split(".")){if(null===r)return!0;if("object"!=typeof r||!(e in r))return!1;r=r[e]}return!0})(e.detail,i))&&s(e.detail)})},["patch"]),fe=_("remove-me",34,({el:e,evaluate:t,value:r,cleanup:l,error:n})=>{let a=r?String(t()):"";if(a&&u([a],-1)<0)throw n(`bad delay "${a}"`);let i=setTimeout(()=>e.remove(),u([a],0));l(()=>clearTimeout(i))}),he=(e,t,r)=>[...e.keys()].find(e=>t.test(e))??r,pe=_("scroll-into-view",10,({el:e,mods:t})=>{e.scrollIntoView({behavior:he(t,/^(smooth|instant|auto)$/,"smooth"),block:he(t,/^v(start|center|end|nearest)$/,"vcenter").slice(1)}),t.has("focus")&&e.focus?.()}),me=_("on-resize",22,({el:e,mods:t,evaluate:r,cleanup:l})=>{let n=f(()=>r(),t,l),a=new ResizeObserver(()=>n());return a.observe(e),()=>a.disconnect()}),ge=_("json-signals",2,({el:e,value:t,evaluate:r,effect:l,store:n})=>{let a=t?r():void 0;l(()=>{e.textContent=JSON.stringify(n.snapshot(a),null,2)})}),ve=_("persist",0,({key:e,value:t,evaluate:r,store:l,effect:n})=>{let a=e||"sigmx",i=t?r():void 0;try{let e=localStorage.getItem(a);e&&l.merge(JSON.parse(e))}catch{}n(()=>{try{localStorage.setItem(a,JSON.stringify(l.snapshot(i,{computed:!1})))}catch{}})}),ye=_("teleport",38,({el:e,evaluate:t,error:r})=>{let l=String(t()),n=document.querySelector(l);if(!n)throw r(`no element matches "${l}"`);if(e.parentElement===n)return;let a=n;(a.moveBefore??a.insertBefore).call(a,e,null)}),we=_("text",6,({el:e,evaluate:t,effect:r})=>r(()=>{e.textContent=String(t()??"")})),be=_("on-interval",22,({mods:e,evaluate:t})=>{let r=e.get("duration"),l=setInterval(()=>t(),u(r,1e3));return()=>clearInterval(l)}),xe=_("transition",6,({el:e,mods:t,evaluate:r,effect:l,cleanup:n})=>{let a,i,o=e.style,s=matchMedia("(prefers-reduced-motion: reduce)").matches?0:u(t.get("duration"),200),c={opacity:0},d={opacity:1},f=o.display,h="none"===f?"":f,p=!0;l(()=>{let t=!!r();if(t!==i){if(i=t,a?.cancel(),p||!e.animate)return p=!1,void(o.display=t?h:"none");t&&(o.display=h),a=e.animate(t?[c,d]:[d,c],{duration:s,easing:"ease-out",fill:"forwards"}),a.onfinish=()=>{a?.cancel(),t||(o.display="none")}}}),n(()=>{a?.cancel(),o.display=f})}),Se=e=>{let t=/^\s*(-?\d*\.?\d+)([a-z%]*)\s*$/i.exec(e);return t?[+t[1],t[2]]:void 0},$e=_("animate",5,({el:e,mods:t,cased:r,evaluate:l,effect:n,cleanup:a})=>{let i,o=r("kebab"),s=u(t.get("duration"),300),c=matchMedia("(prefers-reduced-motion: reduce)").matches,d=t=>e.style.setProperty(o,t),f=0,h=!0;n(()=>{let t=String(l());if(t===i)return;i=t,cancelAnimationFrame(f);let r=Se(e.style.getPropertyValue(o)||getComputedStyle(e).getPropertyValue(o)),n=Se(t);if(h||c||s<=0||!r||!n||r[1]!==n[1])return h=!1,d(t);let[a,u]=r,p=n[0],m=performance.now(),g=e=>{let t=Math.min(1,(e-m)/s);d(`${a+(p-a)*(1-(1-t)**2)}${u}`),t<1&&(f=requestAnimationFrame(g))};f=requestAnimationFrame(g)}),a(()=>cancelAnimationFrame(f))}),Ae=e=>String(e??""),ke=_("bind",0,({el:e,key:t,value:r,cased:l,mods:n,store:a,listen:i,effect:o})=>{let s,c=t?l():r.trim(),u=()=>a.get(c),d=e=>"number"==typeof u()?+e:e,f=e,h=e instanceof HTMLInputElement?f.type:"",p=(e,...t)=>({n:e,r:e=>{Ae(e)!==f.value&&!f.validity?.badInput&&(f.value=Ae(e))},s:t});if("checkbox"===h){let t=e.hasAttribute("value")&&"on"!==f.value;s={n:()=>{let e=u();if(Array.isArray(e)){let t=new Set(e);return f.checked?t.add(f.value):t.delete(f.value),[...t]}return t?f.checked?f.value:"":f.checked},r:e=>{f.checked=Array.isArray(e)?e.includes(f.value):t?e===f.value:!!e},s:["input"]}}else if("radio"===h)f.name||=c,s={n:()=>f.checked?d(f.value):u(),r:e=>f.checked=String(e)===f.value,s:["input"]};else{if("file"===h)return void i(e,"change",()=>(e=>Promise.all([...e.files??[]].map(e=>new Promise(t=>{let r=new FileReader;r.onloadend=()=>t({name:e.name,type:e.type,size:e.size,contents:String(r.result).split(",")[1]??""}),r.readAsDataURL(e)}))))(f).then(e=>a.set(c,e)));if(h){let e="number"===h||"range"===h;s=p(()=>e&&""!==f.value?+f.value:f.value,"input")}else s=e instanceof HTMLSelectElement?{n:()=>e.multiple?[...e.selectedOptions].map(e=>d(e.value)):d(e.value),r:t=>{if(e.multiple)for(let r of e.options)r.selected=Array.isArray(t)&&t.map(String).includes(r.value);else e.value=Ae(t)},s:["change"]}:"value"in e?p(()=>f.value,"input","change"):{n:()=>e.getAttribute("value"),r:t=>e.setAttribute("value",Ae(t)),s:["change"]}}if(!a.has(c)){let e=s.n();void 0!==e&&""!==e&&a.set(c,e)}let m=()=>a.set(c,s.n());for(let t of[...n.get("event")??s.s,"sigmx-prop-change"])i(e,t,m);o(()=>s.r(u()))}),Ee=e=>"string"==typeof e?e:JSON.stringify(e),Me=()=>new URLSearchParams(location.search),Te=_("query-string",1,({key:e,value:t,mods:r,evaluate:l,cased:n,store:a,listen:i,effect:o})=>{let s=r.has("history"),c=!1;{let r=e,u=n(),d=t?l():"",f=e=>{let t=e.get(r);a.set(u,null===t?d:"string"==typeof d?t:(e=>{try{return JSON.parse(e)}catch{return e}})(t))};(!a.has(u)||Me().has(r))&&f(Me()),((e,t)=>{o(()=>{let e=Me();if(t(e),c)return;let r=String(e),l=`${location.pathname}${r?`?${r}`:""}${location.hash}`;l!==location.pathname+location.search+location.hash&&window.history[s?"pushState":"replaceState"](null,"",l)}),s&&i(window,"popstate",()=>{c=!0;try{e(Me())}finally{c=!1}})})(f,e=>{let t=a.get(u);void 0===t||((e,t)=>Ee(e)===Ee(t))(t,d)?e.delete(r):e.set(r,Ee(t))})}}),Le=_("replace-url",6,({evaluate:e,effect:t})=>t(()=>history.replaceState(history.state,"",new URL(String(e()),location.href)))),Oe=_("custom-validity",6,({el:e,evaluate:t,effect:r,error:l})=>{if(!("setCustomValidity"in e))throw l("only works on form fields");let n=e;return r(()=>n.setCustomValidity(String(t()??""))),()=>n.setCustomValidity("")}),Pe=_("on-intersect",22,({el:e,mods:t,evaluate:r,cleanup:l})=>{let n=+(t.get("threshold")?.join(".")??0),a=Number.isFinite(n)?Math.min(100,Math.max(0,n))/100:0,i=f(()=>r(),t,l),o=new IntersectionObserver(e=>{for(let r of e)r.isIntersecting!==t.has("exit")&&(i(),t.has("once")&&o.disconnect())},{threshold:a});return o.observe(e),()=>o.disconnect()}),je=_("show",6,({el:e,evaluate:t,effect:r})=>{let l="none"===e.style.display?"":e.style.display;return r(()=>{e.style.display=t()?l:"none"}),()=>{e.style.display=l}}),Ne=_("effect",22,e=>e.effect(()=>e.evaluate())),Ce=U("setAll",({store:e},t,r)=>O(()=>P(()=>{for(let l of e.paths(r,{computed:!1}))e.set(l,t)}))),Ie=U("toggleAll",({store:e},t)=>O(()=>P(()=>{for(let r of e.paths(t,{computed:!1}))e.set(r,!e.get(r))}))),qe=U("confirm",(e,t)=>window.confirm(t)),Re=U("clipboard",(e,t,r=!1)=>navigator.clipboard.writeText(r?(new TextDecoder).decode(Uint8Array.from(atob(t),e=>e.charCodeAt(0))):t)),ze=U("dispatch",({el:e},t,r)=>e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0}))),Ve=U("intl",({error:e},t,r,l,n)=>{let a=Intl[t];if(!a)throw e(`unknown @intl type "${t}"`);let i=new a(n,l);return(i.select??i.of??i.format).call(i,..."RelativeTimeFormat"===t?r:[r])??""}),He=U("fit",(e,t,r,l,n,a,i=!1,o=!1)=>{let s=l===r?0:(t-r)/(l-r);i&&(s=Math.min(1,Math.max(0,s)));let c=n+s*(a-n);return o?Math.round(c):c}),We=(e,t={})=>{let r="",l=[];for(let n of e.split(/\r?\n/)){let e=n.indexOf(":");if(!e)continue;let a=e<0?n:n.slice(0,e),i=(e<0?"":n.slice(e+1)).replace(/^ /,"");"event"===a?r=i:"data"===a?l.push(i):"id"===a?t.id=i:"retry"===a&&/^\d+$/.test(i)&&(t.retry=+i)}if(l.length)return{event:r||"message",data:l.join("\n"),id:t.id,retry:t.retry}},De=async(e,t)=>{let r=e.getReader(),l=new TextDecoder,n={},a="",i=0,o=e=>{let r=We(e,n);r&&t(r)};for(;;){let{value:e,done:t}=await r.read();a+=l.decode(e,{stream:!t});let n=/\r?\n\r?\n/g;n.lastIndex=i;for(let e=n.exec(a);e;e=n.exec(a))o(a.slice(0,e.index)),a=a.slice(e.index+e[0].length),n.lastIndex=0;if(i=Math.max(0,a.length-3),t){o(a);break}}},Fe=e=>{let t={};for(let r of e.split("\n")){let e=r.indexOf(" "),l=e<0?r:r.slice(0,e),n=e<0?"":r.slice(e+1);t[l]=l in t?`${t[l]}\n${n}`:n}return t},_e=new Map,Ue=0,Be=(e,t,r)=>{for(let l of t){let t=e.headers.get(`sigmx-${l}`);t&&(r[a(l)]=t)}return r},Je=(e,t)=>U(e,(e,r,l)=>(async(e,t,r,l={})=>{let{el:n,evt:a,store:i,runtime:o,error:s}=t;if(!r)throw s(`@${e.toLowerCase()} needs a URL`);let c=new URL(r,location.href),u=`${e} ${c.href}`,d="GET"!==e&&"DELETE"!==e,f=new Headers({Accept:"text/event-stream, text/html, application/json","Sigmx-Request":"true"});for(let[e,t]of new Headers(l.headers))f.set(e,t);let h,p=e=>{d&&!f.has("Content-Type")&&f.set("Content-Type",e)};if("json"===(l.contentType??"json")){let e=JSON.stringify(l.payload??P(()=>i.snapshot(l.filter??{exclude:/(^|\.)_/})));d?(h=e,p("application/json")):c.searchParams.set("sigmx",e)}else{let e=l.selector?document.querySelector(l.selector):n.closest("form");if(!e)throw s("no form found",{selector:l.selector});if(!e.noValidate&&!e.checkValidity())return void e.reportValidity();let t=a instanceof SubmitEvent?a.submitter:n instanceof HTMLButtonElement&&n.form===e&&"submit"===n.type?n:null,r=new FormData(e,t),i=new URLSearchParams(r);if(d)"multipart/form-data"===e.enctype?h=r:(h=i,p("application/x-www-form-urlencoded"));else for(let[e,t]of i)c.searchParams.append(e,t)}let m=new AbortController;"none"!==l.abort&&(_e.get(u)?.abort(),_e.set(u,m));let g,v,y,w=t.cleanup(()=>m.abort()),b=++Ue,x=(t,l)=>o.emit("fetch",{el:n,type:t,method:e,url:r,rid:b,...l}),S={attempts:5,interval:1e3,factor:2,max:3e4,...l.retry},$=0,A=S.interval,k=e=>{try{e()}catch(e){throw y=e,e}},E=async()=>{if($++>=S.attempts)throw new Error("retries exhausted");await((e,t)=>new Promise(r=>{if(t.aborted)return r();let l=setTimeout(r,e);t.addEventListener("abort",()=>{clearTimeout(l),r()},{once:!0})}))(A,m.signal),A=Math.min(A*S.factor,S.max)};x("started");try{for(;!m.signal.aborted;){g&&f.set("Last-Event-ID",g);try{let t=await fetch(c.href,{method:e,headers:f,body:h,signal:m.signal});v={url:t.url,status:t.status,redirected:t.redirected};let r=t.headers.get("content-type")??"";if(!t.ok){if(x("error",{status:t.status}),!S.onStatusError)return v;await E();continue}if(!t.body)return v;if(r.includes("text/event-stream")){if($=0,A=S.interval,await De(t.body,e=>{void 0!==e.id&&(g=e.id),e.retry&&(A=S.interval=e.retry);let t=Fe(e.data);k(()=>{o.emit("server-event",{el:n,event:e.event,data:t}),o.handle(e.event,t)})}),!l.reconnect)return v;await E();continue}let a=await t.text();return k(()=>{r.includes("text/html")?o.handle("patch-elements",Be(t,["selector","mode"],{elements:a})):r.includes("application/json")&&o.handle("patch-signals",Be(t,["only-if-missing"],{signals:a}))}),v}catch(e){if(m.signal.aborted)return v;if(y)throw e;await E()}}return v}catch(t){throw x("error",{message:t?.message}),s(`${e} ${r}: ${t?.message??t}`)}finally{m.abort(),w(),x("finished",v),_e.get(u)===m&&_e.delete(u)}})(t,e,r,l)),Ze=Je("get","GET"),Ke=Je("post","POST"),Ge=Je("put","PUT"),Qe=Je("patch","PATCH"),Xe=Je("delete","DELETE"),Ye=U("peek",(e,t)=>"function"==typeof t?P(t):t),et=U("ws",({el:e,runtime:t,cleanup:r},l,n={})=>{let a=new WebSocket(new URL(l,location.href.replace(/^http/,"ws")),n.protocols);return a.onmessage=r=>{if("string"==typeof r.data)for(let l of r.data.split(/(?:\r?\n){2,}/)){let r=We(l);if(!r)continue;let n=Fe(r.data);t.emit("server-event",{el:e,event:r.event,data:n}),t.handle(r.event,n)}},r(()=>a.close()),{send:e=>a.send("string"==typeof e?e:JSON.stringify(e)),close:()=>a.close(),socket:a}}),tt=new WeakSet,rt=e=>1===e?.nodeType,lt=e=>{if(rt(e))for(let t of[e,...e.querySelectorAll("script")]){if(!t.matches("script")||tt.has(t))continue;let e=document.createElement("script");for(let{name:r,value:l}of t.attributes)e.setAttribute(r,l);e.text=t.text,tt.add(e),t.replaceWith(e)}},nt=(e,t)=>{let r=document.importNode(e,!0);t(r),lt(r)},at=e=>[e,...e.querySelectorAll?.("[id]")??[]].filter(e=>rt(e)&&e.id),it=(e,t)=>at(e).some(e=>t.keep.has(e.id)),ot=(e,t,r)=>{try{e.moveBefore(t,r)}catch{e.insertBefore(t,r)}},st=(e,t)=>!(e.nodeName!==t.nodeName||rt(e)&&e.id&&e.id!==t.id),ct=(e,t,r)=>{e.nodeName===t.nodeName?rt(e)&&rt(t)?"script"!==t.localName||e.isEqualNode(t)?e.hasAttribute(r.ignore)&&t.hasAttribute(r.ignore)||(((e,t,r)=>{let l=new Set((t.getAttribute(r.preserve)??e.getAttribute(r.preserve)??"").split(/\s+/)),n=r=>!l.has(r)&&e.getAttribute(r)!==t.getAttribute(r),a=!1,i=e instanceof HTMLInputElement&&"file"!==e.type?["value","checked"]:e instanceof HTMLOptionElement?["selected"]:[];for(let r of i)n(r)&&(e[r]="value"===r?t.getAttribute(r)??"":t.hasAttribute(r),a=!0);e instanceof HTMLTextAreaElement&&!l.has("value")&&e.defaultValue!==t.defaultValue&&(e.value=t.defaultValue,a=!0);for(let{name:r,value:n}of t.attributes)!l.has(r)&&e.getAttribute(r)!==n&&e.setAttribute(r,n);for(let{name:r}of[...e.attributes])!l.has(r)&&!t.hasAttribute(r)&&e.removeAttribute(r);a&&(e instanceof HTMLOptionElement?e.closest("select"):e)?.dispatchEvent(new Event("sigmx-prop-change",{bubbles:!0}))})(e,t,r),e instanceof HTMLTemplateElement?e.innerHTML=t.innerHTML:e.isEqualNode(t)||ut(e,t,r)):nt(t,t=>e.replaceWith(t)):e.nodeValue!==t.nodeValue&&(e.nodeValue=t.nodeValue):nt(t,t=>e.replaceWith(t))},ut=(e,t,r)=>{let l=e.firstChild,n=e=>{for(;l&&l!==e;){let e=l;l=l.nextSibling,rt(e)&&r.keep.get(e.id)===e||e.remove()}return l===e};for(let a of[...t.childNodes]){let t=rt(a)&&r.keep.get(a.id);if(t){let i=l;for(;i&&i!==t;)i=i.nextSibling;i?(n(t),l=t.nextSibling):ot(e,t,l),ct(t,a,r);continue}let i=l;for(;i&&!st(i,a);)i=i.nextSibling;if(i)n(i),l=i.nextSibling,ct(i,a,r);else if(rt(a)&&it(a,r)){let t=document.importNode(a,!1);e.insertBefore(t,l),ct(t,a,r)}else nt(a,t=>e.insertBefore(t,l))}n(null)},dt=(e,t,r)=>{let l=new Map(at(t).map(e=>[e.id,e.tagName]));return{keep:new Map(at(e).flatMap(e=>l.get(e.id)===e.tagName?[[e.id,e]]:[])),ignore:r.ignoreAttr??"data-ignore-morph",preserve:r.preserveAttr??"data-preserve-attr"}},ft=(e,t,r={})=>{ct(e,t,dt(e,t,r))},ht=((e={})=>D({...e,expressions:e.expressions??w(e.compile??h)}))({plugins:[Z,ke,Q,te,Oe,Ne,G,ue,ge,ce,le,Pe,be,ne,me,de,ve,Te,re,Le,pe,je,ee,ie,we,Re,He,Ve,Ye,Ce,Ie,$e,Xe,Ze,Qe,Ke,Ge,B("patch-elements",(e,{elements:t="",selector:r="",mode:l="outer"})=>{let n={ignoreAttr:e.attr("ignore-morph"),preserveAttr:e.attr("preserve-attr")},a=(e=>{if(/^\s*<(!doctype|html)[\s>]|<\/(html|head|body)>/i.test(e))return(new DOMParser).parseFromString(e,"text/html");let t=document.createElement("template");return t.innerHTML=e,t.content})(t);if(a instanceof Document){for(let{name:e,value:t}of a.documentElement.attributes)document.documentElement.setAttribute(e,t);return a.head.childNodes.length&&((e,t)=>{let r=[...t.children];for(let t of[...e.children]){let e=r.findIndex(e=>e.isEqualNode(t));e<0?t.remove():r.splice(e,1)}for(let t of r){let r=document.importNode(t,!0);e.append(r),lt(r)}})(document.head,a.head),void ft(document.body,a.body,n)}let i=(e,t)=>{let r=[...t.childNodes];if("outer"===l&&1===r.length&&1===r[0].nodeType)ft(e,r[0],n);else if("inner"===l)((e,t,r={})=>{ut(e,t,dt(e,t,r))})(e,t,n);else{"outer"===l||"replace"===l?e.replaceWith(t):e[l](t);for(let e of r)lt(e)}};if(r){let e=[...document.querySelectorAll(r)];if("remove"===l)for(let t of e)t.remove();else e.forEach((t,r)=>{i(t,r+1<e.length?a.cloneNode(!0):a)})}else{if("outer"!==l&&"replace"!==l)throw new Error(`mode "${l}" needs a selector`);for(let e of[...a.children]){let t=e.id&&document.getElementById(e.id);if(t){let r=document.createDocumentFragment();r.append(e),i(t,r)}}}}),B("patch-signals",(e,{signals:t,onlyIfMissing:r})=>{if(!t)return;let l;try{l=JSON.parse(t)}catch{l=e.compiler([],`return (${t})`)()}e.store.merge(l,{ifMissing:"true"===r})}),K,X,Y,ae,se,fe,ye,xe,qe,ze,et]});globalThis.sigmx=ht;export{ht as sigmx};
|
package/dist/vite.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
2
|
import { isAbsolute, join, relative } from "node:path";
|
|
3
|
-
import { extractExpressions, generateTable } from "./kernel/precompile.js";
|
|
3
|
+
import { extractExpressions, generateTable, lintSource } from "./kernel/precompile.js";
|
|
4
4
|
import {
|
|
5
5
|
builtinPlugins,
|
|
6
6
|
customPluginMeta,
|
|
@@ -24,24 +24,31 @@ const DEFAULT_EXTENSIONS = [
|
|
|
24
24
|
".hbs"
|
|
25
25
|
];
|
|
26
26
|
const walk = (dir, exts, out = []) => {
|
|
27
|
+
const self = statSync(dir, { throwIfNoEntry: false });
|
|
28
|
+
if (self?.isFile()) {
|
|
29
|
+
if (exts.some((x) => dir.endsWith(x))) out.push(dir);
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
27
32
|
let entries = [];
|
|
28
33
|
try {
|
|
29
|
-
entries = readdirSync(dir);
|
|
34
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
30
35
|
} catch {
|
|
31
36
|
return out;
|
|
32
37
|
}
|
|
33
38
|
for (const e of entries) {
|
|
34
|
-
if (e === "node_modules" || e.startsWith(".")) continue;
|
|
35
|
-
const p = join(dir, e);
|
|
36
|
-
if (
|
|
37
|
-
else if (exts.some((x) => p.endsWith(x))) out.push(p);
|
|
39
|
+
if (e.name === "node_modules" || e.name.startsWith(".")) continue;
|
|
40
|
+
const p = join(dir, e.name);
|
|
41
|
+
if (e.isDirectory()) walk(p, exts, out);
|
|
42
|
+
else if (e.isFile() && exts.some((x) => p.endsWith(x))) out.push(p);
|
|
38
43
|
}
|
|
39
44
|
return out;
|
|
40
45
|
};
|
|
41
46
|
const files = (o) => {
|
|
42
47
|
const root = o.root ?? process.cwd();
|
|
43
48
|
const exts = o.extensions ?? DEFAULT_EXTENSIONS;
|
|
44
|
-
|
|
49
|
+
const found = (o.include ?? ["src", "index.html"]).flatMap((d) => walk(join(root, d), exts));
|
|
50
|
+
if (!found.length) console.warn("[sigmx] no source files found to scan; check the `include` option");
|
|
51
|
+
return found;
|
|
45
52
|
};
|
|
46
53
|
const customMeta = (root, custom = {}) => Object.entries(custom).flatMap(([exp, path]) => {
|
|
47
54
|
const abs = isAbsolute(path) ? path : join(root, path);
|
|
@@ -56,6 +63,9 @@ const scanProject = (o = {}) => {
|
|
|
56
63
|
const root = o.root ?? process.cwd();
|
|
57
64
|
const list = files(o);
|
|
58
65
|
const sources = list.map((f) => readFileSync(f, "utf8"));
|
|
66
|
+
list.forEach((f, i) => {
|
|
67
|
+
for (const w of lintSource(sources[i], o.prefixes)) console.warn(`[sigmx] ${relative(root, f)}: ${w}`);
|
|
68
|
+
});
|
|
59
69
|
const sel = selectPlugins(sources, { prefixes: o.prefixes, always: o.always, custom: customMeta(root, o.custom) });
|
|
60
70
|
return { ...sel, files: list };
|
|
61
71
|
};
|
package/dist/vite.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/vite.ts"],
|
|
4
|
-
"sourcesContent": ["import { readdirSync, readFileSync, statSync } from 'node:fs';\nimport { isAbsolute, join, relative } from 'node:path';\nimport { extractExpressions, generateTable } from './kernel/precompile.js';\nimport {\n builtinPlugins,\n customPluginMeta,\n generatePluginsModule,\n type PluginMeta,\n type Selection,\n selectPlugins,\n} from './kernel/scan.js';\n\nexport type ScanOptions = {\n /** Project root; defaults to the current working directory. */\n root?: string;\n /** Directories to scan, relative to root. Default `['src']`. */\n include?: string[];\n extensions?: string[];\n /** Attribute prefixes in use. Default `['data-']`. */\n prefixes?: string[];\n};\nexport type AutoOptions = ScanOptions & {\n /** Export names that ship no matter what, e.g. `['signals', 'httpGet']`. */\n always?: string[];\n /** Custom plugins: export name \u2192 module path (absolute or root-relative), e.g. `{ upper: 'src/plugins/upper.ts' }`. */\n custom?: Record<string, string>;\n /** Print the selection at build time. Default true. */\n log?: boolean;\n};\nexport type PrecompileOptions = ScanOptions & {\n /** Custom plugins whose expressions should be precompiled too. */\n custom?: Record<string, string>;\n};\n\nexport const DEFAULT_EXTENSIONS = [\n '.astro',\n '.html',\n '.mdx',\n '.md',\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.svelte',\n '.vue',\n '.php',\n '.erb',\n '.twig',\n '.hbs',\n];\n\nexport const walk = (dir: string, exts: string[], out: string[] = []): string[] => {\n let entries:
|
|
5
|
-
"mappings": "AAAA,SAAS,aAAa,cAAc,gBAAgB;AACpD,SAAS,YAAY,MAAM,gBAAgB;AAC3C,SAAS,oBAAoB,
|
|
4
|
+
"sourcesContent": ["import { readdirSync, readFileSync, statSync } from 'node:fs';\nimport { isAbsolute, join, relative } from 'node:path';\nimport { extractExpressions, generateTable, lintSource } from './kernel/precompile.js';\nimport {\n builtinPlugins,\n customPluginMeta,\n generatePluginsModule,\n type PluginMeta,\n type Selection,\n selectPlugins,\n} from './kernel/scan.js';\n\nexport type ScanOptions = {\n /** Project root; defaults to the current working directory. */\n root?: string;\n /** Directories to scan, relative to root. Default `['src']`. */\n include?: string[];\n extensions?: string[];\n /** Attribute prefixes in use. Default `['data-']`. */\n prefixes?: string[];\n};\nexport type AutoOptions = ScanOptions & {\n /** Export names that ship no matter what, e.g. `['signals', 'httpGet']`. */\n always?: string[];\n /** Custom plugins: export name \u2192 module path (absolute or root-relative), e.g. `{ upper: 'src/plugins/upper.ts' }`. */\n custom?: Record<string, string>;\n /** Print the selection at build time. Default true. */\n log?: boolean;\n};\nexport type PrecompileOptions = ScanOptions & {\n /** Custom plugins whose expressions should be precompiled too. */\n custom?: Record<string, string>;\n};\n\nexport const DEFAULT_EXTENSIONS = [\n '.astro',\n '.html',\n '.mdx',\n '.md',\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.svelte',\n '.vue',\n '.php',\n '.erb',\n '.twig',\n '.hbs',\n];\n\nexport const walk = (dir: string, exts: string[], out: string[] = []): string[] => {\n // `include` entries may be files (index.html) as well as directories.\n const self = statSync(dir, { throwIfNoEntry: false });\n if (self?.isFile()) {\n if (exts.some((x) => dir.endsWith(x))) out.push(dir);\n return out;\n }\n let entries: import('node:fs').Dirent[] = [];\n try {\n entries = readdirSync(dir, { withFileTypes: true });\n } catch {\n return out;\n }\n for (const e of entries) {\n if (e.name === 'node_modules' || e.name.startsWith('.')) continue;\n const p = join(dir, e.name);\n if (e.isDirectory()) walk(p, exts, out);\n else if (e.isFile() && exts.some((x) => p.endsWith(x))) out.push(p);\n }\n return out;\n};\n\nconst files = (o: ScanOptions) => {\n const root = o.root ?? process.cwd();\n const exts = o.extensions ?? DEFAULT_EXTENSIONS;\n const found = (o.include ?? ['src', 'index.html']).flatMap((d) => walk(join(root, d), exts));\n if (!found.length) console.warn('[sigmx] no source files found to scan; check the `include` option');\n return found;\n};\n\nconst customMeta = (root: string, custom: Record<string, string> = {}): PluginMeta[] =>\n Object.entries(custom).flatMap(([exp, path]) => {\n const abs = isAbsolute(path) ? path : join(root, path);\n const meta = customPluginMeta(exp, readFileSync(abs, 'utf8'), `/${relative(root, abs).replace(/\\\\/g, '/')}`);\n if (!meta)\n console.warn(\n `[sigmx] could not read plugin metadata for \"${exp}\" in ${path}; include it via \"always\" if it must ship`,\n );\n return meta ? [meta] : [];\n });\n\n/** Scan once and pick plugins: what the Vite plugin and the CLI both do. */\nexport const scanProject = (o: AutoOptions = {}): Selection & { files: string[] } => {\n const root = o.root ?? process.cwd();\n const list = files(o);\n const sources = list.map((f) => readFileSync(f, 'utf8'));\n list.forEach((f, i) => {\n for (const w of lintSource(sources[i], o.prefixes)) console.warn(`[sigmx] ${relative(root, f)}: ${w}`);\n });\n const sel = selectPlugins(sources, { prefixes: o.prefixes, always: o.always, custom: customMeta(root, o.custom) });\n return { ...sel, files: list };\n};\n\nexport const AUTO_ID = 'virtual:sigmx-plugins';\nexport const EXPRESSIONS_ID = 'virtual:sigmx-expressions';\n\n/** Serves `virtual:sigmx-plugins`, exporting the `plugins` array your source actually uses. */\nexport const sigmxAuto = (o: AutoOptions = {}) => ({\n name: 'sigmx-auto',\n resolveId: (id: string) => (id === AUTO_ID ? `\\0${AUTO_ID}` : undefined),\n load(this: any, id: string) {\n if (id !== `\\0${AUTO_ID}`) return;\n const sel = scanProject(o);\n for (const f of sel.files) this.addWatchFile?.(f);\n if (o.log ?? true) {\n const names = sel.plugins.map((p) => p.export);\n console.info(`[sigmx] auto: ${names.length} plugins (${names.join(', ')}); ${sel.unused.length} unused`);\n }\n return generatePluginsModule(sel);\n },\n});\n\n/** Serves `virtual:sigmx-expressions`, a table of every attribute expression compiled at build time. */\nexport const sigmxPrecompile = (o: PrecompileOptions = {}) => ({\n name: 'sigmx-precompile',\n resolveId: (id: string) => (id === EXPRESSIONS_ID ? `\\0${EXPRESSIONS_ID}` : undefined),\n load(this: any, id: string) {\n if (id !== `\\0${EXPRESSIONS_ID}`) return;\n const root = o.root ?? process.cwd();\n const meta = [...builtinPlugins(), ...customMeta(root, o.custom)].filter((p) => p.type === 'attribute');\n const items = [];\n for (const f of files(o)) {\n this.addWatchFile?.(f);\n items.push(...extractExpressions(readFileSync(f, 'utf8'), meta, o.prefixes ?? ['data-']));\n }\n return generateTable(items);\n },\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|