Merge branch 'devel' into devel

This commit is contained in:
Jesse Rosenberger
2018-06-14 14:40:20 +03:00
committed by GitHub
43 changed files with 1569 additions and 782 deletions

View File

@@ -1,8 +1,33 @@
## v.NEXT
* Meteor's test runners have been updated to use headless Chrome instead for
browser tests. Test can still be run using PhantomJS by passing --phantom
to the self test command.
* Meteor's `self-test` has been updated to use "headless" Chrome rather
than PhantomJS for browser tests. PhantomJS can still be forced by
passing the `--phantom` flag to the `meteor self-test` command.
[PR #9814](https://github.com/meteor/meteor/pull/9814)
## v1.7.0.3, 2018-06-13
* Fixed [Issue #9991](https://github.com/meteor/meteor/issues/9991),
introduced in
[Meteor 1.7.0.2](https://github.com/meteor/meteor/pull/9990)
by [PR #9977](https://github.com/meteor/meteor/pull/9977).
## v1.7.0.2, 2018-06-13
* Node has been updated to version
[8.11.3](https://nodejs.org/en/blog/release/v8.11.3/), an important
[security release](https://nodejs.org/en/blog/vulnerability/june-2018-security-releases/).
* The `meteor-babel` npm package has been updated to version
[7.0.0-beta.51](https://github.com/babel/babel/releases/tag/v7.0.0-beta.51).
* Meteor apps created with `meteor create` or `meteor create --minimal`
will now have a directory called `tests/` rather than `test/`, so that
test code will not be eagerly loaded if you decide to remove the
`meteor.mainModule` configuration from `package.json`, thanks to
[PR #9977](https://github.com/meteor/meteor/pull/9977) by
[@robfallows](https://github.com/robfallows).
[Issue #9961](https://github.com/meteor/meteor/issues/9961)
## v1.7.0.1, 2018-05-29

2
meteor
View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash
BUNDLE_VERSION=8.11.2.8
BUNDLE_VERSION=8.11.3.1
# OS Check. Put here because here is where we download the precompiled
# bundles that are arch specific.

File diff suppressed because it is too large Load Diff

View File

@@ -21,15 +21,27 @@ var hasOwn = Object.prototype.hasOwnProperty;
var isMeteorPre144 = semver.lt(process.version, "4.8.1");
BCp.processFilesForTarget = function (inputFiles) {
var compiler = this;
// Reset this cache for each batch processed.
this._babelrcCache = null;
inputFiles.forEach(function (inputFile) {
var toBeAdded = this.processOneFileForTarget(inputFile);
if (toBeAdded) {
inputFile.addJavaScript(toBeAdded);
if (inputFile.supportsLazyCompilation) {
inputFile.addJavaScript({
path: inputFile.getPathInPackage(),
hash: inputFile.getSourceHash(),
bare: !! inputFile.getFileOptions().bare
}, function () {
return compiler.processOneFileForTarget(inputFile);
});
} else {
var toBeAdded = compiler.processOneFileForTarget(inputFile);
if (toBeAdded) {
inputFile.addJavaScript(toBeAdded);
}
}
}, this);
});
};
// Returns an object suitable for passing to inputFile.addJavaScript, or

View File

@@ -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.1.0'
version: '7.2.0'
});
Npm.depends({
'meteor-babel': '7.0.0-beta.49-1'
'meteor-babel': '7.0.0-beta.51'
});
Package.onUse(function (api) {

View File

@@ -1 +0,0 @@
node_modules

View File

@@ -1,7 +0,0 @@
This directory and the files immediately inside it are automatically generated
when you change this package's NPM dependencies. Commit the files in this
directory (npm-shrinkwrap.json, .gitignore, and this README) to source control
so that others run the same versions of sub-dependencies.
You should NOT check in the node_modules directory that Meteor automatically
creates; if you are using git, the .gitignore file tells git to ignore it.

View File

@@ -1,15 +0,0 @@
{
"lockfileVersion": 1,
"dependencies": {
"async": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/async/-/async-1.4.0.tgz",
"integrity": "sha1-Nfhvg8WeBCHQmc2akdgnj7V4wA0="
},
"lru-cache": {
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz",
"integrity": "sha1-JnUZDM0bBwHsL2UqTQ09QA12wN0="
}
}
}

View File

@@ -2,9 +2,7 @@ const fs = Plugin.fs;
const path = Plugin.path;
const createHash = Npm.require('crypto').createHash;
const assert = Npm.require('assert');
const Future = Npm.require('fibers/future');
const LRU = Npm.require('lru-cache');
const async = Npm.require('async');
// Base class for CachingCompiler and MultiFileCachingCompiler.
CachingCompilerBase = class CachingCompilerBase {
@@ -283,14 +281,12 @@ CachingCompiler = class CachingCompiler extends CachingCompilerBase {
const cacheMisses = [];
const arches = this._cacheDebugEnabled && Object.create(null);
const future = new Future;
async.eachLimit(inputFiles, this._maxParallelism, (inputFile, cb) => {
return Promise.all(inputFiles.map(async (inputFile) => {
if (arches) {
arches[inputFile.getArch()] = 1;
}
let error = null;
try {
const getResult = async () => {
const cacheKey = this._deepHash(this.getCacheKey(inputFile));
let compileResult = this._cache.get(cacheKey);
@@ -303,7 +299,7 @@ CachingCompiler = class CachingCompiler extends CachingCompilerBase {
if (! compileResult) {
cacheMisses.push(inputFile.getDisplayPath());
compileResult = this.compileOneFile(inputFile);
compileResult = await this.compileOneFile(inputFile);
if (! compileResult) {
// compileOneFile should have called inputFile.error.
@@ -316,17 +312,27 @@ CachingCompiler = class CachingCompiler extends CachingCompilerBase {
this._writeCacheAsync(cacheKey, compileResult);
}
this.addCompileResult(inputFile, compileResult);
} catch (e) {
error = e;
} finally {
cb(error);
}
}, future.resolver());
future.wait();
return compileResult;
};
if (this.compileOneFileLater &&
inputFile.supportsLazyCompilation &&
! this._cacheDebugEnabled) {
await this.compileOneFileLater(inputFile, getResult);
} else {
const result = await getResult();
if (result) {
this.addCompileResult(inputFile, result);
}
}
})).then(() => {
if (! this._cacheDebugEnabled) {
return;
}
if (this._cacheDebugEnabled) {
cacheMisses.sort();
this._cacheDebug(
`Ran (#${
++this._callCount
@@ -336,7 +342,7 @@ CachingCompiler = class CachingCompiler extends CachingCompilerBase {
JSON.stringify(Object.keys(arches).sort())
}`
);
}
});
}
_cacheFilename(cacheKey) {

View File

@@ -1,7 +1,5 @@
const path = Plugin.path;
const Future = Npm.require('fibers/future');
const LRU = Npm.require('lru-cache');
const async = Npm.require('async');
// MultiFileCachingCompiler is like CachingCompiler, but for implementing
// languages which allow files to reference each other, such as CSS
@@ -92,20 +90,12 @@ extends CachingCompilerBase {
cacheKeyMap.set(importPath, this._getCacheKeyWithPath(inputFile));
});
const allProcessedFuture = new Future;
async.eachLimit(inputFiles, this._maxParallelism, (inputFile, cb) => {
return Promise.all(inputFiles.map(async (inputFile) => {
if (arches) {
arches[inputFile.getArch()] = 1;
}
let error = null;
try {
// If this isn't a root, skip it (and definitely don't waste time
// looking for a cache file that won't be there).
if (!this.isRoot(inputFile)) {
return;
}
const getResult = async () => {
const absoluteImportPath = this.getAbsoluteImportPath(inputFile);
const cacheKey = cacheKeyMap.get(absoluteImportPath);
let cacheEntry = this._cache.get(cacheKey);
@@ -119,13 +109,19 @@ extends CachingCompilerBase {
if (! (cacheEntry && this._cacheEntryValid(cacheEntry, cacheKeyMap))) {
cacheMisses.push(inputFile.getDisplayPath());
const compileOneFileReturn = this.compileOneFile(inputFile, allFiles);
const compileOneFileReturn =
await this.compileOneFile(inputFile, allFiles);
if (! compileOneFileReturn) {
// compileOneFile should have called inputFile.error.
// We don't cache failures for now.
// We don't cache failures for now.
return;
}
const {compileResult, referencedImportPaths} = compileOneFileReturn;
const {
compileResult,
referencedImportPaths,
} = compileOneFileReturn;
cacheEntry = {
compileResult,
@@ -148,17 +144,27 @@ extends CachingCompilerBase {
this._writeCacheAsync(cacheKey, cacheEntry);
}
this.addCompileResult(inputFile, cacheEntry.compileResult);
} catch (e) {
error = e;
} finally {
cb(error);
}
}, allProcessedFuture.resolver());
allProcessedFuture.wait();
return cacheEntry.compileResult;
};
if (this.compileOneFileLater &&
inputFile.supportsLazyCompilation &&
! this._cacheDebugEnabled) {
await this.compileOneFileLater(inputFile, getResult);
} else if (this.isRoot(inputFile)) {
const result = await getResult();
if (result) {
this.addCompileResult(inputFile, result);
}
}
})).then(() => {
if (! this._cacheDebugEnabled) {
return;
}
if (this._cacheDebugEnabled) {
cacheMisses.sort();
this._cacheDebug(
`Ran (#${
++this._callCount
@@ -166,8 +172,9 @@ extends CachingCompilerBase {
JSON.stringify(cacheMisses)
} ${
JSON.stringify(Object.keys(arches).sort())
}`);
}
}`
);
});
}
// Returns a hash that incorporates both this.getCacheKey(inputFile) and

View File

@@ -1,15 +1,10 @@
Package.describe({
name: 'caching-compiler',
version: '1.1.12',
version: '1.2.0',
summary: 'An easy way to make compiler plugins cache',
documentation: 'README.md'
});
Npm.depends({
'lru-cache': '2.6.4',
'async': '1.4.0'
});
Package.onUse(function(api) {
api.use(['ecmascript', 'random']);
api.addFiles(['caching-compiler.js'], 'server');

View File

@@ -1,6 +1,6 @@
Package.describe({
name: "dynamic-import",
version: "0.4.0",
version: "0.4.1",
summary: "Runtime support for Meteor 1.5 dynamic import(...) syntax",
documentation: "README.md"
});

View File

@@ -66,7 +66,11 @@ function middleware(request, response) {
response.setHeader("Access-Control-Allow-Origin", "*");
if (request.method === "OPTIONS") {
response.setHeader("Access-Control-Allow-Headers", "*");
const acrh = request.headers["access-control-request-headers"];
response.setHeader(
"Access-Control-Allow-Headers",
typeof acrh === "string" ? acrh : "*"
);
response.setHeader("Access-Control-Allow-Methods", "POST");
response.end();
} else if (request.method === "POST") {

View File

@@ -1,6 +1,6 @@
Package.describe({
name: 'ecmascript',
version: '0.11.0',
version: '0.11.1',
summary: 'Compiler plugin that supports ES2015+ in all .js files',
documentation: 'README.md'
});

View File

@@ -1,6 +1,6 @@
Package.describe({
name: 'less',
version: '2.7.12',
version: '2.8.0',
summary: 'Leaner CSS language',
documentation: 'README.md'
});

View File

@@ -1,6 +1,5 @@
const path = Plugin.path;
const less = Npm.require('less');
const Future = Npm.require('fibers/future');
Plugin.registerCompiler({
// *.lessimport has been deprecated since 0.7.1, but it still works. We
@@ -45,49 +44,66 @@ class LessCompiler extends MultiFileCachingCompiler {
/\.lessimport$/.test(pathInPackage));
}
compileOneFileLater(inputFile, getResult) {
inputFile.addStylesheet({
path: inputFile.getPathInPackage(),
}, async () => {
const result = await getResult();
return result && {
data: result.css,
sourceMap: result.sourceMap,
};
});
}
compileOneFile(inputFile, allFiles) {
const importPlugin = new MeteorImportLessPlugin(allFiles);
const f = new Future;
let output;
try {
less.render(inputFile.getContentsAsBuffer().toString('utf8'), {
filename: this.getAbsoluteImportPath(inputFile),
plugins: [importPlugin],
// Generate a source map, and include the source files in the
// sourcesContent field. (Note that source files which don't themselves
// produce text (eg, are entirely variable definitions) won't end up in
// the source map!)
sourceMap: { outputSourceFiles: true }
}, f.resolver());
output = f.wait();
} catch (e) {
return less.render(inputFile.getContentsAsBuffer().toString('utf8'), {
filename: this.getAbsoluteImportPath(inputFile),
plugins: [importPlugin],
// Generate a source map, and include the source files in the
// sourcesContent field. (Note that source files which don't
// themselves produce text (eg, are entirely variable definitions)
// won't end up in the source map!)
sourceMap: { outputSourceFiles: true }
}).then(output => {
if (output.map) {
const map = JSON.parse(output.map);
map.sources = map.sources.map(decodeFilePath);
output.map = map;
}
const compileResult = {
css: output.css,
sourceMap: output.map,
};
const referencedImportPaths = [];
output.imports.forEach((path) => {
// Some files that show up in output.imports are not actually files; for
// example @import url("...");
if (allFiles.has(path)) {
referencedImportPaths.push(path);
}
});
return {
compileResult,
referencedImportPaths,
};
}, e => {
inputFile.error({
message: e.message,
sourcePath: decodeFilePath(e.filename),
line: e.line,
column: e.column
});
return null;
}
if (output.map) {
const map = JSON.parse(output.map);
map.sources = map.sources.map(decodeFilePath);
output.map = map;
}
const compileResult = {css: output.css, sourceMap: output.map};
const referencedImportPaths = [];
output.imports.forEach((path) => {
// Some files that show up in output.imports are not actually files; for
// example @import url("...");
if (allFiles.has(path)) {
referencedImportPaths.push(path);
}
});
return {compileResult, referencedImportPaths};
}
addCompileResult(inputFile, compileResult) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "The Meteor command-line tool",
version: '1.7.0_1'
version: '1.7.0_3'
});
Package.includeTool();

View File

@@ -5,6 +5,11 @@ import {
import { StreamClientCommon } from "./common.js";
// Statically importing SockJS here will prevent native WebSocket usage
// below (in favor of SockJS), but will ensure maximum compatibility for
// clients stuck in unusual networking environments.
import "./sockjs-0.3.4.js";
export class ClientStream extends StreamClientCommon {
// @param url {String} URL to Meteor app
// "http://subdomain.meteor.com/" or "/" or

View File

@@ -1,6 +1,6 @@
Package.describe({
name: "socket-stream-client",
version: "0.2.1",
version: "0.2.2",
summary: "Provides the ClientStream abstraction used by ddp-client",
documentation: "README.md"
});

View File

@@ -0,0 +1 @@
console.log("LEGACY");

View File

@@ -0,0 +1 @@
console.log("MODERN");

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Serves a Meteor app over HTTP",
version: '1.6.0'
version: '1.6.1'
});
Npm.depends({"basic-auth-connect": "1.0.0",
@@ -57,4 +57,7 @@ Package.onTest(function (api) {
api.addFiles('webapp_tests.js', 'server');
api.addFiles('webapp_client_tests.js', 'client');
api.addFiles('socket_file_tests.js', 'server');
api.addAssets('modern_test_asset.js', 'web.browser');
api.addAssets('legacy_test_asset.js', 'legacy');
});

View File

@@ -484,23 +484,33 @@ function getStaticFileInfo(originalPath, browser) {
return null;
}
if (hasOwn.call(staticFilesByArch, arch)) {
// Get a list of all available static file architectures, with arch
// first in the list if it exists.
const staticArchList = Object.keys(staticFilesByArch);
const archIndex = staticArchList.indexOf(arch);
if (archIndex > 0) {
staticArchList.unshift(staticArchList.splice(archIndex, 1)[0]);
}
let info = null;
staticArchList.some(arch => {
const staticFiles = staticFilesByArch[arch];
// If staticFiles contains originalPath with the arch inferred above,
// use that information.
if (hasOwn.call(staticFiles, originalPath)) {
return staticFiles[originalPath];
return info = staticFiles[originalPath];
}
// If getArchAndPath returned an alternate path, try that instead.
if (path !== originalPath &&
hasOwn.call(staticFiles, path)) {
return staticFiles[path];
return info = staticFiles[path];
}
}
});
return null;
return info;
}
function getArchAndPath(path, browser) {

View File

@@ -2,6 +2,7 @@ const url = require("url");
const crypto = require("crypto");
const http = require("http");
const streamToString = require("stream-to-string");
import { isModern } from "meteor/modern-browsers";
const additionalScript = "(function () { var foo = 1; })";
WebAppInternals.addStaticJs(additionalScript);
@@ -68,6 +69,83 @@ Tinytest.add("webapp - content-type header", function (test) {
"application/javascript; charset=utf-8");
});
const modernUserAgent =
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) " +
"AppleWebKit/537.36 (KHTML, like Gecko) " +
"Chrome/68.0.3440.15 Safari/537.36";
const legacyUserAgent = "legacy";
Tinytest.addAsync("webapp - modern/legacy static files", test => {
test.equal(isModern(WebAppInternals.identifyBrowser(modernUserAgent)), true);
test.equal(isModern(WebAppInternals.identifyBrowser(legacyUserAgent)), false);
const promises = [];
Object.keys(WebAppInternals.staticFilesByArch).forEach(arch => {
const staticFiles = WebAppInternals.staticFilesByArch[arch];
Object.keys(staticFiles).forEach(path => {
const { type } = staticFiles[path];
if (type !== "asset") {
return;
}
const pathMatch = /\/(modern|legacy)_test_asset\.js$/.exec(path);
if (! pathMatch) {
return;
}
const absUrl = url.resolve(Meteor.absoluteUrl(), path);
[ // Try to request the modern/legacy assets with both modern and
// legacy User Agent strings. (#9953)
modernUserAgent,
legacyUserAgent,
].forEach(ua => promises.push(new Promise((resolve, reject) => {
HTTP.get(absUrl, {
headers: {
"User-Agent": ua
}
}, (error, response) => {
if (error) {
reject(error);
return;
}
if (response.statusCode !== 200) {
reject(new Error(`Bad status code ${
response.statusCode
} for ${path}`));
return;
}
const contentType = response.headers["content-type"];
if (! contentType.startsWith("application/javascript")) {
reject(new Error(`Bad Content-Type ${contentType} for ${path}`));
return;
}
const expectedText = pathMatch[1].toUpperCase();
const index = response.content.indexOf(expectedText);
if (index < 0) {
reject(new Error(`Missing ${
JSON.stringify(expectedText)
} text in ${path}`));
return;
}
resolve(path);
});
})));
});
});
test.isTrue(promises.length > 0);
return Promise.all(promises);
});
Tinytest.addAsync(
"webapp - additional static javascript",
async function (test) {

View File

@@ -1,6 +1,6 @@
{
"track": "METEOR",
"version": "1.7.0.1-rc.0",
"version": "1.7.0.3-rc.0",
"recommended": false,
"official": false,
"description": "Meteor"

View File

@@ -1,10 +1,12 @@
{
"track": "METEOR",
"version": "1.7.0.1",
"version": "1.7.0.3",
"recommended": false,
"official": true,
"patchFrom": [
"1.7"
"1.7",
"1.7.0.1",
"1.7.0.2"
],
"description": "The Official Meteor Distribution"
}

View File

@@ -5,7 +5,7 @@ set -u
UNAME=$(uname)
ARCH=$(uname -m)
NODE_VERSION=8.11.2
NODE_VERSION=8.11.3
MONGO_VERSION_64BIT=3.6.4
MONGO_VERSION_32BIT=3.2.19
NPM_VERSION=5.10.0

View File

@@ -14,13 +14,13 @@ var packageJson = {
pacote: "https://github.com/meteor/pacote/tarball/2c16c509074bbba8ca5dd410caf808412ce79e6c",
"node-gyp": "3.6.2",
"node-pre-gyp": "0.6.36",
"meteor-babel": "7.0.0-beta.49-1",
"meteor-babel": "7.0.0-beta.51",
"meteor-promise": "0.8.6",
promise: "8.0.1",
reify: "0.16.2",
fibers: "2.0.0",
// So that Babel can emit require("@babel/runtime/helpers/...") calls.
"@babel/runtime": "7.0.0-beta.49",
"@babel/runtime": "7.0.0-beta.51",
// For backwards compatibility with isopackets that still depend on
// babel-runtime rather than @babel/runtime.
"babel-runtime": "7.0.0-beta.3",
@@ -53,7 +53,7 @@ var packageJson = {
multipipe: "2.0.1",
pathwatcher: "7.1.1",
optimism: "0.6.3",
'lru-cache': '4.1.1'
'lru-cache': '4.1.3'
}
};

View File

@@ -23,6 +23,8 @@ import {
import { isTestFilePath } from './test-files.js';
const hasOwn = Object.prototype.hasOwnProperty;
// This file implements the new compiler plugins added in Meteor 1.2, which are
// registered with the Plugin.registerCompiler API.
//
@@ -221,6 +223,11 @@ class InputFile extends buildPluginModule.InputFile {
// Map from imported module identifier strings (possibly relative) to
// fully require.resolve'd module identifiers.
this._resolveCache = Object.create(null);
// Communicate to compiler plugins that methods like addJavaScript
// accept a lazy finalizer function as a second argument, so that
// compilation can be avoided until/unless absolutely necessary.
this.supportsLazyCompilation = true;
}
getContentsAsBuffer() {
@@ -445,16 +452,16 @@ class InputFile extends buildPluginModule.InputFile {
* @param {String|Object} options.sourceMap A stringified JSON
* sourcemap, in case the stylesheet was generated from a different
* file.
* @param {Function} lazyFinalizer Optional function that can be called
* to obtain any remaining options that may be
* expensive to compute, and thus should only be
* computed if/when we are sure this CSS will be used
* by the application.
* @memberOf InputFile
* @instance
*/
addStylesheet(options) {
var self = this;
if (options.sourceMap && typeof options.sourceMap === 'string') {
// XXX remove an anti-XSSI header? ")]}'\n"
options.sourceMap = JSON.parse(options.sourceMap);
}
self._resourceSlot.addStylesheet(options);
addStylesheet(options, lazyFinalizer) {
this._resourceSlot.addStylesheet(options, lazyFinalizer);
}
/**
@@ -470,16 +477,16 @@ class InputFile extends buildPluginModule.InputFile {
* @param {String|Object} options.sourceMap A stringified JSON
* sourcemap, in case the JavaScript file was generated from a
* different file.
* @param {Function} lazyFinalizer Optional function that can be called
* to obtain any remaining options that may be
* expensive to compute, and thus should only be
* computed if/when we are sure this JavaScript will
* be used by the application.
* @memberOf InputFile
* @instance
*/
addJavaScript(options) {
var self = this;
if (options.sourceMap && typeof options.sourceMap === 'string') {
// XXX remove an anti-XSSI header? ")]}'\n"
options.sourceMap = JSON.parse(options.sourceMap);
}
self._resourceSlot.addJavaScript(options);
addJavaScript(options, lazyFinalizer) {
this._resourceSlot.addJavaScript(options, lazyFinalizer);
}
/**
@@ -493,12 +500,24 @@ class InputFile extends buildPluginModule.InputFile {
* file.
* @param {String} [options.hash] Optionally, supply a hash for the output
* file.
* @param {Function} lazyFinalizer Optional function that can be called
* to obtain any remaining options that may be
* expensive to compute, and thus should only be
* computed if/when we are sure this asset will be
* used by the application.
* @memberOf InputFile
* @instance
*/
addAsset(options) {
var self = this;
self._resourceSlot.addAsset(options);
addAsset(options, lazyFinalizer) {
if (typeof lazyFinalizer === "function") {
// For now, just call the lazyFinalizer function immediately. Since
// assets typically are not compiled, this immediate invocation is
// probably permanently appropriate for addAsset, whereas methods
// like addJavaScript benefit from waiting to call lazyFinalizer.
Object.assign(options, Promise.await(lazyFinalizer()));
}
this._resourceSlot.addAsset(options);
}
/**
@@ -508,12 +527,24 @@ class InputFile extends buildPluginModule.InputFile {
* @param {String} options.section Which section of the document should
* be appended to. Can only be "head" or "body".
* @param {String} options.data The content to append.
* @param {Function} lazyFinalizer Optional function that can be called
* to obtain any remaining options that may be
* expensive to compute, and thus should only be
* computed if/when we are sure this HTML will be used
* by the application.
* @memberOf InputFile
* @instance
*/
addHtml(options) {
var self = this;
self._resourceSlot.addHtml(options);
if (typeof lazyFinalizer === "function") {
// For now, just call the lazyFinalizer function immediately. Since
// HTML is not compiled, this immediate invocation is probably
// permanently appropriate for addHtml, whereas methods like
// addJavaScript benefit from waiting to call lazyFinalizer.
Object.assign(options, Promise.await(lazyFinalizer()));
}
this._resourceSlot.addHtml(options);
}
_reportError(message, info) {
@@ -544,6 +575,8 @@ class ResourceSlot {
self.outputResources = [];
// JS, which gets linked together at the end.
self.jsOutputResources = [];
// Errors encountered while processing this resource.
self.errors = [];
self.sourceProcessor = sourceProcessor;
self.packageSourceBatch = packageSourceBatch;
@@ -679,100 +712,72 @@ class ResourceSlot {
return isInImports;
}
addStylesheet(options) {
const self = this;
if (! self.sourceProcessor) {
addStylesheet(options, lazyFinalizer) {
if (! this.sourceProcessor) {
throw Error("addStylesheet on non-source ResourceSlot?");
}
const data = files.convertToStandardLineEndings(options.data);
const useMeteorInstall = self.packageSourceBatch.useMeteorInstall;
const sourcePath = this.inputResource.path;
const targetPath = options.path || sourcePath;
const resource = {
refreshable: true,
sourcePath,
targetPath,
servePath: self.packageSourceBatch.unibuild.pkg._getServePath(targetPath),
hash: sha1(data),
lazy: this._isLazy(options, false),
};
// In contrast to addJavaScript, CSS resources passed to addStylesheet
// default to being eager (non-lazy).
options.lazy = this._isLazy(options, false);
if (useMeteorInstall && resource.lazy) {
if (this.packageSourceBatch.useMeteorInstall &&
options.lazy) {
// If the current packageSourceBatch supports modules, and this CSS
// file is lazy, add it as a lazy JS module instead of adding it
// unconditionally as a CSS resource, so that it can be imported
// when needed.
resource.type = "js";
resource.data =
Buffer.from(cssToCommonJS(data, resource.hash), "utf8");
this.addJavaScript(options, async () => {
const result = typeof lazyFinalizer === "function"
? await lazyFinalizer()
: { data: options.data };
self.jsOutputResources.push(resource);
if (result) {
result.data = Buffer.from(cssToCommonJS(result.data), "utf8");
}
return result;
});
} else {
// Eager CSS is added unconditionally to a combined <style> tag at
// the beginning of the <head>. If the corresponding module ever
// gets imported, its module.exports object should be an empty stub,
// rather than a <style> node added dynamically to the <head>.
self.jsOutputResources.push({
...resource,
type: "js",
this.addJavaScript({
...options,
data: Buffer.from(
"// These styles have already been applied to the document.\n",
"utf8"),
lazy: true,
// If a compiler plugin calls addJavaScript with the same
// sourcePath, that code should take precedence over this empty
// stub, so this property marks the resource as disposable.
implicit: true,
lazy: true,
});
// stub, so setting .implicit marks the resource as disposable.
}).implicit = true;
resource.type = "css";
resource.data = Buffer.from(data, 'utf8'),
// XXX do we need to call convertSourceMapPaths here like we did
// in legacy handlers?
resource.sourceMap = options.sourceMap;
self.outputResources.push(resource);
this.outputResources.push(new CssOutputResource({
resourceSlot: this,
options,
lazyFinalizer,
}));
}
}
addJavaScript(options) {
const self = this;
addJavaScript(options, lazyFinalizer) {
// #HardcodeJs this gets called by constructor in the "js" case
if (! self.sourceProcessor && self.inputResource.extension !== "js") {
if (! this.sourceProcessor && this.inputResource.extension !== "js") {
throw Error("addJavaScript on non-source ResourceSlot?");
}
let sourcePath = self.inputResource.path;
if (_.has(options, "sourcePath") &&
typeof options.sourcePath === "string") {
sourcePath = options.sourcePath;
}
const targetPath = options.path || sourcePath;
var data = Buffer.from(
files.convertToStandardLineEndings(options.data), 'utf8');
self.jsOutputResources.push({
type: "js",
data: data,
sourcePath,
targetPath,
servePath: self.packageSourceBatch.unibuild.pkg._getServePath(targetPath),
// XXX should we allow users to be trusted and specify a hash?
hash: sha1(data),
// XXX do we need to call convertSourceMapPaths here like we did
// in legacy handlers?
sourceMap: options.sourceMap,
// intentionally preserve a possible `undefined` value for files
// in apps, rather than convert it into `false` via `!!`
lazy: self._isLazy(options, true),
bare: !! self._getOption("bare", options),
mainModule: !! self._getOption("mainModule", options),
const resource = new JsOutputResource({
resourceSlot: this,
options,
lazyFinalizer,
});
this.jsOutputResources.push(resource);
return resource;
}
addAsset(options) {
@@ -827,20 +832,141 @@ class ResourceSlot {
addError(message, info) {
// If this file is ever actually imported, only then will we report
// the error. Use this.jsOutputResources because that's what the
// ImportScanner deals with.
this.jsOutputResources.push({
type: "js",
sourcePath: this.inputResource.path,
targetPath: this.inputResource.path,
servePath: this.inputResource.path,
data: Buffer.from(
"throw new Error(" + JSON.stringify(message) + ");\n",
"utf8"),
lazy: true,
error: { message, info },
// the error.
this.errors.push({ message, info });
}
}
class OutputResource {
constructor({
type,
resourceSlot,
options = Object.create(null),
lazyFinalizer = null,
}) {
this._lazyFinalizer = lazyFinalizer;
this._initialOptions = options;
this._finalizerPromise = null;
// Share the errors array of the resourceSlot.
this._errors = resourceSlot.errors;
let sourcePath = resourceSlot.inputResource.path;
if (_.has(options, "sourcePath") &&
typeof options.sourcePath === "string") {
sourcePath = options.sourcePath;
}
const targetPath = options.path || sourcePath;
Object.assign(this, {
type,
lazy: resourceSlot._isLazy(options, true),
bare: !! resourceSlot._getOption("bare", options),
mainModule: !! resourceSlot._getOption("mainModule", options),
sourcePath,
targetPath,
servePath: resourceSlot.packageSourceBatch
.unibuild.pkg._getServePath(targetPath),
});
}
finalize() {
if (this._finalizerPromise) {
this._finalizerPromise.await();
} else if (this._lazyFinalizer) {
const finalize = this._lazyFinalizer;
this._lazyFinalizer = null;
(this._finalizerPromise = new Promise(
resolve => resolve(finalize())
).then(result => {
Object.assign(this._initialOptions, result);
this._finalizerPromise = null;
})).await();
}
}
reportPendingErrors() {
this.finalize();
const count = this._errors.length;
if (count > 0) {
const firstError = this._errors[0];
buildmessage.error(
firstError.message,
firstError.info
);
}
return count;
}
get data() { return this._get("data"); }
set data(value) { return this._set("data", value); }
get hash() { return this._get("hash"); }
set hash(value) { return this._set("hash", value); }
get sourceMap() { return this._get("sourceMap"); }
set sourceMap(value) { return this._set("sourceMap", value); }
// Method for getting properties that may be computed lazily, or that
// require some one-time post-processing.
_get(name) {
if (hasOwn.call(this, name)) {
return this[name];
}
this.finalize();
switch (name) {
case "data":
let { data } = this._initialOptions;
if (! Buffer.isBuffer(data)) {
data = Buffer.from(data, "utf8");
}
return this._set("data", data);
case "hash":
const { hash } = this._initialOptions;
return this._set("hash", hash || sha1(this._get("data")));
case "sourceMap":
let { sourceMap } = this._initialOptions;
if (sourceMap && typeof sourceMap === "string") {
sourceMap = JSON.parse(sourceMap);
}
return this._set("sourceMap", sourceMap);
}
if (! hasOwn.call(this._initialOptions, name)) {
throw new Error(`Unknown JsOutputResource property: ${name}`);
}
return this[name] = this._initialOptions[name];
}
// This method must be used to set any properties that have a getter
// defined above (data, hash, sourceMap).
_set(name, value) {
Object.defineProperty(this, name, {
value,
enumerable: true,
writable: true,
configurable: true,
});
return value;
}
}
class JsOutputResource extends OutputResource {
constructor(options) {
super({ ...options, type: "js" });
}
}
class CssOutputResource extends OutputResource {
constructor(options) {
super({ ...options, type: "css" });
this.refreshable = true;
}
}
export class PackageSourceBatch {

View File

@@ -249,19 +249,6 @@ export default class ImportScanner {
// something plausible. #6411 #6383
const absPath = pathJoin(this.sourceRoot, file.sourcePath);
const dotExt = "." + file.type;
const dataString = file.data.toString("utf8");
file.dataString = defaultExtensionHandlers[dotExt].call(
file,
dataString,
file.hash,
);
if (! (file.data instanceof Buffer) ||
file.dataString !== dataString) {
file.data = Buffer.from(file.dataString, "utf8");
}
// This property can have values false, true, "dynamic" (which
// indicates that the file has been imported, but only dynamically).
file.imported = false;
@@ -302,9 +289,10 @@ export default class ImportScanner {
const files = this.realPathToFiles[realPath];
if (files && files.length > 0) {
const firstFile = files[0];
const dataString = this._getDataString(firstFile);
return {
data: firstFile.data,
dataString: firstFile.dataString,
dataString: dataString,
hash: firstFile.hash,
};
}
@@ -417,7 +405,7 @@ export default class ImportScanner {
// plugin calling inputFile.addJavaScript multiple times for the
// same source file (see discussion in #9176), with different target
// paths, code, laziness, etc.
sourceFile.dataString += [
sourceFile.dataString = this._getDataString(sourceFile) + [
"module.watch(require(" + JSON.stringify(relativeId) + "), {",
' "*": module.makeNsSetter(true)',
"});",
@@ -437,6 +425,8 @@ export default class ImportScanner {
// maps and updating all other properties appropriately. Once this
// combination is done, oldFile should be kept and newFile discarded.
_combineFiles(oldFile, newFile) {
const scanner = this;
function checkProperty(name) {
if (has(oldFile, name)) {
if (! has(newFile, name)) {
@@ -469,8 +459,11 @@ export default class ImportScanner {
const consumer = file.sourceMap &&
new SourceMapConsumer(file.sourceMap);
const node = consumer &&
SourceNode.fromStringWithSourceMap(file.dataString, consumer);
return node || file.dataString;
SourceNode.fromStringWithSourceMap(
scanner._getDataString(file),
consumer
);
return node || scanner._getDataString(file);
}
const {
@@ -728,7 +721,7 @@ export default class ImportScanner {
}
const result = findImportedModuleIdentifiers(
file.dataString,
this._getDataString(file),
file.hash,
);
@@ -825,14 +818,11 @@ export default class ImportScanner {
// Set file.imported to a truthy value (either "dynamic" or true).
file.imported = forDynamicImport ? "dynamic" : true;
if (file.error) {
if (file.reportPendingErrors &&
file.reportPendingErrors() > 0) {
// Any errors reported to InputFile#error were saved but not
// reported at compilation time. Now that we know the file has been
// imported, it's time to report those errors.
buildmessage.error(
file.error.message,
file.error.info
);
return;
}
@@ -913,6 +903,27 @@ export default class ImportScanner {
return archMatches(this.bundleArch, "web.browser");
}
_getDataString(file) {
if (typeof file.dataString === "string") {
return file.dataString;
}
const dotExt = "." + file.type;
const dataString = file.data.toString("utf8");
file.dataString = defaultExtensionHandlers[dotExt].call(
file,
dataString,
file.hash,
);
if (! (file.data instanceof Buffer) ||
file.dataString !== dataString) {
file.data = Buffer.from(file.dataString, "utf8");
}
return file.dataString;
}
_readFile(absPath) {
const contents = optimisticReadFile(absPath);
const hash = optimisticHashOrNull(absPath);

View File

@@ -889,6 +889,7 @@ _.extend(PackageSource.prototype, {
sourceArch: this,
ignoreFiles,
isApp: true,
testModule,
};
// If this architecture has a mainModule defined in
@@ -1025,8 +1026,9 @@ _.extend(PackageSource.prototype, {
return fileOptions;
}
// Files in `imports/` should be lazily loaded *apart* from tests
if (dir === "imports" && ! isTestFile) {
// Files in `imports/` and `tests/` directories should be lazily
// loaded *apart* from tests.
if ((dir === "imports" || dir === "tests") && ! isTestFile) {
fileOptions.lazy = true;
}
@@ -1080,6 +1082,7 @@ _.extend(PackageSource.prototype, {
watchSet,
isApp,
sourceArch,
testModule,
loopChecker = new SymlinkLoopChecker(this.sourceRoot),
ignoreFiles = []
}) {
@@ -1102,10 +1105,10 @@ _.extend(PackageSource.prototype, {
// Unless we're running tests, ignore all test filenames and if we are, ignore the
// type of file we *aren't* running
if (!global.testCommandMetadata || global.testCommandMetadata.isTest) {
Array.prototype.push.apply(sourceReadOptions.exclude, APP_TEST_FILENAME_REGEXPS);
sourceReadOptions.exclude.push(...APP_TEST_FILENAME_REGEXPS);
}
if (!global.testCommandMetadata || global.testCommandMetadata.isAppTest) {
Array.prototype.push.apply(sourceReadOptions.exclude, TEST_FILENAME_REGEXPS);
sourceReadOptions.exclude.push(...TEST_FILENAME_REGEXPS);
}
// Read top-level source files, excluding control files that were not
@@ -1116,13 +1119,21 @@ _.extend(PackageSource.prototype, {
controlFiles.push('package.js');
}
const anyLevelExcludes = [
/^tests\/$/,
const anyLevelExcludes = [];
// If we have a meteor.testModule from package.json, then we don't
// need to exclude tests/ directories from the search, because we
// trust meteor.testModule to identify a single test entry point.
if (! testModule) {
anyLevelExcludes.push(/^tests\/$/);
}
anyLevelExcludes.push(
archinfo.matches(arch, "os")
? /^client\/$/
: /^server\/$/,
...sourceReadOptions.exclude,
];
);
const topLevelExcludes = isApp ? [
...anyLevelExcludes,

View File

@@ -5,7 +5,7 @@
"start": "meteor run"
},
"dependencies": {
"@babel/runtime": "^7.0.0-beta.48",
"@babel/runtime": "^7.0.0-beta.51",
"meteor-node-stubs": "^0.4.1"
}
}

View File

@@ -6,7 +6,7 @@
"test": "meteor test --once --driver-package meteortesting:mocha"
},
"dependencies": {
"@babel/runtime": "^7.0.0-beta.48",
"@babel/runtime": "^7.0.0-beta.51",
"meteor-node-stubs": "^0.4.1"
},
"devDependencies": {

View File

@@ -8,7 +8,7 @@
"visualize": "meteor --production --extra-packages bundle-visualizer"
},
"dependencies": {
"@babel/runtime": "^7.0.0-beta.48",
"@babel/runtime": "^7.0.0-beta.51",
"meteor-node-stubs": "^0.4.1"
},
"meteor": {
@@ -16,6 +16,6 @@
"client": "client/main.js",
"server": "server/main.js"
},
"testModule": "test/main.js"
"testModule": "tests/main.js"
}
}

View File

@@ -8,7 +8,7 @@
"visualize": "meteor --production --extra-packages bundle-visualizer"
},
"dependencies": {
"@babel/runtime": "^7.0.0-beta.48",
"@babel/runtime": "^7.0.0-beta.51",
"meteor-node-stubs": "^0.4.1"
},
"meteor": {
@@ -16,6 +16,6 @@
"client": "client/main.js",
"server": "server/main.js"
},
"testModule": "test/main.js"
"testModule": "tests/main.js"
}
}

View File

@@ -15,3 +15,4 @@ notices-for-facebook-graph-api-2
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

View File

@@ -4,23 +4,24 @@
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.
meteor-base@1.3.0 # Packages every Meteor app needs to have
meteor-base@1.4.0 # Packages every Meteor app needs to have
mobile-experience@1.0.5 # Packages for a great mobile UX
mongo@1.4.2 # The database Meteor supports right now
mongo@1.5.0 # The database Meteor supports right now
blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views
reactive-var@1.0.11 # Reactive variable for tracker
jquery@1.11.10 # Helpful client-side library
tracker@1.1.3 # Meteor's client-side reactive programming library
tracker@1.2.0 # Meteor's client-side reactive programming library
standard-minifier-css@1.4.0 # CSS minifier run for production mode
standard-minifier-js@2.3.1 # JS minifier run for production mode
es5-shim@4.7.0 # ECMAScript 5 compatibility for older browsers.
ecmascript@0.10.0 # Enable ECMAScript2015+ syntax in app code
standard-minifier-css@1.4.1 # CSS minifier run for production mode
standard-minifier-js@2.3.4 # JS minifier run for production mode
es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers.
ecmascript@0.11.0 # Enable ECMAScript2015+ syntax in app code
shell-server@0.3.1 # Server-side component of the `meteor shell` command
autopublish@1.0.7 # Publish all data to the clients (for prototyping)
insecure@1.0.7 # Allow all DB writes from clients (for prototyping)
dynamic-import@0.3.0
dynamic-import@0.4.0
lazy-test-package
helper-package
user:colon-name
underscore

View File

@@ -1 +1 @@
METEOR@1.6.1
METEOR@1.7.0.1

View File

@@ -0,0 +1,82 @@
allow-deny@1.1.0
autopublish@1.0.7
autoupdate@1.4.0
babel-compiler@7.1.0
babel-runtime@1.2.2
base64@1.0.11
binary-heap@1.0.10
blaze@2.3.2
blaze-html-templates@1.1.2
blaze-tools@1.0.10
boilerplate-generator@1.5.0
caching-compiler@1.1.12
caching-html-compiler@1.1.2
callback-hook@1.1.0
check@1.3.1
coffeescript@2.2.1_1
coffeescript-compiler@2.2.1_1
ddp@1.4.0
ddp-client@2.3.2
ddp-common@1.4.0
ddp-server@2.2.0
deps@1.0.12
diff-sequence@1.1.0
dynamic-import@0.4.0
ecmascript@0.11.0
ecmascript-runtime@0.7.0
ecmascript-runtime-client@0.7.1
ecmascript-runtime-server@0.7.0
ejson@1.1.0
es5-shim@4.8.0
geojson-utils@1.0.10
helper-package@0.0.1
hot-code-push@1.0.4
html-tools@1.0.11
htmljs@1.0.11
http@1.4.1
id-map@1.1.0
insecure@1.0.7
jquery@1.11.11
launch-screen@1.1.1
lazy-test-package@0.0.1
livedata@1.0.18
logging@1.1.20
meteor@1.9.0
meteor-base@1.4.0
minifier-css@1.3.1
minifier-js@2.3.5
minimongo@1.4.4
mobile-experience@1.0.5
mobile-status-bar@1.0.14
modern-browsers@0.1.1
modules@0.12.0
modules-runtime@0.10.0
mongo@1.5.0
mongo-dev-server@1.1.0
mongo-id@1.0.7
npm-mongo@3.0.7
observe-sequence@1.0.16
ordered-dict@1.1.0
promise@0.11.1
random@1.1.0
reactive-var@1.0.11
reload@1.2.0
retry@1.1.0
routepolicy@1.0.13
shell-server@0.3.1
socket-stream-client@0.2.1
spacebars@1.0.15
spacebars-compiler@1.1.3
standard-minifier-css@1.4.1
standard-minifier-js@2.3.4
templating@1.3.2
templating-compiler@1.3.3
templating-runtime@1.3.2
templating-tools@1.1.2
tracker@1.2.0
ui@1.0.13
underscore@1.0.10
url@1.2.0
user:colon-name@0.0.1
webapp@1.6.0
webapp-hashing@1.0.9

View File

@@ -4,12 +4,12 @@
"lockfileVersion": 1,
"dependencies": {
"@babel/runtime": {
"version": "7.0.0-beta.46",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.46.tgz",
"integrity": "sha512-/3a3USMKk54BEHhDgY8rtxtaQOs4bp4aQwo6SDtdwmrXmgSgEusWuXNX5oIs/nwzmTD9o8wz2EyAjA+uHDMmJA==",
"version": "7.0.0-beta.49",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.49.tgz",
"integrity": "sha1-A7O/B+uYIHLI6FHdLd1RECguYb8=",
"requires": {
"core-js": "2.5.6",
"regenerator-runtime": "0.11.1"
"core-js": "^2.5.6",
"regenerator-runtime": "^0.11.1"
}
},
"acorn": {
@@ -76,9 +76,9 @@
}
},
"core-js": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz",
"integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ=="
"version": "2.5.7",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
"integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw=="
},
"core-util-is": {
"version": "1.0.2",
@@ -272,28 +272,28 @@
"resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-0.4.1.tgz",
"integrity": "sha512-UO2OStvLOKoApmOdIP5eCqoLaa/ritMXRg4ffJVdkNLEsczzPvTjgC0Mxk4cM4R8MZkwll90FYgjDf5qUTJdMA==",
"requires": {
"assert": "1.4.1",
"browserify-zlib": "0.1.4",
"buffer": "4.9.1",
"console-browserify": "1.1.0",
"constants-browserify": "1.0.0",
"crypto-browserify": "3.12.0",
"domain-browser": "1.2.0",
"events": "1.1.1",
"assert": "^1.4.1",
"browserify-zlib": "^0.1.4",
"buffer": "^4.9.1",
"console-browserify": "^1.1.0",
"constants-browserify": "^1.0.0",
"crypto-browserify": "^3.11.0",
"domain-browser": "^1.1.7",
"events": "^1.1.1",
"https-browserify": "0.0.1",
"os-browserify": "0.2.1",
"os-browserify": "^0.2.1",
"path-browserify": "0.0.0",
"process": "0.11.10",
"punycode": "1.4.1",
"querystring-es3": "0.2.1",
"readable-stream": "2.3.6",
"stream-browserify": "2.0.1",
"stream-http": "2.8.1",
"string_decoder": "1.1.1",
"timers-browserify": "1.4.2",
"process": "^0.11.9",
"punycode": "^1.4.1",
"querystring-es3": "^0.2.1",
"readable-stream": "^2.3.6",
"stream-browserify": "^2.0.1",
"stream-http": "^2.8.0",
"string_decoder": "^1.1.0",
"timers-browserify": "^1.4.2",
"tty-browserify": "0.0.0",
"url": "0.11.0",
"util": "0.10.3",
"url": "^0.11.0",
"util": "^0.10.3",
"vm-browserify": "0.0.4"
},
"dependencies": {
@@ -301,9 +301,9 @@
"version": "4.10.1",
"bundled": true,
"requires": {
"bn.js": "4.11.8",
"inherits": "2.0.1",
"minimalistic-assert": "1.0.1"
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
}
},
"assert": {
@@ -329,67 +329,67 @@
"version": "1.2.0",
"bundled": true,
"requires": {
"buffer-xor": "1.0.3",
"cipher-base": "1.0.4",
"create-hash": "1.2.0",
"evp_bytestokey": "1.0.3",
"inherits": "2.0.1",
"safe-buffer": "5.1.2"
"buffer-xor": "^1.0.3",
"cipher-base": "^1.0.0",
"create-hash": "^1.1.0",
"evp_bytestokey": "^1.0.3",
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
}
},
"browserify-cipher": {
"version": "1.0.1",
"bundled": true,
"requires": {
"browserify-aes": "1.2.0",
"browserify-des": "1.0.1",
"evp_bytestokey": "1.0.3"
"browserify-aes": "^1.0.4",
"browserify-des": "^1.0.0",
"evp_bytestokey": "^1.0.0"
}
},
"browserify-des": {
"version": "1.0.1",
"bundled": true,
"requires": {
"cipher-base": "1.0.4",
"des.js": "1.0.0",
"inherits": "2.0.1"
"cipher-base": "^1.0.1",
"des.js": "^1.0.0",
"inherits": "^2.0.1"
}
},
"browserify-rsa": {
"version": "4.0.1",
"bundled": true,
"requires": {
"bn.js": "4.11.8",
"randombytes": "2.0.6"
"bn.js": "^4.1.0",
"randombytes": "^2.0.1"
}
},
"browserify-sign": {
"version": "4.0.4",
"bundled": true,
"requires": {
"bn.js": "4.11.8",
"browserify-rsa": "4.0.1",
"create-hash": "1.2.0",
"create-hmac": "1.1.7",
"elliptic": "6.4.0",
"inherits": "2.0.1",
"parse-asn1": "5.1.1"
"bn.js": "^4.1.1",
"browserify-rsa": "^4.0.0",
"create-hash": "^1.1.0",
"create-hmac": "^1.1.2",
"elliptic": "^6.0.0",
"inherits": "^2.0.1",
"parse-asn1": "^5.0.0"
}
},
"browserify-zlib": {
"version": "0.1.4",
"bundled": true,
"requires": {
"pako": "0.2.9"
"pako": "~0.2.0"
}
},
"buffer": {
"version": "4.9.1",
"bundled": true,
"requires": {
"base64-js": "1.3.0",
"ieee754": "1.1.11",
"isarray": "1.0.0"
"base64-js": "^1.0.2",
"ieee754": "^1.1.4",
"isarray": "^1.0.0"
}
},
"buffer-xor": {
@@ -404,15 +404,15 @@
"version": "1.0.4",
"bundled": true,
"requires": {
"inherits": "2.0.1",
"safe-buffer": "5.1.2"
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
}
},
"console-browserify": {
"version": "1.1.0",
"bundled": true,
"requires": {
"date-now": "0.1.4"
"date-now": "^0.1.4"
}
},
"constants-browserify": {
@@ -427,48 +427,48 @@
"version": "4.0.3",
"bundled": true,
"requires": {
"bn.js": "4.11.8",
"elliptic": "6.4.0"
"bn.js": "^4.1.0",
"elliptic": "^6.0.0"
}
},
"create-hash": {
"version": "1.2.0",
"bundled": true,
"requires": {
"cipher-base": "1.0.4",
"inherits": "2.0.1",
"md5.js": "1.3.4",
"ripemd160": "2.0.2",
"sha.js": "2.4.11"
"cipher-base": "^1.0.1",
"inherits": "^2.0.1",
"md5.js": "^1.3.4",
"ripemd160": "^2.0.1",
"sha.js": "^2.4.0"
}
},
"create-hmac": {
"version": "1.1.7",
"bundled": true,
"requires": {
"cipher-base": "1.0.4",
"create-hash": "1.2.0",
"inherits": "2.0.1",
"ripemd160": "2.0.2",
"safe-buffer": "5.1.2",
"sha.js": "2.4.11"
"cipher-base": "^1.0.3",
"create-hash": "^1.1.0",
"inherits": "^2.0.1",
"ripemd160": "^2.0.0",
"safe-buffer": "^5.0.1",
"sha.js": "^2.4.8"
}
},
"crypto-browserify": {
"version": "3.12.0",
"bundled": true,
"requires": {
"browserify-cipher": "1.0.1",
"browserify-sign": "4.0.4",
"create-ecdh": "4.0.3",
"create-hash": "1.2.0",
"create-hmac": "1.1.7",
"diffie-hellman": "5.0.3",
"inherits": "2.0.1",
"pbkdf2": "3.0.16",
"public-encrypt": "4.0.2",
"randombytes": "2.0.6",
"randomfill": "1.0.4"
"browserify-cipher": "^1.0.0",
"browserify-sign": "^4.0.0",
"create-ecdh": "^4.0.0",
"create-hash": "^1.1.0",
"create-hmac": "^1.1.0",
"diffie-hellman": "^5.0.0",
"inherits": "^2.0.1",
"pbkdf2": "^3.0.3",
"public-encrypt": "^4.0.0",
"randombytes": "^2.0.0",
"randomfill": "^1.0.3"
}
},
"date-now": {
@@ -479,17 +479,17 @@
"version": "1.0.0",
"bundled": true,
"requires": {
"inherits": "2.0.1",
"minimalistic-assert": "1.0.1"
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
}
},
"diffie-hellman": {
"version": "5.0.3",
"bundled": true,
"requires": {
"bn.js": "4.11.8",
"miller-rabin": "4.0.1",
"randombytes": "2.0.6"
"bn.js": "^4.1.0",
"miller-rabin": "^4.0.0",
"randombytes": "^2.0.0"
}
},
"domain-browser": {
@@ -500,13 +500,13 @@
"version": "6.4.0",
"bundled": true,
"requires": {
"bn.js": "4.11.8",
"brorand": "1.1.0",
"hash.js": "1.1.3",
"hmac-drbg": "1.0.1",
"inherits": "2.0.1",
"minimalistic-assert": "1.0.1",
"minimalistic-crypto-utils": "1.0.1"
"bn.js": "^4.4.0",
"brorand": "^1.0.1",
"hash.js": "^1.0.0",
"hmac-drbg": "^1.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0",
"minimalistic-crypto-utils": "^1.0.0"
}
},
"events": {
@@ -517,24 +517,24 @@
"version": "1.0.3",
"bundled": true,
"requires": {
"md5.js": "1.3.4",
"safe-buffer": "5.1.2"
"md5.js": "^1.3.4",
"safe-buffer": "^5.1.1"
}
},
"hash-base": {
"version": "3.0.4",
"bundled": true,
"requires": {
"inherits": "2.0.1",
"safe-buffer": "5.1.2"
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
}
},
"hash.js": {
"version": "1.1.3",
"bundled": true,
"requires": {
"inherits": "2.0.3",
"minimalistic-assert": "1.0.1"
"inherits": "^2.0.3",
"minimalistic-assert": "^1.0.0"
},
"dependencies": {
"inherits": {
@@ -547,9 +547,9 @@
"version": "1.0.1",
"bundled": true,
"requires": {
"hash.js": "1.1.3",
"minimalistic-assert": "1.0.1",
"minimalistic-crypto-utils": "1.0.1"
"hash.js": "^1.0.3",
"minimalistic-assert": "^1.0.0",
"minimalistic-crypto-utils": "^1.0.1"
}
},
"https-browserify": {
@@ -576,16 +576,16 @@
"version": "1.3.4",
"bundled": true,
"requires": {
"hash-base": "3.0.4",
"inherits": "2.0.1"
"hash-base": "^3.0.0",
"inherits": "^2.0.1"
}
},
"miller-rabin": {
"version": "4.0.1",
"bundled": true,
"requires": {
"bn.js": "4.11.8",
"brorand": "1.1.0"
"bn.js": "^4.0.0",
"brorand": "^1.0.1"
}
},
"minimalistic-assert": {
@@ -608,11 +608,11 @@
"version": "5.1.1",
"bundled": true,
"requires": {
"asn1.js": "4.10.1",
"browserify-aes": "1.2.0",
"create-hash": "1.2.0",
"evp_bytestokey": "1.0.3",
"pbkdf2": "3.0.16"
"asn1.js": "^4.0.0",
"browserify-aes": "^1.0.0",
"create-hash": "^1.1.0",
"evp_bytestokey": "^1.0.0",
"pbkdf2": "^3.0.3"
}
},
"path-browserify": {
@@ -623,11 +623,11 @@
"version": "3.0.16",
"bundled": true,
"requires": {
"create-hash": "1.2.0",
"create-hmac": "1.1.7",
"ripemd160": "2.0.2",
"safe-buffer": "5.1.2",
"sha.js": "2.4.11"
"create-hash": "^1.1.2",
"create-hmac": "^1.1.4",
"ripemd160": "^2.0.1",
"safe-buffer": "^5.0.1",
"sha.js": "^2.4.8"
}
},
"process": {
@@ -642,11 +642,11 @@
"version": "4.0.2",
"bundled": true,
"requires": {
"bn.js": "4.11.8",
"browserify-rsa": "4.0.1",
"create-hash": "1.2.0",
"parse-asn1": "5.1.1",
"randombytes": "2.0.6"
"bn.js": "^4.1.0",
"browserify-rsa": "^4.0.0",
"create-hash": "^1.1.0",
"parse-asn1": "^5.0.0",
"randombytes": "^2.0.1"
}
},
"punycode": {
@@ -665,28 +665,28 @@
"version": "2.0.6",
"bundled": true,
"requires": {
"safe-buffer": "5.1.2"
"safe-buffer": "^5.1.0"
}
},
"randomfill": {
"version": "1.0.4",
"bundled": true,
"requires": {
"randombytes": "2.0.6",
"safe-buffer": "5.1.2"
"randombytes": "^2.0.5",
"safe-buffer": "^5.1.0"
}
},
"readable-stream": {
"version": "2.3.6",
"bundled": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "2.0.0",
"safe-buffer": "5.1.2",
"string_decoder": "1.1.1",
"util-deprecate": "1.0.2"
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
},
"dependencies": {
"inherits": {
@@ -699,8 +699,8 @@
"version": "2.0.2",
"bundled": true,
"requires": {
"hash-base": "3.0.4",
"inherits": "2.0.1"
"hash-base": "^3.0.0",
"inherits": "^2.0.1"
}
},
"safe-buffer": {
@@ -711,41 +711,41 @@
"version": "2.4.11",
"bundled": true,
"requires": {
"inherits": "2.0.1",
"safe-buffer": "5.1.2"
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
}
},
"stream-browserify": {
"version": "2.0.1",
"bundled": true,
"requires": {
"inherits": "2.0.1",
"readable-stream": "2.3.6"
"inherits": "~2.0.1",
"readable-stream": "^2.0.2"
}
},
"stream-http": {
"version": "2.8.1",
"bundled": true,
"requires": {
"builtin-status-codes": "3.0.0",
"inherits": "2.0.1",
"readable-stream": "2.3.6",
"to-arraybuffer": "1.0.1",
"xtend": "4.0.1"
"builtin-status-codes": "^3.0.0",
"inherits": "^2.0.1",
"readable-stream": "^2.3.3",
"to-arraybuffer": "^1.0.0",
"xtend": "^4.0.0"
}
},
"string_decoder": {
"version": "1.1.1",
"bundled": true,
"requires": {
"safe-buffer": "5.1.2"
"safe-buffer": "~5.1.0"
}
},
"timers-browserify": {
"version": "1.4.2",
"bundled": true,
"requires": {
"process": "0.11.10"
"process": "~0.11.0"
}
},
"to-arraybuffer": {

View File

@@ -6,7 +6,7 @@
"test": "TEST_BROWSER_DRIVER=puppeteer meteor test --full-app --driver-package meteortesting:mocha"
},
"dependencies": {
"@babel/runtime": "^7.0.0-beta.46",
"@babel/runtime": "^7.0.0-beta.49",
"acorn": "^4.0.11",
"arson": "^0.2.3",
"meteor-node-stubs": "^0.4.1",