Commit Graph

20323 Commits

Author SHA1 Message Date
Ben Newman
86a2ad5679 Bump package versions for 1.6.1-beta.9 release. release/METEOR@1.6.1-beta.9 2017-11-22 15:26:12 -05:00
Ben Newman
66c1fc0595 Bump $BUNDLE_VERSION to 8.9.3 before rebuilding dev bundle. 2017-11-22 14:53:33 -05:00
Ben Newman
a6b90f85c3 Merge branch 'devel' into release-1.6.1 2017-11-22 14:52:58 -05:00
Ben Newman
c8c88300a6 Fix remaining problems with PR #9237. 2017-11-22 14:44:22 -05:00
Edgar HIPP
16b74e5c0c Fix isNpmUrl to handle http/https urls (Closes #9236) 2017-11-22 14:44:22 -05:00
Jesse Rosenberger
03cc8d40ac Bump $BUNDLE_VERSION to 8.8.3 before rebuilding dev bundle.
In this case, to get the MongoDB 3.4 changes included in meteor/meteor#9396.

I'm skipping 8.8.2 since it seems to have been started, but is now unused:

https://github.com/meteor/meteor/commits/dev-bundle-8.8.2
2017-11-22 20:33:04 +02:00
Ben Newman
8c4bd0fdf3 Update blaze submodule to latest master revision. 2017-11-22 13:27:16 -05:00
Ben Newman
26e94fa303 Generate correct stats for more kinds of meteorInstall minification.
The uglify-es minifier sometimes inlines (0,Package.modules.meteorInstall)
as a callee expression rather than declaring a variable, so this commit
adds support for that minification technique when computing bundle size
statistics for the bundle-visualizer package.

One symptom of this bug: while the bundle-visualizer displays packages
minified in this way with the correct total size, they appear not to have
any node_modules.

cc @abernix
2017-11-22 13:17:56 -05:00
Ben Newman
2482fac274 Make bundle-visualizer JSON stats more readable in dev tools. 2017-11-22 13:17:54 -05:00
Ben Newman
6a312c49cd Guard against undefined process.env.NPM_CONFIG_REGISTRY.
https://github.com/meteor/meteor/pull/9398#discussion_r152610836
2017-11-22 13:12:37 -05:00
Jesse Rosenberger
84337782ac Merge pull request #9396 from meteor/abernix/mongo-3.4
Use Mongo 3.4 for 64-bit platforms.
2017-11-22 19:52:22 +02:00
Jesse Rosenberger
77b2b94bbb Merge branch 'devel' into abernix/mongo-3.4 2017-11-22 19:49:46 +02:00
skirunman
1d5bf0f1a4 iPhone X status bar fix (#9375) 2017-11-22 11:36:45 -05:00
James Burgess
2547957268 Fix meteor test file matching patterns (#9339)
* Adjust test filename RegExps to match Meteor guide. Fixes #9332.
* Adjusted help text for --drive-package on meteor test.
* Add integration tests for `meteor test` eager file loading.
* Fix typo in selftest.forbid comment.
* Improve test file eager load integration test coverage and clarity.
2017-11-22 11:21:49 -05:00
Hugh Willson
8da6c84eac Update the default CSS parsing/combining/minifying tools (#9263)
* Update the default CSS parsing/combining/minifying tools

The `minifier-css` package is currently using outdated
(and abandoned) npm packages (`css-parse` and `css-stringify`),
as part of its parsing/minification process. This commit
replaces those packages with the robust, modern and maintained
`postcss` package.

* Adjust CSS source file fallback value

* Self test adjustments and cleanup

* Disable sourcesContent generation by postcss

The `standard-minifier-css` package is already associating
source content with the source map, so we don't need to
do this twice.

* Add History.md entry covering backwards compatibility details

* Bump major version due to backwards compatibility breaking changes

* Bump minor versions

* Code review changes (boolean formatting, concat to spread)
2017-11-22 11:13:54 -05:00
Ben Newman
d9e9dc25a4 Merge pull request #9398 from sebakerckhof/fix/stop-npm-wasting-all-my-time
Don't update npm dependencies when it's not needed
2017-11-22 11:11:53 -05:00
Jesse Rosenberger
d746f5f472 Correct link in markdown badge. 2017-11-22 12:51:22 +02:00
Jesse Rosenberger
e8d6ab299d Update README.md to incorporate BrowserStack badge.
Hopefully, without too much effort, it will be easy to reintegrate much of
the automated BrowserStack testing we (mostly) already had in place!  In the
near future, this could be helpful for ensuring we're not over/under-shipping
polyfills to browsers.

Hopefully we can keep this green, though it's not clear to me at the
moment what additional changes I'll need to make to ensure that.  For
now, badge!
2017-11-22 12:44:51 +02:00
Jesse Rosenberger
109b1116ac Update internal meteor-babel to 7.0.0-beta.3-2.
ac6f3bef07
2017-11-21 11:37:30 +02:00
Jesse Rosenberger
cc0b6638f5 Update History.md with details about Mongo 3.4.
Refs: https://github.com/meteor/meteor/pull/9396
2017-11-21 11:37:30 +02:00
Jesse Rosenberger
75a262a278 Use Mongo 3.4 for 64-bit platforms.
Most of the work to prepare for this change was done through the
excellent work of @hwillson in meteor/meteor#9173 which, after some
re-working to support the 64-bit architecture on Windows platforms,
landed in meteor/meteor#9218, making this change as simple as bumping
the minor version number (and rebuilding the dev bundle).

From this point forward, and due to Mongo's discontinuation of 32-bit
support in newer versions of MongoDB, 64-bit platforms will, in
development, use newer versions of Mongo while 32-bit architectures
will remain at 3.2.x versions.

Of course, in production, apps are free to use whichever version of
Mongo they would like, provided that version is supported by the
Node Mongo driver and Meteor's Mongo data packages.  At this time
there is no target for when Meteor will stop supporting Mongo 3.2,
but developers are encouraged to take steps to upgrade their Mongo
deployments (through their database providers) to newer versions
since Mongo has set September 2018 as the "End-of-Life" for Mongo
3.2.x.  For more information on Mongo support cycles, see their
support documents at https://www.mongodb.com/support-policy.

Refs: https://github.com/meteor/meteor/pull/9173
Refs: https://github.com/meteor/meteor/pull/9218
2017-11-21 11:37:29 +02:00
Jesse Rosenberger
05994bc7b4 Merge branch 'devel' into release-1.6.1 2017-11-21 10:33:03 +02:00
Jesse Rosenberger
8201479d18 Store npm logs as an AppVeyor artifact.
Store the result of any npm error logs which may prove useful
during investigation of random Windows failures, exhibited in
the Windows `dynamic-import` tests during npm installation:

https://ci.appveyor.com/project/meteor/meteor/build/368
2017-11-21 10:28:29 +02:00
sebakerckhof
4ce2645fbf Add scoped packages to shrinkwrap 2017-11-20 17:57:19 +01:00
sebakerckhof
1bb46bc103 Don't use resolved urls as package version when using a private NPM server 2017-11-20 17:54:45 +01:00
Ben Newman
6ae4ca64d3 Merge branch 'devel' into release-1.6.1 2017-11-20 10:54:03 -05:00
Jesse Rosenberger
2a62bcac2d Correct accidental use of Array.prototype.every on an Object.
Fixes the error reported in the 1.6.1 pull request. (Thanks, @yorrd!)

It's worth nothing that the `DDP._allSubscriptionsReady` function which
was broken is used by the deprecated `spiderable` package.  Since
`spiderable` is deprecated, it's advisable to look into ways to stop
depending on it.

Refs: https://github.com/meteor/meteor/pull/9274#issuecomment-345358178.
2017-11-20 13:02:26 +02:00
Ben Newman
8e39fd7762 Make bundle-visualizer depend on dynamic-import directly again.
Since bundle-visualizer is a non-core package, it could be used with a
version of ecmascript that does not imply dynamic-import, though it
definitely requires support for `import()` to function properly.
2017-11-17 15:17:43 -05:00
Ben Newman
d690906f7f Bump package versions for 1.6.1-beta.8 release. release/METEOR@1.6.1-beta.8 2017-11-17 14:47:17 -05:00
Ben Newman
5bdf684525 Merge branch 'devel' into release-1.6.1 2017-11-17 14:34:11 -05:00
Ben Newman
c4bcf91519 Bump ecmascript version to 0.10.0 instead of 0.9.1.
Since the new version of ecmascript depends directly on dynamic-import,
it's important that it's a version of dynamic-import that does not depend
indirectly on ecmascript, and I'm not sure if the constraint solver can
figure that out easily without a little help.
2017-11-17 14:31:33 -05:00
Ben Newman
ac085d96fb Merge pull request #9382 from meteor/abernix/fix-cordova-add
Ensure that Cordova is installed for `meteor [add | remove] cordova:*`.
2017-11-17 14:11:51 -05:00
Ben Newman
981fb3c88d Merge pull request #9384 from meteor/dynamic-import-via-http-post
Support fetching dynamic modules via HTTP POST requests.
2017-11-17 14:11:19 -05:00
Ben Newman
1c2d6c6382 Improve readability of dynamic-import helper function.
Per feedback from @abernix:
https://github.com/meteor/meteor/pull/9384#discussion_r151743041
2017-11-17 13:29:49 -05:00
Jesse Rosenberger
2fee9e4d7f Change let to const for some nearby use cases. 2017-11-17 20:27:54 +02:00
Jesse Rosenberger
1ed7796956 Change nested imports to share related, top-level imports.
I believe at one point some of this nesting was important to avoid
cycles in the dependency graph, but that no longer seems to be the
case.
2017-11-17 20:26:33 +02:00
Ben Newman
b81872b01a Remove weak dependency on browser-policy-common from dynamic-import.
Even a weak dependency affects the load order of packages by forcing the
depended-on package to load before the dependent package. Waiting until
Meteor.startup to check for Package["browser-policy-common"] dynamically
does not have this problem.
2017-11-17 13:20:30 -05:00
Jesse Rosenberger
5e4ee8dc36 Only import necessary functions from cordova, not *.
The rest of the module is not necessary.
2017-11-17 20:17:21 +02:00
Ben Newman
d0566bbb18 Make bundle-visualizer use HTTP instead of Meteor.call.
If you're trying to visualize the bundle of an application that does not
use ddp-client, it's annoying if bundle-visualizer pulls in all those
dependencies just to support itself.

cc @abernix
2017-11-17 13:11:20 -05:00
Ben Newman
a80af7e064 Move dynamic-import dependency from meteor-base to ecmascript.
Now that dynamic-import no longer depends indirectly on ecmascript, the
ecmascript package can finally guarantee support for dynamic `import()`,
as it rightfully should.
2017-11-17 12:04:25 -05:00
Ben Newman
2f3bbcde70 Bump dynamic-import package version to 0.3.0. 2017-11-16 20:11:28 -05:00
Ben Newman
bdab67274b Talk about dynamic imports over HTTP in History.md. 2017-11-16 20:11:28 -05:00
Ben Newman
305abbefb8 Upgrade install to allow batching of dynamic import() requests.
Now that we're using HTTP POST requests to fetch dynamic modules, it's
more important to make fewer requests when possible, given the higher
latency of HTTP requests compared to WebSocket messages.

The trick is to wait until the next tick of the event loop before actually
sending the request, so that multiple dynamic import() calls in quick
succession are treated as a single request, and all the modules they
require can be returned in a single response object.

For example, we want code like this

  const [
    React,
    ReactDOM
  ] = await Promise.all([
    import("react"),
    import("react-dom")
  ]);

to result in one HTTP POST request for both `react` and `react-dom`, as
well as all their dependencies, rather than two separate requests.
Indeed, that is what happens, since both import() calls take place in the
same tick of the event loop.
2017-11-16 19:49:06 -05:00
Ben Newman
088432410c Remove webapp and random dependencies from dynamic-import.
Letting dynamic-import depend on packages that depend on ecmascript means
ecmascript and its dependencies can't depend on dynamic-import. This
commit gives us back that flexibility.
2017-11-16 19:49:06 -05:00
Ben Newman
a7a63cd743 Allow only server-side code to fetch dynamic server modules.
Each time the server starts, the dynamic-import/server.js module creates a
secret key for accessing dynamic server modules, then exposes that key to
the server-side dynamic-import/client.js module, and no one else.

If client.setSecretKey has been called, that key will be included as a
query parameter in each /__dynamicImport POST request. If it matches the
actual secret key, access is granted to the corresponding dynamic modules;
otherwise, only web.browser dynamic modules are made available.
2017-11-16 19:49:06 -05:00
Ben Newman
d073990a3a Prune dynamic imports result tree rather than failing on error. 2017-11-16 19:49:06 -05:00
Ben Newman
e24eec2084 Support fetching dynamic modules via HTTP POST requests.
Ever since Meteor 1.5 first shipped, dynamic modules have been fetched
over a WebSocket, which is appealing because sockets have very little
latency and metadata overhead per round-trip.

However, using a WebSocket requires first establishing a socket connection
to the server, which takes time and may require a WebSocket polyfill.

An even more subtle problem is that we cannot use dynamic imports in any
of the code that implements the ddp-client package, as long as the
dynamic-import package depends on ddp-client.

By switching from WebSockets to HTTP POST requests, this commit radically
reduces the dependencies of the dynamic-import package, while preserving
(or even exceeding) the benefits of socket-based dynamic module fetching:

1. The client makes a single HTTP POST request for the exact set of
   dynamic modules that it needs, which is much cheaper/faster than making
   several/many HTTP requests in parallel, with or without HTTP/2.

2. Because the client uses a permanent cache (IndexedDB) to avoid
   requesting any modules it has ever previously received, the lack of
   HTTP caching for POST requests is not a problem.

3. Because the HTTP response contains all the requested dynamic modules in
   a single JSON payload, gzip compression works across modules, which
   produces a smaller total response size than if each individual module
   was compressed by itself.

4. Although HTTP requests have more latency than WebSocket messages, the
   ability to make HTTP requests begins much sooner than a WebSocket
   connection can be established, which more than makes up for the latency
   disadvantage.

5. HTTP requests are a little easier to inspect and debug in the dev tools
   than WebSocket frames.

6. The new /__dynamicImport HTTP endpoint is a raw Connect/Express-style
   endpoint, so it bypasses the Meteor method-calling system altogether,
   which eliminates some additional overhead.

7. Fetching dynamic modules no longer competes with other WebSocket
   traffic such as DDP and Livedata.

8. Although the implementation of the /__dynamicImport endpoint is a bit
   too complicated to allow serving dynamic modules from a CDN, that
   remains a possibility for future experimentation. In other words, how
   modules are fetched is still just an implementation detail of the
   `meteorInstall.fetch` callback.

9. As with the WebSocket implementation, the module server is totally
   stateless, so it should be easy to scale up if necessary.

I wish I had appreciated the advantages of an HTTP-based implementation
sooner, but I think the transition will be pretty seamless, since the new
implementation is completely backwards compatible with the old.
2017-11-16 19:49:06 -05:00
Ben Newman
80e564e9c3 Remove underscore from url package, and use modules. 2017-11-16 19:49:06 -05:00
Ben Newman
21275011bd Remove underscore from http package, and use modules.
I replaced the ecmascript package with just the modules package so that
ecmascript and its dependencies can depend on http without creating
package dependency cycles.

I also took this opportunity to upgrade the `request` npm dependency to
its latest version (2.83.0), and removed the `deprecated.js` file, which
used to define `Meteor.http`.
2017-11-16 19:49:05 -05:00
Jesse Rosenberger
ecec5a1ad0 Ensure that Cordova is installed for meteor [add |remove] cordova:*.
In the same spirit as the changes made in
https://github.com/meteor/meteor/pull/8976.

Fixes: https://github.com/meteor/meteor/issues/9257.
2017-11-17 02:15:04 +02:00