@mirascript/mirascript 0.1.35 → 0.1.36
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/{chunk-PYMZMMRB.js → chunk-RQRTM6AH.js} +11 -49
- package/dist/{chunk-PYMZMMRB.js.map → chunk-RQRTM6AH.js.map} +2 -2
- package/dist/cli/index.js +1 -1
- package/dist/compiler/worker-manager.d.ts +7 -2
- package/dist/compiler/worker-manager.d.ts.map +1 -1
- package/dist/compiler/worker.d.ts +8 -4
- package/dist/compiler/worker.d.ts.map +1 -1
- package/dist/compiler/worker.js +19 -24
- package/dist/compiler/worker.js.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +6 -7
- package/src/compiler/worker-manager.ts +21 -51
- package/src/compiler/worker.ts +21 -35
|
@@ -128,58 +128,20 @@ function compileFast(code, options) {
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
// src/compiler/worker-manager.ts
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
const w = new Worker(new URL("#compiler/worker", import.meta.url), {
|
|
131
|
+
import { WorkerPool } from "@cloudpss/worker/pool";
|
|
132
|
+
var pool = /* @__PURE__ */ new WorkerPool(
|
|
133
|
+
() => {
|
|
134
|
+
return new Worker(new URL("#compiler/worker", import.meta.url), {
|
|
136
135
|
type: "module",
|
|
137
136
|
name: "@mirascript/compiler"
|
|
138
137
|
});
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
if (e.data === "ready") {
|
|
145
|
-
cleanUp();
|
|
146
|
-
resolve(w);
|
|
147
|
-
} else if (e.data instanceof Error) {
|
|
148
|
-
cleanUp();
|
|
149
|
-
reject(e.data);
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
w.addEventListener("error", onError);
|
|
153
|
-
w.addEventListener("message", onMessage);
|
|
154
|
-
const cleanUp = () => {
|
|
155
|
-
w.removeEventListener("error", onError);
|
|
156
|
-
w.removeEventListener("message", onMessage);
|
|
157
|
-
};
|
|
158
|
-
setTimeout(() => {
|
|
159
|
-
onError(new ErrorEvent("error", { message: "Worker did not respond in time" }));
|
|
160
|
-
}, 3e4);
|
|
161
|
-
});
|
|
162
|
-
return worker;
|
|
163
|
-
}
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: "@mirascript/compiler"
|
|
141
|
+
}
|
|
142
|
+
);
|
|
164
143
|
async function compileWorker(...args) {
|
|
165
|
-
|
|
166
|
-
const seq = Math.random();
|
|
167
|
-
worker2.postMessage([seq, ...args]);
|
|
168
|
-
return await new Promise((resolve, reject) => {
|
|
169
|
-
const callback = (ev) => {
|
|
170
|
-
const data = ev.data;
|
|
171
|
-
if (!Array.isArray(data)) return;
|
|
172
|
-
const [retSeq, ...rest] = data;
|
|
173
|
-
if (seq !== retSeq) return;
|
|
174
|
-
worker2.removeEventListener("message", callback);
|
|
175
|
-
if (rest.length === 2) {
|
|
176
|
-
resolve(rest);
|
|
177
|
-
} else {
|
|
178
|
-
reject(rest[0]);
|
|
179
|
-
}
|
|
180
|
-
};
|
|
181
|
-
worker2.addEventListener("message", callback);
|
|
182
|
-
});
|
|
144
|
+
return await pool.call("compile", args);
|
|
183
145
|
}
|
|
184
146
|
|
|
185
147
|
// src/compiler/index.ts
|
|
@@ -223,4 +185,4 @@ export {
|
|
|
223
185
|
compile,
|
|
224
186
|
compileSync
|
|
225
187
|
};
|
|
226
|
-
//# sourceMappingURL=chunk-
|
|
188
|
+
//# sourceMappingURL=chunk-RQRTM6AH.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/compiler/compile-fast.ts", "../src/compiler/worker-manager.ts", "../src/compiler/index.ts"],
|
|
4
|
-
"mappings": "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
|
|
5
|
-
"names": [
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
6
|
}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type WorkerMethod } from '@cloudpss/worker/pool';
|
|
2
|
+
import type WorkerApi from './worker.js';
|
|
2
3
|
/**
|
|
3
4
|
* 生成 MiraScript 对应的 JavaScript 代码
|
|
4
5
|
*/
|
|
5
|
-
export declare function compileWorker(...args: Parameters<typeof compile
|
|
6
|
+
export declare function compileWorker(...args: Parameters<WorkerMethod<typeof WorkerApi, 'compile'>>): Promise<ReturnType<WorkerMethod<typeof WorkerApi, 'compile'>>>;
|
|
7
|
+
/**
|
|
8
|
+
* 清理工作池
|
|
9
|
+
*/
|
|
10
|
+
export declare function destroyWorkerPool(): void;
|
|
6
11
|
//# sourceMappingURL=worker-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-manager.d.ts","sourceRoot":"","sources":["../../src/compiler/worker-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"worker-manager.d.ts","sourceRoot":"","sources":["../../src/compiler/worker-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAczC;;GAEG;AACH,wBAAsB,aAAa,CAC/B,GAAG,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,OAAO,SAAS,EAAE,SAAS,CAAC,CAAC,GAC/D,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAEhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { ScriptInput, TranspileOptions } from './types.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import { WorkerResult } from '@cloudpss/worker/pool';
|
|
3
|
+
declare const _default: import("@cloudpss/worker/pool").WorkerInterface<{
|
|
4
|
+
/**
|
|
5
|
+
* 生成 MiraScript 对应的 JavaScript 代码
|
|
6
|
+
*/
|
|
7
|
+
compile(script: ScriptInput, options: TranspileOptions): Promise<WorkerResult<readonly [undefined, Uint32Array<ArrayBufferLike>]> | WorkerResult<readonly [string, Uint32Array<ArrayBufferLike>]>>;
|
|
8
|
+
}>;
|
|
9
|
+
export default _default;
|
|
6
10
|
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/compiler/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/compiler/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAIhE,OAAO,EAAU,YAAY,EAAE,MAAM,uBAAuB,CAAC;;IAIrD;;OAEG;oBACmB,WAAW,WAAW,gBAAgB;;AALpE,wBAoBG"}
|
package/dist/compiler/worker.js
CHANGED
|
@@ -6,31 +6,26 @@ import {
|
|
|
6
6
|
} from "../chunk-SEZII6RI.js";
|
|
7
7
|
|
|
8
8
|
// src/compiler/worker.ts
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
});
|
|
9
|
+
import { expose, WorkerResult } from "@cloudpss/worker/pool";
|
|
10
|
+
var worker_default = expose(async () => {
|
|
11
|
+
const compiler = {
|
|
12
|
+
/**
|
|
13
|
+
* 生成 MiraScript 对应的 JavaScript 代码
|
|
14
|
+
*/
|
|
15
|
+
async compile(script, options) {
|
|
16
|
+
const [bytecode, errors] = await generateBytecode(script, options);
|
|
17
|
+
if (bytecode == null) {
|
|
18
|
+
return WorkerResult([void 0, errors], [errors.buffer]);
|
|
19
|
+
}
|
|
20
|
+
const sourcemaps = options.sourceMap ? parseDiagnostics(script, errors, (c) => c === DiagnosticCode.SourceMap).sourcemaps : [];
|
|
21
|
+
const generatedCode = emit(script, bytecode, sourcemaps, options);
|
|
22
|
+
return WorkerResult([generatedCode, errors], [errors.buffer]);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
await compiler.compile("{}", {});
|
|
26
|
+
return compiler;
|
|
28
27
|
});
|
|
29
|
-
compile("{}", {}).then(
|
|
30
|
-
() => postMessage("ready"),
|
|
31
|
-
(ex) => postMessage(ex)
|
|
32
|
-
);
|
|
33
28
|
export {
|
|
34
|
-
|
|
29
|
+
worker_default as default
|
|
35
30
|
};
|
|
36
31
|
//# sourceMappingURL=worker.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/compiler/worker.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;
|
|
4
|
+
"mappings": ";;;;;;;;AAIA,SAAS,QAAQ,oBAAoB;AAErC,IAAO,iBAAQ,OAAO,YAAY;AAC9B,QAAM,WAAW;AAAA;AAAA;AAAA;AAAA,IAIb,MAAM,QAAQ,QAAqB,SAA2B;AAC1D,YAAM,CAAC,UAAU,MAAM,IAAI,MAAM,iBAAiB,QAAQ,OAAO;AACjE,UAAI,YAAY,MAAM;AAClB,eAAO,aAAa,CAAC,QAAW,MAAM,GAAG,CAAC,OAAO,MAAM,CAAC;AAAA,MAC5D;AACA,YAAM,aAAa,QAAQ,YACrB,iBAAiB,QAAQ,QAAQ,CAAC,MAAM,MAAM,eAAe,SAAS,EAAE,aACxE,CAAC;AACP,YAAM,gBAAgB,KAAK,QAAQ,UAAU,YAAY,OAAO;AAChE,aAAO,aAAa,CAAC,eAAe,MAAM,GAAG,CAAC,OAAO,MAAM,CAAC;AAAA,IAChE;AAAA,EACJ;AAEA,QAAM,SAAS,QAAQ,MAAM,CAAC,CAAC;AAC/B,SAAO;AACX,CAAC;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mirascript/mirascript",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.36",
|
|
4
4
|
"author": "CloudPSS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "An expression based scripting language.",
|
|
@@ -31,23 +31,22 @@
|
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
+
"@cloudpss/worker": "^0.1.9",
|
|
34
35
|
"@commander-js/extra-typings": "^14.0.0",
|
|
35
36
|
"ansi-styles": "^6.2.3",
|
|
36
37
|
"commander": "^14.0.2",
|
|
37
38
|
"source-map-js": "^1.2.1",
|
|
38
39
|
"supports-color": "^10.2.2",
|
|
39
|
-
"@mirascript/bindings": "~0.1.
|
|
40
|
-
"@mirascript/constants": "~0.1.
|
|
40
|
+
"@mirascript/bindings": "~0.1.36",
|
|
41
|
+
"@mirascript/constants": "~0.1.36"
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|
|
43
|
-
"@types/node": "^25.0.
|
|
44
|
-
"@types/sinon": "^21.0.0",
|
|
44
|
+
"@types/node": "^25.0.8",
|
|
45
45
|
"ava": "^6.4.1",
|
|
46
46
|
"c8": "^10.1.3",
|
|
47
47
|
"madge": "^8.0.0",
|
|
48
|
-
"sinon": "^21.0.1",
|
|
49
48
|
"tinybench": "^6.0.0",
|
|
50
|
-
"type-fest": "^5.
|
|
49
|
+
"type-fest": "^5.4.0"
|
|
51
50
|
},
|
|
52
51
|
"scripts": {
|
|
53
52
|
"watch": "pnpm build:ts --watch",
|
|
@@ -1,60 +1,30 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { WorkerPool, type WorkerMethod } from '@cloudpss/worker/pool';
|
|
2
|
+
import type WorkerApi from './worker.js';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
if (worker) return worker;
|
|
7
|
-
worker = new Promise((resolve, reject) => {
|
|
8
|
-
const w = new Worker(new URL('#compiler/worker', import.meta.url), {
|
|
4
|
+
const pool = /*#__PURE__*/ new WorkerPool<typeof WorkerApi>(
|
|
5
|
+
() => {
|
|
6
|
+
return new Worker(new URL('#compiler/worker', import.meta.url), {
|
|
9
7
|
type: 'module',
|
|
10
8
|
name: '@mirascript/compiler',
|
|
11
9
|
});
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
if (e.data === 'ready') {
|
|
18
|
-
cleanUp();
|
|
19
|
-
resolve(w);
|
|
20
|
-
} else if (e.data instanceof Error) {
|
|
21
|
-
cleanUp();
|
|
22
|
-
reject(e.data);
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
w.addEventListener('error', onError);
|
|
26
|
-
w.addEventListener('message', onMessage);
|
|
27
|
-
const cleanUp = () => {
|
|
28
|
-
w.removeEventListener('error', onError);
|
|
29
|
-
w.removeEventListener('message', onMessage);
|
|
30
|
-
};
|
|
31
|
-
setTimeout(() => {
|
|
32
|
-
onError(new ErrorEvent('error', { message: 'Worker did not respond in time' }));
|
|
33
|
-
}, 30000);
|
|
34
|
-
});
|
|
35
|
-
return worker;
|
|
36
|
-
}
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: '@mirascript/compiler',
|
|
13
|
+
},
|
|
14
|
+
);
|
|
37
15
|
|
|
38
16
|
/**
|
|
39
17
|
* 生成 MiraScript 对应的 JavaScript 代码
|
|
40
18
|
*/
|
|
41
|
-
export async function compileWorker(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
if (rest.length === 2) {
|
|
53
|
-
resolve(rest);
|
|
54
|
-
} else {
|
|
55
|
-
reject(rest[0]);
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
worker.addEventListener('message', callback);
|
|
59
|
-
});
|
|
19
|
+
export async function compileWorker(
|
|
20
|
+
...args: Parameters<WorkerMethod<typeof WorkerApi, 'compile'>>
|
|
21
|
+
): Promise<ReturnType<WorkerMethod<typeof WorkerApi, 'compile'>>> {
|
|
22
|
+
return await pool.call('compile', args);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 清理工作池
|
|
27
|
+
*/
|
|
28
|
+
export function destroyWorkerPool(): void {
|
|
29
|
+
pool.destroy();
|
|
60
30
|
}
|
package/src/compiler/worker.ts
CHANGED
|
@@ -2,40 +2,26 @@ import type { ScriptInput, TranspileOptions } from './types.js';
|
|
|
2
2
|
import { emit } from './emit/index.js';
|
|
3
3
|
import { generateBytecode } from './generate-bytecode.js';
|
|
4
4
|
import { DiagnosticCode, parseDiagnostics } from './diagnostic.js';
|
|
5
|
+
import { expose, WorkerResult } from '@cloudpss/worker/pool';
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (!Array.isArray(data)) return;
|
|
27
|
-
const [seq, ...args] = data;
|
|
28
|
-
if (typeof seq != 'number' || !args.length) return;
|
|
29
|
-
void compile(...args)
|
|
30
|
-
.then(([script, errors]) => {
|
|
31
|
-
postMessage([seq, script, errors], { transfer: [errors.buffer] });
|
|
32
|
-
})
|
|
33
|
-
.catch((error) => {
|
|
34
|
-
postMessage([seq, error instanceof Error ? error : new Error(String(error))]);
|
|
35
|
-
});
|
|
7
|
+
export default expose(async () => {
|
|
8
|
+
const compiler = {
|
|
9
|
+
/**
|
|
10
|
+
* 生成 MiraScript 对应的 JavaScript 代码
|
|
11
|
+
*/
|
|
12
|
+
async compile(script: ScriptInput, options: TranspileOptions) {
|
|
13
|
+
const [bytecode, errors] = await generateBytecode(script, options);
|
|
14
|
+
if (bytecode == null) {
|
|
15
|
+
return WorkerResult([undefined, errors], [errors.buffer]);
|
|
16
|
+
}
|
|
17
|
+
const sourcemaps = options.sourceMap
|
|
18
|
+
? parseDiagnostics(script, errors, (c) => c === DiagnosticCode.SourceMap).sourcemaps
|
|
19
|
+
: [];
|
|
20
|
+
const generatedCode = emit(script, bytecode, sourcemaps, options);
|
|
21
|
+
return WorkerResult([generatedCode, errors], [errors.buffer]);
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
// 预热编译器
|
|
25
|
+
await compiler.compile('{}', {});
|
|
26
|
+
return compiler;
|
|
36
27
|
});
|
|
37
|
-
|
|
38
|
-
compile('{}', {}).then(
|
|
39
|
-
() => postMessage('ready'),
|
|
40
|
-
(ex) => postMessage(ex),
|
|
41
|
-
);
|