@sparqjs/plugin-sdk 0.1.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.
Files changed (69) hide show
  1. package/dist/bridge/index.d.ts +4 -0
  2. package/dist/bridge/index.d.ts.map +1 -0
  3. package/dist/bridge/index.js +3 -0
  4. package/dist/bridge/index.js.map +1 -0
  5. package/dist/bridge/payload.d.ts +2 -0
  6. package/dist/bridge/payload.d.ts.map +1 -0
  7. package/dist/bridge/payload.js +38 -0
  8. package/dist/bridge/payload.js.map +1 -0
  9. package/dist/bridge/plugin-path.d.ts +2 -0
  10. package/dist/bridge/plugin-path.d.ts.map +1 -0
  11. package/dist/bridge/plugin-path.js +27 -0
  12. package/dist/bridge/plugin-path.js.map +1 -0
  13. package/dist/bridge/types.d.ts +81 -0
  14. package/dist/bridge/types.d.ts.map +1 -0
  15. package/dist/bridge/types.js +72 -0
  16. package/dist/bridge/types.js.map +1 -0
  17. package/dist/client/client.d.ts +3 -0
  18. package/dist/client/client.d.ts.map +1 -0
  19. package/dist/client/client.js +317 -0
  20. package/dist/client/client.js.map +1 -0
  21. package/dist/client/index.d.ts +3 -0
  22. package/dist/client/index.d.ts.map +1 -0
  23. package/dist/client/index.js +2 -0
  24. package/dist/client/index.js.map +1 -0
  25. package/dist/client/types.d.ts +183 -0
  26. package/dist/client/types.d.ts.map +1 -0
  27. package/dist/client/types.js +2 -0
  28. package/dist/client/types.js.map +1 -0
  29. package/dist/host/entry.d.ts +4 -0
  30. package/dist/host/entry.d.ts.map +1 -0
  31. package/dist/host/entry.js +102 -0
  32. package/dist/host/entry.js.map +1 -0
  33. package/dist/host/host.d.ts +33 -0
  34. package/dist/host/host.d.ts.map +1 -0
  35. package/dist/host/host.js +434 -0
  36. package/dist/host/host.js.map +1 -0
  37. package/dist/host/index.d.ts +5 -0
  38. package/dist/host/index.d.ts.map +1 -0
  39. package/dist/host/index.js +3 -0
  40. package/dist/host/index.js.map +1 -0
  41. package/dist/host/types.d.ts +76 -0
  42. package/dist/host/types.d.ts.map +1 -0
  43. package/dist/host/types.js +2 -0
  44. package/dist/host/types.js.map +1 -0
  45. package/dist/index.d.ts +4 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +4 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/runtime/index.d.ts +628 -0
  50. package/dist/runtime/index.d.ts.map +1 -0
  51. package/dist/runtime/index.js +30 -0
  52. package/dist/runtime/index.js.map +1 -0
  53. package/dist/testing/index.d.ts +3 -0
  54. package/dist/testing/index.d.ts.map +1 -0
  55. package/dist/testing/index.js +50 -0
  56. package/dist/testing/index.js.map +1 -0
  57. package/dist/vue/index.d.ts +22 -0
  58. package/dist/vue/index.d.ts.map +1 -0
  59. package/dist/vue/index.js +93 -0
  60. package/dist/vue/index.js.map +1 -0
  61. package/dist/vue/overlay.d.ts +6 -0
  62. package/dist/vue/overlay.d.ts.map +1 -0
  63. package/dist/vue/overlay.js +21 -0
  64. package/dist/vue/overlay.js.map +1 -0
  65. package/dist/vue/runtime-state.d.ts +9 -0
  66. package/dist/vue/runtime-state.d.ts.map +1 -0
  67. package/dist/vue/runtime-state.js +20 -0
  68. package/dist/vue/runtime-state.js.map +1 -0
  69. package/package.json +52 -0
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @packageDocumentation
3
+ *
4
+ * `@sparqjs/plugin-sdk/runtime` 定义可信 Frontend Module 与宿主之间的公开契约。
5
+ *
6
+ * 插件只能依赖本包和 Host API,不应导入 Admin、Schema Renderer 或 UI 适配器的内部实现。
7
+ * Host API 用于稳定调用边界和生命周期管理,不是 JavaScript 安全沙箱;模块仍与 Admin 运行在
8
+ * 同一个浏览器上下文中,所有后端请求必须继续执行权限校验。
9
+ */
10
+ /**
11
+ * 根据检查结果生成发布输入。
12
+ *
13
+ * 不需要审批时只返回幂等键;需要审批时使用检查摘要申请令牌,避免调用方遗漏
14
+ * `expectedChecksum` 与 `approvalToken` 的配对关系。
15
+ */
16
+ export async function prepareDesignerDraftPublish(check, approve, idempotencyKey) {
17
+ if (!check.requiresApproval)
18
+ return { idempotencyKey };
19
+ const approval = await approve({ expectedChecksum: check.checksum });
20
+ return { approvalToken: approval.token, idempotencyKey };
21
+ }
22
+ /**
23
+ * 声明 Frontend Module 默认导出并保留完整类型推导。
24
+ *
25
+ * 该函数不执行注册,也不产生全局副作用;真正激活发生在宿主 Loader 调用工厂时。
26
+ */
27
+ export function defineFrontendModule(factory) {
28
+ return factory;
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiLH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC7C,KAAyB,EACzB,OAA8E,EAC9E,cAAsB;IAEtB,IAAI,CAAC,KAAK,CAAC,gBAAgB;QAAE,OAAO,EAAE,cAAc,EAAE,CAAA;IACtD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IACpE,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,CAAA;AAC5D,CAAC;AAuaD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IAC/D,OAAO,OAAO,CAAA;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SparqPluginContext } from '../client/index.js';
2
+ export declare function createSparqPluginContextFixture(overrides?: Partial<SparqPluginContext>): SparqPluginContext;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE5D,wBAAgB,+BAA+B,CAAC,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAAG,kBAAkB,CAgD/G"}
@@ -0,0 +1,50 @@
1
+ import { SPARQ_BRIDGE_VERSION } from '../bridge/index.js';
2
+ export function createSparqPluginContextFixture(overrides = {}) {
3
+ const features = [
4
+ 'context',
5
+ 'surface.lifecycle',
6
+ 'feedback.notify',
7
+ 'feedback.confirm',
8
+ 'navigation.openResource',
9
+ 'surface.setTitle',
10
+ ];
11
+ return {
12
+ bridge: {
13
+ version: SPARQ_BRIDGE_VERSION,
14
+ surfaceId: 'example:admin',
15
+ features,
16
+ },
17
+ app: {
18
+ title: 'Sparq',
19
+ environment: 'test',
20
+ },
21
+ user: {
22
+ id: 'test-user',
23
+ name: 'Test User',
24
+ role: 'tester',
25
+ },
26
+ plugin: {
27
+ code: 'example',
28
+ entry: 'admin',
29
+ title: 'Example',
30
+ },
31
+ surface: {
32
+ id: 'example:admin',
33
+ type: 'page',
34
+ title: 'Example',
35
+ },
36
+ appearance: {
37
+ mode: 'light',
38
+ locale: 'zh-CN',
39
+ timezone: 'Asia/Shanghai',
40
+ tokens: {},
41
+ },
42
+ permissions: [],
43
+ dev: {
44
+ enabled: false,
45
+ entryUrl: '/plugins/example/admin/index.html',
46
+ },
47
+ ...overrides,
48
+ };
49
+ }
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAA2B,MAAM,oBAAoB,CAAA;AAGlF,MAAM,UAAU,+BAA+B,CAAC,YAAyC,EAAE;IACvF,MAAM,QAAQ,GAAyB;QACnC,SAAS;QACT,mBAAmB;QACnB,iBAAiB;QACjB,kBAAkB;QAClB,yBAAyB;QACzB,kBAAkB;KACrB,CAAA;IAED,OAAO;QACH,MAAM,EAAE;YACJ,OAAO,EAAE,oBAAoB;YAC7B,SAAS,EAAE,eAAe;YAC1B,QAAQ;SACX;QACD,GAAG,EAAE;YACD,KAAK,EAAE,OAAO;YACd,WAAW,EAAE,MAAM;SACtB;QACD,IAAI,EAAE;YACF,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ;SACjB;QACD,MAAM,EAAE;YACJ,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,SAAS;SACnB;QACD,OAAO,EAAE;YACL,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,SAAS;SACnB;QACD,UAAU,EAAE;YACR,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,eAAe;YACzB,MAAM,EAAE,EAAE;SACb;QACD,WAAW,EAAE,EAAE;QACf,GAAG,EAAE;YACD,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,mCAAmC;SAChD;QACD,GAAG,SAAS;KACf,CAAA;AACL,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type App, type Component, type InjectionKey } from 'vue';
2
+ import { type SparqPluginClient, type SparqPluginClientOptions, type SparqPluginContext, type SparqPluginSurfaceLifecycleState } from '../client/index.js';
3
+ export interface SparqVuePluginRuntime {
4
+ app: App;
5
+ client: SparqPluginClient;
6
+ context: SparqPluginContext;
7
+ surfaceLifecycle: SparqPluginSurfaceLifecycleState;
8
+ overlayContainer: HTMLElement;
9
+ destroy(): void;
10
+ }
11
+ export interface BootstrapSparqVuePluginOptions {
12
+ component: Component;
13
+ root?: string | Element;
14
+ client?: SparqPluginClient;
15
+ clientOptions?: SparqPluginClientOptions;
16
+ configureApp?: (app: App, runtime: Omit<SparqVuePluginRuntime, 'app' | 'destroy'>) => void;
17
+ }
18
+ export declare const SPARQ_PLUGIN_RUNTIME_KEY: InjectionKey<SparqVuePluginRuntime>;
19
+ export declare function bootstrapSparqVuePlugin(options: BootstrapSparqVuePluginOptions): Promise<SparqVuePluginRuntime>;
20
+ export declare function useSparqPlugin(): SparqVuePluginRuntime;
21
+ export declare function applyPluginAppearance(context: SparqPluginContext, targetDocument?: Document): void;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,KAAK,CAAA;AACrG,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,gCAAgC,EACxC,MAAM,oBAAoB,CAAA;AAI3B,MAAM,WAAW,qBAAqB;IAClC,GAAG,EAAE,GAAG,CAAA;IACR,MAAM,EAAE,iBAAiB,CAAA;IACzB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,gBAAgB,EAAE,gCAAgC,CAAA;IAClD,gBAAgB,EAAE,WAAW,CAAA;IAC7B,OAAO,IAAI,IAAI,CAAA;CAClB;AAED,MAAM,WAAW,8BAA8B;IAC3C,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACvB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,aAAa,CAAC,EAAE,wBAAwB,CAAA;IACxC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,CAAA;CAC7F;AAED,eAAO,MAAM,wBAAwB,EAAE,YAAY,CAAC,qBAAqB,CAAkC,CAAA;AAE3G,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA8DrH;AAED,wBAAgB,cAAc,IAAI,qBAAqB,CAOtD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,EAAE,cAAc,GAAE,QAAmB,GAAG,IAAI,CAU5G"}
@@ -0,0 +1,93 @@
1
+ import { createApp, inject, shallowReactive } from 'vue';
2
+ import { createSparqPluginClient, } from '../client/index.js';
3
+ import { createSparqPluginOverlay } from './overlay.js';
4
+ import { createSparqVueClientState } from './runtime-state.js';
5
+ export const SPARQ_PLUGIN_RUNTIME_KEY = Symbol('sparq-plugin-runtime');
6
+ export async function bootstrapSparqVuePlugin(options) {
7
+ const client = options.client ?? createSparqPluginClient(options.clientOptions);
8
+ let app;
9
+ let overlay;
10
+ let mounted = false;
11
+ try {
12
+ const context = await client.connect();
13
+ const surfaceLifecycle = client.surface.getLifecycleState();
14
+ if (!surfaceLifecycle) {
15
+ throw new Error('Sparq plugin surface lifecycle is not available after connecting.');
16
+ }
17
+ const root = resolveRoot(options.root);
18
+ overlay = createSparqPluginOverlay(root.ownerDocument);
19
+ app = createApp(options.component);
20
+ const clientState = createSparqVueClientState(client, context);
21
+ let disposed = false;
22
+ let disposeContextListener = () => undefined;
23
+ let disposeLifecycleListener = () => undefined;
24
+ const publicRuntime = shallowReactive({
25
+ app,
26
+ client: clientState.client,
27
+ context,
28
+ surfaceLifecycle,
29
+ overlayContainer: overlay.container,
30
+ destroy: () => {
31
+ if (disposed) {
32
+ return;
33
+ }
34
+ disposed = true;
35
+ disposeContextListener();
36
+ disposeLifecycleListener();
37
+ app?.unmount();
38
+ overlay?.destroy();
39
+ client.destroy();
40
+ },
41
+ });
42
+ applyPluginAppearance(context, root.ownerDocument);
43
+ options.configureApp?.(app, publicRuntime);
44
+ disposeContextListener = client.onContextChange((nextContext) => {
45
+ clientState.updateContext(nextContext);
46
+ publicRuntime.context = nextContext;
47
+ applyPluginAppearance(nextContext, root.ownerDocument);
48
+ });
49
+ disposeLifecycleListener = client.surface.onLifecycleChange((state) => {
50
+ publicRuntime.surfaceLifecycle = state;
51
+ });
52
+ app.provide(SPARQ_PLUGIN_RUNTIME_KEY, publicRuntime);
53
+ app.mount(root);
54
+ mounted = true;
55
+ return publicRuntime;
56
+ }
57
+ catch (error) {
58
+ if (!mounted) {
59
+ app?.unmount();
60
+ overlay?.destroy();
61
+ client.destroy();
62
+ }
63
+ throw error;
64
+ }
65
+ }
66
+ export function useSparqPlugin() {
67
+ const runtime = inject(SPARQ_PLUGIN_RUNTIME_KEY);
68
+ if (!runtime) {
69
+ throw new Error('Sparq plugin runtime is not available. Call bootstrapSparqVuePlugin first.');
70
+ }
71
+ return runtime;
72
+ }
73
+ export function applyPluginAppearance(context, targetDocument = document) {
74
+ const root = targetDocument.documentElement;
75
+ root.dataset.theme = context.appearance.mode;
76
+ root.lang = context.appearance.locale;
77
+ for (const [name, value] of Object.entries(context.appearance.tokens)) {
78
+ if (name.startsWith('--')) {
79
+ root.style.setProperty(name, value);
80
+ }
81
+ }
82
+ }
83
+ function resolveRoot(root) {
84
+ if (root instanceof Element) {
85
+ return root;
86
+ }
87
+ const resolved = document.querySelector(root ?? '#app');
88
+ if (!resolved) {
89
+ throw new Error(`Missing Sparq plugin mount element: ${root ?? '#app'}`);
90
+ }
91
+ return resolved;
92
+ }
93
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vue/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface SparqPluginOverlay {
2
+ container: HTMLElement;
3
+ destroy(): void;
4
+ }
5
+ export declare function createSparqPluginOverlay(targetDocument: Document): SparqPluginOverlay;
6
+ //# sourceMappingURL=overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/vue/overlay.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,WAAW,CAAA;IACtB,OAAO,IAAI,IAAI,CAAA;CAClB;AAED,wBAAgB,wBAAwB,CAAC,cAAc,EAAE,QAAQ,GAAG,kBAAkB,CAsBrF"}
@@ -0,0 +1,21 @@
1
+ export function createSparqPluginOverlay(targetDocument) {
2
+ const container = targetDocument.createElement('div');
3
+ container.dataset.sparqPluginOverlay = '';
4
+ container.style.position = 'fixed';
5
+ container.style.inset = '0';
6
+ container.style.zIndex = 'var(--sparq-plugin-overlay-z-index, 1000)';
7
+ container.style.pointerEvents = 'none';
8
+ const style = targetDocument.createElement('style');
9
+ style.dataset.sparqPluginOverlayStyle = '';
10
+ style.textContent = '[data-sparq-plugin-overlay] > * { pointer-events: auto; }';
11
+ targetDocument.head.append(style);
12
+ targetDocument.body.append(container);
13
+ return {
14
+ container,
15
+ destroy: () => {
16
+ container.remove();
17
+ style.remove();
18
+ },
19
+ };
20
+ }
21
+ //# sourceMappingURL=overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../src/vue/overlay.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,wBAAwB,CAAC,cAAwB;IAC7D,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACrD,SAAS,CAAC,OAAO,CAAC,kBAAkB,GAAG,EAAE,CAAA;IACzC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAA;IAClC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAA;IAC3B,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,2CAA2C,CAAA;IACpE,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAA;IAEtC,MAAM,KAAK,GAAG,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACnD,KAAK,CAAC,OAAO,CAAC,uBAAuB,GAAG,EAAE,CAAA;IAC1C,KAAK,CAAC,WAAW,GAAG,2DAA2D,CAAA;IAE/E,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACjC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAErC,OAAO;QACH,SAAS;QACT,OAAO,EAAE,GAAG,EAAE;YACV,SAAS,CAAC,MAAM,EAAE,CAAA;YAClB,KAAK,CAAC,MAAM,EAAE,CAAA;QAClB,CAAC;KACJ,CAAA;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type ShallowRef } from 'vue';
2
+ import type { SparqPluginClient, SparqPluginContext } from '../client/index.js';
3
+ export interface SparqVueClientState {
4
+ client: SparqPluginClient;
5
+ context: ShallowRef<SparqPluginContext>;
6
+ updateContext(context: SparqPluginContext): void;
7
+ }
8
+ export declare function createSparqVueClientState(sourceClient: SparqPluginClient, initialContext: SparqPluginContext): SparqVueClientState;
9
+ //# sourceMappingURL=runtime-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-state.d.ts","sourceRoot":"","sources":["../../src/vue/runtime-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE/E,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,iBAAiB,CAAA;IACzB,OAAO,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAA;IACvC,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAA;CACnD;AAED,wBAAgB,yBAAyB,CACrC,YAAY,EAAE,iBAAiB,EAC/B,cAAc,EAAE,kBAAkB,GACnC,mBAAmB,CAkBrB"}
@@ -0,0 +1,20 @@
1
+ import { shallowRef } from 'vue';
2
+ export function createSparqVueClientState(sourceClient, initialContext) {
3
+ const context = shallowRef(initialContext);
4
+ const client = {
5
+ ...sourceClient,
6
+ getContext: () => context.value,
7
+ hasFeature: (feature) => context.value.bridge.features.includes(feature),
8
+ permissions: {
9
+ has: (permission) => context.value.permissions.includes(permission),
10
+ },
11
+ };
12
+ return {
13
+ client,
14
+ context,
15
+ updateContext: (nextContext) => {
16
+ context.value = nextContext;
17
+ },
18
+ };
19
+ }
20
+ //# sourceMappingURL=runtime-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-state.js","sourceRoot":"","sources":["../../src/vue/runtime-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,KAAK,CAAA;AASjD,MAAM,UAAU,yBAAyB,CACrC,YAA+B,EAC/B,cAAkC;IAElC,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAsB;QAC9B,GAAG,YAAY;QACf,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK;QAC/B,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxE,WAAW,EAAE;YACT,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;SACtE;KACJ,CAAA;IAED,OAAO;QACH,MAAM;QACN,OAAO;QACP,aAAa,EAAE,CAAC,WAAW,EAAE,EAAE;YAC3B,OAAO,CAAC,KAAK,GAAG,WAAW,CAAA;QAC/B,CAAC;KACJ,CAAA;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@sparqjs/plugin-sdk",
3
+ "version": "0.1.0",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
7
+ "type": "module",
8
+ "main": "./dist/index.js",
9
+ "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ },
16
+ "./bridge": {
17
+ "types": "./dist/bridge/index.d.ts",
18
+ "import": "./dist/bridge/index.js"
19
+ },
20
+ "./client": {
21
+ "types": "./dist/client/index.d.ts",
22
+ "import": "./dist/client/index.js"
23
+ },
24
+ "./host": {
25
+ "types": "./dist/host/index.d.ts",
26
+ "import": "./dist/host/index.js"
27
+ },
28
+ "./runtime": {
29
+ "types": "./dist/runtime/index.d.ts",
30
+ "import": "./dist/runtime/index.js"
31
+ },
32
+ "./vue": {
33
+ "types": "./dist/vue/index.d.ts",
34
+ "import": "./dist/vue/index.js"
35
+ },
36
+ "./testing": {
37
+ "types": "./dist/testing/index.d.ts",
38
+ "import": "./dist/testing/index.js"
39
+ }
40
+ },
41
+ "files": [
42
+ "dist"
43
+ ],
44
+ "peerDependencies": {
45
+ "vue": "^3.4.0"
46
+ },
47
+ "peerDependenciesMeta": {
48
+ "vue": {
49
+ "optional": true
50
+ }
51
+ }
52
+ }