Commit Graph

7096 Commits

Author SHA1 Message Date
Ben Newman
c67d40f7f1 Merge branch 'devel' into release-1.8.1 2018-11-15 15:56:54 -05:00
Ben Newman
014dfab1ac Implement ResourceSlot#_addDirectlyToJsOutputResources to fix #10337. (#10338) 2018-11-15 11:10:47 -06:00
Ben Newman
d19ac6a5dd Merge branch 'devel' into release-1.8.1 2018-11-12 20:52:26 -05:00
Ben Newman
4294414506 Update meteor-babel to version 7.1.5. 2018-11-12 19:35:47 -05:00
Ben Newman
44e713f046 Ensure file.hash is always computed from sha1(file.data).
With the introduction of lazy compilation in Meteor 1.8, calling

  inputFile.addJavaScript({
    ...
    hash: inputFile.getSourceHash(),
    ...
  }, function () {
    return compiler.processFilesForTarget(inputFile);
  });

becomes problematic, since inputFile.getSourceHash() is usually different
from compiler.processFilesForTarget(inputFile).hash, because the latter is
computed from the compiled code, whereas the former is computed from the
source code.

For example, when we use file.hash to cache imported module identifiers in
ImportScanner#_findImportedModuleIdentifiers, we really need to be using
the hash of the compiled code, since a single source module can be
compiled in different ways. If we cache based on the source hash, there's
a risk of reusing the scanned imports from the web.browser version for the
web.browser.legacy version, which can lead to all sorts of problems that
are only apparent in legacy browsers.

The quick fix is easy enough: BabelCompiler can simply stop including a
hash in the eager options to inputFile.addJavaScript. This fix can be
published as a minor update to the babel-compiler and ecmascript packages.

The remaining changes in this commit add another layer of defense against
this problem, by ignoring any hash options provided by compiler plugins,
in favor of simply computing the hash from the compiled data buffer.
These additional changes will become available in the next release of
Meteor (likely 1.8.1).
2018-11-12 18:57:06 -05:00
Ben Newman
3a18f67ac2 Rely on native Node.js Promise implementation.
There's no reason to use a Promise polyfill in Node.js at this point.
2018-11-03 13:58:48 -04:00
Christian Klaussner
0e9660097d Update self-tests for mongo-free autoupdate 2018-11-03 13:32:01 -04:00
Ben Newman
c96278700d Fix compiler plugins self-tests by waiting for lazy compilation to finish. 2018-10-31 10:41:31 -04:00
Ben Newman
18762f97a2 Update modules test app to Meteor 1.8. 2018-10-13 19:32:10 -04:00
Ben Newman
94771d233e Update dynamic-import test app to Meteor 1.8. 2018-10-13 19:27:48 -04:00
Ben Newman
ed41dcd4a6 Flatten buildmessage.{enterJob,capture} stacks by not using withValue. (#10266)
Whenever you're looking at a stack trace generated by the command-line
tool, you see tons and tons of useless stack frames for withValue,
enterJob, and/or capture.

Each of these function calls has its own try-finally block, which is
probably the real reason this pattern is slow, though the excess of
unnecessary stack frames is subjectively gross as well.

Initial build times for the `meteor create --full` app on my machine are
about 4.4 seconds with Meteor 1.8, and just 2.8 seconds after this change,
which is a nice 36% improvement. Rebuild times are not noticeably
different, however.

Looking to the future, flattening this function call pyramid should make
it easier to introduce non-Fiber-based async/await into the buildmessage
system, so that we can start properly propagating promises up the stack.
2018-10-11 09:47:17 -04:00
Ben Newman
c5f6c270b7 Avoid modifying source files explicitly added by compiler plugins.
Should resolve #10233, reported by @klaussner.

Previously, if a compiler plugin called inputFile.addJavaScript multiple
times with different { path } strings, Meteor would allow importing all of
those modules at once by importing the original source module identifier,
by synthesizing a new source module containing a series of re-exports for
each of the generated modules.

Preserving this behavior is important for backwards compatibility, since
some compiler plugins still generate files like "module.ext.js" given an
input file named "module.ext", so Meteor tries to make those modules
interchangeable/synonymous.

However, if the compiler plugin explicitly calls inputFile.addJavaScript
with the original source path, then it would be a mistake to modify the
contents of that module, so Meteor will now leave the contents of that
explicit source module unmodified, rather than using it as a catch-all way
to import other generated modules.
2018-10-03 15:13:08 -04:00
Ben Newman
dd00c6b0c1 Warn about duplicate api.mainModule paths, like api.addFiles does.
This would have helped catch the underlying problem in #10234.
2018-10-03 15:13:08 -04:00
Ben Newman
8f8e2a01f6 Be more tolerant of missing err.stack in parse-stack.js.
Should help with #10083.
2018-10-03 15:13:08 -04:00
Lisa Huang
0e899c4091 Fix LGTM testing errors (issue #10240, PR #10241)
* fix issue 10240: add variable declaration

* fix issue 10240: add semicolons to avoid automated semicolon insertion

* fix issue 10240: add semicolons to avoid automated semicolon insertion

* fix issue 10240: variable declaration in for...in statement, add semicolons

* fix issue 10240: variable declaration

* fix issue 10240: variable declaration
2018-10-02 10:53:50 -04:00
Ben Newman
a6e52c87b9 Await lingering self.runPromise in AppProcess#_runOnce.
Should fix #10220.
2018-09-18 10:28:37 -04:00
Ben Newman
46396a1156 Instrument build/bundle/deploy commands for METEOR_PROFILE.
https://github.com/meteor/meteor-feature-requests/issues/239
2018-09-18 09:59:14 -04:00
Ben Newman
deffd8ac2c Undo accidental reformatting of meteor create help text.
This broke a test that depends on the precise wording of this help
message: https://circleci.com/gh/meteor/meteor/27381
2018-09-13 12:38:02 -04:00
Ben Newman
9a0ab62850 Update package.json dependencies of --react skeleton app. 2018-09-13 11:53:23 -04:00
Ben Newman
914c18c181 Fully add --react to meteor create (with help text). 2018-09-13 11:53:23 -04:00
Ben Newman
465f6ad02d Style and application layout tweaks for React starter app. 2018-09-13 11:53:22 -04:00
David Mihal
56553f0c3b Create React-based apps with meteor create --react (#10149) 2018-09-13 11:46:41 -04:00
Ben Newman
ac5410e75a Merge branch 'devel' into release-1.7.1 2018-09-12 12:38:37 -04:00
mrauhu
5574f22df5 Fix: file Meteor_:-@2x.png breaks development on Windows (#10110)
* Rename file that breaks development on Windows

* Fix: failing test bundle - verify sanitized asset names
2018-09-12 18:55:38 +03:00
Ben Newman
08027c9fbc Nullify CSS source map when replaced with stub comment.
Should fix #10165.
2018-09-11 14:01:57 -04:00
Ben Newman
881390c553 Avoid trying resolve.extensions unless parent directory exists.
This change dramatically reduces the number of attempted files.stat calls
during module resolution, especially for apps that use a large number of
compiler plugins, and thus have many different file extensions to try.
2018-09-10 16:43:35 -04:00
Ben Newman
1a472a4161 Simplify external symlink handling in Builder#copyDirectory.
Follow-up to af51b816, which fixed #8005 by copying symlinks to external
directories as directories rather than trying to preserve the symlinks.

Issue #10177 revealed a flaw in this strategy: the filter function that we
use to strip development npm packages always rejects external paths, even
if the original symlink was found in a valid production npm package, and
thus its contents should be included in the production bundle.

In the process of fixing this problem, I realized that the only important
part of af51b816 was this code:

  // Update fileStatus to match the actual file rather than the
  // symbolic link, thus forcing the file to be copied below.
  fileStatus = optimisticLStatOrNull(externalPath);

and the code for manipulating thisAbsFrom and _currentRealRootDirectory
could be removed.
2018-09-05 21:30:27 -04:00
Ben Newman
05dd6095a0 Merge pull request #10193 from wojtkowiak/cordova_consistency_fix
Cordova plugin handling algorithm consistency improvements
2018-09-05 21:59:04 +00:00
Ben Newman
4a688d7ca9 Show web.browser.legacy rebuild time only when METEOR_PROFILE enabled.
In theory, these delayed rebuilds should not even be noticed, so it
doesn't make sense to draw attention to them.
2018-09-05 17:56:57 -04:00
Ben Newman
dc8f4ffb13 Update meteor-babel to version 7.0.0. 🎉 2018-09-05 12:08:17 -04:00
Bartosz Wojtkowiak
1f8ffbf56a Improvements to cordova plugin set change detection algorithm
Fixes several cases causing cordova plugins reinstall on every build:
- proper handling of scoped npm cordova plugins
- proper detection of plugin removal (previously a cordova plugin containing a dependency would make the algorithm think a package was removed from cordova-plugins)
- proper handling of plugins which have plugin.xml id different than the npm package name
Additionally rechecks the build integrity verifying if packages were really installed and perform a retry if needed.
Allows to override a meteor package cordova dependency with scoped package i.e. @scope/cordova-dummy-plugin will now override a cordova-dummy-plugin dependency.
2018-09-04 12:58:21 +02:00
zhadzlik
5558e50b88 Validating Cordova plugins installation (#9548) 2018-09-04 11:10:18 +02:00
Ben Newman
b983f9718d Update meteor-babel to version 7.0.0-rc.2. 2018-08-21 20:22:02 -04:00
Ben Newman
41b2f76ef3 Let plugin packages import from the plugin's npmDependencies.
This should make the @babel/runtime dependency that I added to the
compile-coffeescript plugin in a52a2c28f1
actually work as intended.

Specifically, the babel-runtime package that's bundled into the
compile-coffeescript plugin will now be able to import @babel/runtime and
receive the plugin's private version of @babel/runtime, rather than the
one in dev_bundle/lib/node_modules or the application's node_modules.

cc @hwillson @abernix
2018-08-20 15:25:39 -04:00
Ben Newman
9d75b0976e Merge branch 'master' into devel 2018-08-16 18:02:22 -04:00
Ben Newman
09194e86e8 Merge branch 'dynamic-import-0.4.2' into release-1.7.0.5 2018-08-16 13:20:05 -04:00
Ben Newman
8eb081336b Ignore bad POST requests in dynamic-import request handler.
Should help mitigate #10147.
2018-08-16 13:14:23 -04:00
Ben Newman
1cc5661f15 Ignore bad POST requests in dynamic-import request handler.
Should help mitigate #10147.
2018-08-16 10:10:00 -04:00
Ben Newman
9872a3a71d Tests for @x.y.z! package version constraint override syntax.
Following up on this promise:
https://github.com/meteor/meteor/pull/9942#commitcomment-30080110
2018-08-15 14:05:12 -04:00
Ben Newman
4a70b12edd Allow package-name@x.y.z! override syntax in .meteor/packages.
With this commit, if a top-level package version constraint in
.meteor/packages ends with a '!' character, any other (non-!) constraints
on that package elsewhere in the application will be weakened to accept
any version of the package that is not less than the constraint,
regardless of whether the major/minor versions actually match.

This functionality is extremely useful in cases where an unmaintained
package was last published with api.versionsFrom(<some ancient version>),
thus constraining the major version of any Meteor core package it depended
on, but you really want to upgrade that core package anyway. Just put a
'!' after the core package's version constraint in your .meteor/packages
file, and you will almost certainly get your way. The fact that minimum
versions are still enforced is good/fine because the constraints you want
to override are typically ancient, so they easily match any recent version
of the package.

Your only recourse before this @x.y.z! syntax was to find a replacement
for the unmaintained package, or fork and modify it locally, or somehow
persuade the package author to publish a new version with a more
reasonable api.versionsFrom. None of these options were easy.

Many thanks to @GeoffreyBooth, long-time maintainer of the `coffeescript`
package, for originally suggesting a ! syntax similar to this one:
https://github.com/meteor/meteor-feature-requests/issues/208#issuecomment-400154209

The limitation of this syntax to .meteor/packages is deliberate, since
overriding package version constraints is a power-tool that should be used
sparingly by application developers, and never abused by package authors.
Also, limiting the scope of this syntax reduces the risk of an arms race
between overrides, a la the infamous CSS !important modifier.
2018-08-14 20:27:23 -04:00
Ben Newman
b29ed0d133 Update meteor-babel to version 7.0.0-rc.1. 2018-08-09 16:35:10 -04:00
Christian Klaussner
340c7d9ab5 Update mongo test to match MongoDB 4.0 output (#10058)
The `mongo` shell is run with the `--quiet` option (7f7a987251), so there's no more output to match.
2018-08-09 16:09:35 -04:00
Christian Klaussner
7f7a987251 Use --quiet option when running mongo shell 2018-08-08 18:23:33 -04:00
Christian Klaussner
b6574915fc Use protocol version 1 when initiating replica set
Protocol version 0 (used by default) is deprecated in MongoDB 4.0 (https://docs.mongodb.com/manual/release-notes/4.0/#remove-pv0-for-replica-sets).
2018-08-08 18:23:33 -04:00
Christian Klaussner
48075f4fd3 Update regular expression to match MongoDB 4.0 output 2018-08-08 18:23:32 -04:00
Ben Newman
29ce8f2142 Adjust @babel/runtime version constraints in test app package.json files.
According to the plan described in #10134, whereas we had to pin these
versions to exactly 7.0.0-beta.55 for Meteor 1.7.0.4, we must now require
at least 7.0.0-beta.56 for Meteor 1.7.1, since other @babel/... packages
used by babel-compiler and meteor-babel are currently at beta.56.
2018-08-07 13:49:32 -04:00
Ben Newman
defbf6d6eb Merge branch 'devel' into release-1.7.1 2018-08-07 13:30:16 -04:00
Ben Newman
aba03743ad Update dynamic-import test app to Meteor 1.7.0.4.
Unit tests will still run the app from a checkout of the devel branch, but
it's worth noting that Meteor 1.7.0.4 also works for this app.
2018-08-07 12:33:15 -04:00
Ben Newman
228688cb8c Update vulnerable moment dependency of modules test app. 2018-08-07 12:28:44 -04:00
Ben Newman
619a8b6924 Merge branch 'master' into devel 2018-08-07 11:49:34 -04:00