gg-wf-scripts 2.8.0 → 4.0.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 +15 -10
- package/dist/action-engine.d.ts +2 -3
- package/dist/action-engine.js +59 -40
- package/dist/action-engine.js.map +1 -1
- package/dist/actions.d.ts +1 -10
- package/dist/actions.js +1 -11
- package/dist/actions.js.map +1 -1
- package/dist/attrs.d.ts +56 -0
- package/dist/attrs.js +64 -0
- package/dist/attrs.js.map +1 -0
- package/dist/auth.d.ts +3 -3
- package/dist/auth.js +6 -5
- package/dist/auth.js.map +1 -1
- package/dist/bridges.d.ts +1 -1
- package/dist/bridges.js +23 -13
- package/dist/bridges.js.map +1 -1
- package/dist/data-engine.d.ts +2 -3
- package/dist/data-engine.js +100 -119
- package/dist/data-engine.js.map +1 -1
- package/dist/dialog.d.ts +1 -1
- package/dist/dialog.js +15 -11
- package/dist/dialog.js.map +1 -1
- package/dist/dom-observer.d.ts +4 -0
- package/dist/dom-observer.js +47 -0
- package/dist/dom-observer.js.map +1 -0
- package/dist/engine-deps.d.ts +23 -0
- package/dist/engine-deps.js +2 -0
- package/dist/engine-deps.js.map +1 -0
- package/dist/errors.d.ts +25 -0
- package/dist/errors.js +30 -0
- package/dist/errors.js.map +1 -0
- package/dist/form-action-engine.d.ts +2 -3
- package/dist/form-action-engine.js +90 -73
- package/dist/form-action-engine.js.map +1 -1
- package/dist/form-actions.d.ts +1 -13
- package/dist/form-actions.js +1 -14
- package/dist/form-actions.js.map +1 -1
- package/dist/form-visibility.d.ts +1 -1
- package/dist/form-visibility.js +89 -88
- package/dist/form-visibility.js.map +1 -1
- package/dist/helpers/form-field.d.ts +19 -0
- package/dist/helpers/form-field.js +58 -0
- package/dist/helpers/form-field.js.map +1 -0
- package/dist/helpers/run-handler.d.ts +6 -2
- package/dist/helpers/run-handler.js +5 -2
- package/dist/helpers/run-handler.js.map +1 -1
- package/dist/index.d.ts +46 -14
- package/dist/index.js +43 -17
- package/dist/index.js.map +1 -1
- package/dist/queries.d.ts +1 -10
- package/dist/queries.js +1 -11
- package/dist/queries.js.map +1 -1
- package/dist/query-params.d.ts +1 -1
- package/dist/query-params.js +40 -22
- package/dist/query-params.js.map +1 -1
- package/dist/switch-engine.d.ts +1 -1
- package/dist/switch-engine.js +16 -9
- package/dist/switch-engine.js.map +1 -1
- package/package.json +8 -3
package/dist/data-engine.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
import { ATTR, SEL } from "./attrs.js";
|
|
1
2
|
import { getPath } from "./helpers/path.js";
|
|
2
3
|
import { populateFields, setSwitchState, applySwitchState, } from "./helpers/dom.js";
|
|
4
|
+
import { writeField } from "./helpers/form-field.js";
|
|
3
5
|
import { runHandler } from "./helpers/run-handler.js";
|
|
4
6
|
import { runWithLoading } from "./helpers/run-with-loading.js";
|
|
5
|
-
import {
|
|
7
|
+
import { onElement } from "./dom-observer.js";
|
|
6
8
|
import { onQueryChanged, getParams } from "./query-params.js";
|
|
7
9
|
function applySwitchFields(root, record) {
|
|
8
|
-
root.querySelectorAll(
|
|
9
|
-
const path = el.getAttribute(
|
|
10
|
+
root.querySelectorAll(SEL.switchField).forEach((el) => {
|
|
11
|
+
const path = el.getAttribute(ATTR.switchField);
|
|
10
12
|
if (!path)
|
|
11
13
|
return;
|
|
12
14
|
const value = getPath(record, path);
|
|
@@ -14,22 +16,8 @@ function applySwitchFields(root, record) {
|
|
|
14
16
|
applySwitchState(el);
|
|
15
17
|
});
|
|
16
18
|
}
|
|
17
|
-
function
|
|
18
|
-
|
|
19
|
-
root.querySelectorAll("*").forEach((el) => {
|
|
20
|
-
if (el.shadowRoot)
|
|
21
|
-
results.push(...queryDeep(el.shadowRoot, selector));
|
|
22
|
-
});
|
|
23
|
-
return results;
|
|
24
|
-
}
|
|
25
|
-
function applyDataValues(root, record) {
|
|
26
|
-
queryDeep(root, "[gg-data-key]").forEach((el) => {
|
|
27
|
-
const path = el.getAttribute("gg-data-key");
|
|
28
|
-
const value = path ? getPath(record, path) : record;
|
|
29
|
-
if (value === undefined)
|
|
30
|
-
return;
|
|
31
|
-
el.setAttribute("gg-data-value", JSON.stringify(value));
|
|
32
|
-
});
|
|
19
|
+
function emitDataReady(container, record) {
|
|
20
|
+
container.dispatchEvent(new CustomEvent("gg-data-ready", { bubbles: true, detail: { record } }));
|
|
33
21
|
}
|
|
34
22
|
function populateFormFields(root, record) {
|
|
35
23
|
root
|
|
@@ -38,121 +26,114 @@ function populateFormFields(root, record) {
|
|
|
38
26
|
const name = el.getAttribute("name");
|
|
39
27
|
if (!name)
|
|
40
28
|
return;
|
|
41
|
-
|
|
42
|
-
if (value == null)
|
|
43
|
-
return;
|
|
44
|
-
if (el instanceof HTMLInputElement) {
|
|
45
|
-
if (el.type === "checkbox") {
|
|
46
|
-
el.checked = Boolean(value);
|
|
47
|
-
}
|
|
48
|
-
else if (el.type === "radio") {
|
|
49
|
-
el.checked = String(el.value) === String(value);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
el.value = String(value);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
el.value = String(value);
|
|
57
|
-
}
|
|
58
|
-
el.dispatchEvent(new Event("input", { bubbles: true }));
|
|
59
|
-
el.dispatchEvent(new Event("change", { bubbles: true }));
|
|
29
|
+
writeField(root, name, getPath(record, name));
|
|
60
30
|
});
|
|
61
31
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const params = getParams();
|
|
75
|
-
const handlerResult = await runWithLoading([container], () => runHandler({
|
|
32
|
+
async function runQuery(container, deps) {
|
|
33
|
+
const isList = container.hasAttribute(ATTR.dataList);
|
|
34
|
+
const isForm = container.hasAttribute(ATTR.dataForm);
|
|
35
|
+
const id = container.getAttribute(isList ? ATTR.dataList : isForm ? ATTR.dataForm : ATTR.data);
|
|
36
|
+
if (!id)
|
|
37
|
+
return;
|
|
38
|
+
const query = deps.queries[id];
|
|
39
|
+
if (!query) {
|
|
40
|
+
console.warn(`[gg-data] no query registered for "${id}"`);
|
|
41
|
+
deps.emitError({
|
|
76
42
|
prefix: "[gg-data]",
|
|
77
43
|
id,
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
44
|
+
error: "no query registered",
|
|
45
|
+
fields: { container },
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const params = getParams();
|
|
50
|
+
const handlerResult = await runWithLoading([container], () => runHandler({
|
|
51
|
+
prefix: "[gg-data]",
|
|
52
|
+
id,
|
|
53
|
+
fields: { container, params: Object.fromEntries(params) },
|
|
54
|
+
debug: deps.debug,
|
|
55
|
+
emitError: deps.emitError,
|
|
56
|
+
}, () => query(deps.context, params)));
|
|
57
|
+
if (!handlerResult.ok)
|
|
58
|
+
return;
|
|
59
|
+
const result = handlerResult.value;
|
|
60
|
+
if (result === undefined)
|
|
61
|
+
return;
|
|
62
|
+
if (isList) {
|
|
63
|
+
if (!Array.isArray(result)) {
|
|
64
|
+
console.warn(`[gg-data-list] query "${id}" did not return an array`);
|
|
82
65
|
return;
|
|
83
|
-
|
|
84
|
-
|
|
66
|
+
}
|
|
67
|
+
const template = container.querySelector(SEL.listTemplate);
|
|
68
|
+
if (!template) {
|
|
69
|
+
console.warn(`[gg-data-list] no [${ATTR.listTemplate}] inside "${id}"`);
|
|
85
70
|
return;
|
|
86
|
-
if (isList) {
|
|
87
|
-
if (!Array.isArray(result)) {
|
|
88
|
-
console.warn(`[gg-data-list] query "${id}" did not return an array`);
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
const template = container.querySelector("[gg-list-template]");
|
|
92
|
-
if (!template) {
|
|
93
|
-
console.warn(`[gg-data-list] no [gg-list-template] inside "${id}"`);
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
Array.from(container.children).forEach((child) => {
|
|
97
|
-
if (child !== template)
|
|
98
|
-
child.remove();
|
|
99
|
-
});
|
|
100
|
-
result.forEach((record) => {
|
|
101
|
-
const clone = template.cloneNode(true);
|
|
102
|
-
clone.removeAttribute("gg-list-template");
|
|
103
|
-
clone.setAttribute("gg-query-set", `modal:view,id:${record.id}`);
|
|
104
|
-
clone.style.display = "flex";
|
|
105
|
-
if (record?.id != null)
|
|
106
|
-
clone.id = String(record.id);
|
|
107
|
-
clone.__ggRecord = record;
|
|
108
|
-
populateFields(clone, record);
|
|
109
|
-
applySwitchFields(clone, record);
|
|
110
|
-
applyDataValues(clone, record);
|
|
111
|
-
container.appendChild(clone);
|
|
112
|
-
});
|
|
113
71
|
}
|
|
114
|
-
|
|
115
|
-
if (
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
72
|
+
Array.from(container.children).forEach((child) => {
|
|
73
|
+
if (child !== template)
|
|
74
|
+
child.remove();
|
|
75
|
+
});
|
|
76
|
+
result.forEach((record) => {
|
|
77
|
+
const clone = template.cloneNode(true);
|
|
78
|
+
clone.removeAttribute(ATTR.listTemplate);
|
|
79
|
+
clone.setAttribute(ATTR.querySet, `modal:view,id:${record.id}`);
|
|
80
|
+
clone.style.display = "flex";
|
|
81
|
+
if (record?.id != null)
|
|
82
|
+
clone.id = String(record.id);
|
|
83
|
+
clone.__ggRecord = record;
|
|
84
|
+
populateFields(clone, record);
|
|
85
|
+
applySwitchFields(clone, record);
|
|
86
|
+
container.appendChild(clone);
|
|
87
|
+
emitDataReady(clone, record);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
else if (isForm) {
|
|
91
|
+
if (Array.isArray(result)) {
|
|
92
|
+
console.warn(`[gg-data-form] query "${id}" returned an array; expected a single record`);
|
|
93
|
+
return;
|
|
125
94
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
applyDataValues(container, record);
|
|
95
|
+
if (!result)
|
|
96
|
+
return;
|
|
97
|
+
const record = result;
|
|
98
|
+
container.__ggRecord = record;
|
|
99
|
+
populateFormFields(container, record);
|
|
100
|
+
emitDataReady(container, record);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
if (Array.isArray(result)) {
|
|
104
|
+
console.warn(`[gg-data] query "${id}" returned an array; use gg-data-list instead`);
|
|
105
|
+
return;
|
|
138
106
|
}
|
|
107
|
+
if (!result)
|
|
108
|
+
return;
|
|
109
|
+
const record = result;
|
|
110
|
+
container.__ggRecord = record;
|
|
111
|
+
populateFields(container, record);
|
|
112
|
+
applySwitchFields(container, record);
|
|
113
|
+
emitDataReady(container, record);
|
|
139
114
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
115
|
+
}
|
|
116
|
+
export function initDataEngine(deps) {
|
|
117
|
+
const seen = new WeakSet();
|
|
118
|
+
const unbind = onElement(SEL.dataAny, (el) => {
|
|
119
|
+
if (seen.has(el))
|
|
120
|
+
return;
|
|
121
|
+
seen.add(el);
|
|
122
|
+
runQuery(el, deps);
|
|
123
|
+
});
|
|
124
|
+
const unsubscribe = onQueryChanged((key) => {
|
|
125
|
+
document.querySelectorAll(SEL.dataAnyOn).forEach((c) => {
|
|
126
|
+
const attr = c.getAttribute(ATTR.dataOn);
|
|
150
127
|
if (!attr)
|
|
151
128
|
return;
|
|
152
129
|
const keys = attr.split(",").map((s) => s.trim());
|
|
153
130
|
if (keys.includes(key))
|
|
154
|
-
runQuery(c);
|
|
131
|
+
runQuery(c, deps);
|
|
155
132
|
});
|
|
156
133
|
});
|
|
134
|
+
return () => {
|
|
135
|
+
unbind();
|
|
136
|
+
unsubscribe();
|
|
137
|
+
};
|
|
157
138
|
}
|
|
158
139
|
//# sourceMappingURL=data-engine.js.map
|
package/dist/data-engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-engine.js","sourceRoot":"","sources":["../src/data-engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data-engine.js","sourceRoot":"","sources":["../src/data-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/dialog.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function initDialog(): void;
|
|
1
|
+
export declare function initDialog(): () => void;
|
package/dist/dialog.js
CHANGED
|
@@ -44,8 +44,7 @@ function syncDialogToUrl() {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
export function initDialog() {
|
|
47
|
-
|
|
48
|
-
onQueryChanged((key, value) => {
|
|
47
|
+
const unsubscribe = onQueryChanged((key, value) => {
|
|
49
48
|
if (key !== "modal")
|
|
50
49
|
return;
|
|
51
50
|
if (value) {
|
|
@@ -55,11 +54,9 @@ export function initDialog() {
|
|
|
55
54
|
closeDialog();
|
|
56
55
|
}
|
|
57
56
|
});
|
|
58
|
-
// Inbound events from external code
|
|
59
57
|
document.addEventListener("gg:dialog:open", openDialog);
|
|
60
58
|
document.addEventListener("gg:dialog:close", closeDialog);
|
|
61
|
-
|
|
62
|
-
document.addEventListener("click", (e) => {
|
|
59
|
+
const onClick = (e) => {
|
|
63
60
|
const target = e.target;
|
|
64
61
|
if (!(target instanceof HTMLDialogElement))
|
|
65
62
|
return;
|
|
@@ -72,18 +69,25 @@ export function initDialog() {
|
|
|
72
69
|
e.clientY > rect.bottom;
|
|
73
70
|
if (outside)
|
|
74
71
|
dismissViaUrlOrDirect();
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
};
|
|
73
|
+
document.addEventListener("click", onClick);
|
|
74
|
+
const onCancel = (e) => {
|
|
78
75
|
const target = e.target;
|
|
79
76
|
if (!(target instanceof HTMLDialogElement))
|
|
80
77
|
return;
|
|
81
78
|
e.preventDefault();
|
|
82
79
|
dismissViaUrlOrDirect();
|
|
83
|
-
}
|
|
84
|
-
|
|
80
|
+
};
|
|
81
|
+
document.addEventListener("cancel", onCancel);
|
|
85
82
|
window.addEventListener("popstate", syncDialogToUrl);
|
|
86
|
-
// Initial load
|
|
87
83
|
syncDialogToUrl();
|
|
84
|
+
return () => {
|
|
85
|
+
unsubscribe();
|
|
86
|
+
document.removeEventListener("gg:dialog:open", openDialog);
|
|
87
|
+
document.removeEventListener("gg:dialog:close", closeDialog);
|
|
88
|
+
document.removeEventListener("click", onClick);
|
|
89
|
+
document.removeEventListener("cancel", onCancel);
|
|
90
|
+
window.removeEventListener("popstate", syncDialogToUrl);
|
|
91
|
+
};
|
|
88
92
|
}
|
|
89
93
|
//# sourceMappingURL=dialog.js.map
|
package/dist/dialog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtE,SAAS,SAAS;IAChB,IAAI,OAAO,KAAK,KAAK,WAAW;QAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,OAAO,KAAK,KAAK,WAAW;QAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IACtC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,SAAS,EAAE,CAAC;IACnB,SAAS,EAAE,CAAC;AACd,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,UAAU,EAAE,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,UAAU,EAAE,CAAC;QACf,iBAAiB,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,WAAW,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;IACf,CAAC;SAAM,CAAC;QACN,WAAW,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtE,SAAS,SAAS;IAChB,IAAI,OAAO,KAAK,KAAK,WAAW;QAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,OAAO,KAAK,KAAK,WAAW;QAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IACtC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,SAAS,EAAE,CAAC;IACnB,SAAS,EAAE,CAAC;AACd,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,UAAU,EAAE,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,UAAU,EAAE,CAAC;QACf,iBAAiB,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,WAAW,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;IACf,CAAC;SAAM,CAAC;QACN,WAAW,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAChD,IAAI,GAAG,KAAK,OAAO;YAAE,OAAO;QAC5B,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACN,WAAW,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACxD,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;IAE1D,MAAM,OAAO,GAAG,CAAC,CAAa,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,CAAC,MAAM,YAAY,iBAAiB,CAAC;YAAE,OAAO;QACnD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;YAAE,OAAO;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,OAAO,GACX,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;YACrB,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK;YACtB,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;YACpB,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,OAAO;YAAE,qBAAqB,EAAE,CAAC;IACvC,CAAC,CAAC;IACF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,CAAC,CAAQ,EAAE,EAAE;QAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,CAAC,MAAM,YAAY,iBAAiB,CAAC;YAAE,OAAO;QACnD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,qBAAqB,EAAE,CAAC;IAC1B,CAAC,CAAC;IACF,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE9C,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAErD,eAAe,EAAE,CAAC;IAElB,OAAO,GAAG,EAAE;QACV,WAAW,EAAE,CAAC;QACd,QAAQ,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QAC3D,QAAQ,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAC7D,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAC1D,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared MutationObserver. Engines call `onElement(selector, handler)` to be
|
|
3
|
+
* notified when a matching element is present at start time **or** later
|
|
4
|
+
* inserted into the DOM (Webflow IX, CMS templates, custom elements). One
|
|
5
|
+
* observer for the whole library — not one per engine.
|
|
6
|
+
*
|
|
7
|
+
* `start()` returns the global teardown; `onElement()` returns a per-handler
|
|
8
|
+
* teardown so engines can clean up their own subscriptions in dispose().
|
|
9
|
+
*/
|
|
10
|
+
const subscriptions = [];
|
|
11
|
+
let observer = null;
|
|
12
|
+
export function onElement(selector, handler) {
|
|
13
|
+
const sub = { selector, handler };
|
|
14
|
+
subscriptions.push(sub);
|
|
15
|
+
document.querySelectorAll(selector).forEach(handler);
|
|
16
|
+
return () => {
|
|
17
|
+
const idx = subscriptions.indexOf(sub);
|
|
18
|
+
if (idx >= 0)
|
|
19
|
+
subscriptions.splice(idx, 1);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function startDomObserver() {
|
|
23
|
+
if (observer)
|
|
24
|
+
return () => { };
|
|
25
|
+
observer = new MutationObserver((mutations) => {
|
|
26
|
+
for (const m of mutations) {
|
|
27
|
+
m.addedNodes.forEach((node) => {
|
|
28
|
+
if (!(node instanceof Element))
|
|
29
|
+
return;
|
|
30
|
+
for (const sub of subscriptions) {
|
|
31
|
+
if (node.matches(sub.selector))
|
|
32
|
+
sub.handler(node);
|
|
33
|
+
node
|
|
34
|
+
.querySelectorAll(sub.selector)
|
|
35
|
+
.forEach((el) => sub.handler(el));
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
observer.observe(document.body, { childList: true, subtree: true });
|
|
41
|
+
return () => {
|
|
42
|
+
observer?.disconnect();
|
|
43
|
+
observer = null;
|
|
44
|
+
subscriptions.length = 0;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=dom-observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-observer.js","sourceRoot":"","sources":["../src/dom-observer.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,MAAM,aAAa,GAAmB,EAAE,CAAC;AACzC,IAAI,QAAQ,GAA4B,IAAI,CAAC;AAE7C,MAAM,UAAU,SAAS,CACvB,QAAgB,EAChB,OAAuB;IAEvB,MAAM,GAAG,GAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAChD,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,GAAG,EAAE;QACV,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,GAAG,IAAI,CAAC;YAAE,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,QAAQ;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAC9B,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,EAAE,EAAE;QAC5C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5B,IAAI,CAAC,CAAC,IAAI,YAAY,OAAO,CAAC;oBAAE,OAAO;gBACvC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;oBAChC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAClD,IAAI;yBACD,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;yBAC9B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,OAAO,GAAG,EAAE;QACV,QAAQ,EAAE,UAAU,EAAE,CAAC;QACvB,QAAQ,GAAG,IAAI,CAAC;QAChB,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { GgErrorEvent } from "./errors.js";
|
|
2
|
+
import type { Query } from "./queries.js";
|
|
3
|
+
import type { Action } from "./actions.js";
|
|
4
|
+
import type { FormAction } from "./form-actions.js";
|
|
5
|
+
/**
|
|
6
|
+
* The minimum surface every engine needs. Engines should depend on this (or a
|
|
7
|
+
* superset) instead of the full `App<TContext>` so they're easier to test and
|
|
8
|
+
* the dependency graph stays explicit.
|
|
9
|
+
*/
|
|
10
|
+
export type EngineCore<TContext> = {
|
|
11
|
+
context: TContext;
|
|
12
|
+
debug: boolean;
|
|
13
|
+
emitError: (event: GgErrorEvent) => void;
|
|
14
|
+
};
|
|
15
|
+
export type DataEngineDeps<TContext> = EngineCore<TContext> & {
|
|
16
|
+
queries: Record<string, Query<TContext>>;
|
|
17
|
+
};
|
|
18
|
+
export type ActionEngineDeps<TContext> = EngineCore<TContext> & {
|
|
19
|
+
actions: Record<string, Action<TContext>>;
|
|
20
|
+
};
|
|
21
|
+
export type FormActionEngineDeps<TContext> = EngineCore<TContext> & {
|
|
22
|
+
formActions: Record<string, FormAction<TContext>>;
|
|
23
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-deps.js","sourceRoot":"","sources":["../src/engine-deps.ts"],"names":[],"mappings":""}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emitted whenever a registered query, action, or form action throws — and
|
|
3
|
+
* for non-throwing failure modes the engines detect (missing handler, wrong
|
|
4
|
+
* return shape). Subscribe via `app.onError(handler)` to forward to Sentry,
|
|
5
|
+
* Datadog, or any other error tracker.
|
|
6
|
+
*/
|
|
7
|
+
export type GgErrorEvent = {
|
|
8
|
+
/** Engine label, e.g. "[gg-action]", "[gg-data]", "[gg-form-action]". */
|
|
9
|
+
prefix: string;
|
|
10
|
+
/** Handler id (the value of the gg-action / gg-data / gg-form-action attr). */
|
|
11
|
+
id: string;
|
|
12
|
+
/** The thrown error or a string describing the non-throw failure. */
|
|
13
|
+
error: unknown;
|
|
14
|
+
/** Engine-specific context: trigger element, form, params, etc. */
|
|
15
|
+
fields?: Record<string, unknown>;
|
|
16
|
+
};
|
|
17
|
+
export type ErrorHandler = (event: GgErrorEvent) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Internal helper that owns the subscriber list. Lives on the App instance.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createErrorBus(): {
|
|
22
|
+
subscribe: (handler: ErrorHandler) => () => void;
|
|
23
|
+
emit: (event: GgErrorEvent) => void;
|
|
24
|
+
clear: () => void;
|
|
25
|
+
};
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal helper that owns the subscriber list. Lives on the App instance.
|
|
3
|
+
*/
|
|
4
|
+
export function createErrorBus() {
|
|
5
|
+
const handlers = [];
|
|
6
|
+
return {
|
|
7
|
+
subscribe(handler) {
|
|
8
|
+
handlers.push(handler);
|
|
9
|
+
return () => {
|
|
10
|
+
const idx = handlers.indexOf(handler);
|
|
11
|
+
if (idx >= 0)
|
|
12
|
+
handlers.splice(idx, 1);
|
|
13
|
+
};
|
|
14
|
+
},
|
|
15
|
+
emit(event) {
|
|
16
|
+
handlers.forEach((h) => {
|
|
17
|
+
try {
|
|
18
|
+
h(event);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
console.error("[gg] onError handler threw:", err);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
clear() {
|
|
26
|
+
handlers.length = 0;
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,UAAU,cAAc;IAK5B,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,OAAO;QACL,SAAS,CAAC,OAAO;YACf,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,GAAG,EAAE;gBACV,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,GAAG,IAAI,CAAC;oBAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,KAAK;YACR,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrB,IAAI,CAAC;oBACH,CAAC,CAAC,KAAK,CAAC,CAAC;gBACX,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK;YACH,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
}): void;
|
|
1
|
+
import type { FormActionEngineDeps } from "./engine-deps.js";
|
|
2
|
+
export declare function initFormActionEngine<TContext>(deps: FormActionEngineDeps<TContext>): () => void;
|