From 4e4b916620e3f88e7bb63f7e62e8ed6a84c74c20 Mon Sep 17 00:00:00 2001 From: dcode Date: Tue, 12 Nov 2019 18:06:21 +0100 Subject: [PATCH] Clean up release dependencies --- bin/asc | 2 +- cli/asc.js | 7 +-- cli/util/find.d.ts | 3 ++ cli/util/find.js | 19 ++++++++ cli/util/utf8.d.ts | 24 +++++++++++ cli/util/utf8.js | 105 +++++++++++++++++++++++++++++++++++++++++++++ index.js | 1 + package-lock.json | 65 +++++++++++++--------------- package.json | 11 +++-- scripts/release.js | 27 +++++++++--- 10 files changed, 216 insertions(+), 48 deletions(-) create mode 100644 cli/util/find.d.ts create mode 100644 cli/util/find.js create mode 100644 cli/util/utf8.d.ts create mode 100644 cli/util/utf8.js diff --git a/bin/asc b/bin/asc index 9ea70ee54a..d4b9a8c0e9 100755 --- a/bin/asc +++ b/bin/asc @@ -14,7 +14,7 @@ if (~tailArgs) { return; } -require("source-map-support").install(); +try { require("source-map-support").install(); } catch (e) {} const asc = module.exports = require("../cli/asc.js"); if (/\basc$/.test(process.argv[1])) { diff --git a/cli/asc.js b/cli/asc.js index b3a30de800..e4cccfd7cc 100644 --- a/cli/asc.js +++ b/cli/asc.js @@ -17,10 +17,11 @@ if (process.browser) process.cwd = function() { return "."; }; const fs = require("fs"); const path = require("path"); -const utf8 = require("@protobufjs/utf8"); +const utf8 = require("./util/utf8"); const colorsUtil = require("./util/colors"); const optionsUtil = require("./util/options"); const mkdirp = require("./util/mkdirp"); +const find = require("./util/find"); const EOL = process.platform === "win32" ? "\r\n" : "\n"; const SEP = process.platform === "win32" ? "\\" : "/"; @@ -83,9 +84,9 @@ exports.defaultShrinkLevel = 1; /** Bundled library files. */ exports.libraryFiles = exports.isBundle ? BUNDLE_LIBRARY : (() => { // set up if not a bundle const libDir = path.join(__dirname, "..", "std", "assembly"); - const libFiles = require("glob").sync("**/!(*.d).ts", { cwd: libDir }); const bundled = {}; - libFiles.forEach(file => bundled[file.replace(/\.ts$/, "")] = fs.readFileSync(path.join(libDir, file), "utf8" )); + find.files(libDir, find.TS_EXCEPT_DTS) + .forEach(file => bundled[file.replace(/\.ts$/, "")] = fs.readFileSync(path.join(libDir, file), "utf8" )); return bundled; })(); diff --git a/cli/util/find.d.ts b/cli/util/find.d.ts new file mode 100644 index 0000000000..6d5f3cf202 --- /dev/null +++ b/cli/util/find.d.ts @@ -0,0 +1,3 @@ +export function files(dirname: string, filter?: ((name: string) => bool) | RegExp): string[]; +export const TS: RegExp; +export const TS_EXCEPT_DTS: RegExp; diff --git a/cli/util/find.js b/cli/util/find.js new file mode 100644 index 0000000000..3e25b644bc --- /dev/null +++ b/cli/util/find.js @@ -0,0 +1,19 @@ +const fs = require("fs"); +const path = require("path"); + +function findFiles(dirname, filter) { + var out = []; + fs.readdirSync(dirname).forEach(name => { + if (fs.statSync(path.join(dirname, name)).isDirectory()) { + findFiles(path.join(dirname, name), filter).forEach(iname => out.push(name + "/" + iname)); + } else if (!filter || typeof filter === "function" ? filter(name) : filter.test(name)) { + out.push(name); + } + }); + return out; +} + +exports.files = findFiles; + +exports.TS = /\.ts$/; +exports.TS_EXCEPT_DTS = /[^\.][^\d]\.ts$/; diff --git a/cli/util/utf8.d.ts b/cli/util/utf8.d.ts new file mode 100644 index 0000000000..2f1d0ab1cb --- /dev/null +++ b/cli/util/utf8.d.ts @@ -0,0 +1,24 @@ +/** + * Calculates the UTF8 byte length of a string. + * @param {string} string String + * @returns {number} Byte length + */ +export function length(string: string): number; + +/** + * Reads UTF8 bytes as a string. + * @param {Uint8Array} buffer Source buffer + * @param {number} start Source start + * @param {number} end Source end + * @returns {string} String read + */ +export function read(buffer: Uint8Array, start: number, end: number): string; + +/** + * Writes a string as UTF8 bytes. + * @param {string} string Source string + * @param {Uint8Array} buffer Destination buffer + * @param {number} offset Destination offset + * @returns {number} Bytes written + */ +export function write(string: string, buffer: Uint8Array, offset: number): number; diff --git a/cli/util/utf8.js b/cli/util/utf8.js new file mode 100644 index 0000000000..04b5600e3c --- /dev/null +++ b/cli/util/utf8.js @@ -0,0 +1,105 @@ +// @protobufjs/utf8 + +/** + * A minimal UTF8 implementation for number arrays. + * @memberof util + * @namespace + */ +var utf8 = exports; + +/** + * Calculates the UTF8 byte length of a string. + * @param {string} string String + * @returns {number} Byte length + */ +utf8.length = function utf8_length(string) { + var len = 0, + c = 0; + for (var i = 0; i < string.length; ++i) { + c = string.charCodeAt(i); + if (c < 128) + len += 1; + else if (c < 2048) + len += 2; + else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) { + ++i; + len += 4; + } else + len += 3; + } + return len; +}; + +/** + * Reads UTF8 bytes as a string. + * @param {Uint8Array} buffer Source buffer + * @param {number} start Source start + * @param {number} end Source end + * @returns {string} String read + */ +utf8.read = function utf8_read(buffer, start, end) { + var len = end - start; + if (len < 1) + return ""; + var parts = null, + chunk = [], + i = 0, // char offset + t; // temporary + while (start < end) { + t = buffer[start++]; + if (t < 128) + chunk[i++] = t; + else if (t > 191 && t < 224) + chunk[i++] = (t & 31) << 6 | buffer[start++] & 63; + else if (t > 239 && t < 365) { + t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000; + chunk[i++] = 0xD800 + (t >> 10); + chunk[i++] = 0xDC00 + (t & 1023); + } else + chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63; + if (i > 8191) { + (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk)); + i = 0; + } + } + if (parts) { + if (i) + parts.push(String.fromCharCode.apply(String, chunk.slice(0, i))); + return parts.join(""); + } + return String.fromCharCode.apply(String, chunk.slice(0, i)); +}; + +/** + * Writes a string as UTF8 bytes. + * @param {string} string Source string + * @param {Uint8Array} buffer Destination buffer + * @param {number} offset Destination offset + * @returns {number} Bytes written + */ +utf8.write = function utf8_write(string, buffer, offset) { + var start = offset, + c1, // character 1 + c2; // character 2 + for (var i = 0; i < string.length; ++i) { + c1 = string.charCodeAt(i); + if (c1 < 128) { + buffer[offset++] = c1; + } else if (c1 < 2048) { + buffer[offset++] = c1 >> 6 | 192; + buffer[offset++] = c1 & 63 | 128; + } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) { + c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF); + ++i; + buffer[offset++] = c1 >> 18 | 240; + buffer[offset++] = c1 >> 12 & 63 | 128; + buffer[offset++] = c1 >> 6 & 63 | 128; + buffer[offset++] = c1 & 63 | 128; + } else { + buffer[offset++] = c1 >> 12 | 224; + buffer[offset++] = c1 >> 6 & 63 | 128; + buffer[offset++] = c1 & 63 | 128; + } + } + return offset - start; +}; diff --git a/index.js b/index.js index 010170463a..ab9c1a7662 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,4 @@ +try { require("source-map-support").install(); } catch (e) {} require("ts-node").register({ project: require("path").join(__dirname, "src", "tsconfig.json"), skipIgnore: true diff --git a/package-lock.json b/package-lock.json index 9025057041..050853f24f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "assemblyscript", - "version": "0.7.0", + "version": "0.8.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -24,15 +24,10 @@ "js-tokens": "^4.0.0" } }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, "@types/node": { - "version": "12.12.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.6.tgz", - "integrity": "sha512-FjsYUPzEJdGXjwKqSpE0/9QEh6kzhTAeObA54rn6j3rR4C/mzpI9L0KNfoeASSPMMdxIsoJuCLDWcM/rVjIsSA==", + "version": "12.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.7.tgz", + "integrity": "sha512-E6Zn0rffhgd130zbCbAr/JdXfXkoOUFAKNs/rF8qnafSJ8KYaA/j3oz7dcwal+lYjLA7xvdd5J4wdYpCTlP8+w==", "dev": true }, "@webassemblyjs/ast": { @@ -434,8 +429,7 @@ "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, "asn1.js": { "version": "4.10.1", @@ -496,7 +490,8 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "base": { "version": "0.11.2", @@ -592,6 +587,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -974,7 +970,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", @@ -1697,7 +1694,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "1.2.9", @@ -2269,9 +2267,10 @@ "dev": true }, "glob": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", - "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2485,6 +2484,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2493,7 +2493,8 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true }, "ini": { "version": "1.3.5", @@ -2771,8 +2772,7 @@ "make-error": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==" }, "mamacro": { "version": "0.0.3", @@ -2878,6 +2878,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2885,8 +2886,7 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "mississippi": { "version": "3.0.0", @@ -2931,7 +2931,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" }, @@ -2939,8 +2938,7 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, @@ -3115,6 +3113,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -3242,7 +3241,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "2.0.1", @@ -4177,7 +4177,6 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-6.2.0.tgz", "integrity": "sha512-ZNT+OEGfUNVMGkpIaDJJ44Zq3Yr0bkU/ugN1PHbU+/01Z7UV1fsELRiTx1KuQNvQ1A3pGh3y25iYF6jXgxV21A==", - "dev": true, "requires": { "arrify": "^1.0.0", "buffer-from": "^1.1.0", @@ -4192,8 +4191,7 @@ "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" } } }, @@ -4254,8 +4252,7 @@ "typescript": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz", - "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==", - "dev": true + "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==" }, "union-value": { "version": "1.0.1", @@ -4624,7 +4621,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "xtend": { "version": "4.0.2", @@ -4676,8 +4674,7 @@ "yn": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", - "dev": true + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=" } } } diff --git a/package.json b/package.json index 433c8a224b..33d6adacf4 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ ], "version": "0.8.0", "author": "Daniel Wirtz ", + "contributors": [], "license": "Apache-2.0", "homepage": "https://assemblyscript.org", "repository": { @@ -20,22 +21,24 @@ "url": "https://github.com/AssemblyScript/assemblyscript/issues" }, "dependencies": { - "@protobufjs/utf8": "^1.1.0", "binaryen": "89.0.0-nightly.20191012", - "glob": "^7.1.5", "long": "^4.0.0", "source-map-support": "^0.5.16", "ts-node": "^6.2.0", "typescript": "^3.7.2" }, "devDependencies": { - "@types/node": "^12.12.6", + "@types/node": "^12.12.7", "browser-process-hrtime": "^1.0.0", "diff": "^4.0.1", + "glob": "^7.1.6", "physical-cpu-count": "^2.0.0", + "source-map-support": "^0.5.16", "ts-loader": "^6.2.1", + "ts-node": "^6.2.0", "tslint": "^5.20.1", "typedoc-plugin-external-module-name": "^2.1.0", + "typescript": "^3.7.2", "webpack": "^4.41.2", "webpack-cli": "^3.3.10" }, @@ -62,7 +65,7 @@ "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", "release": "node scripts/release" }, - "files.release": [ + "releaseFiles": [ "lib/rtrace/index.d.ts", "lib/rtrace/index.js", "lib/rtrace/README.md", diff --git a/scripts/release.js b/scripts/release.js index 8b1312ae09..d265a81eed 100644 --- a/scripts/release.js +++ b/scripts/release.js @@ -5,12 +5,27 @@ const path = require("path"); const pkg = require("../package.json"); console.log("Updating package.json ..."); -delete pkg.dependencies["ts-node"]; // doesn't need ts-node -delete pkg.dependencies.typescript; // or typescript -delete pkg.devDependencies; // or development dependencies -delete pkg.scripts; // or scripts -pkg.files = pkg["files.release"]; // but specifies files -delete pkg["files.release"]; // + +// 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(""));