diff --git a/.circleci/config.yml b/.circleci/config.yml index a4e3e5944b..3020df1304 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -61,7 +61,7 @@ run_save_node_bin: &run_save_node_bin build_machine_environment: &build_machine_environment # Specify that we want an actual machine (ala Circle 1.0), not a Docker image. docker: - - image: meteor/circleci + - image: meteor/circleci:android-27-node-8 environment: # This multiplier scales the waitSecs for selftests. TIMEOUT_SCALE_FACTOR: 8 diff --git a/History.md b/History.md index 323c469252..c415b5d0ea 100644 --- a/History.md +++ b/History.md @@ -1,13 +1,80 @@ ## v.NEXT -### Breaking changes -N/A +## v1.8.1, 2019-04-03 -### Migration steps +### Breaking changes + +* Although we are not aware of any specific backwards incompatibilities, + the major upgrade of `cordova-android` from 6.4.0 to 7.1.4 likely + deserves extra attention, if you use Cordova to build Android apps. + +### Migration Steps N/A ### Changes +* Node has been updated from version 8.11.4 to version + [8.15.1](https://nodejs.org/en/blog/release/v8.15.1/), an important + [security release](https://nodejs.org/en/blog/vulnerability/february-2019-security-releases/), + which includes the changes from four other minor releases: + * [8.15.0](https://nodejs.org/en/blog/release/v8.15.0/) + * [8.14.0](https://nodejs.org/en/blog/release/v8.14.0/), an important + [security release](https://nodejs.org/en/blog/vulnerability/november-2018-security-releases/) + * [8.12.0](https://nodejs.org/en/blog/release/v8.12.0/) + * [8.13.0](https://nodejs.org/en/blog/release/v8.13.0/) + + > Note: While Node 8.12.0 included changes that may improve the + performance of Meteor apps, there have been reports of CPU usage spikes + in production due to excessive garbage collection, so this version of + Meteor should be considered experimental until those problems have been + fixed. [Issue #10216](https://github.com/meteor/meteor/issues/10216) + +* The `npm` tool has been upgraded to version + [6.9.0](https://github.com/npm/cli/releases/tag/v6.9.0), and our + [fork](https://github.com/meteor/pacote/tree/v9.5.0-meteor) of its + `pacote` dependency has been updated to version 9.5.0. + +* Mongo has been upgraded to version 4.0.6 for 64-bit systems (was 4.0.2), + and 3.2.22 for 32-bit systems (was 3.2.19). The `mongodb` npm package + used by `npm-mongo` has been updated to version 3.1.13 (was 3.1.6). + +* The `fibers` npm package has been updated to version 3.1.1, a major + update from version 2.0.0. Building this version of `fibers` requires a + C++11 compiler, unlike previous versions. If you deploy your Meteor app + manually (without using Galaxy), you may need to update the version of + `g++` used when running `npm install` in the `bundle/programs/server` + directory. + +* The `meteor-babel` npm package has been updated to version 7.3.4. + +* Cordova Hot Code Push mechanism is now switching versions explicitly with + call to `WebAppLocalServer.switchToPendingVersion` instead of trying to + switch every time a browser reload is detected. If you use any third + party package or have your own HCP routines implemented be sure to call + it before forcing a browser reload. If you use the automatic reload from + the `Reload` meteor package you do not need to do anything. + [cordova-plugin-meteor-webapp PR #62](https://github.com/meteor/cordova-plugin-meteor-webapp/pull/62) + +* Multiple Cordova-related bugs have been fixed, including Xcode 10 build + incompatibilities and hot code push errors due to duplicated + images/assets. [PR #10339](https://github.com/meteor/meteor/pull/10339) + +* The `cordova-android` and `cordova-ios` npm dependencies have been + updated to 7.1.4 (from 6.4.0) and 4.5.5 (from 4.5.4), respectively. + +* Build performance has improved (especially on Windows) thanks to + additional caching implemented by [@zodern](https://github.com/zodern) + in PRs [#10399](https://github.com/meteor/meteor/pull/10399), + [#10452](https://github.com/meteor/meteor/pull/10452), + [#10453](https://github.com/meteor/meteor/pull/10453), and + [#10454](https://github.com/meteor/meteor/pull/10454). + +* The `meteor mongo` command no longer uses the `--quiet` option, so the + normal startup text will be displayed, albeit without the banner about + Mongo's free monitoring service. See this + [MongoDB Jira issue](https://jira.mongodb.org/browse/SERVER-38862) + for more details. + * In Meteor packages, `client/` and `server/` directories no longer have any special meaning. In application code, `client/` directories are ignored during the server build, and `server/` directories are ignored @@ -16,6 +83,26 @@ N/A [Issue #10393](https://github.com/meteor/meteor/issues/10393) [PR #10414](https://github.com/meteor/meteor/pull/10414) +* If your application is using Git for version control, the current Git + commit hash will now be exposed via the `Meteor.gitCommitHash` property + while the app is running (in both server and client code), and also via + the `"gitCommitHash"` property in the `star.json` file located in the + root directory of builds produced by `meteor build`, for consumption by + deployment tools. If you are not using Git, neither property will be + defined. [PR #10442](https://github.com/meteor/meteor/pull/10442) + +* The Meteor Tool now uses a more reliable method (the MongoDB + [`isMaster` command](https://docs.mongodb.com/manual/reference/command/isMaster/)) + to detect when the local development database has started and is ready to + accept read and write operations. + [PR #10500](https://github.com/meteor/meteor/pull/10500) + +* Setting the `x-no-compression` request header will prevent the `webapp` + package from compressing responses with `gzip`, which may be useful if + your Meteor app is behind a proxy that compresses resources with another + compression algorithm, such as [brotli](https://github.com/google/brotli). + [PR #10378](https://github.com/meteor/meteor/pull/10378) + ## v1.8.0.2, 2019-01-07 ### Breaking changes diff --git a/meteor b/meteor index 4a90132885..f903890e8a 100755 --- a/meteor +++ b/meteor @@ -1,7 +1,6 @@ #!/usr/bin/env bash -# Note: Skip 8.12.0.0, as it has already been used. -BUNDLE_VERSION=8.11.4.8 +BUNDLE_VERSION=8.15.1.1 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. diff --git a/packages/autoupdate/autoupdate_client.js b/packages/autoupdate/autoupdate_client.js index 4f81214560..46b6a504bb 100644 --- a/packages/autoupdate/autoupdate_client.js +++ b/packages/autoupdate/autoupdate_client.js @@ -25,6 +25,8 @@ // The client version of the client code currently running in the // browser. +import { ClientVersions } from "./client_versions.js"; + const clientArch = Meteor.isCordova ? "web.cordova" : Meteor.isModern ? "web.browser" : "web.browser.legacy"; @@ -38,25 +40,21 @@ const autoupdateVersions = export const Autoupdate = {}; -// The collection of acceptable client versions. -const ClientVersions = - Autoupdate._ClientVersions = // Used by a self-test. - new Mongo.Collection("meteor_autoupdate_clientVersions"); +// Stores acceptable client versions. +const clientVersions = + Autoupdate._clientVersions = // Used by a self-test. + new ClientVersions(); + +Meteor.connection.registerStore( + "meteor_autoupdate_clientVersions", + clientVersions.createStore() +); Autoupdate.newClientAvailable = function () { - return !! ( - ClientVersions.findOne({ - _id: clientArch, - versionNonRefreshable: { - $ne: autoupdateVersions.versionNonRefreshable, - } - }) || - ClientVersions.findOne({ - _id: clientArch, - versionRefreshable: { - $ne: autoupdateVersions.versionRefreshable, - } - }) + return clientVersions.newClientAvailable( + clientArch, + ["versionRefreshable", "versionNonRefreshable"], + autoupdateVersions ); }; @@ -104,10 +102,7 @@ Autoupdate._retrySubscription = () => { resolved.then(() => checkNewVersionDocument(doc)); } - const handle = ClientVersions.find().observe({ - added: check, - changed: check - }); + const stop = clientVersions.watch(check); function checkNewVersionDocument(doc) { if (doc._id !== clientArch) { @@ -118,7 +113,7 @@ Autoupdate._retrySubscription = () => { autoupdateVersions.versionNonRefreshable) { // Non-refreshable assets have changed, so we have to reload the // whole page rather than just replacing tags. - if (handle) handle.stop(); + if (stop) stop(); if (Package.reload) { // The reload package should be provided by ddp-client, which // is provided by the ddp package that autoupdate depends on. diff --git a/packages/autoupdate/autoupdate_cordova.js b/packages/autoupdate/autoupdate_cordova.js index 3f8f06f9a2..fcbac1d486 100644 --- a/packages/autoupdate/autoupdate_cordova.js +++ b/packages/autoupdate/autoupdate_cordova.js @@ -1,21 +1,27 @@ +import { ClientVersions } from "./client_versions.js"; + var autoupdateVersionsCordova = __meteor_runtime_config__.autoupdate.versions["web.cordova"] || { version: "unknown" }; -// The collection of acceptable client versions. -const ClientVersions = - new Mongo.Collection("meteor_autoupdate_clientVersions"); - export const Autoupdate = {}; -Autoupdate.newClientAvailable = - () => !! ClientVersions.findOne({ - _id: "web.cordova", - version: { - $ne: autoupdateVersionsCordova.version - } - }); +// Stores acceptable client versions. +const clientVersions = new ClientVersions(); + +Meteor.connection.registerStore( + "meteor_autoupdate_clientVersions", + clientVersions.createStore() +); + +Autoupdate.newClientAvailable = function () { + return clientVersions.newClientAvailable( + "web.cordova", + ["version"], + autoupdateVersionsCordova + ); +}; var retry = new Retry({ // Unlike the stream reconnect use of Retry, which we want to be instant @@ -59,11 +65,8 @@ Autoupdate._retrySubscription = () => { } } - ClientVersions.find({ - _id: "web.cordova" - }).observe({ - added: checkNewVersionDocument, - changed: checkNewVersionDocument + clientVersions.watch(checkNewVersionDocument, { + filter: "web.cordova" }); } } diff --git a/packages/autoupdate/autoupdate_server.js b/packages/autoupdate/autoupdate_server.js index 1a168e785e..ef564fc8ef 100644 --- a/packages/autoupdate/autoupdate_server.js +++ b/packages/autoupdate/autoupdate_server.js @@ -22,6 +22,7 @@ // The ID of each document is the client architecture, and the fields of // the document are the versions described above. +import { ClientVersions } from "./client_versions.js"; var Future = Npm.require("fibers/future"); export const Autoupdate = __meteor_runtime_config__.autoupdate = { @@ -34,11 +35,8 @@ export const Autoupdate = __meteor_runtime_config__.autoupdate = { versions: {} }; -// The collection of acceptable client versions. -const ClientVersions = - new Mongo.Collection("meteor_autoupdate_clientVersions", { - connection: null - }); +// Stores acceptable client versions. +const clientVersions = new ClientVersions(); // The client hash includes __meteor_runtime_config__, so wait until // all packages have loaded and have had a chance to populate the @@ -96,11 +94,8 @@ function updateVersions(shouldReloadClientProgram) { ...Autoupdate.versions[arch], assets: WebApp.getRefreshableAssets(arch), }; - if (! ClientVersions.findOne({ _id: arch })) { - ClientVersions.insert({ _id: arch, ...payload }); - } else { - ClientVersions.update(arch, { $set: payload }); - } + + clientVersions.set(arch, payload); }); }); } @@ -118,7 +113,13 @@ Meteor.publish( if (Autoupdate.appId && appId && Autoupdate.appId !== appId) return []; - return ClientVersions.find(); + const stop = clientVersions.watch((version, isNew) => { + (isNew ? this.added : this.changed) + .call(this, "meteor_autoupdate_clientVersions", version._id, version); + }); + + this.onStop(() => stop()); + this.ready(); }, {is_auto: true} ); @@ -132,8 +133,8 @@ Meteor.startup(function () { "version-refreshable", "version-cordova", ].forEach(_id => { - ClientVersions.upsert(_id, { - $set: { version: "outdated" } + clientVersions.set(_id, { + version: "outdated" }); }); }); diff --git a/packages/autoupdate/client_versions.js b/packages/autoupdate/client_versions.js new file mode 100644 index 0000000000..05ccde1207 --- /dev/null +++ b/packages/autoupdate/client_versions.js @@ -0,0 +1,104 @@ +import { Tracker } from "meteor/tracker"; + +export class ClientVersions { + constructor() { + this._versions = new Map(); + this._watchCallbacks = new Set(); + } + + // Creates a Livedata store for use with `Meteor.connection.registerStore`. + // After the store is registered, document updates reported by Livedata are + // merged with the documents in this `ClientVersions` instance. + createStore() { + return { + update: ({ id, msg, fields }) => { + if (msg === "added" || msg === "changed") { + this.set(id, fields); + } + } + }; + } + + hasVersions() { + return this._versions.size > 0; + } + + get(id) { + return this._versions.get(id); + } + + // Adds or updates a version document and invokes registered callbacks for the + // added/updated document. If a document with the given ID already exists, its + // fields are merged with `fields`. + set(id, fields) { + let version = this._versions.get(id); + let isNew = false; + + if (version) { + Object.assign(version, fields); + } else { + version = { + _id: id, + ...fields + }; + + isNew = true; + this._versions.set(id, version); + } + + this._watchCallbacks.forEach(({ fn, filter }) => { + if (! filter || filter === version._id) { + fn(version, isNew); + } + }); + } + + // Registers a callback that will be invoked when a version document is added + // or changed. Calling the function returned by `watch` removes the callback. + // If `skipInitial` is true, the callback isn't be invoked for existing + // documents. If `filter` is set, the callback is only invoked for documents + // with ID `filter`. + watch(fn, { skipInitial, filter } = {}) { + if (! skipInitial) { + const resolved = Promise.resolve(); + + this._versions.forEach((version) => { + if (! filter || filter === version._id) { + resolved.then(() => fn(version, true)); + } + }); + } + + const callback = { fn, filter }; + this._watchCallbacks.add(callback); + + return () => this._watchCallbacks.delete(callback); + } + + // A reactive data source for `Autoupdate.newClientAvailable`. + newClientAvailable(id, fields, currentVersion) { + function isNewVersion(version) { + return ( + version._id === id && + fields.some((field) => version[field] !== currentVersion[field]) + ); + } + + const dependency = new Tracker.Dependency(); + const version = this.get(id); + + dependency.depend(); + + const stop = this.watch( + (version) => { + if (isNewVersion(version)) { + dependency.changed(); + stop(); + } + }, + { skipInitial: true } + ); + + return !! version && isNewVersion(version); + } +} diff --git a/packages/autoupdate/package.js b/packages/autoupdate/package.js index 16b2792f0c..e4a2bf47e6 100644 --- a/packages/autoupdate/package.js +++ b/packages/autoupdate/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Update the client when new client code is available", - version: '1.5.1' + version: '1.6.0' }); Package.onUse(function (api) { @@ -15,10 +15,11 @@ Package.onUse(function (api) { 'retry' ], 'client'); + api.use('reload', 'client', { weak: true }); + api.use([ 'ecmascript', - 'ddp', - 'mongo', + 'ddp' ], ['client', 'server']); api.mainModule('autoupdate_server.js', 'server'); diff --git a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json index 1053e79fbf..a927664f22 100644 --- a/packages/babel-compiler/.npm/package/npm-shrinkwrap.json +++ b/packages/babel-compiler/.npm/package/npm-shrinkwrap.json @@ -7,9 +7,9 @@ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==" }, "@babel/core": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.0.tgz", - "integrity": "sha512-7pvAdC4B+iKjFFp9Ztj0QgBndJ++qaMeonT185wAqUnhipw8idm9Rv1UMyBuKtYjfl6ORNkgEgcsYLfHX/GpLw==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz", + "integrity": "sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==", "dependencies": { "json5": { "version": "2.1.0", @@ -19,9 +19,9 @@ } }, "@babel/generator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.0.tgz", - "integrity": "sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", + "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==" }, "@babel/helper-annotate-as-pure": { "version": "7.0.0", @@ -34,9 +34,9 @@ "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==" }, "@babel/helper-builder-react-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz", - "integrity": "sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw==" + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz", + "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==" }, "@babel/helper-call-delegate": { "version": "7.1.0", @@ -44,9 +44,9 @@ "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==" }, "@babel/helper-create-class-features-plugin": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.2.1.tgz", - "integrity": "sha512-EsEP7XLFmcJHjcuFYBxYD1FkP0irC8C9fsrt2tX/jrAi/eTnFI6DOPgVFb+WREeg1GboF+Ib+nCHbGBodyAXSg==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.4.tgz", + "integrity": "sha512-uFpzw6L2omjibjxa8VGZsJUPL5wJH0zzGKpoz0ccBkzIa6C8kWNUbiBmQ0rgOKWlHJ6qzmfa6lTiGchiV8SC+g==" }, "@babel/helper-define-map": { "version": "7.1.0", @@ -84,9 +84,9 @@ "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==" }, "@babel/helper-module-transforms": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz", - "integrity": "sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw==" + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz", + "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==" }, "@babel/helper-optimise-call-expression": { "version": "7.0.0", @@ -109,9 +109,9 @@ "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==" }, "@babel/helper-replace-supers": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz", - "integrity": "sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.3.4.tgz", + "integrity": "sha512-pvObL9WVf2ADs+ePg0jrqlhHoxRXlOa+SHRHzAXIz2xkYuOHfGl+fKxPMaS4Fq+uje8JQPobnertBBvyrWnQ1A==" }, "@babel/helper-simple-access": { "version": "7.1.0", @@ -129,9 +129,9 @@ "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==" }, "@babel/helpers": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.2.0.tgz", - "integrity": "sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A==" + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==" }, "@babel/highlight": { "version": "7.0.0", @@ -139,9 +139,9 @@ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==" }, "@babel/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-M74+GvK4hn1eejD9lZ7967qAwvqTZayQa3g10ag4s9uewgR7TKjeaT0YMyoq+gVfKYABiWZ4MQD701/t5e1Jhg==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", + "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.2.0", @@ -149,14 +149,14 @@ "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==" }, "@babel/plugin-proposal-class-properties": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.1.tgz", - "integrity": "sha512-/4FKFChkQ2Jgb8lBDsvFX496YTi7UWTetVgS8oJUpX1e/DlaoeEK57At27ug8Hu2zI2g8bzkJ+8k9qrHZRPGPA==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.4.tgz", + "integrity": "sha512-lUf8D3HLs4yYlAo8zjuneLvfxN7qfKv1Yzbj5vjqaqMJxgJA3Ipwp4VUJ+OrOdz53Wbww6ahwB8UhB2HQyLotA==" }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-1L5mWLSvR76XYUQJXkd/EEQgjq8HHRP6lQuZTTg0VA4tTGPpGemmCdAfQIz1rzEuWAm+ecP8PyyEm30jC1eQCg==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.4.tgz", + "integrity": "sha512-j7VQmbbkA+qrzNqbKHrBsW3ddFnOeva6wzSe/zB7T+xaxGc+RCpwo44wCmRixAIGRoIpmVgvzFzNJqQcO3/9RA==" }, "@babel/plugin-syntax-async-generators": { "version": "7.2.0", @@ -184,9 +184,9 @@ "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==" }, "@babel/plugin-syntax-typescript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.2.0.tgz", - "integrity": "sha512-WhKr6yu6yGpGcNMVgIBuI9MkredpVc7Y3YR4UzEZmDztHoL6wV56YBHLhWnjO1EvId1B32HrD3DRFc+zSoKI1g==" + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz", + "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==" }, "@babel/plugin-transform-arrow-functions": { "version": "7.2.0", @@ -194,9 +194,9 @@ "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==" }, "@babel/plugin-transform-async-to-generator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz", - "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.3.4.tgz", + "integrity": "sha512-Y7nCzv2fw/jEZ9f678MuKdMo99MFDJMT/PvD9LisrR5JDFcJH6vYeH6RnjVt3p5tceyGRvTtEN0VOlU+rgHZjA==" }, "@babel/plugin-transform-block-scoped-functions": { "version": "7.2.0", @@ -204,14 +204,14 @@ "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==" }, "@babel/plugin-transform-block-scoping": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz", - "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.3.4.tgz", + "integrity": "sha512-blRr2O8IOZLAOJklXLV4WhcEzpYafYQKSGT3+R26lWG41u/FODJuBggehtOwilVAcFu393v3OFj+HmaE6tVjhA==" }, "@babel/plugin-transform-classes": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.0.tgz", - "integrity": "sha512-aPCEkrhJYebDXcGTAP+cdUENkH7zqOlgbKwLbghjjHpJRJBWM/FSlCjMoPGA8oUdiMfOrk3+8EFPLLb5r7zj2w==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.3.4.tgz", + "integrity": "sha512-J9fAvCFBkXEvBimgYxCjvaVDzL6thk0j0dBvCeZmIUDBwyt+nv6HfbImsSrWsYXfDNDivyANgJlFXDUWRTZBuA==" }, "@babel/plugin-transform-computed-properties": { "version": "7.2.0", @@ -219,9 +219,9 @@ "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==" }, "@babel/plugin-transform-destructuring": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz", - "integrity": "sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ==" + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz", + "integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==" }, "@babel/plugin-transform-exponentiation-operator": { "version": "7.2.0", @@ -229,9 +229,9 @@ "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==" }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.2.0.tgz", - "integrity": "sha512-xhQp0lyXA5vk8z1kJitdMozQYEWfo4MgC6neNXrb5euqHiTIGhj5ZWfFPkVESInQSk9WZz1bbNmIRz6zKfWGVA==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.3.4.tgz", + "integrity": "sha512-PmQC9R7DwpBFA+7ATKMyzViz3zCaMNouzZMPZN2K5PnbBbtL3AXFYTkDk+Hey5crQq2A90UG5Uthz0mel+XZrA==" }, "@babel/plugin-transform-for-of": { "version": "7.2.0", @@ -254,9 +254,9 @@ "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==" }, "@babel/plugin-transform-parameters": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz", - "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==" + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.3.3.tgz", + "integrity": "sha512-IrIP25VvXWu/VlBWTpsjGptpomtIkYrN/3aDp4UKm7xK6UxZY88kcJ1UwETbzHAlwN21MnNfwlar0u8y3KpiXw==" }, "@babel/plugin-transform-property-literals": { "version": "7.2.0", @@ -269,9 +269,9 @@ "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==" }, "@babel/plugin-transform-react-jsx": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.2.0.tgz", - "integrity": "sha512-h/fZRel5wAfCqcKgq3OhbmYaReo7KkoJBpt8XnvpS7wqaNMqtw5xhxutzcm35iMUWucfAdT/nvGTsWln0JTg2Q==" + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", + "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==" }, "@babel/plugin-transform-react-jsx-self": { "version": "7.2.0", @@ -284,14 +284,14 @@ "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==" }, "@babel/plugin-transform-regenerator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", - "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.3.4.tgz", + "integrity": "sha512-hvJg8EReQvXT6G9H2MvNPXkv9zK36Vxa1+csAVTpE1J3j0zlHplw76uudEbJxgvqZzAq9Yh45FLD4pk5mKRFQA==" }, "@babel/plugin-transform-runtime": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz", - "integrity": "sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.3.4.tgz", + "integrity": "sha512-PaoARuztAdd5MgeVjAxnIDAIUet5KpogqaefQvPOmPYCxYoaPhautxDh3aO8a4xHsKgT/b9gSxR0BKK1MIewPA==" }, "@babel/plugin-transform-shorthand-properties": { "version": "7.2.0", @@ -299,9 +299,9 @@ "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==" }, "@babel/plugin-transform-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.0.tgz", - "integrity": "sha512-7TtPIdwjS/i5ZBlNiQePQCovDh9pAhVbp/nGVRBZuUdBiVRThyyLend3OHobc0G+RLCPPAN70+z/MAMhsgJd/A==" + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", + "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==" }, "@babel/plugin-transform-sticky-regex": { "version": "7.2.0", @@ -319,9 +319,9 @@ "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==" }, "@babel/plugin-transform-typescript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.2.0.tgz", - "integrity": "sha512-EnI7i2/gJ7ZNr2MuyvN2Hu+BHJENlxWte5XygPvfj/MbvtOkWor9zcnHpMMQL2YYaaCcqtIvJUyJ7QVfoGs7ew==" + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.3.2.tgz", + "integrity": "sha512-Pvco0x0ZSCnexJnshMfaibQ5hnK8aUHSvjCQhC1JR8eeg+iBwt0AtCO7gWxJ358zZevuf9wPSO5rv+WJcbHPXQ==" }, "@babel/plugin-transform-unicode-regex": { "version": "7.2.0", @@ -334,24 +334,24 @@ "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==" }, "@babel/runtime": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", - "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz", + "integrity": "sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==" }, "@babel/template": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz", - "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==" + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", + "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==" }, "@babel/traverse": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.6.tgz", - "integrity": "sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", + "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==" }, "@babel/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.0.tgz", - "integrity": "sha512-b4v7dyfApuKDvmPb+O488UlGuR1WbwMXFsO/cyqMrnfvRAChZKJAYeeglWTjUO1b9UghKKgepAQM5tsvBJca6A==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", + "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==" }, "acorn": { "version": "5.7.3", @@ -375,7 +375,7 @@ }, "babel-helper-is-nodes-equiv": { "version": "0.0.1", - "resolved": "http://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=" }, "babel-helper-is-void-0": { @@ -521,9 +521,9 @@ "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=" }, "babel-preset-meteor": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-meteor/-/babel-preset-meteor-7.2.0.tgz", - "integrity": "sha512-bwM5Zc78kPBHB0N5YEo2dtj9V+f34l3LX6y4ACS4JzQ/QW0zFRqa7jaGwt1tKkLtxRjInUg6yzcY8Iq8nLBwQg==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/babel-preset-meteor/-/babel-preset-meteor-7.3.4.tgz", + "integrity": "sha512-5S95oZLKn1RZexBCs3tPjjYXf2rJ8rBjkvJGkD9Bhut7XEGxDMMt1S+hhhGYo4ZwqOTmIeHv0EMppMWVxa7Lbg==" }, "babel-preset-minify": { "version": "0.5.0", @@ -531,9 +531,9 @@ "integrity": "sha512-xj1s9Mon+RFubH569vrGCayA9Fm2GMsCgDRm1Jb8SgctOB7KFcrVc2o8K3YHUyMz+SWP8aea75BoS8YfsXXuiA==" }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==" + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" }, "color-convert": { "version": "1.9.3", @@ -551,9 +551,9 @@ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==" }, "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==" }, "escape-string-regexp": { "version": "1.0.5", @@ -566,9 +566,9 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, "globals": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", - "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==" + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==" }, "has-flag": { "version": "3.0.0", @@ -606,9 +606,9 @@ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" }, "meteor-babel": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/meteor-babel/-/meteor-babel-7.2.0.tgz", - "integrity": "sha512-hHpqdYRSZ9dt3bMv1Pw8U2QVD5l7qspwTb7L2g4w3DV0sw5d8sK8XthdILQhVohVNpomOvIq8TiGH1/RubF8GA==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/meteor-babel/-/meteor-babel-7.3.4.tgz", + "integrity": "sha512-5aVvIa9yGRq2WlkO8tThWhc3f07escWb0t93KRYM0EnsUbv2rDmrAir0P+e+4rpyDDz7utOpIfuO1dT1F8SCSA==" }, "meteor-babel-helpers": { "version": "0.0.3", @@ -617,7 +617,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "ms": { @@ -651,9 +651,9 @@ "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" }, "regenerator-transform": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", - "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==" + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", + "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==" }, "regexpu-core": { "version": "4.4.0", @@ -672,7 +672,7 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" } } @@ -683,9 +683,9 @@ "integrity": "sha512-i0t837UYnWyJPCeesupZjmpThIppOPSs4I/uHmsWzQaiGQqtsYlbeJNN5i+61fe6UEA3Famc3IHnlm511poMnA==" }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==" }, "safe-buffer": { "version": "5.1.2", diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index 8478bb7751..0fc349846d 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,11 +6,11 @@ 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: '7.2.4' + version: '7.3.4' }); Npm.depends({ - 'meteor-babel': '7.2.0', + 'meteor-babel': '7.3.4', 'json5': '2.1.0' }); diff --git a/packages/ddp-server/package.js b/packages/ddp-server/package.js index c738ca316b..a662b14325 100644 --- a/packages/ddp-server/package.js +++ b/packages/ddp-server/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's latency-compensated distributed data server", - version: '2.2.0', + version: '2.3.0', documentation: null }); @@ -34,11 +34,6 @@ Package.onUse(function (api) { api.use('facts-base', 'server', {weak: true}); api.use('callback-hook', 'server'); - - // we depend on LocalCollection._diffObjects, _applyChanges, - // _idParse, _idStringify. - api.use('minimongo', 'server'); - api.export('DDPServer', 'server'); api.addFiles('stream_server.js', 'server'); diff --git a/packages/fetch/.npm/package/npm-shrinkwrap.json b/packages/fetch/.npm/package/npm-shrinkwrap.json index c9b411ca91..45e425d6da 100644 --- a/packages/fetch/.npm/package/npm-shrinkwrap.json +++ b/packages/fetch/.npm/package/npm-shrinkwrap.json @@ -2,9 +2,9 @@ "lockfileVersion": 1, "dependencies": { "node-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", - "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", + "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" }, "whatwg-fetch": { "version": "2.0.4", diff --git a/packages/fetch/package.js b/packages/fetch/package.js index d6abac6032..9c3969ff7b 100644 --- a/packages/fetch/package.js +++ b/packages/fetch/package.js @@ -1,12 +1,12 @@ Package.describe({ name: "fetch", - version: "0.1.0", + version: "0.1.1", summary: "Isomorphic modern/legacy/Node polyfill for WHATWG fetch()", documentation: "README.md" }); Npm.depends({ - "node-fetch": "2.1.2", + "node-fetch": "2.3.0", "whatwg-fetch": "2.0.4" }); diff --git a/packages/http/.npm/package/npm-shrinkwrap.json b/packages/http/.npm/package/npm-shrinkwrap.json index cb3d310365..aecc2e0c01 100644 --- a/packages/http/.npm/package/npm-shrinkwrap.json +++ b/packages/http/.npm/package/npm-shrinkwrap.json @@ -2,14 +2,14 @@ "lockfileVersion": 1, "dependencies": { "ajv": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", - "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=" + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=" }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==" }, "assert-plus": { "version": "1.0.0", @@ -27,19 +27,14 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=" - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=" }, "caseless": { "version": "0.12.0", @@ -52,27 +47,15 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==" }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==" - } - } - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -84,14 +67,14 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=" }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extsprintf": { "version": "1.3.0", @@ -99,9 +82,9 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -114,9 +97,9 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=" + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==" }, "getpass": { "version": "0.1.7", @@ -129,19 +112,9 @@ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=" - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==" - }, - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", + "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==" }, "http-signature": { "version": "1.2.0", @@ -184,64 +157,64 @@ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=" }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=" + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==" }, "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "psl": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==" + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==" }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==" + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=" - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", + "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==" }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=" + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==" }, "tunnel-agent": { "version": "0.6.0", @@ -254,9 +227,9 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "verror": { "version": "1.10.0", diff --git a/packages/http/package.js b/packages/http/package.js index 2591ed087b..a106c1c6c3 100644 --- a/packages/http/package.js +++ b/packages/http/package.js @@ -1,10 +1,10 @@ Package.describe({ summary: "Make HTTP calls to remote servers", - version: '1.4.1' + version: '1.4.2' }); Npm.depends({ - request: "2.83.0" + request: "2.88.0" }); Package.onUse(function (api) { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index bdd4114083..7ae9f7b667 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.8.0_2' + version: '1.8.1' }); Package.includeTool(); diff --git a/packages/meteor/client_environment.js b/packages/meteor/client_environment.js index 7f8b035d1a..074c655bc1 100644 --- a/packages/meteor/client_environment.js +++ b/packages/meteor/client_environment.js @@ -56,6 +56,17 @@ Meteor = { isModern: config.isModern }; +if (config.gitCommitHash) { + /** + * @summary Hexadecimal Git commit hash, if the application is using Git + * for version control. Undefined otherwise. + * @locus Anywhere + * @static + * @type {String} + */ + Meteor.gitCommitHash = config.gitCommitHash; +} + if (config.PUBLIC_SETTINGS) { /** * @summary `Meteor.settings` contains deployment-specific configuration options. You can initialize settings by passing the `--settings` option (which takes the name of a file containing JSON data) to `meteor run` or `meteor deploy`. When running your server directly (e.g. from a bundle), you instead specify settings by putting the JSON directly into the `METEOR_SETTINGS` environment variable. If the settings object contains a key named `public`, then `Meteor.settings.public` will be available on the client as well as the server. All other properties of `Meteor.settings` are only defined on the server. You can rely on `Meteor.settings` and `Meteor.settings.public` being defined objects (not undefined) on both client and server even if there are no settings specified. Changes to `Meteor.settings.public` at runtime will be picked up by new client connections. diff --git a/packages/meteor/package.js b/packages/meteor/package.js index 6e42352c3c..0b2c1d2877 100644 --- a/packages/meteor/package.js +++ b/packages/meteor/package.js @@ -2,7 +2,7 @@ Package.describe({ summary: "Core Meteor environment", - version: '1.9.2' + version: '1.9.3' }); Package.registerBuildPlugin({ diff --git a/packages/meteor/server_environment.js b/packages/meteor/server_environment.js index 5d28d81039..fa212ca30c 100644 --- a/packages/meteor/server_environment.js +++ b/packages/meteor/server_environment.js @@ -3,8 +3,11 @@ meteorEnv = { TEST_METADATA: process.env.TEST_METADATA || "{}" }; -if (typeof __meteor_runtime_config__ === "object") { - __meteor_runtime_config__.meteorEnv = meteorEnv; +const config = typeof __meteor_runtime_config__ === "object" && + __meteor_runtime_config__; + +if (config) { + config.meteorEnv = meteorEnv; } Meteor = { @@ -39,6 +42,10 @@ if (! Meteor.settings.public) { // server, it also mutates // `__meteor_runtime_config__.PUBLIC_SETTINGS`, and the modified // settings will be sent to the client. -if (typeof __meteor_runtime_config__ === "object") { - __meteor_runtime_config__.PUBLIC_SETTINGS = Meteor.settings.public; +if (config) { + config.PUBLIC_SETTINGS = Meteor.settings.public; +} + +if (config && config.gitCommitHash) { + Meteor.gitCommitHash = config.gitCommitHash; } diff --git a/packages/minifier-css/.npm/package/npm-shrinkwrap.json b/packages/minifier-css/.npm/package/npm-shrinkwrap.json index 4c196d165f..5d03701221 100644 --- a/packages/minifier-css/.npm/package/npm-shrinkwrap.json +++ b/packages/minifier-css/.npm/package/npm-shrinkwrap.json @@ -1,6 +1,11 @@ { "lockfileVersion": 1, "dependencies": { + "@types/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", + "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==" + }, "alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", @@ -22,9 +27,24 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "browserslist": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.4.tgz", - "integrity": "sha512-u5iz+ijIMUlmV8blX82VGFrB9ecnUg5qEt55CMZ/YJEhha+d8qpBfOFuutJ6F/VKRXjZoD33b6uvarpPxcl3RA==" + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.2.tgz", + "integrity": "sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg==" + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=" + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=" + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" }, "caniuse-api": { "version": "3.0.0", @@ -32,19 +52,26 @@ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==" }, "caniuse-lite": { - "version": "1.0.30000904", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000904.tgz", - "integrity": "sha512-M4sXvogCoY5Fp6fuXIaQG/MIexlEFQ3Lgwban+KlqiQUbUIkSmjAB8ZJIP79aj2cdqz2F1Lb+Z+5GwHvCrbLtg==" + "version": "1.0.30000939", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000939.tgz", + "integrity": "sha512-oXB23ImDJOgQpGjRv1tCtzAvJr4/OvrHi5SO2vUgB0g0xpdZZoA/BxfImiWfdwoYdUTtQrPsXsvYU/dmCSM8gg==" }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==" + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + } + } }, "coa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.1.tgz", - "integrity": "sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==" }, "color": { "version": "3.1.0", @@ -66,19 +93,14 @@ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==" }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" - }, "cosmiconfig": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz", - "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz", + "integrity": "sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==" }, "css-color-names": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" }, "css-declaration-sorter": { @@ -119,9 +141,9 @@ "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=" }, "css-what": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" }, "cssesc": { "version": "2.0.0", @@ -129,14 +151,14 @@ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" }, "cssnano": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.7.tgz", - "integrity": "sha512-AiXL90l+MDuQmRNyypG2P7ux7K4XklxYzNNUd5HXZCNcH8/N9bHPcpN97v8tXgRVeFL/Ed8iP8mVmAAu0ZpT7A==" + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.9.tgz", + "integrity": "sha512-osEbYy4kzaNY3nkd92Uf3hy5Jqb5Aztuv+Ze3Z6DjRhyntZDlb3YljiYDdJ05k167U86CZpSR+rbuJYN7N3oBQ==" }, "cssnano-preset-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.5.tgz", - "integrity": "sha512-f1uhya0ZAjPYtDD58QkBB0R+uYdzHPei7cDxJyQQIHt5acdhyGXaSXl2nDLzWHLwGFbZcHxQtkJS8mmNwnxTvw==" + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==" }, "cssnano-util-get-arguments": { "version": "4.0.0", @@ -181,21 +203,14 @@ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" }, "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" - } - } + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==" }, "domelementtype": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.2.1.tgz", - "integrity": "sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" }, "domutils": { "version": "1.7.0", @@ -208,9 +223,9 @@ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==" }, "electron-to-chromium": { - "version": "1.3.83", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.83.tgz", - "integrity": "sha512-DqJoDarxq50dcHsOOlMLNoy+qQitlMNbYb6wwbE0oUw2veHdRkpNrhmngiUYKMErdJ8SJ48rpJsZTQgy5SoEAA==" + "version": "1.3.113", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", + "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==" }, "entities": { "version": "1.1.2", @@ -223,9 +238,9 @@ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" }, "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==" + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==" }, "es-to-primitive": { "version": "1.2.0", @@ -282,6 +297,11 @@ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=" + }, "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", @@ -319,7 +339,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, "is-regex": { @@ -343,15 +363,20 @@ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==" }, "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==" + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", + "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==" }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -369,18 +394,18 @@ }, "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=" }, "node-releases": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.3.tgz", - "integrity": "sha512-ZaZWMsbuDcetpHmYeKWPO6e63pSXLb50M7lJgCbcM2nC/nQC3daNifmtp5a2kp7EWwYfhuvH6zLPWkrF8IiDdw==" + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.8.tgz", + "integrity": "sha512-gQm+K9mGCiT/NXHy+V/ZZS1N/LOaGGqRAAJJs3X9Ah1g+CIbRcBgNyoNYQ+SEtcyAtB9KqDruu+fF7nWjsqRaA==" }, "normalize-url": { "version": "3.3.0", @@ -393,9 +418,9 @@ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==" }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" }, "object.getownpropertydescriptors": { "version": "2.0.3", @@ -403,9 +428,9 @@ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=" }, "object.values": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", - "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==" }, "parse-json": { "version": "4.0.0", @@ -413,9 +438,9 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=" }, "postcss": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.5.tgz", - "integrity": "sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==" + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==" }, "postcss-calc": { "version": "7.0.1", @@ -423,9 +448,9 @@ "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==" }, "postcss-colormin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.2.tgz", - "integrity": "sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==" }, "postcss-convert-values": { "version": "4.0.1", @@ -433,9 +458,9 @@ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==" }, "postcss-discard-comments": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz", - "integrity": "sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==" }, "postcss-discard-duplicates": { "version": "4.0.2", @@ -453,14 +478,14 @@ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==" }, "postcss-merge-longhand": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.9.tgz", - "integrity": "sha512-UVMXrXF5K/kIwUbK/crPFCytpWbNX2Q3dZSc8+nQUgfOHrCT4+MHncpdxVphUlQeZxlLXUJbDyXc5NBhTnS2tA==" + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==" }, "postcss-merge-rules": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz", - "integrity": "sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", "dependencies": { "postcss-selector-parser": { "version": "3.1.1", @@ -475,19 +500,19 @@ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==" }, "postcss-minify-gradients": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz", - "integrity": "sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==" }, "postcss-minify-params": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz", - "integrity": "sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==" }, "postcss-minify-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz", - "integrity": "sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", "dependencies": { "postcss-selector-parser": { "version": "3.1.1", @@ -502,29 +527,29 @@ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==" }, "postcss-normalize-display-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz", - "integrity": "sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==" }, "postcss-normalize-positions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz", - "integrity": "sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==" }, "postcss-normalize-repeat-style": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz", - "integrity": "sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==" }, "postcss-normalize-string": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz", - "integrity": "sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==" }, "postcss-normalize-timing-functions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz", - "integrity": "sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==" }, "postcss-normalize-unicode": { "version": "4.0.1", @@ -537,34 +562,34 @@ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==" }, "postcss-normalize-whitespace": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz", - "integrity": "sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==" }, "postcss-ordered-values": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz", - "integrity": "sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q==" + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==" }, "postcss-reduce-initial": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz", - "integrity": "sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==" }, "postcss-reduce-transforms": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz", - "integrity": "sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==" }, "postcss-selector-parser": { - "version": "5.0.0-rc.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0-rc.4.tgz", - "integrity": "sha512-0XvfYuShrKlTk1ooUrVzMCFQRcypsdEIsGqh5IxC5rdtBi4/M/tDAJeSONwC2MTqEFsmPZYAV7Dd4X8rgAfV0A==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==" }, "postcss-svgo": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.1.tgz", - "integrity": "sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==" }, "postcss-unique-selectors": { "version": "4.0.1", @@ -581,6 +606,11 @@ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", @@ -629,9 +659,9 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" }, "stylehacks": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz", - "integrity": "sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", "dependencies": { "postcss-selector-parser": { "version": "3.1.1", @@ -641,14 +671,14 @@ } }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==" }, "svgo": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz", - "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", + "integrity": "sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==" }, "timsort": { "version": "0.3.0", diff --git a/packages/minifier-css/package.js b/packages/minifier-css/package.js index 03ccc2eec1..1bfcbb840a 100644 --- a/packages/minifier-css/package.js +++ b/packages/minifier-css/package.js @@ -1,11 +1,11 @@ Package.describe({ summary: 'CSS minifier', - version: '1.4.1' + version: '1.4.2' }); Npm.depends({ - postcss: '7.0.5', - cssnano: '4.1.7' + postcss: '7.0.14', + cssnano: '4.1.9' }); Package.onUse(function (api) { diff --git a/packages/minifier-js/.npm/package/npm-shrinkwrap.json b/packages/minifier-js/.npm/package/npm-shrinkwrap.json index 850953a030..eec2ad9379 100644 --- a/packages/minifier-js/.npm/package/npm-shrinkwrap.json +++ b/packages/minifier-js/.npm/package/npm-shrinkwrap.json @@ -17,14 +17,14 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==" + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==" }, "terser": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.9.2.tgz", - "integrity": "sha512-zOaL2PwflERZkVWbzv8rGbDR493fUaD/KXIUz/vjuvyH6Cxwu4pitM6con3Jy4bWtcQJwNOvN4rHltFeTEwZQA==" + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", + "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==" } } } diff --git a/packages/minifier-js/package.js b/packages/minifier-js/package.js index 53d4039357..e6c8fab292 100644 --- a/packages/minifier-js/package.js +++ b/packages/minifier-js/package.js @@ -1,10 +1,10 @@ Package.describe({ summary: "JavaScript minifier", - version: "2.4.0" + version: "2.4.1" }); Npm.depends({ - terser: "3.9.2" + terser: "3.16.1" }); Package.onUse(function (api) { diff --git a/packages/modern-browsers/package.js b/packages/modern-browsers/package.js index 002b8c14a8..854db1bb5b 100644 --- a/packages/modern-browsers/package.js +++ b/packages/modern-browsers/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modern-browsers", - version: "0.1.3", + version: "0.1.4", summary: "API for defining the boundary between modern and legacy " + "JavaScript clients", documentation: "README.md" diff --git a/packages/mongo/oplog_tailing.js b/packages/mongo/oplog_tailing.js index 1f704e26c7..8f2bc5dd76 100644 --- a/packages/mongo/oplog_tailing.js +++ b/packages/mongo/oplog_tailing.js @@ -270,7 +270,11 @@ _.extend(OplogHandle.prototype, { if (doc.o.applyOps) { // This was a successful transaction, so we need to apply the // operations that were involved. - doc.o.applyOps.forEach(handleDoc); + doc.o.applyOps.forEach(op => { + // See https://github.com/meteor/meteor/issues/10420. + op.ts = op.ts || doc.ts; + handleDoc(op); + }); return; } throw new Error("Unknown command " + EJSON.stringify(doc)); diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 6fbbb9bb6c..724a2b0c8f 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.6.1' + version: '1.6.2' }); Npm.depends({ diff --git a/packages/less/.gitignore b/packages/non-core/less/.gitignore similarity index 100% rename from packages/less/.gitignore rename to packages/non-core/less/.gitignore diff --git a/packages/less/.npm/plugin/compileLessBatch/.gitignore b/packages/non-core/less/.npm/plugin/compileLessBatch/.gitignore similarity index 100% rename from packages/less/.npm/plugin/compileLessBatch/.gitignore rename to packages/non-core/less/.npm/plugin/compileLessBatch/.gitignore diff --git a/packages/less/.npm/plugin/compileLessBatch/README b/packages/non-core/less/.npm/plugin/compileLessBatch/README similarity index 100% rename from packages/less/.npm/plugin/compileLessBatch/README rename to packages/non-core/less/.npm/plugin/compileLessBatch/README diff --git a/packages/less/.npm/plugin/compileLessBatch/npm-shrinkwrap.json b/packages/non-core/less/.npm/plugin/compileLessBatch/npm-shrinkwrap.json similarity index 100% rename from packages/less/.npm/plugin/compileLessBatch/npm-shrinkwrap.json rename to packages/non-core/less/.npm/plugin/compileLessBatch/npm-shrinkwrap.json diff --git a/packages/less/README.md b/packages/non-core/less/README.md similarity index 100% rename from packages/less/README.md rename to packages/non-core/less/README.md diff --git a/packages/less/less_tests.js b/packages/non-core/less/less_tests.js similarity index 100% rename from packages/less/less_tests.js rename to packages/non-core/less/less_tests.js diff --git a/packages/less/package.js b/packages/non-core/less/package.js similarity index 100% rename from packages/less/package.js rename to packages/non-core/less/package.js diff --git a/packages/less/plugin/compile-less.js b/packages/non-core/less/plugin/compile-less.js similarity index 100% rename from packages/less/plugin/compile-less.js rename to packages/non-core/less/plugin/compile-less.js diff --git a/packages/less/tests/dir/in-dir.import.less b/packages/non-core/less/tests/dir/in-dir.import.less similarity index 100% rename from packages/less/tests/dir/in-dir.import.less rename to packages/non-core/less/tests/dir/in-dir.import.less diff --git a/packages/less/tests/dir/in-dir2.import.less b/packages/non-core/less/tests/dir/in-dir2.import.less similarity index 100% rename from packages/less/tests/dir/in-dir2.import.less rename to packages/non-core/less/tests/dir/in-dir2.import.less diff --git a/packages/less/tests/dir/root.less b/packages/non-core/less/tests/dir/root.less similarity index 100% rename from packages/less/tests/dir/root.less rename to packages/non-core/less/tests/dir/root.less diff --git a/packages/less/tests/dir/subdir/in-subdir.import.less b/packages/non-core/less/tests/dir/subdir/in-subdir.import.less similarity index 100% rename from packages/less/tests/dir/subdir/in-subdir.import.less rename to packages/non-core/less/tests/dir/subdir/in-subdir.import.less diff --git a/packages/less/tests/imports/not-included.less b/packages/non-core/less/tests/imports/not-included.less similarity index 100% rename from packages/less/tests/imports/not-included.less rename to packages/non-core/less/tests/imports/not-included.less diff --git a/packages/less/tests/top.import.less b/packages/non-core/less/tests/top.import.less similarity index 100% rename from packages/less/tests/top.import.less rename to packages/non-core/less/tests/top.import.less diff --git a/packages/less/tests/top2.less b/packages/non-core/less/tests/top2.less similarity index 100% rename from packages/less/tests/top2.less rename to packages/non-core/less/tests/top2.less diff --git a/packages/less/tests/top3.import.less b/packages/non-core/less/tests/top3.import.less similarity index 100% rename from packages/less/tests/top3.import.less rename to packages/non-core/less/tests/top3.import.less diff --git a/packages/non-core/mongo-decimal/.npm/package/npm-shrinkwrap.json b/packages/non-core/mongo-decimal/.npm/package/npm-shrinkwrap.json index 9dc4ea8214..071d001841 100644 --- a/packages/non-core/mongo-decimal/.npm/package/npm-shrinkwrap.json +++ b/packages/non-core/mongo-decimal/.npm/package/npm-shrinkwrap.json @@ -2,9 +2,9 @@ "lockfileVersion": 1, "dependencies": { "decimal.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-9.0.1.tgz", - "integrity": "sha512-2h0iKbJwnImBk4TGk7CG1xadoA0g3LDPlQhQzbZ221zvG0p2YVUedbKIPsOZXKZGx6YmZMJKYOalpCMxSdDqTQ==" + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.0.2.tgz", + "integrity": "sha512-qL5tUTXAWjB5cSBfm0V2a4jO5FaDLumCfwc/0f7WaTOT3WU8pIeq2HHrd98eXHtbey4qFWlaPzfml1JWIoO9TQ==" } } } diff --git a/packages/non-core/mongo-decimal/package.js b/packages/non-core/mongo-decimal/package.js index f158233b14..29c590cf28 100644 --- a/packages/non-core/mongo-decimal/package.js +++ b/packages/non-core/mongo-decimal/package.js @@ -1,10 +1,10 @@ Package.describe({ summary: "JS simulation of MongoDB Decimal128 type", - version: '0.1.0' + version: '0.1.1' }); Npm.depends({ - "decimal.js": "9.0.1" + "decimal.js": "10.0.2" }); Package.onUse(function (api) { diff --git a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json index 9b217ff09c..83cc9f223b 100644 --- a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json +++ b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json @@ -7,19 +7,19 @@ "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA==" }, "memory-pager": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.1.0.tgz", - "integrity": "sha512-Mf9OHV/Y7h6YWDxTzX/b4ZZ4oh9NSXblQL8dtPCOomOtZciEHxePR78+uHFLLlsk01A6jVHhHsQZZ/WcIPpnzg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" }, "mongodb": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.6.tgz", - "integrity": "sha512-E5QJuXQoMlT7KyCYqNNMfAkhfQD79AT4F8Xd+6x37OX+8BL17GyXyWvfm6wuyx4wnzCCPoCSLeMeUN2S7dU9yw==" + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.13.tgz", + "integrity": "sha512-sz2dhvBZQWf3LRNDhbd30KHVzdjZx9IKC0L+kSZ/gzYquCF5zPOgGqRz6sSCqYZtKP2ekB4nfLxhGtzGHnIKxA==" }, "mongodb-core": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.5.tgz", - "integrity": "sha512-emT/tM4ZBinqd6RZok+EzDdtN4LjYJIckv71qQVOEFmvXgT5cperZegVmTgox/1cx4XQu6LJ5ZuIwipP/eKdQg==" + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.11.tgz", + "integrity": "sha512-rD2US2s5qk/ckbiiGFHeu+yKYDXdJ1G87F6CG3YdaZpzdOm5zpoAZd/EKbPmFO6cQZ+XVXBXBJ660sSI0gc6qg==" }, "require_optional": { "version": "1.0.1", @@ -42,9 +42,9 @@ "integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==" }, "semver": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", - "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" }, "sparse-bitfield": { "version": "3.0.3", diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index ed606764ca..656966a6b6 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,12 +3,12 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: "3.1.1", + version: "3.1.2", documentation: null }); Npm.depends({ - mongodb: "3.1.6" + mongodb: "3.1.13" }); Package.onUse(function (api) { diff --git a/packages/reactive-dict/package.js b/packages/reactive-dict/package.js index 16f723432b..ee7d4e4e9f 100644 --- a/packages/reactive-dict/package.js +++ b/packages/reactive-dict/package.js @@ -1,12 +1,12 @@ Package.describe({ summary: "Reactive dictionary", - version: '1.2.1' + version: '1.3.0' }); Package.onUse(function (api) { api.use(['tracker', 'ejson', 'ecmascript']); // If we are loading mongo-livedata, let you store ObjectIDs in it. - api.use('mongo', {weak: true}); + api.use(['mongo', 'reload'], { weak: true }); api.mainModule('migration.js'); api.export('ReactiveDict'); }); diff --git a/packages/reload/package.js b/packages/reload/package.js index b4fd329aa8..c7269238ca 100644 --- a/packages/reload/package.js +++ b/packages/reload/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Reload the page while preserving application state.", - version: '1.2.0' + version: '1.3.0' }); Package.onUse(function (api) { diff --git a/packages/reload/reload.js b/packages/reload/reload.js index 5ec40abaaf..4c7486f01d 100644 --- a/packages/reload/reload.js +++ b/packages/reload/reload.js @@ -60,7 +60,7 @@ try { // Be consistently null, for safety safeSessionStorage = null; } -} catch(e) { +} catch (e) { // Expected on chrome with strict security, or if sessionStorage not supported safeSessionStorage = null; } @@ -125,7 +125,7 @@ Reload._onMigrate = function (name, callback) { callback = name; name = undefined; } - providers.push({name: name, callback: callback}); + providers.push({ name: name, callback: callback }); }; // Called by packages when they start up. @@ -220,17 +220,27 @@ Reload._reload = function (options) { setTimeout(reload, 1); } + function forceBrowserReload() { + // We'd like to make the browser reload the page using location.replace() + // instead of location.reload(), because this avoids validating assets + // with the server if we still have a valid cached copy. This doesn't work + // when the location contains a hash however, because that wouldn't reload + // the page and just scroll to the hash location instead. + if (window.location.hash || window.location.href.endsWith("#")) { + window.location.reload(); + } else { + window.location.replace(window.location.href); + } + } + function reload() { if (Reload._migrate(tryReload, options)) { - // We'd like to make the browser reload the page using location.replace() - // instead of location.reload(), because this avoids validating assets - // with the server if we still have a valid cached copy. This doesn't work - // when the location contains a hash however, because that wouldn't reload - // the page and just scroll to the hash location instead. - if (window.location.hash || window.location.href.endsWith("#")) { - window.location.reload(); + if (Meteor.isCordova) { + WebAppLocalServer.switchToPendingVersion(() => { + forceBrowserReload(); + }); } else { - window.location.replace(window.location.href); + forceBrowserReload(); } } } diff --git a/packages/standard-minifier-css/package.js b/packages/standard-minifier-css/package.js index f79e39d66e..76871c97f9 100644 --- a/packages/standard-minifier-css/package.js +++ b/packages/standard-minifier-css/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-css', - version: '1.5.2', + version: '1.5.3', summary: 'Standard css minifier used with Meteor apps by default.', documentation: 'README.md' }); diff --git a/packages/standard-minifier-js/package.js b/packages/standard-minifier-js/package.js index d288bf8201..6f98cf77c3 100644 --- a/packages/standard-minifier-js/package.js +++ b/packages/standard-minifier-js/package.js @@ -1,6 +1,6 @@ Package.describe({ name: 'standard-minifier-js', - version: '2.4.0', + version: '2.4.1', summary: 'Standard javascript minifiers used with Meteor apps by default.', documentation: 'README.md', }); diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 58617b104f..8a0609e5c9 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.7.2' + version: '1.7.3' }); Npm.depends({"basic-auth-connect": "1.0.0", @@ -20,9 +20,9 @@ Npm.strip({ }); Cordova.depends({ - 'cordova-plugin-whitelist': '1.3.2', - 'cordova-plugin-wkwebview-engine': '1.1.3', - 'cordova-plugin-meteor-webapp': '1.6.0' + 'cordova-plugin-whitelist': '1.3.3', + 'cordova-plugin-wkwebview-engine': '1.1.4', + 'cordova-plugin-meteor-webapp': '1.6.5' }); Package.onUse(function (api) { diff --git a/packages/webapp/webapp_server.js b/packages/webapp/webapp_server.js index 1037d44aa7..784964b08d 100644 --- a/packages/webapp/webapp_server.js +++ b/packages/webapp/webapp_server.js @@ -14,10 +14,7 @@ import query from "qs-middleware"; import parseRequest from "parseurl"; import basicAuth from "basic-auth-connect"; import { lookup as lookupUserAgent } from "useragent"; -import { - isModern, - calculateHashOfMinimumVersions, -} from "meteor/modern-browsers"; +import { isModern } from "meteor/modern-browsers"; import send from "send"; import { removeExistingSocketFile, @@ -64,6 +61,16 @@ var sha1 = function (contents) { return hash.digest('hex'); }; + function shouldCompress(req, res) { + if (req.headers['x-no-compression']) { + // don't compress responses with this request header + return false; + } + + // fallback to standard filter function + return compress.filter(req, res); +}; + // #BrowserIdentification // // We have multiple places that want to identify the browser: the @@ -356,8 +363,6 @@ WebAppInternals.generateBoilerplateInstance = function (arch, // - content: the stringified content that should be served at this path // - absolutePath: the absolute path on disk to the file -var staticFilesByArch; - // Serve static files from the manifest or added with // `addStaticJs`. Exported for tests. WebAppInternals.staticFilesMiddleware = async function ( @@ -408,7 +413,7 @@ WebAppInternals.staticFilesMiddleware = async function ( return; } - const info = getStaticFileInfo(pathname, path, arch); + const info = getStaticFileInfo(staticFilesByArch, pathname, path, arch); if (! info) { next(); return; @@ -478,7 +483,7 @@ WebAppInternals.staticFilesMiddleware = async function ( } }; -function getStaticFileInfo(originalPath, path, arch) { +function getStaticFileInfo(staticFilesByArch, originalPath, path, arch) { if (! hasOwn.call(WebApp.clientPrograms, arch)) { return null; } @@ -587,14 +592,16 @@ function runWebAppServer() { WebAppInternals.reloadClientPrograms = function () { syncQueue.runTask(function() { - staticFilesByArch = Object.create(null); + const staticFilesByArch = Object.create(null); const { configJson } = __meteor_bootstrap__; const clientArchs = configJson.clientArchs || Object.keys(configJson.clientPaths); try { - clientArchs.forEach(generateClientProgram); + clientArchs.forEach(arch => { + generateClientProgram(arch, staticFilesByArch); + }); WebAppInternals.staticFilesByArch = staticFilesByArch; } catch (e) { Log.error("Error reloading the client program: " + e.stack); @@ -628,7 +635,10 @@ function runWebAppServer() { syncQueue.runTask(() => generateClientProgram(arch)); }; - function generateClientProgram(arch) { + function generateClientProgram( + arch, + staticFilesByArch = WebAppInternals.staticFilesByArch, + ) { const clientDir = pathJoin( pathDirname(__meteor_bootstrap__.serverDir), arch, @@ -683,11 +693,6 @@ function runWebAppServer() { const { PUBLIC_SETTINGS } = __meteor_runtime_config__; const configOverrides = { PUBLIC_SETTINGS, - // Since the minimum modern versions defined in the modern-versions - // package affect which bundle a given client receives, any changes - // in those versions should trigger a corresponding change in the - // versions calculated below. - minimumModernVersionsHash: calculateHashOfMinimumVersions(), }; const oldProgram = WebApp.clientPrograms[arch]; @@ -697,6 +702,10 @@ function runWebAppServer() { // Use arrow functions so that these versions can be lazily // calculated later, and so that they will not be included in the // staticFiles[manifestUrl].content string below. + // + // Note: these version calculations must be kept in agreement with + // CordovaBuilder#appendVersion in tools/cordova/builder.js, or hot + // code push will reload Cordova apps unnecessarily. version: () => WebAppHashing.calculateClientHash( manifest, null, configOverrides), versionRefreshable: () => WebAppHashing.calculateClientHash( @@ -819,7 +828,7 @@ function runWebAppServer() { app.use(rawConnectHandlers); // Auto-compress any json, javascript, or text. - app.use(compress()); + app.use(compress({filter: shouldCompress})); // parse cookies into an object app.use(cookieParser()); @@ -887,7 +896,10 @@ function runWebAppServer() { // Serve static files from the manifest. // This is inspired by the 'static' middleware. app.use(function (req, res, next) { - WebAppInternals.staticFilesMiddleware(staticFilesByArch, req, res, next); + WebAppInternals.staticFilesMiddleware( + WebAppInternals.staticFilesByArch, + req, res, next + ); }); // Core Meteor packages like dynamic-import can add handlers before diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index f9c32fbad5..1e09057fff 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.8.0.2-rc.2", + "version": "1.8.1-rc.1", "recommended": false, "official": false, "description": "Meteor" diff --git a/scripts/admin/meteor-release-official.json b/scripts/admin/meteor-release-official.json index 286e57026e..fe8a051929 100644 --- a/scripts/admin/meteor-release-official.json +++ b/scripts/admin/meteor-release-official.json @@ -1,11 +1,12 @@ { "track": "METEOR", - "version": "1.8.0.2", + "version": "1.8.1", "recommended": false, "official": true, "patchFrom": [ "1.8", - "1.8.0.1" + "1.8.0.1", + "1.8.0.2" ], "description": "The Official Meteor Distribution" } diff --git a/scripts/build-dev-bundle-common.sh b/scripts/build-dev-bundle-common.sh index 1bc195553a..f4905d8cd7 100644 --- a/scripts/build-dev-bundle-common.sh +++ b/scripts/build-dev-bundle-common.sh @@ -5,10 +5,10 @@ set -u UNAME=$(uname) ARCH=$(uname -m) -NODE_VERSION=8.11.4 -MONGO_VERSION_64BIT=4.0.2 -MONGO_VERSION_32BIT=3.2.19 -NPM_VERSION=6.4.1 +NODE_VERSION=8.15.1 +MONGO_VERSION_64BIT=4.0.6 +MONGO_VERSION_32BIT=3.2.22 +NPM_VERSION=6.9.0 # If we built Node from source on Jenkins, this is the build number. NODE_BUILD_NUMBER= diff --git a/scripts/dev-bundle-server-package.js b/scripts/dev-bundle-server-package.js index 50dd92f20f..d875b7e55e 100644 --- a/scripts/dev-bundle-server-package.js +++ b/scripts/dev-bundle-server-package.js @@ -8,8 +8,8 @@ var packageJson = { name: "meteor-dev-bundle", private: true, dependencies: { + fibers: "3.1.1", "meteor-promise": "0.8.7", - fibers: "2.0.0", promise: "8.0.2", // 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 diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index 394f385f2a..ea910e781e 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -10,17 +10,16 @@ var packageJson = { dependencies: { // Explicit dependency because we are replacing it with a bundled version // and we want to make sure there are no dependencies on a higher version - npm: "6.4.1", - pacote: "https://github.com/meteor/pacote/tarball/a3285854a68e4969d6c8abaa74407f7d113b178f", + npm: "6.9.0", + pacote: "https://github.com/meteor/pacote/tarball/c5043daa1b768594e01d76275e3854fc19f038f9", "node-gyp": "3.7.0", "node-pre-gyp": "0.10.3", - "meteor-babel": "7.2.0", + "meteor-babel": "7.3.4", "meteor-promise": "0.8.7", - promise: "8.0.1", reify: "0.17.3", - fibers: "2.0.0", + fibers: "3.1.1", // So that Babel can emit require("@babel/runtime/helpers/...") calls. - "@babel/runtime": "7.2.0", + "@babel/runtime": "7.3.4", // For backwards compatibility with isopackets that still depend on // babel-runtime rather than @babel/runtime. "babel-runtime": "7.0.0-beta.3", @@ -30,12 +29,12 @@ var packageJson = { underscore: "1.5.2", "source-map-support": "https://github.com/meteor/node-source-map-support/tarball/1912478769d76e5df4c365e147f25896aee6375e", semver: "5.4.1", - request: "2.83.0", + request: "2.88.0", uuid: "3.3.2", fstream: "https://github.com/meteor/fstream/tarball/cf4ea6c175355cec7bee38311e170d08c4078a5d", tar: "2.2.1", kexec: "3.0.0", - "source-map": "0.5.3", + "source-map": "0.5.7", chalk: "0.5.1", sqlite3: "3.1.8", netroute: "1.0.2", @@ -52,8 +51,8 @@ var packageJson = { escope: "3.6.0", split2: "2.2.0", multipipe: "2.0.1", - pathwatcher: "7.1.1", - optimism: "0.6.3", + pathwatcher: "8.0.2", + optimism: "0.8.3", 'lru-cache': '4.1.3' } }; diff --git a/scripts/generate-dev-bundle.sh b/scripts/generate-dev-bundle.sh index 0c2fa22843..57db624c73 100755 --- a/scripts/generate-dev-bundle.sh +++ b/scripts/generate-dev-bundle.sh @@ -115,6 +115,9 @@ ls -al "$INCLUDE_PATH" mkdir "${DIR}/build/npm-server-install" cd "${DIR}/build/npm-server-install" node "${CHECKOUT_DIR}/scripts/dev-bundle-server-package.js" > package.json +# XXX For no apparent reason this npm install will fail with an EISDIR +# error if we do not help it by creating the .npm/_locks directory. +mkdir -p "${DIR}/.npm/_locks" npm install npm shrinkwrap @@ -125,19 +128,6 @@ cp -R node_modules/* "${DIR}/server-lib/node_modules/" mkdir -p "${DIR}/etc" mv package.json npm-shrinkwrap.json "${DIR}/etc/" -# Fibers ships with compiled versions of its C code for a dozen platforms. This -# bloats our dev bundle. Remove all the ones other than our -# architecture. (Expression based on build.js in fibers source.) -shrink_fibers () { - FIBERS_ARCH=$(node -p -e 'process.platform + "-" + process.arch + "-" + process.versions.modules') - mv $FIBERS_ARCH .. - rm -rf * - mv ../$FIBERS_ARCH . -} - -cd "$DIR/server-lib/node_modules/fibers/bin" -shrink_fibers - # Now, install the npm modules which are the dependencies of the command-line # tool. mkdir "${DIR}/build/npm-tool-install" @@ -195,9 +185,6 @@ delete moment/min # Remove esprima tests to reduce the size of the dev bundle find . -path '*/esprima-fb/test' | xargs rm -rf -cd "$DIR/lib/node_modules/fibers/bin" -shrink_fibers - # Sanity check to see if we're not breaking anything by replacing npm INSTALLED_NPM_VERSION=$(cat "$DIR/lib/node_modules/npm/package.json" | xargs -0 node -e "console.log(JSON.parse(process.argv[1]).version)") diff --git a/tools/cli/example-repositories.js b/tools/cli/example-repositories.js index 42b9b4a16a..bda0132177 100644 --- a/tools/cli/example-repositories.js +++ b/tools/cli/example-repositories.js @@ -14,7 +14,7 @@ export const EXAMPLE_REPOSITORIES = { 'repo': 'https://github.com/meteor/todos', 'branch': 'react', }, - 'angular2-boilerplate': { - repo: 'https://github.com/bsliran/angular2-meteor-base' + 'angular-boilerplate': { + repo: 'https://github.com/Urigo/angular-meteor-base.git' } }; diff --git a/tools/console/console.js b/tools/console/console.js index 73df9f1cde..e16a891fbb 100644 --- a/tools/console/console.js +++ b/tools/console/console.js @@ -89,6 +89,7 @@ const PROGRESS_BAR_FORMAT = '[:bar] :percent :etas'; const TEMP_STATUS_LENGTH = STATUS_MAX_LENGTH + 12; const STATUS_INTERVAL_MS = 50; +const PROGRESS_THROTTLE_MS = 300; // Message to show when we don't know what we're doing // XXX: ? FALLBACK_STATUS = 'Pondering'; @@ -309,9 +310,11 @@ class ProgressDisplayFull { this._lastWrittenLine = null; this._lastWrittenTime = 0; + this._renderTimeout = null; } depaint() { + this._clearDelayedRender(); this._stream.write(spacesString(this._printedLength) + CARRIAGE_RETURN); } @@ -332,7 +335,15 @@ class ProgressDisplayFull { if (startTime) { this._progressBarRenderer.start = startTime; } - this._render(); + + if (!this._renderTimeout && this._lastWrittenTime) { + this._rerenderTimeout = setTimeout(() => { + this._rerenderTimeout = null; + this._render() + }, PROGRESS_THROTTLE_MS); + } else if (this._lastWrittenTime === 0) { + this._render(); + } } repaint() { @@ -343,8 +354,18 @@ class ProgressDisplayFull { this._headless = !! headless; } + _clearDelayedRender() { + if (this._rerenderTimeout) { + clearTimeout(this._rerenderTimeout); + this._rerenderTimeout = null; + } + } + _render() { - // XXX: Throttle these updates? + if (this._rerenderTimeout) { + this._clearDelayedRender(); + } + // XXX: Or maybe just jump to the correct position? var progressGraphic = ''; diff --git a/tools/cordova/builder.js b/tools/cordova/builder.js index 12cdbe7a4a..1c77569b20 100644 --- a/tools/cordova/builder.js +++ b/tools/cordova/builder.js @@ -451,6 +451,10 @@ export class CordovaBuilder { } appendVersion(program, publicSettings) { + // Note: these version calculations must be kept in agreement with + // generateClientProgram in packages/webapp/webapp_server.js, or hot + // code push will reload the app unnecessarily. + let configDummy = {}; configDummy.PUBLIC_SETTINGS = publicSettings || {}; @@ -480,6 +484,7 @@ export class CordovaBuilder { const runtimeConfig = { meteorRelease: meteorRelease, + gitCommitHash: files.findGitCommitHash(applicationPath), ROOT_URL: mobileServerUrl, // XXX propagate it from this.options? ROOT_URL_PATH_PREFIX: '', diff --git a/tools/cordova/index.js b/tools/cordova/index.js index 7763f41929..3038af4caf 100644 --- a/tools/cordova/index.js +++ b/tools/cordova/index.js @@ -14,11 +14,8 @@ export const CORDOVA_DEV_BUNDLE_VERSIONS = { }; export const CORDOVA_PLATFORM_VERSIONS = { - // This commit represents cordova-android@6.4.0 plus - // https://github.com/apache/cordova-android/pull/417, aka - // https://github.com/meteor/cordova-android/tree/v6.4.0-with-pr-417: - 'android': 'https://github.com/meteor/cordova-android/tarball/317db7df0f7a054444197bc6d28453cf4ab23280', - 'ios': '4.5.4' + 'android': '7.1.4', + 'ios': '4.5.5', }; const PLATFORM_TO_DISPLAY_NAME_MAP = { diff --git a/tools/cordova/project.js b/tools/cordova/project.js index e118a0fd30..d543c05116 100644 --- a/tools/cordova/project.js +++ b/tools/cordova/project.js @@ -87,6 +87,9 @@ export class CordovaProject { this.pluginsDir = files.pathJoin(this.projectRoot, 'plugins'); + this.buildJsonPath = files.convertToOSPath( + files.pathJoin(this.projectRoot, 'build.json')); + this.createIfNeeded(); } @@ -182,6 +185,31 @@ outdated platforms`); undefined, undefined, config); }, undefined, null); } + + this.writeBuildJson(); + } + + writeBuildJson() { + if (files.exists(this.buildJsonPath)) { + return; + } + + const iosCommonOptions = { + // See https://github.com/apache/cordova-ios/issues/407: + buildFlag: [ + "-UseModernBuildSystem=0" + ] + }; + + files.writeFile( + this.buildJsonPath, + JSON.stringify({ + ios: { + debug: iosCommonOptions, + release: iosCommonOptions, + } + }, null, 2) + "\n", + ); } // Preparing @@ -240,8 +268,10 @@ outdated platforms`); delete require.cache[files.pathJoin(this.projectRoot, 'platforms/ios/cordova/lib/prepare.js')]; - const commandOptions = _.extend(this.defaultOptions, - { platforms: [platform] }); + const commandOptions = { + ...this.defaultOptions, + platforms: [platform], + }; this.runCommands(`preparing Cordova project for platform \ ${displayNameForPlatform(platform)}`, async () => { @@ -254,8 +284,11 @@ ${displayNameForPlatform(platform)}`, async () => { buildForPlatform(platform, options = {}, extraPaths) { assert(platform); - const commandOptions = _.extend(this.defaultOptions, - { platforms: [platform], options: options }); + const commandOptions = { + ...this.defaultOptions, + platforms: [platform], + options, + }; this.runCommands(`building Cordova app for platform \ ${displayNameForPlatform(platform)}`, async () => { @@ -266,6 +299,7 @@ ${displayNameForPlatform(platform)}`, async () => { // Running async run(platform, isDevice, options = [], extraPaths = []) { + options.push('--buildConfig', this.buildJsonPath); options.push(isDevice ? '--device' : '--emulator'); let env = this.defaultEnvWithPathsAdded(...extraPaths); @@ -760,7 +794,11 @@ convenience, but you should adjust your dependencies.`); // Cordova commands support get defaultOptions() { - return { silent: !Console.verbose, verbose: Console.verbose }; + return { + silent: !Console.verbose, + verbose: Console.verbose, + buildConfig: this.buildJsonPath, + }; } defaultEnvWithPathsAdded(...extraPaths) { diff --git a/tools/fs/files.js b/tools/fs/files.js index d55948eb29..02a4c7353e 100644 --- a/tools/fs/files.js +++ b/tools/fs/files.js @@ -12,7 +12,7 @@ var util = require('util'); var _ = require('underscore'); var Fiber = require('fibers'); var crypto = require('crypto'); -var spawn = require("child_process").spawn; +const { spawn, execFile } = require("child_process"); var rimraf = require('rimraf'); var sourcemap = require('source-map'); @@ -129,6 +129,29 @@ files.findPackageDir = function (filepath) { return findUpwards(isPackageDir, filepath); }; +// Returns the hash of the current Git HEAD revision of the application, +// if possible. Always resolves rather than rejecting (unless something +// truly unexpected happens). The result value is a string when a Git +// revision was successfully resolved, or undefined otherwise. +files.findGitCommitHash = function (path) { + return new Promise(resolve => { + const appDir = files.findAppDir(path); + if (appDir) { + const proc = execFile("git", ["rev-parse", "HEAD"], { + cwd: files.convertToOSPath(appDir), + }, (error, stdout) => { + if (! error && typeof stdout === "string") { + resolve(stdout.trim()); + } else { + resolve(); + } + }); + } else { + resolve(); + } + }).await(); +}; + // create a .gitignore file in dirPath if one doesn't exist. add // 'entry' to the .gitignore on its own line at the bottom of the // file, if the exact line does not already exist in the file. @@ -528,7 +551,7 @@ files.cp_r = function(from, to, options = {}) { // create a symlink, overwriting the target link, file, or directory // if it exists -export function symlinkWithOverwrite(source, target) { +export const symlinkWithOverwrite = Profile("files.symlinkWithOverwrite", function symlinkWithOverwrite(source, target) { const args = [source, target]; if (process.platform === "win32") { @@ -543,8 +566,12 @@ export function symlinkWithOverwrite(source, target) { files.symlink(...args); } catch (e) { if (e.code === "EEXIST") { + function normalizePath (path) { + return files.convertToOSPath(path).replace(/[\/\\]$/, "") + } + if (files.lstat(target).isSymbolicLink() && - files.readlink(target) === source) { + normalizePath(files.readlink(target)) === normalizePath(source)) { // If the target already points to the desired source, we don't // need to do anything. return; @@ -556,7 +583,7 @@ export function symlinkWithOverwrite(source, target) { throw e; } } -} +}) /** * Get every path in a directory recursively, treating symlinks as files @@ -1005,7 +1032,12 @@ files.createTarball = Profile(function (dirPath, tarball) { // is in a state other than initial or final".) files.renameDirAlmostAtomically = Profile("files.renameDirAlmostAtomically", (fromDir, toDir) => { - const garbageDir = `${toDir}-garbage-${utils.randomToken()}`; + const garbageDir = files.pathJoin( + files.pathDirname(toDir), + // Begin the base filename with a '.' character so that it can be + // ignored by other directory-scanning code. + `.${files.pathBasename(toDir)}-garbage-${utils.randomToken()}`, + ); // Get old dir out of the way, if it exists. let cleanupGarbage = false; @@ -1054,7 +1086,7 @@ files.renameDirAlmostAtomically = // ... and take out the trash. if (cleanupGarbage) { // We don't care about how long this takes, so we'll let it go async. - files.rm_recursive(garbageDir); + files.rm_recursive_async(garbageDir); } }); @@ -1757,11 +1789,6 @@ function enableCache(name) { }; } -enableCache("readdir"); -enableCache("realpath"); -enableCache("stat"); -enableCache("lstat"); - // The fs.exists method is deprecated in Node v4: // https://nodejs.org/api/fs.html#fs_fs_exists_path_callback files.exists = @@ -1870,3 +1897,8 @@ files.readBufferWithLengthAndOffset = function (filename, length, offset) { } return data; }; + +enableCache("readdir"); +enableCache("realpath"); +enableCache("stat"); +enableCache("lstat"); diff --git a/tools/fs/watch.js b/tools/fs/watch.js index 896cff26af..7b0a1371f9 100644 --- a/tools/fs/watch.js +++ b/tools/fs/watch.js @@ -6,8 +6,6 @@ import {coalesce} from '../utils/func-utils.js'; import {Profile} from '../tool-env/profile.js'; import { - optimisticStatOrNull, - optimisticReaddir, optimisticHashOrNull, } from "./optimistic.js"; @@ -272,7 +270,7 @@ export const sha512 = Profile("sha512", function (...args) { return hash.digest('base64'); }); -export function readDirectory({absPath, include, exclude, names}) { +function readAndStatDirectory(absPath) { // Read the directory. try { var contents = files.readdir(absPath); @@ -303,8 +301,12 @@ export function readDirectory({absPath, include, exclude, names}) { contentsWithSlashes.push(entry); }); + return contentsWithSlashes +} + +function filterDirectoryContents(contents, { include, exclude, names }) { // Filter based on regexps. - var filtered = contentsWithSlashes.filter((entry) => { + return contents.filter((entry) => { // Is it one of the names we explicitly requested? if (names && names.indexOf(entry) !== -1) { return true; @@ -318,11 +320,12 @@ export function readDirectory({absPath, include, exclude, names}) { return true; } return false; - }); + }).sort(); +} - // Sort it! - filtered.sort(); - return filtered; +export function readDirectory({absPath, include, exclude, names}) { + const contents = readAndStatDirectory(absPath); + return filterDirectoryContents(contents, { include, exclude, names }); } // All fields are private. @@ -330,6 +333,9 @@ export class Watcher { constructor(options) { var self = this; + // Run initial check asyncly + self._async = options.async; + // The set to watch. self.watchSet = options.watchSet; if (! self.watchSet) { @@ -407,40 +413,38 @@ export class Watcher { return true; } - _fireIfDirectoryChanged(info) { + // infos must all be for the same directory + _fireIfDirectoryChanged(infos) { var self = this; if (self.stopped) { return true; } - var newContents = readDirectory({ - absPath: info.absPath, - include: info.include, - exclude: info.exclude, - names: info.names - }); + const contents = readAndStatDirectory(infos[0].absPath); - // If the directory has changed (including being deleted or created). - if (! _.isEqual(info.contents, newContents)) { - self._fire(); - return true; + for (let i = 0; i < infos.length; i++) { + const info = infos[i]; + const newContents = filterDirectoryContents(contents, info); + + // If the directory has changed (including being deleted or created). + if (! _.isEqual(info.contents, newContents)) { + self._fire(); + return true; + } } return false; } _startFileWatches() { - var self = this; + const self = this; + const keys = Object.keys(self.watchSet.files); // Set up a watch for each file - _.each(self.watchSet.files, function (hash, absPath) { - if (self.stopped) { - return; - } - + self._processBatches(keys, absPath => { if (! self.justCheckOnce) { - self._watchFileOrDirectory(absPath); + self._watchFileOrDirectory(absPath, true); } // Check for the case where by the time we created the watch, @@ -449,7 +453,7 @@ export class Watcher { }); } - _watchFileOrDirectory(absPath) { + _watchFileOrDirectory(absPath, skipCheck) { var self = this; if (! _.has(self.watches, absPath)) { @@ -476,9 +480,13 @@ export class Watcher { var onWatchEvent = self._makeWatchEventCallback(absPath); entry.watcher = safeWatcher.watch(absPath, onWatchEvent); - // If we successfully created the watcher, invoke the callback - // immediately, so that we examine this file at least once. - onWatchEvent(); + if (!skipCheck) { + // If we successfully created the watcher, invoke the callback + // immediately, so that we examine this file at least once. + onWatchEvent(); + } else { + self._updateStatForWatch(absPath); + } } else { if (self._mustBeAFile(absPath)) { @@ -559,13 +567,12 @@ export class Watcher { // If self.watchSet.directories contains any entries for the // directory we are examining, call self._fireIfDirectoryChanged. - _.some(self.watchSet.directories, function(info) { - return self.stopped || - (absPath === info.absPath && - self._fireIfDirectoryChanged(info, true)); - // XXX #3335 We probably should check again in a second, due to low - // filesystem modtime resolution. - }); + const infos = self.watchSet.directories.filter(info => info.absPath === absPath ); + if (infos.length) { + self._fireIfDirectoryChanged(infos); + } + // XXX #3335 We probably should check again in a second, due to low + // filesystem modtime resolution. } }); } @@ -640,26 +647,60 @@ export class Watcher { return stat; } + + // Iterates over the array, calling handleItem for each item + // When this._async is true, it pauses ocassionally to avoid blocking for too long + // Stops iterating after watcher is stopped + _processBatches(array, handleItem) { + const self = this; + const async = self._async; + let index = 0; + function processBatch() { + const stopTime = async ? Date.now() + 50 : Infinity; + while (Date.now() < stopTime && index < array.length) { + if (self.stopped) { + return; + } + + handleItem(array[index]); + + index += 1; + } + + if (index < array.length) { + if (async) { + setImmediate(processBatch); + } else { + processBatch(); + } + } + } + + processBatch(); + } _checkDirectories() { - var self = this; + const self = this; + const dirs = Object.values(self.watchSet.directories.reduce((result, dir) => { + result[dir.absPath] = result[dir.absPath] || []; + result[dir.absPath].push(dir); + + return result; + }, {})); + if (self.stopped) { return; } - _.each(self.watchSet.directories, function (info) { - if (self.stopped) { - return; - } - + self._processBatches(dirs, infos => { if (! self.justCheckOnce) { - self._watchFileOrDirectory(info.absPath); + self._watchFileOrDirectory(infos[0].absPath, true); } // Check for the case where by the time we created the watch, the // directory has already changed. - self._fireIfDirectoryChanged(info); + self._fireIfDirectoryChanged(infos); }); } diff --git a/tools/isobuild/builder.js b/tools/isobuild/builder.js index 08435bece0..ea71eb8fc1 100644 --- a/tools/isobuild/builder.js +++ b/tools/isobuild/builder.js @@ -10,6 +10,7 @@ import { optimisticReaddir, optimisticStatOrNull, optimisticLStatOrNull, + optimisticHashOrNull, } from "../fs/optimistic.js"; // Builder is in charge of writing "bundles" to disk, which are @@ -75,7 +76,9 @@ export default class Builder { this.previousUsedAsFile = {}; this.writtenHashes = {}; + this.createdSymlinks = {}; this.previousWrittenHashes = {}; + this.previousCreatedSymlinks = {}; // foo/bar => foo/.build1234.bar // Should we include a random number? The advantage is that multiple @@ -106,6 +109,7 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` this.previousWrittenHashes = previousBuilder.writtenHashes; this.previousUsedAsFile = previousBuilder.usedAsFile; + this.previousCreatedSymlinks = previousBuilder.createdSymlinks; resetBuildPath = false; } else { @@ -228,6 +232,39 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` return partsOut.join(files.pathSep); } + // Checks if a file with the same path and hash was written by + // the previous builder. If it was, it adds it to the cache and makes + // sure the parent directories exist and are part of the cache. + // + // Returns true if the file was already written + usePreviousWrite(relPath, hash, sanitize) { + relPath = this._normalizeFilePath(relPath, sanitize); + + if (this.previousWrittenHashes[relPath] === hash) { + this._ensureDirectory(files.pathDirname(relPath)); + this.writtenHashes[relPath] = hash; + this.usedAsFile[relPath] = true; + return true; + } + + return false; + } + + _normalizeFilePath(relPath, sanitize) { + // Ensure no trailing slash + if (relPath.slice(-1) === files.pathSep) { + relPath = relPath.slice(0, -1); + } + + // In sanitize mode, ensure path does not contain segments like + // '..', does not contain forbidden characters, and is unique. + if (sanitize) { + relPath = this._sanitize(relPath); + } + + return relPath; + } + // Write either a buffer or the contents of a file to `relPath` (a // path to a file relative to the bundle root), creating it (and any // enclosing directories) if it doesn't exist yet. Exactly one of @@ -250,16 +287,7 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` // // If `file` is used then it will be added to the builder's WatchSet. write(relPath, {data, file, hash, sanitize, executable, symlink}) { - // Ensure no trailing slash - if (relPath.slice(-1) === files.pathSep) { - relPath = relPath.slice(0, -1); - } - - // In sanitize mode, ensure path does not contain segments like - // '..', does not contain forbidden characters, and is unique. - if (sanitize) { - relPath = this._sanitize(relPath); - } + relPath = this._normalizeFilePath(relPath, sanitize); let getData = null; if (data) { @@ -285,13 +313,27 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` } else { hash = hash || sha1(getData()); - if (this.previousWrittenHashes[relPath] !== hash) { + // Write is called multiple times for assets when they have multiple urls for the same file + if (this.previousWrittenHashes[relPath] !== hash && this.writtenHashes[relPath] !== hash) { + // Builder is used to create build products, which should be read-only; // users shouldn't be manually editing automatically generated files and // expecting the results to "stick". - atomicallyRewriteFile(absPath, getData(), { - mode: executable ? 0o555 : 0o444 - }); + const mode = executable ? 0o555 : 0o444 + + if (this.buildPath === this.outputPath || this.writtenHashes[relPath]) { + // atomicallyRewriteFile handles overwriting files that have already been created + atomicallyRewriteFile(absPath, getData(), { + mode + }); + } else { + // Since builder is not updating in place, and + // this build is only used if every file is successfully written, + // it is not important to write atomically. + files.writeFile(absPath, getData(), { + mode + }) + } } this.writtenHashes[relPath] = hash; @@ -499,8 +541,6 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` to = to.slice(0, -1); } - const absPathTo = files.pathJoin(this.buildPath, to); - if (symlink) { if (specificFiles) { throw new Error("can't copy only specific paths with a single symlink"); @@ -530,7 +570,11 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` if (symlink && ! (relTo in this.usedAsFile)) { this._ensureDirectory(files.pathDirname(relTo)); const absTo = files.pathResolve(this.buildPath, relTo); - symlinkWithOverwrite(absFrom, absTo); + if (this.previousCreatedSymlinks[absFrom] !== relTo) { + symlinkWithOverwrite(absFrom, absTo); + } + this.usedAsFile[relTo] = false; + this.createdSymlinks[absFrom] = relTo; return; } @@ -641,23 +685,28 @@ Previous builder: ${previousBuilder.outputPath}, this builder: ${outputPath}` // could not be created above. fileStatus = optimisticStatOrNull(thisAbsFrom); if (fileStatus && fileStatus.isFile()) { - // XXX can't really optimize this copying without reading - // the file into memory to calculate the hash. - files.writeFile( - files.pathResolve(this.buildPath, thisRelTo), - // The reason we call files.writeFile here instead of - // files.copyFile is so that we can read the file using - // optimisticReadFile instead of files.createReadStream. - optimisticReadFile(thisAbsFrom), - // Logic borrowed from files.copyFile: "Create the file as - // readable and writable by everyone, and executable by everyone - // if the original file is executably by owner. (This mode will be - // modified by umask.) We don't copy the mode *directly* because - // this function is used by 'meteor create' which is copying from - // the read-only tools tree into a writable app." - { mode: (fileStatus.mode & 0o100) ? 0o777 : 0o666 }, - ); + const hash = optimisticHashOrNull(thisAbsFrom); + if (this.previousWrittenHashes[thisRelTo] !== hash) { + const content = optimisticReadFile(thisAbsFrom); + + files.writeFile( + files.pathResolve(this.buildPath, thisRelTo), + // The reason we call files.writeFile here instead of + // files.copyFile is so that we can read the file using + // optimisticReadFile instead of files.createReadStream. + content, + // Logic borrowed from files.copyFile: "Create the file as + // readable and writable by everyone, and executable by everyone + // if the original file is executably by owner. (This mode will be + // modified by umask.) We don't copy the mode *directly* because + // this function is used by 'meteor create' which is copying from + // the read-only tools tree into a writable app." + { mode: (fileStatus.mode & 0o100) ? 0o777 : 0o666 }, + ); + } + + this.writtenHashes[thisRelTo] = hash; this.usedAsFile[thisRelTo] = true; } }); diff --git a/tools/isobuild/bundler.js b/tools/isobuild/bundler.js index 7cced55f7a..1adbfe88ae 100644 --- a/tools/isobuild/bundler.js +++ b/tools/isobuild/bundler.js @@ -176,6 +176,9 @@ import { PackageRegistry } from "../../packages/meteor/define-package.js"; const SOURCE_URL_PREFIX = "meteor://\u{1f4bb}app"; +const MINIFY_PLAIN_FUNCTION = Buffer.from('function(', 'utf8'); +const MINIFY_RENAMED_FUNCTION = Buffer.from('function __minifyJs(', 'utf8'); + // files to ignore when bundling. node has no globs, so use regexps exports.ignoreFiles = [ /~$/, /^\.#/, @@ -546,6 +549,9 @@ class File { // disk). this.sourcePath = options.sourcePath; + // Allows not calculating sri when it isn't needed + this._skipSri = options.skipSri + // info is just for help with debugging the tool; it isn't written to disk or // anything. this.info = options.info || '?'; @@ -619,7 +625,9 @@ class File { hashes.push(this._inputHash); } - hashes.push(this.sri()); + if (!this._skipSri) { + hashes.push(this.sri()); + } this._hash = watch.sha1(...hashes); } @@ -628,7 +636,7 @@ class File { } sri() { - if (! this._sri) { + if (! this._sri && !this._skipSri) { this._sri = watch.sha512(this.contents()); } @@ -1160,6 +1168,7 @@ class Target { data: resource.data, cacheable: false, hash: resource.hash, + skipSri: !!resource.hash }; const file = new File(fileOptions); @@ -1326,13 +1335,10 @@ class Target { // expression, which some minifiers (e.g. UglifyJS) either fail to // parse or mistakenly eliminate as dead code. To avoid these // problems, we temporarily name the function __minifyJs. - file._contents = Buffer.from( - file.contents() - .toString("utf8") - .replace(/^\s*function\s*\(/, - "function __minifyJs("), - "utf8" - ); + file._contents = Buffer.concat([ + MINIFY_RENAMED_FUNCTION, + file.contents().slice(MINIFY_PLAIN_FUNCTION.length) + ]); dynamicFiles.push(jsf); @@ -1364,15 +1370,24 @@ class Target { function handle(source, dynamic) { source._minifiedFiles.forEach(file => { // Remove the function name __minifyJs that was added above. - file.data = file.data - .toString("utf8") - .replace(/^\s*function\s+__minifyJs\s*\(/, - "function("); + if (typeof file.data === 'string') { + file.data = Buffer.from( + file.data + .replace(/^\s*function\s+__minifyJs\s*\(/, + "function("), + "utf8" + ); + } else if (dynamic) { + file.data = Buffer.concat([ + MINIFY_PLAIN_FUNCTION, + file.data.slice(MINIFY_RENAMED_FUNCTION.length) + ]); + } const newFile = new File({ info: 'minified js', arch, - data: Buffer.from(file.data, 'utf8'), + data: file.data, hash: inputHashesByJsFile.get(source), }); @@ -2420,7 +2435,9 @@ class JsImage { _.each(nodeModulesDirectories, function (nmd) { assert.strictEqual(typeof nmd.preferredBundlePath, "string"); - if (! nmd.isPortable()) { + // Skip calculating isPortable in 'meteor run' since the + // modules are never rebuilt + if (includeNodeModules !== 'symlink' && !nmd.isPortable()) { const parentDir = files.pathDirname(nmd.preferredBundlePath); rebuildDirs[parentDir] = parentDir; } @@ -2742,6 +2759,10 @@ var writeFile = Profile("bundler writeFile", function (file, builder, options) { let data = file.contents(); const hash = file.hash(); + if (builder.usePreviousWrite(file.targetPath, hash)) { + return; + } + if (options && options.sourceMapUrl) { data = addSourceMappingURL(data, options.sourceMapUrl); } else { @@ -2823,9 +2844,12 @@ var writeTargetToPath = Profile( // .meteor/local/build/programs/web.browser.legacy, because they // tend to be written atomically, and it's important on Windows to // avoid overwriting files that might be open currently in the build - // or server process. If in-place builds were safer on Windows, they + // or server process. + // Server builds do use an in-place build since the server is always stopped + // during the build. + // If client in-place builds were safer on Windows, they // would be much quicker than from-scratch rebuilds. - forceInPlaceBuild: false, + forceInPlaceBuild: name === 'server', }); var targetBuild = target.write(builder, { @@ -2876,7 +2900,8 @@ var writeSiteArchive = Profile("bundler writeSiteArchive", function ( releaseName, previousBuilders = Object.create(null), buildMode, - minifyMode + minifyMode, + sourceRoot, }) { const builders = {}; @@ -2893,6 +2918,12 @@ var writeSiteArchive = Profile("bundler writeSiteArchive", function ( }); try { + Object.keys(targets).forEach(key => { + // Both makeClientTarget and makeServerTarget get their sourceRoot + // from packageSource.sourceRoot, so this should always be true: + assert.strictEqual(targets[key].sourceRoot, sourceRoot); + }); + var json = { format: "site-archive-pre1", builtBy, @@ -2900,6 +2931,7 @@ var writeSiteArchive = Profile("bundler writeSiteArchive", function ( meteorRelease: releaseName, nodeVersion: process.versions.node, npmVersion: meteorNpm.npmVersion, + gitCommitHash: files.findGitCommitHash(sourceRoot), }; // Tell the deploy server what version of the dependency kit we're using, so @@ -3309,6 +3341,7 @@ function bundle({ starResult = writeSiteArchive(targets, outputPath, { buildMode: buildOptions.buildMode, previousBuilders, + sourceRoot: packageSource.sourceRoot, ...writeOptions, }); serverWatchSet.merge(starResult.serverWatchSet); diff --git a/tools/isobuild/compiler.js b/tools/isobuild/compiler.js index 2bc4e5c832..4f8c5a2ca3 100644 --- a/tools/isobuild/compiler.js +++ b/tools/isobuild/compiler.js @@ -479,12 +479,8 @@ var compileUnibuild = Profile(function (options) { const relPath = asset.relPath; const absPath = files.pathResolve(inputSourceArch.sourceRoot, relPath); - // readAndWatchFileWithHash returns an object carrying a buffer with the - // file-contents. The buffer contains the original data of the file (no EOL - // transforms from the tools/files.js part). - const file = watch.readAndWatchFileWithHash(watchSet, absPath); - const hash = file.hash; - const contents = file.contents; + const hash = optimisticHashOrNull(absPath) + const contents = optimisticReadFile(absPath) addAsset(contents, relPath, hash); }); diff --git a/tools/isobuild/linker.js b/tools/isobuild/linker.js index 697460fcf3..d02ba1a754 100644 --- a/tools/isobuild/linker.js +++ b/tools/isobuild/linker.js @@ -21,6 +21,10 @@ const APP_PRELINK_CACHE = new LRU({ return prelinked.source.length + sourceMapLength(prelinked.sourceMap); } }); +// Caches code with source map for dynamic files +const DYNAMIC_PRELINKED_OUTPUT_CACHE = new LRU({ + max: Math.pow(2, 11) +}); var packageDot = function (name) { if (/^[a-zA-Z][a-zA-Z0-9]*$/.exec(name)) { @@ -271,11 +275,7 @@ _.extend(Module.prototype, { if (file.isDynamic()) { const servePath = files.pathJoin("dynamic", file.absModuleId); const { code: source, map } = - file.getPrelinkedOutput({ - sourceWidth: sourceWidth, - }).toStringWithSourceMap({ - file: servePath, - }); + getOutputWithSourceMapCached(file, servePath, { sourceWidth }) results.push({ source, @@ -812,12 +812,15 @@ const getPrelinkedOutputCached = require("optimism").wrap( } return new sourcemap.SourceNode(null, null, null, chunks); - }, { // Store at most 4096 Files worth of prelinked output in this cache. max: Math.pow(2, 12), makeCacheKey(file, options) { + if (options.disableCache) { + return; + } + return JSON.stringify({ hash: file._inputHash, arch: file.module.bundleArch, @@ -829,6 +832,32 @@ const getPrelinkedOutputCached = require("optimism").wrap( } ); +function getOutputWithSourceMapCached(file, servePath, options) { + const key = JSON.stringify({ + hash: file._inputHash, + arch: file.module.bundleArch, + bare: file.bare, + servePath: file.servePath, + dynamic: file.isDynamic(), + options, + }); + + if (DYNAMIC_PRELINKED_OUTPUT_CACHE.has(key)) { + return DYNAMIC_PRELINKED_OUTPUT_CACHE.get(key); + } + + const result = file.getPrelinkedOutput({ + ...options, + disableCache: true + }).toStringWithSourceMap({ + file: servePath, + }); + + DYNAMIC_PRELINKED_OUTPUT_CACHE.set(key, result); + + return result; +} + // Given a list of lines (not newline-terminated), returns a string placing them // in a pretty banner of width bannerWidth. All lines must have length at most // (bannerWidth - 6); if bannerWidth is not provided, the smallest width that diff --git a/tools/isobuild/meteor-npm.js b/tools/isobuild/meteor-npm.js index a13a477754..821f997f7f 100644 --- a/tools/isobuild/meteor-npm.js +++ b/tools/isobuild/meteor-npm.js @@ -343,21 +343,27 @@ Profile("meteorNpm.rebuildIfNonPortable", function (nodeModulesDir) { // directory paths. const tempPkgDirs = {}; - dirsToRebuild.forEach(function (pkgPath) { + dirsToRebuild.splice(0).forEach(pkgPath => { const tempPkgDir = tempPkgDirs[pkgPath] = files.pathJoin( tempNodeModules, files.pathRelative(nodeModulesDir, pkgPath) ); - // Copy the package directory instead of renaming it, so that the - // original package will be left untouched if the rebuild fails. We - // could just run files.cp_r(pkgPath, tempPkgDir) here, except that we - // want to handle nested node_modules directories specially. - copyNpmPackageWithSymlinkedNodeModules(pkgPath, tempPkgDir); + // It's possible the pkgPath directory may have been deleted since we + // did the scan above: https://circleci.com/gh/meteor/meteor/31330 + if (isDirectory(pkgPath)) { + // Copy the package directory instead of renaming it, so that the + // original package will be left untouched if the rebuild fails. We + // could just run files.cp_r(pkgPath, tempPkgDir) here, except that we + // want to handle nested node_modules directories specially. + copyNpmPackageWithSymlinkedNodeModules(pkgPath, tempPkgDir); - // Record the current process.versions so that we can avoid - // copying/rebuilding/renaming next time. - recordLastRebuildVersions(tempPkgDir); + // Record the current process.versions so that we can avoid + // copying/rebuilding/renaming next time. + recordLastRebuildVersions(tempPkgDir); + + dirsToRebuild.push(pkgPath); + } }); // The `npm rebuild` command must be run in the parent directory of the @@ -478,8 +484,9 @@ const isPortable = Profile("meteorNpm.isPortable", dir => { const pkgJsonPath = files.pathJoin(dir, "package.json"); const pkgJsonStat = optimisticStatOrNull(pkgJsonPath); const canCache = pkgJsonStat && pkgJsonStat.isFile(); - const portableFile = files.pathJoin( - dir, ".meteor-portable-" + portableVersion + ".json"); + const portableFile = files.convertToOSPath( + files.pathJoin(dir, ".meteor-portable-" + portableVersion + ".json") + ); if (canCache) { // Cache previous results by writing a boolean value to a hidden file @@ -1073,7 +1080,7 @@ const installNpmModule = meteorNpm.installNpmModule = (name, version, dir) => { if (! result.success) { const pkgNotFound = - `404 Not Found: ${utils.quotemeta(name)}@${utils.quotemeta(version)}`; + `404 Not Found - GET ${utils.quotemeta("https://registry.npmjs.org/"+name)}`; const versionNotFound = "No matching version found for " + diff --git a/tools/isobuild/package-source.js b/tools/isobuild/package-source.js index 79e3e6eb41..260d6fa936 100644 --- a/tools/isobuild/package-source.js +++ b/tools/isobuild/package-source.js @@ -1113,11 +1113,12 @@ _.extend(PackageSource.prototype, { const anyLevelExcludes = []; - if (testModule) { + if (testModule || !isApp) { // If we have a meteor.testModule from package.json, then we don't // need to exclude tests/ directories or *.tests.js files from the // search, because we trust meteor.testModule to identify a single - // test entry point. + // test entry point. Likewise, in packages (!isApp), test files are + // added explicitly, and thus do not need to be excluded here. } else { anyLevelExcludes.push(/^tests\/$/); diff --git a/tools/runners/run-app.js b/tools/runners/run-app.js index e63f7a4595..f72f6f1163 100644 --- a/tools/runners/run-app.js +++ b/tools/runners/run-app.js @@ -697,6 +697,7 @@ _.extend(AppRunner.prototype, { Promise.await(self.runPromise); var runPromise = self.runPromise = self._makePromise("run"); + var listenPromise = self._makePromise("listen"); // Run the program options.beforeRun && options.beforeRun(); @@ -722,6 +723,7 @@ _.extend(AppRunner.prototype, { self.proxy.setMode("proxy"); options.onListen && options.onListen(); self._resolvePromise("start"); + self._resolvePromise("listen"); }, nodeOptions: getNodeOptionsFromEnvironment(), settings: settings, @@ -772,20 +774,22 @@ _.extend(AppRunner.prototype, { self._resolvePromise("run", { outcome: 'changed' }); - } + }, + async: true }); } var setupClientWatcher = function () { clientWatcher && clientWatcher.stop(); clientWatcher = new watch.Watcher({ - watchSet: bundleResult.clientWatchSet, - onChange: function () { + watchSet: bundleResult.clientWatchSet, + onChange: function () { var outcome = watch.isUpToDate(serverWatchSet) ? 'changed-refreshable' // only a client asset has changed : 'changed'; // both a client and server asset changed self._resolvePromise('run', { outcome: outcome }); - } + }, + async: true }); }; if (self.watchForChanges && canRefreshClient) { @@ -839,7 +843,13 @@ _.extend(AppRunner.prototype, { Console.enableProgressDisplay(false); - const postStartupResult = runPostStartupCallbacks(bundleResult); + const postStartupResult = Promise.race([ + listenPromise, + runPromise + ]).then(() => { + return runPostStartupCallbacks(bundleResult); + }).await(); + if (postStartupResult) return postStartupResult; // Wait for either the process to exit, or (if watchForChanges) a diff --git a/tools/runners/run-mongo.js b/tools/runners/run-mongo.js index e4d10a35b6..f636d22ca5 100644 --- a/tools/runners/run-mongo.js +++ b/tools/runners/run-mongo.js @@ -22,7 +22,7 @@ var runMongoShell = function (url) { var auth = mongoUrl.auth && mongoUrl.auth.split(':'); var ssl = require('querystring').parse(mongoUrl.query).ssl === "true"; - var args = ['--quiet']; + var args = []; if (ssl) { args.push('--ssl'); } @@ -61,6 +61,14 @@ function spawnMongod(mongodPath, port, dbPath, replSetName) { // Use mmapv1 on 32bit platforms, as our binary doesn't support WT if (process.arch === 'ia32') { args.push('--storageEngine', 'mmapv1', '--smallfiles'); + } else if (process.platform !== 'linux') { + // MongoDB 4, which we use on 64-bit systems, displays a banner in the + // Mongo shell about a free monitoring service, which can be disabled + // with this flag. However, the generic Linux build (without SSL; see + // MONGO_SSL in scripts/generate-dev-bundle.sh) neither displays the + // banner nor supports the flag, so it's safe/important to avoid + // passing the flag to mongod on 64-bit linux. + args.push('--enableFreeMonitoring', 'off'); } return child_process.spawn(mongodPath, args, { @@ -185,12 +193,30 @@ if (process.platform === 'win32') { 'else ps ax; fi'; } + // If the child process output includes unicode, make sure it's + // handled properly. + const { + LANG = "en_US.UTF-8", + LC_ALL = LANG, + LANGUAGE = LANG, + // Remainder of process.env without above properties. + ...env + } = process.env; + + // Make sure all three properties are set to the same value, which + // defaults to "en_US.UTF-8" or whatever LANG was already set to. + Object.assign(env, { LANG, LC_ALL, LANGUAGE }); + child_process.exec( psScript, - // we don't want this to randomly fail just because you're running lots of - // processes. 10MB should be more than ps ax will ever spit out; the default - // is 200K, which at least one person hit (#2158). - {maxBuffer: 1024 * 1024 * 10}, + { + env, + // we don't want this to randomly fail just because you're running + // lots of processes. 10MB should be more than ps ax will ever + // spit out; the default is 200K, which at least one person hit + // (#2158). + maxBuffer: 1024 * 1024 * 10, + }, function (error, stdout, stderr) { if (error) { promise.reject( @@ -657,62 +683,29 @@ var launchMongo = function (options) { return; } - let wasJustSecondary = false; + let writableTimestamp = Date.now(); - // XXX timeout eventually? + // Wait until the primary is writable. If it isn't writable after one + // minute, throw an error and report the replica set status. while (!stopped) { - var status = yieldingMethod( - db.admin(), 'command', {replSetGetStatus: 1}); + const { ismaster } = yieldingMethod(db.admin(), "command", { + isMaster: 1 + }); - // See https://docs.mongodb.com/manual/reference/replica-states/ - // for information on various states + if (ismaster) { + break; + } else if (Date.now() - writableTimestamp > 60000) { + const status = yieldingMethod(db.admin(), "command", { + replSetGetStatus: 1 + }); - // Are any of the members starting up or recovering? - if (_.any(status.members, function (member) { - return member.stateStr === 'STARTUP' || - member.stateStr === 'STARTUP2' || - member.stateStr === 'RECOVERING'; - })) { - utils.sleepMs(20); - continue; + throw new Error( + "Primary not writable after one minute. Last replica set status: " + + JSON.stringify(status) + ); } - const firstMemberState = status.members[0].stateStr; - - // Is the intended primary currently a secondary? (It passes through - // that phase briefly.) - if (firstMemberState === 'SECONDARY') { - utils.sleepMs(20); - wasJustSecondary = true; - continue; - } - - // Mongo 3.2 introduced a new heartbeatIntervalMillis property - // on replica sets, used during "primary" negotiation. - // - // If the first member was _just_ promoted, we'll wait until - // the heartbeat interval has elapsed before proceeding since - // the decision is not official until the heartbeat has elapsed. - if (firstMemberState === 'PRIMARY' && wasJustSecondary) { - wasJustSecondary = false; - utils.sleepMs(status.heartbeatIntervalMillis); - continue; - } - - // Anything else for the intended primary is probably an error. - if (firstMemberState !== 'PRIMARY') { - throw Error("Unexpected Mongo status: " + JSON.stringify(status)); - } - - // Anything but secondary for the other members is probably an error. - for (var i = 1; i < status.members.length; ++i) { - if (status.members[i].stateStr !== 'SECONDARY') { - throw Error("Unexpected Mongo secondary status: " + - JSON.stringify(status)); - } - } - - break; + utils.sleepMs(50); } client.close(true /* means "the app is closing the connection" */); diff --git a/tools/static-assets/server/boot.js b/tools/static-assets/server/boot.js index 67ea154e21..487ef07c5e 100644 --- a/tools/static-assets/server/boot.js +++ b/tools/static-assets/server/boot.js @@ -27,12 +27,21 @@ var serverJson = require("./server-json.js"); var configJson = JSON.parse(fs.readFileSync(path.resolve(serverDir, 'config.json'), 'utf8')); +var programsDir = path.dirname(serverDir); +var buildDir = path.dirname(programsDir); +var starJson = JSON.parse(fs.readFileSync(path.join(buildDir, "star.json"))); + // Set up environment __meteor_bootstrap__ = { startupHooks: [], serverDir: serverDir, - configJson: configJson }; -__meteor_runtime_config__ = { meteorRelease: configJson.meteorRelease }; + configJson: configJson +}; + +__meteor_runtime_config__ = { + meteorRelease: configJson.meteorRelease, + gitCommitHash: starJson.gitCommitHash +}; if (!process.env.APP_ID) { process.env.APP_ID = configJson.appId; @@ -196,7 +205,6 @@ var specialArgPaths = { "packages/dynamic-import.js": function (file) { var dynamicImportInfo = {}; - var programsDir = path.dirname(serverDir); var clientArchs = configJson.clientArchs || Object.keys(configJson.clientPaths); diff --git a/tools/static-assets/skel-bare/package.json b/tools/static-assets/skel-bare/package.json index 5febcb11b0..e30b425396 100644 --- a/tools/static-assets/skel-bare/package.json +++ b/tools/static-assets/skel-bare/package.json @@ -5,7 +5,7 @@ "start": "meteor run" }, "dependencies": { - "@babel/runtime": "^7.1.5", + "@babel/runtime": "^7.3.4", "meteor-node-stubs": "^0.4.1" } } diff --git a/tools/static-assets/skel-full/package.json b/tools/static-assets/skel-full/package.json index 5031f9fe40..c2a6c53200 100644 --- a/tools/static-assets/skel-full/package.json +++ b/tools/static-assets/skel-full/package.json @@ -6,7 +6,7 @@ "test": "meteor test --once --driver-package meteortesting:mocha" }, "dependencies": { - "@babel/runtime": "^7.1.5", + "@babel/runtime": "^7.3.4", "meteor-node-stubs": "^0.4.1" }, "devDependencies": { diff --git a/tools/static-assets/skel-minimal/package.json b/tools/static-assets/skel-minimal/package.json index 6beb4506e1..035cf4e410 100644 --- a/tools/static-assets/skel-minimal/package.json +++ b/tools/static-assets/skel-minimal/package.json @@ -8,7 +8,7 @@ "visualize": "meteor --production --extra-packages bundle-visualizer" }, "dependencies": { - "@babel/runtime": "^7.1.5", + "@babel/runtime": "^7.3.4", "meteor-node-stubs": "^0.4.1" }, "meteor": { diff --git a/tools/static-assets/skel-react/package.json b/tools/static-assets/skel-react/package.json index 3b07f09169..28c59f73eb 100644 --- a/tools/static-assets/skel-react/package.json +++ b/tools/static-assets/skel-react/package.json @@ -8,7 +8,7 @@ "visualize": "meteor --production --extra-packages bundle-visualizer" }, "dependencies": { - "@babel/runtime": "^7.1.5", + "@babel/runtime": "^7.3.4", "meteor-node-stubs": "^0.4.1", "react": "^16.5.0", "react-dom": "^16.5.0" diff --git a/tools/static-assets/skel/package.json b/tools/static-assets/skel/package.json index 6beb4506e1..035cf4e410 100644 --- a/tools/static-assets/skel/package.json +++ b/tools/static-assets/skel/package.json @@ -8,7 +8,7 @@ "visualize": "meteor --production --extra-packages bundle-visualizer" }, "dependencies": { - "@babel/runtime": "^7.1.5", + "@babel/runtime": "^7.3.4", "meteor-node-stubs": "^0.4.1" }, "meteor": { diff --git a/tools/tests/apps/app-config/package-lock.json b/tools/tests/apps/app-config/package-lock.json index 17e6de8153..61a816ed07 100644 --- a/tools/tests/apps/app-config/package-lock.json +++ b/tools/tests/apps/app-config/package-lock.json @@ -767,9 +767,9 @@ "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=" }, "puppeteer": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.12.2.tgz", - "integrity": "sha512-xWSyCeD6EazGlfnQweMpM+Hs6X6PhUYhNTHKFj/axNZDq4OmrVERf70isBf7HsnFgB3zOC1+23/8+wCAZYg+Pg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.13.0.tgz", + "integrity": "sha512-LUXgvhjfB/P6IOUDAKxOcbCz9ISwBLL9UpKghYrcBDwrOGx1m60y0iN2M64mdAUbT4+7oZM5DTxOW7equa2fxQ==", "requires": { "debug": "^4.1.0", "extract-zip": "^1.6.6", @@ -837,9 +837,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.0.tgz", + "integrity": "sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w==", "requires": { "async-limiter": "~1.0.0" } diff --git a/tools/tests/apps/git-commit-hash/.gitignore b/tools/tests/apps/git-commit-hash/.gitignore new file mode 100644 index 0000000000..40b878db5b --- /dev/null +++ b/tools/tests/apps/git-commit-hash/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/tools/tests/apps/git-commit-hash/.meteor/.finished-upgraders b/tools/tests/apps/git-commit-hash/.meteor/.finished-upgraders new file mode 100644 index 0000000000..4538749ab8 --- /dev/null +++ b/tools/tests/apps/git-commit-hash/.meteor/.finished-upgraders @@ -0,0 +1,18 @@ +# This file contains information which helps Meteor properly upgrade your +# app when you run 'meteor update'. You should check it into version control +# with your project. + +notices-for-0.9.0 +notices-for-0.9.1 +0.9.4-platform-file +notices-for-facebook-graph-api-2 +1.2.0-standard-minifiers-package +1.2.0-meteor-platform-split +1.2.0-cordova-changes +1.2.0-breaking-changes +1.3.0-split-minifiers-package +1.4.0-remove-old-dev-bundle-link +1.4.1-add-shell-server-package +1.4.3-split-account-service-packages +1.5-add-dynamic-import-package +1.7-split-underscore-from-meteor-base diff --git a/tools/tests/apps/git-commit-hash/.meteor/.gitignore b/tools/tests/apps/git-commit-hash/.meteor/.gitignore new file mode 100644 index 0000000000..4083037423 --- /dev/null +++ b/tools/tests/apps/git-commit-hash/.meteor/.gitignore @@ -0,0 +1 @@ +local diff --git a/tools/tests/apps/git-commit-hash/.meteor/.id b/tools/tests/apps/git-commit-hash/.meteor/.id new file mode 100644 index 0000000000..b92c6c71e9 --- /dev/null +++ b/tools/tests/apps/git-commit-hash/.meteor/.id @@ -0,0 +1,7 @@ +# This file contains a token that is unique to your project. +# Check it into your repository along with the rest of this directory. +# It can be used for purposes such as: +# - ensuring you don't accidentally deploy one app on top of another +# - providing package authors with aggregated statistics + +xh4qomttjyd.znxg6je45aan diff --git a/tools/tests/apps/git-commit-hash/.meteor/packages b/tools/tests/apps/git-commit-hash/.meteor/packages new file mode 100644 index 0000000000..341bbfc93a --- /dev/null +++ b/tools/tests/apps/git-commit-hash/.meteor/packages @@ -0,0 +1,15 @@ +# Meteor packages used by this project, one per line. +# Check this file (and the other files in this directory) into your repository. +# +# 'meteor add' and 'meteor remove' will edit this file for you, +# but you can also edit it by hand. + +meteor # Shared foundation for all Meteor packages +static-html # Define static page content in .html files +standard-minifier-css # CSS minifier run for production mode +standard-minifier-js # JS minifier run for production mode +es5-shim # ECMAScript 5 compatibility for older browsers +ecmascript # Enable ECMAScript2015+ syntax in app code +shell-server # Server-side component of the `meteor shell` command +webapp # Serves a Meteor app over HTTP +server-render # Support for server-side rendering diff --git a/tools/tests/apps/git-commit-hash/.meteor/platforms b/tools/tests/apps/git-commit-hash/.meteor/platforms new file mode 100644 index 0000000000..efeba1b50c --- /dev/null +++ b/tools/tests/apps/git-commit-hash/.meteor/platforms @@ -0,0 +1,2 @@ +server +browser diff --git a/tools/tests/apps/git-commit-hash/.meteor/release b/tools/tests/apps/git-commit-hash/.meteor/release new file mode 100644 index 0000000000..621e94f0ec --- /dev/null +++ b/tools/tests/apps/git-commit-hash/.meteor/release @@ -0,0 +1 @@ +none diff --git a/tools/tests/apps/git-commit-hash/.meteor/versions b/tools/tests/apps/git-commit-hash/.meteor/versions new file mode 100644 index 0000000000..a10ed1d9c8 --- /dev/null +++ b/tools/tests/apps/git-commit-hash/.meteor/versions @@ -0,0 +1,39 @@ +babel-compiler@7.2.4 +babel-runtime@1.3.0 +base64@1.0.11 +blaze-tools@1.0.10 +boilerplate-generator@1.6.0 +caching-compiler@1.2.1 +caching-html-compiler@1.1.3 +dynamic-import@0.5.1 +ecmascript@0.12.4 +ecmascript-runtime@0.7.0 +ecmascript-runtime-client@0.8.0 +ecmascript-runtime-server@0.7.1 +ejson@1.1.0 +es5-shim@4.8.0 +fetch@0.1.0 +html-tools@1.0.11 +htmljs@1.0.11 +inter-process-messaging@0.1.0 +logging@1.1.20 +meteor@1.9.3 +minifier-css@1.4.1 +minifier-js@2.4.0 +modern-browsers@0.1.4-beta181.16 +modules@0.13.0 +modules-runtime@0.10.3 +promise@0.11.2 +random@1.1.0 +routepolicy@1.1.0 +server-render@0.3.1 +shell-server@0.4.0 +spacebars-compiler@1.1.3 +standard-minifier-css@1.5.2 +standard-minifier-js@2.4.0 +static-html@1.2.2 +templating-tools@1.1.2 +tracker@1.2.0 +underscore@1.0.10 +webapp@1.7.3-beta181.16 +webapp-hashing@1.0.9 diff --git a/tools/tests/apps/git-commit-hash/client/main.css b/tools/tests/apps/git-commit-hash/client/main.css new file mode 100644 index 0000000000..7f354f0fa7 --- /dev/null +++ b/tools/tests/apps/git-commit-hash/client/main.css @@ -0,0 +1,4 @@ +body { + padding: 10px; + font-family: sans-serif; +} diff --git a/tools/tests/apps/git-commit-hash/client/main.html b/tools/tests/apps/git-commit-hash/client/main.html new file mode 100644 index 0000000000..19789db4de --- /dev/null +++ b/tools/tests/apps/git-commit-hash/client/main.html @@ -0,0 +1,21 @@ +
++ This Meteor app uses as few Meteor packages as possible, to keep the + client JavaScript bundle as small as possible. +
+ + + +