feat: use pnpm & lock core-js shim

This commit is contained in:
2023-10-25 11:29:01 +08:00
parent 5bf4b1c09e
commit 54eaae96bd
32 changed files with 444 additions and 178 deletions

View File

@@ -13,7 +13,7 @@
"scripts": {
"clean": "rimraf dist",
"watch": "tsc --watch",
"build": "yarn clean && tsc",
"build": "pnpm clean && tsc",
"test": "echo \"Error: run tests from root\" && exit 1"
},
"dependencies": {
@@ -22,9 +22,6 @@
"core-js": "^3.32.2"
},
"devDependencies": {
"@ccms/nashorn": "^0.28.0-beta.3",
"reflect-metadata": "^0.1.13",
"rimraf": "^4.4.1",
"typescript": "^4.9.5"
"@ccms/nashorn": "^0.28.0-beta.3"
}
}

View File

@@ -0,0 +1,239 @@
'use strict';
import 'core-js/modules/es.symbol';
import 'core-js/modules/es.symbol.description';
import 'core-js/modules/es.symbol.async-iterator';
import 'core-js/modules/es.symbol.has-instance';
import 'core-js/modules/es.symbol.is-concat-spreadable';
import 'core-js/modules/es.symbol.iterator';
import 'core-js/modules/es.symbol.match';
import 'core-js/modules/es.symbol.match-all';
import 'core-js/modules/es.symbol.replace';
import 'core-js/modules/es.symbol.search';
import 'core-js/modules/es.symbol.species';
import 'core-js/modules/es.symbol.split';
import 'core-js/modules/es.symbol.to-primitive';
import 'core-js/modules/es.symbol.to-string-tag';
import 'core-js/modules/es.symbol.unscopables';
import 'core-js/modules/es.array.at';
import 'core-js/modules/es.array.concat';
import 'core-js/modules/es.array.copy-within';
import 'core-js/modules/es.array.every';
import 'core-js/modules/es.array.fill';
import 'core-js/modules/es.array.filter';
import 'core-js/modules/es.array.find';
import 'core-js/modules/es.array.find-index';
import 'core-js/modules/es.array.find-last';
import 'core-js/modules/es.array.find-last-index';
import 'core-js/modules/es.array.flat';
import 'core-js/modules/es.array.flat-map';
import 'core-js/modules/es.array.for-each';
import 'core-js/modules/es.array.from';
import 'core-js/modules/es.array.includes';
import 'core-js/modules/es.array.index-of';
import 'core-js/modules/es.array.is-array';
import 'core-js/modules/es.array.iterator';
import 'core-js/modules/es.array.join';
import 'core-js/modules/es.array.last-index-of';
import 'core-js/modules/es.array.map';
import 'core-js/modules/es.array.of';
import 'core-js/modules/es.array.push';
import 'core-js/modules/es.array.reduce';
import 'core-js/modules/es.array.reduce-right';
import 'core-js/modules/es.array.reverse';
import 'core-js/modules/es.array.slice';
import 'core-js/modules/es.array.some';
import 'core-js/modules/es.array.sort';
import 'core-js/modules/es.array.species';
import 'core-js/modules/es.array.splice';
import 'core-js/modules/es.array.to-reversed';
import 'core-js/modules/es.array.to-sorted';
import 'core-js/modules/es.array.to-spliced';
import 'core-js/modules/es.array.unscopables.flat';
import 'core-js/modules/es.array.unscopables.flat-map';
import 'core-js/modules/es.array.unshift';
import 'core-js/modules/es.array.with';
import 'core-js/modules/es.array-buffer.constructor';
import 'core-js/modules/es.array-buffer.is-view';
import 'core-js/modules/es.array-buffer.slice';
import 'core-js/modules/es.data-view';
import 'core-js/modules/es.date.get-year';
import 'core-js/modules/es.date.now';
import 'core-js/modules/es.date.set-year';
import 'core-js/modules/es.date.to-gmt-string';
import 'core-js/modules/es.date.to-iso-string';
import 'core-js/modules/es.date.to-json';
import 'core-js/modules/es.date.to-primitive';
import 'core-js/modules/es.date.to-string';
import 'core-js/modules/es.escape';
import 'core-js/modules/es.function.bind';
import 'core-js/modules/es.function.has-instance';
import 'core-js/modules/es.function.name';
import 'core-js/modules/es.global-this';
import 'core-js/modules/es.json.stringify';
import 'core-js/modules/es.json.to-string-tag';
import 'core-js/modules/es.map';
import 'core-js/modules/es.math.acosh';
import 'core-js/modules/es.math.asinh';
import 'core-js/modules/es.math.atanh';
import 'core-js/modules/es.math.cbrt';
import 'core-js/modules/es.math.clz32';
import 'core-js/modules/es.math.cosh';
import 'core-js/modules/es.math.expm1';
import 'core-js/modules/es.math.fround';
import 'core-js/modules/es.math.hypot';
import 'core-js/modules/es.math.imul';
import 'core-js/modules/es.math.log10';
import 'core-js/modules/es.math.log1p';
import 'core-js/modules/es.math.log2';
import 'core-js/modules/es.math.sign';
import 'core-js/modules/es.math.sinh';
import 'core-js/modules/es.math.tanh';
import 'core-js/modules/es.math.to-string-tag';
import 'core-js/modules/es.math.trunc';
import 'core-js/modules/es.number.constructor';
import 'core-js/modules/es.number.epsilon';
import 'core-js/modules/es.number.is-finite';
import 'core-js/modules/es.number.is-integer';
import 'core-js/modules/es.number.is-nan';
import 'core-js/modules/es.number.is-safe-integer';
import 'core-js/modules/es.number.max-safe-integer';
import 'core-js/modules/es.number.min-safe-integer';
import 'core-js/modules/es.number.parse-float';
import 'core-js/modules/es.number.parse-int';
import 'core-js/modules/es.number.to-exponential';
import 'core-js/modules/es.number.to-fixed';
import 'core-js/modules/es.number.to-precision';
import 'core-js/modules/es.object.assign';
import 'core-js/modules/es.object.create';
import 'core-js/modules/es.object.define-getter';
import 'core-js/modules/es.object.define-properties';
import 'core-js/modules/es.object.define-property';
import 'core-js/modules/es.object.define-setter';
import 'core-js/modules/es.object.entries';
import 'core-js/modules/es.object.freeze';
import 'core-js/modules/es.object.from-entries';
import 'core-js/modules/es.object.get-own-property-descriptor';
import 'core-js/modules/es.object.get-own-property-descriptors';
import 'core-js/modules/es.object.get-own-property-names';
import 'core-js/modules/es.object.get-prototype-of';
import 'core-js/modules/es.object.has-own';
import 'core-js/modules/es.object.is';
import 'core-js/modules/es.object.is-extensible';
import 'core-js/modules/es.object.is-frozen';
import 'core-js/modules/es.object.is-sealed';
import 'core-js/modules/es.object.keys';
import 'core-js/modules/es.object.lookup-getter';
import 'core-js/modules/es.object.lookup-setter';
import 'core-js/modules/es.object.prevent-extensions';
import 'core-js/modules/es.object.proto';
import 'core-js/modules/es.object.seal';
import 'core-js/modules/es.object.values';
import 'core-js/modules/es.parse-float';
import 'core-js/modules/es.parse-int';
import 'core-js/modules/es.promise';
import 'core-js/modules/es.promise.all-settled';
import 'core-js/modules/es.promise.any';
import 'core-js/modules/es.promise.finally';
import 'core-js/modules/es.reflect.apply';
import 'core-js/modules/es.reflect.construct';
import 'core-js/modules/es.reflect.define-property';
import 'core-js/modules/es.reflect.delete-property';
import 'core-js/modules/es.reflect.get';
import 'core-js/modules/es.reflect.get-own-property-descriptor';
import 'core-js/modules/es.reflect.get-prototype-of';
import 'core-js/modules/es.reflect.has';
import 'core-js/modules/es.reflect.is-extensible';
import 'core-js/modules/es.reflect.own-keys';
import 'core-js/modules/es.reflect.prevent-extensions';
import 'core-js/modules/es.reflect.set';
import 'core-js/modules/es.reflect.set-prototype-of';
import 'core-js/modules/es.reflect.to-string-tag';
import 'core-js/modules/es.regexp.constructor';
import 'core-js/modules/es.regexp.dot-all';
import 'core-js/modules/es.regexp.exec';
import 'core-js/modules/es.regexp.flags';
import 'core-js/modules/es.regexp.sticky';
import 'core-js/modules/es.regexp.test';
import 'core-js/modules/es.regexp.to-string';
import 'core-js/modules/es.set';
import 'core-js/modules/es.string.at-alternative';
import 'core-js/modules/es.string.code-point-at';
import 'core-js/modules/es.string.ends-with';
import 'core-js/modules/es.string.from-code-point';
import 'core-js/modules/es.string.includes';
import 'core-js/modules/es.string.is-well-formed';
import 'core-js/modules/es.string.iterator';
import 'core-js/modules/es.string.match';
import 'core-js/modules/es.string.match-all';
import 'core-js/modules/es.string.pad-end';
import 'core-js/modules/es.string.pad-start';
import 'core-js/modules/es.string.raw';
import 'core-js/modules/es.string.repeat';
import 'core-js/modules/es.string.replace';
import 'core-js/modules/es.string.replace-all';
import 'core-js/modules/es.string.search';
import 'core-js/modules/es.string.split';
import 'core-js/modules/es.string.starts-with';
import 'core-js/modules/es.string.substr';
import 'core-js/modules/es.string.to-well-formed';
import 'core-js/modules/es.string.trim';
import 'core-js/modules/es.string.trim-end';
import 'core-js/modules/es.string.trim-start';
import 'core-js/modules/es.string.anchor';
import 'core-js/modules/es.string.big';
import 'core-js/modules/es.string.blink';
import 'core-js/modules/es.string.bold';
import 'core-js/modules/es.string.fixed';
import 'core-js/modules/es.string.fontcolor';
import 'core-js/modules/es.string.fontsize';
import 'core-js/modules/es.string.italics';
import 'core-js/modules/es.string.link';
import 'core-js/modules/es.string.small';
import 'core-js/modules/es.string.strike';
import 'core-js/modules/es.string.sub';
import 'core-js/modules/es.string.sup';
import 'core-js/modules/es.typed-array.float32-array';
import 'core-js/modules/es.typed-array.float64-array';
import 'core-js/modules/es.typed-array.int8-array';
import 'core-js/modules/es.typed-array.int16-array';
import 'core-js/modules/es.typed-array.int32-array';
import 'core-js/modules/es.typed-array.uint8-array';
import 'core-js/modules/es.typed-array.uint8-clamped-array';
import 'core-js/modules/es.typed-array.uint16-array';
import 'core-js/modules/es.typed-array.uint32-array';
import 'core-js/modules/es.typed-array.at';
import 'core-js/modules/es.typed-array.copy-within';
import 'core-js/modules/es.typed-array.every';
import 'core-js/modules/es.typed-array.fill';
import 'core-js/modules/es.typed-array.filter';
import 'core-js/modules/es.typed-array.find';
import 'core-js/modules/es.typed-array.find-index';
import 'core-js/modules/es.typed-array.find-last';
import 'core-js/modules/es.typed-array.find-last-index';
import 'core-js/modules/es.typed-array.for-each';
import 'core-js/modules/es.typed-array.from';
import 'core-js/modules/es.typed-array.includes';
import 'core-js/modules/es.typed-array.index-of';
import 'core-js/modules/es.typed-array.iterator';
import 'core-js/modules/es.typed-array.join';
import 'core-js/modules/es.typed-array.last-index-of';
import 'core-js/modules/es.typed-array.map';
import 'core-js/modules/es.typed-array.of';
import 'core-js/modules/es.typed-array.reduce';
import 'core-js/modules/es.typed-array.reduce-right';
import 'core-js/modules/es.typed-array.reverse';
import 'core-js/modules/es.typed-array.set';
import 'core-js/modules/es.typed-array.slice';
import 'core-js/modules/es.typed-array.some';
import 'core-js/modules/es.typed-array.sort';
import 'core-js/modules/es.typed-array.subarray';
import 'core-js/modules/es.typed-array.to-locale-string';
import 'core-js/modules/es.typed-array.to-reversed';
import 'core-js/modules/es.typed-array.to-sorted';
import 'core-js/modules/es.typed-array.to-string';
import 'core-js/modules/es.typed-array.with';
import 'core-js/modules/es.unescape';
import 'core-js/modules/es.weak-map';
import 'core-js/modules/es.weak-set';
module.exports = require('core-js/internals/path');

View File

@@ -7,7 +7,7 @@ console.i18n("ms.polyfill.initialize")
import './openjdk-nashorn-shim'
import './es5-ext'
import './node-shim'
import 'core-js'
import './core-js'
//@ts-ignore
process.on('exit', () => require.disable())
global.setGlobal('Proxy', require('./proxy').Proxy)

View File

@@ -45,11 +45,13 @@ class Process extends EventEmitter {
execArgv = ''
execPath = ''
private queueMicrotaskExecuteTimeout = 5000
constructor() {
super()
this.on('exit', () => {
console.log(`await microTaskPool termination! queueTask: ${microTaskPool.shutdownNow().size()} remainTask: ${threadGroup.activeCount()}`)
microTaskPool.awaitTermination(3000, TimeUnit.MILLISECONDS)
microTaskPool.awaitTermination(this.queueMicrotaskExecuteTimeout, TimeUnit.MILLISECONDS)
})
}
on(event: string | symbol, listener: (...args: any[]) => void) {
@@ -67,18 +69,30 @@ class Process extends EventEmitter {
})
}
nextTick(callback: Function, ...args: any[]): void {
microTaskPool.execute(() => {
try {
callback(args)
} catch (origin: any) {
try {
super.emit('error', origin)
} catch (error: any) {
console.ex(origin)
console.ex(error)
try {
microTaskPool.submit(new Callable({
call: () => {
try {
callback(args)
} catch (origin: any) {
try {
super.emit('error', origin)
} catch (error: any) {
console.ex(origin)
console.ex(error)
}
}
}
})).get(this.queueMicrotaskExecuteTimeout, TimeUnit.MILLISECONDS)
} catch (error: any) {
if (error instanceof InterruptedException) {
return console.warn(`FixedThreadPool isInterrupted exit! Task ${callback.name || '<anonymous>'} exec exit!`)
}
})
if (error instanceof TimeoutException) {
return console.warn(`Task ${callback.name || '<anonymous>'} => ${callback} exec time greater than ${this.queueMicrotaskExecuteTimeout}ms!`)
}
throw error.getCause && error.getCause() || error
}
}
exit(code: number) {
console.log(`process exit by code ${code}!`)
@@ -120,9 +134,6 @@ class Process extends EventEmitter {
throw new Error('MiaoScript unsupport kill.')
return true
}
toString() {
return "[object process]"
}
}
class EventLoop {
@@ -174,7 +185,7 @@ class EventLoop {
this.eventLoopMainThread.interrupt()
this.fixedThreadPool.shutdownNow()
console.log(`await fixedThreadPool termination!`)
this.fixedThreadPool.awaitTermination(3000, TimeUnit.MILLISECONDS)
this.fixedThreadPool.awaitTermination(this.taskExecuteTimeout, TimeUnit.MILLISECONDS)
})
}
@@ -261,7 +272,7 @@ class EventLoop {
}
}
global.setGlobal('process', new Process(), {})
Object.defineProperty(process, require('core-js/es/symbol/to-string-tag'), { value: '[object process]' })
Object.defineProperty(process, require('core-js/es/symbol/to-string-tag'), { value: 'process' })
const eventLoop = new EventLoop()
Object.defineProperty(process, 'eventLoop', { value: eventLoop })
eventLoop.startEventLoop()