From 6ae9cfc3e4c61a72ba86236f5671e0aa737530ea Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 13 Jul 2017 20:22:01 -0400 Subject: [PATCH 01/93] Bump mongo and minimongo minor versions after #8815. --- packages/minimongo/package.js | 2 +- packages/mongo/package.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index e576c8ecf0..401c166bb8 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.2.1' + version: '1.3.0' }); Package.onUse(function (api) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 74cc22955b..3c773b4591 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.1.19' + version: '1.2.0' }); Npm.depends({ From dc1ba4c90598abd0d729d347a69042bf587d8049 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 13 Jul 2017 13:20:36 -0400 Subject: [PATCH 02/93] Upgrade meteor-promise and promise packages to latest versions. --- History.md | 5 +++++ .../promise/.npm/package/npm-shrinkwrap.json | 16 ++++++++-------- packages/promise/package.js | 6 +++--- scripts/dev-bundle-server-package.js | 4 ++-- scripts/dev-bundle-tool-package.js | 6 +++--- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/History.md b/History.md index 99af701950..6315023ddd 100644 --- a/History.md +++ b/History.md @@ -1,5 +1,10 @@ ## v.NEXT +## v1.5.2, TBD + +* The `meteor-promise` package has been upgraded to version 0.8.5, + and the `promise` polyfill package has been upgraded to 8.0.1. + ## v1.5.1, 2017-07-12 * Node has been upgraded to version 4.8.4. diff --git a/packages/promise/.npm/package/npm-shrinkwrap.json b/packages/promise/.npm/package/npm-shrinkwrap.json index 7aa333514c..c70bd597c3 100644 --- a/packages/promise/.npm/package/npm-shrinkwrap.json +++ b/packages/promise/.npm/package/npm-shrinkwrap.json @@ -1,19 +1,19 @@ { "dependencies": { "asap": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "from": "asap@>=2.0.3 <2.1.0" }, "meteor-promise": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.8.4.tgz", - "from": "meteor-promise@0.8.4" + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.8.5.tgz", + "from": "meteor-promise@0.8.5" }, "promise": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz", - "from": "promise@7.1.1" + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.1.tgz", + "from": "promise@8.0.1" } } } diff --git a/packages/promise/package.js b/packages/promise/package.js index fb2d6f8782..95a8e66a04 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,14 +1,14 @@ Package.describe({ name: "promise", - version: "0.8.9", + version: "0.9.0", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" }); Npm.depends({ - "meteor-promise": "0.8.4", - "promise": "7.1.1" + "meteor-promise": "0.8.5", + "promise": "8.0.1" }); Package.onUse(function(api) { diff --git a/scripts/dev-bundle-server-package.js b/scripts/dev-bundle-server-package.js index 27a2a7d9db..795f6139e0 100644 --- a/scripts/dev-bundle-server-package.js +++ b/scripts/dev-bundle-server-package.js @@ -9,9 +9,9 @@ var packageJson = { // Version is not important but is needed to prevent warnings. version: "0.0.0", dependencies: { - "meteor-promise": "0.8.4", + "meteor-promise": "0.8.5", fibers: "1.0.15", - promise: "7.1.1", + promise: "8.0.1", // Not yet upgrading Underscore from 1.5.2 to 1.7.0 (which should be done // in the package too) because we should consider using lodash instead // (and there are backwards-incompatible changes either way). diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 6b0ab17ba4..c8d4321d53 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -15,10 +15,10 @@ var packageJson = { "node-gyp": "3.6.0", "node-pre-gyp": "0.6.34", "meteor-babel": "0.22.0", - reify: "0.11.24", - "meteor-promise": "0.8.4", + "meteor-promise": "0.8.5", + promise: "8.0.1", fibers: "1.0.15", - promise: "7.1.1", + reify: "0.11.24", // So that Babel 6 can emit require("babel-runtime/helpers/...") calls. "babel-runtime": "6.9.2", // For various ES2015 polyfills, such as Map and Set. From 36bf9bb7fecaadf4b3593667279c26635ca23e76 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 13 Jul 2017 13:38:09 -0400 Subject: [PATCH 03/93] Upgrade meteor-babel and reify packages to latest versions. --- History.md | 15 ++++++++++++ .../.npm/package/npm-shrinkwrap.json | 24 +++++++++---------- packages/babel-compiler/package.js | 2 +- .../modules/.npm/package/npm-shrinkwrap.json | 16 ++++++------- packages/modules/package.js | 2 +- scripts/dev-bundle-tool-package.js | 4 ++-- 6 files changed, 39 insertions(+), 24 deletions(-) diff --git a/History.md b/History.md index 6315023ddd..48531ca771 100644 --- a/History.md +++ b/History.md @@ -2,6 +2,21 @@ ## v1.5.2, TBD +* The `meteor-babel` package has been upgraded to version 0.23.1. + +* The `reify` npm package has been upgraded to version 0.12.0, which + includes a minor breaking + [change](https://github.com/benjamn/reify/commit/8defc645e556429283e0b522fd3afababf6525ea) + that correctly skips exports named `default` in `export * from "module"` + declarations. If you have any wrapper modules that re-export another + module's exports using `export * from "./wrapped/module"`, and the + wrapped module has a `default` export that you want to be included, you + should now explicitly re-export `default` using a second declaration: + ```js + export * from "./wrapped/module"; + export { default } "./wrapped/module"; + ``` + * The `meteor-promise` package has been upgraded to version 0.8.5, and the `promise` polyfill package has been upgraded to 8.0.1. diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 0aa725dbc9..d32b4b6b14 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -1,9 +1,9 @@ { "dependencies": { "acorn": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", - "from": "acorn@>=5.0.0 <5.1.0" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", + "from": "acorn@>=5.1.1 <5.2.0" }, "ansi-regex": { "version": "2.1.1", @@ -280,9 +280,9 @@ "from": "babel-plugin-transform-es2015-modules-commonjs@>=6.22.0 <7.0.0" }, "babel-plugin-transform-es2015-modules-reify": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-reify/-/babel-plugin-transform-es2015-modules-reify-0.11.2.tgz", - "from": "babel-plugin-transform-es2015-modules-reify@>=0.11.0 <0.12.0" + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-reify/-/babel-plugin-transform-es2015-modules-reify-0.12.0.tgz", + "from": "babel-plugin-transform-es2015-modules-reify@>=0.12.0 <0.13.0" }, "babel-plugin-transform-es2015-object-super": { "version": "6.24.1", @@ -590,9 +590,9 @@ "from": "loose-envify@>=1.0.0 <2.0.0" }, "meteor-babel": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/meteor-babel/-/meteor-babel-0.22.0.tgz", - "from": "meteor-babel@0.22.0" + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/meteor-babel/-/meteor-babel-0.23.1.tgz", + "from": "meteor-babel@0.23.1" }, "meteor-babel-helpers": { "version": "0.0.3", @@ -692,9 +692,9 @@ } }, "reify": { - "version": "0.11.24", - "resolved": "https://registry.npmjs.org/reify/-/reify-0.11.24.tgz", - "from": "reify@>=0.11.18 <0.12.0" + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/reify/-/reify-0.12.0.tgz", + "from": "reify@>=0.12.0 <0.13.0" }, "repeating": { "version": "2.0.1", diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 8b8731b79a..9bdab04c45 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -10,7 +10,7 @@ Package.describe({ }); Npm.depends({ - 'meteor-babel': '0.22.0' + 'meteor-babel': '0.23.1' }); Package.onUse(function (api) { diff --git a/packages/modules/.npm/package/npm-shrinkwrap.json b/packages/modules/.npm/package/npm-shrinkwrap.json index ed85116d23..b005c19a86 100644 --- a/packages/modules/.npm/package/npm-shrinkwrap.json +++ b/packages/modules/.npm/package/npm-shrinkwrap.json @@ -1,13 +1,13 @@ { "dependencies": { "acorn": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", - "from": "acorn@>=5.0.0 <5.1.0" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", + "from": "acorn@>=5.1.1 <5.2.0" }, "minipass": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.0.2.tgz", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.1.tgz", "from": "minipass@>=2.0.0 <3.0.0" }, "minizlib": { @@ -16,9 +16,9 @@ "from": "minizlib@>=1.0.3 <2.0.0" }, "reify": { - "version": "0.11.24", - "resolved": "https://registry.npmjs.org/reify/-/reify-0.11.24.tgz", - "from": "reify@0.11.24" + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/reify/-/reify-0.12.0.tgz", + "from": "reify@0.12.0" }, "semver": { "version": "5.3.0", diff --git a/packages/modules/package.js b/packages/modules/package.js index 479325548b..444058ef4a 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -6,7 +6,7 @@ Package.describe({ }); Npm.depends({ - reify: "0.11.24" + reify: "0.12.0" }); Package.onUse(function(api) { diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index c8d4321d53..3927fa81ce 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -14,11 +14,11 @@ var packageJson = { npm: "4.6.1", "node-gyp": "3.6.0", "node-pre-gyp": "0.6.34", - "meteor-babel": "0.22.0", + "meteor-babel": "0.23.1", "meteor-promise": "0.8.5", + reify: "0.12.0", promise: "8.0.1", fibers: "1.0.15", - reify: "0.11.24", // So that Babel 6 can emit require("babel-runtime/helpers/...") calls. "babel-runtime": "6.9.2", // For various ES2015 polyfills, such as Map and Set. From 8af49553899fd4319b96991e0ef9b10f71165397 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 13 Jul 2017 16:02:19 -0400 Subject: [PATCH 04/93] Use eachline@3.0.5 from npm instead of our own fork. The pull request corresponding to our fork is not going to be merged, so it's better to use the alternative this.finished API available in newer versions of the upstream package. https://github.com/williamkapke/node-eachline/pull/4 --- scripts/dev-bundle-server-package.js | 4 +--- scripts/dev-bundle-tool-package.js | 4 +--- tools/cordova/run-targets.js | 5 +++++ tools/runners/run-app.js | 7 +++++-- tools/shell-client.js | 5 +++++ tools/utils/utils.js | 13 +++++++++++-- 6 files changed, 28 insertions(+), 10 deletions(-) diff --git a/scripts/dev-bundle-server-package.js b/scripts/dev-bundle-server-package.js index 795f6139e0..0e81d029b7 100644 --- a/scripts/dev-bundle-server-package.js +++ b/scripts/dev-bundle-server-package.js @@ -22,9 +22,7 @@ var packageJson = { // These are only used in dev mode (by shell.js) so end-users can avoid // needing to install them if they use `npm install --production`. devDependencies: { - // 2.4.0 (more or less, the package.json change isn't committed) plus our PR - // https://github.com/williamwicks/node-eachline/pull/4 - eachline: "https://github.com/meteor/node-eachline/tarball/ff89722ff94e6b6a08652bf5f44c8fffea8a21da", + eachline: "3.0.5", chalk: "0.5.1" } }; diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 3927fa81ce..2d0bc8a210 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -49,9 +49,7 @@ var packageJson = { // workaround from the tool. "commonmark": "0.15.0", escope: "3.2.0", - // 2.4.0 (more or less, the package.json change isn't committed) plus our PR - // https://github.com/williamwicks/node-eachline/pull/4 - eachline: "https://github.com/meteor/node-eachline/tarball/ff89722ff94e6b6a08652bf5f44c8fffea8a21da", + eachline: "3.0.5", pathwatcher: "6.7.1", optimism: "0.3.3", 'lru-cache': '4.0.1', diff --git a/tools/cordova/run-targets.js b/tools/cordova/run-targets.js index d04a1efff2..b841ec3679 100644 --- a/tools/cordova/run-targets.js +++ b/tools/cordova/run-targets.js @@ -147,6 +147,11 @@ export class AndroidRunTarget extends CordovaRunTarget { loadIsopacket('cordova-support')['logging']; const logStream = eachline((line) => { + if (! line && this.finished) { + // Skip blank line at end of stream. + return; + } + const logEntry = logFromAndroidLogcatLine(Log, line); if (logEntry) { return `${logEntry}\n`; diff --git a/tools/runners/run-app.js b/tools/runners/run-app.js index 26be252981..ee921b7892 100644 --- a/tools/runners/run-app.js +++ b/tools/runners/run-app.js @@ -86,10 +86,13 @@ _.extend(AppProcess.prototype, { // Start the app! self.proc = self._spawn(); - // Send stdout and stderr to the runLog var realEachline = require('eachline'); function eachline(stream, encoding, callback) { - realEachline(stream, encoding, (...args) => void(callback(...args))); + return realEachline(stream, encoding, function (line) { + if (line || ! this.finished) { + callback.apply(this, arguments); + } + }); } eachline(self.proc.stdout, 'utf8', async function (line) { diff --git a/tools/shell-client.js b/tools/shell-client.js index f1543dbd68..ba84bf8fa5 100644 --- a/tools/shell-client.js +++ b/tools/shell-client.js @@ -182,6 +182,11 @@ Cp.setUpSocket = function setUpSocket(sock, key) { sock.pipe(process.stdout); eachline(sock, "utf8", function(line) { + if (! line && this.finished) { + // Ignore blank lines at the end of the socket stream. + return; + } + self.exitOnClose = line.indexOf(EXITING_MESSAGE) >= 0; }); diff --git a/tools/utils/utils.js b/tools/utils/utils.js index e3b209997a..495a6bc369 100644 --- a/tools/utils/utils.js +++ b/tools/utils/utils.js @@ -534,11 +534,15 @@ exports.execFileSync = function (file, args, opts) { var p = child_process.spawn(file, args, opts); eachline(p.stdout, fiberHelpers.bindEnvironment(function (line) { - process.stdout.write(line + '\n'); + if (line || ! this.finished) { + process.stdout.write(line + '\n'); + } })); eachline(p.stderr, fiberHelpers.bindEnvironment(function (line) { - process.stderr.write(line + '\n'); + if (line || ! this.finished) { + process.stderr.write(line + '\n'); + } })); return { @@ -569,6 +573,11 @@ exports.execFileAsync = function (file, args, opts) { var mapper = opts.lineMapper || _.identity; var logOutput = fiberHelpers.bindEnvironment(function (line) { + if (! line && this.finished) { + // Ignore blank lines at the end of the output stream. + return; + } + if (opts.verbose) { line = mapper(line); if (line) { From 53e23671e350a316cdcbafc683d5c80f3ac80515 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 14 Jul 2017 11:37:13 -0400 Subject: [PATCH 05/93] Make sure maybeSuggestRaisingWatchLimit runs in a Fiber. Should fix recent test failures: https://circleci.com/gh/meteor/meteor/4570#tests/containers/5 https://circleci.com/gh/meteor/meteor/4570#tests/containers/6 --- tools/fs/safe-watcher.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/fs/safe-watcher.js b/tools/fs/safe-watcher.js index 3024a239e3..6f87937493 100644 --- a/tools/fs/safe-watcher.js +++ b/tools/fs/safe-watcher.js @@ -263,7 +263,9 @@ function watchLibraryWatch(absPath, callback) { let suggestedRaisingWatchLimit = false; -function maybeSuggestRaisingWatchLimit(error) { +// This function is async so that archinfo.host() (which may call +// utils.execFileSync) will run in a Fiber. +async function maybeSuggestRaisingWatchLimit(error) { var constants = require('constants'); var archinfo = require('../utils/archinfo.js'); if (! suggestedRaisingWatchLimit && From 9e8f5f6083dbfa2be6f5f5b28c299c9798b4defc Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 14 Jul 2017 13:29:16 -0400 Subject: [PATCH 06/93] Bump $BUNDLE_VERSION to 4.8.22 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index ef8749df65..5d17a240a9 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.21 +BUNDLE_VERSION=4.8.22 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 335fb37a1cae018feab69771cda4f5f36eb38567 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 14 Jul 2017 13:37:52 -0400 Subject: [PATCH 07/93] Bump minor versions of babel-compiler and modules packages. Since the beta versions of these packages are likely to overlap with previously published beta versions on the release-1.6 branch, we should be sure to use a distinct suffix like -beta152.n. --- packages/babel-compiler/package.js | 2 +- packages/modules/package.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 9bdab04c45..a48ba5a3eb 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.19.4' + version: '6.20.0' }); Npm.depends({ diff --git a/packages/modules/package.js b/packages/modules/package.js index 444058ef4a..70de3d7cc8 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.9.2", + version: "0.10.0", summary: "CommonJS module system", documentation: "README.md" }); From c65962f7588c08bda160c463dbb5e4143b50fc95 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 14 Jul 2017 14:08:11 -0400 Subject: [PATCH 08/93] Bump package versions for 1.5.2-beta152.0 release. The "-beta152.0" suffix contains "152" to avoid overlapping with versions of packages published on the release-1.6 branch. --- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 11 ++++++++--- packages/boilerplate-generator/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 9 files changed, 16 insertions(+), 11 deletions(-) diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index a48ba5a3eb..6aeeb2eb5b 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0' + version: '6.20.0-beta152.0' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index ff30ae3ce1..4f78b00944 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -1,8 +1,13 @@ -Npm.depends({'parse5': '3.0.2'}); Package.describe({ - // These tests are in a separate package so that we can Npm.depend on parse5, a html parsing library + // These tests are in a separate package so that we can Npm.depend on + // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0' + version: '1.0.0-beta152.0', + documentation: null +}); + +Npm.depends({ + parse5: '3.0.2' }); Package.onTest(function (api) { diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 23fb12dcbb..e7fa4e4509 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.1.2' + version: '1.2.0-beta152.0' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index efbed2d097..314abc05ee 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: '1.5.1' + version: "1.5.2-beta152.0" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 401c166bb8..7511013dd0 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0' + version: '1.3.0-beta152.0' }); Package.onUse(function (api) { diff --git a/packages/modules/package.js b/packages/modules/package.js index 70de3d7cc8..b8392ccd40 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0", + version: "0.10.0-beta152.0", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 3c773b4591..1a187e1278 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0' + version: '1.2.0-beta152.0' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 95a8e66a04..9ba185e6b2 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0", + version: "0.9.0-beta152.0", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 759d506048..e5b4fbdc53 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.1-rc.5", + "version": "1.5.2-beta152.0", "recommended": false, "official": false, "description": "Meteor" From 0f05575099239b9ed64f3671e839ae9885ec6c3c Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 17 Jul 2017 15:24:37 -0400 Subject: [PATCH 09/93] Simplify eachline by using `split` npm package. --- scripts/dev-bundle-server-package.js | 2 +- scripts/dev-bundle-tool-package.js | 2 +- tools/cordova/run-targets.js | 10 +++------- tools/runners/run-app.js | 14 +++----------- tools/shell-client.js | 8 +------- tools/utils/eachline.js | 25 ++++++++++++++++++++++++ tools/utils/utils.js | 29 ++++++++++------------------ 7 files changed, 44 insertions(+), 46 deletions(-) create mode 100644 tools/utils/eachline.js diff --git a/scripts/dev-bundle-server-package.js b/scripts/dev-bundle-server-package.js index 0e81d029b7..fe98c712f9 100644 --- a/scripts/dev-bundle-server-package.js +++ b/scripts/dev-bundle-server-package.js @@ -22,7 +22,7 @@ var packageJson = { // These are only used in dev mode (by shell.js) so end-users can avoid // needing to install them if they use `npm install --production`. devDependencies: { - eachline: "3.0.5", + split: "1.0.0", chalk: "0.5.1" } }; diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 2d0bc8a210..02ff2d27b0 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -49,7 +49,7 @@ var packageJson = { // workaround from the tool. "commonmark": "0.15.0", escope: "3.2.0", - eachline: "3.0.5", + split: "1.0.0", pathwatcher: "6.7.1", optimism: "0.3.3", 'lru-cache': '4.0.1', diff --git a/tools/cordova/run-targets.js b/tools/cordova/run-targets.js index b841ec3679..80bb118f0e 100644 --- a/tools/cordova/run-targets.js +++ b/tools/cordova/run-targets.js @@ -1,7 +1,6 @@ import _ from 'underscore'; import chalk from 'chalk'; import child_process from 'child_process'; -import eachline from 'eachline'; import { load as loadIsopacket } from '../tool-env/isopackets.js'; import runLog from '../runners/run-log.js'; @@ -134,6 +133,8 @@ export class AndroidRunTarget extends CordovaRunTarget { } async tailLogs(cordovaProject, target) { + const { transform } = require("../utils/eachline.js"); + cordovaProject.runCommands(`tailing logs for ${this.displayName}`, async () => { await this.checkPlatformRequirementsAndSetEnv(cordovaProject); @@ -146,12 +147,7 @@ export class AndroidRunTarget extends CordovaRunTarget { const { Log } = loadIsopacket('cordova-support')['logging']; - const logStream = eachline((line) => { - if (! line && this.finished) { - // Skip blank line at end of stream. - return; - } - + const logStream = transform(line => { const logEntry = logFromAndroidLogcatLine(Log, line); if (logEntry) { return `${logEntry}\n`; diff --git a/tools/runners/run-app.js b/tools/runners/run-app.js index ee921b7892..e3c91d40e6 100644 --- a/tools/runners/run-app.js +++ b/tools/runners/run-app.js @@ -14,6 +14,7 @@ var release = require('../packaging/release.js'); import * as cordova from '../cordova'; import { CordovaBuilder } from '../cordova/builder.js'; import { closeAllWatchers } from "../fs/safe-watcher.js"; +import { eachline } from "../utils/eachline.js"; // Parse out s as if it were a bash command line. var bashParse = function (s) { @@ -86,16 +87,7 @@ _.extend(AppProcess.prototype, { // Start the app! self.proc = self._spawn(); - var realEachline = require('eachline'); - function eachline(stream, encoding, callback) { - return realEachline(stream, encoding, function (line) { - if (line || ! this.finished) { - callback.apply(this, arguments); - } - }); - } - - eachline(self.proc.stdout, 'utf8', async function (line) { + eachline(self.proc.stdout, function (line) { if (line.match(/^LISTENING\s*$/)) { // This is the child process telling us that it's ready to receive // connections. (It does this because we told it to with @@ -107,7 +99,7 @@ _.extend(AppProcess.prototype, { } }); - eachline(self.proc.stderr, 'utf8', async function (line) { + eachline(self.proc.stderr, function (line) { if (self.debugPort && line.indexOf("Debugger listening on") >= 0) { Console.enableProgressDisplay(false); diff --git a/tools/shell-client.js b/tools/shell-client.js index ba84bf8fa5..5b5d795cee 100644 --- a/tools/shell-client.js +++ b/tools/shell-client.js @@ -2,7 +2,6 @@ var assert = require("assert"); var fs = require("fs"); var path = require("path"); var net = require("net"); -var eachline = require("eachline"); var chalk = require("chalk"); var EOL = require("os").EOL; @@ -181,12 +180,7 @@ Cp.setUpSocket = function setUpSocket(sock, key) { sock.pipe(process.stdout); - eachline(sock, "utf8", function(line) { - if (! line && this.finished) { - // Ignore blank lines at the end of the socket stream. - return; - } - + require("./utils/eachline.js").eachline(sock, function (line) { self.exitOnClose = line.indexOf(EXITING_MESSAGE) >= 0; }); diff --git a/tools/utils/eachline.js b/tools/utils/eachline.js new file mode 100644 index 0000000000..011306d867 --- /dev/null +++ b/tools/utils/eachline.js @@ -0,0 +1,25 @@ +import split from "split"; +import { Transform } from "stream"; + +export function eachline(stream, callback) { + stream.pipe(transform(callback)); +} + +export function transform(callback) { + const t = new Transform(); + + t._transform = async function (chunk, encoding, done) { + let line = chunk.toString("utf8"); + try { + line = await callback(line); + } catch (error) { + done(error); + return; + } + done(null, line); + }; + + return split(/\r?\n/, null, { + trailing: false + }).pipe(t); +} diff --git a/tools/utils/utils.js b/tools/utils/utils.js index 495a6bc369..009d7c86df 100644 --- a/tools/utils/utils.js +++ b/tools/utils/utils.js @@ -523,7 +523,7 @@ exports.isValidVersion = function (version, {forCordova}) { exports.execFileSync = function (file, args, opts) { var child_process = require('child_process'); - var eachline = require('eachline'); + var { eachline } = require('./eachline.js'); opts = opts || {}; if (! _.has(opts, 'maxBuffer')) { @@ -533,17 +533,13 @@ exports.execFileSync = function (file, args, opts) { if (opts && opts.pipeOutput) { var p = child_process.spawn(file, args, opts); - eachline(p.stdout, fiberHelpers.bindEnvironment(function (line) { - if (line || ! this.finished) { - process.stdout.write(line + '\n'); - } - })); + eachline(p.stdout, function (line) { + process.stdout.write(line + '\n'); + }); - eachline(p.stderr, fiberHelpers.bindEnvironment(function (line) { - if (line || ! this.finished) { - process.stderr.write(line + '\n'); - } - })); + eachline(p.stderr, function (line) { + process.stderr.write(line + '\n'); + }); return { success: ! new Promise(function (resolve) { @@ -568,23 +564,18 @@ exports.execFileSync = function (file, args, opts) { exports.execFileAsync = function (file, args, opts) { opts = opts || {}; var child_process = require('child_process'); - var eachline = require('eachline'); + var { eachline } = require('./eachline.js'); var p = child_process.spawn(file, args, opts); var mapper = opts.lineMapper || _.identity; - var logOutput = fiberHelpers.bindEnvironment(function (line) { - if (! line && this.finished) { - // Ignore blank lines at the end of the output stream. - return; - } - + function logOutput(line) { if (opts.verbose) { line = mapper(line); if (line) { console.log(line); } } - }); + } eachline(p.stdout, logOutput); eachline(p.stderr, logOutput); From 9bdb98c528c8492cfc2b2392162060251b92521e Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 17 Jul 2017 15:35:37 -0400 Subject: [PATCH 10/93] Bump $BUNDLE_VERSION to 4.8.23 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 5d17a240a9..02433039ce 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.22 +BUNDLE_VERSION=4.8.23 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From d72bb99985162f558fadea4275afee7aeba63f99 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 17 Jul 2017 16:32:53 -0400 Subject: [PATCH 11/93] Bump package versions for 1.5.2-beta.1 release. Since the -beta152.1 suffix is redundant with the meteor-tool version and the release version, I'm using just -beta.1 for those versions, but I'm using -beta152.1 for all other package versions, to avoid overlap with versions previously published on the release-1.6 branch. --- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 6aeeb2eb5b..0600696300 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.0' + version: '6.20.0-beta152.1' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index 4f78b00944..4397cb0b5d 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.0', + version: '1.0.0-beta152.1', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index e7fa4e4509..7a080a9295 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.0' + version: '1.2.0-beta152.1' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 314abc05ee..25d16415a2 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta152.0" + version: "1.5.2-beta.1" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 7511013dd0..ad2445174f 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.0' + version: '1.3.0-beta152.1' }); Package.onUse(function (api) { diff --git a/packages/modules/package.js b/packages/modules/package.js index b8392ccd40..7c11b7b1d7 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.0", + version: "0.10.0-beta152.1", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 1a187e1278..c1d537881a 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.0' + version: '1.2.0-beta152.1' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 9ba185e6b2..7348089bf9 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.0", + version: "0.9.0-beta152.1", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index e5b4fbdc53..ea29fdbe15 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta152.0", + "version": "1.5.2-beta.1", "recommended": false, "official": false, "description": "Meteor" From 7d87376bd24ad3da27334a89a0db94d88ddd21e5 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 17 Jul 2017 17:41:30 -0400 Subject: [PATCH 12/93] Use multipipe and split2 to compose eachline streams. --- scripts/dev-bundle-server-package.js | 4 ++-- scripts/dev-bundle-tool-package.js | 3 ++- tools/utils/eachline.js | 18 ++++++++++++------ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/scripts/dev-bundle-server-package.js b/scripts/dev-bundle-server-package.js index fe98c712f9..6dd47ddc82 100644 --- a/scripts/dev-bundle-server-package.js +++ b/scripts/dev-bundle-server-package.js @@ -22,10 +22,10 @@ var packageJson = { // These are only used in dev mode (by shell.js) so end-users can avoid // needing to install them if they use `npm install --production`. devDependencies: { - split: "1.0.0", + split2: "2.1.1", + multipipe: "1.0.2", chalk: "0.5.1" } }; - process.stdout.write(JSON.stringify(packageJson, null, 2) + '\n'); diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 02ff2d27b0..c8bb4c33a8 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -49,7 +49,8 @@ var packageJson = { // workaround from the tool. "commonmark": "0.15.0", escope: "3.2.0", - split: "1.0.0", + split2: "2.1.1", + multipipe: "1.0.2", pathwatcher: "6.7.1", optimism: "0.3.3", 'lru-cache': '4.0.1', diff --git a/tools/utils/eachline.js b/tools/utils/eachline.js index 011306d867..dff1cd36a8 100644 --- a/tools/utils/eachline.js +++ b/tools/utils/eachline.js @@ -1,4 +1,5 @@ -import split from "split"; +import split from "split2"; +import pipe from "multipipe"; import { Transform } from "stream"; export function eachline(stream, callback) { @@ -6,9 +7,13 @@ export function eachline(stream, callback) { } export function transform(callback) { - const t = new Transform(); + const splitStream = split(/\r?\n/, null, { + trailing: false + }); - t._transform = async function (chunk, encoding, done) { + const transform = new Transform(); + + transform._transform = async function (chunk, encoding, done) { let line = chunk.toString("utf8"); try { line = await callback(line); @@ -19,7 +24,8 @@ export function transform(callback) { done(null, line); }; - return split(/\r?\n/, null, { - trailing: false - }).pipe(t); + return pipe( + splitStream, + transform, + ); } From 4a0295378d90157b3b0f832b575c090d91cef051 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 17 Jul 2017 17:41:59 -0400 Subject: [PATCH 13/93] Bump $BUNDLE_VERSION to 4.8.24 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 02433039ce..4226b081ea 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.23 +BUNDLE_VERSION=4.8.24 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 2c446101bb2ae61a4a3d60862fdc2e38492869e6 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 17 Jul 2017 18:01:06 -0400 Subject: [PATCH 14/93] Bump package versions for 1.5.2-beta.2 release. --- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 0600696300..e3d02d4315 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.1' + version: '6.20.0-beta152.2' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index 4397cb0b5d..417b32cf92 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.1', + version: '1.0.0-beta152.2', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 7a080a9295..26c5632c62 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.1' + version: '1.2.0-beta152.2' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 25d16415a2..2d7ff6e8e6 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.1" + version: "1.5.2-beta.2" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index ad2445174f..0448b05c42 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.1' + version: '1.3.0-beta152.2' }); Package.onUse(function (api) { diff --git a/packages/modules/package.js b/packages/modules/package.js index 7c11b7b1d7..17b7e35a46 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.1", + version: "0.10.0-beta152.2", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo/package.js b/packages/mongo/package.js index c1d537881a..6b79e9cc93 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.1' + version: '1.2.0-beta152.2' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 7348089bf9..585ed6d563 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.1", + version: "0.9.0-beta152.2", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index ea29fdbe15..eef1039ce8 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.1", + "version": "1.5.2-beta.2", "recommended": false, "official": false, "description": "Meteor" From 08fdc8a6f00d18f1b46d90633edce49c109ab683 Mon Sep 17 00:00:00 2001 From: Jan Owsiany Date: Wed, 12 Jul 2017 11:22:01 +0200 Subject: [PATCH 15/93] Update cordova-lib, cordova-ios, cordova-android and cordova plugins to the latest version --- packages/crosswalk/package.js | 2 +- packages/launch-screen/package.js | 2 +- packages/logging/package.js | 2 +- packages/mobile-status-bar/package.js | 2 +- packages/oauth/package.js | 2 +- packages/webapp/package.js | 4 +-- scripts/dev-bundle-tool-package.js | 2 +- tools/cordova/index.js | 4 +-- tools/cordova/project.js | 44 +++++++++++++-------------- 9 files changed, 32 insertions(+), 32 deletions(-) diff --git a/packages/crosswalk/package.js b/packages/crosswalk/package.js index 1dc6923f67..2e7d8b382b 100644 --- a/packages/crosswalk/package.js +++ b/packages/crosswalk/package.js @@ -6,5 +6,5 @@ instead of the System WebView on Android", }); Cordova.depends({ - 'cordova-plugin-crosswalk-webview': '2.2.0' + 'cordova-plugin-crosswalk-webview': '2.3.0' }); diff --git a/packages/launch-screen/package.js b/packages/launch-screen/package.js index c027b04e60..c6c0749150 100644 --- a/packages/launch-screen/package.js +++ b/packages/launch-screen/package.js @@ -10,7 +10,7 @@ Package.describe({ }); Cordova.depends({ - 'cordova-plugin-splashscreen': '4.0.1' + 'cordova-plugin-splashscreen': '4.0.3' }); Package.onUse(function(api) { diff --git a/packages/logging/package.js b/packages/logging/package.js index f92fc241ea..85e6423d1e 100644 --- a/packages/logging/package.js +++ b/packages/logging/package.js @@ -12,7 +12,7 @@ Npm.strip({ }); Cordova.depends({ - 'cordova-plugin-console': '1.0.5' + 'cordova-plugin-console': '1.0.7' }); Package.onUse(function (api) { diff --git a/packages/mobile-status-bar/package.js b/packages/mobile-status-bar/package.js index ddf88dc48d..86485b0923 100644 --- a/packages/mobile-status-bar/package.js +++ b/packages/mobile-status-bar/package.js @@ -4,5 +4,5 @@ Package.describe({ }); Cordova.depends({ - 'cordova-plugin-statusbar': '2.2.1' + 'cordova-plugin-statusbar': '2.2.3' }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index f20389e65b..28b2b0dfbc 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -57,5 +57,5 @@ Package.onTest(function (api) { }); Cordova.depends({ - 'cordova-plugin-inappbrowser': '1.6.1' + 'cordova-plugin-inappbrowser': '1.7.1' }); diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 74c55b8445..43c6bab104 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -14,8 +14,8 @@ Npm.strip({ }); Cordova.depends({ - 'cordova-plugin-whitelist': '1.3.1', - 'cordova-plugin-wkwebview-engine': '1.1.1', + 'cordova-plugin-whitelist': '1.3.2', + 'cordova-plugin-wkwebview-engine': '1.1.3', 'cordova-plugin-meteor-webapp': '1.4.1' }); diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index c8bb4c33a8..7b4baf4d5a 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -54,7 +54,7 @@ var packageJson = { pathwatcher: "6.7.1", optimism: "0.3.3", 'lru-cache': '4.0.1', - 'cordova-lib': "6.4.0", + 'cordova-lib': "7.0.1", longjohn: '0.2.11' } }; diff --git a/tools/cordova/index.js b/tools/cordova/index.js index 09837dc13f..4d5281196e 100644 --- a/tools/cordova/index.js +++ b/tools/cordova/index.js @@ -11,8 +11,8 @@ export const CORDOVA_ARCH = "web.cordova"; export const CORDOVA_PLATFORMS = ['ios', 'android']; export const CORDOVA_PLATFORM_VERSIONS = { - 'android': '6.1.1', - 'ios': '4.3.0' + 'android': '6.2.3', + 'ios': '4.4.0' }; const PLATFORM_TO_DISPLAY_NAME_MAP = { diff --git a/tools/cordova/project.js b/tools/cordova/project.js index b9f125d1ac..cecd8853ee 100644 --- a/tools/cordova/project.js +++ b/tools/cordova/project.js @@ -51,29 +51,29 @@ const pinnedPlatformVersions = CORDOVA_PLATFORM_VERSIONS; // Versions are taken from cordova-lib's package.json and should be updated // when we update to a newer version of cordova-lib. const pinnedPluginVersions = { - "cordova-plugin-battery-status": "1.2.2", - "cordova-plugin-camera": "2.3.1", - "cordova-plugin-console": "1.0.5", - "cordova-plugin-contacts": "2.2.1", - "cordova-plugin-device": "1.1.4", - "cordova-plugin-device-motion": "1.2.3", - "cordova-plugin-device-orientation": "1.0.5", - "cordova-plugin-dialogs": "1.3.1", - "cordova-plugin-file": "4.3.1", - "cordova-plugin-file-transfer": "1.6.1", - "cordova-plugin-geolocation": "2.4.1", - "cordova-plugin-globalization": "1.0.5", - "cordova-plugin-inappbrowser": "1.6.1", + "cordova-plugin-battery-status": "1.2.4", + "cordova-plugin-camera": "2.4.1", + "cordova-plugin-console": "1.0.7", + "cordova-plugin-contacts": "2.3.1", + "cordova-plugin-device": "1.1.6", + "cordova-plugin-device-motion": "1.2.5", + "cordova-plugin-device-orientation": "1.0.7", + "cordova-plugin-dialogs": "1.3.3", + "cordova-plugin-file": "4.3.3", + "cordova-plugin-file-transfer": "1.6.3", + "cordova-plugin-geolocation": "2.4.3", + "cordova-plugin-globalization": "1.0.7", + "cordova-plugin-inappbrowser": "1.7.1", "cordova-plugin-legacy-whitelist": "1.1.2", - "cordova-plugin-media": "2.4.1", - "cordova-plugin-media-capture": "1.4.1", - "cordova-plugin-network-information": "1.3.1", - "cordova-plugin-splashscreen": "4.0.1", - "cordova-plugin-statusbar": "2.2.1", - "cordova-plugin-test-framework": "1.1.4", - "cordova-plugin-vibration": "2.1.3", - "cordova-plugin-whitelist": "1.3.1", - "cordova-plugin-wkwebview-engine": "1.1.1" + "cordova-plugin-media": "3.0.1", + "cordova-plugin-media-capture": "1.4.3", + "cordova-plugin-network-information": "1.3.3", + "cordova-plugin-splashscreen": "4.0.3", + "cordova-plugin-statusbar": "2.2.3", + "cordova-plugin-test-framework": "1.1.5", + "cordova-plugin-vibration": "2.1.5", + "cordova-plugin-whitelist": "1.3.2", + "cordova-plugin-wkwebview-engine": "1.1.3" } export class CordovaProject { From 67d62dd0dc6b5f8b4a0eb906c44aeabdd95ba266 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 18 Jul 2017 14:13:33 -0400 Subject: [PATCH 16/93] Bump $BUNDLE_VERSION to 4.8.25 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 4226b081ea..e7a1fe1cd3 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.24 +BUNDLE_VERSION=4.8.25 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 4fe8541fcd058c82e4c2dbd7d90c68cb50909fd6 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 18 Jul 2017 16:03:27 -0700 Subject: [PATCH 17/93] Bump version of `cordova-plugin-meteor-webapp` to 1.4.2. To get the changes from meteor/cordova-plugin-meteor-webapp#25. --- packages/webapp/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 43c6bab104..73833c6d47 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -16,7 +16,7 @@ Npm.strip({ Cordova.depends({ 'cordova-plugin-whitelist': '1.3.2', 'cordova-plugin-wkwebview-engine': '1.1.3', - 'cordova-plugin-meteor-webapp': '1.4.1' + 'cordova-plugin-meteor-webapp': '1.4.2' }); Package.onUse(function (api) { From d65a6c9a9d2473069aa7f361a5a2ef2853b9f33f Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 19 Jul 2017 10:03:08 -0400 Subject: [PATCH 18/93] Bump package versions for 1.5.2-beta.3 release. --- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index e3d02d4315..fbbcff37f8 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.2' + version: '6.20.0-beta152.3' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index 417b32cf92..28feb62ed2 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.2', + version: '1.0.0-beta152.3', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 26c5632c62..6cb983db03 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.2' + version: '1.2.0-beta152.3' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 2d7ff6e8e6..df5ff1f568 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.2" + version: "1.5.2-beta.3" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 0448b05c42..ac7ce0fa0a 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.2' + version: '1.3.0-beta152.3' }); Package.onUse(function (api) { diff --git a/packages/modules/package.js b/packages/modules/package.js index 17b7e35a46..a3323370ac 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.2", + version: "0.10.0-beta152.3", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 6b79e9cc93..76d4652d95 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.2' + version: '1.2.0-beta152.3' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 585ed6d563..d581e74fe3 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.2", + version: "0.9.0-beta152.3", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 73833c6d47..b3b0b47218 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.17' + version: '1.3.18-beta152.3' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index eef1039ce8..c9d977d5e2 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.2", + "version": "1.5.2-beta.3", "recommended": false, "official": false, "description": "Meteor" From 3090ac72825d5014f9577057eb083183a62cc140 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 17 Jul 2017 19:58:56 -0400 Subject: [PATCH 19/93] Update the modules test app to Meteor 1.5.1. --- tools/tests/apps/modules/.meteor/packages | 10 +++++----- tools/tests/apps/modules/.meteor/release | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/tests/apps/modules/.meteor/packages b/tools/tests/apps/modules/.meteor/packages index d620c184cb..625b793b0d 100644 --- a/tools/tests/apps/modules/.meteor/packages +++ b/tools/tests/apps/modules/.meteor/packages @@ -6,22 +6,22 @@ meteor-base@1.1.0 # Packages every Meteor app needs to have mobile-experience@1.0.4 # Packages for a great mobile UX -mongo@1.1.18 # The database Meteor supports right now +mongo@1.1.19 # The database Meteor supports right now blaze-html-templates # Compile .html files into Meteor Blaze views session@1.1.7 # Client-side reactive dictionary for your app jquery@1.11.10 # Helpful client-side library tracker@1.1.3 # Meteor's client-side reactive programming library es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers. -ecmascript@0.8.0 # Enable ECMAScript2015+ syntax in app code +ecmascript@0.8.2 # Enable ECMAScript2015+ syntax in app code coffeescript modules-test-package dispatch:mocha-phantomjs dispatch:mocha-browser standard-minifier-css@1.3.4 -standard-minifier-js@2.1.0 +standard-minifier-js@2.1.1 client-only-ecmascript modules-test-plugin -shell-server@0.2.3 -dynamic-import +shell-server@0.2.4 +dynamic-import@0.1.1 diff --git a/tools/tests/apps/modules/.meteor/release b/tools/tests/apps/modules/.meteor/release index 025f64e707..1e7fc5b564 100644 --- a/tools/tests/apps/modules/.meteor/release +++ b/tools/tests/apps/modules/.meteor/release @@ -1 +1 @@ -METEOR@1.5 +METEOR@1.5.1 From 765330d8830051436ec00a9048b3985529b9d047 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 17 Jul 2017 20:02:50 -0400 Subject: [PATCH 20/93] Update the dynamic-import test app to Meteor 1.5.1. --- tools/tests/apps/dynamic-import/.meteor/packages | 10 +++++----- tools/tests/apps/dynamic-import/.meteor/release | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/tests/apps/dynamic-import/.meteor/packages b/tools/tests/apps/dynamic-import/.meteor/packages index 5e0d80da9a..7da6f95217 100644 --- a/tools/tests/apps/dynamic-import/.meteor/packages +++ b/tools/tests/apps/dynamic-import/.meteor/packages @@ -6,21 +6,21 @@ meteor-base@1.1.0 # Packages every Meteor app needs to have mobile-experience@1.0.4 # Packages for a great mobile UX -mongo@1.1.18 # The database Meteor supports right now +mongo@1.1.19 # The database Meteor supports right now blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views reactive-var@1.0.11 # Reactive variable for tracker jquery@1.11.10 # Helpful client-side library tracker@1.1.3 # Meteor's client-side reactive programming library standard-minifier-css@1.3.4 # CSS minifier run for production mode -standard-minifier-js@2.1.0 # JS minifier run for production mode +standard-minifier-js@2.1.1 # JS minifier run for production mode es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers. -ecmascript@0.8.0 # Enable ECMAScript2015+ syntax in app code -shell-server@0.2.3 # Server-side component of the `meteor shell` command +ecmascript@0.8.2 # Enable ECMAScript2015+ syntax in app code +shell-server@0.2.4 # Server-side component of the `meteor shell` command autopublish@1.0.7 # Publish all data to the clients (for prototyping) insecure@1.0.7 # Allow all DB writes from clients (for prototyping) -dynamic-import +dynamic-import@0.1.1 dispatch:mocha-phantomjs dispatch:mocha-browser lazy-test-package diff --git a/tools/tests/apps/dynamic-import/.meteor/release b/tools/tests/apps/dynamic-import/.meteor/release index 025f64e707..1e7fc5b564 100644 --- a/tools/tests/apps/dynamic-import/.meteor/release +++ b/tools/tests/apps/dynamic-import/.meteor/release @@ -1 +1 @@ -METEOR@1.5 +METEOR@1.5.1 From 688c6e1525b537e51ca98b93d0d5533c10473636 Mon Sep 17 00:00:00 2001 From: Mitar Date: Wed, 19 Jul 2017 08:28:06 -0700 Subject: [PATCH 21/93] Refactored reset password and enroll account methods (#8207) * Refactored reset password and enroll account methods. To allow easier customization email sending of tokens. * Renaming tokenEmailOptions to generateOptionsForEmail. * Style changes. * Also refactored verification logic. * Const not var. * Allow extra token data. * Document everything. * Bugfixes. * Style. * Addressing PR comments. * Updating to address review comments. --- packages/accounts-password/password_server.js | 286 +++++++++--------- 1 file changed, 145 insertions(+), 141 deletions(-) diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index b088b0aafd..93af180f05 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -546,17 +546,17 @@ Meteor.methods({forgotPassword: function (options) { Accounts.sendResetPasswordEmail(user._id, caseSensitiveEmail); }}); -// send the user an email with a link that when opened allows the user -// to set a new password, without the old password. - /** - * @summary Send an email with a link the user can use to reset their password. + * @summary Generates a reset token and saves it into the database. * @locus Server - * @param {String} userId The id of the user to send email to. - * @param {String} [email] Optional. Which address of the user's to send the email to. This address must be in the user's `emails` list. Defaults to the first email in the list. + * @param {String} userId The id of the user to generate the reset token for. + * @param {String} email Which address of the user to generate the reset token for. This address must be in the user's `emails` list. If `null`, defaults to the first email in the list. + * @param {String} reason `resetPassword` or `enrollAccount`. + * @param {Object} [extraTokenData] Optional additional data to be added into the token record. + * @returns {Object} Object with {email, user, token} values. * @importFromPackage accounts-base */ -Accounts.sendResetPasswordEmail = function (userId, email) { +Accounts.generateResetToken = function (userId, email, reason, extraTokenData) { // Make sure the user exists, and email is one of their addresses. var user = Meteor.users.findOne(userId); if (!user) { @@ -574,44 +574,146 @@ Accounts.sendResetPasswordEmail = function (userId, email) { } var token = Random.secret(); - var when = new Date(); var tokenRecord = { token: token, email: email, - when: when, - reason: 'reset' + when: new Date() }; - Meteor.users.update(userId, {$set: { - "services.password.reset": tokenRecord + + if (reason === 'resetPassword') { + tokenRecord.reason = 'reset'; + } else if (reason === 'enrollAccount') { + tokenRecord.reason = 'enroll'; + } else if (reason) { + // fallback so that this function can be used for unknown reasons as well + tokenRecord.reason = reason; + } + + if (extraTokenData) { + _.extend(tokenRecord, extraTokenData); + } + + Meteor.users.update({_id: user._id}, {$set: { + 'services.password.reset': tokenRecord }}); + // before passing to template, update user object with new token Meteor._ensure(user, 'services', 'password').reset = tokenRecord; - var resetPasswordUrl = Accounts.urls.resetPassword(token); + return {email, user, token}; +}; - var options = { - to: email, - from: Accounts.emailTemplates.resetPassword.from - ? Accounts.emailTemplates.resetPassword.from(user) - : Accounts.emailTemplates.from, - subject: Accounts.emailTemplates.resetPassword.subject(user) - }; - - if (typeof Accounts.emailTemplates.resetPassword.text === 'function') { - options.text = - Accounts.emailTemplates.resetPassword.text(user, resetPasswordUrl); +/** + * @summary Generates an e-mail verification token and saves it into the database. + * @locus Server + * @param {String} userId The id of the user to generate the e-mail verification token for. + * @param {String} email Which address of the user to generate the e-mail verification token for. This address must be in the user's `emails` list. If `null`, defaults to the first unverified email in the list. + * @param {Object} [extraTokenData] Optional additional data to be added into the token record. + * @returns {Object} Object with {email, user, token} values. + * @importFromPackage accounts-base + */ +Accounts.generateVerificationToken = function (userId, email, extraTokenData) { + // Make sure the user exists, and email is one of their addresses. + var user = Meteor.users.findOne(userId); + if (!user) { + handleError("Can't find user"); } - if (typeof Accounts.emailTemplates.resetPassword.html === 'function') { - options.html = - Accounts.emailTemplates.resetPassword.html(user, resetPasswordUrl); + // pick the first unverified email if we weren't passed an email. + if (!email) { + var emailRecord = _.find(user.emails || [], function (e) { return !e.verified; }); + email = (emailRecord || {}).address; + + if (!email) { + handleError("That user has no unverified email addresses."); + } + } + + // make sure we have a valid email + if (!email || !_.contains(_.pluck(user.emails || [], 'address'), email)) { + handleError("No such email for user."); + } + + var token = Random.secret(); + var tokenRecord = { + token: token, + // TODO: This should probably be renamed to "email" to match reset token record. + address: email, + when: new Date() + }; + + if (extraTokenData) { + _.extend(tokenRecord, extraTokenData); + } + + Meteor.users.update({_id: user._id}, {$push: { + 'services.email.verificationTokens': tokenRecord + }}); + + // before passing to template, update user object with new token + Meteor._ensure(user, 'services', 'email'); + if (!user.services.email.verificationTokens) { + user.services.email.verificationTokens = []; + } + user.services.email.verificationTokens.push(tokenRecord); + + return {email, user, token}; +}; + +/** + * @summary Creates options for email sending for reset password and enroll account emails. + * You can use this function when customizing a reset password or enroll account email sending. + * @locus Server + * @param {Object} email Which address of the user's to send the email to. + * @param {Object} user The user object to generate options for. + * @param {String} url URL to which user is directed to confirm the email. + * @param {String} reason `resetPassword` or `enrollAccount`. + * @returns {Object} Options which can be passed to `Email.send`. + * @importFromPackage accounts-base + */ +Accounts.generateOptionsForEmail = function (email, user, url, reason) { + var options = { + to: email, + from: Accounts.emailTemplates[reason].from + ? Accounts.emailTemplates[reason].from(user) + : Accounts.emailTemplates.from, + subject: Accounts.emailTemplates[reason].subject(user) + }; + + if (typeof Accounts.emailTemplates[reason].text === 'function') { + options.text = Accounts.emailTemplates[reason].text(user, url); + } + + if (typeof Accounts.emailTemplates[reason].html === 'function') { + options.html = Accounts.emailTemplates[reason].html(user, url); } if (typeof Accounts.emailTemplates.headers === 'object') { options.headers = Accounts.emailTemplates.headers; } + return options; +}; + +// send the user an email with a link that when opened allows the user +// to set a new password, without the old password. + +/** + * @summary Send an email with a link the user can use to reset their password. + * @locus Server + * @param {String} userId The id of the user to send email to. + * @param {String} [email] Optional. Which address of the user's to send the email to. This address must be in the user's `emails` list. Defaults to the first email in the list. + * @param {Object} [extraTokenData] Optional additional data to be added into the token record. + * @returns {Object} Object with {email, user, token, url, options} values. + * @importFromPackage accounts-base + */ +Accounts.sendResetPasswordEmail = function (userId, email, extraTokenData) { + const {email: realEmail, user, token} = + Accounts.generateResetToken(userId, email, 'resetPassword', extraTokenData); + const url = Accounts.urls.resetPassword(token); + const options = Accounts.generateOptionsForEmail(realEmail, user, url, 'resetPassword'); Email.send(options); + return {email: realEmail, user, token, url, options}; }; // send the user an email informing them that their account was created, with @@ -627,65 +729,17 @@ Accounts.sendResetPasswordEmail = function (userId, email) { * @locus Server * @param {String} userId The id of the user to send email to. * @param {String} [email] Optional. Which address of the user's to send the email to. This address must be in the user's `emails` list. Defaults to the first email in the list. + * @param {Object} [extraTokenData] Optional additional data to be added into the token record. + * @returns {Object} Object with {email, user, token, url, options} values. * @importFromPackage accounts-base */ -Accounts.sendEnrollmentEmail = function (userId, email) { - // XXX refactor! This is basically identical to sendResetPasswordEmail. - - // Make sure the user exists, and email is in their addresses. - var user = Meteor.users.findOne(userId); - if (!user) { - throw new Error("Can't find user"); - } - // pick the first email if we weren't passed an email. - if (!email && user.emails && user.emails[0]) { - email = user.emails[0].address; - } - // make sure we have a valid email - if (!email || !_.contains(_.pluck(user.emails || [], 'address'), email)) { - throw new Error("No such email for user."); - } - - var token = Random.secret(); - var when = new Date(); - var tokenRecord = { - token: token, - email: email, - when: when, - reason: 'enroll' - }; - Meteor.users.update(userId, {$set: { - "services.password.reset": tokenRecord - }}); - - // before passing to template, update user object with new token - Meteor._ensure(user, 'services', 'password').reset = tokenRecord; - - var enrollAccountUrl = Accounts.urls.enrollAccount(token); - - var options = { - to: email, - from: Accounts.emailTemplates.enrollAccount.from - ? Accounts.emailTemplates.enrollAccount.from(user) - : Accounts.emailTemplates.from, - subject: Accounts.emailTemplates.enrollAccount.subject(user) - }; - - if (typeof Accounts.emailTemplates.enrollAccount.text === 'function') { - options.text = - Accounts.emailTemplates.enrollAccount.text(user, enrollAccountUrl); - } - - if (typeof Accounts.emailTemplates.enrollAccount.html === 'function') { - options.html = - Accounts.emailTemplates.enrollAccount.html(user, enrollAccountUrl); - } - - if (typeof Accounts.emailTemplates.headers === 'object') { - options.headers = Accounts.emailTemplates.headers; - } - +Accounts.sendEnrollmentEmail = function (userId, email, extraTokenData) { + const {email: realEmail, user, token} = + Accounts.generateResetToken(userId, email, 'enrollAccount', extraTokenData); + const url = Accounts.urls.enrollAccount(token); + const options = Accounts.generateOptionsForEmail(realEmail, user, url, 'enrollAccount'); Email.send(options); + return {email: realEmail, user, token, url, options}; }; @@ -782,71 +836,21 @@ Meteor.methods({resetPassword: function (token, newPassword) { * @locus Server * @param {String} userId The id of the user to send email to. * @param {String} [email] Optional. Which address of the user's to send the email to. This address must be in the user's `emails` list. Defaults to the first unverified email in the list. + * @param {Object} [extraTokenData] Optional additional data to be added into the token record. + * @returns {Object} Object with {email, user, token, url, options} values. * @importFromPackage accounts-base */ -Accounts.sendVerificationEmail = function (userId, address) { +Accounts.sendVerificationEmail = function (userId, email, extraTokenData) { // XXX Also generate a link using which someone can delete this // account if they own said address but weren't those who created // this account. - // Make sure the user exists, and address is one of their addresses. - var user = Meteor.users.findOne(userId); - if (!user) - throw new Error("Can't find user"); - // pick the first unverified address if we weren't passed an address. - if (!address) { - var email = _.find(user.emails || [], - function (e) { return !e.verified; }); - address = (email || {}).address; - - if (!address) { - throw new Error("That user has no unverified email addresses."); - } - } - // make sure we have a valid address - if (!address || !_.contains(_.pluck(user.emails || [], 'address'), address)) - throw new Error("No such email address for user."); - - - var tokenRecord = { - token: Random.secret(), - address: address, - when: new Date()}; - Meteor.users.update( - {_id: userId}, - {$push: {'services.email.verificationTokens': tokenRecord}}); - - // before passing to template, update user object with new token - Meteor._ensure(user, 'services', 'email'); - if (!user.services.email.verificationTokens) { - user.services.email.verificationTokens = []; - } - user.services.email.verificationTokens.push(tokenRecord); - - var verifyEmailUrl = Accounts.urls.verifyEmail(tokenRecord.token); - - var options = { - to: address, - from: Accounts.emailTemplates.verifyEmail.from - ? Accounts.emailTemplates.verifyEmail.from(user) - : Accounts.emailTemplates.from, - subject: Accounts.emailTemplates.verifyEmail.subject(user) - }; - - if (typeof Accounts.emailTemplates.verifyEmail.text === 'function') { - options.text = - Accounts.emailTemplates.verifyEmail.text(user, verifyEmailUrl); - } - - if (typeof Accounts.emailTemplates.verifyEmail.html === 'function') - options.html = - Accounts.emailTemplates.verifyEmail.html(user, verifyEmailUrl); - - if (typeof Accounts.emailTemplates.headers === 'object') { - options.headers = Accounts.emailTemplates.headers; - } - + const {email: realEmail, user, token} = + Accounts.generateVerificationToken(userId, email, extraTokenData); + const url = Accounts.urls.verifyEmail(token); + const options = Accounts.generateOptionsForEmail(realEmail, user, url, 'verifyEmail'); Email.send(options); + return {email: realEmail, user, token, url, options}; }; // Take token from sendVerificationEmail, mark the email as verified, From 01378df2a076dce0aa3877cf120f8fe9fd32f684 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Wed, 19 Jul 2017 12:12:58 -0400 Subject: [PATCH 22/93] Adjust test-packages --test-app-path to create the directory if missing (#8923) * Adjust test-packages --test-app-path to create the directory if missing. * Slight style tweak. --- tools/cli/commands.js | 41 +++++++++++++++++++-- tools/tests/command-line.js | 72 +++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 3 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index bf3f8b90a6..f6307b2891 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -1579,8 +1579,31 @@ function doTestCommand(options) { // cleaned up on process exit. Using a temporary app dir means that we can // run multiple "test-packages" commands in parallel without them stomping // on each other. - var testRunnerAppDir = - options['test-app-path'] || files.mkdtemp('meteor-test-run'); + let testRunnerAppDir; + const testAppPath = options['test-app-path']; + if (testAppPath) { + try { + if (files.mkdir_p(testAppPath, 0o700)) { + testRunnerAppDir = testAppPath; + } else { + Console.error( + 'The specified --test-app-path directory could not be used, as ' + + `"${testAppPath}" already exists and it is not a directory.` + ); + return 1; + } + } catch (error) { + Console.error( + 'Unable to create the specified --test-app-path directory of ' + + `"${testAppPath}".` + ); + throw error; + } + } + + if (!testRunnerAppDir) { + testRunnerAppDir = files.mkdtemp('meteor-test-run'); + } // Download packages for our architecture, and for the deploy server's // architecture if we're deploying. @@ -1611,7 +1634,19 @@ function doTestCommand(options) { projectContextOptions.projectDir = testRunnerAppDir; projectContextOptions.projectDirForLocalPackages = options.appDir; - require("./default-npm-deps.js").install(testRunnerAppDir); + try { + require("./default-npm-deps.js").install(testRunnerAppDir); + } catch (error) { + if (error.code === 'EACCES' && options['test-app-path']) { + Console.error( + 'The specified --test-app-path directory of ' + + `"${testRunnerAppDir}" exists, but the current user does not have ` + + `read/write permission in it.` + ); + } + throw error; + } + if (buildmessage.jobHasMessages()) { return; } diff --git a/tools/tests/command-line.js b/tools/tests/command-line.js index 9b3ba93e55..dcceac073f 100644 --- a/tools/tests/command-line.js +++ b/tools/tests/command-line.js @@ -561,3 +561,75 @@ selftest.define("old cli tests (converted)", function () { run.expectExit(0); files.unlink(files.pathJoin(s.cwd, 'settings.js')); }); + +// Added to address https://github.com/meteor/meteor/issues/8897. +selftest.define( + 'meteor test-packages --test-app-path directory', + function () { + var s = new Sandbox(); + var run; + + // If test-app-path doesn't exist, it should be created. + var testAppPath = '/tmp/meteor_test_app_path'; + files.rm_recursive(testAppPath); + selftest.expectFalse(files.exists(testAppPath)); + s.createApp('test-app-path-app', 'package-tests', { + dontPrepareApp: true + }); + s.cd('test-app-path-app/packages/say-something', function () { + run = s.run( + 'test-packages', + '--once', + { 'test-app-path': testAppPath }, + './' + ); + run.match('Started'); + selftest.expectTrue(files.exists(testAppPath)); + run.stop(); + files.rm_recursive(testAppPath); + }); + + // If test-app-path already exists, make sure that directory is used. + var testAppPath = '/tmp/meteor_test_app_path'; + files.rm_recursive(testAppPath); + files.mkdir_p(testAppPath); + selftest.expectTrue(files.exists(testAppPath)); + selftest.expectFalse(files.exists(testAppPath + '/.meteor')); + s.createApp('test-app-path-app', 'package-tests', { + dontPrepareApp: true + }); + s.cd('test-app-path-app/packages/say-something', function () { + run = s.run( + 'test-packages', + '--once', + { 'test-app-path': testAppPath }, + './' + ); + run.match('Started'); + selftest.expectTrue(files.exists(testAppPath + '/.meteor')); + run.stop(); + files.rm_recursive(testAppPath); + }); + + // If test-app-path already exists but is a file instead of a directory, + // show a console error message explaining this, and exit. + var testAppPath = '/tmp/meteor_test_app_path'; + files.rm_recursive(testAppPath); + files.writeFile(testAppPath, '<3 meteor'); + selftest.expectTrue(files.exists(testAppPath)); + s.createApp('test-app-path-app', 'package-tests', { + dontPrepareApp: true + }); + s.cd('test-app-path-app/packages/say-something', function () { + run = s.run( + 'test-packages', + '--once', + { 'test-app-path': testAppPath }, + './' + ); + run.matchErr('is not a directory'); + run.expectExit(1); + files.rm_recursive(testAppPath); + }); + } +); From 51950067c0f48faa43022b22f0f40e3d140b0315 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 20 Jul 2017 18:07:47 -0400 Subject: [PATCH 23/93] Bump $BUNDLE_VERSION to 4.8.26 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index e7a1fe1cd3..6a61ea5835 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.25 +BUNDLE_VERSION=4.8.26 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 5a5ff0b1375942e2cccb973c7ede9082ab2491bb Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 20 Jul 2017 18:17:31 -0400 Subject: [PATCH 24/93] Bump package versions for 1.5.2-beta.4 release. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 44f00b666e..3fe7971c23 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2" + version: "1.3.2-beta152.4" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index fbbcff37f8..b95461f153 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.3' + version: '6.20.0-beta152.4' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index 28feb62ed2..6c8ff5307f 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.3', + version: '1.0.0-beta152.4', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 6cb983db03..02264697b9 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.3' + version: '1.2.0-beta152.4' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index df5ff1f568..12fb204504 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.3" + version: "1.5.2-beta.4" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index ac7ce0fa0a..ae812e1431 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.3' + version: '1.3.0-beta152.4' }); Package.onUse(function (api) { diff --git a/packages/modules/package.js b/packages/modules/package.js index a3323370ac..c481877d03 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.3", + version: "0.10.0-beta152.4", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 76d4652d95..e2830798f3 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.3' + version: '1.2.0-beta152.4' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index d581e74fe3..6340084ed5 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.3", + version: "0.9.0-beta152.4", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/webapp/package.js b/packages/webapp/package.js index b3b0b47218..49b689c82f 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-beta152.3' + version: '1.3.18-beta152.4' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index c9d977d5e2..9552b63d46 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.3", + "version": "1.5.2-beta.4", "recommended": false, "official": false, "description": "Meteor" From 16c4e2a7f7221fe84f46d8e0c4d59051685a14ba Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 21 Jul 2017 18:38:51 -0400 Subject: [PATCH 25/93] Bump $BUNDLE_VERSION to 4.8.27 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 6a61ea5835..de5721b1a5 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.26 +BUNDLE_VERSION=4.8.27 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 6cf879d6bf676b1cf282a6560870224b142a9cb2 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 21 Jul 2017 18:41:24 -0400 Subject: [PATCH 26/93] Bump package versions for 1.5.2-beta.5 release. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 3fe7971c23..abdec29407 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2-beta152.4" + version: "1.3.2-beta152.5" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index b95461f153..5201bc3cf1 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.4' + version: '6.20.0-beta152.5' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index 6c8ff5307f..beb9221b98 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.4', + version: '1.0.0-beta152.5', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 02264697b9..1a89175879 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.4' + version: '1.2.0-beta152.5' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 12fb204504..b78278dcaa 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.4" + version: "1.5.2-beta.5" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index ae812e1431..968a6fb53d 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.4' + version: '1.3.0-beta152.5' }); Package.onUse(function (api) { diff --git a/packages/modules/package.js b/packages/modules/package.js index c481877d03..ac2204d813 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.4", + version: "0.10.0-beta152.5", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo/package.js b/packages/mongo/package.js index ac873e9a32..4eea1d7432 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.4' + version: '1.2.0-beta152.5' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 6340084ed5..adc326f341 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.4", + version: "0.9.0-beta152.5", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 49b689c82f..f741bc66c0 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-beta152.4' + version: '1.3.18-beta152.5' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 9552b63d46..6564e149a5 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.4", + "version": "1.5.2-beta.5", "recommended": false, "official": false, "description": "Meteor" From 90fdf768b0a59ae5065d9b6add042b7a5ff0527d Mon Sep 17 00:00:00 2001 From: Stephen Darnell Date: Sun, 23 Jul 2017 16:24:23 +0100 Subject: [PATCH 27/93] Avoid altering line count when removing source map comments. (#8941) Fixes #8927. --- tools/isobuild/bundler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/isobuild/bundler.js b/tools/isobuild/bundler.js index 21cdc50ecf..5b077e8438 100644 --- a/tools/isobuild/bundler.js +++ b/tools/isobuild/bundler.js @@ -2540,7 +2540,7 @@ function addSourceMappingURL(data, url) { // If data is a Buffer, convert it to a string. .toString("utf8") // Remove any existing source map comments. - .replace(/\n\/\/# sourceMappingURL=[^\n]+/g, ""); + .replace(/\n\/\/# sourceMappingURL=[^\n]+/g, '\n'); // Append the new source map comment to the end of the code. return dataString + "\n//# sourceMappingURL=" + url + "\n"; } From 911bdcd82b850d5017a503aa5159500e97116a51 Mon Sep 17 00:00:00 2001 From: Jan Owsiany Date: Fri, 21 Jul 2017 11:06:03 +0200 Subject: [PATCH 28/93] Add cordova update to History.md. --- History.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/History.md b/History.md index 339382ebc1..b00a36eca7 100644 --- a/History.md +++ b/History.md @@ -25,6 +25,15 @@ [Issue #5121](https://github.com/meteor/meteor/issues/5121) [PR #8917](https://github.com/meteor/meteor/pull/8917) +* The `cordova-lib` npm package has been updated to 7.0.1, along with + cordova-android (6.2.3) and cordova-ios (4.4.0), and various plugins. + [PR #8919](https://github.com/meteor/meteor/pull/8919) resolves the + umbrella [issue #8686](https://github.com/meteor/meteor/issues/8686), as + well as several Android build issues: + [#8408](https://github.com/meteor/meteor/issues/8408), + [#8424](https://github.com/meteor/meteor/issues/8424), and + [#8464](https://github.com/meteor/meteor/issues/8464). + ## v1.5.1, 2017-07-12 * Node has been upgraded to version 4.8.4. From d3aff777a2a6b36c4272f380162b1265f2306ad8 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Sun, 23 Jul 2017 11:31:35 -0400 Subject: [PATCH 29/93] Modernize package-version-parser by using modules. (#8914) Also removed the underscore dependency while I was at it. cc @abernix @hwillson @fschaeffler Prerequisite for #8859. --- .../package-version-parser.js | 32 +- packages/package-version-parser/package.js | 5 +- packages/package-version-parser/semver410.js | 1135 ----------------- 3 files changed, 15 insertions(+), 1157 deletions(-) delete mode 100644 packages/package-version-parser/semver410.js diff --git a/packages/package-version-parser/package-version-parser.js b/packages/package-version-parser/package-version-parser.js index c1a807260a..8d179d357e 100644 --- a/packages/package-version-parser/package-version-parser.js +++ b/packages/package-version-parser/package-version-parser.js @@ -1,14 +1,9 @@ -// This file is in tools/packaging/package-version-parser.js and is symlinked to -// packages/package-version-parser/package-version-parser.js. It's part of both -// the tool and the package! We don't use an isopacket for it because it used -// to be required as part of building isopackets (though that may no longer be -// true). -var inTool = typeof Package === 'undefined'; +var inTool = typeof Package === "undefined"; - -var semver = inTool ? - require ('../../dev_bundle/lib/node_modules/semver') : SemVer410; -var __ = inTool ? require('../../dev_bundle/lib/node_modules/underscore') : _; +// Provided by dev_bundle/server-lib/node_modules/semver. +var semver = inTool + ? module.parent.require("semver") + : require("semver"); // Takes in a meteor version string, for example 1.2.3-rc.5_1+12345. // @@ -108,16 +103,14 @@ var PV = function (versionString) { this._semverParsed = null; // populate lazily }; +// Set module.exports for tools/packaging/package-version-parser.js and +// module.exports.PackageVersion for api.export("PackageVersion"). +PV.PackageVersion = module.exports = PV; + PV.parse = function (versionString) { return new PV(versionString); }; -if (inTool) { - module.exports = PV; -} else { - PackageVersion = PV; -} - // Converts a meteor version into a large floating point number, which // is (more or less [*]) unique to that version. Satisfies the // following guarantee: If PV.lessThan(v1, v2) then @@ -156,7 +149,7 @@ var prereleaseIdentifierToFraction = function (prerelease) { if (prerelease.length === 0) return 0; - return __.reduce(prerelease, function (memo, part, index) { + return prerelease.reduce(function (memo, part, index) { var digit; if (typeof part === 'number') { digit = part+1; @@ -289,7 +282,7 @@ PV.VersionConstraint = function (vConstraintString) { } else { // Parse out the versionString. var parts = vConstraintString.split(/ *\|\| */); - alternatives = __.map(parts, function (alt) { + alternatives = parts.map(function (alt) { if (! alt) { throwVersionParserError("Invalid constraint string: " + vConstraintString); @@ -420,7 +413,8 @@ PV.validatePackageName = function (packageName, options) { // (There is already a package ending with a `-` and one with two consecutive `-` // in troposphere, though they both look like typos.) - if (packageName[0] === ":" || __.last(packageName) === ":") { + if (packageName.startsWith(":") || + packageName.endsWith(":")) { throwVersionParserError("Package names may not start or end with a colon: " + JSON.stringify(packageName)); } diff --git a/packages/package-version-parser/package.js b/packages/package-version-parser/package.js index 601910f00f..3e8daf5f16 100644 --- a/packages/package-version-parser/package.js +++ b/packages/package-version-parser/package.js @@ -4,10 +4,9 @@ Package.describe({ }); Package.onUse(function (api) { + api.use('modules'); + api.mainModule('package-version-parser.js'); api.export('PackageVersion'); - api.use('underscore'); - api.addFiles(['semver410.js', - 'package-version-parser.js']); }); Package.onTest(function (api) { diff --git a/packages/package-version-parser/semver410.js b/packages/package-version-parser/semver410.js deleted file mode 100644 index 11e655cd3e..0000000000 --- a/packages/package-version-parser/semver410.js +++ /dev/null @@ -1,1135 +0,0 @@ -// -// Fool the module system detection code below so that it doesn't -// do anything special. -var exports = SemVer, module = {}, define = {}; -// Create a package-private variable. Can't use SemVer because -// of the code that says `function SemVer(...)` below (implicitly -// declaring a var). Can't use "semver" because that's a var in -// package-version-parser.js. -SemVer410 = SemVer; -// - -// export the class if we are in a Node-like system. -if (typeof module === 'object' && module.exports === exports) - exports = module.exports = SemVer; - -// The debug function is excluded entirely from the minified version. -/* nomin */ var debug; -/* nomin */ if (typeof process === 'object' && - /* nomin */ process.env && - /* nomin */ process.env.NODE_DEBUG && - /* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG)) - /* nomin */ debug = function() { - /* nomin */ var args = Array.prototype.slice.call(arguments, 0); - /* nomin */ args.unshift('SEMVER'); - /* nomin */ console.log.apply(console, args); - /* nomin */ }; -/* nomin */ else - /* nomin */ debug = function() {}; - -// Note: this is the semver.org version of the spec that it implements -// Not necessarily the package version of this code. -exports.SEMVER_SPEC_VERSION = '2.0.0'; - -// The actual regexps go on exports.re -var re = exports.re = []; -var src = exports.src = []; -var R = 0; - -// The following Regular Expressions can be used for tokenizing, -// validating, and parsing SemVer version strings. - -// ## Numeric Identifier -// A single `0`, or a non-zero digit followed by zero or more digits. - -var NUMERICIDENTIFIER = R++; -src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'; -var NUMERICIDENTIFIERLOOSE = R++; -src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'; - - -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. - -var NONNUMERICIDENTIFIER = R++; -src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'; - - -// ## Main Version -// Three dot-separated numeric identifiers. - -var MAINVERSION = R++; -src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + - '(' + src[NUMERICIDENTIFIER] + ')\\.' + - '(' + src[NUMERICIDENTIFIER] + ')'; - -var MAINVERSIONLOOSE = R++; -src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[NUMERICIDENTIFIERLOOSE] + ')'; - -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. - -var PRERELEASEIDENTIFIER = R++; -src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + - '|' + src[NONNUMERICIDENTIFIER] + ')'; - -var PRERELEASEIDENTIFIERLOOSE = R++; -src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + - '|' + src[NONNUMERICIDENTIFIER] + ')'; - - -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. - -var PRERELEASE = R++; -src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + - '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'; - -var PRERELEASELOOSE = R++; -src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + - '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'; - -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. - -var BUILDIDENTIFIER = R++; -src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'; - -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. - -var BUILD = R++; -src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + - '(?:\\.' + src[BUILDIDENTIFIER] + ')*))'; - - -// ## Full Version String -// A main version, followed optionally by a pre-release version and -// build metadata. - -// Note that the only major, minor, patch, and pre-release sections of -// the version string are capturing groups. The build metadata is not a -// capturing group, because it should not ever be used in version -// comparison. - -var FULL = R++; -var FULLPLAIN = 'v?' + src[MAINVERSION] + - src[PRERELEASE] + '?' + - src[BUILD] + '?'; - -src[FULL] = '^' + FULLPLAIN + '$'; - -// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. -// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty -// common in the npm registry. -var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + - src[PRERELEASELOOSE] + '?' + - src[BUILD] + '?'; - -var LOOSE = R++; -src[LOOSE] = '^' + LOOSEPLAIN + '$'; - -var GTLT = R++; -src[GTLT] = '((?:<|>)?=?)'; - -// Something like "2.*" or "1.2.x". -// Note that "x.x" is a valid xRange identifer, meaning "any version" -// Only the first item is strictly required. -var XRANGEIDENTIFIERLOOSE = R++; -src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'; -var XRANGEIDENTIFIER = R++; -src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'; - -var XRANGEPLAIN = R++; -src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + - '(?:' + src[PRERELEASE] + ')?' + - src[BUILD] + '?' + - ')?)?'; - -var XRANGEPLAINLOOSE = R++; -src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:' + src[PRERELEASELOOSE] + ')?' + - src[BUILD] + '?' + - ')?)?'; - -var XRANGE = R++; -src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'; -var XRANGELOOSE = R++; -src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'; - -// Tilde ranges. -// Meaning is "reasonably at or greater than" -var LONETILDE = R++; -src[LONETILDE] = '(?:~>?)'; - -var TILDETRIM = R++; -src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'; -re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g'); -var tildeTrimReplace = '$1~'; - -var TILDE = R++; -src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'; -var TILDELOOSE = R++; -src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'; - -// Caret ranges. -// Meaning is "at least and backwards compatible with" -var LONECARET = R++; -src[LONECARET] = '(?:\\^)'; - -var CARETTRIM = R++; -src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'; -re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g'); -var caretTrimReplace = '$1^'; - -var CARET = R++; -src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'; -var CARETLOOSE = R++; -src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'; - -// A simple gt/lt/eq thing, or just "" to indicate "any version" -var COMPARATORLOOSE = R++; -src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'; -var COMPARATOR = R++; -src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'; - - -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -var COMPARATORTRIM = R++; -src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + - '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'; - -// this one has to use the /g flag -re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g'); -var comparatorTrimReplace = '$1$2$3'; - - -// Something like `1.2.3 - 1.2.4` -// Note that these all use the loose form, because they'll be -// checked against either the strict or loose comparator form -// later. -var HYPHENRANGE = R++; -src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + - '\\s+-\\s+' + - '(' + src[XRANGEPLAIN] + ')' + - '\\s*$'; - -var HYPHENRANGELOOSE = R++; -src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + - '\\s+-\\s+' + - '(' + src[XRANGEPLAINLOOSE] + ')' + - '\\s*$'; - -// Star ranges basically just allow anything at all. -var STAR = R++; -src[STAR] = '(<|>)?=?\\s*\\*'; - -// Compile to actual regexp objects. -// All are flag-free, unless they were created above with a flag. -for (var i = 0; i < R; i++) { - debug(i, src[i]); - if (!re[i]) - re[i] = new RegExp(src[i]); -} - -exports.parse = parse; -function parse(version, loose) { - var r = loose ? re[LOOSE] : re[FULL]; - return (r.test(version)) ? new SemVer(version, loose) : null; -} - -exports.valid = valid; -function valid(version, loose) { - var v = parse(version, loose); - return v ? v.version : null; -} - - -exports.clean = clean; -function clean(version, loose) { - var s = parse(version.trim().replace(/^[=v]+/, ''), loose); - return s ? s.version : null; -} - -exports.SemVer = SemVer; - -function SemVer(version, loose) { - if (version instanceof SemVer) { - if (version.loose === loose) - return version; - else - version = version.version; - } else if (typeof version !== 'string') { - throw new TypeError('Invalid Version: ' + version); - } - - if (!(this instanceof SemVer)) - return new SemVer(version, loose); - - debug('SemVer', version, loose); - this.loose = loose; - var m = version.trim().match(loose ? re[LOOSE] : re[FULL]); - - if (!m) - throw new TypeError('Invalid Version: ' + version); - - this.raw = version; - - // these are actually numbers - this.major = +m[1]; - this.minor = +m[2]; - this.patch = +m[3]; - - // numberify any prerelease numeric ids - if (!m[4]) - this.prerelease = []; - else - this.prerelease = m[4].split('.').map(function(id) { - return (/^[0-9]+$/.test(id)) ? +id : id; - }); - - this.build = m[5] ? m[5].split('.') : []; - this.format(); -} - -SemVer.prototype.format = function() { - this.version = this.major + '.' + this.minor + '.' + this.patch; - if (this.prerelease.length) - this.version += '-' + this.prerelease.join('.'); - return this.version; -}; - -SemVer.prototype.inspect = function() { - return ''; -}; - -SemVer.prototype.toString = function() { - return this.version; -}; - -SemVer.prototype.compare = function(other) { - debug('SemVer.compare', this.version, this.loose, other); - if (!(other instanceof SemVer)) - other = new SemVer(other, this.loose); - - return this.compareMain(other) || this.comparePre(other); -}; - -SemVer.prototype.compareMain = function(other) { - if (!(other instanceof SemVer)) - other = new SemVer(other, this.loose); - - return compareIdentifiers(this.major, other.major) || - compareIdentifiers(this.minor, other.minor) || - compareIdentifiers(this.patch, other.patch); -}; - -SemVer.prototype.comparePre = function(other) { - if (!(other instanceof SemVer)) - other = new SemVer(other, this.loose); - - // NOT having a prerelease is > having one - if (this.prerelease.length && !other.prerelease.length) - return -1; - else if (!this.prerelease.length && other.prerelease.length) - return 1; - else if (!this.prerelease.length && !other.prerelease.length) - return 0; - - var i = 0; - do { - var a = this.prerelease[i]; - var b = other.prerelease[i]; - debug('prerelease compare', i, a, b); - if (a === undefined && b === undefined) - return 0; - else if (b === undefined) - return 1; - else if (a === undefined) - return -1; - else if (a === b) - continue; - else - return compareIdentifiers(a, b); - } while (++i); -}; - -// preminor will bump the version up to the next minor release, and immediately -// down to pre-release. premajor and prepatch work the same way. -SemVer.prototype.inc = function(release, identifier) { - switch (release) { - case 'premajor': - this.prerelease.length = 0; - this.patch = 0; - this.minor = 0; - this.major++; - this.inc('pre', identifier); - break; - case 'preminor': - this.prerelease.length = 0; - this.patch = 0; - this.minor++; - this.inc('pre', identifier); - break; - case 'prepatch': - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0; - this.inc('patch', identifier); - this.inc('pre', identifier); - break; - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case 'prerelease': - if (this.prerelease.length === 0) - this.inc('patch', identifier); - this.inc('pre', identifier); - break; - - case 'major': - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) - this.major++; - this.minor = 0; - this.patch = 0; - this.prerelease = []; - break; - case 'minor': - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) - this.minor++; - this.patch = 0; - this.prerelease = []; - break; - case 'patch': - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) - this.patch++; - this.prerelease = []; - break; - // This probably shouldn't be used publicly. - // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. - case 'pre': - if (this.prerelease.length === 0) - this.prerelease = [0]; - else { - var i = this.prerelease.length; - while (--i >= 0) { - if (typeof this.prerelease[i] === 'number') { - this.prerelease[i]++; - i = -2; - } - } - if (i === -1) // didn't increment anything - this.prerelease.push(0); - } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1])) - this.prerelease = [identifier, 0]; - } else - this.prerelease = [identifier, 0]; - } - break; - - default: - throw new Error('invalid increment argument: ' + release); - } - this.format(); - return this; -}; - -exports.inc = inc; -function inc(version, release, loose, identifier) { - if (typeof(loose) === 'string') { - identifier = loose; - loose = undefined; - } - - try { - return new SemVer(version, loose).inc(release, identifier).version; - } catch (er) { - return null; - } -} - -exports.compareIdentifiers = compareIdentifiers; - -var numeric = /^[0-9]+$/; -function compareIdentifiers(a, b) { - var anum = numeric.test(a); - var bnum = numeric.test(b); - - if (anum && bnum) { - a = +a; - b = +b; - } - - return (anum && !bnum) ? -1 : - (bnum && !anum) ? 1 : - a < b ? -1 : - a > b ? 1 : - 0; -} - -exports.rcompareIdentifiers = rcompareIdentifiers; -function rcompareIdentifiers(a, b) { - return compareIdentifiers(b, a); -} - -exports.compare = compare; -function compare(a, b, loose) { - return new SemVer(a, loose).compare(b); -} - -exports.compareLoose = compareLoose; -function compareLoose(a, b) { - return compare(a, b, true); -} - -exports.rcompare = rcompare; -function rcompare(a, b, loose) { - return compare(b, a, loose); -} - -exports.sort = sort; -function sort(list, loose) { - return list.sort(function(a, b) { - return exports.compare(a, b, loose); - }); -} - -exports.rsort = rsort; -function rsort(list, loose) { - return list.sort(function(a, b) { - return exports.rcompare(a, b, loose); - }); -} - -exports.gt = gt; -function gt(a, b, loose) { - return compare(a, b, loose) > 0; -} - -exports.lt = lt; -function lt(a, b, loose) { - return compare(a, b, loose) < 0; -} - -exports.eq = eq; -function eq(a, b, loose) { - return compare(a, b, loose) === 0; -} - -exports.neq = neq; -function neq(a, b, loose) { - return compare(a, b, loose) !== 0; -} - -exports.gte = gte; -function gte(a, b, loose) { - return compare(a, b, loose) >= 0; -} - -exports.lte = lte; -function lte(a, b, loose) { - return compare(a, b, loose) <= 0; -} - -exports.cmp = cmp; -function cmp(a, op, b, loose) { - var ret; - switch (op) { - case '===': - if (typeof a === 'object') a = a.version; - if (typeof b === 'object') b = b.version; - ret = a === b; - break; - case '!==': - if (typeof a === 'object') a = a.version; - if (typeof b === 'object') b = b.version; - ret = a !== b; - break; - case '': case '=': case '==': ret = eq(a, b, loose); break; - case '!=': ret = neq(a, b, loose); break; - case '>': ret = gt(a, b, loose); break; - case '>=': ret = gte(a, b, loose); break; - case '<': ret = lt(a, b, loose); break; - case '<=': ret = lte(a, b, loose); break; - default: throw new TypeError('Invalid operator: ' + op); - } - return ret; -} - -exports.Comparator = Comparator; -function Comparator(comp, loose) { - if (comp instanceof Comparator) { - if (comp.loose === loose) - return comp; - else - comp = comp.value; - } - - if (!(this instanceof Comparator)) - return new Comparator(comp, loose); - - debug('comparator', comp, loose); - this.loose = loose; - this.parse(comp); - - if (this.semver === ANY) - this.value = ''; - else - this.value = this.operator + this.semver.version; - - debug('comp', this); -} - -var ANY = {}; -Comparator.prototype.parse = function(comp) { - var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; - var m = comp.match(r); - - if (!m) - throw new TypeError('Invalid comparator: ' + comp); - - this.operator = m[1]; - if (this.operator === '=') - this.operator = ''; - - // if it literally is just '>' or '' then allow anything. - if (!m[2]) - this.semver = ANY; - else - this.semver = new SemVer(m[2], this.loose); -}; - -Comparator.prototype.inspect = function() { - return ''; -}; - -Comparator.prototype.toString = function() { - return this.value; -}; - -Comparator.prototype.test = function(version) { - debug('Comparator.test', version, this.loose); - - if (this.semver === ANY) - return true; - - if (typeof version === 'string') - version = new SemVer(version, this.loose); - - return cmp(version, this.operator, this.semver, this.loose); -}; - - -exports.Range = Range; -function Range(range, loose) { - if ((range instanceof Range) && range.loose === loose) - return range; - - if (!(this instanceof Range)) - return new Range(range, loose); - - this.loose = loose; - - // First, split based on boolean or || - this.raw = range; - this.set = range.split(/\s*\|\|\s*/).map(function(range) { - return this.parseRange(range.trim()); - }, this).filter(function(c) { - // throw out any that are not relevant for whatever reason - return c.length; - }); - - if (!this.set.length) { - throw new TypeError('Invalid SemVer Range: ' + range); - } - - this.format(); -} - -Range.prototype.inspect = function() { - return ''; -}; - -Range.prototype.format = function() { - this.range = this.set.map(function(comps) { - return comps.join(' ').trim(); - }).join('||').trim(); - return this.range; -}; - -Range.prototype.toString = function() { - return this.range; -}; - -Range.prototype.parseRange = function(range) { - var loose = this.loose; - range = range.trim(); - debug('range', range, loose); - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]; - range = range.replace(hr, hyphenReplace); - debug('hyphen replace', range); - // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` - range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace); - debug('comparator trim', range, re[COMPARATORTRIM]); - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(re[TILDETRIM], tildeTrimReplace); - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(re[CARETTRIM], caretTrimReplace); - - // normalize spaces - range = range.split(/\s+/).join(' '); - - // At this point, the range is completely trimmed and - // ready to be split into comparators. - - var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; - var set = range.split(' ').map(function(comp) { - return parseComparator(comp, loose); - }).join(' ').split(/\s+/); - if (this.loose) { - // in loose mode, throw out any that are not valid comparators - set = set.filter(function(comp) { - return !!comp.match(compRe); - }); - } - set = set.map(function(comp) { - return new Comparator(comp, loose); - }); - - return set; -}; - -// Mostly just for testing and legacy API reasons -exports.toComparators = toComparators; -function toComparators(range, loose) { - return new Range(range, loose).set.map(function(comp) { - return comp.map(function(c) { - return c.value; - }).join(' ').trim().split(' '); - }); -} - -// comprised of xranges, tildes, stars, and gtlt's at this point. -// already replaced the hyphen ranges -// turn into a set of JUST comparators. -function parseComparator(comp, loose) { - debug('comp', comp); - comp = replaceCarets(comp, loose); - debug('caret', comp); - comp = replaceTildes(comp, loose); - debug('tildes', comp); - comp = replaceXRanges(comp, loose); - debug('xrange', comp); - comp = replaceStars(comp, loose); - debug('stars', comp); - return comp; -} - -function isX(id) { - return !id || id.toLowerCase() === 'x' || id === '*'; -} - -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 -function replaceTildes(comp, loose) { - return comp.trim().split(/\s+/).map(function(comp) { - return replaceTilde(comp, loose); - }).join(' '); -} - -function replaceTilde(comp, loose) { - var r = loose ? re[TILDELOOSE] : re[TILDE]; - return comp.replace(r, function(_, M, m, p, pr) { - debug('tilde', comp, _, M, m, p, pr); - var ret; - - if (isX(M)) - ret = ''; - else if (isX(m)) - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; - else if (isX(p)) - // ~1.2 == >=1.2.0- <1.3.0- - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; - else if (pr) { - debug('replaceTilde pr', pr); - if (pr.charAt(0) !== '-') - pr = '-' + pr; - ret = '>=' + M + '.' + m + '.' + p + pr + - ' <' + M + '.' + (+m + 1) + '.0'; - } else - // ~1.2.3 == >=1.2.3 <1.3.0 - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + (+m + 1) + '.0'; - - debug('tilde return', ret); - return ret; - }); -} - -// ^ --> * (any, kinda silly) -// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 -// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 -// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 -// ^1.2.3 --> >=1.2.3 <2.0.0 -// ^1.2.0 --> >=1.2.0 <2.0.0 -function replaceCarets(comp, loose) { - return comp.trim().split(/\s+/).map(function(comp) { - return replaceCaret(comp, loose); - }).join(' '); -} - -function replaceCaret(comp, loose) { - debug('caret', comp, loose); - var r = loose ? re[CARETLOOSE] : re[CARET]; - return comp.replace(r, function(_, M, m, p, pr) { - debug('caret', comp, _, M, m, p, pr); - var ret; - - if (isX(M)) - ret = ''; - else if (isX(m)) - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; - else if (isX(p)) { - if (M === '0') - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; - else - ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'; - } else if (pr) { - debug('replaceCaret pr', pr); - if (pr.charAt(0) !== '-') - pr = '-' + pr; - if (M === '0') { - if (m === '0') - ret = '>=' + M + '.' + m + '.' + p + pr + - ' <' + M + '.' + m + '.' + (+p + 1); - else - ret = '>=' + M + '.' + m + '.' + p + pr + - ' <' + M + '.' + (+m + 1) + '.0'; - } else - ret = '>=' + M + '.' + m + '.' + p + pr + - ' <' + (+M + 1) + '.0.0'; - } else { - debug('no pr'); - if (M === '0') { - if (m === '0') - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + m + '.' + (+p + 1); - else - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + (+m + 1) + '.0'; - } else - ret = '>=' + M + '.' + m + '.' + p + - ' <' + (+M + 1) + '.0.0'; - } - - debug('caret return', ret); - return ret; - }); -} - -function replaceXRanges(comp, loose) { - debug('replaceXRanges', comp, loose); - return comp.split(/\s+/).map(function(comp) { - return replaceXRange(comp, loose); - }).join(' '); -} - -function replaceXRange(comp, loose) { - comp = comp.trim(); - var r = loose ? re[XRANGELOOSE] : re[XRANGE]; - return comp.replace(r, function(ret, gtlt, M, m, p, pr) { - debug('xRange', comp, ret, gtlt, M, m, p, pr); - var xM = isX(M); - var xm = xM || isX(m); - var xp = xm || isX(p); - var anyX = xp; - - if (gtlt === '=' && anyX) - gtlt = ''; - - if (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<0.0.0'; - } else { - // nothing is forbidden - ret = '*'; - } - } else if (gtlt && anyX) { - // replace X with 0 - if (xm) - m = 0; - if (xp) - p = 0; - - if (gtlt === '>') { - // >1 => >=2.0.0 - // >1.2 => >=1.3.0 - // >1.2.3 => >= 1.2.4 - gtlt = '>='; - if (xm) { - M = +M + 1; - m = 0; - p = 0; - } else if (xp) { - m = +m + 1; - p = 0; - } - } else if (gtlt === '<=') { - // <=0.7.x is actually <0.8.0, since any 0.7.x should - // pass. Similarly, <=7.x is actually <8.0.0, etc. - gtlt = '<' - if (xm) - M = +M + 1 - else - m = +m + 1 - } - - ret = gtlt + M + '.' + m + '.' + p; - } else if (xm) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; - } else if (xp) { - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; - } - - debug('xRange return', ret); - - return ret; - }); -} - -// Because * is AND-ed with everything else in the comparator, -// and '' means "any version", just remove the *s entirely. -function replaceStars(comp, loose) { - debug('replaceStars', comp, loose); - // Looseness is ignored here. star is always as loose as it gets! - return comp.trim().replace(re[STAR], ''); -} - -// This function is passed to string.replace(re[HYPHENRANGE]) -// M, m, patch, prerelease, build -// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 -// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do -// 1.2 - 3.4 => >=1.2.0 <3.5.0 -function hyphenReplace($0, - from, fM, fm, fp, fpr, fb, - to, tM, tm, tp, tpr, tb) { - - if (isX(fM)) - from = ''; - else if (isX(fm)) - from = '>=' + fM + '.0.0'; - else if (isX(fp)) - from = '>=' + fM + '.' + fm + '.0'; - else - from = '>=' + from; - - if (isX(tM)) - to = ''; - else if (isX(tm)) - to = '<' + (+tM + 1) + '.0.0'; - else if (isX(tp)) - to = '<' + tM + '.' + (+tm + 1) + '.0'; - else if (tpr) - to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr; - else - to = '<=' + to; - - return (from + ' ' + to).trim(); -} - - -// if ANY of the sets match ALL of its comparators, then pass -Range.prototype.test = function(version) { - if (!version) - return false; - - if (typeof version === 'string') - version = new SemVer(version, this.loose); - - for (var i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version)) - return true; - } - return false; -}; - -function testSet(set, version) { - for (var i = 0; i < set.length; i++) { - if (!set[i].test(version)) - return false; - } - - if (version.prerelease.length) { - // Find the set of versions that are allowed to have prereleases - // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 - // That should allow `1.2.3-pr.2` to pass. - // However, `1.2.4-alpha.notready` should NOT be allowed, - // even though it's within the range set by the comparators. - for (var i = 0; i < set.length; i++) { - debug(set[i].semver); - if (set[i].semver === ANY) - return true; - - if (set[i].semver.prerelease.length > 0) { - var allowed = set[i].semver; - if (allowed.major === version.major && - allowed.minor === version.minor && - allowed.patch === version.patch) - return true; - } - } - - // Version has a -pre, but it's not one of the ones we like. - return false; - } - - return true; -} - -exports.satisfies = satisfies; -function satisfies(version, range, loose) { - try { - range = new Range(range, loose); - } catch (er) { - return false; - } - return range.test(version); -} - -exports.maxSatisfying = maxSatisfying; -function maxSatisfying(versions, range, loose) { - return versions.filter(function(version) { - return satisfies(version, range, loose); - }).sort(function(a, b) { - return rcompare(a, b, loose); - })[0] || null; -} - -exports.validRange = validRange; -function validRange(range, loose) { - try { - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return new Range(range, loose).range || '*'; - } catch (er) { - return null; - } -} - -// Determine if version is less than all the versions possible in the range -exports.ltr = ltr; -function ltr(version, range, loose) { - return outside(version, range, '<', loose); -} - -// Determine if version is greater than all the versions possible in the range. -exports.gtr = gtr; -function gtr(version, range, loose) { - return outside(version, range, '>', loose); -} - -exports.outside = outside; -function outside(version, range, hilo, loose) { - version = new SemVer(version, loose); - range = new Range(range, loose); - - var gtfn, ltefn, ltfn, comp, ecomp; - switch (hilo) { - case '>': - gtfn = gt; - ltefn = lte; - ltfn = lt; - comp = '>'; - ecomp = '>='; - break; - case '<': - gtfn = lt; - ltefn = gte; - ltfn = gt; - comp = '<'; - ecomp = '<='; - break; - default: - throw new TypeError('Must provide a hilo val of "<" or ">"'); - } - - // If it satisifes the range it is not outside - if (satisfies(version, range, loose)) { - return false; - } - - // From now on, variable terms are as if we're in "gtr" mode. - // but note that everything is flipped for the "ltr" function. - - for (var i = 0; i < range.set.length; ++i) { - var comparators = range.set[i]; - - var high = null; - var low = null; - - comparators.forEach(function(comparator) { - high = high || comparator; - low = low || comparator; - if (gtfn(comparator.semver, high.semver, loose)) { - high = comparator; - } else if (ltfn(comparator.semver, low.semver, loose)) { - low = comparator; - } - }); - - // If the edge version comparator has a operator then our version - // isn't outside it - if (high.operator === comp || high.operator === ecomp) { - return false; - } - - // If the lowest version comparator has an operator and our version - // is less than it then it isn't higher than the range - if ((!low.operator || low.operator === comp) && - ltefn(version, low.semver)) { - return false; - } else if (low.operator === ecomp && ltfn(version, low.semver)) { - return false; - } - } - return true; -} - -// Use the define() function if we're in AMD land -if (typeof define === 'function' && define.amd) - define(exports); From 60776a6cd29ef5e27455bd166ca327cb8841dac7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Sch=C3=A4ffler?= Date: Sun, 23 Jul 2017 18:32:50 +0300 Subject: [PATCH 30/93] Updated the `semver` npm package to version 5.3.0. (#8859) --- scripts/dev-bundle-server-package.js | 2 +- scripts/dev-bundle-tool-package.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/dev-bundle-server-package.js b/scripts/dev-bundle-server-package.js index 6dd47ddc82..521ac91382 100644 --- a/scripts/dev-bundle-server-package.js +++ b/scripts/dev-bundle-server-package.js @@ -17,7 +17,7 @@ var packageJson = { // (and there are backwards-incompatible changes either way). underscore: "1.5.2", "source-map-support": "https://github.com/meteor/node-source-map-support/tarball/1912478769d76e5df4c365e147f25896aee6375e", - semver: "4.1.0" + semver: "5.3.0" }, // These are only used in dev mode (by shell.js) so end-users can avoid // needing to install them if they use `npm install --production`. diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 7b4baf4d5a..09ad579d3b 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -28,7 +28,7 @@ var packageJson = { // (and there are backwards-incompatible changes either way). underscore: "1.5.2", "source-map-support": "https://github.com/meteor/node-source-map-support/tarball/1912478769d76e5df4c365e147f25896aee6375e", - semver: "4.1.0", + semver: "5.3.0", request: "2.47.0", fstream: "https://github.com/meteor/fstream/tarball/cf4ea6c175355cec7bee38311e170d08c4078a5d", tar: "2.2.1", From e2a60e95a2182f347019baf8578e4901e63720ec Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Sun, 23 Jul 2017 11:50:58 -0400 Subject: [PATCH 31/93] Bump $BUNDLE_VERSION to 4.8.28 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index de5721b1a5..eb80a8baf7 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.27 +BUNDLE_VERSION=4.8.28 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 01809857791e3dadb2f6fc1909dedf98641ab2fc Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Sun, 23 Jul 2017 11:58:58 -0400 Subject: [PATCH 32/93] Bump package versions for 1.5.2-beta.6 release. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index abdec29407..c2bffb408d 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2-beta152.5" + version: "1.3.2-beta152.6" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 5201bc3cf1..00fc163358 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.5' + version: '6.20.0-beta152.6' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index beb9221b98..9228002677 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.5', + version: '1.0.0-beta152.6', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 1a89175879..ea432d640c 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.5' + version: '1.2.0-beta152.6' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index b78278dcaa..4a3729b4e2 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.5" + version: "1.5.2-beta.6" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 968a6fb53d..c121ae4c34 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.5' + version: '1.3.0-beta152.6' }); Package.onUse(function (api) { diff --git a/packages/modules/package.js b/packages/modules/package.js index ac2204d813..75949dac24 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.5", + version: "0.10.0-beta152.6", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 4eea1d7432..8f16815921 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.5' + version: '1.2.0-beta152.6' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index adc326f341..564b636170 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.5", + version: "0.9.0-beta152.6", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/webapp/package.js b/packages/webapp/package.js index f741bc66c0..7f1c3af21e 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-beta152.5' + version: '1.3.18-beta152.6' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 6564e149a5..865e5ba77a 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.5", + "version": "1.5.2-beta.6", "recommended": false, "official": false, "description": "Meteor" From a1c2eefb1e7b5a97e8c28c1f0b8c9daadf9fac2e Mon Sep 17 00:00:00 2001 From: Simon Fridlund Date: Wed, 26 Jul 2017 17:08:00 +0200 Subject: [PATCH 33/93] Add mongo-dev-server package (#8853) * Add mongo-dev-server package Only start the MongoDB server if this package is present in the project. * Small layout/formatting adjustments; updated README. * Allow tests using fake-mongod to start (fake) Mongo. * Adjust test stdout matching to be less sensitive to ordering. * Add `mongo-dev-server` History.md entry. * Remove mongo start check since the tested for error prevents mongo startup. * Remove README traling whitespace. * Bump mongo package version. --- History.md | 12 ++++++++++++ packages/mongo-dev-server/README.md | 18 ++++++++++++++++++ packages/mongo-dev-server/package.js | 12 ++++++++++++ packages/mongo-dev-server/server.js | 3 +++ packages/mongo/package.js | 3 ++- tools/runners/run-all.js | 19 ++++++++++++++++++- tools/tests/compiler-plugins.js | 5 +++-- tools/tests/static-html.js | 2 +- 8 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 packages/mongo-dev-server/README.md create mode 100644 packages/mongo-dev-server/package.js create mode 100644 packages/mongo-dev-server/server.js diff --git a/History.md b/History.md index b00a36eca7..a63c31332e 100644 --- a/History.md +++ b/History.md @@ -20,6 +20,18 @@ * The `meteor-promise` package has been upgraded to version 0.8.5, and the `promise` polyfill package has been upgraded to 8.0.1. +* A new package called `mongo-dev-server` has been created and wired into + `mongo` as a dependency. As long as this package is included in a Meteor + application (which it is by default since all new Meteor apps have `mongo` + as a dependency), a local development MongoDB server is started alongside + the application. This package was created to provide a way to disable the + local development Mongo server, when `mongo` isn't needed (e.g. when using + Meteor as a build system only). If an application has no dependency on + `mongo`, the `mongo-dev-server` package is not added, which means no local + development Mongo server is started. + [Feature Request #31](https://github.com/meteor/meteor-feature-requests/issues/31) + [PR #8853](https://github.com/meteor/meteor/pull/8853) + * `Accounts.config` no longer mistakenly allows tokens to expire when the `loginExpirationInDays` option is set to `null`. [Issue #5121](https://github.com/meteor/meteor/issues/5121) diff --git a/packages/mongo-dev-server/README.md b/packages/mongo-dev-server/README.md new file mode 100644 index 0000000000..44609c29b5 --- /dev/null +++ b/packages/mongo-dev-server/README.md @@ -0,0 +1,18 @@ +# mongo-dev-server + +[Source code of released version](https://github.com/meteor/meteor/tree/master/packages/mongo-dev-server) | [Source code of development version](https://github.com/meteor/meteor/tree/devel/packages/mongo-dev-server) +*** + +When the `mongo-dev-server` package is included in a Meteor application, a +local development MongoDB server is started alongside the application. This +package is mostly used internally, as it is included by default with any +application that has a dependency on `mongo` (which is most Meteor +applications). In some cases however, people might be interested in +using the Meteor Tool without having to start a local development Mongo +instance (e.g. when using Meteor as a build system). If an application has no +dependency on `mongo`, the `mongo-dev-server` package will be removed +(since it is a direct dependency of the `mongo` package), and no local +development Mongo server will be started. + +Note this is a `debugOnly` package, meaning it will not be included in any +production bundles. diff --git a/packages/mongo-dev-server/package.js b/packages/mongo-dev-server/package.js new file mode 100644 index 0000000000..9e858ef438 --- /dev/null +++ b/packages/mongo-dev-server/package.js @@ -0,0 +1,12 @@ +Package.describe({ + debugOnly: true, + documentation: 'README.md', + name: 'mongo-dev-server', + summary: 'Start MongoDB alongside Meteor, in development mode.', + version: '1.0.0', +}); + +Package.onUse(function (api) { + api.use('modules'); + api.mainModule('server.js', 'server'); +}); diff --git a/packages/mongo-dev-server/server.js b/packages/mongo-dev-server/server.js new file mode 100644 index 0000000000..74643cab71 --- /dev/null +++ b/packages/mongo-dev-server/server.js @@ -0,0 +1,3 @@ +if (process.env.MONGO_URL === 'no-mongo-server') { + Meteor._debug('Note: Restart Meteor to start the MongoDB server.'); +} diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 8f16815921..f02a6a7f2f 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -34,7 +34,8 @@ Package.onUse(function (api) { 'diff-sequence', 'mongo-id', 'check', - 'ecmascript' + 'ecmascript', + 'mongo-dev-server', ]); // Binary Heap data structure is used to optimize oplog observe driver diff --git a/tools/runners/run-all.js b/tools/runners/run-all.js index da225fe8c6..2da15c02a6 100644 --- a/tools/runners/run-all.js +++ b/tools/runners/run-all.js @@ -71,10 +71,20 @@ class Runner { onFailure }); + buildmessage.capture(function () { + self.projectContext.resolveConstraints(); + }); + + const packageMap = self.projectContext.packageMap; + const hasMongoDevServerPackage = + packageMap && packageMap.getInfo('mongo-dev-server') != null; self.mongoRunner = null; if (mongoUrl) { oplogUrl = disableOplog ? null : oplogUrl; - } else { + } else if (hasMongoDevServerPackage + || process.env.METEOR_TEST_FAKE_MONGOD_CONTROL_PORT) { + // The mongo-dev-server package is required to start Mongo, but + // tests using fake-mongod are exempted. self.mongoRunner = new MongoRunner({ projectLocalDir: self.projectContext.projectLocalDir, port: mongoPort, @@ -86,6 +96,13 @@ class Runner { mongoUrl = self.mongoRunner.mongoUrl(); oplogUrl = disableOplog ? null : self.mongoRunner.oplogUrl(); + } else { + // Don't start a mongodb server. + // Set monogUrl to a specific value to prevent MongoDB connections + // and to allow a check for printing a message if `mongo-dev-server` + // is added while the app is running. + // The check and message is printed by the `mongo-dev-server` package. + mongoUrl = 'no-mongo-server'; } self.updater = new Updater(); diff --git a/tools/tests/compiler-plugins.js b/tools/tests/compiler-plugins.js index a06ce4b4b7..ad6735ce2f 100644 --- a/tools/tests/compiler-plugins.js +++ b/tools/tests/compiler-plugins.js @@ -314,11 +314,12 @@ selftest.define("compiler plugins - inactive source", () => { s.createApp('myapp', 'uses-published-package-with-inactive-source'); s.cd('myapp'); - let run = startRun(s); + const run = s.run(); + run.match('myapp'); + run.matchBeforeExit('Started proxy'); run.match('Errors prevented startup'); run.match('no plugin found for foo.sourcish in glasser:use-sourcish'); run.match('none is now'); - run.stop(); }); diff --git a/tools/tests/static-html.js b/tools/tests/static-html.js index bdb5cf9bde..fc17f67373 100644 --- a/tools/tests/static-html.js +++ b/tools/tests/static-html.js @@ -54,7 +54,7 @@ selftest.define("static-html - throws error", () => { s.cd('myapp'); const run = startRun(s); - run.match("Attributes on not supported"); + run.matchBeforeExit("Attributes on not supported"); run.stop(); }); From a42362a0aa7a3bfeb6117a074f48d46f18bde900 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 28 Jul 2017 16:41:32 -0400 Subject: [PATCH 34/93] Mention the semver upgrade in History.md. --- History.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/History.md b/History.md index a63c31332e..717c41519d 100644 --- a/History.md +++ b/History.md @@ -20,6 +20,9 @@ * The `meteor-promise` package has been upgraded to version 0.8.5, and the `promise` polyfill package has been upgraded to 8.0.1. +* The `semver` npm package has been upgraded to version 5.3.0. + [PR #8859](https://github.com/meteor/meteor/pull/8859) + * A new package called `mongo-dev-server` has been created and wired into `mongo` as a dependency. As long as this package is included in a Meteor application (which it is by default since all new Meteor apps have `mongo` From d4a1322d3a0bc16f36b0fea5136e3f785d5f133e Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 28 Jul 2017 18:55:45 -0400 Subject: [PATCH 35/93] Bump package versions for 1.5.2-beta.7 release. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/ejson/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo-dev-server/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index c2bffb408d..8d73182a09 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2-beta152.6" + version: "1.3.2-beta152.7" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 00fc163358..325a917e7a 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.6' + version: '6.20.0-beta152.7' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index 9228002677..d2c3e859cc 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.6', + version: '1.0.0-beta152.7', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index ea432d640c..29554e596e 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.6' + version: '1.2.0-beta152.7' }); Package.onUse(api => { diff --git a/packages/ejson/package.js b/packages/ejson/package.js index 27c712f5a3..b1df5c34ba 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Extended and Extensible JSON library", - version: '1.0.13' + version: '1.0.14-beta152.7' }); Package.onUse(function (api) { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 4a3729b4e2..32942c4778 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.6" + version: "1.5.2-beta.7" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index c121ae4c34..fab2ed036a 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.6' + version: '1.3.0-beta152.7' }); Package.onUse(function (api) { diff --git a/packages/modules/package.js b/packages/modules/package.js index 75949dac24..4d45c480a9 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.6", + version: "0.10.0-beta152.7", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo-dev-server/package.js b/packages/mongo-dev-server/package.js index 9e858ef438..bf75976d23 100644 --- a/packages/mongo-dev-server/package.js +++ b/packages/mongo-dev-server/package.js @@ -3,7 +3,7 @@ Package.describe({ documentation: 'README.md', name: 'mongo-dev-server', summary: 'Start MongoDB alongside Meteor, in development mode.', - version: '1.0.0', + version: '1.0.1-beta152.7', }); Package.onUse(function (api) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index f02a6a7f2f..abd6da9650 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.6' + version: '1.2.0-beta152.7' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 564b636170..bf29ce1d36 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.6", + version: "0.9.0-beta152.7", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 7f1c3af21e..3958543cb4 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-beta152.6' + version: '1.3.18-beta152.7' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 865e5ba77a..14bc097004 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.6", + "version": "1.5.2-beta.7", "recommended": false, "official": false, "description": "Meteor" From 777a3eb9f770cc09488aea791d1c14c6b7c71989 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 1 Aug 2017 22:52:22 +0300 Subject: [PATCH 36/93] Bump $BUNDLE_VERSION to 4.8.29 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index eb80a8baf7..144420a751 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.28 +BUNDLE_VERSION=4.8.29 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From ebcaceb54bd3461eda7b1a0eb5a49d6a2ae0783b Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 2 Aug 2017 15:48:04 -0400 Subject: [PATCH 37/93] Bump $BUNDLE_VERSION to 4.8.31 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index dcbbf84a68..76e415db96 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.30 +BUNDLE_VERSION=4.8.31 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 565281e765cb9e5f5c10ac37c8ee03f42ecc1874 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 2 Aug 2017 21:09:54 -0400 Subject: [PATCH 38/93] Revert "Add mongo-dev-server package (#8853)" This reverts commit 4d37a05fb33576b8f167168f4bc1b12821354615. After git bisecting between origin/release-1.5 and origin/release-1.5.2, I identified this commit as the culprit in recent failures of the modules test app: https://circleci.com/gh/meteor/meteor/4857#tests/containers/3 Note that the modules test app seems to be failing only on Linux, and it does pass reliably with this commit reverted. It must have something to do with Mongo failing to start, and thus the "App running at" message never appears, but I don't have a good theory why that might be. The command to run just the modules test app is meteor self-test --history 1000 'modules - test app' @zimme @hwillson @abernix any ideas? --- History.md | 12 ------------ packages/mongo-dev-server/README.md | 18 ------------------ packages/mongo-dev-server/package.js | 12 ------------ packages/mongo-dev-server/server.js | 3 --- packages/mongo/package.js | 3 +-- tools/runners/run-all.js | 19 +------------------ 6 files changed, 2 insertions(+), 65 deletions(-) delete mode 100644 packages/mongo-dev-server/README.md delete mode 100644 packages/mongo-dev-server/package.js delete mode 100644 packages/mongo-dev-server/server.js diff --git a/History.md b/History.md index 967f476a74..4b32985f86 100644 --- a/History.md +++ b/History.md @@ -30,18 +30,6 @@ root of the bundle, but it may be deprecated in a future version of Meteor. [PR #8956](https://github.com/meteor/meteor/pull/8956) -* A new package called `mongo-dev-server` has been created and wired into - `mongo` as a dependency. As long as this package is included in a Meteor - application (which it is by default since all new Meteor apps have `mongo` - as a dependency), a local development MongoDB server is started alongside - the application. This package was created to provide a way to disable the - local development Mongo server, when `mongo` isn't needed (e.g. when using - Meteor as a build system only). If an application has no dependency on - `mongo`, the `mongo-dev-server` package is not added, which means no local - development Mongo server is started. - [Feature Request #31](https://github.com/meteor/meteor-feature-requests/issues/31) - [PR #8853](https://github.com/meteor/meteor/pull/8853) - * `Accounts.config` no longer mistakenly allows tokens to expire when the `loginExpirationInDays` option is set to `null`. [Issue #5121](https://github.com/meteor/meteor/issues/5121) diff --git a/packages/mongo-dev-server/README.md b/packages/mongo-dev-server/README.md deleted file mode 100644 index 44609c29b5..0000000000 --- a/packages/mongo-dev-server/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# mongo-dev-server - -[Source code of released version](https://github.com/meteor/meteor/tree/master/packages/mongo-dev-server) | [Source code of development version](https://github.com/meteor/meteor/tree/devel/packages/mongo-dev-server) -*** - -When the `mongo-dev-server` package is included in a Meteor application, a -local development MongoDB server is started alongside the application. This -package is mostly used internally, as it is included by default with any -application that has a dependency on `mongo` (which is most Meteor -applications). In some cases however, people might be interested in -using the Meteor Tool without having to start a local development Mongo -instance (e.g. when using Meteor as a build system). If an application has no -dependency on `mongo`, the `mongo-dev-server` package will be removed -(since it is a direct dependency of the `mongo` package), and no local -development Mongo server will be started. - -Note this is a `debugOnly` package, meaning it will not be included in any -production bundles. diff --git a/packages/mongo-dev-server/package.js b/packages/mongo-dev-server/package.js deleted file mode 100644 index bf75976d23..0000000000 --- a/packages/mongo-dev-server/package.js +++ /dev/null @@ -1,12 +0,0 @@ -Package.describe({ - debugOnly: true, - documentation: 'README.md', - name: 'mongo-dev-server', - summary: 'Start MongoDB alongside Meteor, in development mode.', - version: '1.0.1-beta152.7', -}); - -Package.onUse(function (api) { - api.use('modules'); - api.mainModule('server.js', 'server'); -}); diff --git a/packages/mongo-dev-server/server.js b/packages/mongo-dev-server/server.js deleted file mode 100644 index 74643cab71..0000000000 --- a/packages/mongo-dev-server/server.js +++ /dev/null @@ -1,3 +0,0 @@ -if (process.env.MONGO_URL === 'no-mongo-server') { - Meteor._debug('Note: Restart Meteor to start the MongoDB server.'); -} diff --git a/packages/mongo/package.js b/packages/mongo/package.js index abd6da9650..1c9c4689be 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -34,8 +34,7 @@ Package.onUse(function (api) { 'diff-sequence', 'mongo-id', 'check', - 'ecmascript', - 'mongo-dev-server', + 'ecmascript' ]); // Binary Heap data structure is used to optimize oplog observe driver diff --git a/tools/runners/run-all.js b/tools/runners/run-all.js index 2da15c02a6..da225fe8c6 100644 --- a/tools/runners/run-all.js +++ b/tools/runners/run-all.js @@ -71,20 +71,10 @@ class Runner { onFailure }); - buildmessage.capture(function () { - self.projectContext.resolveConstraints(); - }); - - const packageMap = self.projectContext.packageMap; - const hasMongoDevServerPackage = - packageMap && packageMap.getInfo('mongo-dev-server') != null; self.mongoRunner = null; if (mongoUrl) { oplogUrl = disableOplog ? null : oplogUrl; - } else if (hasMongoDevServerPackage - || process.env.METEOR_TEST_FAKE_MONGOD_CONTROL_PORT) { - // The mongo-dev-server package is required to start Mongo, but - // tests using fake-mongod are exempted. + } else { self.mongoRunner = new MongoRunner({ projectLocalDir: self.projectContext.projectLocalDir, port: mongoPort, @@ -96,13 +86,6 @@ class Runner { mongoUrl = self.mongoRunner.mongoUrl(); oplogUrl = disableOplog ? null : self.mongoRunner.oplogUrl(); - } else { - // Don't start a mongodb server. - // Set monogUrl to a specific value to prevent MongoDB connections - // and to allow a check for printing a message if `mongo-dev-server` - // is added while the app is running. - // The check and message is printed by the `mongo-dev-server` package. - mongoUrl = 'no-mongo-server'; } self.updater = new Updater(); From 318232da9d2ca25380dad22aaf0863ca6170e7aa Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 3 Aug 2017 09:16:04 -0400 Subject: [PATCH 39/93] Try disabling longjohn completely, as it may affect test performance. --- tools/tool-testing/selftest.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools/tool-testing/selftest.js b/tools/tool-testing/selftest.js index fb8c4c69c7..c3809bd426 100644 --- a/tools/tool-testing/selftest.js +++ b/tools/tool-testing/selftest.js @@ -49,9 +49,6 @@ function checkTestOnlyDependency(name) { var phantomjs = checkTestOnlyDependency("phantomjs-prebuilt"); var webdriver = checkTestOnlyDependency('browserstack-webdriver'); -// To allow long stack traces that cross async boundaries -require('longjohn'); - // Exception representing a test failure var TestFailure = function (reason, details) { var self = this; From ada135f1244dcbec5539b2325065f7e6bd50dba6 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 3 Aug 2017 10:46:59 -0400 Subject: [PATCH 40/93] Try not deleting temp directories after Circle CI tests. Yet another hopeful attempt to stamp out segmentation faults. --- circle.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/circle.yml b/circle.yml index d7f983e499..111e078f20 100644 --- a/circle.yml +++ b/circle.yml @@ -26,3 +26,7 @@ test: - ./scripts/ci.sh : parallel: true timeout: 1200 + environment: + # Cleaning up temp directories at the end of a test run may be a + # contributing factor to segmentation faults, so don't bother. + METEOR_SAVE_TMPDIRS: 1 From 22e86ce20866c26cbfe2d68f3119de83a036cd97 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 3 Aug 2017 21:11:02 -0400 Subject: [PATCH 41/93] Add timeout to static-html test. --- tools/tests/static-html.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/tests/static-html.js b/tools/tests/static-html.js index fc17f67373..2fe6895a2b 100644 --- a/tools/tests/static-html.js +++ b/tools/tests/static-html.js @@ -54,7 +54,8 @@ selftest.define("static-html - throws error", () => { s.cd('myapp'); const run = startRun(s); - run.matchBeforeExit("Attributes on not supported"); + run.match("Attributes on not supported"); + run.waitSecs(90); run.stop(); }); From 43ba3c9de5a792a32372d491785aa0bc9cabac1f Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 7 Aug 2017 12:43:37 -0400 Subject: [PATCH 42/93] Use unreleased version of websocket-driver that uses http-parser-js. https://github.com/faye/websocket-driver-node/issues/21 https://github.com/meteor/meteor-feature-requests/issues/160 Thanks to @sdarnell for identifying this solution. --- History.md | 6 ++++ .../.npm/package/npm-shrinkwrap.json | 35 ++++++++++--------- packages/ddp-client/package.js | 9 +++-- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/History.md b/History.md index 4b32985f86..35cb93803c 100644 --- a/History.md +++ b/History.md @@ -23,6 +23,12 @@ * The `semver` npm package has been upgraded to version 5.3.0. [PR #8859](https://github.com/meteor/meteor/pull/8859) +* The `faye-websocket` npm package has been upgraded to version 0.11.1, + and its dependency `websocket-driver` has been upgraded to a version + containing [this fix](https://github.com/faye/websocket-driver-node/issues/21), + thanks to [@sdarnell](https://github.com/sdarnell). + [meteor-feature-requests#160](https://github.com/meteor/meteor-feature-requests/issues/160) + * The `star.json` manifest created within the root of a `meteor build` bundle will now contain `nodeVersion` and `npmVersion` which will specify the exact versions of Node.js and npm (respectively) which the Meteor release was diff --git a/packages/ddp-client/.npm/package/npm-shrinkwrap.json b/packages/ddp-client/.npm/package/npm-shrinkwrap.json index 9007897712..a44010e437 100644 --- a/packages/ddp-client/.npm/package/npm-shrinkwrap.json +++ b/packages/ddp-client/.npm/package/npm-shrinkwrap.json @@ -1,23 +1,14 @@ { "dependencies": { "faye-websocket": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.0.tgz", - "from": "faye-websocket@0.11.0", - "dependencies": { - "websocket-driver": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.4.tgz", - "from": "websocket-driver@>=0.5.1", - "dependencies": { - "websocket-extensions": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", - "from": "websocket-extensions@>=0.1.1" - } - } - } - } + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "from": "faye-websocket@0.11.1" + }, + "http-parser-js": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.5.tgz", + "from": "http-parser-js@>=0.4.0" }, "lolex": { "version": "1.4.0", @@ -28,6 +19,16 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/permessage-deflate/-/permessage-deflate-0.1.3.tgz", "from": "permessage-deflate@0.1.3" + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://github.com/faye/websocket-driver-node/tarball/1325828a9e8b5e29c7b4758995efdb84703919ad", + "from": "https://github.com/faye/websocket-driver-node/tarball/1325828a9e8b5e29c7b4758995efdb84703919ad" + }, + "websocket-extensions": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "from": "websocket-extensions@>=0.1.1" } } } diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index 59667d5992..8afeb25c69 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,11 +1,16 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.0.0', + version: '2.1.0', documentation: null }); Npm.depends({ - "faye-websocket": "0.11.0", + "faye-websocket": "0.11.1", + // TODO Remove this direct websocket-driver dependency when a new + // version gets published, though that may not happen very soon: + // https://github.com/faye/websocket-driver-node/issues/21 + "websocket-driver": "https://github.com/faye/websocket-driver-node/" + + "tarball/1325828a9e8b5e29c7b4758995efdb84703919ad", "lolex": "1.4.0", "permessage-deflate": "0.1.3" }); From 77ecbabf60d8f8a694a38affc55857fa6e177ffb Mon Sep 17 00:00:00 2001 From: Jordan Brant Baker Date: Mon, 7 Aug 2017 10:23:56 -0700 Subject: [PATCH 43/93] Support "env" in .babelrc files. (#8963) --- packages/babel-compiler/babel-compiler.js | 10 ++++++++++ tools/tests/apps/modules/.babelrc | 7 +++++++ tools/tests/apps/modules/babel-env.js | 18 ++++++++++++++++++ tools/tests/apps/modules/package.json | 3 +++ 4 files changed, 38 insertions(+) create mode 100644 tools/tests/apps/modules/.babelrc create mode 100644 tools/tests/apps/modules/babel-env.js diff --git a/packages/babel-compiler/babel-compiler.js b/packages/babel-compiler/babel-compiler.js index c10289c199..ecc2428bb6 100644 --- a/packages/babel-compiler/babel-compiler.js +++ b/packages/babel-compiler/babel-compiler.js @@ -300,6 +300,16 @@ BCp._inferHelper = function ( merge(babelOptions, babelrc, "presets"); merge(babelOptions, babelrc, "plugins"); + const babelEnv = (process.env.BABEL_ENV || + process.env.NODE_ENV || + "development"); + if (babelrc && babelrc.env && babelrc.env[babelEnv]) { + const env = babelrc.env[babelEnv]; + walkBabelRC(env); + merge(babelOptions, env, "presets"); + merge(babelOptions, env, "plugins"); + } + return !! (babelrc.presets || babelrc.plugins); }; diff --git a/tools/tests/apps/modules/.babelrc b/tools/tests/apps/modules/.babelrc new file mode 100644 index 0000000000..f5e2cf5851 --- /dev/null +++ b/tools/tests/apps/modules/.babelrc @@ -0,0 +1,7 @@ +{ + "env": { + "development": { + "plugins": ["transform-do-expressions"] + } + } +} diff --git a/tools/tests/apps/modules/babel-env.js b/tools/tests/apps/modules/babel-env.js new file mode 100644 index 0000000000..3cc0035b6d --- /dev/null +++ b/tools/tests/apps/modules/babel-env.js @@ -0,0 +1,18 @@ +function babeltest() { + // use transform-do-expressions plugin to prove babel `env` subkey was loaded + let x = do { + 1; + }; + console.log(x) +} + +/* + If the plugin is loaded correctly there will be no errors during the compilation of this file. + Without this plugin you will get the error: + + W20170803-17:58:17.054(-7)? (STDERR) var x = do { + W20170803-17:58:17.055(-7)? (STDERR) ^^ + W20170803-17:58:17.055(-7)? (STDERR) + W20170803-17:58:17.055(-7)? (STDERR) SyntaxError: Unexpected token do +*/ + diff --git a/tools/tests/apps/modules/package.json b/tools/tests/apps/modules/package.json index fd63fa15cb..29a8f86116 100644 --- a/tools/tests/apps/modules/package.json +++ b/tools/tests/apps/modules/package.json @@ -19,5 +19,8 @@ "test": "METEOR_PROFILE=100 ../../../../meteor test --full-app --driver-package dispatch:mocha-phantomjs", "browser": "METEOR_PROFILE=100 ../../../../meteor test --full-app --driver-package dispatch:mocha-browser", "test-packages": "../../../../meteor test-packages --driver-package dispatch:mocha-phantomjs packages/modules-test-package" + }, + "devDependencies": { + "babel-plugin-transform-do-expressions": "^6.22.0" } } From 822ac2d7a401ce674112e5086f27c78b76606d9a Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 7 Aug 2017 13:28:44 -0400 Subject: [PATCH 44/93] Add a note to History.md about env in .babelrc files. --- History.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/History.md b/History.md index 35cb93803c..ccfed32a64 100644 --- a/History.md +++ b/History.md @@ -50,6 +50,9 @@ [#8424](https://github.com/meteor/meteor/issues/8424), and [#8464](https://github.com/meteor/meteor/issues/8464). +* The `"env"` field is now supported in `.babelrc` files. + [PR #8963](https://github.com/meteor/meteor/pull/8963) + ## v1.5.1, 2017-07-12 * Node has been upgraded to version 4.8.4. From cc2a1d79e1582360ab1a6e12b5d9e1a62adfbdef Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 7 Aug 2017 14:59:53 -0400 Subject: [PATCH 45/93] Bump package versions for 1.5.2-beta.8 release. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/ddp-client/package.js | 2 +- packages/ejson/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 8d73182a09..30397d3f96 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2-beta152.7" + version: "1.3.2-beta152.8" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 325a917e7a..fa6fc4a3fd 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.7' + version: '6.20.0-beta152.8' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index d2c3e859cc..a034c3ef39 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.7', + version: '1.0.0-beta152.8', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 29554e596e..8cf678633a 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.7' + version: '1.2.0-beta152.8' }); Package.onUse(api => { diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index 8afeb25c69..616da29784 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.1.0', + version: '2.1.0-beta152.8', documentation: null }); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index 93c7d39a84..99e8652248 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Extended and Extensible JSON library', - version: '1.0.14-beta152.7' + version: '1.0.14-beta152.8' }); Package.onUse(function onUse(api) { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 32942c4778..f9d7a51ced 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.7" + version: "1.5.2-beta.8" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index fab2ed036a..3282fc96ae 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.7' + version: '1.3.0-beta152.8' }); Package.onUse(function (api) { diff --git a/packages/modules/package.js b/packages/modules/package.js index 4d45c480a9..67f2e74430 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.7", + version: "0.10.0-beta152.8", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 1c9c4689be..78ff2d98c3 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.7' + version: '1.2.0-beta152.8' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index bf29ce1d36..b67d51ea7c 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.7", + version: "0.9.0-beta152.8", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 3958543cb4..dd8120fbd4 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-beta152.7' + version: '1.3.18-beta152.8' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 14bc097004..d3df045d29 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.7", + "version": "1.5.2-beta.8", "recommended": false, "official": false, "description": "Meteor" From 6de5c25fed6398cfc600979f1a8aafa06b10ad80 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 7 Aug 2017 16:19:09 -0400 Subject: [PATCH 46/93] Enable transform-do-expressions in production for modules test app. The modules test app appears to be running with process.env.NODE_ENV equal to "production" on Circle CI: https://circleci.com/gh/meteor/meteor/5030. Enabling this transform in production as well as development is fine because we primarily want to test that plugins from the "env" section of .babelrc are respected, regardless of the value of process.env.NODE_ENV. Using different plugins in production might be worth testing, too, but that's less critical. Follow-up to #8963. --- tools/tests/apps/modules/.babelrc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/tests/apps/modules/.babelrc b/tools/tests/apps/modules/.babelrc index f5e2cf5851..f385f93b62 100644 --- a/tools/tests/apps/modules/.babelrc +++ b/tools/tests/apps/modules/.babelrc @@ -2,6 +2,9 @@ "env": { "development": { "plugins": ["transform-do-expressions"] + }, + "production": { + "plugins": ["transform-do-expressions"] } } } From cfdc69bf717d3689e15bc7488a0a6dae30437cec Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 8 Aug 2017 18:01:30 -0400 Subject: [PATCH 47/93] Support @~ version constraints and use them for core packages. (#8991) --- .../constraint-solver/constraint-solver.js | 4 + .../package-version-parser.js | 37 ++++- tools/project-context.js | 5 +- .../packages/tilde-constraints/README.md | 0 .../packages/tilde-constraints/package.js | 11 ++ .../tilde-constraints/tilde-constraints.js | 1 + .../packages/tilde-dependent/README.md | 0 .../packages/tilde-dependent/package.js | 12 ++ .../tilde-dependent/tilde-dependent.js | 1 + tools/tests/package-tests.js | 146 ++++++++++++++++++ 10 files changed, 207 insertions(+), 10 deletions(-) create mode 100644 tools/tests/apps/package-tests/packages/tilde-constraints/README.md create mode 100644 tools/tests/apps/package-tests/packages/tilde-constraints/package.js create mode 100644 tools/tests/apps/package-tests/packages/tilde-constraints/tilde-constraints.js create mode 100644 tools/tests/apps/package-tests/packages/tilde-dependent/README.md create mode 100644 tools/tests/apps/package-tests/packages/tilde-dependent/package.js create mode 100644 tools/tests/apps/package-tests/packages/tilde-dependent/tilde-dependent.js diff --git a/packages/constraint-solver/constraint-solver.js b/packages/constraint-solver/constraint-solver.js index 8e4b78be21..435c312769 100644 --- a/packages/constraint-solver/constraint-solver.js +++ b/packages/constraint-solver/constraint-solver.js @@ -186,6 +186,10 @@ CS.isConstraintSatisfied = function (pkg, vConstraint, version) { var cVersion = simpleConstraint.versionString; return (cVersion === version); } else if (type === 'compatible-with') { + if (typeof simpleConstraint.test === "function") { + return simpleConstraint.test(version); + } + var cv = PV.parse(simpleConstraint.versionString); var v = PV.parse(version); diff --git a/packages/package-version-parser/package-version-parser.js b/packages/package-version-parser/package-version-parser.js index 8d179d357e..7d651f7edc 100644 --- a/packages/package-version-parser/package-version-parser.js +++ b/packages/package-version-parser/package-version-parser.js @@ -244,20 +244,41 @@ var parseSimpleConstraint = function (constraintString) { throw new Error("Non-empty string required"); } - var type, versionString; + var result = {}; + var needToCheckValidity = true; if (constraintString.charAt(0) === '=') { - type = "exactly"; - versionString = constraintString.substr(1); + result.type = "exactly"; + result.versionString = constraintString.slice(1); + } else { - type = "compatible-with"; - versionString = constraintString; + result.type = "compatible-with"; + + if (constraintString.charAt(0) === "~") { + var semversion = PV.parse( + result.versionString = constraintString.slice(1) + ).semver; + + var range = new semver.Range("~" + semversion); + + result.test = function (version) { + return range.test(PV.parse(version).semver); + }; + + // Already checked by calling PV.parse above. + needToCheckValidity = false; + + } else { + result.versionString = constraintString; + } } - // This will throw if the version string is invalid. - PV.getValidServerVersion(versionString); + if (needToCheckValidity) { + // This will throw if the version string is invalid. + PV.getValidServerVersion(result.versionString); + } - return { type: type, versionString: versionString }; + return result; }; diff --git a/tools/project-context.js b/tools/project-context.js index 971041f68e..e2071e80d1 100644 --- a/tools/project-context.js +++ b/tools/project-context.js @@ -748,8 +748,9 @@ _.extend(ProjectContext.prototype, { var constraint = utils.parsePackageConstraint( // Note that this used to be an exact name@=version constraint, // before #7084 eliminated these constraints completely. They - // were reinstated in Meteor 1.4.3 as name@version constraints. - packageName + "@" + version); + // were reinstated in Meteor 1.4.3 as name@version constraints, + // and further refined to name@~version constraints in 1.5.2. + packageName + "@~" + version); // Add a constraint but no dependency (we don't automatically use // all local packages!): depsAndConstraints.constraints.push(constraint); diff --git a/tools/tests/apps/package-tests/packages/tilde-constraints/README.md b/tools/tests/apps/package-tests/packages/tilde-constraints/README.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/tests/apps/package-tests/packages/tilde-constraints/package.js b/tools/tests/apps/package-tests/packages/tilde-constraints/package.js new file mode 100644 index 0000000000..7215c5d3e3 --- /dev/null +++ b/tools/tests/apps/package-tests/packages/tilde-constraints/package.js @@ -0,0 +1,11 @@ +Package.describe({ + name: "tilde-constraints", + version: "0.4.2", + summary: "Package for testing @~ version constraints", + documentation: "README.md" +}); + +Package.onUse(function(api) { + api.use("ecmascript"); + api.mainModule("tilde-constraints.js"); +}); diff --git a/tools/tests/apps/package-tests/packages/tilde-constraints/tilde-constraints.js b/tools/tests/apps/package-tests/packages/tilde-constraints/tilde-constraints.js new file mode 100644 index 0000000000..2a8dc005b2 --- /dev/null +++ b/tools/tests/apps/package-tests/packages/tilde-constraints/tilde-constraints.js @@ -0,0 +1 @@ +console.log(module.id); diff --git a/tools/tests/apps/package-tests/packages/tilde-dependent/README.md b/tools/tests/apps/package-tests/packages/tilde-dependent/README.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/tests/apps/package-tests/packages/tilde-dependent/package.js b/tools/tests/apps/package-tests/packages/tilde-dependent/package.js new file mode 100644 index 0000000000..2c0a869d87 --- /dev/null +++ b/tools/tests/apps/package-tests/packages/tilde-dependent/package.js @@ -0,0 +1,12 @@ +Package.describe({ + name: "tilde-dependent", + version: "0.1.0", + summary: "Package for testing inter-package @~ constraints", + documentation: "README.md" +}); + +Package.onUse(function(api) { + api.use("ecmascript"); + api.use("tilde-constraints"); + api.mainModule("tilde-dependent.js"); +}); diff --git a/tools/tests/apps/package-tests/packages/tilde-dependent/tilde-dependent.js b/tools/tests/apps/package-tests/packages/tilde-dependent/tilde-dependent.js new file mode 100644 index 0000000000..2a8dc005b2 --- /dev/null +++ b/tools/tests/apps/package-tests/packages/tilde-dependent/tilde-dependent.js @@ -0,0 +1 @@ +console.log(module.id); diff --git a/tools/tests/package-tests.js b/tools/tests/package-tests.js index 4985056957..a897734477 100644 --- a/tools/tests/package-tests.js +++ b/tools/tests/package-tests.js @@ -955,3 +955,149 @@ selftest.define("show readme excerpt", function () { run.matchErr("Documentation not found"); run.expectExit(1); }); + +selftest.define("tilde version constraints", [], function () { + var s = new Sandbox(); + + s.set("METEOR_WATCH_PRIORITIZE_CHANGED", "false"); + + s.createApp("tilde-app", "package-tests"); + s.cd("tilde-app"); + + var run = s.run(); + + run.match("tilde-app"); + run.match("proxy"); + run.waitSecs(10); + run.match("MongoDB"); + run.waitSecs(10); + run.match("your app"); + run.waitSecs(10); + run.match("running at"); + run.waitSecs(60); + + var packages = s.read(".meteor/packages") + .replace(/\n*$/m, "\n"); + + function setTopLevelConstraint(constraint) { + s.write( + ".meteor/packages", + packages + "tilde-constraints" + ( + constraint ? "@" + constraint : "" + ) + "\n" + ); + } + + setTopLevelConstraint(""); + run.match(/tilde-constraints.*added, version 0\.4\.2/); + run.match("tilde-constraints.js"); + run.waitSecs(10); + + setTopLevelConstraint("0.4.0"); + run.match("tilde-constraints.js"); + run.match("server restarted"); + run.waitSecs(10); + + setTopLevelConstraint("~0.4.0"); + run.match("tilde-constraints.js"); + run.match("server restarted"); + run.waitSecs(10); + + setTopLevelConstraint("0.4.3"); + run.match("error: No version of tilde-constraints satisfies all constraints"); + run.waitSecs(10); + + setTopLevelConstraint("~0.4.3"); + run.match("error: No version of tilde-constraints satisfies all constraints"); + run.waitSecs(10); + + setTopLevelConstraint("0.3.0"); + run.match("tilde-constraints.js"); + run.match("server restarted"); + run.waitSecs(10); + + setTopLevelConstraint("~0.3.0"); + run.match("error: No version of tilde-constraints satisfies all constraints"); + run.waitSecs(10); + + setTopLevelConstraint("0.5.0"); + run.match("error: No version of tilde-constraints satisfies all constraints"); + run.waitSecs(10); + + setTopLevelConstraint("~0.5.0"); + run.match("error: No version of tilde-constraints satisfies all constraints"); + run.waitSecs(10); + + s.write( + ".meteor/packages", + packages + ); + run.match(/tilde-constraints.*removed/); + run.waitSecs(10); + + s.write( + ".meteor/packages", + packages + "tilde-dependent\n" + ); + run.match(/tilde-constraints.*added, version 0\.4\.2/); + run.match(/tilde-dependent.*added, version 0\.1\.0/); + run.match("tilde-constraints.js"); + run.match("tilde-dependent.js"); + run.waitSecs(10); + + var depPackageJsPath = "packages/tilde-dependent/package.js" + var depPackageJs = s.read(depPackageJsPath); + + function setDepConstraint(constraint) { + s.write( + depPackageJsPath, + depPackageJs.replace( + /tilde-constraints[^"]*/g, // Syntax highlighting hack: " + "tilde-constraints" + ( + constraint ? "@" + constraint : "" + ) + ) + ); + } + + setDepConstraint("0.4.0"); + run.match("tilde-constraints.js"); + run.match("tilde-dependent.js"); + run.match("server restarted"); + run.waitSecs(10); + + setDepConstraint("~0.4.0"); + run.match("tilde-constraints.js"); + run.match("tilde-dependent.js"); + run.match("server restarted"); + run.waitSecs(10); + + setDepConstraint("0.3.0"); + run.match("tilde-constraints.js"); + run.match("tilde-dependent.js"); + run.match("server restarted"); + run.waitSecs(10); + + // TODO The rest of these tests should cause version conflicts, but it + // seems like version constraints between local packages are ignored, + // which is a larger (preexisting) problem we should investigate. + /* + setDepConstraint("=0.4.0"); + run.match("error: No version of tilde-constraints satisfies all constraints"); + run.waitSecs(10); + + setDepConstraint("~0.3.0"); + run.match("error: No version of tilde-constraints satisfies all constraints"); + run.waitSecs(10); + + setDepConstraint("0.4.3"); + run.match("error: No version of tilde-constraints satisfies all constraints"); + run.waitSecs(10); + + setDepConstraint("~0.4.3"); + run.match("error: No version of tilde-constraints satisfies all constraints"); + run.waitSecs(10); + */ + + run.stop(); +}); From e777c4d6f67b7b0d44177dcf03297e45804b0715 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 8 Aug 2017 19:10:39 -0400 Subject: [PATCH 48/93] Force clearing the npm cache before Circle CI tests. --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f3474cfcd3..77caf4d5ca 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -126,7 +126,7 @@ jobs: # Clear dev_bundle/.npm to ensure consistent test runs. - run: name: Clear npm cache - command: ./meteor npm cache clear + command: ./meteor npm cache clear --force # Since PhantomJS has been removed from dev_bundle/lib/node_modules # (#6905), but self-test still needs it, install it now. - run: From b70449ae4d3cb225c4894c526c933c589bbf524b Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 8 Aug 2017 19:18:02 -0400 Subject: [PATCH 49/93] Remove .babelrc "env" test for now. This has been failing consistently on Circle CI, so I'm disabling it until I know how to fix it better: https://circleci.com/gh/meteor/meteor/5068 --- tools/tests/apps/modules/.babelrc | 10 ---------- tools/tests/apps/modules/babel-env.js | 18 ------------------ 2 files changed, 28 deletions(-) delete mode 100644 tools/tests/apps/modules/.babelrc delete mode 100644 tools/tests/apps/modules/babel-env.js diff --git a/tools/tests/apps/modules/.babelrc b/tools/tests/apps/modules/.babelrc deleted file mode 100644 index f385f93b62..0000000000 --- a/tools/tests/apps/modules/.babelrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "env": { - "development": { - "plugins": ["transform-do-expressions"] - }, - "production": { - "plugins": ["transform-do-expressions"] - } - } -} diff --git a/tools/tests/apps/modules/babel-env.js b/tools/tests/apps/modules/babel-env.js deleted file mode 100644 index 3cc0035b6d..0000000000 --- a/tools/tests/apps/modules/babel-env.js +++ /dev/null @@ -1,18 +0,0 @@ -function babeltest() { - // use transform-do-expressions plugin to prove babel `env` subkey was loaded - let x = do { - 1; - }; - console.log(x) -} - -/* - If the plugin is loaded correctly there will be no errors during the compilation of this file. - Without this plugin you will get the error: - - W20170803-17:58:17.054(-7)? (STDERR) var x = do { - W20170803-17:58:17.055(-7)? (STDERR) ^^ - W20170803-17:58:17.055(-7)? (STDERR) - W20170803-17:58:17.055(-7)? (STDERR) SyntaxError: Unexpected token do -*/ - From 789c0e433eff9f41f0773c0c075acec378039a7f Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 8 Aug 2017 19:25:50 -0400 Subject: [PATCH 50/93] Reinstate .babelrc "env" test, with more reliable NODE_ENV. --- tools/tests/apps/modules/.babelrc | 7 +++++++ tools/tests/apps/modules/babel-env.js | 17 +++++++++++++++++ tools/tests/modules.js | 4 ++++ 3 files changed, 28 insertions(+) create mode 100644 tools/tests/apps/modules/.babelrc create mode 100644 tools/tests/apps/modules/babel-env.js diff --git a/tools/tests/apps/modules/.babelrc b/tools/tests/apps/modules/.babelrc new file mode 100644 index 0000000000..f5e2cf5851 --- /dev/null +++ b/tools/tests/apps/modules/.babelrc @@ -0,0 +1,7 @@ +{ + "env": { + "development": { + "plugins": ["transform-do-expressions"] + } + } +} diff --git a/tools/tests/apps/modules/babel-env.js b/tools/tests/apps/modules/babel-env.js new file mode 100644 index 0000000000..5691ae6ba5 --- /dev/null +++ b/tools/tests/apps/modules/babel-env.js @@ -0,0 +1,17 @@ +function babeltest() { + // use transform-do-expressions plugin to prove babel `env` subkey was loaded + let x = do { + 1; + }; + console.log(x) +} + +/* + If the plugin is loaded correctly there will be no errors during the compilation of this file. + Without this plugin you will get the error: + + W20170803-17:58:17.054(-7)? (STDERR) var x = do { + W20170803-17:58:17.055(-7)? (STDERR) ^^ + W20170803-17:58:17.055(-7)? (STDERR) + W20170803-17:58:17.055(-7)? (STDERR) SyntaxError: Unexpected token do +*/ diff --git a/tools/tests/modules.js b/tools/tests/modules.js index 5fa92593d2..5e1acbed8d 100644 --- a/tools/tests/modules.js +++ b/tools/tests/modules.js @@ -17,6 +17,10 @@ function startRun(sandbox) { selftest.define("modules - test app", function () { const s = new Sandbox(); + + // Make sure we use the right "env" section of .babelrc. + s.set("NODE_ENV", "development"); + s.createApp("modules-test-app", "modules"); s.cd("modules-test-app", function () { const run = s.run( From 004c8d0fe1cab963dd95baac651d26d0561dab35 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 10 Aug 2017 12:56:14 -0400 Subject: [PATCH 51/93] Move .babelrc "env" test to imports directory of modules test app. --- tools/tests/apps/modules/babel-env.js | 17 ----------------- tools/tests/apps/modules/{ => imports}/.babelrc | 0 tools/tests/apps/modules/imports/babel-env.js | 8 ++++++++ tools/tests/apps/modules/package.json | 6 ++---- tools/tests/apps/modules/tests.js | 7 +++++++ 5 files changed, 17 insertions(+), 21 deletions(-) delete mode 100644 tools/tests/apps/modules/babel-env.js rename tools/tests/apps/modules/{ => imports}/.babelrc (100%) create mode 100644 tools/tests/apps/modules/imports/babel-env.js diff --git a/tools/tests/apps/modules/babel-env.js b/tools/tests/apps/modules/babel-env.js deleted file mode 100644 index 5691ae6ba5..0000000000 --- a/tools/tests/apps/modules/babel-env.js +++ /dev/null @@ -1,17 +0,0 @@ -function babeltest() { - // use transform-do-expressions plugin to prove babel `env` subkey was loaded - let x = do { - 1; - }; - console.log(x) -} - -/* - If the plugin is loaded correctly there will be no errors during the compilation of this file. - Without this plugin you will get the error: - - W20170803-17:58:17.054(-7)? (STDERR) var x = do { - W20170803-17:58:17.055(-7)? (STDERR) ^^ - W20170803-17:58:17.055(-7)? (STDERR) - W20170803-17:58:17.055(-7)? (STDERR) SyntaxError: Unexpected token do -*/ diff --git a/tools/tests/apps/modules/.babelrc b/tools/tests/apps/modules/imports/.babelrc similarity index 100% rename from tools/tests/apps/modules/.babelrc rename to tools/tests/apps/modules/imports/.babelrc diff --git a/tools/tests/apps/modules/imports/babel-env.js b/tools/tests/apps/modules/imports/babel-env.js new file mode 100644 index 0000000000..834320ebb4 --- /dev/null +++ b/tools/tests/apps/modules/imports/babel-env.js @@ -0,0 +1,8 @@ +export function check(y) { + // If the transform-do-expressions plugin is loaded correctly, there + // will be no errors during the compilation of this file. Without the + // plugin, the error will be: "SyntaxError: Unexpected token do". + return do { + y + y; + }; +} diff --git a/tools/tests/apps/modules/package.json b/tools/tests/apps/modules/package.json index 29a8f86116..ed4a40d751 100644 --- a/tools/tests/apps/modules/package.json +++ b/tools/tests/apps/modules/package.json @@ -13,14 +13,12 @@ "mssql": "^3.1.1", "regenerator-runtime": "^0.9.5", "stripe": "^4.4.0", - "winston": "^2.3.1" + "winston": "^2.3.1", + "babel-plugin-transform-do-expressions": "^6.22.0" }, "scripts": { "test": "METEOR_PROFILE=100 ../../../../meteor test --full-app --driver-package dispatch:mocha-phantomjs", "browser": "METEOR_PROFILE=100 ../../../../meteor test --full-app --driver-package dispatch:mocha-browser", "test-packages": "../../../../meteor test-packages --driver-package dispatch:mocha-phantomjs packages/modules-test-package" - }, - "devDependencies": { - "babel-plugin-transform-do-expressions": "^6.22.0" } } diff --git a/tools/tests/apps/modules/tests.js b/tools/tests/apps/modules/tests.js index 0e19116b20..ae1c6abed0 100644 --- a/tools/tests/apps/modules/tests.js +++ b/tools/tests/apps/modules/tests.js @@ -446,6 +446,13 @@ describe("ecmascript miscellany", () => { [2, 1, 4, 3] ); }); + + it('.babelrc "env" should be respected', () => { + assert.strictEqual( + require("./imports/babel-env.js").check(2), + 4 + ); + }); }); Meteor.isClient && From 956d8dba45b44cafb557e0407f6b972666c0bed5 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Thu, 10 Aug 2017 14:18:55 -0400 Subject: [PATCH 52/93] Reinstate the mongo-dev-server package (#8853) (#8999) --- History.md | 12 ++++++++++++ packages/mongo-dev-server/README.md | 18 ++++++++++++++++++ packages/mongo-dev-server/package.js | 12 ++++++++++++ packages/mongo-dev-server/server.js | 3 +++ packages/mongo/package.js | 3 ++- tools/runners/run-all.js | 19 ++++++++++++++++++- tools/tests/static-html.js | 3 +-- 7 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 packages/mongo-dev-server/README.md create mode 100644 packages/mongo-dev-server/package.js create mode 100644 packages/mongo-dev-server/server.js diff --git a/History.md b/History.md index 54761ce421..ae2b181898 100644 --- a/History.md +++ b/History.md @@ -36,6 +36,18 @@ root of the bundle, but it may be deprecated in a future version of Meteor. [PR #8956](https://github.com/meteor/meteor/pull/8956) +* A new package called `mongo-dev-server` has been created and wired into + `mongo` as a dependency. As long as this package is included in a Meteor + application (which it is by default since all new Meteor apps have `mongo` + as a dependency), a local development MongoDB server is started alongside + the application. This package was created to provide a way to disable the + local development Mongo server, when `mongo` isn't needed (e.g. when using + Meteor as a build system only). If an application has no dependency on + `mongo`, the `mongo-dev-server` package is not added, which means no local + development Mongo server is started. + [Feature Request #31](https://github.com/meteor/meteor-feature-requests/issues/31) + [PR #8853](https://github.com/meteor/meteor/pull/8853) + * `Accounts.config` no longer mistakenly allows tokens to expire when the `loginExpirationInDays` option is set to `null`. [Issue #5121](https://github.com/meteor/meteor/issues/5121) diff --git a/packages/mongo-dev-server/README.md b/packages/mongo-dev-server/README.md new file mode 100644 index 0000000000..44609c29b5 --- /dev/null +++ b/packages/mongo-dev-server/README.md @@ -0,0 +1,18 @@ +# mongo-dev-server + +[Source code of released version](https://github.com/meteor/meteor/tree/master/packages/mongo-dev-server) | [Source code of development version](https://github.com/meteor/meteor/tree/devel/packages/mongo-dev-server) +*** + +When the `mongo-dev-server` package is included in a Meteor application, a +local development MongoDB server is started alongside the application. This +package is mostly used internally, as it is included by default with any +application that has a dependency on `mongo` (which is most Meteor +applications). In some cases however, people might be interested in +using the Meteor Tool without having to start a local development Mongo +instance (e.g. when using Meteor as a build system). If an application has no +dependency on `mongo`, the `mongo-dev-server` package will be removed +(since it is a direct dependency of the `mongo` package), and no local +development Mongo server will be started. + +Note this is a `debugOnly` package, meaning it will not be included in any +production bundles. diff --git a/packages/mongo-dev-server/package.js b/packages/mongo-dev-server/package.js new file mode 100644 index 0000000000..bf75976d23 --- /dev/null +++ b/packages/mongo-dev-server/package.js @@ -0,0 +1,12 @@ +Package.describe({ + debugOnly: true, + documentation: 'README.md', + name: 'mongo-dev-server', + summary: 'Start MongoDB alongside Meteor, in development mode.', + version: '1.0.1-beta152.7', +}); + +Package.onUse(function (api) { + api.use('modules'); + api.mainModule('server.js', 'server'); +}); diff --git a/packages/mongo-dev-server/server.js b/packages/mongo-dev-server/server.js new file mode 100644 index 0000000000..74643cab71 --- /dev/null +++ b/packages/mongo-dev-server/server.js @@ -0,0 +1,3 @@ +if (process.env.MONGO_URL === 'no-mongo-server') { + Meteor._debug('Note: Restart Meteor to start the MongoDB server.'); +} diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 78ff2d98c3..84601dab17 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -34,7 +34,8 @@ Package.onUse(function (api) { 'diff-sequence', 'mongo-id', 'check', - 'ecmascript' + 'ecmascript', + 'mongo-dev-server', ]); // Binary Heap data structure is used to optimize oplog observe driver diff --git a/tools/runners/run-all.js b/tools/runners/run-all.js index da225fe8c6..2da15c02a6 100644 --- a/tools/runners/run-all.js +++ b/tools/runners/run-all.js @@ -71,10 +71,20 @@ class Runner { onFailure }); + buildmessage.capture(function () { + self.projectContext.resolveConstraints(); + }); + + const packageMap = self.projectContext.packageMap; + const hasMongoDevServerPackage = + packageMap && packageMap.getInfo('mongo-dev-server') != null; self.mongoRunner = null; if (mongoUrl) { oplogUrl = disableOplog ? null : oplogUrl; - } else { + } else if (hasMongoDevServerPackage + || process.env.METEOR_TEST_FAKE_MONGOD_CONTROL_PORT) { + // The mongo-dev-server package is required to start Mongo, but + // tests using fake-mongod are exempted. self.mongoRunner = new MongoRunner({ projectLocalDir: self.projectContext.projectLocalDir, port: mongoPort, @@ -86,6 +96,13 @@ class Runner { mongoUrl = self.mongoRunner.mongoUrl(); oplogUrl = disableOplog ? null : self.mongoRunner.oplogUrl(); + } else { + // Don't start a mongodb server. + // Set monogUrl to a specific value to prevent MongoDB connections + // and to allow a check for printing a message if `mongo-dev-server` + // is added while the app is running. + // The check and message is printed by the `mongo-dev-server` package. + mongoUrl = 'no-mongo-server'; } self.updater = new Updater(); diff --git a/tools/tests/static-html.js b/tools/tests/static-html.js index 2fe6895a2b..fc17f67373 100644 --- a/tools/tests/static-html.js +++ b/tools/tests/static-html.js @@ -54,8 +54,7 @@ selftest.define("static-html - throws error", () => { s.cd('myapp'); const run = startRun(s); - run.match("Attributes on not supported"); - run.waitSecs(90); + run.matchBeforeExit("Attributes on not supported"); run.stop(); }); From 8d9fd49d02814459487eb0ac6c0945ce1f4edfa6 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 10 Aug 2017 15:14:52 -0400 Subject: [PATCH 53/93] Use urlParse instead of url.parse in meteor-services/config.js. Looks like this was a neglected find/replace that should've happened in 10e8d7d08d07cd0646c89be9438b8b8ebc49acda (cc @abernix). --- tools/meteor-services/config.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/meteor-services/config.js b/tools/meteor-services/config.js index 0d62e29d16..a569c5dc65 100644 --- a/tools/meteor-services/config.js +++ b/tools/meteor-services/config.js @@ -37,7 +37,7 @@ export function getBuildFarmUrl() { } export function getBuildFarmDomain() { - return url.parse(getBuildFarmUrl()).host; + return urlParse(getBuildFarmUrl()).host; } // URL for the DDP interface to the package server, typically @@ -48,7 +48,7 @@ export function getPackageServerUrl() { } export function getPackageServerDomain() { - return url.parse(getPackageServerUrl()).host; + return urlParse(getPackageServerUrl()).host; } export function getPackageStatsServerUrl() { @@ -57,7 +57,7 @@ export function getPackageStatsServerUrl() { } export function getPackageStatsServerDomain() { - return url.parse(getPackageStatsServerUrl()).host; + return urlParse(getPackageStatsServerUrl()).host; } // Note: this is NOT guaranteed to return a distinct prefix for every From 999196b5159240c8a250739412b5ddc57343ed13 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 10 Aug 2017 15:17:00 -0400 Subject: [PATCH 54/93] Bump package versions for 1.5.2-beta.9 release. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/ddp-client/package.js | 2 +- packages/ejson/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo-dev-server/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 30397d3f96..ee534e509f 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2-beta152.8" + version: "1.3.2-beta152.9" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index fa6fc4a3fd..378146d9ef 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.8' + version: '6.20.0-beta152.9' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index a034c3ef39..9610d57c0f 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.8', + version: '1.0.0-beta152.9', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 8cf678633a..3aad59429e 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.8' + version: '1.2.0-beta152.9' }); Package.onUse(api => { diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index 616da29784..fc877c2df0 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.1.0-beta152.8', + version: '2.1.0-beta152.9', documentation: null }); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index 99e8652248..d86b04e668 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Extended and Extensible JSON library', - version: '1.0.14-beta152.8' + version: '1.0.14-beta152.9' }); Package.onUse(function onUse(api) { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index f9d7a51ced..aabef8d76a 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.8" + version: "1.5.2-beta.9" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 65bc6fb89d..edda101d13 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.8' + version: '1.3.0-beta152.9' }); Package.onUse(api => { diff --git a/packages/modules/package.js b/packages/modules/package.js index 67f2e74430..6020deafea 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.8", + version: "0.10.0-beta152.9", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo-dev-server/package.js b/packages/mongo-dev-server/package.js index bf75976d23..eb3ef9b415 100644 --- a/packages/mongo-dev-server/package.js +++ b/packages/mongo-dev-server/package.js @@ -3,7 +3,7 @@ Package.describe({ documentation: 'README.md', name: 'mongo-dev-server', summary: 'Start MongoDB alongside Meteor, in development mode.', - version: '1.0.1-beta152.7', + version: '1.0.1-beta152.9', }); Package.onUse(function (api) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 84601dab17..31dc2b6a53 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.8' + version: '1.2.0-beta152.9' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index b67d51ea7c..53bbc2ecce 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.8", + version: "0.9.0-beta152.9", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/webapp/package.js b/packages/webapp/package.js index dd8120fbd4..8c195fa01d 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-beta152.8' + version: '1.3.18-beta152.9' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index d3df045d29..1e5bfe9a7a 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.8", + "version": "1.5.2-beta.9", "recommended": false, "official": false, "description": "Meteor" From 18c14ec89934dc6565196320e85448deeedcceee Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 11 Aug 2017 15:26:02 -0400 Subject: [PATCH 55/93] Bump package versions for 1.5.2-beta.10 release. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/ddp-client/package.js | 2 +- packages/ejson/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo-dev-server/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index ee534e509f..d729045898 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2-beta152.9" + version: "1.3.2-beta152.10" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 378146d9ef..8c98c263ae 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.9' + version: '6.20.0-beta152.10' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index 9610d57c0f..77965af310 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.9', + version: '1.0.0-beta152.10', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 3aad59429e..25426a1a51 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.9' + version: '1.2.0-beta152.10' }); Package.onUse(api => { diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index fc877c2df0..f000900705 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.1.0-beta152.9', + version: '2.1.0-beta152.10', documentation: null }); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index d86b04e668..63149e9d97 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Extended and Extensible JSON library', - version: '1.0.14-beta152.9' + version: '1.0.14-beta152.10' }); Package.onUse(function onUse(api) { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index aabef8d76a..1073314d0d 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.9" + version: "1.5.2-beta.10" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index edda101d13..42401394f2 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.9' + version: '1.3.0-beta152.10' }); Package.onUse(api => { diff --git a/packages/modules/package.js b/packages/modules/package.js index 6020deafea..d775ccec0b 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.9", + version: "0.10.0-beta152.10", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo-dev-server/package.js b/packages/mongo-dev-server/package.js index eb3ef9b415..41b87513b9 100644 --- a/packages/mongo-dev-server/package.js +++ b/packages/mongo-dev-server/package.js @@ -3,7 +3,7 @@ Package.describe({ documentation: 'README.md', name: 'mongo-dev-server', summary: 'Start MongoDB alongside Meteor, in development mode.', - version: '1.0.1-beta152.9', + version: '1.0.1-beta152.10', }); Package.onUse(function (api) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 31dc2b6a53..5b0b1657e1 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.9' + version: '1.2.0-beta152.10' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 53bbc2ecce..04f4f11d9f 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.9", + version: "0.9.0-beta152.10", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 8c195fa01d..3944610a39 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-beta152.9' + version: '1.3.18-beta152.10' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 1e5bfe9a7a..14d0812763 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.9", + "version": "1.5.2-beta.10", "recommended": false, "official": false, "description": "Meteor" From 688d9211b7844457ed953e18298f048fac574adc Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 11 Aug 2017 16:27:49 -0400 Subject: [PATCH 56/93] Fix Mongo hint test by waiting for collection.createIndex Promise. --- packages/mongo/collection_tests.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/mongo/collection_tests.js b/packages/mongo/collection_tests.js index 4334a3e9b9..e6b0c3d9be 100644 --- a/packages/mongo/collection_tests.js +++ b/packages/mongo/collection_tests.js @@ -138,15 +138,21 @@ Tinytest.add('collection - calling native find with $reverse hint should reverse } ); -Tinytest.add('collection - calling native find with good hint and maxTimeMs should succeed', - function(test) { +Tinytest.addAsync('collection - calling native find with good hint and maxTimeMs should succeed', + function(test, done) { var collectionName = 'findOptions3' + test.id; var collection = new Mongo.Collection(collectionName); collection.insert({a: 1}); - if (Meteor.isServer) { - collection.rawCollection().createIndex({a: 1}); - } - test.equal(collection.find({}, {hint: {a: 1}, maxTimeMs: 1000}).count(), 1); + Promise.resolve( + Meteor.isServer && + collection.rawCollection().createIndex({ a: 1 }) + ).then(() => { + test.equal(collection.find({}, { + hint: {a: 1}, + maxTimeMs: 1000 + }).count(), 1); + done(); + }).catch(error => test.fail(error.message)); } ); From a7e8e27ca7e536e052459934be56e5f3eb9e5a21 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 11 Aug 2017 19:09:23 -0400 Subject: [PATCH 57/93] Move standard-minifiers self-test timeout *after* slow run.match. --- tools/tests/standard-minification.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/tests/standard-minification.js b/tools/tests/standard-minification.js index 78e373731f..eb04330ed1 100644 --- a/tools/tests/standard-minification.js +++ b/tools/tests/standard-minification.js @@ -29,8 +29,8 @@ selftest.define('standard-minifiers - CSS splitting', function (options) { color: blue `); - run.waitSecs(60); run.match('Client modified -- refreshing'); + run.waitSecs(90); run.match('the number of stylesheets: <2>'); run.match('the color of the tested 4097th property: '); From 092c0af3dcc76541dff9423b326f1d8f536d0f3c Mon Sep 17 00:00:00 2001 From: Lee Pender Date: Mon, 14 Aug 2017 11:31:26 -0400 Subject: [PATCH 58/93] Add sizes necessary for legacy iOs icon support. (#9012) --- tools/cordova/builder.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tools/cordova/builder.js b/tools/cordova/builder.js index 0f26ee2031..4296b0858c 100644 --- a/tools/cordova/builder.js +++ b/tools/cordova/builder.js @@ -25,6 +25,15 @@ const iconsIosSizes = { 'ios_spotlight': '40x40', 'ios_spotlight_2x': '80x80', 'ios_spotlight_3x': '120x120', + 'ios_notification': '20x20', + 'ios_notification_2x': '40x40', + 'ios_notification_3x': '60x60', + 'iphone_legacy': '57x57', + 'iphone_legacy_2x': '114x114', + 'ipad_spotlight_legacy': '50x50', + 'ipad_spotlight_legacy_2x': '100x100', + 'ipad_app_legacy': '72x72', + 'ipad_app_legacy_2x': '144x144', }; const iconsAndroidSizes = { @@ -537,6 +546,15 @@ Valid platforms are: ios, android.`); * - `ios_spotlight` (40x40) * - `ios_spotlight_2x` (80x80) * - `ios_spotlight_3x` (120x120) + * - 'ios_notification': '20x20', + * - 'ios_notification_2x': '40x40', + * - 'ios_notification_3x': '60x60', + * - 'iphone_legacy': '57x57', + * - 'iphone_legacy_2x': '114x114', + * - 'ipad_spotlight_legacy': '50x50', + * - 'ipad_spotlight_legacy_2x': '100x100', + * - 'ipad_app_legacy': '72x72', + * - 'ipad_app_legacy_2x': '144x144', * - `android_mdpi` (48x48) * - `android_hdpi` (72x72) * - `android_xhdpi` (96x96) From 9ba9a359f5c95c771e433906a861d6f379660448 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 14 Aug 2017 12:12:13 -0400 Subject: [PATCH 59/93] Update Blaze submodule to latest master version. Specifically, this version corresponds to the branch https://github.com/meteor/blaze/commits/revert-html5-tests, which is based on the current master branch tip https://github.com/meteor/blaze/commit/621608c82371cfb59a1b7e31c33c63cfa87ce2e1 with one additional commit: https://github.com/meteor/blaze/commit/6a82100e09b22c27366d11805b232ceab443e386. cc @mitar @abernix --- packages/non-core/blaze | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/non-core/blaze b/packages/non-core/blaze index e9a03af5ed..6a82100e09 160000 --- a/packages/non-core/blaze +++ b/packages/non-core/blaze @@ -1 +1 @@ -Subproject commit e9a03af5edc69777058f87f521d98b6faba9910c +Subproject commit 6a82100e09b22c27366d11805b232ceab443e386 From 2dabbf0b60909fb2316b365293e884510ea797af Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 14 Aug 2017 12:30:16 -0400 Subject: [PATCH 60/93] Make timing of minimongo observeChanges test more reliable. --- packages/mongo/mongo_livedata_tests.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/mongo/mongo_livedata_tests.js b/packages/mongo/mongo_livedata_tests.js index faba62f641..932b98caca 100644 --- a/packages/mongo/mongo_livedata_tests.js +++ b/packages/mongo/mongo_livedata_tests.js @@ -2532,10 +2532,12 @@ if (Meteor.isServer) { self.events.push({evt: "a", id: id}); Meteor._sleepForMs(200); self.events.push({evt: "b", id: id}); + if (! self.two) { + self.two = self.C.insert({}); + } } }); self.one = self.C.insert({}); - self.two = self.C.insert({}); pollUntil(expect, function () { return self.events.length === 4; }, 10000); From 86b82169d03aa156c42110c8ff8c441c2e8e0313 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 14 Aug 2017 13:01:29 -0400 Subject: [PATCH 61/93] Replace for-in loops in minimongo package with Object.keys/forEach. This fixes a problem reported by @arggh: https://github.com/meteor/meteor/pull/8913#issuecomment-322048927 The problem appears to have been introduced by this commit: 2c5094fa0cdd7b7ae649a2d843cb73888eff0c4b The reason this commit was problematic is that it turned several Object.keys/forEach loops into for-in loops, which caused a few unchanged return statements to take on a new meaning: instead of "continuing" the loop by returning from the forEach callback function, the return statements now returned from the enclosing function: https://github.com/meteor/meteor/commit/2c5094fa0cdd7b7ae649a2d843cb73888eff0c4b#commitcomment-23638205 https://github.com/meteor/meteor/commit/2c5094fa0cdd7b7ae649a2d843cb73888eff0c4b#commitcomment-23638216 Besides this refactoring hazard, what else is wrong with for-in loops? First, for-in loops iterate over not only own but also inherited keys, which makes them not exactly equivalent to Object.keys/forEach, which iterates over only own keys. Another way to address that problem is to initialize this.queries to Object.create(null) instead of {} (which I've also done in this commit), so that there is no prototype chain. Second, for-in loops are a trigger for deoptimization in V8: https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#5-for-in Since 2c5094fa0cdd7b7ae649a2d843cb73888eff0c4b was supposed to be about improving performance, and these changes introduced some logical problems as well, I think it's best that we avoid for-in loops. --- packages/minimongo/local_collection.js | 45 +++++++++++++------------- packages/minimongo/matcher.js | 7 ++-- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/packages/minimongo/local_collection.js b/packages/minimongo/local_collection.js index 17a2ba5216..b414dcb396 100644 --- a/packages/minimongo/local_collection.js +++ b/packages/minimongo/local_collection.js @@ -29,7 +29,7 @@ export default class LocalCollection { // resultsSnapshot: snapshot of results. null if not paused. // cursor: Cursor object for the query. // selector, sorter, (callbacks): functions - this.queries = {}; + this.queries = Object.create(null); // null if not saving originals; an IdMap from id to original document value // if saving originals. See comments before saveOriginals(). @@ -111,11 +111,11 @@ export default class LocalCollection { const queriesToRecompute = []; // trigger live queries that match - for (let qid in this.queries) { + Object.keys(this.queries).forEach(qid => { const query = this.queries[qid]; if (query.dirty) { - continue; + return; } const matchResult = query.matcher.documentMatches(doc); @@ -131,7 +131,7 @@ export default class LocalCollection { LocalCollection._insertInResults(query, doc); } } - } + }); queriesToRecompute.forEach(qid => { if (this.queries[qid]) { @@ -164,11 +164,10 @@ export default class LocalCollection { this.paused = true; // Take a snapshot of the query results for each query. - for (let qid in this.queries) { + Object.keys(this.queries).forEach(qid => { const query = this.queries[qid]; - query.resultsSnapshot = EJSON.clone(query.results); - } + }); } remove(selector, callback) { @@ -180,7 +179,7 @@ export default class LocalCollection { this._docs.clear(); - for (let qid in this.queries) { + Object.keys(this.queries).forEach(qid => { const query = this.queries[qid]; if (query.ordered) { @@ -188,7 +187,7 @@ export default class LocalCollection { } else { query.results.clear(); } - } + }); if (callback) { Meteor.defer(() => { @@ -215,7 +214,7 @@ export default class LocalCollection { const removeId = remove[i]; const removeDoc = this._docs.get(removeId); - for (let qid in this.queries) { + Object.keys(this.queries).forEach(qid => { const query = this.queries[qid]; if (query.dirty) { @@ -229,7 +228,7 @@ export default class LocalCollection { queryRemove.push({qid, doc: removeDoc}); } } - } + }); this._saveOriginal(removeId, removeDoc); this._docs.remove(removeId); @@ -280,7 +279,7 @@ export default class LocalCollection { // observer methods won't actually fire when we trigger them. this.paused = false; - for (let qid in this.queries) { + Object.keys(this.queries).forEach(qid => { const query = this.queries[qid]; if (query.dirty) { @@ -302,7 +301,7 @@ export default class LocalCollection { } query.resultsSnapshot = null; - } + }); this._observeQueue.drain(); } @@ -360,7 +359,7 @@ export default class LocalCollection { const docMap = new LocalCollection._IdMap; const idsMatched = LocalCollection._idsMatchedBySelector(selector); - for (let qid in this.queries) { + Object.keys(this.queries).forEach(qid => { const query = this.queries[qid]; if ((query.cursor.skip || query.cursor.limit) && ! this.paused) { @@ -399,7 +398,7 @@ export default class LocalCollection { qidToOriginalResults[qid] = query.results.map(memoizedCloneIfNeeded); } - } + }); const recomputeQids = {}; @@ -515,11 +514,11 @@ export default class LocalCollection { _modifyAndNotify(doc, mod, recomputeQids, arrayIndices) { const matched_before = {}; - for (let qid in this.queries) { + Object.keys(this.queries).forEach(qid => { const query = this.queries[qid]; if (query.dirty) { - continue; + return; } if (query.ordered) { @@ -529,17 +528,17 @@ export default class LocalCollection { // can just do a direct lookup. matched_before[qid] = query.results.has(doc._id); } - } + }); const old_doc = EJSON.clone(doc); LocalCollection._modify(doc, mod, {arrayIndices}); - for (let qid in this.queries) { + Object.keys(this.queries).forEach(qid => { const query = this.queries[qid]; if (query.dirty) { - continue; + return; } const afterMatch = query.matcher.documentMatches(doc); @@ -568,7 +567,7 @@ export default class LocalCollection { } else if (before && after) { LocalCollection._updateInResults(query, doc, old_doc); } - } + }); } // Recomputes the results of a query and runs observe callbacks for the @@ -1081,13 +1080,13 @@ LocalCollection._isModificationMod = mod => { let isModify = false; let isReplace = false; - for (const key in mod) { + Object.keys(mod).forEach(key => { if (key.substr(0, 1) === '$') { isModify = true; } else { isReplace = true; } - } + }); if (isModify && isReplace) { throw new Error( diff --git a/packages/minimongo/matcher.js b/packages/minimongo/matcher.js index ad48271166..75929e4b09 100644 --- a/packages/minimongo/matcher.js +++ b/packages/minimongo/matcher.js @@ -273,10 +273,9 @@ LocalCollection._f = { const toArray = object => { const result = []; - for (let key in object) { - result.push(key); - result.push(object[key]); - } + Object.keys(object).forEach(key => { + result.push(key, object[key]); + }); return result; }; From eb78811070a3cddd94af7112806a02c0a88db685 Mon Sep 17 00:00:00 2001 From: Geoffrey Booth Date: Fri, 28 Jul 2017 10:49:02 -0700 Subject: [PATCH 62/93] Bump CoffeeScript version --- .../.npm/plugin/compileCoffeescript/npm-shrinkwrap.json | 6 +++--- packages/non-core/coffeescript/package.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/npm-shrinkwrap.json b/packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/npm-shrinkwrap.json index a24f8dcdc1..1f8aef812e 100644 --- a/packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/npm-shrinkwrap.json +++ b/packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/npm-shrinkwrap.json @@ -1,9 +1,9 @@ { "dependencies": { "coffeescript": { - "version": "1.12.6", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.6.tgz", - "from": "coffeescript@1.12.6" + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz", + "from": "coffeescript@1.12.7" }, "source-map": { "version": "0.5.6", diff --git a/packages/non-core/coffeescript/package.js b/packages/non-core/coffeescript/package.js index 5c7601eb1f..298d1c8a51 100644 --- a/packages/non-core/coffeescript/package.js +++ b/packages/non-core/coffeescript/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Javascript dialect with fewer braces and semicolons", - version: "1.12.6_1" + version: "1.12.7_1" }); Package.registerBuildPlugin({ @@ -8,7 +8,7 @@ Package.registerBuildPlugin({ use: ['caching-compiler', 'ecmascript'], sources: ['plugin/compile-coffeescript.js'], npmDependencies: { - "coffeescript": "1.12.6", + "coffeescript": "1.12.7", "source-map": "0.5.6" } }); From 491cbc3bfe98699be1a5ffa12500241cda989af9 Mon Sep 17 00:00:00 2001 From: Geoffrey Booth Date: Tue, 25 Jul 2017 17:52:59 -0700 Subject: [PATCH 63/93] Instructions for how to test the coffeescript package --- packages/non-core/coffeescript/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/non-core/coffeescript/README.md b/packages/non-core/coffeescript/README.md index 711ff02abd..fe0681a1ae 100644 --- a/packages/non-core/coffeescript/README.md +++ b/packages/non-core/coffeescript/README.md @@ -51,3 +51,13 @@ you'd like to see changed. ### Modules and CoffeeScript See [Modules » CoffeeScript Syntax](http://docs.meteor.com/packages/modules.html#CoffeeScript). + +### Testing This Package + +Follow the [instructions](https://github.com/meteor/meteor/blob/devel/Development.md#tests) +to check out the Meteor repo and run `test-packages`. +Once you can do that successfully, to test the `coffeescript` package run: + +```bash +./meteor test-packages packages/non-core/coffeescript +``` From 8344cbf59d9fa28bc16bffe6aaf8ced1256b81be Mon Sep 17 00:00:00 2001 From: Geoffrey Booth Date: Fri, 28 Jul 2017 13:38:38 -0700 Subject: [PATCH 64/93] Split coffeescript package into coffeescript / coffeescript-compiler. --- .../non-core/coffeescript-compiler/.gitignore | 1 + .../.npm/package}/.gitignore | 0 .../.npm/package}/README | 0 .../.npm/package}/npm-shrinkwrap.json | 0 .../non-core/coffeescript-compiler/README.md | 17 ++ .../coffeescript-compiler.js | 214 +++++++++++++++ .../non-core/coffeescript-compiler/package.js | 21 ++ .../coffeescript-test-helper/.gitignore | 0 .../coffeescript-test-helper/README.md | 0 .../coffeescript-test-helper/exporting.coffee | 0 .../coffeescript-test-helper/package.js | 0 packages/non-core/coffeescript/.gitignore | 1 + packages/non-core/coffeescript/README.md | 6 +- .../coffeescript/compile-coffeescript.js | 48 ++++ packages/non-core/coffeescript/package.js | 22 +- .../plugin/compile-coffeescript.js | 252 ------------------ 16 files changed, 316 insertions(+), 266 deletions(-) create mode 100644 packages/non-core/coffeescript-compiler/.gitignore rename packages/non-core/{coffeescript/.npm/plugin/compileCoffeescript => coffeescript-compiler/.npm/package}/.gitignore (100%) rename packages/non-core/{coffeescript/.npm/plugin/compileCoffeescript => coffeescript-compiler/.npm/package}/README (100%) rename packages/non-core/{coffeescript/.npm/plugin/compileCoffeescript => coffeescript-compiler/.npm/package}/npm-shrinkwrap.json (100%) create mode 100644 packages/non-core/coffeescript-compiler/README.md create mode 100644 packages/non-core/coffeescript-compiler/coffeescript-compiler.js create mode 100644 packages/non-core/coffeescript-compiler/package.js rename packages/{ => non-core}/coffeescript-test-helper/.gitignore (100%) rename packages/{ => non-core}/coffeescript-test-helper/README.md (100%) rename packages/{ => non-core}/coffeescript-test-helper/exporting.coffee (100%) rename packages/{ => non-core}/coffeescript-test-helper/package.js (100%) create mode 100644 packages/non-core/coffeescript/compile-coffeescript.js delete mode 100644 packages/non-core/coffeescript/plugin/compile-coffeescript.js diff --git a/packages/non-core/coffeescript-compiler/.gitignore b/packages/non-core/coffeescript-compiler/.gitignore new file mode 100644 index 0000000000..918ef5d781 --- /dev/null +++ b/packages/non-core/coffeescript-compiler/.gitignore @@ -0,0 +1 @@ +.npm diff --git a/packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/.gitignore b/packages/non-core/coffeescript-compiler/.npm/package/.gitignore similarity index 100% rename from packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/.gitignore rename to packages/non-core/coffeescript-compiler/.npm/package/.gitignore diff --git a/packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/README b/packages/non-core/coffeescript-compiler/.npm/package/README similarity index 100% rename from packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/README rename to packages/non-core/coffeescript-compiler/.npm/package/README diff --git a/packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/npm-shrinkwrap.json b/packages/non-core/coffeescript-compiler/.npm/package/npm-shrinkwrap.json similarity index 100% rename from packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/npm-shrinkwrap.json rename to packages/non-core/coffeescript-compiler/.npm/package/npm-shrinkwrap.json diff --git a/packages/non-core/coffeescript-compiler/README.md b/packages/non-core/coffeescript-compiler/README.md new file mode 100644 index 0000000000..2a394f6f5b --- /dev/null +++ b/packages/non-core/coffeescript-compiler/README.md @@ -0,0 +1,17 @@ +# coffeescript-compiler +[Source code of released version](https://github.com/meteor/meteor/tree/master/packages/coffeescript-compiler) | [Source code of development version](https://github.com/meteor/meteor/tree/devel/packages/coffeescript-compiler) +*** + +This package supports the [`coffeescript`](../coffeescript/README.md) package, +and any other packages that wish to compile CoffeeScript code into JavaScript. +Like the [`babel-compiler`](../babel-compiler/README.md) package, the actual +compilation is separated out from the build plugin so that packages besides +the official `coffeescript` package can compile CoffeeScript code. + +### Testing This Package + +Testing the `coffeescript` package also tests this one: + +```bash +./meteor test-packages coffeescript +``` diff --git a/packages/non-core/coffeescript-compiler/coffeescript-compiler.js b/packages/non-core/coffeescript-compiler/coffeescript-compiler.js new file mode 100644 index 0000000000..ed228594cc --- /dev/null +++ b/packages/non-core/coffeescript-compiler/coffeescript-compiler.js @@ -0,0 +1,214 @@ +import { BabelCompiler } from 'meteor/babel-compiler'; +import CoffeeScript from 'coffeescript'; +import { SourceMapConsumer, SourceMapGenerator } from 'source-map'; + + +// The CoffeeScript compiler overrides Error.prepareStackTrace, mostly for the +// use of coffee.run which we don't use. This conflicts with the tool's use of +// Error.prepareStackTrace to properly show error messages in linked code. +// Restore the tool's one after CoffeeScript clobbers it at import time. +if (Error.METEOR_prepareStackTrace) { + Error.prepareStackTrace = Error.METEOR_prepareStackTrace; +} + + +// The CompileResult for this CachingCompiler is a {source, sourceMap} object. +CoffeeScriptCompiler = class CoffeeScriptCompiler { + constructor() { + this.babelCompiler = new BabelCompiler({ + // Prevent Babel from importing helpers from babel-runtime, since + // the CoffeeScript plugin does not imply the modules package, which + // means require may not be defined. Note that this in no way + // prevents CoffeeScript projects from using the modules package and + // putting require or import statements within backticks; it just + // won't happen automatically because of Babel. + runtime: false + }); + } + + getCompileOptions(inputFile) { + return { + bare: true, + filename: inputFile.getPathInPackage(), + literate: inputFile.getExtension() !== 'coffee', + // Return a source map. + sourceMap: true, + // This becomes the `file` field of the source map. + generatedFile: '/' + this.outputFilePath(inputFile), + // This becomes the `sources` field of the source map. + sourceFiles: [inputFile.getDisplayPath()], + }; + } + + outputFilePath(inputFile) { + return inputFile.getPathInPackage() + '.js'; + } + + compileOneFile(inputFile) { + const source = inputFile.getContentsAsString(); + const compileOptions = this.getCompileOptions(inputFile); + + let output; + try { + output = CoffeeScript.compile(source, compileOptions); + } catch (e) { + inputFile.error({ + message: e.message, + line: e.location && (e.location.first_line + 1), + column: e.location && (e.location.first_column + 1) + }); + return null; + } + + let sourceMap = JSON.parse(output.v3SourceMap); + sourceMap.sourcesContent = [source]; + + output.js = this.stripExportedVars( + output.js, + inputFile.getDeclaredExports().map(e => e.name) + ); + + // CoffeeScript contains a handful of features that output as ES2015+, + // such as modules, generator functions, for…of, and tagged template + // literals. Because they’re too varied to detect, pass all CoffeeScript + // compiler output through the Babel compiler. + const doubleRoastedCoffee = + this.babelCompiler.processOneFileForTarget(inputFile, output.js); + + if (doubleRoastedCoffee != null && + doubleRoastedCoffee.data != null) { + output.js = doubleRoastedCoffee.data; + + const coffeeSourceMap = doubleRoastedCoffee.sourceMap; + + if (coffeeSourceMap) { + // Reference the compiled CoffeeScript file so that `applySourceMap` + // below can match it with the source map produced by the CoffeeScript + // compiler. + coffeeSourceMap.sources[0] = '/' + this.outputFilePath(inputFile); + + // Combine the original CoffeeScript source map with the one + // produced by this.babelCompiler.processOneFileForTarget. + const smg = SourceMapGenerator.fromSourceMap( + new SourceMapConsumer(coffeeSourceMap) + ); + smg.applySourceMap(new SourceMapConsumer(sourceMap)); + sourceMap = smg.toJSON(); + } else { + // If the .coffee file is contained by a node_modules directory, + // then BabelCompiler will not transpile it, and there will be + // no sourceMap, but that's fine because the original + // CoffeeScript sourceMap will still be valid. + } + } + + return this.addSharedHeader(output.js, sourceMap); + } + + stripExportedVars(source, exports) { + if (!exports || !exports.length) + return source; + const lines = source.split("\n"); + + // We make the following assumptions, based on the output of CoffeeScript + // 1.7.1. + // - The var declaration in question is not indented and is the first such + // var declaration. (CoffeeScript only produces one var line at each + // scope and there's only one top-level scope.) All relevant variables + // are actually on this line. + // - The user hasn't used a ###-comment containing a line that looks like + // a var line, to produce something like + // /* bla + // var foo; + // */ + // before an actual var line. (ie, we do NOT attempt to figure out if + // we're inside a /**/ comment, which is produced by ### comments.) + // - The var in question is not assigned to in the declaration, nor are any + // other vars on this line. (CoffeeScript does produce some assignments + // but only for internal helpers generated by CoffeeScript, and they end + // up on subsequent lines.) + // XXX relax these assumptions by doing actual JS parsing (eg with jsparse). + // I'd do this now, but there's no easy way to "unparse" a jsparse AST. + // Or alternatively, hack the compiler to allow us to specify unbound + // symbols directly. + + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + const match = /^var (.+)([,;])$/.exec(line); + if (!match) + continue; + + // If there's an assignment on this line, we assume that there are ONLY + // assignments and that the var we are looking for is not declared. (Part + // of our strong assumption about the layout of this code.) + if (match[1].indexOf('=') !== -1) + continue; + + // We want to replace the line with something no shorter, so that all + // records in the source map continue to point at valid + // characters. + function replaceLine(x) { + if (x.length >= lines[i].length) { + lines[i] = x; + } else { + lines[i] = x + new Array(1 + (lines[i].length - x.length)).join(' '); + } + } + + let vars = match[1].split(', ').filter(v => exports.indexOf(v) === -1); + if (vars.length) { + replaceLine('var ' + vars.join(', ') + match[2]); + } else { + // We got rid of all the vars on this line. Drop the whole line if this + // didn't continue to the next line, otherwise keep just the 'var '. + if (match[2] === ';') + replaceLine(''); + else + replaceLine('var'); + } + break; + } + + return lines.join('\n'); + } + + addSharedHeader(source, sourceMap) { + // We want the symbol "share" to be visible to all CoffeeScript files in the + // package (and shared between them), but not visible to JavaScript + // files. (That's because we don't want to introduce two competing ways to + // make package-local variables into JS ("share" vs assigning to non-var + // variables).) The following hack accomplishes that: "__coffeescriptShare" + // will be visible at the package level and "share" at the file level. This + // should work both in "package" mode where __coffeescriptShare will be added + // as a var in the package closure, and in "app" mode where it will end up as + // a global. + // + // This ends in a newline to make the source map easier to adjust. + const header = ("__coffeescriptShare = typeof __coffeescriptShare === 'object' " + + "? __coffeescriptShare : {}; " + + "var share = __coffeescriptShare;\n"); + + // If the file begins with "use strict", we need to keep that as the first + // statement. + const processedSource = source.replace(/^(?:((['"])use strict\2;)\n)?/, (match, useStrict) => { + if (match) { + // There's a "use strict"; we keep this as the first statement and insert + // our header at the end of the line that it's on. This doesn't change + // line numbers or the part of the line that previous may have been + // annotated, so we don't need to update the source map. + return useStrict + ' ' + header; + } else { + // There's no use strict, so we can just add the header at the very + // beginning. This adds a line to the file, so we update the source map to + // add a single un-annotated line to the beginning. + sourceMap.mappings = ';' + sourceMap.mappings; + return header; + } + }); + return { + source: processedSource, + sourceMap: sourceMap + }; + } + +} diff --git a/packages/non-core/coffeescript-compiler/package.js b/packages/non-core/coffeescript-compiler/package.js new file mode 100644 index 0000000000..fc394b7751 --- /dev/null +++ b/packages/non-core/coffeescript-compiler/package.js @@ -0,0 +1,21 @@ +Package.describe({ + name: 'coffeescript-compiler', + summary: 'Compiler for CoffeeScript code, supporting the coffeescript package', + version: '1.12.7_1' // Tracks version of NPM `coffeescript` module, with _1, _2 etc. +}); + +Npm.depends({ + 'coffeescript': '1.12.7', + 'source-map': '0.5.6' +}); + +Package.onUse(function (api) { + api.use('babel-compiler'); + api.use('ecmascript'); + + api.addFiles(['coffeescript-compiler.js'], 'server'); + + api.export('CoffeeScriptCompiler', 'server'); +}); + +// See `coffeescript` package for tests. diff --git a/packages/coffeescript-test-helper/.gitignore b/packages/non-core/coffeescript-test-helper/.gitignore similarity index 100% rename from packages/coffeescript-test-helper/.gitignore rename to packages/non-core/coffeescript-test-helper/.gitignore diff --git a/packages/coffeescript-test-helper/README.md b/packages/non-core/coffeescript-test-helper/README.md similarity index 100% rename from packages/coffeescript-test-helper/README.md rename to packages/non-core/coffeescript-test-helper/README.md diff --git a/packages/coffeescript-test-helper/exporting.coffee b/packages/non-core/coffeescript-test-helper/exporting.coffee similarity index 100% rename from packages/coffeescript-test-helper/exporting.coffee rename to packages/non-core/coffeescript-test-helper/exporting.coffee diff --git a/packages/coffeescript-test-helper/package.js b/packages/non-core/coffeescript-test-helper/package.js similarity index 100% rename from packages/coffeescript-test-helper/package.js rename to packages/non-core/coffeescript-test-helper/package.js diff --git a/packages/non-core/coffeescript/.gitignore b/packages/non-core/coffeescript/.gitignore index 677a6fc263..c01644335c 100644 --- a/packages/non-core/coffeescript/.gitignore +++ b/packages/non-core/coffeescript/.gitignore @@ -1 +1,2 @@ .build* +.npm diff --git a/packages/non-core/coffeescript/README.md b/packages/non-core/coffeescript/README.md index fe0681a1ae..b23b98c88d 100644 --- a/packages/non-core/coffeescript/README.md +++ b/packages/non-core/coffeescript/README.md @@ -44,10 +44,6 @@ Here's how CoffeeScript works with Meteor's namespacing. for a value that is shared between all CoffeeScript code in a package, but doesn't escape that package. -Heavy CoffeeScript users, please let us know how this arrangement -works for you, whether `share` is helpful for you, and anything else -you'd like to see changed. - ### Modules and CoffeeScript See [Modules » CoffeeScript Syntax](http://docs.meteor.com/packages/modules.html#CoffeeScript). @@ -59,5 +55,5 @@ to check out the Meteor repo and run `test-packages`. Once you can do that successfully, to test the `coffeescript` package run: ```bash -./meteor test-packages packages/non-core/coffeescript +./meteor test-packages coffeescript ``` diff --git a/packages/non-core/coffeescript/compile-coffeescript.js b/packages/non-core/coffeescript/compile-coffeescript.js new file mode 100644 index 0000000000..c8c940b770 --- /dev/null +++ b/packages/non-core/coffeescript/compile-coffeescript.js @@ -0,0 +1,48 @@ +Plugin.registerCompiler({ + extensions: ['coffee', 'litcoffee', 'coffee.md'] +}, () => new CachedCoffeeScriptCompiler()); + + +// The CompileResult for this CachingCompiler is a {source, sourceMap} object. +class CachedCoffeeScriptCompiler extends CachingCompiler { + constructor() { + super({ + compilerName: 'coffeescript', + defaultCacheSize: 1024*1024*10, + }); + + this.coffeeScriptCompiler = new CoffeeScriptCompiler(); + } + + getCacheKey(inputFile) { + return [ + inputFile.getSourceHash(), + inputFile.getDeclaredExports(), + this.coffeeScriptCompiler.getCompileOptions(inputFile), + ]; + } + + setDiskCacheDirectory(cacheDir) { + this.coffeeScriptCompiler.babelCompiler.setDiskCacheDirectory(cacheDir); + return super.setDiskCacheDirectory(cacheDir); + } + + compileOneFile(inputFile) { + return this.coffeeScriptCompiler.compileOneFile(inputFile); + } + + addCompileResult(inputFile, sourceWithMap) { + inputFile.addJavaScript({ + path: this.coffeeScriptCompiler.outputFilePath(inputFile), + sourcePath: inputFile.getPathInPackage(), + data: sourceWithMap.source, + sourceMap: sourceWithMap.sourceMap, + bare: inputFile.getFileOptions().bare + }); + } + + compileResultSize(sourceWithMap) { + return sourceWithMap.source.length + + this.sourceMapSize(sourceWithMap.sourceMap); + } +} diff --git a/packages/non-core/coffeescript/package.js b/packages/non-core/coffeescript/package.js index 298d1c8a51..0634a95762 100644 --- a/packages/non-core/coffeescript/package.js +++ b/packages/non-core/coffeescript/package.js @@ -1,21 +1,25 @@ Package.describe({ - summary: "Javascript dialect with fewer braces and semicolons", - version: "1.12.7_1" + name: 'coffeescript', + summary: 'Javascript dialect with fewer braces and semicolons', + // This package version used to track the version of the NPM `coffeescript` + // module, but now the Meteor package `coffeescript-compiler` tracks that + // version; so in order for this to appear newer than the previous package + // version 1.12.6_1, we jump to 10+. + version: '10.0.1' }); Package.registerBuildPlugin({ - name: "compileCoffeescript", - use: ['caching-compiler', 'ecmascript'], - sources: ['plugin/compile-coffeescript.js'], + name: 'compile-coffeescript', + use: ['caching-compiler', 'coffeescript-compiler', 'ecmascript'], + sources: ['compile-coffeescript.js'], npmDependencies: { - "coffeescript": "1.12.7", - "source-map": "0.5.6" + 'coffeescript': '1.12.7', + 'source-map': '0.5.6' } }); Package.onUse(function (api) { api.use('isobuild:compiler-plugin@1.0.0'); - api.use('babel-compiler'); // Because the CoffeeScript plugin now calls // BabelCompiler.prototype.processOneFileForTarget for any ES2015+ @@ -23,7 +27,7 @@ Package.onUse(function (api) { // same runtime environment that the 'ecmascript' package provides. // The following api.imply calls should match those in ../ecmascript/package.js, // except that coffeescript does not api.imply('modules'). - api.imply('ecmascript-runtime'); + api.imply('ecmascript-runtime', 'server'); api.imply('babel-runtime'); api.imply('promise'); }); diff --git a/packages/non-core/coffeescript/plugin/compile-coffeescript.js b/packages/non-core/coffeescript/plugin/compile-coffeescript.js deleted file mode 100644 index 03abcbe842..0000000000 --- a/packages/non-core/coffeescript/plugin/compile-coffeescript.js +++ /dev/null @@ -1,252 +0,0 @@ -import { - SourceMapConsumer, - SourceMapGenerator, -} from 'source-map'; -import coffee from 'coffeescript'; -import { BabelCompiler } from 'meteor/babel-compiler'; - -// The CoffeeScript compiler overrides Error.prepareStackTrace, mostly for the -// use of coffee.run which we don't use. This conflicts with the tool's use of -// Error.prepareStackTrace to properly show error messages in linked code. -// Restore the tool's one after CoffeeScript clobbers it at import time. -if (Error.METEOR_prepareStackTrace) { - Error.prepareStackTrace = Error.METEOR_prepareStackTrace; -} - -Plugin.registerCompiler({ - extensions: ['coffee', 'litcoffee', 'coffee.md'] -}, () => new CoffeeCompiler()); - -// The CompileResult for this CachingCompiler is a {source, sourceMap} object. - -export class CoffeeCompiler extends CachingCompiler { - constructor() { - super({ - compilerName: 'coffeescript', - defaultCacheSize: 1024*1024*10, - }); - - this.babelCompiler = new BabelCompiler({ - // Prevent Babel from importing helpers from babel-runtime, since - // the CoffeeScript plugin does not imply the modules package, which - // means require may not be defined. Note that this in no way - // prevents CoffeeScript projects from using the modules package and - // putting require or import statements within backticks; it just - // won't happen automatically because of Babel. - runtime: false - }); - } - - _getCompileOptions(inputFile) { - return { - bare: true, - filename: inputFile.getPathInPackage(), - literate: inputFile.getExtension() !== 'coffee', - // Return a source map. - sourceMap: true, - // This becomes the "file" field of the source map. - generatedFile: '/' + this._outputFilePath(inputFile), - // This becomes the "sources" field of the source map. - sourceFiles: [inputFile.getDisplayPath()], - }; - } - - _outputFilePath(inputFile) { - return inputFile.getPathInPackage() + '.js'; - } - - getCacheKey(inputFile) { - return [ - inputFile.getSourceHash(), - inputFile.getDeclaredExports(), - this._getCompileOptions(inputFile), - ]; - } - - setDiskCacheDirectory(cacheDir) { - this.babelCompiler.setDiskCacheDirectory(cacheDir); - return super.setDiskCacheDirectory(cacheDir); - } - - compileOneFile(inputFile) { - const source = inputFile.getContentsAsString(); - const compileOptions = this._getCompileOptions(inputFile); - - let output; - try { - output = coffee.compile(source, compileOptions); - } catch (e) { - inputFile.error({ - message: e.message, - line: e.location && (e.location.first_line + 1), - column: e.location && (e.location.first_column + 1) - }); - return null; - } - - let sourceMap = JSON.parse(output.v3SourceMap); - sourceMap.sourcesContent = [source]; - - output.js = stripExportedVars( - output.js, - inputFile.getDeclaredExports().map(e => e.name) - ); - - // CoffeeScript contains a handful of features that output as ES2015+, - // such as modules, generator functions, for…of, and tagged template - // literals. Because they’re too varied to detect, pass all CoffeeScript - // compiler output through the Babel compiler. - const doubleRoastedCoffee = - this.babelCompiler.processOneFileForTarget(inputFile, output.js); - - if (doubleRoastedCoffee != null && - doubleRoastedCoffee.data != null) { - output.js = doubleRoastedCoffee.data; - - const coffeeSourceMap = doubleRoastedCoffee.sourceMap; - - if (coffeeSourceMap) { - // Reference the compiled CoffeeScript file so that `applySourceMap` - // below can match it with the source map produced by the CoffeeScript - // compiler. - coffeeSourceMap.sources[0] = '/' + this._outputFilePath(inputFile); - - // Combine the original CoffeeScript source map with the one - // produced by this.babelCompiler.processOneFileForTarget. - const smg = SourceMapGenerator.fromSourceMap( - new SourceMapConsumer(coffeeSourceMap) - ); - smg.applySourceMap(new SourceMapConsumer(sourceMap)); - sourceMap = smg.toJSON(); - } else { - // If the .coffee file is contained by a node_modules directory, - // then BabelCompiler will not transpile it, and there will be - // no sourceMap, but that's fine because the original - // CoffeeScript sourceMap will still be valid. - } - } - - return addSharedHeader(output.js, sourceMap); - } - - addCompileResult(inputFile, sourceWithMap) { - inputFile.addJavaScript({ - path: this._outputFilePath(inputFile), - sourcePath: inputFile.getPathInPackage(), - data: sourceWithMap.source, - sourceMap: sourceWithMap.sourceMap, - bare: inputFile.getFileOptions().bare - }); - } - - compileResultSize(sourceWithMap) { - return sourceWithMap.source.length + - this.sourceMapSize(sourceWithMap.sourceMap); - } -} - -function stripExportedVars(source, exports) { - if (!exports || !exports.length) - return source; - const lines = source.split("\n"); - - // We make the following assumptions, based on the output of CoffeeScript - // 1.7.1. - // - The var declaration in question is not indented and is the first such - // var declaration. (CoffeeScript only produces one var line at each - // scope and there's only one top-level scope.) All relevant variables - // are actually on this line. - // - The user hasn't used a ###-comment containing a line that looks like - // a var line, to produce something like - // /* bla - // var foo; - // */ - // before an actual var line. (ie, we do NOT attempt to figure out if - // we're inside a /**/ comment, which is produced by ### comments.) - // - The var in question is not assigned to in the declaration, nor are any - // other vars on this line. (CoffeeScript does produce some assignments - // but only for internal helpers generated by CoffeeScript, and they end - // up on subsequent lines.) - // XXX relax these assumptions by doing actual JS parsing (eg with jsparse). - // I'd do this now, but there's no easy way to "unparse" a jsparse AST. - // Or alternatively, hack the compiler to allow us to specify unbound - // symbols directly. - - for (let i = 0; i < lines.length; i++) { - const line = lines[i]; - const match = /^var (.+)([,;])$/.exec(line); - if (!match) - continue; - - // If there's an assignment on this line, we assume that there are ONLY - // assignments and that the var we are looking for is not declared. (Part - // of our strong assumption about the layout of this code.) - if (match[1].indexOf('=') !== -1) - continue; - - // We want to replace the line with something no shorter, so that all - // records in the source map continue to point at valid - // characters. - function replaceLine(x) { - if (x.length >= lines[i].length) { - lines[i] = x; - } else { - lines[i] = x + new Array(1 + (lines[i].length - x.length)).join(' '); - } - } - - let vars = match[1].split(', ').filter(v => exports.indexOf(v) === -1); - if (vars.length) { - replaceLine('var ' + vars.join(', ') + match[2]); - } else { - // We got rid of all the vars on this line. Drop the whole line if this - // didn't continue to the next line, otherwise keep just the 'var '. - if (match[2] === ';') - replaceLine(''); - else - replaceLine('var'); - } - break; - } - - return lines.join('\n'); -} - -function addSharedHeader(source, sourceMap) { - // We want the symbol "share" to be visible to all CoffeeScript files in the - // package (and shared between them), but not visible to JavaScript - // files. (That's because we don't want to introduce two competing ways to - // make package-local variables into JS ("share" vs assigning to non-var - // variables).) The following hack accomplishes that: "__coffeescriptShare" - // will be visible at the package level and "share" at the file level. This - // should work both in "package" mode where __coffeescriptShare will be added - // as a var in the package closure, and in "app" mode where it will end up as - // a global. - // - // This ends in a newline to make the source map easier to adjust. - const header = ("__coffeescriptShare = typeof __coffeescriptShare === 'object' " + - "? __coffeescriptShare : {}; " + - "var share = __coffeescriptShare;\n"); - - // If the file begins with "use strict", we need to keep that as the first - // statement. - const processedSource = source.replace(/^(?:((['"])use strict\2;)\n)?/, (match, useStrict) => { - if (match) { - // There's a "use strict"; we keep this as the first statement and insert - // our header at the end of the line that it's on. This doesn't change - // line numbers or the part of the line that previous may have been - // annotated, so we don't need to update the source map. - return useStrict + ' ' + header; - } else { - // There's no use strict, so we can just add the header at the very - // beginning. This adds a line to the file, so we update the source map to - // add a single un-annotated line to the beginning. - sourceMap.mappings = ';' + sourceMap.mappings; - return header; - } - }); - return { - source: processedSource, - sourceMap: sourceMap - }; -} From eb3c7dd3443497ee33c04784cf5536c81867ff82 Mon Sep 17 00:00:00 2001 From: Geoffrey Booth Date: Mon, 14 Aug 2017 22:07:04 +0000 Subject: [PATCH 65/93] Move coffeescript and coffeescript-test-helper packages back into core. (#8960) They depend on core packages like caching-compiler, but coffeescript-compiler can remain in non-core, so it can update more frequently as npm coffeescript gets updated. --- packages/{non-core => }/coffeescript-test-helper/.gitignore | 0 packages/{non-core => }/coffeescript-test-helper/README.md | 0 packages/{non-core => }/coffeescript-test-helper/exporting.coffee | 0 packages/{non-core => }/coffeescript-test-helper/package.js | 0 packages/{non-core => }/coffeescript/.gitignore | 0 packages/{non-core => }/coffeescript/README.md | 0 packages/{non-core => }/coffeescript/compile-coffeescript.js | 0 packages/{non-core => }/coffeescript/package.js | 0 packages/{non-core => }/coffeescript/tests/bare_test_setup.coffee | 0 packages/{non-core => }/coffeescript/tests/bare_tests.js | 0 .../{non-core => }/coffeescript/tests/coffeescript_module.coffee | 0 .../coffeescript/tests/coffeescript_strict_tests.coffee | 0 .../{non-core => }/coffeescript/tests/coffeescript_test_setup.js | 0 .../{non-core => }/coffeescript/tests/coffeescript_tests.coffee | 0 packages/{non-core => }/coffeescript/tests/coffeescript_tests.js | 0 packages/{non-core => }/coffeescript/tests/es2015_module.js | 0 .../coffeescript/tests/litcoffeescript_tests.coffee.md | 0 .../coffeescript/tests/litcoffeescript_tests.litcoffee | 0 18 files changed, 0 insertions(+), 0 deletions(-) rename packages/{non-core => }/coffeescript-test-helper/.gitignore (100%) rename packages/{non-core => }/coffeescript-test-helper/README.md (100%) rename packages/{non-core => }/coffeescript-test-helper/exporting.coffee (100%) rename packages/{non-core => }/coffeescript-test-helper/package.js (100%) rename packages/{non-core => }/coffeescript/.gitignore (100%) rename packages/{non-core => }/coffeescript/README.md (100%) rename packages/{non-core => }/coffeescript/compile-coffeescript.js (100%) rename packages/{non-core => }/coffeescript/package.js (100%) rename packages/{non-core => }/coffeescript/tests/bare_test_setup.coffee (100%) rename packages/{non-core => }/coffeescript/tests/bare_tests.js (100%) rename packages/{non-core => }/coffeescript/tests/coffeescript_module.coffee (100%) rename packages/{non-core => }/coffeescript/tests/coffeescript_strict_tests.coffee (100%) rename packages/{non-core => }/coffeescript/tests/coffeescript_test_setup.js (100%) rename packages/{non-core => }/coffeescript/tests/coffeescript_tests.coffee (100%) rename packages/{non-core => }/coffeescript/tests/coffeescript_tests.js (100%) rename packages/{non-core => }/coffeescript/tests/es2015_module.js (100%) rename packages/{non-core => }/coffeescript/tests/litcoffeescript_tests.coffee.md (100%) rename packages/{non-core => }/coffeescript/tests/litcoffeescript_tests.litcoffee (100%) diff --git a/packages/non-core/coffeescript-test-helper/.gitignore b/packages/coffeescript-test-helper/.gitignore similarity index 100% rename from packages/non-core/coffeescript-test-helper/.gitignore rename to packages/coffeescript-test-helper/.gitignore diff --git a/packages/non-core/coffeescript-test-helper/README.md b/packages/coffeescript-test-helper/README.md similarity index 100% rename from packages/non-core/coffeescript-test-helper/README.md rename to packages/coffeescript-test-helper/README.md diff --git a/packages/non-core/coffeescript-test-helper/exporting.coffee b/packages/coffeescript-test-helper/exporting.coffee similarity index 100% rename from packages/non-core/coffeescript-test-helper/exporting.coffee rename to packages/coffeescript-test-helper/exporting.coffee diff --git a/packages/non-core/coffeescript-test-helper/package.js b/packages/coffeescript-test-helper/package.js similarity index 100% rename from packages/non-core/coffeescript-test-helper/package.js rename to packages/coffeescript-test-helper/package.js diff --git a/packages/non-core/coffeescript/.gitignore b/packages/coffeescript/.gitignore similarity index 100% rename from packages/non-core/coffeescript/.gitignore rename to packages/coffeescript/.gitignore diff --git a/packages/non-core/coffeescript/README.md b/packages/coffeescript/README.md similarity index 100% rename from packages/non-core/coffeescript/README.md rename to packages/coffeescript/README.md diff --git a/packages/non-core/coffeescript/compile-coffeescript.js b/packages/coffeescript/compile-coffeescript.js similarity index 100% rename from packages/non-core/coffeescript/compile-coffeescript.js rename to packages/coffeescript/compile-coffeescript.js diff --git a/packages/non-core/coffeescript/package.js b/packages/coffeescript/package.js similarity index 100% rename from packages/non-core/coffeescript/package.js rename to packages/coffeescript/package.js diff --git a/packages/non-core/coffeescript/tests/bare_test_setup.coffee b/packages/coffeescript/tests/bare_test_setup.coffee similarity index 100% rename from packages/non-core/coffeescript/tests/bare_test_setup.coffee rename to packages/coffeescript/tests/bare_test_setup.coffee diff --git a/packages/non-core/coffeescript/tests/bare_tests.js b/packages/coffeescript/tests/bare_tests.js similarity index 100% rename from packages/non-core/coffeescript/tests/bare_tests.js rename to packages/coffeescript/tests/bare_tests.js diff --git a/packages/non-core/coffeescript/tests/coffeescript_module.coffee b/packages/coffeescript/tests/coffeescript_module.coffee similarity index 100% rename from packages/non-core/coffeescript/tests/coffeescript_module.coffee rename to packages/coffeescript/tests/coffeescript_module.coffee diff --git a/packages/non-core/coffeescript/tests/coffeescript_strict_tests.coffee b/packages/coffeescript/tests/coffeescript_strict_tests.coffee similarity index 100% rename from packages/non-core/coffeescript/tests/coffeescript_strict_tests.coffee rename to packages/coffeescript/tests/coffeescript_strict_tests.coffee diff --git a/packages/non-core/coffeescript/tests/coffeescript_test_setup.js b/packages/coffeescript/tests/coffeescript_test_setup.js similarity index 100% rename from packages/non-core/coffeescript/tests/coffeescript_test_setup.js rename to packages/coffeescript/tests/coffeescript_test_setup.js diff --git a/packages/non-core/coffeescript/tests/coffeescript_tests.coffee b/packages/coffeescript/tests/coffeescript_tests.coffee similarity index 100% rename from packages/non-core/coffeescript/tests/coffeescript_tests.coffee rename to packages/coffeescript/tests/coffeescript_tests.coffee diff --git a/packages/non-core/coffeescript/tests/coffeescript_tests.js b/packages/coffeescript/tests/coffeescript_tests.js similarity index 100% rename from packages/non-core/coffeescript/tests/coffeescript_tests.js rename to packages/coffeescript/tests/coffeescript_tests.js diff --git a/packages/non-core/coffeescript/tests/es2015_module.js b/packages/coffeescript/tests/es2015_module.js similarity index 100% rename from packages/non-core/coffeescript/tests/es2015_module.js rename to packages/coffeescript/tests/es2015_module.js diff --git a/packages/non-core/coffeescript/tests/litcoffeescript_tests.coffee.md b/packages/coffeescript/tests/litcoffeescript_tests.coffee.md similarity index 100% rename from packages/non-core/coffeescript/tests/litcoffeescript_tests.coffee.md rename to packages/coffeescript/tests/litcoffeescript_tests.coffee.md diff --git a/packages/non-core/coffeescript/tests/litcoffeescript_tests.litcoffee b/packages/coffeescript/tests/litcoffeescript_tests.litcoffee similarity index 100% rename from packages/non-core/coffeescript/tests/litcoffeescript_tests.litcoffee rename to packages/coffeescript/tests/litcoffeescript_tests.litcoffee From d727ad02a71678eaee668aa37efe29ac87d05c84 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 14 Aug 2017 18:33:23 -0400 Subject: [PATCH 66/93] Bump coffeescript package version to 1.13.0. This Meteor package version does not need to track the npm version of the coffeescript package, and probably should not change as often as the version of the packages/non-core/coffeescript-compiler package. --- packages/coffeescript/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/coffeescript/package.js b/packages/coffeescript/package.js index 0634a95762..9189fe8984 100644 --- a/packages/coffeescript/package.js +++ b/packages/coffeescript/package.js @@ -5,7 +5,7 @@ Package.describe({ // module, but now the Meteor package `coffeescript-compiler` tracks that // version; so in order for this to appear newer than the previous package // version 1.12.6_1, we jump to 10+. - version: '10.0.1' + version: '1.13.0' }); Package.registerBuildPlugin({ From 70ab06aa9433f4d70b3455c2607dd811a950d3d9 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 17 Aug 2017 10:02:46 -0400 Subject: [PATCH 67/93] Undo coffeescript-related changes made on release-1.5.2. This will make it easier to merge devel into release-1.5.2, since devel now contains the final verison of these changes, as implemented by @GeoffreyBooth in #9018. Revert "Bump coffeescript package version to 1.13.0." This reverts commit d727ad02a71678eaee668aa37efe29ac87d05c84. Revert "Move coffeescript and coffeescript-test-helper packages back into core. (#8960)" This reverts commit eb3c7dd3443497ee33c04784cf5536c81867ff82. Revert "Split coffeescript package into coffeescript / coffeescript-compiler." This reverts commit 8344cbf59d9fa28bc16bffe6aaf8ced1256b81be. Revert "Instructions for how to test the coffeescript package" This reverts commit 491cbc3bfe98699be1a5ffa12500241cda989af9. --- packages/coffeescript/compile-coffeescript.js | 48 ---- .../non-core/coffeescript-compiler/.gitignore | 1 - .../non-core/coffeescript-compiler/README.md | 17 -- .../coffeescript-compiler.js | 214 --------------- .../non-core/coffeescript-compiler/package.js | 21 -- .../{ => non-core}/coffeescript/.gitignore | 1 - .../plugin/compileCoffeescript}/.gitignore | 0 .../.npm/plugin/compileCoffeescript}/README | 0 .../compileCoffeescript}/npm-shrinkwrap.json | 0 .../{ => non-core}/coffeescript/README.md | 14 +- .../{ => non-core}/coffeescript/package.js | 22 +- .../plugin/compile-coffeescript.js | 252 ++++++++++++++++++ .../coffeescript/tests/bare_test_setup.coffee | 0 .../coffeescript/tests/bare_tests.js | 0 .../tests/coffeescript_module.coffee | 0 .../tests/coffeescript_strict_tests.coffee | 0 .../tests/coffeescript_test_setup.js | 0 .../tests/coffeescript_tests.coffee | 0 .../coffeescript/tests/coffeescript_tests.js | 0 .../coffeescript/tests/es2015_module.js | 0 .../tests/litcoffeescript_tests.coffee.md | 0 .../tests/litcoffeescript_tests.litcoffee | 0 22 files changed, 265 insertions(+), 325 deletions(-) delete mode 100644 packages/coffeescript/compile-coffeescript.js delete mode 100644 packages/non-core/coffeescript-compiler/.gitignore delete mode 100644 packages/non-core/coffeescript-compiler/README.md delete mode 100644 packages/non-core/coffeescript-compiler/coffeescript-compiler.js delete mode 100644 packages/non-core/coffeescript-compiler/package.js rename packages/{ => non-core}/coffeescript/.gitignore (61%) rename packages/non-core/{coffeescript-compiler/.npm/package => coffeescript/.npm/plugin/compileCoffeescript}/.gitignore (100%) rename packages/non-core/{coffeescript-compiler/.npm/package => coffeescript/.npm/plugin/compileCoffeescript}/README (100%) rename packages/non-core/{coffeescript-compiler/.npm/package => coffeescript/.npm/plugin/compileCoffeescript}/npm-shrinkwrap.json (100%) rename packages/{ => non-core}/coffeescript/README.md (88%) rename packages/{ => non-core}/coffeescript/package.js (68%) create mode 100644 packages/non-core/coffeescript/plugin/compile-coffeescript.js rename packages/{ => non-core}/coffeescript/tests/bare_test_setup.coffee (100%) rename packages/{ => non-core}/coffeescript/tests/bare_tests.js (100%) rename packages/{ => non-core}/coffeescript/tests/coffeescript_module.coffee (100%) rename packages/{ => non-core}/coffeescript/tests/coffeescript_strict_tests.coffee (100%) rename packages/{ => non-core}/coffeescript/tests/coffeescript_test_setup.js (100%) rename packages/{ => non-core}/coffeescript/tests/coffeescript_tests.coffee (100%) rename packages/{ => non-core}/coffeescript/tests/coffeescript_tests.js (100%) rename packages/{ => non-core}/coffeescript/tests/es2015_module.js (100%) rename packages/{ => non-core}/coffeescript/tests/litcoffeescript_tests.coffee.md (100%) rename packages/{ => non-core}/coffeescript/tests/litcoffeescript_tests.litcoffee (100%) diff --git a/packages/coffeescript/compile-coffeescript.js b/packages/coffeescript/compile-coffeescript.js deleted file mode 100644 index c8c940b770..0000000000 --- a/packages/coffeescript/compile-coffeescript.js +++ /dev/null @@ -1,48 +0,0 @@ -Plugin.registerCompiler({ - extensions: ['coffee', 'litcoffee', 'coffee.md'] -}, () => new CachedCoffeeScriptCompiler()); - - -// The CompileResult for this CachingCompiler is a {source, sourceMap} object. -class CachedCoffeeScriptCompiler extends CachingCompiler { - constructor() { - super({ - compilerName: 'coffeescript', - defaultCacheSize: 1024*1024*10, - }); - - this.coffeeScriptCompiler = new CoffeeScriptCompiler(); - } - - getCacheKey(inputFile) { - return [ - inputFile.getSourceHash(), - inputFile.getDeclaredExports(), - this.coffeeScriptCompiler.getCompileOptions(inputFile), - ]; - } - - setDiskCacheDirectory(cacheDir) { - this.coffeeScriptCompiler.babelCompiler.setDiskCacheDirectory(cacheDir); - return super.setDiskCacheDirectory(cacheDir); - } - - compileOneFile(inputFile) { - return this.coffeeScriptCompiler.compileOneFile(inputFile); - } - - addCompileResult(inputFile, sourceWithMap) { - inputFile.addJavaScript({ - path: this.coffeeScriptCompiler.outputFilePath(inputFile), - sourcePath: inputFile.getPathInPackage(), - data: sourceWithMap.source, - sourceMap: sourceWithMap.sourceMap, - bare: inputFile.getFileOptions().bare - }); - } - - compileResultSize(sourceWithMap) { - return sourceWithMap.source.length + - this.sourceMapSize(sourceWithMap.sourceMap); - } -} diff --git a/packages/non-core/coffeescript-compiler/.gitignore b/packages/non-core/coffeescript-compiler/.gitignore deleted file mode 100644 index 918ef5d781..0000000000 --- a/packages/non-core/coffeescript-compiler/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.npm diff --git a/packages/non-core/coffeescript-compiler/README.md b/packages/non-core/coffeescript-compiler/README.md deleted file mode 100644 index 2a394f6f5b..0000000000 --- a/packages/non-core/coffeescript-compiler/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# coffeescript-compiler -[Source code of released version](https://github.com/meteor/meteor/tree/master/packages/coffeescript-compiler) | [Source code of development version](https://github.com/meteor/meteor/tree/devel/packages/coffeescript-compiler) -*** - -This package supports the [`coffeescript`](../coffeescript/README.md) package, -and any other packages that wish to compile CoffeeScript code into JavaScript. -Like the [`babel-compiler`](../babel-compiler/README.md) package, the actual -compilation is separated out from the build plugin so that packages besides -the official `coffeescript` package can compile CoffeeScript code. - -### Testing This Package - -Testing the `coffeescript` package also tests this one: - -```bash -./meteor test-packages coffeescript -``` diff --git a/packages/non-core/coffeescript-compiler/coffeescript-compiler.js b/packages/non-core/coffeescript-compiler/coffeescript-compiler.js deleted file mode 100644 index ed228594cc..0000000000 --- a/packages/non-core/coffeescript-compiler/coffeescript-compiler.js +++ /dev/null @@ -1,214 +0,0 @@ -import { BabelCompiler } from 'meteor/babel-compiler'; -import CoffeeScript from 'coffeescript'; -import { SourceMapConsumer, SourceMapGenerator } from 'source-map'; - - -// The CoffeeScript compiler overrides Error.prepareStackTrace, mostly for the -// use of coffee.run which we don't use. This conflicts with the tool's use of -// Error.prepareStackTrace to properly show error messages in linked code. -// Restore the tool's one after CoffeeScript clobbers it at import time. -if (Error.METEOR_prepareStackTrace) { - Error.prepareStackTrace = Error.METEOR_prepareStackTrace; -} - - -// The CompileResult for this CachingCompiler is a {source, sourceMap} object. -CoffeeScriptCompiler = class CoffeeScriptCompiler { - constructor() { - this.babelCompiler = new BabelCompiler({ - // Prevent Babel from importing helpers from babel-runtime, since - // the CoffeeScript plugin does not imply the modules package, which - // means require may not be defined. Note that this in no way - // prevents CoffeeScript projects from using the modules package and - // putting require or import statements within backticks; it just - // won't happen automatically because of Babel. - runtime: false - }); - } - - getCompileOptions(inputFile) { - return { - bare: true, - filename: inputFile.getPathInPackage(), - literate: inputFile.getExtension() !== 'coffee', - // Return a source map. - sourceMap: true, - // This becomes the `file` field of the source map. - generatedFile: '/' + this.outputFilePath(inputFile), - // This becomes the `sources` field of the source map. - sourceFiles: [inputFile.getDisplayPath()], - }; - } - - outputFilePath(inputFile) { - return inputFile.getPathInPackage() + '.js'; - } - - compileOneFile(inputFile) { - const source = inputFile.getContentsAsString(); - const compileOptions = this.getCompileOptions(inputFile); - - let output; - try { - output = CoffeeScript.compile(source, compileOptions); - } catch (e) { - inputFile.error({ - message: e.message, - line: e.location && (e.location.first_line + 1), - column: e.location && (e.location.first_column + 1) - }); - return null; - } - - let sourceMap = JSON.parse(output.v3SourceMap); - sourceMap.sourcesContent = [source]; - - output.js = this.stripExportedVars( - output.js, - inputFile.getDeclaredExports().map(e => e.name) - ); - - // CoffeeScript contains a handful of features that output as ES2015+, - // such as modules, generator functions, for…of, and tagged template - // literals. Because they’re too varied to detect, pass all CoffeeScript - // compiler output through the Babel compiler. - const doubleRoastedCoffee = - this.babelCompiler.processOneFileForTarget(inputFile, output.js); - - if (doubleRoastedCoffee != null && - doubleRoastedCoffee.data != null) { - output.js = doubleRoastedCoffee.data; - - const coffeeSourceMap = doubleRoastedCoffee.sourceMap; - - if (coffeeSourceMap) { - // Reference the compiled CoffeeScript file so that `applySourceMap` - // below can match it with the source map produced by the CoffeeScript - // compiler. - coffeeSourceMap.sources[0] = '/' + this.outputFilePath(inputFile); - - // Combine the original CoffeeScript source map with the one - // produced by this.babelCompiler.processOneFileForTarget. - const smg = SourceMapGenerator.fromSourceMap( - new SourceMapConsumer(coffeeSourceMap) - ); - smg.applySourceMap(new SourceMapConsumer(sourceMap)); - sourceMap = smg.toJSON(); - } else { - // If the .coffee file is contained by a node_modules directory, - // then BabelCompiler will not transpile it, and there will be - // no sourceMap, but that's fine because the original - // CoffeeScript sourceMap will still be valid. - } - } - - return this.addSharedHeader(output.js, sourceMap); - } - - stripExportedVars(source, exports) { - if (!exports || !exports.length) - return source; - const lines = source.split("\n"); - - // We make the following assumptions, based on the output of CoffeeScript - // 1.7.1. - // - The var declaration in question is not indented and is the first such - // var declaration. (CoffeeScript only produces one var line at each - // scope and there's only one top-level scope.) All relevant variables - // are actually on this line. - // - The user hasn't used a ###-comment containing a line that looks like - // a var line, to produce something like - // /* bla - // var foo; - // */ - // before an actual var line. (ie, we do NOT attempt to figure out if - // we're inside a /**/ comment, which is produced by ### comments.) - // - The var in question is not assigned to in the declaration, nor are any - // other vars on this line. (CoffeeScript does produce some assignments - // but only for internal helpers generated by CoffeeScript, and they end - // up on subsequent lines.) - // XXX relax these assumptions by doing actual JS parsing (eg with jsparse). - // I'd do this now, but there's no easy way to "unparse" a jsparse AST. - // Or alternatively, hack the compiler to allow us to specify unbound - // symbols directly. - - for (let i = 0; i < lines.length; i++) { - const line = lines[i]; - const match = /^var (.+)([,;])$/.exec(line); - if (!match) - continue; - - // If there's an assignment on this line, we assume that there are ONLY - // assignments and that the var we are looking for is not declared. (Part - // of our strong assumption about the layout of this code.) - if (match[1].indexOf('=') !== -1) - continue; - - // We want to replace the line with something no shorter, so that all - // records in the source map continue to point at valid - // characters. - function replaceLine(x) { - if (x.length >= lines[i].length) { - lines[i] = x; - } else { - lines[i] = x + new Array(1 + (lines[i].length - x.length)).join(' '); - } - } - - let vars = match[1].split(', ').filter(v => exports.indexOf(v) === -1); - if (vars.length) { - replaceLine('var ' + vars.join(', ') + match[2]); - } else { - // We got rid of all the vars on this line. Drop the whole line if this - // didn't continue to the next line, otherwise keep just the 'var '. - if (match[2] === ';') - replaceLine(''); - else - replaceLine('var'); - } - break; - } - - return lines.join('\n'); - } - - addSharedHeader(source, sourceMap) { - // We want the symbol "share" to be visible to all CoffeeScript files in the - // package (and shared between them), but not visible to JavaScript - // files. (That's because we don't want to introduce two competing ways to - // make package-local variables into JS ("share" vs assigning to non-var - // variables).) The following hack accomplishes that: "__coffeescriptShare" - // will be visible at the package level and "share" at the file level. This - // should work both in "package" mode where __coffeescriptShare will be added - // as a var in the package closure, and in "app" mode where it will end up as - // a global. - // - // This ends in a newline to make the source map easier to adjust. - const header = ("__coffeescriptShare = typeof __coffeescriptShare === 'object' " + - "? __coffeescriptShare : {}; " + - "var share = __coffeescriptShare;\n"); - - // If the file begins with "use strict", we need to keep that as the first - // statement. - const processedSource = source.replace(/^(?:((['"])use strict\2;)\n)?/, (match, useStrict) => { - if (match) { - // There's a "use strict"; we keep this as the first statement and insert - // our header at the end of the line that it's on. This doesn't change - // line numbers or the part of the line that previous may have been - // annotated, so we don't need to update the source map. - return useStrict + ' ' + header; - } else { - // There's no use strict, so we can just add the header at the very - // beginning. This adds a line to the file, so we update the source map to - // add a single un-annotated line to the beginning. - sourceMap.mappings = ';' + sourceMap.mappings; - return header; - } - }); - return { - source: processedSource, - sourceMap: sourceMap - }; - } - -} diff --git a/packages/non-core/coffeescript-compiler/package.js b/packages/non-core/coffeescript-compiler/package.js deleted file mode 100644 index fc394b7751..0000000000 --- a/packages/non-core/coffeescript-compiler/package.js +++ /dev/null @@ -1,21 +0,0 @@ -Package.describe({ - name: 'coffeescript-compiler', - summary: 'Compiler for CoffeeScript code, supporting the coffeescript package', - version: '1.12.7_1' // Tracks version of NPM `coffeescript` module, with _1, _2 etc. -}); - -Npm.depends({ - 'coffeescript': '1.12.7', - 'source-map': '0.5.6' -}); - -Package.onUse(function (api) { - api.use('babel-compiler'); - api.use('ecmascript'); - - api.addFiles(['coffeescript-compiler.js'], 'server'); - - api.export('CoffeeScriptCompiler', 'server'); -}); - -// See `coffeescript` package for tests. diff --git a/packages/coffeescript/.gitignore b/packages/non-core/coffeescript/.gitignore similarity index 61% rename from packages/coffeescript/.gitignore rename to packages/non-core/coffeescript/.gitignore index c01644335c..677a6fc263 100644 --- a/packages/coffeescript/.gitignore +++ b/packages/non-core/coffeescript/.gitignore @@ -1,2 +1 @@ .build* -.npm diff --git a/packages/non-core/coffeescript-compiler/.npm/package/.gitignore b/packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/.gitignore similarity index 100% rename from packages/non-core/coffeescript-compiler/.npm/package/.gitignore rename to packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/.gitignore diff --git a/packages/non-core/coffeescript-compiler/.npm/package/README b/packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/README similarity index 100% rename from packages/non-core/coffeescript-compiler/.npm/package/README rename to packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/README diff --git a/packages/non-core/coffeescript-compiler/.npm/package/npm-shrinkwrap.json b/packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/npm-shrinkwrap.json similarity index 100% rename from packages/non-core/coffeescript-compiler/.npm/package/npm-shrinkwrap.json rename to packages/non-core/coffeescript/.npm/plugin/compileCoffeescript/npm-shrinkwrap.json diff --git a/packages/coffeescript/README.md b/packages/non-core/coffeescript/README.md similarity index 88% rename from packages/coffeescript/README.md rename to packages/non-core/coffeescript/README.md index b23b98c88d..711ff02abd 100644 --- a/packages/coffeescript/README.md +++ b/packages/non-core/coffeescript/README.md @@ -44,16 +44,10 @@ Here's how CoffeeScript works with Meteor's namespacing. for a value that is shared between all CoffeeScript code in a package, but doesn't escape that package. +Heavy CoffeeScript users, please let us know how this arrangement +works for you, whether `share` is helpful for you, and anything else +you'd like to see changed. + ### Modules and CoffeeScript See [Modules » CoffeeScript Syntax](http://docs.meteor.com/packages/modules.html#CoffeeScript). - -### Testing This Package - -Follow the [instructions](https://github.com/meteor/meteor/blob/devel/Development.md#tests) -to check out the Meteor repo and run `test-packages`. -Once you can do that successfully, to test the `coffeescript` package run: - -```bash -./meteor test-packages coffeescript -``` diff --git a/packages/coffeescript/package.js b/packages/non-core/coffeescript/package.js similarity index 68% rename from packages/coffeescript/package.js rename to packages/non-core/coffeescript/package.js index 9189fe8984..298d1c8a51 100644 --- a/packages/coffeescript/package.js +++ b/packages/non-core/coffeescript/package.js @@ -1,25 +1,21 @@ Package.describe({ - name: 'coffeescript', - summary: 'Javascript dialect with fewer braces and semicolons', - // This package version used to track the version of the NPM `coffeescript` - // module, but now the Meteor package `coffeescript-compiler` tracks that - // version; so in order for this to appear newer than the previous package - // version 1.12.6_1, we jump to 10+. - version: '1.13.0' + summary: "Javascript dialect with fewer braces and semicolons", + version: "1.12.7_1" }); Package.registerBuildPlugin({ - name: 'compile-coffeescript', - use: ['caching-compiler', 'coffeescript-compiler', 'ecmascript'], - sources: ['compile-coffeescript.js'], + name: "compileCoffeescript", + use: ['caching-compiler', 'ecmascript'], + sources: ['plugin/compile-coffeescript.js'], npmDependencies: { - 'coffeescript': '1.12.7', - 'source-map': '0.5.6' + "coffeescript": "1.12.7", + "source-map": "0.5.6" } }); Package.onUse(function (api) { api.use('isobuild:compiler-plugin@1.0.0'); + api.use('babel-compiler'); // Because the CoffeeScript plugin now calls // BabelCompiler.prototype.processOneFileForTarget for any ES2015+ @@ -27,7 +23,7 @@ Package.onUse(function (api) { // same runtime environment that the 'ecmascript' package provides. // The following api.imply calls should match those in ../ecmascript/package.js, // except that coffeescript does not api.imply('modules'). - api.imply('ecmascript-runtime', 'server'); + api.imply('ecmascript-runtime'); api.imply('babel-runtime'); api.imply('promise'); }); diff --git a/packages/non-core/coffeescript/plugin/compile-coffeescript.js b/packages/non-core/coffeescript/plugin/compile-coffeescript.js new file mode 100644 index 0000000000..03abcbe842 --- /dev/null +++ b/packages/non-core/coffeescript/plugin/compile-coffeescript.js @@ -0,0 +1,252 @@ +import { + SourceMapConsumer, + SourceMapGenerator, +} from 'source-map'; +import coffee from 'coffeescript'; +import { BabelCompiler } from 'meteor/babel-compiler'; + +// The CoffeeScript compiler overrides Error.prepareStackTrace, mostly for the +// use of coffee.run which we don't use. This conflicts with the tool's use of +// Error.prepareStackTrace to properly show error messages in linked code. +// Restore the tool's one after CoffeeScript clobbers it at import time. +if (Error.METEOR_prepareStackTrace) { + Error.prepareStackTrace = Error.METEOR_prepareStackTrace; +} + +Plugin.registerCompiler({ + extensions: ['coffee', 'litcoffee', 'coffee.md'] +}, () => new CoffeeCompiler()); + +// The CompileResult for this CachingCompiler is a {source, sourceMap} object. + +export class CoffeeCompiler extends CachingCompiler { + constructor() { + super({ + compilerName: 'coffeescript', + defaultCacheSize: 1024*1024*10, + }); + + this.babelCompiler = new BabelCompiler({ + // Prevent Babel from importing helpers from babel-runtime, since + // the CoffeeScript plugin does not imply the modules package, which + // means require may not be defined. Note that this in no way + // prevents CoffeeScript projects from using the modules package and + // putting require or import statements within backticks; it just + // won't happen automatically because of Babel. + runtime: false + }); + } + + _getCompileOptions(inputFile) { + return { + bare: true, + filename: inputFile.getPathInPackage(), + literate: inputFile.getExtension() !== 'coffee', + // Return a source map. + sourceMap: true, + // This becomes the "file" field of the source map. + generatedFile: '/' + this._outputFilePath(inputFile), + // This becomes the "sources" field of the source map. + sourceFiles: [inputFile.getDisplayPath()], + }; + } + + _outputFilePath(inputFile) { + return inputFile.getPathInPackage() + '.js'; + } + + getCacheKey(inputFile) { + return [ + inputFile.getSourceHash(), + inputFile.getDeclaredExports(), + this._getCompileOptions(inputFile), + ]; + } + + setDiskCacheDirectory(cacheDir) { + this.babelCompiler.setDiskCacheDirectory(cacheDir); + return super.setDiskCacheDirectory(cacheDir); + } + + compileOneFile(inputFile) { + const source = inputFile.getContentsAsString(); + const compileOptions = this._getCompileOptions(inputFile); + + let output; + try { + output = coffee.compile(source, compileOptions); + } catch (e) { + inputFile.error({ + message: e.message, + line: e.location && (e.location.first_line + 1), + column: e.location && (e.location.first_column + 1) + }); + return null; + } + + let sourceMap = JSON.parse(output.v3SourceMap); + sourceMap.sourcesContent = [source]; + + output.js = stripExportedVars( + output.js, + inputFile.getDeclaredExports().map(e => e.name) + ); + + // CoffeeScript contains a handful of features that output as ES2015+, + // such as modules, generator functions, for…of, and tagged template + // literals. Because they’re too varied to detect, pass all CoffeeScript + // compiler output through the Babel compiler. + const doubleRoastedCoffee = + this.babelCompiler.processOneFileForTarget(inputFile, output.js); + + if (doubleRoastedCoffee != null && + doubleRoastedCoffee.data != null) { + output.js = doubleRoastedCoffee.data; + + const coffeeSourceMap = doubleRoastedCoffee.sourceMap; + + if (coffeeSourceMap) { + // Reference the compiled CoffeeScript file so that `applySourceMap` + // below can match it with the source map produced by the CoffeeScript + // compiler. + coffeeSourceMap.sources[0] = '/' + this._outputFilePath(inputFile); + + // Combine the original CoffeeScript source map with the one + // produced by this.babelCompiler.processOneFileForTarget. + const smg = SourceMapGenerator.fromSourceMap( + new SourceMapConsumer(coffeeSourceMap) + ); + smg.applySourceMap(new SourceMapConsumer(sourceMap)); + sourceMap = smg.toJSON(); + } else { + // If the .coffee file is contained by a node_modules directory, + // then BabelCompiler will not transpile it, and there will be + // no sourceMap, but that's fine because the original + // CoffeeScript sourceMap will still be valid. + } + } + + return addSharedHeader(output.js, sourceMap); + } + + addCompileResult(inputFile, sourceWithMap) { + inputFile.addJavaScript({ + path: this._outputFilePath(inputFile), + sourcePath: inputFile.getPathInPackage(), + data: sourceWithMap.source, + sourceMap: sourceWithMap.sourceMap, + bare: inputFile.getFileOptions().bare + }); + } + + compileResultSize(sourceWithMap) { + return sourceWithMap.source.length + + this.sourceMapSize(sourceWithMap.sourceMap); + } +} + +function stripExportedVars(source, exports) { + if (!exports || !exports.length) + return source; + const lines = source.split("\n"); + + // We make the following assumptions, based on the output of CoffeeScript + // 1.7.1. + // - The var declaration in question is not indented and is the first such + // var declaration. (CoffeeScript only produces one var line at each + // scope and there's only one top-level scope.) All relevant variables + // are actually on this line. + // - The user hasn't used a ###-comment containing a line that looks like + // a var line, to produce something like + // /* bla + // var foo; + // */ + // before an actual var line. (ie, we do NOT attempt to figure out if + // we're inside a /**/ comment, which is produced by ### comments.) + // - The var in question is not assigned to in the declaration, nor are any + // other vars on this line. (CoffeeScript does produce some assignments + // but only for internal helpers generated by CoffeeScript, and they end + // up on subsequent lines.) + // XXX relax these assumptions by doing actual JS parsing (eg with jsparse). + // I'd do this now, but there's no easy way to "unparse" a jsparse AST. + // Or alternatively, hack the compiler to allow us to specify unbound + // symbols directly. + + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + const match = /^var (.+)([,;])$/.exec(line); + if (!match) + continue; + + // If there's an assignment on this line, we assume that there are ONLY + // assignments and that the var we are looking for is not declared. (Part + // of our strong assumption about the layout of this code.) + if (match[1].indexOf('=') !== -1) + continue; + + // We want to replace the line with something no shorter, so that all + // records in the source map continue to point at valid + // characters. + function replaceLine(x) { + if (x.length >= lines[i].length) { + lines[i] = x; + } else { + lines[i] = x + new Array(1 + (lines[i].length - x.length)).join(' '); + } + } + + let vars = match[1].split(', ').filter(v => exports.indexOf(v) === -1); + if (vars.length) { + replaceLine('var ' + vars.join(', ') + match[2]); + } else { + // We got rid of all the vars on this line. Drop the whole line if this + // didn't continue to the next line, otherwise keep just the 'var '. + if (match[2] === ';') + replaceLine(''); + else + replaceLine('var'); + } + break; + } + + return lines.join('\n'); +} + +function addSharedHeader(source, sourceMap) { + // We want the symbol "share" to be visible to all CoffeeScript files in the + // package (and shared between them), but not visible to JavaScript + // files. (That's because we don't want to introduce two competing ways to + // make package-local variables into JS ("share" vs assigning to non-var + // variables).) The following hack accomplishes that: "__coffeescriptShare" + // will be visible at the package level and "share" at the file level. This + // should work both in "package" mode where __coffeescriptShare will be added + // as a var in the package closure, and in "app" mode where it will end up as + // a global. + // + // This ends in a newline to make the source map easier to adjust. + const header = ("__coffeescriptShare = typeof __coffeescriptShare === 'object' " + + "? __coffeescriptShare : {}; " + + "var share = __coffeescriptShare;\n"); + + // If the file begins with "use strict", we need to keep that as the first + // statement. + const processedSource = source.replace(/^(?:((['"])use strict\2;)\n)?/, (match, useStrict) => { + if (match) { + // There's a "use strict"; we keep this as the first statement and insert + // our header at the end of the line that it's on. This doesn't change + // line numbers or the part of the line that previous may have been + // annotated, so we don't need to update the source map. + return useStrict + ' ' + header; + } else { + // There's no use strict, so we can just add the header at the very + // beginning. This adds a line to the file, so we update the source map to + // add a single un-annotated line to the beginning. + sourceMap.mappings = ';' + sourceMap.mappings; + return header; + } + }); + return { + source: processedSource, + sourceMap: sourceMap + }; +} diff --git a/packages/coffeescript/tests/bare_test_setup.coffee b/packages/non-core/coffeescript/tests/bare_test_setup.coffee similarity index 100% rename from packages/coffeescript/tests/bare_test_setup.coffee rename to packages/non-core/coffeescript/tests/bare_test_setup.coffee diff --git a/packages/coffeescript/tests/bare_tests.js b/packages/non-core/coffeescript/tests/bare_tests.js similarity index 100% rename from packages/coffeescript/tests/bare_tests.js rename to packages/non-core/coffeescript/tests/bare_tests.js diff --git a/packages/coffeescript/tests/coffeescript_module.coffee b/packages/non-core/coffeescript/tests/coffeescript_module.coffee similarity index 100% rename from packages/coffeescript/tests/coffeescript_module.coffee rename to packages/non-core/coffeescript/tests/coffeescript_module.coffee diff --git a/packages/coffeescript/tests/coffeescript_strict_tests.coffee b/packages/non-core/coffeescript/tests/coffeescript_strict_tests.coffee similarity index 100% rename from packages/coffeescript/tests/coffeescript_strict_tests.coffee rename to packages/non-core/coffeescript/tests/coffeescript_strict_tests.coffee diff --git a/packages/coffeescript/tests/coffeescript_test_setup.js b/packages/non-core/coffeescript/tests/coffeescript_test_setup.js similarity index 100% rename from packages/coffeescript/tests/coffeescript_test_setup.js rename to packages/non-core/coffeescript/tests/coffeescript_test_setup.js diff --git a/packages/coffeescript/tests/coffeescript_tests.coffee b/packages/non-core/coffeescript/tests/coffeescript_tests.coffee similarity index 100% rename from packages/coffeescript/tests/coffeescript_tests.coffee rename to packages/non-core/coffeescript/tests/coffeescript_tests.coffee diff --git a/packages/coffeescript/tests/coffeescript_tests.js b/packages/non-core/coffeescript/tests/coffeescript_tests.js similarity index 100% rename from packages/coffeescript/tests/coffeescript_tests.js rename to packages/non-core/coffeescript/tests/coffeescript_tests.js diff --git a/packages/coffeescript/tests/es2015_module.js b/packages/non-core/coffeescript/tests/es2015_module.js similarity index 100% rename from packages/coffeescript/tests/es2015_module.js rename to packages/non-core/coffeescript/tests/es2015_module.js diff --git a/packages/coffeescript/tests/litcoffeescript_tests.coffee.md b/packages/non-core/coffeescript/tests/litcoffeescript_tests.coffee.md similarity index 100% rename from packages/coffeescript/tests/litcoffeescript_tests.coffee.md rename to packages/non-core/coffeescript/tests/litcoffeescript_tests.coffee.md diff --git a/packages/coffeescript/tests/litcoffeescript_tests.litcoffee b/packages/non-core/coffeescript/tests/litcoffeescript_tests.litcoffee similarity index 100% rename from packages/coffeescript/tests/litcoffeescript_tests.litcoffee rename to packages/non-core/coffeescript/tests/litcoffeescript_tests.litcoffee From 27d3584b79a7ed2b8271b18aee226864ad82cde2 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 17 Aug 2017 10:11:04 -0400 Subject: [PATCH 68/93] Bump package versions for 1.5.2-beta.11 release. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/ddp-client/package.js | 2 +- packages/ejson/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo-dev-server/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index d729045898..b2c98f89ed 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2-beta152.10" + version: "1.3.2-beta152.11" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 8c98c263ae..791093df8d 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.10' + version: '6.20.0-beta152.11' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index 77965af310..a5abab904b 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.10', + version: '1.0.0-beta152.11', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 25426a1a51..2153f9910d 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.10' + version: '1.2.0-beta152.11' }); Package.onUse(api => { diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index f000900705..ed09a716f7 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.1.0-beta152.10', + version: '2.1.0-beta152.11', documentation: null }); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index 63149e9d97..ef7c0704fe 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Extended and Extensible JSON library', - version: '1.0.14-beta152.10' + version: '1.0.14-beta152.11' }); Package.onUse(function onUse(api) { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 1073314d0d..862e79d72c 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.10" + version: "1.5.2-beta.11" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 42401394f2..97014ae4e9 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.10' + version: '1.3.0-beta152.11' }); Package.onUse(api => { diff --git a/packages/modules/package.js b/packages/modules/package.js index d994253027..1b4357a32a 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.10", + version: "0.10.0-beta152.11", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo-dev-server/package.js b/packages/mongo-dev-server/package.js index 41b87513b9..0968fc5ddd 100644 --- a/packages/mongo-dev-server/package.js +++ b/packages/mongo-dev-server/package.js @@ -3,7 +3,7 @@ Package.describe({ documentation: 'README.md', name: 'mongo-dev-server', summary: 'Start MongoDB alongside Meteor, in development mode.', - version: '1.0.1-beta152.10', + version: '1.0.1-beta152.11', }); Package.onUse(function (api) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 5b0b1657e1..d608e8bb15 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.10' + version: '1.2.0-beta152.11' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 04f4f11d9f..007d95c79b 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.10", + version: "0.9.0-beta152.11", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 3944610a39..eb531f73c7 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-beta152.10' + version: '1.3.18-beta152.11' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 14d0812763..6c670fb3d9 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.10", + "version": "1.5.2-beta.11", "recommended": false, "official": false, "description": "Meteor" From 87181a68e853f142fc6f04d321d6cfa7a8140543 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 21 Aug 2017 15:58:43 -0400 Subject: [PATCH 69/93] Upgrade uglify-js to version 3.0.28. --- History.md | 2 ++ .../.npm/package/npm-shrinkwrap.json | 21 +++++++------------ packages/minifier-js/package.js | 4 ++-- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/History.md b/History.md index ae2b181898..7395b552a8 100644 --- a/History.md +++ b/History.md @@ -29,6 +29,8 @@ thanks to [@sdarnell](https://github.com/sdarnell). [meteor-feature-requests#160](https://github.com/meteor/meteor-feature-requests/issues/160) +* The `uglify-js` npm package has been upgraded to version 3.0.28. + * The `star.json` manifest created within the root of a `meteor build` bundle will now contain `nodeVersion` and `npmVersion` which will specify the exact versions of Node.js and npm (respectively) which the Meteor release was diff --git a/packages/minifier-js/.npm/package/npm-shrinkwrap.json b/packages/minifier-js/.npm/package/npm-shrinkwrap.json index b92b6f3593..96cb028903 100644 --- a/packages/minifier-js/.npm/package/npm-shrinkwrap.json +++ b/packages/minifier-js/.npm/package/npm-shrinkwrap.json @@ -1,24 +1,19 @@ { "dependencies": { "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "from": "commander@>=2.9.0 <2.10.0" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "from": "graceful-readlink@>=1.0.0" + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "from": "commander@>=2.11.0 <2.12.0" }, "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "from": "source-map@>=0.5.1 <0.6.0" }, "uglify-js": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.18.tgz", - "from": "uglify-js@3.0.18" + "version": "3.0.28", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.28.tgz", + "from": "uglify-js@3.0.28" } } } diff --git a/packages/minifier-js/package.js b/packages/minifier-js/package.js index 423cdde4e2..8383c30401 100644 --- a/packages/minifier-js/package.js +++ b/packages/minifier-js/package.js @@ -1,10 +1,10 @@ Package.describe({ summary: "JavaScript minifier", - version: "2.1.1" + version: "2.1.2" }); Npm.depends({ - "uglify-js": "3.0.18" + "uglify-js": "3.0.28" }); Package.onUse(function (api) { From b498c414017494e507734828cca65ab0ae0a3843 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Mon, 21 Aug 2017 16:25:15 -0400 Subject: [PATCH 70/93] Avoid creating a watcher when --settings is set to a directory (#9030) As outlined in #3854, if `meteor --settings` points to a directory instead of a file, an application gets caught up in an infinite rebuild loop. Since it was assumed only a file would be configured via `--settings`, a file watcher is created for the specified directory, and that watcher is then triggered ad infinitum. These changes prevent a file watcher from being created on a `--settings` directory. --- tools/fs/watch.js | 13 ++++--------- tools/tests/run.js | 13 +++++++++++-- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/tools/fs/watch.js b/tools/fs/watch.js index 0a930c545e..e4f61dbcce 100644 --- a/tools/fs/watch.js +++ b/tools/fs/watch.js @@ -562,14 +562,6 @@ export class Watcher { }); } - // XXX Erk! This is wrong! A null entry in a WatchSet means "is not a file", - // not "does not exist"; if you look at readAndWatchFileWithHash, "a directory - // where a file was expected" leads to the entry being null. Right now this - // leads to infinite watcher refresh loops if something that needs to be a - // directory ends up as a file. This all needs to be changed so that null - // means "not a file" again. A simple way to reproduce is to run - // $ meteor --settings /tmp - // See #3854. _mustNotExist(absPath) { var wsFiles = this.watchSet.files; if (_.has(wsFiles, absPath)) { @@ -726,10 +718,13 @@ export function readAndWatchFileWithHash(watchSet, absPath) { var contents = readFile(absPath); var hash = null; + var stat = files.statOrNull(absPath); + var isDirectory = stat && stat.isDirectory(); + // Allow null watchSet, if we want to use readFile-style error handling in a // context where we might not always have a WatchSet (eg, reading // settings.json where we watch for "meteor run" but not for "meteor deploy"). - if (watchSet) { + if (! isDirectory && watchSet) { hash = contents === null ? null : sha1(contents); watchSet.addFile(absPath, hash); } diff --git a/tools/tests/run.js b/tools/tests/run.js index 5a3386ebd0..06e2a35620 100644 --- a/tools/tests/run.js +++ b/tools/tests/run.js @@ -6,6 +6,7 @@ var Future = require('fibers/future'); var _ = require('underscore'); var files = require('../fs/files.js'); var catalog = require('../packaging/catalog/catalog.js'); +var os = require('os'); var DEFAULT_RELEASE_TRACK = catalog.DEFAULT_TRACK; @@ -81,7 +82,7 @@ selftest.define("run", function () { run.match("restarted"); // Crash just once, then restart successfully - s.write("crash.js", ` + s.write("crash_then_restart.js", ` var fs = Npm.require('fs'); var path = Npm.require('path'); var crashmark = path.join(process.env.METEOR_TEST_TMP, 'crashed'); @@ -96,7 +97,7 @@ try { run.waitSecs(5); run.match("restarted"); run.stop(); - s.unlink("crash.js"); + s.unlink("crash_then_restart.js"); run = s.run('--settings', 's.json'); run.waitSecs(5); @@ -110,6 +111,14 @@ try { run.match('App running at'); run.stop(); + // Make sure a directory passed to --settings does not cause an infinite + // re-build loop (issue #3854). + run = s.run('--settings', os.tmpdir()); + run.match(`${os.tmpdir()}: file not found (settings file)`); + run.match('Waiting for file change'); + run.forbid('Modified -- restarting'); + run.stop(); + // How about a bundle failure right at startup s.write("junk.css", "/*"); run = s.run(); From 00ff85135268ced3d0f3bcc58939f21b52e59ed2 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Aug 2017 13:38:17 -0400 Subject: [PATCH 71/93] Avoid calling files.statOrNull(absPath) in readAndWatchFileWithHash. This is performance-sensitive code, and I think this extra (uncached) call to files.statOrNull could be contributing to test timeouts on Circle CI. Follow-up to #9030. --- tools/fs/watch.js | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/tools/fs/watch.js b/tools/fs/watch.js index e4f61dbcce..ab0d2dc143 100644 --- a/tools/fs/watch.js +++ b/tools/fs/watch.js @@ -715,21 +715,39 @@ export function readAndWatchDirectory(watchSet, options) { // *rely* on the hash being returned; merely that if the hash is // present, it is the correct hash of the contents. export function readAndWatchFileWithHash(watchSet, absPath) { - var contents = readFile(absPath); - var hash = null; + const result = { + contents: null, + hash: null, + }; - var stat = files.statOrNull(absPath); - var isDirectory = stat && stat.isDirectory(); + try { + result.contents = files.readFile(absPath); + } catch (e) { + if (e && e.code === "EISDIR") { + // Avoid adding directories to the watchSet as files. + return result; + } + + if (e && e.code === "ENOENT") { + // Continue, leaving result.{contents,hash} both null. + } else { + // Throw all other errors. + throw e; + } + } + + if (result.contents !== null) { + result.hash = sha1(result.contents); + } // Allow null watchSet, if we want to use readFile-style error handling in a // context where we might not always have a WatchSet (eg, reading // settings.json where we watch for "meteor run" but not for "meteor deploy"). - if (! isDirectory && watchSet) { - hash = contents === null ? null : sha1(contents); - watchSet.addFile(absPath, hash); + if (watchSet) { + watchSet.addFile(absPath, result.hash); } - return { contents, hash }; + return result; } export function readAndWatchFile(watchSet, absPath) { From 12987a09267a38e9c9a8cc798589c6d92472aebc Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Aug 2017 15:05:48 -0400 Subject: [PATCH 72/93] Double test timeouts to cope with recent Circle CI flakiness. --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0f0756977e..a0d1a8dc19 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -67,7 +67,7 @@ build_machine_environment: &build_machine_environment machine: true environment: # This multiplier scales the waitSecs for selftests. - TIMEOUT_SCALE_FACTOR: 4 + TIMEOUT_SCALE_FACTOR: 8 # These, mostly overlapping, flags ensure that CircleCI is as pretty as # possible for a non-interactive environment. See also: --headless. From 7654d93b1adb8e6298590ecca1460f0f6c513464 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Aug 2017 16:39:56 -0400 Subject: [PATCH 73/93] Run printenv before every self-test group, to verify env vars. --- .circleci/config.yml | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a0d1a8dc19..215c7d0461 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -164,6 +164,9 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: + name: "Print environment" + command: printenv - run: name: "Running warehouse self-tests" command: | @@ -197,6 +200,9 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: + name: "Print environment" + command: printenv - run: name: "Running self-test (1): A-Com" command: | @@ -231,6 +237,9 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: + name: "Print environment" + command: printenv - run: name "Running self-test (2): Con-K" command: | @@ -265,6 +274,9 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: + name: "Print environment" + command: printenv - run: name: "Running self-test (3): L-O" command: | @@ -299,6 +311,9 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: + name: "Print environment" + command: printenv - run: name: "Running self-test (4): P" command: | @@ -333,6 +348,9 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: + name: "Print environment" + command: printenv - run: name: "Running self-test (5): Run" command: | @@ -367,10 +385,13 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: + name: "Print environment" + command: printenv - run: name: "Running self-test (6): R-S" command: | - eval "$PRE_TEST_COMMANDS"; + eval $PRE_TEST_COMMANDS; ./meteor self-test \ --exclude "${SELF_TEST_EXCLUDE}" \ --headless \ @@ -401,6 +422,9 @@ jobs: <<: *run_env_change - attach_workspace: at: . + - run: + name: "Print environment" + command: printenv - run: name: "Running self-test (7): Sp-Z" command: | From 984548d671e9d44d5af97bab240c40064186107d Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 21 Aug 2017 12:06:54 -0400 Subject: [PATCH 74/93] Add standalone script for building Node on Jenkins. This commit revives the script that was removed last year by a4ff6b73d30d13d48df5d4c4d4d489a7da405e40, when we switched from building our own version of Node to downloading the prebuilt release. The new implementation comes from @abernix's work on this branch: https://github.com/meteor/meteor/tree/abernix/dev-bundle-from-hash --- scripts/build-node-for-dev-bundle.sh | 69 ++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100755 scripts/build-node-for-dev-bundle.sh diff --git a/scripts/build-node-for-dev-bundle.sh b/scripts/build-node-for-dev-bundle.sh new file mode 100755 index 0000000000..a4fd6b3e59 --- /dev/null +++ b/scripts/build-node-for-dev-bundle.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash + +set -e +set -u + +source "$(dirname $0)/build-dev-bundle-common.sh" +echo CHECKOUT DIR IS "$CHECKOUT_DIR" +echo BUILDING NODE "v$NODE_VERSION" IN "$DIR" + +cd "$DIR" + +if [ ! -z ${NODE_FROM_SRC+x} ] || [ ! -z ${NODE_COMMIT_HASH+x} ] +then + if [ ! -z ${NODE_COMMIT_HASH+x} ] + then + NODE_FROM_SRC=${NODE_FROM_SRC:=true} + echo "Building Node source from Git hash ${NODE_COMMIT_HASH}..."; + NODE_URL="https://github.com/meteor/node/archive/${NODE_COMMIT_HASH}.tar.gz" + else + echo "Building Node source from ${NODE_VERSION} src tarball..."; + NODE_URL="https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}.tar.gz" + fi +else + NODE_URL="https://nodejs.org/dist/v${NODE_VERSION}/${NODE_TGZ}" +fi + +# Update these values after building the dev-bundle-node Jenkins project. +# Also make sure to update NODE_VERSION in generate-dev-bundle.ps1. +function downloadNode { + echo "Downloading Node from ${NODE_URL}" + curl -sL "${NODE_URL}" | tar zx --strip-components 1 +} + +if [ ! -z ${NODE_FROM_SRC+x} ] +then + mkdir node-src/ && cd node-src/ + downloadNode + if [ "${NODE_FROM_SRC:-}" = "debug" ] + then + ./configure --debug --prefix "${DIR}" + else + ./configure --prefix "${DIR}" + fi + make -j4 + # PORTABLE=1 is a node hack to make npm look relative to itself instead + # of hard coding the PREFIX. + make install PORTABLE=1 + export npm_config_nodedir="${DIR}/node-src" + cd "$DIR" +else + downloadNode +fi + +cd "$DIR" +stripBinary bin/node + +# export path so we use our new node for later builds +PATH="$DIR/bin:$PATH" +which node +which npm +npm version + +echo BUNDLING + +cd "$DIR" +rm -rf build +tar czvf "${CHECKOUT_DIR}/node_${PLATFORM}_v${NODE_VERSION}.tar.gz" . + +echo DONE From 77becc6bfea19cbd51ba392d7f918ec194f6a911 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 21 Aug 2017 13:35:46 -0400 Subject: [PATCH 75/93] Make sure the Node build directory gets deleted. --- scripts/build-node-for-dev-bundle.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/build-node-for-dev-bundle.sh b/scripts/build-node-for-dev-bundle.sh index a4fd6b3e59..56f0e5ae72 100755 --- a/scripts/build-node-for-dev-bundle.sh +++ b/scripts/build-node-for-dev-bundle.sh @@ -33,7 +33,7 @@ function downloadNode { if [ ! -z ${NODE_FROM_SRC+x} ] then - mkdir node-src/ && cd node-src/ + mkdir node-build && cd node-build downloadNode if [ "${NODE_FROM_SRC:-}" = "debug" ] then @@ -45,7 +45,6 @@ then # PORTABLE=1 is a node hack to make npm look relative to itself instead # of hard coding the PREFIX. make install PORTABLE=1 - export npm_config_nodedir="${DIR}/node-src" cd "$DIR" else downloadNode @@ -63,7 +62,7 @@ npm version echo BUNDLING cd "$DIR" -rm -rf build +rm -rf node-build tar czvf "${CHECKOUT_DIR}/node_${PLATFORM}_v${NODE_VERSION}.tar.gz" . echo DONE From 8e7815b43aba706ed31a69f1a562f7953b7bbf1e Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 21 Aug 2017 14:37:12 -0400 Subject: [PATCH 76/93] Try downloading Node from S3 if version exists. --- scripts/build-dev-bundle-common.sh | 3 +++ scripts/generate-dev-bundle.sh | 32 ++++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/scripts/build-dev-bundle-common.sh b/scripts/build-dev-bundle-common.sh index de6be8bece..b35a0d8ac6 100644 --- a/scripts/build-dev-bundle-common.sh +++ b/scripts/build-dev-bundle-common.sh @@ -9,6 +9,9 @@ MONGO_VERSION=3.2.15 NODE_VERSION=4.8.4 NPM_VERSION=4.6.1 +# If we built Node from source on Jenkins, this is the build number. +NODE_BUILD_NUMBER=27 + if [ "$UNAME" == "Linux" ] ; then if [ "$ARCH" != "i686" -a "$ARCH" != "x86_64" ] ; then echo "Unsupported architecture: $ARCH" diff --git a/scripts/generate-dev-bundle.sh b/scripts/generate-dev-bundle.sh index 2ef74cf726..6b5faae2a0 100755 --- a/scripts/generate-dev-bundle.sh +++ b/scripts/generate-dev-bundle.sh @@ -16,13 +16,33 @@ echo BUILDING DEV BUNDLE "$BUNDLE_VERSION" IN "$DIR" cd "$DIR" -S3_HOST="s3.amazonaws.com/com.meteor.jenkins" +extractNodeFromTarGz() { + LOCAL_TGZ="${CHECKOUT_DIR}/node_${PLATFORM}_v${NODE_VERSION}.tar.gz" + if [ -f "$LOCAL_TGZ" ] + then + echo "Skipping download and installing Node from $LOCAL_TGZ" >&2 + tar zxf "$LOCAL_TGZ" + return 0 + fi + return 1 +} -# Update these values after building the dev-bundle-node Jenkins project. -# Also make sure to update NODE_VERSION in generate-dev-bundle.ps1. -NODE_URL="https://nodejs.org/dist/v${NODE_VERSION}/${NODE_TGZ}" -echo "Downloading Node from ${NODE_URL}" -curl "${NODE_URL}" | tar zx --strip-components 1 +downloadNodeFromS3() { + S3_HOST="s3.amazonaws.com/com.meteor.jenkins" + S3_TGZ="node_${UNAME}_${ARCH}_v${NODE_VERSION}.tar.gz" + NODE_URL="https://${S3_HOST}/dev-bundle-node-${NODE_BUILD_NUMBER}/${S3_TGZ}" + echo "Downloading Node from ${NODE_URL}" >&2 + curl "${NODE_URL}" | tar zx +} + +downloadOfficialNode() { + NODE_URL="https://nodejs.org/dist/v${NODE_VERSION}/${NODE_TGZ}" + echo "Downloading Node from ${NODE_URL}" >&2 + curl "${NODE_URL}" | tar zx --strip-components 1 +} + +# Try each strategy in the following order: +extractNodeFromTarGz || downloadNodeFromS3 || downloadOfficialNode # Download Mongo from mongodb.com MONGO_NAME="mongodb-${OS}-${ARCH}-${MONGO_VERSION}" From 857841c20d0999524ed5181fde9c9dd5258c8020 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 21 Aug 2017 14:40:33 -0400 Subject: [PATCH 77/93] Bump $BUNDLE_VERSION to 4.8.32 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 76e415db96..447bd3fc39 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.31 +BUNDLE_VERSION=4.8.32 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 67b76abc7867eebd07df7dce2da2bae064a8c1ac Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 21 Aug 2017 15:10:25 -0400 Subject: [PATCH 78/93] Make node-gyp look for headers in dev_bundle/include/node. Thanks to @abernix for identifying this solution to the duplication between dev_bundle/include/node and dev_bundle/.node-gyp/*/node. --- scripts/generate-dev-bundle.sh | 18 +++++++++--------- tools/cli/dev-bundle-bin-helpers.js | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/scripts/generate-dev-bundle.sh b/scripts/generate-dev-bundle.sh index 6b5faae2a0..e7b84becb4 100755 --- a/scripts/generate-dev-bundle.sh +++ b/scripts/generate-dev-bundle.sh @@ -68,6 +68,15 @@ which node which npm npm version +# Make node-gyp use Node headers and libraries from $DIR/include/node. +export HOME="$DIR" +export USERPROFILE="$DIR" +export npm_config_nodedir="$DIR" + +INCLUDE_PATH="${DIR}/include/node" +echo "Contents of ${INCLUDE_PATH}:" +ls -al "$INCLUDE_PATH" + # When adding new node modules (or any software) to the dev bundle, # remember to update LICENSE.txt! Also note that we include all the # packages that these depend on, so watch out for new dependencies when @@ -115,15 +124,6 @@ cp -R node_modules/* "${DIR}/lib/node_modules/" # commands like node-gyp and node-pre-gyp. cp -R node_modules/.bin "${DIR}/lib/node_modules/" -# Make node-gyp install Node headers and libraries in $DIR/.node-gyp/. -# https://github.com/nodejs/node-gyp/blob/4ee31329e0/lib/node-gyp.js#L52 -export HOME="$DIR" -export USERPROFILE="$DIR" -node "${DIR}/lib/node_modules/node-gyp/bin/node-gyp.js" install -INCLUDE_PATH="${DIR}/.node-gyp/${NODE_VERSION}/include/node" -echo "Contents of ${INCLUDE_PATH}:" -ls -al "$INCLUDE_PATH" - cd "${DIR}/lib" # Clean up some bulky stuff. diff --git a/tools/cli/dev-bundle-bin-helpers.js b/tools/cli/dev-bundle-bin-helpers.js index 5a5bef6c3d..d0b36db9f4 100644 --- a/tools/cli/dev-bundle-bin-helpers.js +++ b/tools/cli/dev-bundle-bin-helpers.js @@ -100,8 +100,8 @@ exports.getEnv = function (options) { } // This allows node-gyp to find Node headers and libraries in - // dev_bundle/.node-gyp. - env.USERPROFILE = devBundleDir; + // dev_bundle/include/node. + env.NPM_CONFIG_NODEDIR = devBundleDir; var PATH = env.PATH || env.Path; if (PATH) { From 955bce8096d660dfa8907ee8416558f184b48454 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 21 Aug 2017 15:11:31 -0400 Subject: [PATCH 79/93] Bump $BUNDLE_VERSION to 4.8.33 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 447bd3fc39..fb6a8ebe64 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.32 +BUNDLE_VERSION=4.8.33 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 77d41a7084c1d1172dee3722a265384459b2c59a Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 22 Aug 2017 16:36:01 +0300 Subject: [PATCH 80/93] Build Node.js with ICU support. To remain the same as official Node.js releases, we need to build with the `small-icu` ICU (International Components for Unicode) package. For Node.js 4.x this means ICU 56.x. As found with `process.config` on an official Node.js release. See https://github.com/nodejs/node/wiki/Intl#configure-node-with-specific-icu-source. --- scripts/build-node-for-dev-bundle.sh | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/scripts/build-node-for-dev-bundle.sh b/scripts/build-node-for-dev-bundle.sh index 56f0e5ae72..6cec100e96 100755 --- a/scripts/build-node-for-dev-bundle.sh +++ b/scripts/build-node-for-dev-bundle.sh @@ -35,12 +35,25 @@ if [ ! -z ${NODE_FROM_SRC+x} ] then mkdir node-build && cd node-build downloadNode + + # Build with International Components for Unicode (ICU) Support... + # Node 4.x used 56.x. Node 8.x uses 59.x. I believe the only + # reliable location to find the correct version of ICU for a Node.js + # release is to check `process.config.icu_ver_major` from an + # official, compiled Node.js release. + # https://github.com/nodejs/node/wiki/Intl#configure-node-with-specific-icu-source + echo "Downloading International Components for Unicode (ICU)..." + curl -sL http://download.icu-project.org/files/icu4c/56.1/icu4c-56_1-src.tgz | \ + tar zx -C deps/ + + node_configure_flags=("--prefix=${DIR}" '--with-intl=small-icu') + if [ "${NODE_FROM_SRC:-}" = "debug" ] then - ./configure --debug --prefix "${DIR}" - else - ./configure --prefix "${DIR}" + node_configure_flags+=('--debug') fi + + ./configure "${node_configure_flags[@]}" make -j4 # PORTABLE=1 is a node hack to make npm look relative to itself instead # of hard coding the PREFIX. From 31c403c33f43c2fa6e2472f554a5b9bb6eefd1f1 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Aug 2017 15:50:20 -0400 Subject: [PATCH 81/93] Update NODE_BUILD_NUMBER to latest Jenkins build, 33. --- scripts/build-dev-bundle-common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build-dev-bundle-common.sh b/scripts/build-dev-bundle-common.sh index b35a0d8ac6..92ada8502a 100644 --- a/scripts/build-dev-bundle-common.sh +++ b/scripts/build-dev-bundle-common.sh @@ -10,7 +10,7 @@ NODE_VERSION=4.8.4 NPM_VERSION=4.6.1 # If we built Node from source on Jenkins, this is the build number. -NODE_BUILD_NUMBER=27 +NODE_BUILD_NUMBER=33 if [ "$UNAME" == "Linux" ] ; then if [ "$ARCH" != "i686" -a "$ARCH" != "x86_64" ] ; then From e2f0bed272b53e170ffbe951457a5cc72ed99109 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Aug 2017 15:50:40 -0400 Subject: [PATCH 82/93] Bump $BUNDLE_VERSION to 4.8.34 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index fb6a8ebe64..d4bfbeaca6 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.33 +BUNDLE_VERSION=4.8.34 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From e2fe03a64310e4ef0399bd957b51e66e740e80c3 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 21 Aug 2017 15:58:04 -0400 Subject: [PATCH 83/93] Add note to History.md about patching Node 4.8.4. --- History.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/History.md b/History.md index 61817d16c3..8b5632220d 100644 --- a/History.md +++ b/History.md @@ -2,6 +2,15 @@ ## v1.5.2, TBD +* Node 4.8.4 has been patched to include + https://github.com/nodejs/node/pull/14829, an important PR implemented + by our own @abernix (:tada:), which fixes a faulty backport of garbage + collection-related logic in V8 that was causing occasional segmentation + faults during Meteor development and testing, ever since Node 4.6.2 + (Meteor 1.4.2.3). When Node 4.8.5 is officially released with these + changes, we will immediately cut a small follow-up release. + [Issue #8648](https://github.com/meteor/meteor/issues/8648) + * The `meteor-babel` package has been upgraded to version 0.23.1. * The `reify` npm package has been upgraded to version 0.12.0, which From 05c8627be95b04073e6c028a7e775008ff73a29d Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Aug 2017 18:41:54 -0400 Subject: [PATCH 84/93] Run `./meteor --get-ready` instead of just `./meteor --help`. A while back we switched from running `./meteor --get-ready`, a command that takes many minutes and sometimes runs out of memory, to just running `./meteor --help` to prepare for self-tests. The hope was that `./meteor --help` would fail less often, and the work that would have been done by `./meteor --get-ready` would be spread out through the actual tests. This helped, I think, but we've been seeing quite a few self-test failures due to unreliable timing of the actual tests, so I'd like to try shifting the balance back. I'm pushing this to the branch with our patched Node 4.8.4, because that branch should have a lower risk of segmentation faults, which may allow `./meteor --get-ready` to succeed more often. This is a bit of a shot in the dark, admittedly, but I want to see what happens. :crossed_fingers: --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 215c7d0461..59fdaf4bd6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -124,9 +124,9 @@ jobs: name: Get Ready command: | eval $PRE_TEST_COMMANDS; - ./meteor --help - # shouldn't take longer than 5 minutes - no_output_timeout: 5m + ./meteor --get-ready + # shouldn't take longer than 10 minutes + no_output_timeout: 10m # Clear dev_bundle/.npm to ensure consistent test runs. - run: name: Clear npm cache From 3e0033c19c367642e41a6c3cc9b5e9b1afd461a1 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Aug 2017 20:51:13 -0400 Subject: [PATCH 85/93] Bump package versions for 1.5.2-beta.13 release. I had a network interruption while trying to upload 1.5.2-beta.12, so I decided to skip that version. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/ddp-client/package.js | 2 +- packages/ejson/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minifier-js/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo-dev-server/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index b2c98f89ed..8210204045 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2-beta152.11" + version: "1.3.2-beta152.13" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 791093df8d..2f32036912 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.11' + version: '6.20.0-beta152.13' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index a5abab904b..da0116b7f0 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.11', + version: '1.0.0-beta152.13', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 2153f9910d..baff929d13 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.11' + version: '1.2.0-beta152.13' }); Package.onUse(api => { diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index ed09a716f7..17493c9dd0 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.1.0-beta152.11', + version: '2.1.0-beta152.13', documentation: null }); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index ef7c0704fe..e414060192 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Extended and Extensible JSON library', - version: '1.0.14-beta152.11' + version: '1.0.14-beta152.13' }); Package.onUse(function onUse(api) { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 862e79d72c..90e3e30293 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.11" + version: "1.5.2-beta.13" }); Package.includeTool(); diff --git a/packages/minifier-js/package.js b/packages/minifier-js/package.js index 8383c30401..c5b3690c88 100644 --- a/packages/minifier-js/package.js +++ b/packages/minifier-js/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "JavaScript minifier", - version: "2.1.2" + version: "2.1.2-beta152.13" }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 97014ae4e9..4033cf34e4 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.11' + version: '1.3.0-beta152.13' }); Package.onUse(api => { diff --git a/packages/modules/package.js b/packages/modules/package.js index 1b4357a32a..a0fb0003d0 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.11", + version: "0.10.0-beta152.13", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo-dev-server/package.js b/packages/mongo-dev-server/package.js index 0968fc5ddd..756c1ddaee 100644 --- a/packages/mongo-dev-server/package.js +++ b/packages/mongo-dev-server/package.js @@ -3,7 +3,7 @@ Package.describe({ documentation: 'README.md', name: 'mongo-dev-server', summary: 'Start MongoDB alongside Meteor, in development mode.', - version: '1.0.1-beta152.11', + version: '1.0.1-beta152.13', }); Package.onUse(function (api) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index d608e8bb15..bdf0722ef7 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.11' + version: '1.2.0-beta152.13' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 007d95c79b..4702ddc773 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.11", + version: "0.9.0-beta152.13", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 6c5e80b7c8..c7e6684532 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.0.14', + version: '1.0.14-beta152.13', documentation: null }); diff --git a/packages/webapp/package.js b/packages/webapp/package.js index eb531f73c7..635b155033 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-beta152.11' + version: '1.3.18-beta152.13' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 6c670fb3d9..88576b84c8 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.11", + "version": "1.5.2-beta.13", "recommended": false, "official": false, "description": "Meteor" From 6abd102648959931c52a6b303d9f9fc4f74b2953 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 22 Aug 2017 21:58:24 -0400 Subject: [PATCH 86/93] Bump the `./meteor --get-ready` time limit. --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 59fdaf4bd6..0a2704fe2c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,8 +125,8 @@ jobs: command: | eval $PRE_TEST_COMMANDS; ./meteor --get-ready - # shouldn't take longer than 10 minutes - no_output_timeout: 10m + # shouldn't take longer than 20 minutes + no_output_timeout: 20m # Clear dev_bundle/.npm to ensure consistent test runs. - run: name: Clear npm cache From acb884e93f7a99292134cb31b2667aea8fc488da Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 23 Aug 2017 09:16:54 -0400 Subject: [PATCH 87/93] Bump package versions for 1.5.2-rc.1 release. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/ddp-client/package.js | 2 +- packages/ejson/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minifier-js/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo-dev-server/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 8210204045..026dccb191 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2-beta152.13" + version: "1.3.2-rc152.1" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 2f32036912..5bb2d63c83 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.13' + version: '6.20.0-rc152.1' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index da0116b7f0..9143e0eb04 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.13', + version: '1.0.0-rc152.1', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index baff929d13..46efcc4310 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.13' + version: '1.2.0-rc152.1' }); Package.onUse(api => { diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index 17493c9dd0..1eb6f928aa 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.1.0-beta152.13', + version: '2.1.0-rc152.1', documentation: null }); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index e414060192..08178e8004 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Extended and Extensible JSON library', - version: '1.0.14-beta152.13' + version: '1.0.14-rc152.1' }); Package.onUse(function onUse(api) { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 90e3e30293..30bdf809e5 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.13" + version: "1.5.2-rc.1" }); Package.includeTool(); diff --git a/packages/minifier-js/package.js b/packages/minifier-js/package.js index c5b3690c88..376a2d0828 100644 --- a/packages/minifier-js/package.js +++ b/packages/minifier-js/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "JavaScript minifier", - version: "2.1.2-beta152.13" + version: "2.1.2-rc152.1" }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 4033cf34e4..e0c8237a99 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.13' + version: '1.3.0-rc152.1' }); Package.onUse(api => { diff --git a/packages/modules/package.js b/packages/modules/package.js index a0fb0003d0..19672590de 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.13", + version: "0.10.0-rc152.1", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo-dev-server/package.js b/packages/mongo-dev-server/package.js index 756c1ddaee..1d2f69605b 100644 --- a/packages/mongo-dev-server/package.js +++ b/packages/mongo-dev-server/package.js @@ -3,7 +3,7 @@ Package.describe({ documentation: 'README.md', name: 'mongo-dev-server', summary: 'Start MongoDB alongside Meteor, in development mode.', - version: '1.0.1-beta152.13', + version: '1.0.1-rc152.1', }); Package.onUse(function (api) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index bdf0722ef7..3af01a8d63 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.13' + version: '1.2.0-rc152.1' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 4702ddc773..7c66b518f9 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.13", + version: "0.9.0-rc152.1", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index c7e6684532..66b9f52389 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.0.14-beta152.13', + version: '1.0.14-rc152.1', documentation: null }); diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 635b155033..6e6ba93d22 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-beta152.13' + version: '1.3.18-rc152.1' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 88576b84c8..efe8816497 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.13", + "version": "1.5.2-rc.1", "recommended": false, "official": false, "description": "Meteor" From 75f7e35937b2157b0b00bb9f00e7e99f725d5ac5 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 23 Aug 2017 10:59:00 -0400 Subject: [PATCH 88/93] Update History.md with miscellaneous changes in Meteor 1.5.2. --- History.md | 54 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/History.md b/History.md index 8b5632220d..97d18a029d 100644 --- a/History.md +++ b/History.md @@ -8,9 +8,33 @@ collection-related logic in V8 that was causing occasional segmentation faults during Meteor development and testing, ever since Node 4.6.2 (Meteor 1.4.2.3). When Node 4.8.5 is officially released with these - changes, we will immediately cut a small follow-up release. + changes, we will immediately publish a small follow-up release. [Issue #8648](https://github.com/meteor/meteor/issues/8648) +* When Meteor writes to watched files during the build process, it no + longer relies on file watchers to detect the change and invalidate the + optimistic file system cache, which should fix a number of problems + related by the symptom of endless rebuilding. + [Issue #8988](https://github.com/meteor/meteor/issues/8988) + [Issue #8942](https://github.com/meteor/meteor/issues/8942) + [PR #9007](https://github.com/meteor/meteor/pull/9007) + +* The `cordova-lib` npm package has been updated to 7.0.1, along with + cordova-android (6.2.3) and cordova-ios (4.4.0), and various plugins. + [PR #8919](https://github.com/meteor/meteor/pull/8919) resolves the + umbrella [issue #8686](https://github.com/meteor/meteor/issues/8686), as + well as several Android build issues: + [#8408](https://github.com/meteor/meteor/issues/8408), + [#8424](https://github.com/meteor/meteor/issues/8424), and + [#8464](https://github.com/meteor/meteor/issues/8464). + +* The [`boilerplate-generator`](https://github.com/meteor/meteor/tree/release-1.5.2/packages/boilerplate-generator) + package responsible for generating initial HTML documents for Meteor + apps has been refactored by @stevenhao to avoid using the + `spacebars`-related packages, which means it is now possible to remove + Blaze as a dependency from the server as well as the client. + [PR #8820](https://github.com/meteor/meteor/pull/8820) + * The `meteor-babel` package has been upgraded to version 0.23.1. * The `reify` npm package has been upgraded to version 0.12.0, which @@ -40,6 +64,18 @@ * The `uglify-js` npm package has been upgraded to version 3.0.28. +* Thanks to PRs [#8960](https://github.com/meteor/meteor/pull/8960) and + [#9018](https://github.com/meteor/meteor/pull/9018) by @GeoffreyBooth, a + [`coffeescript-compiler`](https://github.com/meteor/meteor/tree/release-1.5.2/packages/non-core/coffeescript-compiler) + package has been extracted from the `coffeescript` package, similar to + how the `babel-compiler` package is separate from the `ecmascript` + package, so that other packages (such as + [`vue-coffee`](https://github.com/meteor-vue/vue-meteor/tree/master/packages/vue-coffee)) + can make use of `coffeescript-compiler`. All `coffeescript`-related + packages have been moved to + [`packages/non-core`](https://github.com/meteor/meteor/tree/release-1.5.2/packages/non-core), + so that they can be published independently from Meteor releases. + * `meteor list --tree` can now be used to list all transitive package dependencies (and versions) in an application. Weakly referenced dependencies can also be listed by using the `--weak` option. For more information, run @@ -70,15 +106,6 @@ [Issue #5121](https://github.com/meteor/meteor/issues/5121) [PR #8917](https://github.com/meteor/meteor/pull/8917) -* The `cordova-lib` npm package has been updated to 7.0.1, along with - cordova-android (6.2.3) and cordova-ios (4.4.0), and various plugins. - [PR #8919](https://github.com/meteor/meteor/pull/8919) resolves the - umbrella [issue #8686](https://github.com/meteor/meteor/issues/8686), as - well as several Android build issues: - [#8408](https://github.com/meteor/meteor/issues/8408), - [#8424](https://github.com/meteor/meteor/issues/8424), and - [#8464](https://github.com/meteor/meteor/issues/8464). - * The `"env"` field is now supported in `.babelrc` files. [PR #8963](https://github.com/meteor/meteor/pull/8963) @@ -88,6 +115,13 @@ depend on the interleaving of `bare` files with eager module evaluation. [PR #8972](https://github.com/meteor/meteor/pull/8972) +* When `meteor test-packages` runs in a browser, uncaught exceptions will + now be displayed above the test results, along with the usual summary of + test failures, in case those uncaught errors have something to do with + later test failures. + [Issue #4979](https://github.com/meteor/meteor/issues/4979) + [PR #9034](https://github.com/meteor/meteor/pull/9034) + ## v1.5.1, 2017-07-12 * Node has been upgraded to version 4.8.4. From ae360032617bac528f5844e776d8ac4afa2a703d Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Wed, 23 Aug 2017 17:19:21 +0300 Subject: [PATCH 89/93] When building Node.js, use `DESTDIR` to specify install location. In an effort to maintain parity with the official Node.js build, which sets `node_prefix` to `/`, this takes advantage of the `DESTDIR` variable which changes the actual installation location used by `make install`. Without this, it relies on the `PREFIX` which is now explicitly set to `/`, even though it won't be installed there. See the `install.py` script for more information, in the form of code: https://github.com/nodejs/node/blob/2a97eb61c65e23de3cee42c7b70f845b0c3a3d09/tools/install.py#L13 /cc @benjamn --- scripts/build-node-for-dev-bundle.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/build-node-for-dev-bundle.sh b/scripts/build-node-for-dev-bundle.sh index 6cec100e96..27c2ec0c34 100755 --- a/scripts/build-node-for-dev-bundle.sh +++ b/scripts/build-node-for-dev-bundle.sh @@ -46,7 +46,11 @@ then curl -sL http://download.icu-project.org/files/icu4c/56.1/icu4c-56_1-src.tgz | \ tar zx -C deps/ - node_configure_flags=("--prefix=${DIR}" '--with-intl=small-icu') + node_configure_flags=(\ + '--prefix=/' \ + '--with-intl=small-icu' \ + '--release-urlbase=https://nodejs.org/download/release/' \ + ) if [ "${NODE_FROM_SRC:-}" = "debug" ] then @@ -57,7 +61,9 @@ then make -j4 # PORTABLE=1 is a node hack to make npm look relative to itself instead # of hard coding the PREFIX. - make install PORTABLE=1 + # DESTDIR installs to the requested location, without using PREFIX. + # See tools/install.py in the Node source for more information. + make install PORTABLE=1 DESTDIR="${DIR}" cd "$DIR" else downloadNode From eae10fe635c95216e1383eb7a9c15c6956ceb510 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Wed, 23 Aug 2017 17:26:12 +0300 Subject: [PATCH 90/93] Update NODE_BUILD_NUMBER to latest Jenkins build, 35. --- scripts/build-dev-bundle-common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build-dev-bundle-common.sh b/scripts/build-dev-bundle-common.sh index 92ada8502a..f3463243fa 100644 --- a/scripts/build-dev-bundle-common.sh +++ b/scripts/build-dev-bundle-common.sh @@ -10,7 +10,7 @@ NODE_VERSION=4.8.4 NPM_VERSION=4.6.1 # If we built Node from source on Jenkins, this is the build number. -NODE_BUILD_NUMBER=33 +NODE_BUILD_NUMBER=35 if [ "$UNAME" == "Linux" ] ; then if [ "$ARCH" != "i686" -a "$ARCH" != "x86_64" ] ; then From 4986d089e05f72ab5131a13a28f715aa6d41c6db Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Wed, 23 Aug 2017 18:25:13 +0300 Subject: [PATCH 91/93] Bump $BUNDLE_VERSION to 4.8.35 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index d4bfbeaca6..8661fb2933 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.34 +BUNDLE_VERSION=4.8.35 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From c8efd5dffe7a1c462b5a6b9757f0ded5716f16dd Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Thu, 24 Aug 2017 14:50:11 +0300 Subject: [PATCH 92/93] Bump package versions for 1.5.2-rc.2 release. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/ddp-client/package.js | 2 +- packages/ejson/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minifier-js/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo-dev-server/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 026dccb191..33085e9ffd 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2-rc152.1" + version: "1.3.2-rc152.2" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 5bb2d63c83..ada561c6e0 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-rc152.1' + version: '6.20.0-rc152.2' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index 9143e0eb04..037021c739 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-rc152.1', + version: '1.0.0-rc152.2', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 46efcc4310..8b49002c93 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-rc152.1' + version: '1.2.0-rc152.2' }); Package.onUse(api => { diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index 1eb6f928aa..3d3b403eb6 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.1.0-rc152.1', + version: '2.1.0-rc152.2', documentation: null }); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index 08178e8004..00f1e3fab5 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Extended and Extensible JSON library', - version: '1.0.14-rc152.1' + version: '1.0.14-rc152.2' }); Package.onUse(function onUse(api) { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 30bdf809e5..34acf84d3b 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-rc.1" + version: "1.5.2-rc.2" }); Package.includeTool(); diff --git a/packages/minifier-js/package.js b/packages/minifier-js/package.js index 376a2d0828..52334cceb8 100644 --- a/packages/minifier-js/package.js +++ b/packages/minifier-js/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "JavaScript minifier", - version: "2.1.2-rc152.1" + version: "2.1.2-rc152.2" }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index e0c8237a99..3b9c30a3b8 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-rc152.1' + version: '1.3.0-rc152.2' }); Package.onUse(api => { diff --git a/packages/modules/package.js b/packages/modules/package.js index 19672590de..77a03fa27c 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-rc152.1", + version: "0.10.0-rc152.2", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo-dev-server/package.js b/packages/mongo-dev-server/package.js index 1d2f69605b..f4dd7d06db 100644 --- a/packages/mongo-dev-server/package.js +++ b/packages/mongo-dev-server/package.js @@ -3,7 +3,7 @@ Package.describe({ documentation: 'README.md', name: 'mongo-dev-server', summary: 'Start MongoDB alongside Meteor, in development mode.', - version: '1.0.1-rc152.1', + version: '1.0.1-rc152.2', }); Package.onUse(function (api) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 3af01a8d63..8b03ed4e47 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-rc152.1' + version: '1.2.0-rc152.2' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 7c66b518f9..96e82ba06c 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-rc152.1", + version: "0.9.0-rc152.2", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 66b9f52389..4aa2cd5904 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.0.14-rc152.1', + version: '1.0.14-rc152.2', documentation: null }); diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 6e6ba93d22..3b1ad6e507 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-rc152.1' + version: '1.3.18-rc152.2' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index efe8816497..4539bff2a8 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-rc.1", + "version": "1.5.2-rc.2", "recommended": false, "official": false, "description": "Meteor" From a54f5ede46362b91b0b800081c47706931ba5474 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 12 Jul 2017 16:07:33 -0400 Subject: [PATCH 93/93] Bump package versions for the official 1.5.2 release. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/ddp-client/package.js | 2 +- packages/ejson/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minifier-js/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo-dev-server/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/test-in-browser/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-official.json | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 33085e9ffd..44f00b666e 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2-rc152.2" + version: "1.3.2" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index ada561c6e0..a48ba5a3eb 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-rc152.2' + version: '6.20.0' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index 037021c739..b724b16212 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-rc152.2', + version: '1.0.0', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 8b49002c93..951584f37b 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-rc152.2' + version: '1.2.0' }); Package.onUse(api => { diff --git a/packages/ddp-client/package.js b/packages/ddp-client/package.js index 3d3b403eb6..8afeb25c69 100644 --- a/packages/ddp-client/package.js +++ b/packages/ddp-client/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data client", - version: '2.1.0-rc152.2', + version: '2.1.0', documentation: null }); diff --git a/packages/ejson/package.js b/packages/ejson/package.js index 00f1e3fab5..142dff4de5 100644 --- a/packages/ejson/package.js +++ b/packages/ejson/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: 'Extended and Extensible JSON library', - version: '1.0.14-rc152.2' + version: '1.0.14' }); Package.onUse(function onUse(api) { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 34acf84d3b..13eec78560 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-rc.2" + version: "1.5.2" }); Package.includeTool(); diff --git a/packages/minifier-js/package.js b/packages/minifier-js/package.js index 52334cceb8..8383c30401 100644 --- a/packages/minifier-js/package.js +++ b/packages/minifier-js/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "JavaScript minifier", - version: "2.1.2-rc152.2" + version: "2.1.2" }); Npm.depends({ diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 3b9c30a3b8..97edd81586 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-rc152.2' + version: '1.3.0' }); Package.onUse(api => { diff --git a/packages/modules/package.js b/packages/modules/package.js index 77a03fa27c..e7a0b80687 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-rc152.2", + version: "0.10.0", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo-dev-server/package.js b/packages/mongo-dev-server/package.js index f4dd7d06db..3f5d9026b3 100644 --- a/packages/mongo-dev-server/package.js +++ b/packages/mongo-dev-server/package.js @@ -3,7 +3,7 @@ Package.describe({ documentation: 'README.md', name: 'mongo-dev-server', summary: 'Start MongoDB alongside Meteor, in development mode.', - version: '1.0.1-rc152.2', + version: '1.0.1', }); Package.onUse(function (api) { diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 8b03ed4e47..22ab4f22a8 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-rc152.2' + version: '1.2.0' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 96e82ba06c..95a8e66a04 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-rc152.2", + version: "0.9.0", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/test-in-browser/package.js b/packages/test-in-browser/package.js index 4aa2cd5904..6c5e80b7c8 100644 --- a/packages/test-in-browser/package.js +++ b/packages/test-in-browser/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Run tests interactively in the browser", - version: '1.0.14-rc152.2', + version: '1.0.14', documentation: null }); diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 3b1ad6e507..b14e991576 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-rc152.2' + version: '1.3.18' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index bcd1814321..60a23af4c3 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.1", + "version": "1.5.2", "recommended": false, "official": true, "description": "The Official Meteor Distribution"