glass-easel-devtools-panel 0.9.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/.eslintignore +2 -0
- package/dist/app.d.ts +0 -0
- package/dist/bootstrap.d.ts +5 -0
- package/dist/bootstrap.js +3 -0
- package/dist/bootstrap.js.LICENSE.txt +1 -0
- package/dist/events.d.ts +41 -0
- package/dist/global_components/image/image.d.ts +1 -0
- package/dist/global_components/index.d.ts +2 -0
- package/dist/global_components/view/view.d.ts +1 -0
- package/dist/index.css +17 -0
- package/dist/message_channel.d.ts +11 -0
- package/dist/pages/detail/detail.d.ts +1 -0
- package/dist/pages/detail/section.d.ts +0 -0
- package/dist/pages/detail/value.d.ts +1 -0
- package/dist/pages/index/index.d.ts +1 -0
- package/dist/pages/store.d.ts +9 -0
- package/dist/pages/tree/element.d.ts +1 -0
- package/dist/resources/logo_256.png +0 -0
- package/dist/utils.d.ts +4 -0
- package/package.json +21 -0
- package/src/app.ts +1 -0
- package/src/app.wxss +1 -0
- package/src/bootstrap.ts +80 -0
- package/src/events.ts +97 -0
- package/src/global_components/image/image.json +3 -0
- package/src/global_components/image/image.ts +1 -0
- package/src/global_components/image/image.wxml +1 -0
- package/src/global_components/image/image.wxss +3 -0
- package/src/global_components/index.ts +12 -0
- package/src/global_components/view/view.json +3 -0
- package/src/global_components/view/view.ts +40 -0
- package/src/global_components/view/view.wxml +14 -0
- package/src/global_components/view/view.wxss +0 -0
- package/src/message_channel.ts +70 -0
- package/src/pages/common.wxss +12 -0
- package/src/pages/detail/detail.json +7 -0
- package/src/pages/detail/detail.ts +190 -0
- package/src/pages/detail/detail.wxml +179 -0
- package/src/pages/detail/detail.wxss +84 -0
- package/src/pages/detail/section.json +3 -0
- package/src/pages/detail/section.ts +17 -0
- package/src/pages/detail/section.wxml +8 -0
- package/src/pages/detail/section.wxss +47 -0
- package/src/pages/detail/value.json +3 -0
- package/src/pages/detail/value.ts +107 -0
- package/src/pages/detail/value.wxml +7 -0
- package/src/pages/detail/value.wxss +44 -0
- package/src/pages/index/index.json +6 -0
- package/src/pages/index/index.ts +121 -0
- package/src/pages/index/index.wxml +29 -0
- package/src/pages/index/index.wxss +75 -0
- package/src/pages/store.ts +33 -0
- package/src/pages/tree/element.json +6 -0
- package/src/pages/tree/element.ts +295 -0
- package/src/pages/tree/element.wxml +47 -0
- package/src/pages/tree/element.wxss +113 -0
- package/src/resources/logo_256.png +0 -0
- package/src/utils.ts +16 -0
- package/src.d.ts +10 -0
- package/tsconfig.json +11 -0
- package/typings/miniprogram.d.ts +6 -0
- package/webpack.config.js +79 -0
- package/webpack.dev.config.js +12 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! For license information please see index.js.LICENSE.txt */
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type builder } from 'glass-easel-miniprogram-adapter/dist/glass_easel_miniprogram_adapter';
|
|
2
|
+
import { type protocol } from './message_channel';
|
|
3
|
+
export declare class EventDispatcher<N extends string, K extends string | number, T extends {
|
|
4
|
+
[k in N]: K;
|
|
5
|
+
}> {
|
|
6
|
+
private keyName;
|
|
7
|
+
private listeners;
|
|
8
|
+
constructor(keyName: N);
|
|
9
|
+
addListener(key: K, func: (args: T) => void): void;
|
|
10
|
+
removeListener(key: K, func: (args: T) => void): void;
|
|
11
|
+
bindComponentLifetimes(ctx: builder.BuilderContext<any, any, any>, getKey: () => K, func: (args: T) => void): void;
|
|
12
|
+
dispatch(args: T): void;
|
|
13
|
+
}
|
|
14
|
+
export declare const childNodeCountUpdated: EventDispatcher<"nodeId", number, {
|
|
15
|
+
nodeId: protocol.NodeId;
|
|
16
|
+
childNodeCount: number;
|
|
17
|
+
}>;
|
|
18
|
+
export declare const setChildNodes: EventDispatcher<"parentId", number, {
|
|
19
|
+
parentId: protocol.NodeId;
|
|
20
|
+
nodes: protocol.dom.Node[];
|
|
21
|
+
}>;
|
|
22
|
+
export declare const childNodeInserted: EventDispatcher<"parentNodeId", number, {
|
|
23
|
+
parentNodeId: protocol.NodeId;
|
|
24
|
+
previousNodeId: protocol.NodeId;
|
|
25
|
+
node: protocol.dom.Node;
|
|
26
|
+
}>;
|
|
27
|
+
export declare const childNodeRemoved: EventDispatcher<"parentNodeId", number, {
|
|
28
|
+
parentNodeId: protocol.NodeId;
|
|
29
|
+
nodeId: protocol.NodeId;
|
|
30
|
+
}>;
|
|
31
|
+
export declare const characterDataModified: EventDispatcher<"nodeId", number, {
|
|
32
|
+
nodeId: protocol.NodeId;
|
|
33
|
+
characterData: string;
|
|
34
|
+
}>;
|
|
35
|
+
export declare const attributeModified: EventDispatcher<"nodeId", number, {
|
|
36
|
+
nodeId: protocol.NodeId;
|
|
37
|
+
name: string;
|
|
38
|
+
value: string;
|
|
39
|
+
detail: protocol.GlassEaselVar;
|
|
40
|
+
nameType: "basic" | "attribute" | "component-property" | "slot-value" | "dataset" | "mark" | "external-class";
|
|
41
|
+
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const componentDefinition: {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const componentDefinition: {};
|
package/dist/index.css
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
[wx-host="A"]{display:block;}
|
|
2
|
+
|
|
3
|
+
[wx-host="C"]{display:block;}
|
|
4
|
+
|
|
5
|
+
[wx-host="E"]{display:block;}
|
|
6
|
+
|
|
7
|
+
[wx-host="G"]{display:block;}
|
|
8
|
+
|
|
9
|
+
@keyframes update-ani{from{background:#dd8;}to{background:transparent;}}.A--updated{background:#dd8;animation-duration:1s;animation-fill-mode:both;animation-name:update-ani;animation-timing-function:ease;}.A--tag{color:#888;white-space:nowrap;}.A--fold-arrow{display:inline-block;width:1em;height:1em;line-height:1em;color:#444;text-align:center;}.A--fold-arrow-icon{width:1em;transition:transform 200ms ease;}.A--fold-arrow-icon_open{transform:rotate(90deg);}.A--tag-body{display:inline-block;}.A--tag-body_hover{background:#ace;}.A--tag-body_selected{background:#add;}.A--tag-body_highlight{background-color:rgba(0,128,192,0.25);}.A--tag-text{display:inline;}.A--tag-name{display:inline-block;color:#408;}.A--tag-var-name-wrapper{display:inline;}.A--tag-var-name{display:inline-block;margin-left:0.25em;height:1em;line-height:1em;min-width:1em;text-align:center;font-size:0.8em;font-style:italic;color:#222;}.A--tag-var-name_hover{background:#ace;}.A--attribute{display:inline-block;margin-left:0.5em;}.A--attribute-name{display:inline-block;color:#084;}.A--attribute-name_property{color:#06a;}.A--attribute-value{display:inline-block;color:#840;}.A--children{margin-left:1em;}.A--virtual-tag-name{display:inline-block;font-style:italic;}.A--virtual-tag-name_hover{background:#add;}.A--text-content{color:#222;padding:1px 0;}
|
|
10
|
+
body{margin:0;height:100vh;}.wrapper{font-family:monospace;font-size:12px;background:#eee;height:100%;cursor:default;user-select:none;}.empty{color:#888;font-style:italic;padding:5px;}.main{height:100%;}.tree-detail{display:flex;height:100%;overflow:hidden;}.tree-detail-split{width:2px;background-color:#888;cursor:w-resize;}.left{flex:1 1 0;display:flex;flex-direction:column;overflow-x:hidden;}.toolbar{flex:none;background:#ccc;color:#222;border-bottom:2px solid#888;display:flex;}.tool-space{flex:auto;}.tool{flex:none;display:inline-block;padding:5px 10px;}.tool_hover{background:#ace;}.tool_active{background:#add;}.tree{flex:auto;margin:5px;overflow:auto;user-select:text;}.detail{flex:none;box-sizing:border-box;overflow:auto;}
|
|
11
|
+
.C--title{padding:0 5px;background:#ccc;color:#222;line-height:1.5;white-space:nowrap;}.C--title-text{display:inline-block;}.C--title-refresh{display:inline-block;font-size:1.5em;width:1em;height:1em;line-height:1;text-align:center;margin-left:0.5em;}.C--title-refresh_hover{background-color:#ace;}.C--arrow{display:inline-block;width:1em;height:1.5em;text-align:center;transition:transform 200ms ease;margin-right:0.25em;}.C--arrow_open{transform:rotate(90deg);}.C--body{padding:0 5px;overflow:hidden;}.C--body_collapsed{height:0;}
|
|
12
|
+
@keyframes value-update-ani{from{background:#dd8;}to{background:transparent;}}.D--updated{background:#dd8;animation-duration:1s;animation-fill-mode:both;animation-name:value-update-ani;animation-timing-function:ease;}.D--wrapper{display:inline-block;}.D--slice{display:inline;color:#888;}.D--slice_dynamic{color:#840;}.D--var-name{display:inline-block;margin-left:0.25em;height:1em;line-height:1em;min-width:1em;text-align:center;font-size:0.8em;font-style:italic;color:#222;}.D--var-name_hover{background:#ace;}
|
|
13
|
+
.E--section{margin-bottom:5px;color:#888;}.E--section-item{white-space:nowrap;user-select:text;}.E--section-key{display:inline;color:#06a;}.E--section-key-core{display:inline;color:#084;}.E--section-value{display:inline;color:#840;}.E--section-value-extra{color:#222;}.E--section-empty{text-align:center;font-style:italic;}.E--box-model{margin:0 auto;}.E--box-model-text{flex:none;text-align:center;white-space:nowrap;color:#222;margin:1px;}.E--box-model-content{display:flex;border:1px solid#888;padding:1px;}.E--box-model-padding{border:1px solid#888;padding:1px;background:#eee;}.E--box-model-border{border:1px solid#888;padding:1px;background:#ccc;}.E--box-model-margin{padding:1px;}.E--box-model-line{display:flex;justify-content:center;align-items:center;}.E--style-rule{padding-left:1em;margin:5px 0;}.E--style-rule_inactive{text-decoration:line-through#222;}.E--style-rule-prefix{margin-left:-1em;font-style:italic;}.E--style-rule-title{margin-left:-1em;color:#222;}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUhGLENBTUEsZUFDRSxpQkFDQSxhQUZGLENBSUEsd0JBQ0UsaUNBREYsQ0FHQSxzQkFDRSxpQkFDQSxrQkFGRixDQUlBLHFCQUNFLGlCQUNBLFdBRkYsQyIsInNvdXJjZXMiOlsid2VicGFjazovL2dsYXNzLWVhc2VsLWRldnRvb2xzLXBhbmVsLy4vc3JjL19fZ2xhc3NfZWFzZWxfaG9zdF9zdHlsZXNfXy53eHNzIiwid2VicGFjazovL2dsYXNzLWVhc2VsLWRldnRvb2xzLXBhbmVsLy4vc3JjL3BhZ2VzL3RyZWUvZWxlbWVudC53eHNzIiwid2VicGFjazovL2dsYXNzLWVhc2VsLWRldnRvb2xzLXBhbmVsLy4vc3JjL3BhZ2VzL2luZGV4L2luZGV4Lnd4c3MiLCJ3ZWJwYWNrOi8vZ2xhc3MtZWFzZWwtZGV2dG9vbHMtcGFuZWwvLi9zcmMvcGFnZXMvZGV0YWlsL3NlY3Rpb24ud3hzcyIsIndlYnBhY2s6Ly9nbGFzcy1lYXNlbC1kZXZ0b29scy1wYW5lbC8uL3NyYy9wYWdlcy9kZXRhaWwvdmFsdWUud3hzcyIsIndlYnBhY2s6Ly9nbGFzcy1lYXNlbC1kZXZ0b29scy1wYW5lbC8uL3NyYy9wYWdlcy9kZXRhaWwvZGV0YWlsLnd4c3MiXSwic291cmNlc0NvbnRlbnQiOlsiW3d4LWhvc3Q9XCJBXCJde2Rpc3BsYXk6YmxvY2s7fVxuXG5bd3gtaG9zdD1cIkNcIl17ZGlzcGxheTpibG9jazt9XG5cblt3eC1ob3N0PVwiRVwiXXtkaXNwbGF5OmJsb2NrO31cblxuW3d4LWhvc3Q9XCJHXCJde2Rpc3BsYXk6YmxvY2s7fSIsIkBpbXBvcnQgdXJsKCcuLi9jb21tb24ud3hzcycpO1xuXG5Aa2V5ZnJhbWVzIHVwZGF0ZS1hbmkge1xuICBmcm9tIHtcbiAgICBiYWNrZ3JvdW5kOiBAdXBkYXRlLWJnO1xuICB9XG4gIHRvIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgfVxufVxuLnVwZGF0ZWQge1xuICBiYWNrZ3JvdW5kOiBAdXBkYXRlLWJnO1xuICBhbmltYXRpb24tZHVyYXRpb246IDFzO1xuICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICBhbmltYXRpb24tbmFtZTogdXBkYXRlLWFuaTtcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTtcbn1cblxuOmhvc3Qge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLnRhZyB7XG4gIGNvbG9yOiBAY29tbW9uLXRleHQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5mb2xkLWFycm93IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgbGluZS1oZWlnaHQ6IDFlbTtcbiAgY29sb3I6ICM0NDQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5mb2xkLWFycm93LWljb24ge1xuICB3aWR0aDogMWVtO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjAwbXMgZWFzZTtcbn1cbi5mb2xkLWFycm93LWljb25fb3BlbiB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbn1cblxuLnRhZy1ib2R5IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLnRhZy1ib2R5X2hvdmVyIHtcbiAgYmFja2dyb3VuZDogQGhvdmVyLWJnO1xufVxuLnRhZy1ib2R5X3NlbGVjdGVkIHtcbiAgYmFja2dyb3VuZDogQHNlbGVjdGVkLWJnO1xufVxuLnRhZy1ib2R5X2hpZ2hsaWdodCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTI4LCAxOTIsIDAuMjUpO1xufVxuLnRhZy10ZXh0IHtcbiAgZGlzcGxheTogaW5saW5lO1xufVxuLnRhZy1uYW1lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogQHRhZy1uYW1lO1xufVxuXG4udGFnLXZhci1uYW1lLXdyYXBwZXIge1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG4udGFnLXZhci1uYW1lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tbGVmdDogMC4yNWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgbGluZS1oZWlnaHQ6IDFlbTtcbiAgbWluLXdpZHRoOiAxZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBjb2xvcjogQGltcG9ydGFudC10ZXh0O1xufVxuLnRhZy12YXItbmFtZV9ob3ZlciB7XG4gIGJhY2tncm91bmQ6IEBob3Zlci1iZztcbn1cblxuLmF0dHJpYnV0ZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWxlZnQ6IDAuNWVtO1xufVxuLmF0dHJpYnV0ZS1uYW1lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogQGNvcmUtYXR0cmlidXRlLW5hbWU7XG59XG4uYXR0cmlidXRlLW5hbWVfcHJvcGVydHkge1xuICBjb2xvcjogQHByb3BlcnR5LW5hbWU7XG59XG4uYXR0cmlidXRlLXZhbHVlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogQGF0dHJpYnV0ZS12YWx1ZTtcbn1cblxuLmNoaWxkcmVuIHtcbiAgbWFyZ2luLWxlZnQ6IDFlbTtcbn1cblxuLnZpcnR1YWwtdGFnLW5hbWUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cbi52aXJ0dWFsLXRhZy1uYW1lX2hvdmVyIHtcbiAgYmFja2dyb3VuZDogQHNlbGVjdGVkLWJnO1xufVxuXG4udGV4dC1jb250ZW50IHtcbiAgY29sb3I6IEBpbXBvcnRhbnQtdGV4dDtcbiAgcGFkZGluZzogMXB4IDA7XG59XG4iLCJAaW1wb3J0IHVybCgnLi4vY29tbW9uLnd4c3MnKTtcblxuYm9keSB7XG4gIG1hcmdpbjogMDtcbiAgaGVpZ2h0OiAxMDB2aDtcbn1cblxuLndyYXBwZXIge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICBmb250LXNpemU6IDEycHg7XG4gIGJhY2tncm91bmQ6IEBwcmltYXJ5LWJnO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4uZW1wdHkge1xuICBjb2xvcjogQGNvbW1vbi10ZXh0O1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIHBhZGRpbmc6IDVweDtcbn1cblxuLm1haW4ge1xuICBoZWlnaHQ6IDEwMCU7XG59XG4udHJlZS1kZXRhaWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4udHJlZS1kZXRhaWwtc3BsaXQge1xuICB3aWR0aDogMnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODg4O1xuICBjdXJzb3I6IHctcmVzaXplO1xufVxuLmxlZnQge1xuICBmbGV4OiAxIDEgMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xufVxuXG4udG9vbGJhciB7XG4gIGZsZXg6IG5vbmU7XG4gIGJhY2tncm91bmQ6IEBzZWNvbmRhcnktYmc7XG4gIGNvbG9yOiBAaW1wb3J0YW50LXRleHQ7XG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjODg4O1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLnRvb2wtc3BhY2Uge1xuICBmbGV4OiBhdXRvO1xufVxuLnRvb2wge1xuICBmbGV4OiBub25lO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xufVxuLnRvb2xfaG92ZXIge1xuICBiYWNrZ3JvdW5kOiBAaG92ZXItYmc7XG59XG4udG9vbF9hY3RpdmUge1xuICBiYWNrZ3JvdW5kOiBAc2VsZWN0ZWQtYmc7XG59XG5cbi50cmVlIHtcbiAgZmxleDogYXV0bztcbiAgbWFyZ2luOiA1cHg7XG4gIG92ZXJmbG93OiBhdXRvO1xuICB1c2VyLXNlbGVjdDogdGV4dDtcbn1cblxuLmRldGFpbCB7XG4gIGZsZXg6IG5vbmU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuIiwiQGltcG9ydCB1cmwoJy4uL2NvbW1vbi53eHNzJyk7XG5cbjpob3N0IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi50aXRsZSB7XG4gIHBhZGRpbmc6IDAgNXB4O1xuICBiYWNrZ3JvdW5kOiBAc2Vjb25kYXJ5LWJnO1xuICBjb2xvcjogQGltcG9ydGFudC10ZXh0O1xuICBsaW5lLWhlaWdodDogMS41O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuLnRpdGxlLXRleHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4udGl0bGUtcmVmcmVzaCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxLjVlbTtcbiAgd2lkdGg6IDFlbTtcbiAgaGVpZ2h0OiAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbi1sZWZ0OiAwLjVlbTtcbn1cbi50aXRsZS1yZWZyZXNoX2hvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogQGhvdmVyLWJnO1xufVxuLmFycm93IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMWVtO1xuICBoZWlnaHQ6IDEuNWVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyMDBtcyBlYXNlO1xuICBtYXJnaW4tcmlnaHQ6IDAuMjVlbTtcbn1cbi5hcnJvd19vcGVuIHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xufVxuXG4uYm9keSB7XG4gIHBhZGRpbmc6IDAgNXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmJvZHlfY29sbGFwc2VkIHtcbiAgaGVpZ2h0OiAwO1xufVxuIiwiQGltcG9ydCB1cmwoJy4uL2NvbW1vbi53eHNzJyk7XG5cbkBrZXlmcmFtZXMgdmFsdWUtdXBkYXRlLWFuaSB7XG4gIGZyb20ge1xuICAgIGJhY2tncm91bmQ6IEB1cGRhdGUtYmc7XG4gIH1cbiAgdG8ge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICB9XG59XG4udXBkYXRlZCB7XG4gIGJhY2tncm91bmQ6IEB1cGRhdGUtYmc7XG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7XG4gIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gIGFuaW1hdGlvbi1uYW1lOiB2YWx1ZS11cGRhdGUtYW5pO1xuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlO1xufVxuXG4ud3JhcHBlciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLnNsaWNlIHtcbiAgZGlzcGxheTogaW5saW5lO1xuICBjb2xvcjogQGNvbW1vbi10ZXh0O1xufVxuLnNsaWNlX2R5bmFtaWMge1xuICBjb2xvcjogQGF0dHJpYnV0ZS12YWx1ZTtcbn1cblxuLnZhci1uYW1lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tbGVmdDogMC4yNWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgbGluZS1oZWlnaHQ6IDFlbTtcbiAgbWluLXdpZHRoOiAxZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBjb2xvcjogQGltcG9ydGFudC10ZXh0O1xufVxuLnZhci1uYW1lX2hvdmVyIHtcbiAgYmFja2dyb3VuZDogQGhvdmVyLWJnO1xufVxuIiwiQGltcG9ydCB1cmwoJy4uL2NvbW1vbi53eHNzJyk7XG5cbjpob3N0IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5zZWN0aW9uIHtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICBjb2xvcjogQGNvbW1vbi10ZXh0O1xufVxuLnNlY3Rpb24taXRlbSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHVzZXItc2VsZWN0OiB0ZXh0O1xufVxuLnNlY3Rpb24ta2V5IHtcbiAgZGlzcGxheTogaW5saW5lO1xuICBjb2xvcjogQHByb3BlcnR5LW5hbWU7XG59XG4uc2VjdGlvbi1rZXktY29yZSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgY29sb3I6IEBjb3JlLWF0dHJpYnV0ZS1uYW1lO1xufVxuLnNlY3Rpb24tdmFsdWUge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIGNvbG9yOiBAYXR0cmlidXRlLXZhbHVlO1xufVxuLnNlY3Rpb24tdmFsdWUtZXh0cmEge1xuICBjb2xvcjogQGltcG9ydGFudC10ZXh0O1xufVxuXG4uc2VjdGlvbi1lbXB0eSB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xufVxuXG4uYm94LW1vZGVsIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uYm94LW1vZGVsLXRleHQge1xuICBmbGV4OiBub25lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGNvbG9yOiBAaW1wb3J0YW50LXRleHQ7XG4gIG1hcmdpbjogMXB4O1xufVxuLmJveC1tb2RlbC1jb250ZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzg4ODtcbiAgcGFkZGluZzogMXB4O1xufVxuLmJveC1tb2RlbC1wYWRkaW5nIHtcbiAgYm9yZGVyOiAxcHggc29saWQgIzg4ODtcbiAgcGFkZGluZzogMXB4O1xuICBiYWNrZ3JvdW5kOiBAcHJpbWFyeS1iZztcbn1cbi5ib3gtbW9kZWwtYm9yZGVyIHtcbiAgYm9yZGVyOiAxcHggc29saWQgIzg4ODtcbiAgcGFkZGluZzogMXB4O1xuICBiYWNrZ3JvdW5kOiBAc2Vjb25kYXJ5LWJnO1xufVxuLmJveC1tb2RlbC1tYXJnaW4ge1xuICBwYWRkaW5nOiAxcHg7XG59XG4uYm94LW1vZGVsLWxpbmUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnN0eWxlLXJ1bGUge1xuICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgbWFyZ2luOiA1cHggMDtcbn1cbi5zdHlsZS1ydWxlX2luYWN0aXZlIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2ggQGltcG9ydGFudC10ZXh0O1xufVxuLnN0eWxlLXJ1bGUtcHJlZml4IHtcbiAgbWFyZ2luLWxlZnQ6IC0xZW07XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cbi5zdHlsZS1ydWxlLXRpdGxlIHtcbiAgbWFyZ2luLWxlZnQ6IC0xZW07XG4gIGNvbG9yOiBAaW1wb3J0YW50LXRleHQ7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=*/
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { protocol } from 'glass-easel-devtools-agent';
|
|
2
|
+
export { protocol } from 'glass-easel-devtools-agent';
|
|
3
|
+
export type PanelRecvMessage = protocol.AgentSendMessage;
|
|
4
|
+
export type PanelSendMessage = protocol.AgentRecvMessage;
|
|
5
|
+
export interface MessageChannel {
|
|
6
|
+
send(data: PanelSendMessage): void;
|
|
7
|
+
recv(listener: (data: PanelRecvMessage) => void): void;
|
|
8
|
+
}
|
|
9
|
+
export declare const setMessageChannel: (mc: MessageChannel) => void;
|
|
10
|
+
export declare const setEventHandler: <T extends keyof protocol.AgentEventKind>(name: T, handler: (detail: protocol.AgentEventKind[T]["detail"]) => void) => void;
|
|
11
|
+
export declare const sendRequest: <T extends keyof protocol.AgentRequestKind>(name: T, detail: protocol.AgentRequestKind[T]["request"]) => Promise<protocol.AgentRequestKind[T]["response"]>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const componentDefinition: {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type protocol } from 'glass-easel-devtools-agent';
|
|
2
|
+
export declare const store: {
|
|
3
|
+
selectedNodeId: protocol.NodeId;
|
|
4
|
+
highlightNodeId: protocol.NodeId;
|
|
5
|
+
sideBarShown: boolean;
|
|
6
|
+
selectNode(n: protocol.NodeId): void;
|
|
7
|
+
hideSideBar(): void;
|
|
8
|
+
setHighlightNode(n: protocol.NodeId): void;
|
|
9
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const compDef: {};
|
|
Binary file
|
package/dist/utils.d.ts
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "glass-easel-devtools-panel",
|
|
3
|
+
"version": "0.9.0",
|
|
4
|
+
"main": "dist/bootstrap.js",
|
|
5
|
+
"dependencies": {},
|
|
6
|
+
"devDependencies": {
|
|
7
|
+
"css-loader": "^7.1.2",
|
|
8
|
+
"glass-easel": "^0.9.0",
|
|
9
|
+
"glass-easel-miniprogram-adapter": "^0.9.0",
|
|
10
|
+
"glass-easel-miniprogram-webpack-plugin": "^0.9.0",
|
|
11
|
+
"less-loader": "^12.2.0",
|
|
12
|
+
"mini-css-extract-plugin": "^2.9.0",
|
|
13
|
+
"mobx-miniprogram": "^6.12.3",
|
|
14
|
+
"mobx-miniprogram-bindings": "^3.0.1",
|
|
15
|
+
"glass-easel-devtools-agent": "0.9.0"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "webpack --config webpack.config.js",
|
|
19
|
+
"dev": "webpack --config webpack.dev.config.js --watch"
|
|
20
|
+
}
|
|
21
|
+
}
|
package/src/app.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// this file is always executed on startup
|
package/src/app.wxss
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/* this is the global stylesheet */
|
package/src/bootstrap.ts
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { glassEasel, type Root } from 'glass-easel-miniprogram-adapter'
|
|
2
|
+
import { codeSpace, initWithBackend, registerGlobalEventListener } from '../src' // import the plugin-generated code
|
|
3
|
+
import { type MessageChannel, setMessageChannel } from './message_channel'
|
|
4
|
+
import { componentDefinition } from './pages/index'
|
|
5
|
+
import { warn } from './utils'
|
|
6
|
+
import { loadGlobalComponents } from './global_components'
|
|
7
|
+
|
|
8
|
+
export { MessageChannel, PanelRecvMessage, PanelSendMessage } from './message_channel'
|
|
9
|
+
|
|
10
|
+
let root: Root | null = null
|
|
11
|
+
|
|
12
|
+
const insertInto = (
|
|
13
|
+
backendContext: glassEasel.GeneralBackendContext,
|
|
14
|
+
backendElement: glassEasel.GeneralBackendElement,
|
|
15
|
+
) => {
|
|
16
|
+
// create the backend context
|
|
17
|
+
registerGlobalEventListener(backendContext)
|
|
18
|
+
const ab = initWithBackend(backendContext)
|
|
19
|
+
|
|
20
|
+
// add global using components
|
|
21
|
+
loadGlobalComponents(codeSpace)
|
|
22
|
+
|
|
23
|
+
// create a mini-program page
|
|
24
|
+
root = ab.createRoot(
|
|
25
|
+
'glass-easel-root', // the tag name of the mount point
|
|
26
|
+
codeSpace,
|
|
27
|
+
'pages/index/index', // the mini-program page to load
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
// insert the page into backend
|
|
31
|
+
let placeholder: glassEasel.GeneralBackendElement
|
|
32
|
+
if (backendContext.mode === glassEasel.BackendMode.Composed) {
|
|
33
|
+
const ctx = backendContext
|
|
34
|
+
const parent = backendElement as glassEasel.composedBackend.Element
|
|
35
|
+
placeholder = ctx.createElement('glass-easel-devtools-panel', 'glass-easel-devtools-panel')
|
|
36
|
+
parent.appendChild(placeholder)
|
|
37
|
+
} else if (backendContext.mode === glassEasel.BackendMode.Domlike) {
|
|
38
|
+
const ctx = backendContext
|
|
39
|
+
const parent = backendElement as glassEasel.domlikeBackend.Element
|
|
40
|
+
placeholder = ctx.document.createElement('glass-easel-devtools-panel')
|
|
41
|
+
parent.appendChild(placeholder)
|
|
42
|
+
} else if (backendContext.mode === glassEasel.BackendMode.Shadow) {
|
|
43
|
+
const parent = backendElement as glassEasel.backend.Element
|
|
44
|
+
const sr = parent.getShadowRoot()
|
|
45
|
+
if (!sr) throw new Error('the host element should be inside of a shadow tree')
|
|
46
|
+
placeholder = sr.createElement('glass-easel-devtools-panel', 'glass-easel-devtools-panel')
|
|
47
|
+
parent.appendChild(placeholder)
|
|
48
|
+
} else {
|
|
49
|
+
throw new Error('unrecognized host backend mode')
|
|
50
|
+
}
|
|
51
|
+
root.attach(
|
|
52
|
+
backendElement as unknown as glassEasel.GeneralBackendElement,
|
|
53
|
+
placeholder as unknown as glassEasel.GeneralBackendElement,
|
|
54
|
+
)
|
|
55
|
+
if (
|
|
56
|
+
backendContext.mode === glassEasel.BackendMode.Composed ||
|
|
57
|
+
backendContext.mode === glassEasel.BackendMode.Shadow
|
|
58
|
+
) {
|
|
59
|
+
const elem = placeholder as glassEasel.composedBackend.Element | glassEasel.backend.Element
|
|
60
|
+
elem.release()
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export const startup = (
|
|
65
|
+
hostContext: glassEasel.GeneralBackendContext,
|
|
66
|
+
hostElement: glassEasel.GeneralBackendElement,
|
|
67
|
+
messageChannel: MessageChannel,
|
|
68
|
+
) => {
|
|
69
|
+
setMessageChannel(messageChannel)
|
|
70
|
+
insertInto(hostContext, hostElement)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export const restart = () => {
|
|
74
|
+
if (!root) {
|
|
75
|
+
warn('cannot restart panel before startup')
|
|
76
|
+
return
|
|
77
|
+
}
|
|
78
|
+
const comp = root.get().asInstanceOf(componentDefinition)
|
|
79
|
+
comp?.restart()
|
|
80
|
+
}
|
package/src/events.ts
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { type builder } from 'glass-easel-miniprogram-adapter/dist/glass_easel_miniprogram_adapter'
|
|
2
|
+
import { type protocol, setEventHandler } from './message_channel'
|
|
3
|
+
|
|
4
|
+
export class EventDispatcher<
|
|
5
|
+
N extends string,
|
|
6
|
+
K extends string | number,
|
|
7
|
+
T extends { [k in N]: K },
|
|
8
|
+
> {
|
|
9
|
+
private keyName: N
|
|
10
|
+
private listeners = Object.create(null) as { [key: string | number]: ((args: T) => void)[] }
|
|
11
|
+
|
|
12
|
+
constructor(keyName: N) {
|
|
13
|
+
this.keyName = keyName
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
addListener(key: K, func: (args: T) => void) {
|
|
17
|
+
if (this.listeners[key]) this.listeners[key].push(func)
|
|
18
|
+
else this.listeners[key] = [func]
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
removeListener(key: K, func: (args: T) => void) {
|
|
22
|
+
if (this.listeners[key]) this.listeners[key] = this.listeners[key].filter((x) => x !== func)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
bindComponentLifetimes(
|
|
26
|
+
ctx: builder.BuilderContext<any, any, any>,
|
|
27
|
+
getKey: () => K,
|
|
28
|
+
func: (args: T) => void,
|
|
29
|
+
) {
|
|
30
|
+
const { lifetime } = ctx
|
|
31
|
+
lifetime('attached', () => {
|
|
32
|
+
this.addListener(getKey(), func)
|
|
33
|
+
})
|
|
34
|
+
lifetime('detached', () => {
|
|
35
|
+
this.removeListener(getKey(), func)
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
dispatch(args: T) {
|
|
40
|
+
const funcArr = this.listeners[args[this.keyName]]
|
|
41
|
+
funcArr?.forEach((f) => f(args))
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const childNodeCountUpdated = new EventDispatcher<
|
|
46
|
+
'nodeId',
|
|
47
|
+
protocol.NodeId,
|
|
48
|
+
protocol.dom.ChildNodeCountUpdated['detail']
|
|
49
|
+
>('nodeId')
|
|
50
|
+
setEventHandler('DOM.childNodeCountUpdated', (args) => {
|
|
51
|
+
childNodeCountUpdated.dispatch(args)
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
export const setChildNodes = new EventDispatcher<
|
|
55
|
+
'parentId',
|
|
56
|
+
protocol.NodeId,
|
|
57
|
+
protocol.dom.SetChildNodes['detail']
|
|
58
|
+
>('parentId')
|
|
59
|
+
setEventHandler('DOM.setChildNodes', (args) => {
|
|
60
|
+
setChildNodes.dispatch(args)
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
export const childNodeInserted = new EventDispatcher<
|
|
64
|
+
'parentNodeId',
|
|
65
|
+
protocol.NodeId,
|
|
66
|
+
protocol.dom.ChildNodeInserted['detail']
|
|
67
|
+
>('parentNodeId')
|
|
68
|
+
setEventHandler('DOM.childNodeInserted', (args) => {
|
|
69
|
+
childNodeInserted.dispatch(args)
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
export const childNodeRemoved = new EventDispatcher<
|
|
73
|
+
'parentNodeId',
|
|
74
|
+
protocol.NodeId,
|
|
75
|
+
protocol.dom.ChildNodeRemoved['detail']
|
|
76
|
+
>('parentNodeId')
|
|
77
|
+
setEventHandler('DOM.childNodeRemoved', (args) => {
|
|
78
|
+
childNodeRemoved.dispatch(args)
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
export const characterDataModified = new EventDispatcher<
|
|
82
|
+
'nodeId',
|
|
83
|
+
protocol.NodeId,
|
|
84
|
+
protocol.dom.CharacterDataModified['detail']
|
|
85
|
+
>('nodeId')
|
|
86
|
+
setEventHandler('DOM.characterDataModified', (args) => {
|
|
87
|
+
characterDataModified.dispatch(args)
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
export const attributeModified = new EventDispatcher<
|
|
91
|
+
'nodeId',
|
|
92
|
+
protocol.NodeId,
|
|
93
|
+
protocol.dom.AttributeModified['detail']
|
|
94
|
+
>('nodeId')
|
|
95
|
+
setEventHandler('DOM.attributeModified', (args) => {
|
|
96
|
+
attributeModified.dispatch(args)
|
|
97
|
+
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const componentDefinition = Component().property('src', String).register()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<img src="{{ src }}" />
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type glassEasel, type CodeSpace } from 'glass-easel-miniprogram-adapter'
|
|
2
|
+
import * as view from './view/view'
|
|
3
|
+
|
|
4
|
+
const getCompDef = (def: unknown): glassEasel.GeneralComponentDefinition => {
|
|
5
|
+
const d = def as { _$: glassEasel.GeneralComponentDefinition }
|
|
6
|
+
return d._$
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const loadGlobalComponents = (codeSpace: CodeSpace) => {
|
|
10
|
+
const space = codeSpace.getComponentSpace()
|
|
11
|
+
space.setGlobalUsingComponent('view', getCompDef(view.componentDefinition))
|
|
12
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export const componentDefinition = Component()
|
|
2
|
+
.options({
|
|
3
|
+
virtualHost: true,
|
|
4
|
+
})
|
|
5
|
+
.externalClasses(['class', 'hover-class'])
|
|
6
|
+
.property('style', String)
|
|
7
|
+
.property('hidden', Boolean)
|
|
8
|
+
.data(() => ({
|
|
9
|
+
hover: false,
|
|
10
|
+
}))
|
|
11
|
+
.init(({ self, setData, listener }) => {
|
|
12
|
+
const hoverStart = listener((ev) => {
|
|
13
|
+
setData({ hover: true })
|
|
14
|
+
self.triggerEvent('mouseenter', ev.detail, {})
|
|
15
|
+
})
|
|
16
|
+
const hoverEnd = listener((ev) => {
|
|
17
|
+
setData({ hover: false })
|
|
18
|
+
self.triggerEvent('mouseleave', ev.detail, {})
|
|
19
|
+
})
|
|
20
|
+
const mousedown = listener((ev) => {
|
|
21
|
+
self.triggerEvent('mousedown', ev.detail, {})
|
|
22
|
+
})
|
|
23
|
+
const mousemove = listener((ev) => {
|
|
24
|
+
self.triggerEvent('mousemove', ev.detail, {})
|
|
25
|
+
})
|
|
26
|
+
const mouseup = listener((ev) => {
|
|
27
|
+
self.triggerEvent('mouseup', ev.detail, {})
|
|
28
|
+
})
|
|
29
|
+
const touchstart = listener((ev) => {
|
|
30
|
+
self.triggerEvent('touchstart', ev.detail, {})
|
|
31
|
+
})
|
|
32
|
+
const touchmove = listener((ev) => {
|
|
33
|
+
self.triggerEvent('touchmove', ev.detail, {})
|
|
34
|
+
})
|
|
35
|
+
const touchend = listener((ev) => {
|
|
36
|
+
self.triggerEvent('touchend', ev.detail, {})
|
|
37
|
+
})
|
|
38
|
+
return { hoverStart, hoverEnd, mousedown, mousemove, mouseup, touchstart, touchmove, touchend }
|
|
39
|
+
})
|
|
40
|
+
.register()
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<div
|
|
2
|
+
class="class {{ hover ? 'hover-class' : '' }}"
|
|
3
|
+
style="{{ hidden ? 'display: none;' : '' }}{{ style }}"
|
|
4
|
+
bind:mouseenter="hoverStart"
|
|
5
|
+
bind:mouseleave="hoverEnd"
|
|
6
|
+
bind:mousedown="mousedown"
|
|
7
|
+
bind:mousemove="mousemove"
|
|
8
|
+
bind:mouseup="mouseup"
|
|
9
|
+
bind:touchstart="touchstart"
|
|
10
|
+
bind:touchmove="touchmove"
|
|
11
|
+
bind:touchend="touchend"
|
|
12
|
+
>
|
|
13
|
+
<slot/>
|
|
14
|
+
</div>
|
|
File without changes
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { protocol } from 'glass-easel-devtools-agent'
|
|
2
|
+
import { error, warn, debug } from './utils'
|
|
3
|
+
|
|
4
|
+
export { protocol } from 'glass-easel-devtools-agent'
|
|
5
|
+
|
|
6
|
+
export type PanelRecvMessage = protocol.AgentSendMessage
|
|
7
|
+
export type PanelSendMessage = protocol.AgentRecvMessage
|
|
8
|
+
|
|
9
|
+
export interface MessageChannel {
|
|
10
|
+
send(data: PanelSendMessage): void
|
|
11
|
+
recv(listener: (data: PanelRecvMessage) => void): void
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
let messageChannel: MessageChannel | null = null
|
|
15
|
+
const eventHandlers = Object.create(null) as Record<string, (data: any) => void>
|
|
16
|
+
const requestCallbacks = Object.create(null) as Record<number, (data: any) => void>
|
|
17
|
+
let requestIdInc = 1
|
|
18
|
+
|
|
19
|
+
export const setMessageChannel = (mc: MessageChannel) => {
|
|
20
|
+
messageChannel = mc
|
|
21
|
+
messageChannel.recv((data) => {
|
|
22
|
+
if (data.kind === 'event') {
|
|
23
|
+
const handler = eventHandlers[data.name]
|
|
24
|
+
if (!handler) {
|
|
25
|
+
warn(`missing event handler for ${data.name}`)
|
|
26
|
+
} else {
|
|
27
|
+
debug(`recv event`, data.name, data.detail)
|
|
28
|
+
handler(data.detail)
|
|
29
|
+
}
|
|
30
|
+
} else if (data.kind === 'response') {
|
|
31
|
+
const requestId = data.id
|
|
32
|
+
const callback = requestCallbacks[requestId]
|
|
33
|
+
if (!callback) {
|
|
34
|
+
warn(`illegal response for request ${requestId}`)
|
|
35
|
+
} else {
|
|
36
|
+
delete requestCallbacks[requestId]
|
|
37
|
+
debug(`recv response ${requestId}`, data.detail)
|
|
38
|
+
callback(data.detail)
|
|
39
|
+
}
|
|
40
|
+
} else if (data.kind === 'error') {
|
|
41
|
+
const requestId = data.id
|
|
42
|
+
const callback = requestCallbacks[requestId]
|
|
43
|
+
if (!callback) {
|
|
44
|
+
warn(`illegal error response for request ${requestId}`)
|
|
45
|
+
} else {
|
|
46
|
+
error(`request error for request ${requestId}: ${data.message || '(unknown)'}`, data.stack)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
})
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export const setEventHandler = <T extends keyof protocol.AgentEventKind>(
|
|
53
|
+
name: T,
|
|
54
|
+
handler: (detail: protocol.AgentEventKind[T]['detail']) => void,
|
|
55
|
+
) => {
|
|
56
|
+
eventHandlers[name] = handler
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export const sendRequest = <T extends keyof protocol.AgentRequestKind>(
|
|
60
|
+
name: T,
|
|
61
|
+
detail: protocol.AgentRequestKind[T]['request'],
|
|
62
|
+
): Promise<protocol.AgentRequestKind[T]['response']> => {
|
|
63
|
+
const requestId = requestIdInc
|
|
64
|
+
requestIdInc += 1
|
|
65
|
+
return new Promise((resolve): void => {
|
|
66
|
+
requestCallbacks[requestId] = resolve
|
|
67
|
+
debug(`send request ${requestId}`, name, detail)
|
|
68
|
+
messageChannel?.send({ kind: 'request', id: requestId, name, detail })
|
|
69
|
+
})
|
|
70
|
+
}
|