diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 649ae45cb5..aee2de710e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,6 +42,8 @@ jobs: run: npm test - name: Build distribution files run: npm run build + - name: Update entry file + run: npm run prepare-ci - name: Test distribution run: npm test - name: Test browser build @@ -63,6 +65,8 @@ jobs: run: npm test - name: Build distribution files run: npm run build + - name: Update entry file + run: npm run prepare-ci - name: Test distribution run: npm test - name: Test browser build @@ -84,6 +88,8 @@ jobs: run: npm test - name: Build distribution files run: npm run build + - name: Update entry file + run: npm run prepare-ci - name: Test distribution run: npm test - name: Test browser build diff --git a/cli/asc.js b/cli/asc.js index 2fbec18afd..3c47266c2a 100644 --- a/cli/asc.js +++ b/cli/asc.js @@ -80,7 +80,7 @@ if (process.removeAllListeners) { // Use distribution files if present, otherwise run the sources directly. function loadAssemblyScriptJS() { - var exports; + var exports, tsNode; try { // note that this case will always trigger in recent node.js versions for typical installs // see: https://nodejs.org/api/packages.html#packages_self_referencing_a_package_using_its_name @@ -90,18 +90,33 @@ function loadAssemblyScriptJS() { exports = dynrequire("../dist/assemblyscript.js"); } catch (e) { try { // `asc` on the command line without dist files (unnecessary in recent node) - dynrequire("ts-node").register({ + tsNode = dynrequire("ts-node"); + tsNode.register({ project: path.join(__dirname, "..", "src", "tsconfig.json"), + typeCheck: false, + transpileOnly: true, + compilerHost: true, + files: true, skipIgnore: true, - compilerOptions: { target: "ES2016" } + moduleTypes: { + "../src/glue/js/*": "cjs" + }, + compilerOptions: { + module: "esnext", + target: "es2017" + } }); dynrequire("../src/glue/js"); exports = dynrequire("../src"); } catch (e_ts) { - try { // `require("dist/asc.js")` in explicit browser tests - exports = dynrequire("./assemblyscript"); - } catch (e) { - throw Error(`${e_ts.stack}\n---\n${e.stack}`); + if (!tsNode || !(e_ts instanceof tsNode.TSError)) { + try { // `require("dist/asc.js")` in explicit browser tests + exports = dynrequire("./assemblyscript"); + } catch (e) { + throw Error(`${e_ts.stack}\n---\n${e.stack}`); + } + } else { + throw e_ts; } } } diff --git a/index.js b/index.js index e8e52df9a7..a2ab787e8e 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,11 @@ -try { require("source-map-support").install(); } catch (e) { /* nop */ } require("ts-node").register({ project: require("path").join(__dirname, "src", "tsconfig.json"), - skipIgnore: true + compilerHost: true, + skipIgnore: true, + files: true, + compilerOptions: { + removeComments: false + } }); require("./src/glue/js"); module.exports = require("./src"); diff --git a/package-lock.json b/package-lock.json index 879adff5f7..c6449395b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,22 +12,23 @@ "binaryen": "102.0.0-nightly.20211028", "long": "^4.0.0", "source-map-support": "^0.5.20", - "ts-node": "^6.2.0" + "ts-node": "^10.4.0" }, "bin": { "asc": "bin/asc", "asinit": "bin/asinit" }, "devDependencies": { - "@types/node": "^16.11.4", + "@types/node": "^16.11.6", "@typescript-eslint/eslint-plugin": "^4.33.0", "@typescript-eslint/parser": "^4.33.0", "diff": "^5.0.0", "eslint": "^7.32.0", "glob": "^7.2.0", + "mkdirp": "^1.0.4", "physical-cpu-count": "^2.0.0", "ts-loader": "^9.2.6", - "ts-node": "^6.2.0", + "ts-node": "^10.4.0", "typescript": "~4.4.4", "webpack": "^5.61.0", "webpack-cli": "^4.9.1" @@ -134,6 +135,27 @@ "node": ">=4" } }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", @@ -218,6 +240,30 @@ "node": ">= 8" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "node_modules/@types/eslint": { "version": "7.2.12", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.12.tgz", @@ -251,9 +297,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "16.11.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.4.tgz", - "integrity": "sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==", + "version": "16.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { @@ -655,6 +701,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -713,6 +768,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -731,15 +792,6 @@ "node": ">=8" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -907,6 +959,12 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1919,22 +1977,16 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/ms": { @@ -2685,31 +2737,62 @@ } }, "node_modules/ts-node": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-6.2.0.tgz", - "integrity": "sha512-ZNT+OEGfUNVMGkpIaDJJ44Zq3Yr0bkU/ugN1PHbU+/01Z7UV1fsELRiTx1KuQNvQ1A3pGh3y25iYF6jXgxV21A==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", "dev": true, "dependencies": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" + "yn": "3.1.1" }, "bin": { - "ts-node": "dist/bin.js" + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=4.2.0" + "node": ">=0.4.0" } }, "node_modules/ts-node/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" @@ -2992,12 +3075,12 @@ "dev": true }, "node_modules/yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/yocto-queue": { @@ -3098,6 +3181,21 @@ } } }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, "@discoveryjs/json-ext": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", @@ -3164,6 +3262,30 @@ "fastq": "^1.6.0" } }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "@types/eslint": { "version": "7.2.12", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.12.tgz", @@ -3197,9 +3319,9 @@ "dev": true }, "@types/node": { - "version": "16.11.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.4.tgz", - "integrity": "sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==", + "version": "16.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", "dev": true }, "@typescript-eslint/eslint-plugin": { @@ -3498,6 +3620,12 @@ "dev": true, "requires": {} }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -3538,6 +3666,12 @@ "color-convert": "^2.0.1" } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3553,12 +3687,6 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -3685,6 +3813,12 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -4460,20 +4594,11 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "ms": { "version": "2.1.2", @@ -4990,25 +5115,35 @@ } }, "ts-node": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-6.2.0.tgz", - "integrity": "sha512-ZNT+OEGfUNVMGkpIaDJJ44Zq3Yr0bkU/ugN1PHbU+/01Z7UV1fsELRiTx1KuQNvQ1A3pGh3y25iYF6jXgxV21A==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", "dev": true, "requires": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" + "yn": "3.1.1" }, "dependencies": { + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true } } @@ -5205,9 +5340,9 @@ "dev": true }, "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true }, "yocto-queue": { diff --git a/package.json b/package.json index 69d2ed22e8..0769b1e757 100644 --- a/package.json +++ b/package.json @@ -24,18 +24,19 @@ "binaryen": "102.0.0-nightly.20211028", "long": "^4.0.0", "source-map-support": "^0.5.20", - "ts-node": "^6.2.0" + "ts-node": "^10.4.0" }, "devDependencies": { - "@types/node": "^16.11.4", + "@types/node": "^16.11.6", "@typescript-eslint/eslint-plugin": "^4.33.0", "@typescript-eslint/parser": "^4.33.0", "diff": "^5.0.0", "eslint": "^7.32.0", "glob": "^7.2.0", + "mkdirp": "^1.0.4", "physical-cpu-count": "^2.0.0", "ts-loader": "^9.2.6", - "ts-node": "^6.2.0", + "ts-node": "^10.4.0", "typescript": "~4.4.4", "webpack": "^5.61.0", "webpack-cli": "^4.9.1" @@ -84,6 +85,7 @@ "make": "npm run clean && npm test && npm run build && npm test", "all": "npm run check && npm run make", "docs": "typedoc --tsconfig tsconfig-docs.json --mode modules --name \"AssemblyScript Compiler API\" --out ./docs/api --ignoreCompilerErrors --excludeNotExported --excludePrivate --excludeExternals --exclude **/std/** --includeDeclarations --readme src/README.md", + "prepare-ci": "node scripts/prepublish --prepare-for-ci", "prepublishOnly": "node scripts/prepublish", "postpublish": "node scripts/postpublish", "asbuild": "npm run asbuild:untouched && npm run asbuild:optimized", diff --git a/scripts/prepublish.js b/scripts/prepublish.js index d18b7c373f..62217dbf54 100644 --- a/scripts/prepublish.js +++ b/scripts/prepublish.js @@ -5,47 +5,51 @@ const path = require("path"); const pkg = require("../package.json"); const devFiles = require("./postpublish-files.json"); -if (!pkg.releaseFiles) { - console.log("Package has already been updated"); - return; -} +var isCI = process.argv[2] === '--prepare-for-ci'; + +if (!isCI) { + if (!pkg.releaseFiles) { + console.log("Package has already been updated"); + return; + } + + console.log("Backing up development files ..."); + + devFiles.forEach(originalName => { + const backupName = originalName + ".backup"; + console.log("- " + originalName + " -> " + backupName); + fs.copyFileSync( + path.join(__dirname, "..", originalName), + path.join(__dirname, "..", backupName) + ); + }); -console.log("Backing up development files ..."); - -devFiles.forEach(originalName => { - const backupName = originalName + ".backup"; - console.log("- " + originalName + " -> " + backupName); - fs.copyFileSync( - path.join(__dirname, "..", originalName), - path.join(__dirname, "..", backupName) - ); -}); - -console.log("Updating package.json ..."); - -// Stuff we don't need in release -Object.keys(pkg.devDependencies).forEach(dep => delete pkg.dependencies[dep]); -delete pkg.devDependencies; -delete pkg.scripts; - -// Stuff we want in release -pkg.files = pkg.releaseFiles; -delete pkg.releaseFiles; - -// Copy contributors from NOTICE to .contributors -const notice = fs.readFileSync(path.join(__dirname, "..", "NOTICE"), "utf8"); -const noticeRange = ["dcode.io>", "Portions of this software"]; -const posStart = notice.indexOf(noticeRange[0]); -const posEnd = notice.indexOf(noticeRange[1], posStart); -if (posStart < 0 || posEnd < 0) throw Error("unexpected NOTICE format"); -pkg.contributors = []; -for (let entry of notice.substring(posStart + noticeRange[0].length, posEnd).trim().matchAll(/^\* ([^<\n]+(?: <([^>\n]+)>))/mg)) { - pkg.contributors.push(entry[1]); + console.log("Updating package.json ..."); + + // Stuff we don't need in release + Object.keys(pkg.devDependencies).forEach(dep => delete pkg.dependencies[dep]); + delete pkg.devDependencies; + delete pkg.scripts; + + // Stuff we want in release + pkg.files = pkg.releaseFiles; + delete pkg.releaseFiles; + + // Copy contributors from NOTICE to .contributors + const notice = fs.readFileSync(path.join(__dirname, "..", "NOTICE"), "utf8"); + const noticeRange = ["dcode.io>", "Portions of this software"]; + const posStart = notice.indexOf(noticeRange[0]); + const posEnd = notice.indexOf(noticeRange[1], posStart); + if (posStart < 0 || posEnd < 0) throw Error("unexpected NOTICE format"); + pkg.contributors = []; + for (let entry of notice.substring(posStart + noticeRange[0].length, posEnd).trim().matchAll(/^\* ([^<\n]+(?: <([^>\n]+)>))/mg)) { + pkg.contributors.push(entry[1]); + } + if (!pkg.contributors.length) throw Error("missing contributors"); + fs.writeFileSync(path.join(__dirname, "..", "package.json"), [ + JSON.stringify(pkg, null, 2), '\n' + ].join("")); } -if (!pkg.contributors.length) throw Error("missing contributors"); -fs.writeFileSync(path.join(__dirname, "..", "package.json"), [ - JSON.stringify(pkg, null, 2), '\n' -].join("")); console.log("Copying index.release.js -> index.js ..."); fs.copyFileSync( @@ -59,5 +63,7 @@ fs.copyFileSync( path.join(__dirname, "..", "index.d.ts") ); -// We are going to use these immediately, so, to be sure: -setTimeout(() => console.log("OK"), 2000); +if (!isCI) { + // We are going to use these immediately, so, to be sure: + setTimeout(() => console.log("OK"), 2000); +} diff --git a/src/tsconfig.json b/src/tsconfig.json index c368fea916..033f601ce4 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -2,8 +2,10 @@ "extends": "../std/portable.json", "compilerOptions": { "outDir": "../out", + "types" : ["node"], "allowJs": false, "sourceMap": true, + "skipLibCheck": true, "target": "esnext", "strict": true }, @@ -11,6 +13,9 @@ "./**/*.ts" ], "exclude": [ + "../**/node_modules/", + "../tests/**", + "../lib/**", "./glue/wasm/**" ] } diff --git a/tests/decompiler.js b/tests/decompiler.js index e8ca8922bf..3d22d199d0 100644 --- a/tests/decompiler.js +++ b/tests/decompiler.js @@ -1,6 +1,10 @@ var binaryen = global.binaryen = require("../lib/binaryen"); -require("ts-node").register({ project: require("path").join(__dirname, "..", "src", "tsconfig.json") }); +require("ts-node").register({ + project: require("path").join(__dirname, "..", "src", "tsconfig.json"), + compilerHost: true, + files: true +}); require("../src/glue/js"); var mod = new binaryen.Module(); diff --git a/tests/parser.js b/tests/parser.js index c17aa82862..b02bc7556a 100644 --- a/tests/parser.js +++ b/tests/parser.js @@ -49,7 +49,11 @@ if (argv.length) { } } -require("ts-node").register({ project: path.join(__dirname, "..", "src", "tsconfig.json") }); +require("ts-node").register({ + project: path.join(__dirname, "..", "src", "tsconfig.json"), + compilerHost: true, + files: true +}); require("../src/glue/js"); const { Program, Options } = require("../src"); diff --git a/tests/tokenizer.js b/tests/tokenizer.js index 96004617ca..d4c43f4b4a 100644 --- a/tests/tokenizer.js +++ b/tests/tokenizer.js @@ -1,7 +1,13 @@ const fs = require("fs"); const path = require("path"); -require("ts-node").register({ project: path.join(__dirname, "..", "src", "tsconfig.json") }); +require("ts-node").register({ + project: path.join(__dirname, "..", "src", "tsconfig.json"), + typeCheck: false, + transpileOnly: true, + compilerHost: true, + files: true, +}); require("../src/glue/js"); const { Tokenizer, Token } = require("../src/tokenizer"); diff --git a/tests/util-path.js b/tests/util-path.js index d3324f2dce..e3d5e9319f 100644 --- a/tests/util-path.js +++ b/tests/util-path.js @@ -1,7 +1,13 @@ const path = require("path"); const assert = require("assert"); -require("ts-node").register({ project: path.join(__dirname, "..", "src", "tsconfig.json") }); +require("ts-node").register({ + project: path.join(__dirname, "..", "src", "tsconfig.json"), + typeCheck: false, + transpileOnly: true, + compilerHost: true, + files: true +}); require("../src/glue/js"); const { normalize, resolve } = require("../src/util/path");