@goodo/platform-plugin 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +48 -66
- package/dist/index.js.map +1 -1
- package/dist/manifest.cjs +1 -1
- package/dist/manifest.cjs.map +1 -1
- package/dist/manifest.d.ts +29 -3
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +33 -26
- package/dist/manifest.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/widget-sdk.d.ts +2 -7
- package/dist/widget-sdk.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("./communicator-DQZOTxOF.cjs");let d=null;function c(t){return d||(d=u.pong(t).catch(e=>{throw d=null,e})),d}function z(t){c().then(e=>e.sendRequest("widget_ready")).then(e=>{t(e)}).catch(e=>{console.error("Failed to initialize widget:",e)})}async function N(t,e){return await(await c()).sendRequest("emit_widget_event",{type:t,args:e})}async function C(t){return await(await c()).sendRequest("set_widget_personalization",t)}function E(t){let e=!1,i=null;return c().then(r=>{e||(i=r.registerHandler("widget_filter_change",a=>{t(a)}))}).catch(r=>{console.error("Failed to initialize communicator for filter change listener:",r)}),()=>{e=!0,i&&i()}}async function g(t){return await(await c()).sendRequest("fetch_node_data",t)}function P(t){async function e(n){return await g({...t,...n})}const i=new Set;let r=null,a=!1,s=null,l=null;async function _(){if(a||s)return;a=!0;const n=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).substring(2,9);r=n;try{const o=await c();if(l=o,i.size===0||r!==n)return;s=o.registerHandler("widget_data_source_update",m=>{(m==null?void 0:m.identity)===n&&i.forEach(w=>{try{w()}catch(y){console.error("Error in widget data source onChange callback:",y)}})}),await o.sendRequest("add_widget_data_source_listener",{identity:n,config:t})}catch(o){console.error("Failed to initialize communicator for data source listener:",o)}finally{a=!1,i.size===0&&r===n&&f()}}function f(){const n=r;r=null,a=!1,s&&(s(),s=null),l&&n&&l.sendRequest("remove_widget_data_source_listener",{identity:n}).catch(o=>{console.error("Failed to remove data source listener:",o)})}function h(n){return i.add(n),i.size===1&&_(),()=>{i.delete(n),i.size===0&&f()}}return{fetch:e,onChange:h}}exports.Communicator=u.Communicator;exports.PING_TOKEN=u.PING_TOKEN;exports.PONG_TOKEN=u.PONG_TOKEN;exports.pong=u.pong;exports.createDataSource=P;exports.emitWidgetEvent=N;exports.fetchNodeData=g;exports.onWidgetFilterChange=E;exports.onWidgetReady=z;exports.setWidgetPersonalization=C;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/widget-sdk.ts"],"sourcesContent":["import { Communicator, pong, OnPingOptions } from './communicator';\nimport { DataSourceConfig, NodeData, NodeDataRequestPayload, WidgetConfig } from './types';\n\nlet communicatorPromise: Promise<Communicator> | null = null;\n\n/**\n * Get or initialize the Communicator instance for the widget.\n * Caches the connection promise so that multiple calls reuse the same handshake.\n */\nfunction getCommunicator(options?: OnPingOptions): Promise<Communicator> {\n if (!communicatorPromise) {\n communicatorPromise = pong(options).catch((err) => {\n communicatorPromise = null;\n throw err;\n });\n }\n\n return communicatorPromise;\n}\n\n/**\n * Called when the widget is ready to receive configuration from the host.\n */\nexport function onWidgetReady(callback: (config: WidgetConfig) => void) {\n getCommunicator()\n .then((comm) => comm.sendRequest('widget_ready'))\n .then((config) => {\n callback(config);\n })\n .catch((err) => {\n console.error('Failed to initialize widget:', err);\n });\n}\n\n/**\n * Add a reactive data source listener on the host platform.\n * Returns an unsubscribe function.\n */\nexport function addDataSourceListener(config: DataSourceConfig, onChange: (value: any[]) => void): () => void {\n const identity =\n typeof crypto !== 'undefined' && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).substring(2, 9);\n\n let isCancelled = false;\n\n let unregisterHandler: (() => void) | null = null;\n\n let commInstance: Communicator | null = null;\n\n getCommunicator()\n .then((comm) => {\n commInstance = comm;\n\n if (isCancelled) {\n return;\n }\n\n unregisterHandler = comm.registerHandler('widget_data_source_update', (payload) => {\n if (payload?.identity === identity) {\n onChange(payload.data || []);\n }\n });\n\n comm.sendRequest('add_widget_data_source_listener', { identity, config }).catch((err) => {\n console.error('Failed to add data source listener:', err);\n });\n })\n .catch((err) => {\n console.error('Failed to initialize communicator for data source listener:', err);\n });\n\n return () => {\n isCancelled = true;\n\n if (unregisterHandler) {\n unregisterHandler();\n }\n\n if (commInstance) {\n commInstance.sendRequest('remove_widget_data_source_listener', { identity }).catch((err) => {\n console.error('Failed to remove data source listener:', err);\n });\n }\n };\n}\n\n/**\n * Emit a custom widget event to the host platform.\n */\nexport async function emitWidgetEvent(type: string, args?: Record<string, any>) {\n const comm = await getCommunicator();\n\n return await comm.sendRequest('emit_widget_event', { type, args });\n}\n\n/**\n * Update widget personalization state on the host platform.\n */\nexport async function setWidgetPersonalization(data: any) {\n const comm = await getCommunicator();\n\n return await comm.sendRequest('set_widget_personalization', data);\n}\n\n/**\n * Register a listener for widget filter changes from the host platform.\n * Returns an unsubscribe function.\n */\nexport function onWidgetFilterChange(callback: (condition: string) => void): () => void {\n let isCancelled = false;\n\n let unregisterHandler: (() => void) | null = null;\n\n getCommunicator()\n .then((comm) => {\n if (isCancelled) {\n return;\n }\n\n unregisterHandler = comm.registerHandler('widget_filter_change', (condition) => {\n callback(condition);\n });\n })\n .catch((err) => {\n console.error('Failed to initialize communicator for filter change listener:', err);\n });\n\n return () => {\n isCancelled = true;\n\n if (unregisterHandler) {\n unregisterHandler();\n }\n };\n}\n\nexport async function fetchNodeData(payload: NodeDataRequestPayload): Promise<NodeData> {\n const comm = await getCommunicator();\n\n return await comm.sendRequest('fetch_node_data', payload);\n}\n\nexport function createDataSource(config: Pick<NodeDataRequestPayload, 'node' | 'filterExpression'>) {\n async function fetch(payload?: Omit<NodeDataRequestPayload, 'node' | 'filterExpression'>) {\n return await fetchNodeData({\n ...config,\n ...payload,\n });\n }\n\n const callbacks = new Set<() => void>();\n let identity: string | null = null;\n let isConnecting = false;\n let unregisterHandler: (() => void) | null = null;\n let commInstance: Communicator | null = null;\n\n async function connect() {\n if (isConnecting || unregisterHandler) return;\n isConnecting = true;\n\n const currentIdentity =\n typeof crypto !== 'undefined' && crypto.randomUUID\n ? crypto.randomUUID()\n : Math.random().toString(36).substring(2, 9);\n identity = currentIdentity;\n\n try {\n const comm = await getCommunicator();\n commInstance = comm;\n\n // If all subscribers unsubscribed while connecting, abort\n if (callbacks.size === 0 || identity !== currentIdentity) {\n return;\n }\n\n unregisterHandler = comm.registerHandler('widget_data_source_update', (payload) => {\n if (payload?.identity !== currentIdentity) return;\n\n callbacks.forEach((cb) => {\n try {\n cb();\n } catch (err) {\n console.error('Error in widget data source onChange callback:', err);\n }\n });\n });\n\n await comm.sendRequest('add_widget_data_source_listener', { identity: currentIdentity, config });\n } catch (err) {\n console.error('Failed to initialize communicator for data source listener:', err);\n } finally {\n isConnecting = false;\n // In case subscribers dropped to 0 while add_widget_data_source_listener was in-flight\n if (callbacks.size === 0 && identity === currentIdentity) {\n disconnect();\n }\n }\n }\n\n function disconnect() {\n const activeIdentity = identity;\n identity = null;\n isConnecting = false;\n\n if (unregisterHandler) {\n unregisterHandler();\n unregisterHandler = null;\n }\n\n if (commInstance && activeIdentity) {\n commInstance.sendRequest('remove_widget_data_source_listener', { identity: activeIdentity }).catch((err) => {\n console.error('Failed to remove data source listener:', err);\n });\n }\n }\n\n function onChange(callback: () => void): () => void {\n callbacks.add(callback);\n\n if (callbacks.size === 1) {\n connect();\n }\n\n return () => {\n callbacks.delete(callback);\n\n if (callbacks.size === 0) {\n disconnect();\n }\n };\n }\n\n return {\n fetch,\n onChange,\n };\n}\n\n"],"names":["communicatorPromise","getCommunicator","options","pong","err","onWidgetReady","callback","comm","config","addDataSourceListener","onChange","identity","isCancelled","unregisterHandler","commInstance","payload","emitWidgetEvent","type","args","setWidgetPersonalization","data","onWidgetFilterChange","condition","fetchNodeData","createDataSource","fetch","callbacks","isConnecting","connect","currentIdentity","cb","disconnect","activeIdentity"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/widget-sdk.ts"],"sourcesContent":["import { Communicator, pong, OnPingOptions } from './communicator';\nimport { DataSourceConfig, NodeData, NodeDataRequestPayload, WidgetConfig, WidgetFilter } from './types';\n\nlet communicatorPromise: Promise<Communicator> | null = null;\n\n/**\n * Get or initialize the Communicator instance for the widget.\n * Caches the connection promise so that multiple calls reuse the same handshake.\n */\nfunction getCommunicator(options?: OnPingOptions): Promise<Communicator> {\n if (!communicatorPromise) {\n communicatorPromise = pong(options).catch((err) => {\n communicatorPromise = null;\n throw err;\n });\n }\n\n return communicatorPromise;\n}\n\n/**\n * Called when the widget is ready to receive configuration from the host.\n */\nexport function onWidgetReady(callback: (config: WidgetConfig) => void) {\n getCommunicator()\n .then((comm) => comm.sendRequest('widget_ready'))\n .then((config) => {\n callback(config);\n })\n .catch((err) => {\n console.error('Failed to initialize widget:', err);\n });\n}\n\n/**\n * Emit a custom widget event to the host platform.\n */\nexport async function emitWidgetEvent(type: string, args?: Record<string, any>) {\n const comm = await getCommunicator();\n\n return await comm.sendRequest('emit_widget_event', { type, args });\n}\n\n/**\n * Update widget personalization state on the host platform.\n */\nexport async function setWidgetPersonalization(data: any) {\n const comm = await getCommunicator();\n\n return await comm.sendRequest('set_widget_personalization', data);\n}\n\n/**\n * Register a listener for widget filter changes from the host platform.\n * Returns an unsubscribe function.\n */\nexport function onWidgetFilterChange(callback: (condition: WidgetFilter) => void): () => void {\n let isCancelled = false;\n\n let unregisterHandler: (() => void) | null = null;\n\n getCommunicator()\n .then((comm) => {\n if (isCancelled) {\n return;\n }\n\n unregisterHandler = comm.registerHandler('widget_filter_change', (condition) => {\n callback(condition);\n });\n })\n .catch((err) => {\n console.error('Failed to initialize communicator for filter change listener:', err);\n });\n\n return () => {\n isCancelled = true;\n\n if (unregisterHandler) {\n unregisterHandler();\n }\n };\n}\n\nexport async function fetchNodeData(payload: NodeDataRequestPayload): Promise<NodeData> {\n const comm = await getCommunicator();\n\n return await comm.sendRequest('fetch_node_data', payload);\n}\n\nexport function createDataSource(config: Pick<NodeDataRequestPayload, 'node' | 'filterExpression'>) {\n async function fetch(payload?: Omit<NodeDataRequestPayload, 'node' | 'filterExpression'>) {\n return await fetchNodeData({\n ...config,\n ...payload,\n });\n }\n\n const callbacks = new Set<() => void>();\n let identity: string | null = null;\n let isConnecting = false;\n let unregisterHandler: (() => void) | null = null;\n let commInstance: Communicator | null = null;\n\n async function connect() {\n if (isConnecting || unregisterHandler) return;\n isConnecting = true;\n\n const currentIdentity =\n typeof crypto !== 'undefined' && crypto.randomUUID\n ? crypto.randomUUID()\n : Math.random().toString(36).substring(2, 9);\n identity = currentIdentity;\n\n try {\n const comm = await getCommunicator();\n commInstance = comm;\n\n // If all subscribers unsubscribed while connecting, abort\n if (callbacks.size === 0 || identity !== currentIdentity) {\n return;\n }\n\n unregisterHandler = comm.registerHandler('widget_data_source_update', (payload) => {\n if (payload?.identity !== currentIdentity) return;\n\n callbacks.forEach((cb) => {\n try {\n cb();\n } catch (err) {\n console.error('Error in widget data source onChange callback:', err);\n }\n });\n });\n\n await comm.sendRequest('add_widget_data_source_listener', { identity: currentIdentity, config });\n } catch (err) {\n console.error('Failed to initialize communicator for data source listener:', err);\n } finally {\n isConnecting = false;\n // In case subscribers dropped to 0 while add_widget_data_source_listener was in-flight\n if (callbacks.size === 0 && identity === currentIdentity) {\n disconnect();\n }\n }\n }\n\n function disconnect() {\n const activeIdentity = identity;\n identity = null;\n isConnecting = false;\n\n if (unregisterHandler) {\n unregisterHandler();\n unregisterHandler = null;\n }\n\n if (commInstance && activeIdentity) {\n commInstance.sendRequest('remove_widget_data_source_listener', { identity: activeIdentity }).catch((err) => {\n console.error('Failed to remove data source listener:', err);\n });\n }\n }\n\n function onChange(callback: () => void): () => void {\n callbacks.add(callback);\n\n if (callbacks.size === 1) {\n connect();\n }\n\n return () => {\n callbacks.delete(callback);\n\n if (callbacks.size === 0) {\n disconnect();\n }\n };\n }\n\n return {\n fetch,\n onChange,\n };\n}\n\n"],"names":["communicatorPromise","getCommunicator","options","pong","err","onWidgetReady","callback","comm","config","emitWidgetEvent","type","args","setWidgetPersonalization","data","onWidgetFilterChange","isCancelled","unregisterHandler","condition","fetchNodeData","payload","createDataSource","fetch","callbacks","identity","isConnecting","commInstance","connect","currentIdentity","cb","disconnect","activeIdentity","onChange"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,98 +1,81 @@
|
|
|
1
1
|
import { b as w } from "./communicator-BF77R7Qs.js";
|
|
2
|
-
import { C as
|
|
3
|
-
let
|
|
4
|
-
function
|
|
5
|
-
return
|
|
6
|
-
throw
|
|
7
|
-
})),
|
|
2
|
+
import { C as F, P as N, a as P } from "./communicator-BF77R7Qs.js";
|
|
3
|
+
let u = null;
|
|
4
|
+
function c(t) {
|
|
5
|
+
return u || (u = w(t).catch((e) => {
|
|
6
|
+
throw u = null, e;
|
|
7
|
+
})), u;
|
|
8
8
|
}
|
|
9
9
|
function C(t) {
|
|
10
|
-
|
|
10
|
+
c().then((e) => e.sendRequest("widget_ready")).then((e) => {
|
|
11
11
|
t(e);
|
|
12
12
|
}).catch((e) => {
|
|
13
13
|
console.error("Failed to initialize widget:", e);
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
-
function I(t, e) {
|
|
17
|
-
const n = typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).substring(2, 9);
|
|
18
|
-
let i = !1, a = null, c = null;
|
|
19
|
-
return u().then((o) => {
|
|
20
|
-
c = o, !i && (a = o.registerHandler("widget_data_source_update", (s) => {
|
|
21
|
-
(s == null ? void 0 : s.identity) === n && e(s.data || []);
|
|
22
|
-
}), o.sendRequest("add_widget_data_source_listener", { identity: n, config: t }).catch((s) => {
|
|
23
|
-
console.error("Failed to add data source listener:", s);
|
|
24
|
-
}));
|
|
25
|
-
}).catch((o) => {
|
|
26
|
-
console.error("Failed to initialize communicator for data source listener:", o);
|
|
27
|
-
}), () => {
|
|
28
|
-
i = !0, a && a(), c && c.sendRequest("remove_widget_data_source_listener", { identity: n }).catch((o) => {
|
|
29
|
-
console.error("Failed to remove data source listener:", o);
|
|
30
|
-
});
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
16
|
async function R(t, e) {
|
|
34
|
-
return await (await
|
|
17
|
+
return await (await c()).sendRequest("emit_widget_event", { type: t, args: e });
|
|
35
18
|
}
|
|
36
|
-
async function
|
|
37
|
-
return await (await
|
|
19
|
+
async function p(t) {
|
|
20
|
+
return await (await c()).sendRequest("set_widget_personalization", t);
|
|
38
21
|
}
|
|
39
|
-
function
|
|
40
|
-
let e = !1,
|
|
41
|
-
return
|
|
42
|
-
e || (
|
|
22
|
+
function q(t) {
|
|
23
|
+
let e = !1, i = null;
|
|
24
|
+
return c().then((r) => {
|
|
25
|
+
e || (i = r.registerHandler("widget_filter_change", (a) => {
|
|
43
26
|
t(a);
|
|
44
27
|
}));
|
|
45
|
-
}).catch((
|
|
46
|
-
console.error("Failed to initialize communicator for filter change listener:",
|
|
28
|
+
}).catch((r) => {
|
|
29
|
+
console.error("Failed to initialize communicator for filter change listener:", r);
|
|
47
30
|
}), () => {
|
|
48
|
-
e = !0,
|
|
31
|
+
e = !0, i && i();
|
|
49
32
|
};
|
|
50
33
|
}
|
|
51
34
|
async function y(t) {
|
|
52
|
-
return await (await
|
|
35
|
+
return await (await c()).sendRequest("fetch_node_data", t);
|
|
53
36
|
}
|
|
54
|
-
function
|
|
55
|
-
async function e(
|
|
37
|
+
function I(t) {
|
|
38
|
+
async function e(n) {
|
|
56
39
|
return await y({
|
|
57
40
|
...t,
|
|
58
|
-
...
|
|
41
|
+
...n
|
|
59
42
|
});
|
|
60
43
|
}
|
|
61
|
-
const
|
|
62
|
-
let
|
|
63
|
-
async function
|
|
64
|
-
if (a ||
|
|
44
|
+
const i = /* @__PURE__ */ new Set();
|
|
45
|
+
let r = null, a = !1, s = null, l = null;
|
|
46
|
+
async function m() {
|
|
47
|
+
if (a || s) return;
|
|
65
48
|
a = !0;
|
|
66
|
-
const
|
|
67
|
-
|
|
49
|
+
const n = typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).substring(2, 9);
|
|
50
|
+
r = n;
|
|
68
51
|
try {
|
|
69
|
-
const
|
|
70
|
-
if (
|
|
52
|
+
const o = await c();
|
|
53
|
+
if (l = o, i.size === 0 || r !== n)
|
|
71
54
|
return;
|
|
72
|
-
|
|
73
|
-
(
|
|
55
|
+
s = o.registerHandler("widget_data_source_update", (d) => {
|
|
56
|
+
(d == null ? void 0 : d.identity) === n && i.forEach((_) => {
|
|
74
57
|
try {
|
|
75
58
|
_();
|
|
76
59
|
} catch (h) {
|
|
77
60
|
console.error("Error in widget data source onChange callback:", h);
|
|
78
61
|
}
|
|
79
62
|
});
|
|
80
|
-
}), await
|
|
81
|
-
} catch (
|
|
82
|
-
console.error("Failed to initialize communicator for data source listener:",
|
|
63
|
+
}), await o.sendRequest("add_widget_data_source_listener", { identity: n, config: t });
|
|
64
|
+
} catch (o) {
|
|
65
|
+
console.error("Failed to initialize communicator for data source listener:", o);
|
|
83
66
|
} finally {
|
|
84
|
-
a = !1,
|
|
67
|
+
a = !1, i.size === 0 && r === n && f();
|
|
85
68
|
}
|
|
86
69
|
}
|
|
87
|
-
function
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
console.error("Failed to remove data source listener:",
|
|
70
|
+
function f() {
|
|
71
|
+
const n = r;
|
|
72
|
+
r = null, a = !1, s && (s(), s = null), l && n && l.sendRequest("remove_widget_data_source_listener", { identity: n }).catch((o) => {
|
|
73
|
+
console.error("Failed to remove data source listener:", o);
|
|
91
74
|
});
|
|
92
75
|
}
|
|
93
|
-
function g(
|
|
94
|
-
return
|
|
95
|
-
|
|
76
|
+
function g(n) {
|
|
77
|
+
return i.add(n), i.size === 1 && m(), () => {
|
|
78
|
+
i.delete(n), i.size === 0 && f();
|
|
96
79
|
};
|
|
97
80
|
}
|
|
98
81
|
return {
|
|
@@ -101,16 +84,15 @@ function U(t) {
|
|
|
101
84
|
};
|
|
102
85
|
}
|
|
103
86
|
export {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
I as
|
|
108
|
-
U as createDataSource,
|
|
87
|
+
F as Communicator,
|
|
88
|
+
N as PING_TOKEN,
|
|
89
|
+
P as PONG_TOKEN,
|
|
90
|
+
I as createDataSource,
|
|
109
91
|
R as emitWidgetEvent,
|
|
110
92
|
y as fetchNodeData,
|
|
111
|
-
|
|
93
|
+
q as onWidgetFilterChange,
|
|
112
94
|
C as onWidgetReady,
|
|
113
95
|
w as pong,
|
|
114
|
-
|
|
96
|
+
p as setWidgetPersonalization
|
|
115
97
|
};
|
|
116
98
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/widget-sdk.ts"],"sourcesContent":["import { Communicator, pong, OnPingOptions } from './communicator';\nimport { DataSourceConfig, NodeData, NodeDataRequestPayload, WidgetConfig } from './types';\n\nlet communicatorPromise: Promise<Communicator> | null = null;\n\n/**\n * Get or initialize the Communicator instance for the widget.\n * Caches the connection promise so that multiple calls reuse the same handshake.\n */\nfunction getCommunicator(options?: OnPingOptions): Promise<Communicator> {\n if (!communicatorPromise) {\n communicatorPromise = pong(options).catch((err) => {\n communicatorPromise = null;\n throw err;\n });\n }\n\n return communicatorPromise;\n}\n\n/**\n * Called when the widget is ready to receive configuration from the host.\n */\nexport function onWidgetReady(callback: (config: WidgetConfig) => void) {\n getCommunicator()\n .then((comm) => comm.sendRequest('widget_ready'))\n .then((config) => {\n callback(config);\n })\n .catch((err) => {\n console.error('Failed to initialize widget:', err);\n });\n}\n\n/**\n * Add a reactive data source listener on the host platform.\n * Returns an unsubscribe function.\n */\nexport function addDataSourceListener(config: DataSourceConfig, onChange: (value: any[]) => void): () => void {\n const identity =\n typeof crypto !== 'undefined' && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).substring(2, 9);\n\n let isCancelled = false;\n\n let unregisterHandler: (() => void) | null = null;\n\n let commInstance: Communicator | null = null;\n\n getCommunicator()\n .then((comm) => {\n commInstance = comm;\n\n if (isCancelled) {\n return;\n }\n\n unregisterHandler = comm.registerHandler('widget_data_source_update', (payload) => {\n if (payload?.identity === identity) {\n onChange(payload.data || []);\n }\n });\n\n comm.sendRequest('add_widget_data_source_listener', { identity, config }).catch((err) => {\n console.error('Failed to add data source listener:', err);\n });\n })\n .catch((err) => {\n console.error('Failed to initialize communicator for data source listener:', err);\n });\n\n return () => {\n isCancelled = true;\n\n if (unregisterHandler) {\n unregisterHandler();\n }\n\n if (commInstance) {\n commInstance.sendRequest('remove_widget_data_source_listener', { identity }).catch((err) => {\n console.error('Failed to remove data source listener:', err);\n });\n }\n };\n}\n\n/**\n * Emit a custom widget event to the host platform.\n */\nexport async function emitWidgetEvent(type: string, args?: Record<string, any>) {\n const comm = await getCommunicator();\n\n return await comm.sendRequest('emit_widget_event', { type, args });\n}\n\n/**\n * Update widget personalization state on the host platform.\n */\nexport async function setWidgetPersonalization(data: any) {\n const comm = await getCommunicator();\n\n return await comm.sendRequest('set_widget_personalization', data);\n}\n\n/**\n * Register a listener for widget filter changes from the host platform.\n * Returns an unsubscribe function.\n */\nexport function onWidgetFilterChange(callback: (condition: string) => void): () => void {\n let isCancelled = false;\n\n let unregisterHandler: (() => void) | null = null;\n\n getCommunicator()\n .then((comm) => {\n if (isCancelled) {\n return;\n }\n\n unregisterHandler = comm.registerHandler('widget_filter_change', (condition) => {\n callback(condition);\n });\n })\n .catch((err) => {\n console.error('Failed to initialize communicator for filter change listener:', err);\n });\n\n return () => {\n isCancelled = true;\n\n if (unregisterHandler) {\n unregisterHandler();\n }\n };\n}\n\nexport async function fetchNodeData(payload: NodeDataRequestPayload): Promise<NodeData> {\n const comm = await getCommunicator();\n\n return await comm.sendRequest('fetch_node_data', payload);\n}\n\nexport function createDataSource(config: Pick<NodeDataRequestPayload, 'node' | 'filterExpression'>) {\n async function fetch(payload?: Omit<NodeDataRequestPayload, 'node' | 'filterExpression'>) {\n return await fetchNodeData({\n ...config,\n ...payload,\n });\n }\n\n const callbacks = new Set<() => void>();\n let identity: string | null = null;\n let isConnecting = false;\n let unregisterHandler: (() => void) | null = null;\n let commInstance: Communicator | null = null;\n\n async function connect() {\n if (isConnecting || unregisterHandler) return;\n isConnecting = true;\n\n const currentIdentity =\n typeof crypto !== 'undefined' && crypto.randomUUID\n ? crypto.randomUUID()\n : Math.random().toString(36).substring(2, 9);\n identity = currentIdentity;\n\n try {\n const comm = await getCommunicator();\n commInstance = comm;\n\n // If all subscribers unsubscribed while connecting, abort\n if (callbacks.size === 0 || identity !== currentIdentity) {\n return;\n }\n\n unregisterHandler = comm.registerHandler('widget_data_source_update', (payload) => {\n if (payload?.identity !== currentIdentity) return;\n\n callbacks.forEach((cb) => {\n try {\n cb();\n } catch (err) {\n console.error('Error in widget data source onChange callback:', err);\n }\n });\n });\n\n await comm.sendRequest('add_widget_data_source_listener', { identity: currentIdentity, config });\n } catch (err) {\n console.error('Failed to initialize communicator for data source listener:', err);\n } finally {\n isConnecting = false;\n // In case subscribers dropped to 0 while add_widget_data_source_listener was in-flight\n if (callbacks.size === 0 && identity === currentIdentity) {\n disconnect();\n }\n }\n }\n\n function disconnect() {\n const activeIdentity = identity;\n identity = null;\n isConnecting = false;\n\n if (unregisterHandler) {\n unregisterHandler();\n unregisterHandler = null;\n }\n\n if (commInstance && activeIdentity) {\n commInstance.sendRequest('remove_widget_data_source_listener', { identity: activeIdentity }).catch((err) => {\n console.error('Failed to remove data source listener:', err);\n });\n }\n }\n\n function onChange(callback: () => void): () => void {\n callbacks.add(callback);\n\n if (callbacks.size === 1) {\n connect();\n }\n\n return () => {\n callbacks.delete(callback);\n\n if (callbacks.size === 0) {\n disconnect();\n }\n };\n }\n\n return {\n fetch,\n onChange,\n };\n}\n\n"],"names":["communicatorPromise","getCommunicator","options","pong","err","onWidgetReady","callback","comm","config","addDataSourceListener","onChange","identity","isCancelled","unregisterHandler","commInstance","payload","emitWidgetEvent","type","args","setWidgetPersonalization","data","onWidgetFilterChange","condition","fetchNodeData","createDataSource","fetch","callbacks","isConnecting","connect","currentIdentity","cb","disconnect","activeIdentity"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/widget-sdk.ts"],"sourcesContent":["import { Communicator, pong, OnPingOptions } from './communicator';\nimport { DataSourceConfig, NodeData, NodeDataRequestPayload, WidgetConfig, WidgetFilter } from './types';\n\nlet communicatorPromise: Promise<Communicator> | null = null;\n\n/**\n * Get or initialize the Communicator instance for the widget.\n * Caches the connection promise so that multiple calls reuse the same handshake.\n */\nfunction getCommunicator(options?: OnPingOptions): Promise<Communicator> {\n if (!communicatorPromise) {\n communicatorPromise = pong(options).catch((err) => {\n communicatorPromise = null;\n throw err;\n });\n }\n\n return communicatorPromise;\n}\n\n/**\n * Called when the widget is ready to receive configuration from the host.\n */\nexport function onWidgetReady(callback: (config: WidgetConfig) => void) {\n getCommunicator()\n .then((comm) => comm.sendRequest('widget_ready'))\n .then((config) => {\n callback(config);\n })\n .catch((err) => {\n console.error('Failed to initialize widget:', err);\n });\n}\n\n/**\n * Emit a custom widget event to the host platform.\n */\nexport async function emitWidgetEvent(type: string, args?: Record<string, any>) {\n const comm = await getCommunicator();\n\n return await comm.sendRequest('emit_widget_event', { type, args });\n}\n\n/**\n * Update widget personalization state on the host platform.\n */\nexport async function setWidgetPersonalization(data: any) {\n const comm = await getCommunicator();\n\n return await comm.sendRequest('set_widget_personalization', data);\n}\n\n/**\n * Register a listener for widget filter changes from the host platform.\n * Returns an unsubscribe function.\n */\nexport function onWidgetFilterChange(callback: (condition: WidgetFilter) => void): () => void {\n let isCancelled = false;\n\n let unregisterHandler: (() => void) | null = null;\n\n getCommunicator()\n .then((comm) => {\n if (isCancelled) {\n return;\n }\n\n unregisterHandler = comm.registerHandler('widget_filter_change', (condition) => {\n callback(condition);\n });\n })\n .catch((err) => {\n console.error('Failed to initialize communicator for filter change listener:', err);\n });\n\n return () => {\n isCancelled = true;\n\n if (unregisterHandler) {\n unregisterHandler();\n }\n };\n}\n\nexport async function fetchNodeData(payload: NodeDataRequestPayload): Promise<NodeData> {\n const comm = await getCommunicator();\n\n return await comm.sendRequest('fetch_node_data', payload);\n}\n\nexport function createDataSource(config: Pick<NodeDataRequestPayload, 'node' | 'filterExpression'>) {\n async function fetch(payload?: Omit<NodeDataRequestPayload, 'node' | 'filterExpression'>) {\n return await fetchNodeData({\n ...config,\n ...payload,\n });\n }\n\n const callbacks = new Set<() => void>();\n let identity: string | null = null;\n let isConnecting = false;\n let unregisterHandler: (() => void) | null = null;\n let commInstance: Communicator | null = null;\n\n async function connect() {\n if (isConnecting || unregisterHandler) return;\n isConnecting = true;\n\n const currentIdentity =\n typeof crypto !== 'undefined' && crypto.randomUUID\n ? crypto.randomUUID()\n : Math.random().toString(36).substring(2, 9);\n identity = currentIdentity;\n\n try {\n const comm = await getCommunicator();\n commInstance = comm;\n\n // If all subscribers unsubscribed while connecting, abort\n if (callbacks.size === 0 || identity !== currentIdentity) {\n return;\n }\n\n unregisterHandler = comm.registerHandler('widget_data_source_update', (payload) => {\n if (payload?.identity !== currentIdentity) return;\n\n callbacks.forEach((cb) => {\n try {\n cb();\n } catch (err) {\n console.error('Error in widget data source onChange callback:', err);\n }\n });\n });\n\n await comm.sendRequest('add_widget_data_source_listener', { identity: currentIdentity, config });\n } catch (err) {\n console.error('Failed to initialize communicator for data source listener:', err);\n } finally {\n isConnecting = false;\n // In case subscribers dropped to 0 while add_widget_data_source_listener was in-flight\n if (callbacks.size === 0 && identity === currentIdentity) {\n disconnect();\n }\n }\n }\n\n function disconnect() {\n const activeIdentity = identity;\n identity = null;\n isConnecting = false;\n\n if (unregisterHandler) {\n unregisterHandler();\n unregisterHandler = null;\n }\n\n if (commInstance && activeIdentity) {\n commInstance.sendRequest('remove_widget_data_source_listener', { identity: activeIdentity }).catch((err) => {\n console.error('Failed to remove data source listener:', err);\n });\n }\n }\n\n function onChange(callback: () => void): () => void {\n callbacks.add(callback);\n\n if (callbacks.size === 1) {\n connect();\n }\n\n return () => {\n callbacks.delete(callback);\n\n if (callbacks.size === 0) {\n disconnect();\n }\n };\n }\n\n return {\n fetch,\n onChange,\n };\n}\n\n"],"names":["communicatorPromise","getCommunicator","options","pong","err","onWidgetReady","callback","comm","config","emitWidgetEvent","type","args","setWidgetPersonalization","data","onWidgetFilterChange","isCancelled","unregisterHandler","condition","fetchNodeData","payload","createDataSource","fetch","callbacks","identity","isConnecting","commInstance","connect","currentIdentity","cb","disconnect","activeIdentity","onChange"],"mappings":";;AAGA,IAAIA,IAAoD;AAMxD,SAASC,EAAgBC,GAAgD;AACvE,SAAKF,MACHA,IAAsBG,EAAKD,CAAO,EAAE,MAAM,CAACE,MAAQ;AACjD,UAAAJ,IAAsB,MAChBI;AAAA,EACR,CAAC,IAGIJ;AACT;AAKO,SAASK,EAAcC,GAA0C;AACtE,EAAAL,IACG,KAAK,CAACM,MAASA,EAAK,YAAY,cAAc,CAAC,EAC/C,KAAK,CAACC,MAAW;AAChB,IAAAF,EAASE,CAAM;AAAA,EACjB,CAAC,EACA,MAAM,CAACJ,MAAQ;AACd,YAAQ,MAAM,gCAAgCA,CAAG;AAAA,EACnD,CAAC;AACL;AAKA,eAAsBK,EAAgBC,GAAcC,GAA4B;AAG9E,SAAO,OAFM,MAAMV,EAAA,GAED,YAAY,qBAAqB,EAAE,MAAAS,GAAM,MAAAC,GAAM;AACnE;AAKA,eAAsBC,EAAyBC,GAAW;AAGxD,SAAO,OAFM,MAAMZ,EAAA,GAED,YAAY,8BAA8BY,CAAI;AAClE;AAMO,SAASC,EAAqBR,GAAyD;AAC5F,MAAIS,IAAc,IAEdC,IAAyC;AAE7C,SAAAf,EAAA,EACG,KAAK,CAACM,MAAS;AACd,IAAIQ,MAIJC,IAAoBT,EAAK,gBAAgB,wBAAwB,CAACU,MAAc;AAC9E,MAAAX,EAASW,CAAS;AAAA,IACpB,CAAC;AAAA,EACH,CAAC,EACA,MAAM,CAACb,MAAQ;AACd,YAAQ,MAAM,iEAAiEA,CAAG;AAAA,EACpF,CAAC,GAEI,MAAM;AACX,IAAAW,IAAc,IAEVC,KACFA,EAAA;AAAA,EAEJ;AACF;AAEA,eAAsBE,EAAcC,GAAoD;AAGtF,SAAO,OAFM,MAAMlB,EAAA,GAED,YAAY,mBAAmBkB,CAAO;AAC1D;AAEO,SAASC,EAAiBZ,GAAmE;AAClG,iBAAea,EAAMF,GAAqE;AACxF,WAAO,MAAMD,EAAc;AAAA,MACzB,GAAGV;AAAA,MACH,GAAGW;AAAA,IAAA,CACJ;AAAA,EACH;AAEA,QAAMG,wBAAgB,IAAA;AACtB,MAAIC,IAA0B,MAC1BC,IAAe,IACfR,IAAyC,MACzCS,IAAoC;AAExC,iBAAeC,IAAU;AACvB,QAAIF,KAAgBR,EAAmB;AACvC,IAAAQ,IAAe;AAEf,UAAMG,IACJ,OAAO,SAAW,OAAe,OAAO,aACpC,OAAO,WAAA,IACP,KAAK,SAAS,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC;AAC/C,IAAAJ,IAAWI;AAEX,QAAI;AACF,YAAMpB,IAAO,MAAMN,EAAA;AAInB,UAHAwB,IAAelB,GAGXe,EAAU,SAAS,KAAKC,MAAaI;AACvC;AAGF,MAAAX,IAAoBT,EAAK,gBAAgB,6BAA6B,CAACY,MAAY;AACjF,SAAIA,KAAA,gBAAAA,EAAS,cAAaQ,KAE1BL,EAAU,QAAQ,CAACM,MAAO;AACxB,cAAI;AACF,YAAAA,EAAA;AAAA,UACF,SAASxB,GAAK;AACZ,oBAAQ,MAAM,kDAAkDA,CAAG;AAAA,UACrE;AAAA,QACF,CAAC;AAAA,MACH,CAAC,GAED,MAAMG,EAAK,YAAY,mCAAmC,EAAE,UAAUoB,GAAiB,QAAAnB,GAAQ;AAAA,IACjG,SAASJ,GAAK;AACZ,cAAQ,MAAM,+DAA+DA,CAAG;AAAA,IAClF,UAAA;AACE,MAAAoB,IAAe,IAEXF,EAAU,SAAS,KAAKC,MAAaI,KACvCE,EAAA;AAAA,IAEJ;AAAA,EACF;AAEA,WAASA,IAAa;AACpB,UAAMC,IAAiBP;AACvB,IAAAA,IAAW,MACXC,IAAe,IAEXR,MACFA,EAAA,GACAA,IAAoB,OAGlBS,KAAgBK,KAClBL,EAAa,YAAY,sCAAsC,EAAE,UAAUK,GAAgB,EAAE,MAAM,CAAC1B,MAAQ;AAC1G,cAAQ,MAAM,0CAA0CA,CAAG;AAAA,IAC7D,CAAC;AAAA,EAEL;AAEA,WAAS2B,EAASzB,GAAkC;AAClD,WAAAgB,EAAU,IAAIhB,CAAQ,GAElBgB,EAAU,SAAS,KACrBI,EAAA,GAGK,MAAM;AACX,MAAAJ,EAAU,OAAOhB,CAAQ,GAErBgB,EAAU,SAAS,KACrBO,EAAA;AAAA,IAEJ;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAAR;AAAA,IACA,UAAAU;AAAA,EAAA;AAEJ;"}
|
package/dist/manifest.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("zod"),o=e.z.enum(["input","checkbox","color-picker","date","data-time-range","datetime","input-number","monaco-editor","radio","select","tree-select","time","textarea","switch","slider","select-cascader","data-node","data-node-fields","context-menu"]),r=e.z.object({type:o,group:
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("zod"),o=e.z.enum(["input","checkbox","color-picker","date","data-time-range","datetime","input-number","monaco-editor","radio","select","tree-select","time","textarea","switch","slider","select-cascader","data-node","data-node-fields","context-menu"]),r=e.z.enum(["base","custom","display","filters","value"]),c=e.z.object({type:o,group:r.optional(),label:e.z.string().min(1,"Property config label is required")}),s=e.z.object({name:e.z.string().min(1,"Property name is required"),defaultValue:e.z.any().optional().default(null),config:c.optional()}),d=e.z.enum(["SelectedObject","MultipleSelectedObject","CurrentMenu"]),i=e.z.lazy(()=>e.z.object({bindProp:e.z.string().optional(),name:e.z.string().optional(),generic:e.z.array(e.z.lazy(()=>i)).optional()})),m=e.z.object({name:d,type:i}),g=e.z.object({options:e.z.object({bindProp:e.z.string().min(1,"options.bindProp is required")})}),u=e.z.object({name:e.z.string().min(1,"Event name is required"),label:e.z.string().min(1,"Event label is required"),arguments:e.z.array(m).optional().default([]),contextmenu:g.optional()}),l=e.z.object({id:e.z.string().min(1,"'id' is required and cannot be empty"),name:e.z.string().min(1,"'name' is required and cannot be empty"),icon:e.z.string().optional(),entry:e.z.string().optional().default("dist"),props:e.z.array(s).optional().default([]),events:e.z.array(u).optional().default([])});function p(t){return t}function z(t){const n=l.safeParse(t);return n.success?{success:!0,data:n.data}:{success:!1,errors:n.error.issues.map(a=>({path:a.path.join(".")||"root",message:a.message}))}}exports.defineWidget=p;exports.validateWidgetManifest=z;exports.widgetArgumentTypeSchema=i;exports.widgetConfigGroupSchema=r;exports.widgetConfigTypeSchema=o;exports.widgetEventArgumentNameSchema=d;exports.widgetEventArgumentSchema=m;exports.widgetEventContextMenuSchema=g;exports.widgetEventSchema=u;exports.widgetManifestSchema=l;exports.widgetPropConfigSchema=c;exports.widgetPropSchema=s;
|
|
2
2
|
//# sourceMappingURL=manifest.cjs.map
|
package/dist/manifest.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.cjs","sources":["../src/manifest.ts"],"sourcesContent":["import { z } from 'zod';\n\n// ==========================================\n// 1. Props Configuration Schemas\n// ==========================================\n\nexport const widgetConfigTypeSchema = z.enum([\n 'input',\n 'checkbox',\n 'color-picker',\n 'date',\n 'data-time-range',\n 'datetime',\n 'input-number',\n 'monaco-editor',\n 'radio',\n 'select',\n 'tree-select',\n 'time',\n 'textarea',\n 'switch',\n 'slider',\n 'select-cascader',\n 'data-node',\n 'data-node-fields',\n 'context-menu',\n]);\n\nexport const widgetPropConfigSchema = z.object({\n type: widgetConfigTypeSchema,\n group:
|
|
1
|
+
{"version":3,"file":"manifest.cjs","sources":["../src/manifest.ts"],"sourcesContent":["import { z } from 'zod';\n\n// ==========================================\n// 1. Props Configuration Schemas\n// ==========================================\n\nexport const widgetConfigTypeSchema = z.enum([\n 'input',\n 'checkbox',\n 'color-picker',\n 'date',\n 'data-time-range',\n 'datetime',\n 'input-number',\n 'monaco-editor',\n 'radio',\n 'select',\n 'tree-select',\n 'time',\n 'textarea',\n 'switch',\n 'slider',\n 'select-cascader',\n 'data-node',\n 'data-node-fields',\n 'context-menu',\n]);\n\nexport const widgetConfigGroupSchema = z.enum([\n 'base',\n 'custom',\n 'display',\n 'filters',\n 'value',\n]);\n\nexport const widgetPropConfigSchema = z.object({\n type: widgetConfigTypeSchema,\n group: widgetConfigGroupSchema.optional(),\n label: z.string().min(1, 'Property config label is required'),\n});\n\nexport const widgetPropSchema = z.object({\n name: z.string().min(1, 'Property name is required'),\n defaultValue: z.any().optional().default(null),\n config: widgetPropConfigSchema.optional(),\n});\n\n// ==========================================\n// 2. Events & Arguments Configuration Schemas\n// ==========================================\n\n/**\n * Supported standard event argument names (3.3)\n */\nexport const widgetEventArgumentNameSchema = z.enum([\n 'SelectedObject',\n 'MultipleSelectedObject',\n 'CurrentMenu',\n]);\n\n/**\n * Recursive schema for event argument types (3.2):\n * 1. Entity type bound to property: { bindProp: 'dataSourceNode' }\n * 2. Generic collection type: { name: 'List', generic: [{ bindProp: 'dataSourceNode' }] }\n * 3. Fixed internal platform type: { name: 'CurrentMenu' }\n */\nexport type WidgetArgumentType = {\n bindProp?: string;\n name?: string;\n generic?: WidgetArgumentType[];\n};\n\nexport const widgetArgumentTypeSchema: z.ZodType<WidgetArgumentType> = z.lazy(() =>\n z.object({\n bindProp: z.string().optional(),\n name: z.string().optional(),\n generic: z.array(z.lazy(() => widgetArgumentTypeSchema)).optional(),\n })\n);\n\n/**\n * Event Argument configuration item (3.2)\n */\nexport const widgetEventArgumentSchema = z.object({\n name: widgetEventArgumentNameSchema,\n type: widgetArgumentTypeSchema,\n});\n\n/**\n * Context menu binding configuration for event (3.4)\n */\nexport const widgetEventContextMenuSchema = z.object({\n options: z.object({\n bindProp: z.string().min(1, 'options.bindProp is required'),\n }),\n});\n\n/**\n * Event configuration item (3.1)\n */\nexport const widgetEventSchema = z.object({\n name: z.string().min(1, 'Event name is required'),\n label: z.string().min(1, 'Event label is required'),\n arguments: z.array(widgetEventArgumentSchema).optional().default([]),\n contextmenu: widgetEventContextMenuSchema.optional(),\n});\n\n// ==========================================\n// 3. Widget Manifest Root Schema\n// ==========================================\n\nexport const widgetManifestSchema = z.object({\n id: z.string().min(1, \"'id' is required and cannot be empty\"),\n name: z.string().min(1, \"'name' is required and cannot be empty\"),\n icon: z.string().optional(),\n entry: z.string().optional().default('dist'),\n props: z.array(widgetPropSchema).optional().default([]),\n events: z.array(widgetEventSchema).optional().default([]),\n});\n\n// ==========================================\n// 4. Inferred TypeScript Types\n// ==========================================\n\nexport type WidgetConfigType = z.infer<typeof widgetConfigTypeSchema>;\nexport type WidgetConfigGroup = z.infer<typeof widgetConfigGroupSchema>;\nexport type WidgetPropConfig = z.infer<typeof widgetPropConfigSchema>;\nexport type WidgetProp = z.infer<typeof widgetPropSchema>;\n\nexport type WidgetEventArgumentName = z.infer<typeof widgetEventArgumentNameSchema>;\nexport type WidgetEventArgument = z.infer<typeof widgetEventArgumentSchema>;\nexport type WidgetEventContextMenu = z.infer<typeof widgetEventContextMenuSchema>;\nexport type WidgetEvent = z.infer<typeof widgetEventSchema>;\n\nexport type WidgetManifest = z.input<typeof widgetManifestSchema>;\nexport type ResolvedWidgetManifest = z.output<typeof widgetManifestSchema>;\n\n// ==========================================\n// 5. Helper & Validation Functions\n// ==========================================\n\n/**\n * Type-helper for defining widget manifest in `.goodo/manifest.ts`.\n * Provides full IDE autocomplete and compile-time type validation.\n */\nexport function defineWidget(config: WidgetManifest): WidgetManifest {\n return config;\n}\n\nexport interface ManifestValidationResult {\n success: boolean;\n data?: ResolvedWidgetManifest;\n errors?: Array<{ path: string; message: string }>;\n}\n\n/**\n * Validates raw manifest data using Zod schema for Node.js environments (e.g. CLI, backend).\n */\nexport function validateWidgetManifest(raw: unknown): ManifestValidationResult {\n const result = widgetManifestSchema.safeParse(raw);\n if (result.success) {\n return {\n success: true,\n data: result.data,\n };\n }\n\n return {\n success: false,\n errors: result.error.issues.map((issue) => ({\n path: issue.path.join('.') || 'root',\n message: issue.message,\n })),\n };\n}"],"names":["widgetConfigTypeSchema","z","widgetConfigGroupSchema","widgetPropConfigSchema","widgetPropSchema","widgetEventArgumentNameSchema","widgetArgumentTypeSchema","widgetEventArgumentSchema","widgetEventContextMenuSchema","widgetEventSchema","widgetManifestSchema","defineWidget","config","validateWidgetManifest","raw","result","issue"],"mappings":"uGAMaA,EAAyBC,EAAAA,EAAE,KAAK,CAC3C,QACA,WACA,eACA,OACA,kBACA,WACA,eACA,gBACA,QACA,SACA,cACA,OACA,WACA,SACA,SACA,kBACA,YACA,mBACA,cACF,CAAC,EAEYC,EAA0BD,EAAAA,EAAE,KAAK,CAC5C,OACA,SACA,UACA,UACA,OACF,CAAC,EAEYE,EAAyBF,EAAAA,EAAE,OAAO,CAC7C,KAAMD,EACN,MAAOE,EAAwB,SAAA,EAC/B,MAAOD,EAAAA,EAAE,OAAA,EAAS,IAAI,EAAG,mCAAmC,CAC9D,CAAC,EAEYG,EAAmBH,EAAAA,EAAE,OAAO,CACvC,KAAMA,EAAAA,EAAE,OAAA,EAAS,IAAI,EAAG,2BAA2B,EACnD,aAAcA,EAAAA,EAAE,IAAA,EAAM,SAAA,EAAW,QAAQ,IAAI,EAC7C,OAAQE,EAAuB,SAAA,CACjC,CAAC,EASYE,EAAgCJ,EAAAA,EAAE,KAAK,CAClD,iBACA,yBACA,aACF,CAAC,EAcYK,EAA0DL,EAAAA,EAAE,KAAK,IAC5EA,EAAAA,EAAE,OAAO,CACP,SAAUA,EAAAA,EAAE,OAAA,EAAS,SAAA,EACrB,KAAMA,EAAAA,EAAE,OAAA,EAAS,SAAA,EACjB,QAASA,EAAAA,EAAE,MAAMA,EAAAA,EAAE,KAAK,IAAMK,CAAwB,CAAC,EAAE,SAAA,CAAS,CACnE,CACH,EAKaC,EAA4BN,EAAAA,EAAE,OAAO,CAChD,KAAMI,EACN,KAAMC,CACR,CAAC,EAKYE,EAA+BP,EAAAA,EAAE,OAAO,CACnD,QAASA,EAAAA,EAAE,OAAO,CAChB,SAAUA,EAAAA,EAAE,OAAA,EAAS,IAAI,EAAG,8BAA8B,CAAA,CAC3D,CACH,CAAC,EAKYQ,EAAoBR,EAAAA,EAAE,OAAO,CACxC,KAAMA,EAAAA,EAAE,OAAA,EAAS,IAAI,EAAG,wBAAwB,EAChD,MAAOA,EAAAA,EAAE,OAAA,EAAS,IAAI,EAAG,yBAAyB,EAClD,UAAWA,EAAAA,EAAE,MAAMM,CAAyB,EAAE,SAAA,EAAW,QAAQ,EAAE,EACnE,YAAaC,EAA6B,SAAA,CAC5C,CAAC,EAMYE,EAAuBT,EAAAA,EAAE,OAAO,CAC3C,GAAIA,EAAAA,EAAE,OAAA,EAAS,IAAI,EAAG,sCAAsC,EAC5D,KAAMA,EAAAA,EAAE,OAAA,EAAS,IAAI,EAAG,wCAAwC,EAChE,KAAMA,EAAAA,EAAE,OAAA,EAAS,SAAA,EACjB,MAAOA,EAAAA,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,MAAM,EAC3C,MAAOA,EAAAA,EAAE,MAAMG,CAAgB,EAAE,SAAA,EAAW,QAAQ,EAAE,EACtD,OAAQH,EAAAA,EAAE,MAAMQ,CAAiB,EAAE,SAAA,EAAW,QAAQ,CAAA,CAAE,CAC1D,CAAC,EA2BM,SAASE,EAAaC,EAAwC,CACnE,OAAOA,CACT,CAWO,SAASC,EAAuBC,EAAwC,CAC7E,MAAMC,EAASL,EAAqB,UAAUI,CAAG,EACjD,OAAIC,EAAO,QACF,CACL,QAAS,GACT,KAAMA,EAAO,IAAA,EAIV,CACL,QAAS,GACT,OAAQA,EAAO,MAAM,OAAO,IAAKC,IAAW,CAC1C,KAAMA,EAAM,KAAK,KAAK,GAAG,GAAK,OAC9B,QAASA,EAAM,OAAA,EACf,CAAA,CAEN"}
|
package/dist/manifest.d.ts
CHANGED
|
@@ -20,6 +20,13 @@ export declare const widgetConfigTypeSchema: z.ZodEnum<{
|
|
|
20
20
|
"data-node-fields": "data-node-fields";
|
|
21
21
|
"context-menu": "context-menu";
|
|
22
22
|
}>;
|
|
23
|
+
export declare const widgetConfigGroupSchema: z.ZodEnum<{
|
|
24
|
+
base: "base";
|
|
25
|
+
custom: "custom";
|
|
26
|
+
display: "display";
|
|
27
|
+
filters: "filters";
|
|
28
|
+
value: "value";
|
|
29
|
+
}>;
|
|
23
30
|
export declare const widgetPropConfigSchema: z.ZodObject<{
|
|
24
31
|
type: z.ZodEnum<{
|
|
25
32
|
input: "input";
|
|
@@ -42,7 +49,13 @@ export declare const widgetPropConfigSchema: z.ZodObject<{
|
|
|
42
49
|
"data-node-fields": "data-node-fields";
|
|
43
50
|
"context-menu": "context-menu";
|
|
44
51
|
}>;
|
|
45
|
-
group: z.ZodOptional<z.
|
|
52
|
+
group: z.ZodOptional<z.ZodEnum<{
|
|
53
|
+
base: "base";
|
|
54
|
+
custom: "custom";
|
|
55
|
+
display: "display";
|
|
56
|
+
filters: "filters";
|
|
57
|
+
value: "value";
|
|
58
|
+
}>>;
|
|
46
59
|
label: z.ZodString;
|
|
47
60
|
}, z.core.$strip>;
|
|
48
61
|
export declare const widgetPropSchema: z.ZodObject<{
|
|
@@ -70,7 +83,13 @@ export declare const widgetPropSchema: z.ZodObject<{
|
|
|
70
83
|
"data-node-fields": "data-node-fields";
|
|
71
84
|
"context-menu": "context-menu";
|
|
72
85
|
}>;
|
|
73
|
-
group: z.ZodOptional<z.
|
|
86
|
+
group: z.ZodOptional<z.ZodEnum<{
|
|
87
|
+
base: "base";
|
|
88
|
+
custom: "custom";
|
|
89
|
+
display: "display";
|
|
90
|
+
filters: "filters";
|
|
91
|
+
value: "value";
|
|
92
|
+
}>>;
|
|
74
93
|
label: z.ZodString;
|
|
75
94
|
}, z.core.$strip>>;
|
|
76
95
|
}, z.core.$strip>;
|
|
@@ -163,7 +182,13 @@ export declare const widgetManifestSchema: z.ZodObject<{
|
|
|
163
182
|
"data-node-fields": "data-node-fields";
|
|
164
183
|
"context-menu": "context-menu";
|
|
165
184
|
}>;
|
|
166
|
-
group: z.ZodOptional<z.
|
|
185
|
+
group: z.ZodOptional<z.ZodEnum<{
|
|
186
|
+
base: "base";
|
|
187
|
+
custom: "custom";
|
|
188
|
+
display: "display";
|
|
189
|
+
filters: "filters";
|
|
190
|
+
value: "value";
|
|
191
|
+
}>>;
|
|
167
192
|
label: z.ZodString;
|
|
168
193
|
}, z.core.$strip>>;
|
|
169
194
|
}, z.core.$strip>>>>;
|
|
@@ -186,6 +211,7 @@ export declare const widgetManifestSchema: z.ZodObject<{
|
|
|
186
211
|
}, z.core.$strip>>>>;
|
|
187
212
|
}, z.core.$strip>;
|
|
188
213
|
export type WidgetConfigType = z.infer<typeof widgetConfigTypeSchema>;
|
|
214
|
+
export type WidgetConfigGroup = z.infer<typeof widgetConfigGroupSchema>;
|
|
189
215
|
export type WidgetPropConfig = z.infer<typeof widgetPropConfigSchema>;
|
|
190
216
|
export type WidgetProp = z.infer<typeof widgetPropSchema>;
|
|
191
217
|
export type WidgetEventArgumentName = z.infer<typeof widgetEventArgumentNameSchema>;
|
package/dist/manifest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;EAoBjC,CAAC;AAEH,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;EAoBjC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;EAMlC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAIjC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI3B,CAAC;AAMH;;GAEG;AACH,eAAO,MAAM,6BAA6B;;;;EAIxC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAMlE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;iBAGpC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;iBAIvC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;iBAK5B,CAAC;AAMH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO/B,CAAC;AAMH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAClF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAM3E;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAEnE;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,wBAAwB,CAgB7E"}
|
package/dist/manifest.js
CHANGED
|
@@ -19,15 +19,21 @@ const o = e.enum([
|
|
|
19
19
|
"data-node",
|
|
20
20
|
"data-node-fields",
|
|
21
21
|
"context-menu"
|
|
22
|
-
]), r = e.
|
|
22
|
+
]), r = e.enum([
|
|
23
|
+
"base",
|
|
24
|
+
"custom",
|
|
25
|
+
"display",
|
|
26
|
+
"filters",
|
|
27
|
+
"value"
|
|
28
|
+
]), s = e.object({
|
|
23
29
|
type: o,
|
|
24
|
-
group:
|
|
30
|
+
group: r.optional(),
|
|
25
31
|
label: e.string().min(1, "Property config label is required")
|
|
26
|
-
}),
|
|
32
|
+
}), c = e.object({
|
|
27
33
|
name: e.string().min(1, "Property name is required"),
|
|
28
34
|
defaultValue: e.any().optional().default(null),
|
|
29
|
-
config:
|
|
30
|
-
}),
|
|
35
|
+
config: s.optional()
|
|
36
|
+
}), d = e.enum([
|
|
31
37
|
"SelectedObject",
|
|
32
38
|
"MultipleSelectedObject",
|
|
33
39
|
"CurrentMenu"
|
|
@@ -37,31 +43,31 @@ const o = e.enum([
|
|
|
37
43
|
name: e.string().optional(),
|
|
38
44
|
generic: e.array(e.lazy(() => a)).optional()
|
|
39
45
|
})
|
|
40
|
-
),
|
|
41
|
-
name:
|
|
46
|
+
), m = e.object({
|
|
47
|
+
name: d,
|
|
42
48
|
type: a
|
|
43
|
-
}),
|
|
49
|
+
}), l = e.object({
|
|
44
50
|
options: e.object({
|
|
45
51
|
bindProp: e.string().min(1, "options.bindProp is required")
|
|
46
52
|
})
|
|
47
|
-
}),
|
|
53
|
+
}), u = e.object({
|
|
48
54
|
name: e.string().min(1, "Event name is required"),
|
|
49
55
|
label: e.string().min(1, "Event label is required"),
|
|
50
|
-
arguments: e.array(
|
|
51
|
-
contextmenu:
|
|
52
|
-
}),
|
|
56
|
+
arguments: e.array(m).optional().default([]),
|
|
57
|
+
contextmenu: l.optional()
|
|
58
|
+
}), p = e.object({
|
|
53
59
|
id: e.string().min(1, "'id' is required and cannot be empty"),
|
|
54
60
|
name: e.string().min(1, "'name' is required and cannot be empty"),
|
|
55
61
|
icon: e.string().optional(),
|
|
56
62
|
entry: e.string().optional().default("dist"),
|
|
57
|
-
props: e.array(
|
|
58
|
-
events: e.array(
|
|
63
|
+
props: e.array(c).optional().default([]),
|
|
64
|
+
events: e.array(u).optional().default([])
|
|
59
65
|
});
|
|
60
|
-
function
|
|
66
|
+
function b(t) {
|
|
61
67
|
return t;
|
|
62
68
|
}
|
|
63
|
-
function
|
|
64
|
-
const n =
|
|
69
|
+
function f(t) {
|
|
70
|
+
const n = p.safeParse(t);
|
|
65
71
|
return n.success ? {
|
|
66
72
|
success: !0,
|
|
67
73
|
data: n.data
|
|
@@ -74,16 +80,17 @@ function b(t) {
|
|
|
74
80
|
};
|
|
75
81
|
}
|
|
76
82
|
export {
|
|
77
|
-
|
|
78
|
-
|
|
83
|
+
b as defineWidget,
|
|
84
|
+
f as validateWidgetManifest,
|
|
79
85
|
a as widgetArgumentTypeSchema,
|
|
86
|
+
r as widgetConfigGroupSchema,
|
|
80
87
|
o as widgetConfigTypeSchema,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
d as widgetEventArgumentNameSchema,
|
|
89
|
+
m as widgetEventArgumentSchema,
|
|
90
|
+
l as widgetEventContextMenuSchema,
|
|
91
|
+
u as widgetEventSchema,
|
|
92
|
+
p as widgetManifestSchema,
|
|
93
|
+
s as widgetPropConfigSchema,
|
|
94
|
+
c as widgetPropSchema
|
|
88
95
|
};
|
|
89
96
|
//# sourceMappingURL=manifest.js.map
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sources":["../src/manifest.ts"],"sourcesContent":["import { z } from 'zod';\n\n// ==========================================\n// 1. Props Configuration Schemas\n// ==========================================\n\nexport const widgetConfigTypeSchema = z.enum([\n 'input',\n 'checkbox',\n 'color-picker',\n 'date',\n 'data-time-range',\n 'datetime',\n 'input-number',\n 'monaco-editor',\n 'radio',\n 'select',\n 'tree-select',\n 'time',\n 'textarea',\n 'switch',\n 'slider',\n 'select-cascader',\n 'data-node',\n 'data-node-fields',\n 'context-menu',\n]);\n\nexport const widgetPropConfigSchema = z.object({\n type: widgetConfigTypeSchema,\n group:
|
|
1
|
+
{"version":3,"file":"manifest.js","sources":["../src/manifest.ts"],"sourcesContent":["import { z } from 'zod';\n\n// ==========================================\n// 1. Props Configuration Schemas\n// ==========================================\n\nexport const widgetConfigTypeSchema = z.enum([\n 'input',\n 'checkbox',\n 'color-picker',\n 'date',\n 'data-time-range',\n 'datetime',\n 'input-number',\n 'monaco-editor',\n 'radio',\n 'select',\n 'tree-select',\n 'time',\n 'textarea',\n 'switch',\n 'slider',\n 'select-cascader',\n 'data-node',\n 'data-node-fields',\n 'context-menu',\n]);\n\nexport const widgetConfigGroupSchema = z.enum([\n 'base',\n 'custom',\n 'display',\n 'filters',\n 'value',\n]);\n\nexport const widgetPropConfigSchema = z.object({\n type: widgetConfigTypeSchema,\n group: widgetConfigGroupSchema.optional(),\n label: z.string().min(1, 'Property config label is required'),\n});\n\nexport const widgetPropSchema = z.object({\n name: z.string().min(1, 'Property name is required'),\n defaultValue: z.any().optional().default(null),\n config: widgetPropConfigSchema.optional(),\n});\n\n// ==========================================\n// 2. Events & Arguments Configuration Schemas\n// ==========================================\n\n/**\n * Supported standard event argument names (3.3)\n */\nexport const widgetEventArgumentNameSchema = z.enum([\n 'SelectedObject',\n 'MultipleSelectedObject',\n 'CurrentMenu',\n]);\n\n/**\n * Recursive schema for event argument types (3.2):\n * 1. Entity type bound to property: { bindProp: 'dataSourceNode' }\n * 2. Generic collection type: { name: 'List', generic: [{ bindProp: 'dataSourceNode' }] }\n * 3. Fixed internal platform type: { name: 'CurrentMenu' }\n */\nexport type WidgetArgumentType = {\n bindProp?: string;\n name?: string;\n generic?: WidgetArgumentType[];\n};\n\nexport const widgetArgumentTypeSchema: z.ZodType<WidgetArgumentType> = z.lazy(() =>\n z.object({\n bindProp: z.string().optional(),\n name: z.string().optional(),\n generic: z.array(z.lazy(() => widgetArgumentTypeSchema)).optional(),\n })\n);\n\n/**\n * Event Argument configuration item (3.2)\n */\nexport const widgetEventArgumentSchema = z.object({\n name: widgetEventArgumentNameSchema,\n type: widgetArgumentTypeSchema,\n});\n\n/**\n * Context menu binding configuration for event (3.4)\n */\nexport const widgetEventContextMenuSchema = z.object({\n options: z.object({\n bindProp: z.string().min(1, 'options.bindProp is required'),\n }),\n});\n\n/**\n * Event configuration item (3.1)\n */\nexport const widgetEventSchema = z.object({\n name: z.string().min(1, 'Event name is required'),\n label: z.string().min(1, 'Event label is required'),\n arguments: z.array(widgetEventArgumentSchema).optional().default([]),\n contextmenu: widgetEventContextMenuSchema.optional(),\n});\n\n// ==========================================\n// 3. Widget Manifest Root Schema\n// ==========================================\n\nexport const widgetManifestSchema = z.object({\n id: z.string().min(1, \"'id' is required and cannot be empty\"),\n name: z.string().min(1, \"'name' is required and cannot be empty\"),\n icon: z.string().optional(),\n entry: z.string().optional().default('dist'),\n props: z.array(widgetPropSchema).optional().default([]),\n events: z.array(widgetEventSchema).optional().default([]),\n});\n\n// ==========================================\n// 4. Inferred TypeScript Types\n// ==========================================\n\nexport type WidgetConfigType = z.infer<typeof widgetConfigTypeSchema>;\nexport type WidgetConfigGroup = z.infer<typeof widgetConfigGroupSchema>;\nexport type WidgetPropConfig = z.infer<typeof widgetPropConfigSchema>;\nexport type WidgetProp = z.infer<typeof widgetPropSchema>;\n\nexport type WidgetEventArgumentName = z.infer<typeof widgetEventArgumentNameSchema>;\nexport type WidgetEventArgument = z.infer<typeof widgetEventArgumentSchema>;\nexport type WidgetEventContextMenu = z.infer<typeof widgetEventContextMenuSchema>;\nexport type WidgetEvent = z.infer<typeof widgetEventSchema>;\n\nexport type WidgetManifest = z.input<typeof widgetManifestSchema>;\nexport type ResolvedWidgetManifest = z.output<typeof widgetManifestSchema>;\n\n// ==========================================\n// 5. Helper & Validation Functions\n// ==========================================\n\n/**\n * Type-helper for defining widget manifest in `.goodo/manifest.ts`.\n * Provides full IDE autocomplete and compile-time type validation.\n */\nexport function defineWidget(config: WidgetManifest): WidgetManifest {\n return config;\n}\n\nexport interface ManifestValidationResult {\n success: boolean;\n data?: ResolvedWidgetManifest;\n errors?: Array<{ path: string; message: string }>;\n}\n\n/**\n * Validates raw manifest data using Zod schema for Node.js environments (e.g. CLI, backend).\n */\nexport function validateWidgetManifest(raw: unknown): ManifestValidationResult {\n const result = widgetManifestSchema.safeParse(raw);\n if (result.success) {\n return {\n success: true,\n data: result.data,\n };\n }\n\n return {\n success: false,\n errors: result.error.issues.map((issue) => ({\n path: issue.path.join('.') || 'root',\n message: issue.message,\n })),\n };\n}"],"names":["widgetConfigTypeSchema","z","widgetConfigGroupSchema","widgetPropConfigSchema","widgetPropSchema","widgetEventArgumentNameSchema","widgetArgumentTypeSchema","widgetEventArgumentSchema","widgetEventContextMenuSchema","widgetEventSchema","widgetManifestSchema","defineWidget","config","validateWidgetManifest","raw","result","issue"],"mappings":";AAMO,MAAMA,IAAyBC,EAAE,KAAK;AAAA,EAC3C;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,CAAC,GAEYC,IAA0BD,EAAE,KAAK;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GAEYE,IAAyBF,EAAE,OAAO;AAAA,EAC7C,MAAMD;AAAA,EACN,OAAOE,EAAwB,SAAA;AAAA,EAC/B,OAAOD,EAAE,OAAA,EAAS,IAAI,GAAG,mCAAmC;AAC9D,CAAC,GAEYG,IAAmBH,EAAE,OAAO;AAAA,EACvC,MAAMA,EAAE,OAAA,EAAS,IAAI,GAAG,2BAA2B;AAAA,EACnD,cAAcA,EAAE,IAAA,EAAM,SAAA,EAAW,QAAQ,IAAI;AAAA,EAC7C,QAAQE,EAAuB,SAAA;AACjC,CAAC,GASYE,IAAgCJ,EAAE,KAAK;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AACF,CAAC,GAcYK,IAA0DL,EAAE;AAAA,EAAK,MAC5EA,EAAE,OAAO;AAAA,IACP,UAAUA,EAAE,OAAA,EAAS,SAAA;AAAA,IACrB,MAAMA,EAAE,OAAA,EAAS,SAAA;AAAA,IACjB,SAASA,EAAE,MAAMA,EAAE,KAAK,MAAMK,CAAwB,CAAC,EAAE,SAAA;AAAA,EAAS,CACnE;AACH,GAKaC,IAA4BN,EAAE,OAAO;AAAA,EAChD,MAAMI;AAAA,EACN,MAAMC;AACR,CAAC,GAKYE,IAA+BP,EAAE,OAAO;AAAA,EACnD,SAASA,EAAE,OAAO;AAAA,IAChB,UAAUA,EAAE,OAAA,EAAS,IAAI,GAAG,8BAA8B;AAAA,EAAA,CAC3D;AACH,CAAC,GAKYQ,IAAoBR,EAAE,OAAO;AAAA,EACxC,MAAMA,EAAE,OAAA,EAAS,IAAI,GAAG,wBAAwB;AAAA,EAChD,OAAOA,EAAE,OAAA,EAAS,IAAI,GAAG,yBAAyB;AAAA,EAClD,WAAWA,EAAE,MAAMM,CAAyB,EAAE,SAAA,EAAW,QAAQ,EAAE;AAAA,EACnE,aAAaC,EAA6B,SAAA;AAC5C,CAAC,GAMYE,IAAuBT,EAAE,OAAO;AAAA,EAC3C,IAAIA,EAAE,OAAA,EAAS,IAAI,GAAG,sCAAsC;AAAA,EAC5D,MAAMA,EAAE,OAAA,EAAS,IAAI,GAAG,wCAAwC;AAAA,EAChE,MAAMA,EAAE,OAAA,EAAS,SAAA;AAAA,EACjB,OAAOA,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,MAAM;AAAA,EAC3C,OAAOA,EAAE,MAAMG,CAAgB,EAAE,SAAA,EAAW,QAAQ,EAAE;AAAA,EACtD,QAAQH,EAAE,MAAMQ,CAAiB,EAAE,SAAA,EAAW,QAAQ,CAAA,CAAE;AAC1D,CAAC;AA2BM,SAASE,EAAaC,GAAwC;AACnE,SAAOA;AACT;AAWO,SAASC,EAAuBC,GAAwC;AAC7E,QAAMC,IAASL,EAAqB,UAAUI,CAAG;AACjD,SAAIC,EAAO,UACF;AAAA,IACL,SAAS;AAAA,IACT,MAAMA,EAAO;AAAA,EAAA,IAIV;AAAA,IACL,SAAS;AAAA,IACT,QAAQA,EAAO,MAAM,OAAO,IAAI,CAACC,OAAW;AAAA,MAC1C,MAAMA,EAAM,KAAK,KAAK,GAAG,KAAK;AAAA,MAC9B,SAASA,EAAM;AAAA,IAAA,EACf;AAAA,EAAA;AAEN;"}
|
package/dist/types.d.ts
CHANGED
|
@@ -53,7 +53,8 @@ export interface ActionMap {
|
|
|
53
53
|
}>;
|
|
54
54
|
}) => void;
|
|
55
55
|
set_widget_personalization: (payload: any) => void;
|
|
56
|
-
widget_filter_change: (payload:
|
|
56
|
+
widget_filter_change: (payload: WidgetFilter) => void;
|
|
57
57
|
fetch_node_data: (payload: NodeDataRequestPayload) => NodeData;
|
|
58
58
|
}
|
|
59
|
+
export type WidgetFilter = Record<string, string>;
|
|
59
60
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,UAAU,CAAC,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,CAAC;CACb;AAED,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,MAAM,SAAS,GAAG,MAAM,SAAS;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC;IACV,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,YAAY,CAAC;IACjC,yBAAyB,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IACjF,+BAA+B,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5I,kCAAkC,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5E,iBAAiB,EAAE,CAAC,OAAO,EAAE;QAC3B,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CACX,MAAM,EACN;YACE,IAAI,EAAE,GAAG,CAAC;YACV,QAAQ,EAAE,MAAM,CAAC;SAClB,CACF,CAAC;KACH,KAAK,IAAI,CAAC;IACX,0BAA0B,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IACnD,oBAAoB,EAAE,CAAC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,UAAU,CAAC,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,CAAC;CACb;AAED,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,MAAM,SAAS,GAAG,MAAM,SAAS;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC;IACV,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,YAAY,CAAC;IACjC,yBAAyB,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IACjF,+BAA+B,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5I,kCAAkC,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5E,iBAAiB,EAAE,CAAC,OAAO,EAAE;QAC3B,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CACX,MAAM,EACN;YACE,IAAI,EAAE,GAAG,CAAC;YACV,QAAQ,EAAE,MAAM,CAAC;SAClB,CACF,CAAC;KACH,KAAK,IAAI,CAAC;IACX,0BAA0B,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IACnD,oBAAoB,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IACtD,eAAe,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,QAAQ,CAAC;CAChE;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA"}
|
package/dist/widget-sdk.d.ts
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NodeData, NodeDataRequestPayload, WidgetConfig, WidgetFilter } from './types';
|
|
2
2
|
/**
|
|
3
3
|
* Called when the widget is ready to receive configuration from the host.
|
|
4
4
|
*/
|
|
5
5
|
export declare function onWidgetReady(callback: (config: WidgetConfig) => void): void;
|
|
6
|
-
/**
|
|
7
|
-
* Add a reactive data source listener on the host platform.
|
|
8
|
-
* Returns an unsubscribe function.
|
|
9
|
-
*/
|
|
10
|
-
export declare function addDataSourceListener(config: DataSourceConfig, onChange: (value: any[]) => void): () => void;
|
|
11
6
|
/**
|
|
12
7
|
* Emit a custom widget event to the host platform.
|
|
13
8
|
*/
|
|
@@ -20,7 +15,7 @@ export declare function setWidgetPersonalization(data: any): Promise<void>;
|
|
|
20
15
|
* Register a listener for widget filter changes from the host platform.
|
|
21
16
|
* Returns an unsubscribe function.
|
|
22
17
|
*/
|
|
23
|
-
export declare function onWidgetFilterChange(callback: (condition:
|
|
18
|
+
export declare function onWidgetFilterChange(callback: (condition: WidgetFilter) => void): () => void;
|
|
24
19
|
export declare function fetchNodeData(payload: NodeDataRequestPayload): Promise<NodeData>;
|
|
25
20
|
export declare function createDataSource(config: Pick<NodeDataRequestPayload, 'node' | 'filterExpression'>): {
|
|
26
21
|
fetch: (payload?: Omit<NodeDataRequestPayload, "node" | "filterExpression">) => Promise<NodeData>;
|
package/dist/widget-sdk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-sdk.d.ts","sourceRoot":"","sources":["../src/widget-sdk.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"widget-sdk.d.ts","sourceRoot":"","sources":["../src/widget-sdk.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,QAAQ,EAAE,sBAAsB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAmBzG;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,QASrE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,iBAI7E;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,GAAG,iBAIvD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI,CA0B5F;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAItF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,GAAG,kBAAkB,CAAC;sBACjE,IAAI,CAAC,sBAAsB,EAAE,MAAM,GAAG,kBAAkB,CAAC;yBAyE5D,MAAM,IAAI,KAAG,MAAM,IAAI;EAoBpD"}
|