mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Merge branch 'devel' into devel
This commit is contained in:
31
History.md
31
History.md
@@ -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
2
meteor
@@ -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.
|
||||
|
||||
1135
packages/babel-compiler/.npm/package/npm-shrinkwrap.json
generated
1135
packages/babel-compiler/.npm/package/npm-shrinkwrap.json
generated
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
node_modules
|
||||
@@ -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.
|
||||
@@ -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="
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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"
|
||||
});
|
||||
|
||||
@@ -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") {
|
||||
|
||||
@@ -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'
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Package.describe({
|
||||
name: 'less',
|
||||
version: '2.7.12',
|
||||
version: '2.8.0',
|
||||
summary: 'Leaner CSS language',
|
||||
documentation: 'README.md'
|
||||
});
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Package.describe({
|
||||
summary: "The Meteor command-line tool",
|
||||
version: '1.7.0_1'
|
||||
version: '1.7.0_3'
|
||||
});
|
||||
|
||||
Package.includeTool();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
});
|
||||
|
||||
1
packages/webapp/legacy_test_asset.js
Normal file
1
packages/webapp/legacy_test_asset.js
Normal file
@@ -0,0 +1 @@
|
||||
console.log("LEGACY");
|
||||
1
packages/webapp/modern_test_asset.js
Normal file
1
packages/webapp/modern_test_asset.js
Normal file
@@ -0,0 +1 @@
|
||||
console.log("MODERN");
|
||||
@@ -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');
|
||||
});
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1 +1 @@
|
||||
METEOR@1.6.1
|
||||
METEOR@1.7.0.1
|
||||
|
||||
82
tools/tests/apps/dynamic-import/.meteor/versions
Normal file
82
tools/tests/apps/dynamic-import/.meteor/versions
Normal 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
|
||||
290
tools/tests/apps/dynamic-import/package-lock.json
generated
290
tools/tests/apps/dynamic-import/package-lock.json
generated
@@ -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": {
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user