vuepress-plugin-md-power 1.0.0-rc.146 → 1.0.0-rc.147

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.
@@ -1,266 +1,160 @@
1
- // src/client/composables/codeRepl.ts
1
+ import { rustExecute } from "./rustRepl-iGLjb94D.js";
2
2
  import { onMounted, ref } from "vue";
3
3
  import { http } from "../utils/http.js";
4
4
  import { sleep } from "../utils/sleep.js";
5
5
 
6
- // src/client/composables/rustRepl.ts
7
- import { tryOnScopeDispose } from "@vueuse/core";
8
- var wsUrl = "wss://play.rust-lang.org/websocket";
9
- var payloadType = {
10
- connected: "websocket/connected",
11
- request: "output/execute/wsExecuteRequest",
12
- execute: {
13
- begin: "output/execute/wsExecuteBegin",
14
- // status: 'output/execute/wsExecuteStatus',
15
- stderr: "output/execute/wsExecuteStderr",
16
- stdout: "output/execute/wsExecuteStdout",
17
- end: "output/execute/wsExecuteEnd"
18
- }
6
+ //#region src/client/composables/codeRepl.ts
7
+ const ignoredNodes = [".diff.remove", ".vp-copy-ignore"];
8
+ const RE_LANGUAGE = /language-(\w+)/;
9
+ const api = {
10
+ go: "https://api.pengzhanbo.cn/repl/golang/run",
11
+ kotlin: "https://api.pengzhanbo.cn/repl/kotlin/run"
19
12
  };
20
- var ws = null;
21
- var isOpen = false;
22
- var uuid = 0;
23
- function connect() {
24
- if (isOpen)
25
- return Promise.resolve();
26
- ws = new WebSocket(wsUrl);
27
- uuid = 0;
28
- ws.addEventListener("open", () => {
29
- isOpen = true;
30
- send(
31
- payloadType.connected,
32
- { iAcceptThisIsAnUnsupportedApi: true },
33
- { websocket: true, sequenceNumber: uuid }
34
- );
35
- });
36
- ws.addEventListener("close", () => {
37
- isOpen = false;
38
- ws = null;
39
- });
40
- tryOnScopeDispose(() => ws?.close());
41
- return new Promise((resolve) => {
42
- function connected(e) {
43
- const data = JSON.parse(e.data);
44
- if (data.type === payloadType.connected) {
45
- ws?.removeEventListener("message", connected);
46
- resolve();
47
- }
48
- }
49
- ws?.addEventListener("message", connected);
50
- });
51
- }
52
- function send(type, payload, meta) {
53
- const msg = { type, meta, payload };
54
- ws?.send(JSON.stringify(msg));
55
- }
56
- async function rustExecute(code, { onEnd, onError, onStderr, onStdout, onBegin }) {
57
- await connect();
58
- const meta = { sequenceNumber: uuid++ };
59
- const payload = {
60
- backtrace: false,
61
- channel: "stable",
62
- crateType: "bin",
63
- edition: "2021",
64
- mode: "release",
65
- tests: false,
66
- code
67
- };
68
- send(payloadType.request, payload, meta);
69
- let stdout = "";
70
- let stderr = "";
71
- function onMessage(e) {
72
- const data = JSON.parse(e.data);
73
- const { type, payload: payload2, meta: _meta = {} } = data;
74
- if (_meta.sequenceNumber !== meta.sequenceNumber)
75
- return;
76
- if (type === payloadType.execute.begin)
77
- onBegin?.();
78
- if (type === payloadType.execute.stdout) {
79
- stdout += payload2;
80
- if (stdout.endsWith("\n")) {
81
- onStdout?.(stdout);
82
- stdout = "";
83
- }
84
- }
85
- if (type === payloadType.execute.stderr) {
86
- stderr += payload2;
87
- if (stderr.endsWith("\n")) {
88
- if (stderr.startsWith("error:")) {
89
- const index = stderr.indexOf("\n");
90
- onStderr?.(stderr.slice(0, index));
91
- onStderr?.(stderr.slice(index + 1));
92
- } else {
93
- onStderr?.(stderr);
94
- }
95
- stderr = "";
96
- }
97
- }
98
- if (type === payloadType.execute.end) {
99
- if (payload2.success === false)
100
- onError?.(payload2.exitDetail);
101
- ws?.removeEventListener("message", onMessage);
102
- onEnd?.();
103
- }
104
- }
105
- ws?.addEventListener("message", onMessage);
106
- }
107
-
108
- // src/client/composables/codeRepl.ts
109
- var ignoredNodes = [".diff.remove", ".vp-copy-ignore"];
110
- var RE_LANGUAGE = /language-(\w+)/;
111
- var api = {
112
- go: "https://api.pengzhanbo.cn/repl/golang/run",
113
- kotlin: "https://api.pengzhanbo.cn/repl/kotlin/run"
13
+ const langAlias = {
14
+ kt: "kotlin",
15
+ kotlin: "kotlin",
16
+ go: "go",
17
+ rust: "rust",
18
+ rs: "rust"
114
19
  };
115
- var langAlias = {
116
- kt: "kotlin",
117
- kotlin: "kotlin",
118
- go: "go",
119
- rust: "rust",
120
- rs: "rust"
121
- };
122
- var supportLang = ["kotlin", "go", "rust"];
20
+ const supportLang = [
21
+ "kotlin",
22
+ "go",
23
+ "rust"
24
+ ];
123
25
  function resolveLang(lang) {
124
- return lang ? langAlias[lang] || lang : "";
26
+ return lang ? langAlias[lang] || lang : "";
125
27
  }
126
28
  function resolveCode(el) {
127
- const clone = el.cloneNode(true);
128
- clone.querySelectorAll(ignoredNodes.join(",")).forEach((node) => node.remove());
129
- return clone.textContent || "";
29
+ const clone = el.cloneNode(true);
30
+ clone.querySelectorAll(ignoredNodes.join(",")).forEach((node) => node.remove());
31
+ return clone.textContent || "";
130
32
  }
131
33
  function resolveCodeInfo(el) {
132
- const wrapper = el.querySelector("div[class*=language-]");
133
- const lang = wrapper?.className.match(RE_LANGUAGE)?.[1];
134
- const codeEl = wrapper?.querySelector("pre");
135
- let code = "";
136
- if (codeEl)
137
- code = resolveCode(codeEl);
138
- return { lang: resolveLang(lang), code };
34
+ const wrapper = el.querySelector("div[class*=language-]");
35
+ const lang = wrapper?.className.match(RE_LANGUAGE)?.[1];
36
+ const codeEl = wrapper?.querySelector("pre");
37
+ let code = "";
38
+ if (codeEl) code = resolveCode(codeEl);
39
+ return {
40
+ lang: resolveLang(lang),
41
+ code
42
+ };
139
43
  }
140
44
  function useCodeRepl(el) {
141
- const lang = ref();
142
- const loaded = ref(true);
143
- const firstRun = ref(true);
144
- const finished = ref(true);
145
- const stdout = ref([]);
146
- const stderr = ref([]);
147
- const error = ref("");
148
- const backendVersion = ref("");
149
- onMounted(() => {
150
- if (el.value) {
151
- const info = resolveCodeInfo(el.value);
152
- lang.value = info.lang;
153
- }
154
- });
155
- const executeMap = {
156
- kotlin: executeKotlin,
157
- go: executeGolang,
158
- rust: executeRust
159
- };
160
- function onCleanRun() {
161
- loaded.value = false;
162
- finished.value = false;
163
- stdout.value = [];
164
- stderr.value = [];
165
- error.value = "";
166
- firstRun.value = true;
167
- backendVersion.value = "";
168
- }
169
- async function onRunCode() {
170
- if (!el.value || !loaded.value)
171
- return;
172
- const info = resolveCodeInfo(el.value);
173
- lang.value = info.lang;
174
- if (!lang.value || !info.code || !supportLang.includes(lang.value))
175
- return;
176
- if (firstRun.value)
177
- firstRun.value = false;
178
- loaded.value = false;
179
- finished.value = false;
180
- stdout.value = [];
181
- stderr.value = [];
182
- error.value = "";
183
- await executeMap[lang.value]?.(info.code);
184
- }
185
- async function executeGolang(code) {
186
- const res = await http.post(api.go, { code });
187
- backendVersion.value = `v${res.version}`;
188
- loaded.value = true;
189
- if (res.error) {
190
- error.value = res.error;
191
- finished.value = true;
192
- return;
193
- }
194
- const events = res.events || [];
195
- for (const event of events) {
196
- if (event.kind === "stdout") {
197
- if (event.delay)
198
- await sleep(event.delay / 1e6);
199
- stdout.value.push(event.message);
200
- } else if (event.kind === "stderr") {
201
- stderr.value.push(event.message);
202
- }
203
- }
204
- finished.value = true;
205
- }
206
- async function executeKotlin(code) {
207
- const filename = "File.kt";
208
- const res = await http.post(api.kotlin, {
209
- args: "",
210
- files: [{ name: filename, publicId: "", text: code }]
211
- });
212
- backendVersion.value = `v${res.version}`;
213
- loaded.value = true;
214
- if (res.errors) {
215
- const errors = Array.isArray(res.errors[filename]) ? res.errors[filename] : [res.errors[filename]];
216
- if (errors.length) {
217
- errors.forEach(
218
- ({ message, severity }) => severity === "ERROR" && stderr.value.push(message)
219
- );
220
- }
221
- }
222
- stdout.value.push(res.text);
223
- finished.value = true;
224
- }
225
- async function executeRust(code) {
226
- await rustExecute(code, {
227
- onBegin: () => {
228
- loaded.value = true;
229
- finished.value = false;
230
- stdout.value = [];
231
- stderr.value = [];
232
- error.value = "";
233
- backendVersion.value = "release";
234
- },
235
- onError(message) {
236
- error.value = message;
237
- },
238
- onStdout(message) {
239
- stdout.value.push(message);
240
- },
241
- onStderr(message) {
242
- stderr.value.push(message);
243
- },
244
- onEnd: () => {
245
- finished.value = true;
246
- }
247
- });
248
- }
249
- return {
250
- onRunCode,
251
- onCleanRun,
252
- lang,
253
- backendVersion,
254
- firstRun,
255
- stderr,
256
- stdout,
257
- loaded,
258
- finished,
259
- error
260
- };
45
+ const lang = ref();
46
+ const loaded = ref(true);
47
+ const firstRun = ref(true);
48
+ const finished = ref(true);
49
+ const stdout = ref([]);
50
+ const stderr = ref([]);
51
+ const error = ref("");
52
+ const backendVersion = ref("");
53
+ onMounted(() => {
54
+ if (el.value) {
55
+ const info = resolveCodeInfo(el.value);
56
+ lang.value = info.lang;
57
+ }
58
+ });
59
+ const executeMap = {
60
+ kotlin: executeKotlin,
61
+ go: executeGolang,
62
+ rust: executeRust
63
+ };
64
+ function onCleanRun() {
65
+ loaded.value = false;
66
+ finished.value = false;
67
+ stdout.value = [];
68
+ stderr.value = [];
69
+ error.value = "";
70
+ firstRun.value = true;
71
+ backendVersion.value = "";
72
+ }
73
+ async function onRunCode() {
74
+ if (!el.value || !loaded.value) return;
75
+ const info = resolveCodeInfo(el.value);
76
+ lang.value = info.lang;
77
+ if (!lang.value || !info.code || !supportLang.includes(lang.value)) return;
78
+ if (firstRun.value) firstRun.value = false;
79
+ loaded.value = false;
80
+ finished.value = false;
81
+ stdout.value = [];
82
+ stderr.value = [];
83
+ error.value = "";
84
+ await executeMap[lang.value]?.(info.code);
85
+ }
86
+ async function executeGolang(code) {
87
+ const res = await http.post(api.go, { code });
88
+ backendVersion.value = `v${res.version}`;
89
+ loaded.value = true;
90
+ if (res.error) {
91
+ error.value = res.error;
92
+ finished.value = true;
93
+ return;
94
+ }
95
+ const events = res.events || [];
96
+ for (const event of events) if (event.kind === "stdout") {
97
+ if (event.delay) await sleep(event.delay / 1e6);
98
+ stdout.value.push(event.message);
99
+ } else if (event.kind === "stderr") stderr.value.push(event.message);
100
+ finished.value = true;
101
+ }
102
+ async function executeKotlin(code) {
103
+ const filename = "File.kt";
104
+ const res = await http.post(api.kotlin, {
105
+ args: "",
106
+ files: [{
107
+ name: filename,
108
+ publicId: "",
109
+ text: code
110
+ }]
111
+ });
112
+ backendVersion.value = `v${res.version}`;
113
+ loaded.value = true;
114
+ if (res.errors) {
115
+ const errors = Array.isArray(res.errors[filename]) ? res.errors[filename] : [res.errors[filename]];
116
+ if (errors.length) errors.forEach(({ message, severity }) => severity === "ERROR" && stderr.value.push(message));
117
+ }
118
+ stdout.value.push(res.text);
119
+ finished.value = true;
120
+ }
121
+ async function executeRust(code) {
122
+ await rustExecute(code, {
123
+ onBegin: () => {
124
+ loaded.value = true;
125
+ finished.value = false;
126
+ stdout.value = [];
127
+ stderr.value = [];
128
+ error.value = "";
129
+ backendVersion.value = "release";
130
+ },
131
+ onError(message) {
132
+ error.value = message;
133
+ },
134
+ onStdout(message) {
135
+ stdout.value.push(message);
136
+ },
137
+ onStderr(message) {
138
+ stderr.value.push(message);
139
+ },
140
+ onEnd: () => {
141
+ finished.value = true;
142
+ }
143
+ });
144
+ }
145
+ return {
146
+ onRunCode,
147
+ onCleanRun,
148
+ lang,
149
+ backendVersion,
150
+ firstRun,
151
+ stderr,
152
+ stdout,
153
+ loaded,
154
+ finished,
155
+ error
156
+ };
261
157
  }
262
- export {
263
- resolveCode,
264
- resolveCodeInfo,
265
- useCodeRepl
266
- };
158
+
159
+ //#endregion
160
+ export { resolveCode, resolveCodeInfo, useCodeRepl };
@@ -1,48 +1,41 @@
1
- import * as vue from 'vue';
2
- import { ShallowRef, MaybeRefOrGetter } from 'vue';
1
+ import { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
3
2
 
3
+ //#region src/client/composables/demo.d.ts
4
4
  interface DemoConfig {
5
- html: string;
6
- css: string;
7
- script: string;
8
- jsLib: string[];
9
- cssLib: string[];
5
+ html: string;
6
+ css: string;
7
+ script: string;
8
+ jsLib: string[];
9
+ cssLib: string[];
10
10
  }
11
- declare function useExpand(defaultExpand?: boolean): readonly [vue.Ref<boolean, boolean>, () => void];
12
- declare function useResources(el: ShallowRef<HTMLDivElement | null>, config: MaybeRefOrGetter<DemoConfig | undefined>): {
13
- resources: vue.ComputedRef<{
14
- name: string;
15
- items: {
16
- name: string;
17
- url: string;
18
- }[];
19
- }[]>;
20
- showResources: vue.Ref<boolean, boolean>;
21
- toggleResources: () => void;
22
- };
23
- declare function useFence(fence: ShallowRef<HTMLDivElement | null>, config: MaybeRefOrGetter<DemoConfig | undefined>): vue.Ref<{
24
- js: string;
25
- css: string;
26
- html: string;
27
- jsType: string;
28
- cssType: string;
29
- }, {
30
- js: string;
31
- css: string;
32
- html: string;
33
- jsType: string;
34
- cssType: string;
35
- } | {
36
- js: string;
37
- css: string;
38
- html: string;
39
- jsType: string;
40
- cssType: string;
41
- }>;
11
+ declare function useExpand(defaultExpand?: boolean): readonly [Ref<boolean>, () => void];
12
+ interface ResourceItem {
13
+ name: string;
14
+ items: SubResourceItem[];
15
+ }
16
+ interface SubResourceItem {
17
+ name: string;
18
+ url: string;
19
+ }
20
+ interface UseResourcesResult {
21
+ resources: ComputedRef<ResourceItem[]>;
22
+ showResources: Ref<boolean>;
23
+ toggleResources: () => void;
24
+ }
25
+ declare function useResources(el: ShallowRef<HTMLDivElement | null>, config: MaybeRefOrGetter<DemoConfig | undefined>): UseResourcesResult;
26
+ interface FenceData {
27
+ js: string;
28
+ css: string;
29
+ html: string;
30
+ jsType: string;
31
+ cssType: string;
32
+ }
33
+ declare function useFence(fence: ShallowRef<HTMLDivElement | null>, config: MaybeRefOrGetter<DemoConfig | undefined>): Ref<FenceData>;
42
34
  declare function useNormalDemo(draw: ShallowRef<HTMLIFrameElement | null>, title: MaybeRefOrGetter<string | undefined>, config: MaybeRefOrGetter<DemoConfig | undefined>): {
43
- id: string;
44
- height: vue.Ref<string, string>;
35
+ id: string;
36
+ height: Ref<string>;
45
37
  };
46
38
  declare function parseData(data: any): any;
47
39
 
48
- export { type DemoConfig, parseData, useExpand, useFence, useNormalDemo, useResources };
40
+ //#endregion
41
+ export { DemoConfig, parseData, useExpand, useFence, useNormalDemo, useResources };