Initial asc browser bundle, see #25

This commit is contained in:
dcodeIO 2018-02-09 15:43:57 +01:00
parent cd9a3b5b95
commit 60728c38fd
6 changed files with 722 additions and 54 deletions

View File

@ -3,28 +3,32 @@ const fs = require("fs");
const os = require("os");
// Use distribution files if present, otherwise run the sources directly
const { assemblyscript, isDev } = (function bootstrap() {
var assemblyscript, isDev;
var assemblyscript, isDev;
try {
assemblyscript = require("../dist/assemblyscript.js");
isDev = false;
try { require("source-map-support").install(); } catch (e) {} // optional
} catch (e) {
try {
assemblyscript = require("../dist/assemblyscript.js");
isDev = false;
try { require("source-map-support").install(); } catch (e) {} // optional
} catch (e) {
require("ts-node").register({ project: require("path").join(__dirname, "..", "src") });
require("../src/glue/js");
assemblyscript = require("../src");
isDev = true;
} catch (e) {
assemblyscript = require("./assemblyscript"); // last resort: browser bundle under node
isDev = false;
}
return { assemblyscript, isDev };
})();
}
// Common constants
const VERSION = require("../package.json").version + (isDev ? "-dev" : "");
const VERSION = typeof BUNDLE_VERSION === "string" ? BUNDLE_VERSION : require("../package.json").version + (isDev ? "-dev" : "");
const OPTIONS = require("./asc.json");
const SOURCEMAP_ROOT = "assemblyscript:///";
const LIBRARY_PREFIX = assemblyscript.LIBRARY_PREFIX;
const DEFAULT_OPTIMIZE_LEVEL = 2;
const DEFAULT_SHRINK_LEVEL = 1;
const LIBRARY = typeof BUNDLE_LIBRARY !== "undefined" ? BUNDLE_LIBRARY : {};
exports.VERSION = VERSION;
@ -37,6 +41,18 @@ function main(argv, options, callback) {
const stdout = options.stdout || process.stdout;
const stderr = options.stderr || process.stderr;
const readFile = options.readFile || readFileNode;
const writeFile = options.writeFile || writeFileNode;
const listFiles = options.listFiles || listFilesNode;
// All of the above must be specified in browser environments
if (!stdout) throw Error("'options.stdout' must be specified");
if (!stderr) throw Error("'options.stderr' must be specified");
if (!fs.readFileSync) {
if (readFile === readFileNode) throw Error("'options.readFile' must be specified");
if (writeFile === writeFileNode) throw Error("'options.writeFile' must be specified");
if (listFiles === listFilesNode) throw Error("'options.listFiles' must be specified");
}
// Record compilation times
const stats = createStats();
@ -98,7 +114,8 @@ function main(argv, options, callback) {
const baseDir = args.baseDir != null ? path.resolve(args.baseDir) : process.cwd();
// Include standard library if --noLib isn't set
const libDirs = args.noLib ? [] : [ path.join(__dirname, "..", "std", "assembly") ];
const stdLibDir = path.join(__dirname, "..", "std", "assembly");
const libDirs = args.noLib ? [] : [ stdLibDir ];
// Include custom library components (with or without stdlib)
if (args.lib) {
@ -136,10 +153,14 @@ function main(argv, options, callback) {
// Load library file if explicitly requested
if (sourcePath.startsWith(LIBRARY_PREFIX)) {
for (let i = 0, k = libDirs.length; i < k; ++i) {
sourceText = readFile(path.join(libDirs[i], sourcePath.substring(LIBRARY_PREFIX.length) + ".ts"));
if (sourceText !== null) {
sourcePath += ".ts";
break;
if (LIBRARY.hasOwnProperty(sourcePath))
sourceText = LIBRARY[sourcePath];
else {
sourceText = readFile(path.join(libDirs[i], sourcePath.substring(LIBRARY_PREFIX.length) + ".ts"));
if (sourceText !== null) {
sourcePath += ".ts";
break;
}
}
}
@ -149,11 +170,15 @@ function main(argv, options, callback) {
if (sourceText === null) {
sourceText = readFile(path.join(baseDir, sourcePath, "index.ts"));
if (sourceText === null) {
for (let i = 0, k =libDirs.length; i < k; ++i) {
sourceText = readFile(path.join(libDirs[i], sourcePath + ".ts"));
if (sourceText !== null) {
sourcePath = LIBRARY_PREFIX + sourcePath + ".ts";
break;
for (let i = 0, k = libDirs.length; i < k; ++i) {
if (LIBRARY.hasOwnProperty(LIBRARY_PREFIX + sourcePath))
sourceText = LIBRARY[LIBRARY_PREFIX + sourcePath];
else {
sourceText = readFile(path.join(libDirs[i], sourcePath + ".ts"));
if (sourceText !== null) {
sourcePath = LIBRARY_PREFIX + sourcePath + ".ts";
break;
}
}
}
if (sourceText === null)
@ -171,10 +196,18 @@ function main(argv, options, callback) {
}
// Include (other) library components
var hasBundledLibrary = false;
if (!args.noLib)
Object.keys(LIBRARY).forEach(libPath => {
if (libPath.lastIndexOf("/") >= LIBRARY_PREFIX.length) return;
stats.parseCount++;
stats.parseTime += measure(() => { parser = assemblyscript.parseFile(LIBRARY[libPath], libPath + ".ts", parser, false); });
hasBundledLibrary = true;
});
for (let i = 0, k = libDirs.length; i < k; ++i) {
if (i === 0 && hasBundledLibrary) continue;
let libDir = libDirs[i];
let libFiles;
stats.readTime += measure(() => { libFiles = require("glob").sync("*.ts", { cwd: libDir }) });
let libFiles = listFiles(libDir);
for (let j = 0, l = libFiles.length; j < l; ++j) {
let libPath = libFiles[j];
let libText = readFile(path.join(libDir, libPath));
@ -383,18 +416,18 @@ function main(argv, options, callback) {
printStats(stats, stderr);
return callback(null);
function readFile(filename) {
function readFileNode(filename) {
try {
var text;
stats.readCount++;
stats.readTime += measure(() => text = fs.readFileSync(filename, { encoding: "utf8" }));
stats.readTime += measure(() => { text = fs.readFileSync(filename, { encoding: "utf8" }); });
return text;
} catch (e) {
return null;
}
}
function writeFile(filename, contents) {
function writeFileNode(filename, contents) {
try {
stats.writeCount++;
stats.writeTime += measure(() => fs.writeFileSync(filename, contents, typeof contents === "string" ? { encoding: "utf8" } : undefined));
@ -404,6 +437,16 @@ function main(argv, options, callback) {
}
}
function listFilesNode(dirname) {
var files;
try {
stats.readTime += measure(() => { files = require("glob").sync("*.ts", { cwd: dirname }) });
return files;
} catch (e) {
return [];
}
}
function writeStdout(contents) {
if (!writeStdout.used) {
stats.writeCount++;
@ -464,7 +507,8 @@ function createStats() {
};
}
exports.createStats = createStats;
if (!process.hrtime)
process.hrtime = require("browser-process-hrtime");
function measure(fn) {
const start = process.hrtime();
@ -488,3 +532,24 @@ function printStats(stats, output) {
}
exports.printStats = printStats;
function createMemoryStream(fn) {
var stream = [];
stream.write = function(chunk) {
if (typeof chunk === "string") {
this.push(Buffer.from(chunk, "utf8"));
} else {
this.push(chunk);
}
if (fn) fn(chunk);
};
stream.toBuffer = function() {
return Buffer.concat(this);
};
stream.toString = function() {
return this.toBuffer().toString("utf8");
};
return stream;
}
exports.createMemoryStream = createMemoryStream;

536
package-lock.json generated
View File

@ -208,6 +208,403 @@
}
}
},
"babel-core": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
"integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
"dev": true,
"requires": {
"babel-code-frame": "6.26.0",
"babel-generator": "6.26.1",
"babel-helpers": "6.24.1",
"babel-messages": "6.23.0",
"babel-register": "6.26.0",
"babel-runtime": "6.26.0",
"babel-template": "6.26.0",
"babel-traverse": "6.26.0",
"babel-types": "6.26.0",
"babylon": "6.18.0",
"convert-source-map": "1.5.1",
"debug": "2.6.9",
"json5": "0.5.1",
"lodash": "4.17.4",
"minimatch": "3.0.4",
"path-is-absolute": "1.0.1",
"private": "0.1.8",
"slash": "1.0.0",
"source-map": "0.5.7"
}
},
"babel-generator": {
"version": "6.26.1",
"resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
"integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
"dev": true,
"requires": {
"babel-messages": "6.23.0",
"babel-runtime": "6.26.0",
"babel-types": "6.26.0",
"detect-indent": "4.0.0",
"jsesc": "1.3.0",
"lodash": "4.17.4",
"source-map": "0.5.7",
"trim-right": "1.0.1"
}
},
"babel-helper-evaluate-path": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.3.0.tgz",
"integrity": "sha512-dRFlMTqUJRGzx5a2smKxmptDdNCXKSkPcXWzKLwAV72hvIZumrd/0z9RcewHkr7PmAEq+ETtpD1GK6wZ6ZUXzw==",
"dev": true
},
"babel-helper-flip-expressions": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.3.0.tgz",
"integrity": "sha512-kNGohWmtAG3b7tN1xocRQ5rsKkH/hpvZsMiGOJ1VwGJKhnwzR5KlB3rvKBaBPl5/IGHcopB2JN+r1SUEX1iMAw==",
"dev": true
},
"babel-helper-is-nodes-equiv": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz",
"integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=",
"dev": true
},
"babel-helper-is-void-0": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.3.0.tgz",
"integrity": "sha512-JVqdX8y7Rf/x4NwbqtUI7mdQjL9HWoDnoAEQ8Gv8oxzjvbJv+n75f7l36m9Y8C7sCUltX3V5edndrp7Hp1oSXQ==",
"dev": true
},
"babel-helper-mark-eval-scopes": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.3.0.tgz",
"integrity": "sha512-nrho5Dg4vl0VUgURVpGpEGiwbst5JX7efIyDHFxmkCx/ocQFnrPt8ze9Kxl6TKjR29bJ7D/XKY1NMlSxOQJRbQ==",
"dev": true
},
"babel-helper-remove-or-void": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.3.0.tgz",
"integrity": "sha512-D68W1M3ibCcbg0ysh3ww4/O0g10X1CXK720oOuR8kpfY7w0yP4tVcpK7zDmI1JecynycTQYAZ1rhLJo9aVtIKQ==",
"dev": true
},
"babel-helper-to-multiple-sequence-expressions": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.3.0.tgz",
"integrity": "sha512-1uCrBD+EAaMnAYh7hc944n8Ga19y3daEnoXWPYDvFVsxMCc1l8aDjksApaCEaNSSuewq8BEcff47Cy1PbLg2Gw==",
"dev": true
},
"babel-helpers": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
"integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"babel-template": "6.26.0"
}
},
"babel-messages": {
"version": "6.23.0",
"resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
"integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0"
}
},
"babel-minify-webpack-plugin": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-minify-webpack-plugin/-/babel-minify-webpack-plugin-0.3.0.tgz",
"integrity": "sha512-avrx0Fa615QfivVV8PakEwOtthts/3qVFV+FYJffJn8WanaX4geKMGTYaPKITUXhqqEfuBJokdRQC5arNTZNIA==",
"dev": true,
"requires": {
"babel-core": "6.26.0",
"babel-preset-minify": "0.3.0",
"webpack-sources": "1.1.0"
}
},
"babel-plugin-minify-builtins": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.3.0.tgz",
"integrity": "sha512-MqhSHlxkmgURqj3144qPksbZ/qof1JWdumcbucc4tysFcf3P3V3z3munTevQgKEFNMd8F5/ECGnwb63xogLjAg==",
"dev": true,
"requires": {
"babel-helper-evaluate-path": "0.3.0"
}
},
"babel-plugin-minify-constant-folding": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.3.0.tgz",
"integrity": "sha512-1XeRpx+aY1BuNY6QU/cm6P+FtEi3ar3XceYbmC+4q4W+2Ewq5pL7V68oHg1hKXkBIE0Z4/FjSoHz6vosZLOe/A==",
"dev": true,
"requires": {
"babel-helper-evaluate-path": "0.3.0"
}
},
"babel-plugin-minify-dead-code-elimination": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.3.0.tgz",
"integrity": "sha512-SjM2Fzg85YZz+q/PNJ/HU4O3W98FKFOiP9K5z3sfonlamGOzvZw3Eup2OTiEBsbbqTeY8yzNCAv3qpJRYCgGmw==",
"dev": true,
"requires": {
"babel-helper-evaluate-path": "0.3.0",
"babel-helper-mark-eval-scopes": "0.3.0",
"babel-helper-remove-or-void": "0.3.0",
"lodash.some": "4.6.0"
}
},
"babel-plugin-minify-flip-comparisons": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.3.0.tgz",
"integrity": "sha512-B8lK+ekcpSNVH7PZpWDe5nC5zxjRiiT4nTsa6h3QkF3Kk6y9qooIFLemdGlqBq6j0zALEnebvCpw8v7gAdpgnw==",
"dev": true,
"requires": {
"babel-helper-is-void-0": "0.3.0"
}
},
"babel-plugin-minify-guarded-expressions": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.3.0.tgz",
"integrity": "sha512-O+6CvF5/Ttsth3LMg4/BhyvVZ82GImeKMXGdVRQGK/8jFiP15EjRpdgFlxv3cnqRjqdYxLCS6r28VfLpb9C/kA==",
"dev": true,
"requires": {
"babel-helper-flip-expressions": "0.3.0"
}
},
"babel-plugin-minify-infinity": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.3.0.tgz",
"integrity": "sha512-Sj8ia3/w9158DWieUxU6/VvnYVy59geeFEkVgLZYBE8EBP+sN48tHtBM/jSgz0ejEdBlcfqJ6TnvPmVXTzR2BQ==",
"dev": true
},
"babel-plugin-minify-mangle-names": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.3.0.tgz",
"integrity": "sha512-PYTonhFWURsfAN8achDwvR5Xgy6EeTClLz+fSgGRqjAIXb0OyFm3/xfccbQviVi1qDXmlSnt6oJhBg8KE4Fn7Q==",
"dev": true,
"requires": {
"babel-helper-mark-eval-scopes": "0.3.0"
}
},
"babel-plugin-minify-numeric-literals": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.3.0.tgz",
"integrity": "sha512-TgZj6ay8zDw74AS3yiIfoQ8vRSNJisYO/Du60S8nPV7EW7JM6fDMx5Sar6yVHlVuuwNgvDUBh191K33bVrAhpg==",
"dev": true
},
"babel-plugin-minify-replace": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.3.0.tgz",
"integrity": "sha512-VR6tTg2Lt0TicHIOw04fsUtpPw7RaRP8PC8YzSFwEixnzvguZjZJoL7TgG7ZyEWQD1cJ96UezswECmFNa815bg==",
"dev": true
},
"babel-plugin-minify-simplify": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.3.0.tgz",
"integrity": "sha512-2M16ytQOCqBi7bYMu4DCWn8e6KyFCA108F6+tVrBJxOmm5u2sOmTFEa8s94tR9RHRRNYmcUf+rgidfnzL3ik9Q==",
"dev": true,
"requires": {
"babel-helper-flip-expressions": "0.3.0",
"babel-helper-is-nodes-equiv": "0.0.1",
"babel-helper-to-multiple-sequence-expressions": "0.3.0"
}
},
"babel-plugin-minify-type-constructors": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.3.0.tgz",
"integrity": "sha512-XRXpvsUCPeVw9YEUw+9vSiugcSZfow81oIJT0yR9s8H4W7yJ6FHbImi5DJHoL8KcDUjYnL9wYASXk/fOkbyR6Q==",
"dev": true,
"requires": {
"babel-helper-is-void-0": "0.3.0"
}
},
"babel-plugin-transform-inline-consecutive-adds": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.3.0.tgz",
"integrity": "sha512-iZsYAIjYLLfLK0yN5WVT7Xf7Y3wQ9Z75j9A8q/0IglQSpUt2ppTdHlwl/GeaXnxdaSmsxBu861klbTBbv2n+RA==",
"dev": true
},
"babel-plugin-transform-member-expression-literals": {
"version": "6.9.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.0.tgz",
"integrity": "sha512-bxtac+8w755ctVeDs4vU98RhWY49eW1wO02HAN+eirZYSKk/dVrKONIznXbHmxWKxT4UX1rpTKOCyezuzLpbTw==",
"dev": true
},
"babel-plugin-transform-merge-sibling-variables": {
"version": "6.9.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.0.tgz",
"integrity": "sha512-9G1URVEEKoQLDqe0GwqYudECN7kE/q0OCNo5TiD1iwWnnaKi97xY915l5r2KKUvNflXEm9c3faNWknSXYQ7h6Q==",
"dev": true
},
"babel-plugin-transform-minify-booleans": {
"version": "6.9.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.0.tgz",
"integrity": "sha512-JtpyTRyF+wF/r7GSxpRbNCrVve5M/aCC8xoGcnFItaPUDqjxKmFYvBzMc9u+g0lgo8NWjuZLc16MYaIwkHKD/A==",
"dev": true
},
"babel-plugin-transform-property-literals": {
"version": "6.9.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.0.tgz",
"integrity": "sha512-B8s+71+4DPye9+pmZiPGgLPy3YqcmIuvE/9UcZLczPlwL5ALwF6qRUdLC3Fk17NhL6jxp4u33ZVZ8R4kvASPzw==",
"dev": true,
"requires": {
"esutils": "2.0.2"
}
},
"babel-plugin-transform-regexp-constructors": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.3.0.tgz",
"integrity": "sha512-h92YHzyl042rb0naKO8frTHntpRFwRgKkfWD8602kFHoQingjJNtbvZzvxqHncJ6XmKVyYvfrBpDOSkCTDIIxw==",
"dev": true
},
"babel-plugin-transform-remove-console": {
"version": "6.9.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.0.tgz",
"integrity": "sha512-mck9//yGTwObqqqDzY/sISO88/5/XfIB3ILb4uJLXk2xq124NT4yQVjFSRgVSbLcNq8OyBAn2acxKUqg4W/okQ==",
"dev": true
},
"babel-plugin-transform-remove-debugger": {
"version": "6.9.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.0.tgz",
"integrity": "sha512-i/HWGjsmL2d1N2dl+eIzf44XpSP5v7hi1/GXB0xzom9kjrU8js3T8Kadizn95ZxfHK592Vg8P4JJWP/fvimEWw==",
"dev": true
},
"babel-plugin-transform-remove-undefined": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.3.0.tgz",
"integrity": "sha512-TYGQucc8iP3LJwN3kDZLEz5aa/2KuFrqpT+s8f8NnHsBU1sAgR3y8Opns0xhC+smyDYWscqFCKM1gbkWQOhhnw==",
"dev": true,
"requires": {
"babel-helper-evaluate-path": "0.3.0"
}
},
"babel-plugin-transform-simplify-comparison-operators": {
"version": "6.9.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.0.tgz",
"integrity": "sha512-EJyfYeph0CSekwQuwWVwJqy2go/bETkR95iaWQ/HTUis7tkCGNYmXngaFzuIXdmoPXfvmXYCvAXR4/93hqHVjw==",
"dev": true
},
"babel-plugin-transform-undefined-to-void": {
"version": "6.9.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.0.tgz",
"integrity": "sha512-AVDVEmp0S9mbF1O8zekWbsOOmqnR08PZah5NRZJqSvJnFgiL0ep4Lwo4EymH8OieJR2QgQdR3q71TNW+wiVn4g==",
"dev": true
},
"babel-preset-minify": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.3.0.tgz",
"integrity": "sha512-+VV2GWEyak3eDOmzT1DDMuqHrw3VbE9nBNkx2LLVs4pH/Me32ND8DRpVDd8IRvk1xX5p75nygyRPtkMh6GIAbQ==",
"dev": true,
"requires": {
"babel-plugin-minify-builtins": "0.3.0",
"babel-plugin-minify-constant-folding": "0.3.0",
"babel-plugin-minify-dead-code-elimination": "0.3.0",
"babel-plugin-minify-flip-comparisons": "0.3.0",
"babel-plugin-minify-guarded-expressions": "0.3.0",
"babel-plugin-minify-infinity": "0.3.0",
"babel-plugin-minify-mangle-names": "0.3.0",
"babel-plugin-minify-numeric-literals": "0.3.0",
"babel-plugin-minify-replace": "0.3.0",
"babel-plugin-minify-simplify": "0.3.0",
"babel-plugin-minify-type-constructors": "0.3.0",
"babel-plugin-transform-inline-consecutive-adds": "0.3.0",
"babel-plugin-transform-member-expression-literals": "6.9.0",
"babel-plugin-transform-merge-sibling-variables": "6.9.0",
"babel-plugin-transform-minify-booleans": "6.9.0",
"babel-plugin-transform-property-literals": "6.9.0",
"babel-plugin-transform-regexp-constructors": "0.3.0",
"babel-plugin-transform-remove-console": "6.9.0",
"babel-plugin-transform-remove-debugger": "6.9.0",
"babel-plugin-transform-remove-undefined": "0.3.0",
"babel-plugin-transform-simplify-comparison-operators": "6.9.0",
"babel-plugin-transform-undefined-to-void": "6.9.0",
"lodash.isplainobject": "4.0.6"
}
},
"babel-register": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
"integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
"dev": true,
"requires": {
"babel-core": "6.26.0",
"babel-runtime": "6.26.0",
"core-js": "2.5.3",
"home-or-tmp": "2.0.0",
"lodash": "4.17.4",
"mkdirp": "0.5.1",
"source-map-support": "0.4.18"
},
"dependencies": {
"source-map-support": {
"version": "0.4.18",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
"integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
"dev": true,
"requires": {
"source-map": "0.5.7"
}
}
}
},
"babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
"core-js": "2.5.3",
"regenerator-runtime": "0.11.1"
}
},
"babel-template": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
"integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"babel-traverse": "6.26.0",
"babel-types": "6.26.0",
"babylon": "6.18.0",
"lodash": "4.17.4"
}
},
"babel-traverse": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
"integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
"dev": true,
"requires": {
"babel-code-frame": "6.26.0",
"babel-messages": "6.23.0",
"babel-runtime": "6.26.0",
"babel-types": "6.26.0",
"babylon": "6.18.0",
"debug": "2.6.9",
"globals": "9.18.0",
"invariant": "2.2.2",
"lodash": "4.17.4"
}
},
"babel-types": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
"integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"esutils": "2.0.2",
"lodash": "4.17.4",
"to-fast-properties": "1.0.3"
}
},
"babylon": {
"version": "6.18.0",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
"integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
"dev": true
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@ -291,6 +688,12 @@
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
"dev": true
},
"browser-process-hrtime": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz",
"integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=",
"dev": true
},
"browserify-aes": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz",
@ -621,12 +1024,24 @@
"integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
"dev": true
},
"convert-source-map": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
"integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
"dev": true
},
"copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
"dev": true
},
"core-js": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
"integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
"dev": true
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
@ -754,6 +1169,15 @@
"minimalistic-assert": "1.0.0"
}
},
"detect-indent": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
"integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
"dev": true,
"requires": {
"repeating": "2.0.1"
}
},
"diff": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz",
@ -2042,6 +2466,12 @@
"is-glob": "2.0.1"
}
},
"globals": {
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
"dev": true
},
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
@ -2152,6 +2582,16 @@
"minimalistic-crypto-utils": "1.0.1"
}
},
"home-or-tmp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
"integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
"dev": true,
"requires": {
"os-homedir": "1.0.2",
"os-tmpdir": "1.0.2"
}
},
"homedir-polyfill": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
@ -2204,6 +2644,15 @@
"integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
"dev": true
},
"invariant": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
"integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
"dev": true,
"requires": {
"loose-envify": "1.3.1"
}
},
"invert-kv": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
@ -2320,6 +2769,15 @@
"integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
"dev": true
},
"is-finite": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
"integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
"dev": true,
"requires": {
"number-is-nan": "1.0.1"
}
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
@ -2439,6 +2897,12 @@
"esprima": "4.0.0"
}
},
"jsesc": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
"integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
"dev": true
},
"json-loader": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
@ -2526,6 +2990,18 @@
"integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
"dev": true
},
"lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
"dev": true
},
"lodash.some": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
"integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
"dev": true
},
"long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
@ -2538,6 +3014,15 @@
"integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
"dev": true
},
"loose-envify": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
"integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
"dev": true,
"requires": {
"js-tokens": "3.0.2"
}
},
"lru-cache": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
@ -2971,6 +3456,12 @@
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
"dev": true
},
"os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true
},
"os-locale": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
@ -2982,6 +3473,12 @@
"mem": "1.1.0"
}
},
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true
},
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
@ -3123,6 +3620,12 @@
"integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
"dev": true
},
"private": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
"integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
"dev": true
},
"process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@ -3286,6 +3789,12 @@
"set-immediate-shim": "1.0.1"
}
},
"regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"dev": true
},
"regex-cache": {
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
@ -3322,6 +3831,15 @@
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
"dev": true
},
"repeating": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
"integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
"dev": true,
"requires": {
"is-finite": "1.0.2"
}
},
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@ -3450,6 +3968,12 @@
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true
},
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
"dev": true
},
"snapdragon": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz",
@ -3853,6 +4377,12 @@
"integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
"dev": true
},
"to-fast-properties": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
"integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
"dev": true
},
"to-object-path": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
@ -3962,6 +4492,12 @@
}
}
},
"trim-right": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
"dev": true
},
"ts-loader": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-3.5.0.tgz",

View File

@ -17,6 +17,8 @@
"ts-node": "^4.1.0"
},
"devDependencies": {
"babel-minify-webpack-plugin": "^0.3.0",
"browser-process-hrtime": "^0.1.2",
"chalk": "^2.3.0",
"diff": "^3.4.0",
"long": "^4.0.0",

31
tests/bundled-asc.js Normal file
View File

@ -0,0 +1,31 @@
var asc = require("../dist/asc.js");
var stdout = asc.createMemoryStream();
var stderr = asc.createMemoryStream();
process.exitCode = asc.main([
"test.ts"
], {
stdout: stdout,
stderr: stderr,
readFile: function(filename) {
console.log("readFile: " + filename);
if (filename === "/test.ts") { // sic: browser path
return "export function foo(): void {}";
}
throw Error("File not found: " + filename);
},
writeFile: function(filename, contents) {
console.log("writeFile: " + filename);
},
listFiles: function(dirname) {
console.log("listFiles: " + dirname);
return [];
}
});
console.log("stdout >>>");
console.log(stdout.toString());
console.log("stderr >>>");
console.error(stderr.toString());

View File

@ -46,8 +46,9 @@ tests.forEach(filename => {
const basename = filename.replace(/\.ts$/, "");
const stdout = createMemoryStream();
const stderr = createMemoryStream(true);
const stdout = asc.createMemoryStream();
const stderr = asc.createMemoryStream(chunk => process.stderr.write(chunk.toString().replace(/^(?!$)/mg, " ")));
stderr.isTTY = true;
var failed = false;
@ -135,28 +136,6 @@ tests.forEach(filename => {
});
});
function createMemoryStream(print) {
var stream = [];
if (stream.print = print)
stream.isTTY = process.stderr.isTTY;
stream.write = function(chunk) {
if (typeof chunk === "string") {
this.push(Buffer.from(chunk, "utf8"));
} else {
this.push(chunk);
}
if (stream.print)
process.stderr.write(chunk.toString().replace(/^(?!$)/mg, " "));
};
stream.toBuffer = function() {
return Buffer.concat(this);
};
stream.toString = function() {
return this.toBuffer().toString("utf8");
};
return stream;
}
if (failures) {
process.exitCode = 1;
console.log(chalk.red("ERROR: ") + failures + " compiler tests failed");

View File

@ -1,7 +1,9 @@
var path = require("path");
var webpack = require("webpack");
const path = require("path");
const fs = require("fs");
const webpack = require("webpack");
module.exports = {
// Build just the C-like library
const lib = {
entry: [ "./src/glue/js.js", "./src/index.ts" ],
module: {
rules: [
@ -12,7 +14,7 @@ module.exports = {
}
]
},
externals: [ "binaryen", "../../lib/binaryen" ],
externals: [ "binaryen" ],
resolve: {
extensions: [ ".ts", ".js" ]
},
@ -31,4 +33,57 @@ module.exports = {
filename: "assemblyscript.js.map"
})
]
}
};
// Build asc for browser usage
const BabelMinifyPlugin = require("babel-minify-webpack-plugin");
const bin = {
context: path.join(__dirname, "bin"),
entry: [ "./asc.js" ],
externals: [{
"../dist/assemblyscript.js": {
commonjs: "assemblyscript",
commonjs2: "assemblyscript",
amd: "assemblyscript",
root: "_"
},
}, "./assemblyscript", "source-map-support"],
node: {
"fs": "empty",
"global": true,
"process": "mock",
"crypto": "empty"
},
output: {
filename: "asc.js",
path: path.resolve(__dirname, "dist"),
library: "asc",
libraryTarget: "umd"
},
plugins: [
new webpack.DefinePlugin({
BUNDLE_VERSION: JSON.stringify(require("./package.json").version),
BUNDLE_LIBRARY: (() => {
const libDir = path.join(__dirname, "std", "assembly");
const libFiles = require("glob").sync("**/*.ts", { cwd: libDir });
const lib = {};
libFiles.forEach(file => {
var source = fs.readFileSync(path.join(libDir, file), { encoding: "utf8" });
lib["(lib)/" + file.replace(/\.ts$/, "")] = JSON.stringify(source);
});
return lib;
})(),
__dirname: JSON.stringify(".")
}),
new webpack.IgnorePlugin(/\.\/src|package\.json|^(ts\-node|glob)$/),
// Error: original.line and original.column are not numbers -- you probably meant to omit the
// original mapping entirely and only map the generated position. If so, pass null for the
// original mapping instead of an object with empty or null values.
// new BabelMinifyPlugin(/* {}, { sourceMap: true } */),
new webpack.SourceMapDevToolPlugin({
filename: "asc.js.map"
}),
]
};
module.exports = [ lib, bin ];