Commit Graph

67 Commits

Author SHA1 Message Date
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
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
09950c403b Update reify npm package to version 0.17.2. 2018-07-31 20:48:25 -04:00
Ben Newman
77ed148614 Use listener API for communication between build/server processes.
Fixes #10073, per
https://github.com/meteor/meteor/issues/10073#issuecomment-405290391

While thinking about this bug, I realized that sending IPC messages to
specific packages in the server process was much less flexible than
sending messages based on an arbitrary topic string, since the topic
string approach allows both `autoupdate` and `dynamic-import` to listen
for the same message.

The topic string approach calls for a listener interface like
`onMessage(topic, callback)`, which elegantly replaces the previous
approach of requiring packages to export a single `onMessage` function.

However, because the `meteor` package does not have access to the module
system, implementing the `onMessage` listener interface in the `meteor`
package would have required exposing an API like `Meteor.onMessage(topic,
callback)`, which has an unpleasant global smell to it. Instead, the
`onMessage` function should be explicitly imported (using the module
system) from a less-generically-named package.

Since I knew I was going to have to move the message dispatch logic out of
the `meteor` package, I decided to create a new package called
`inter-process-messaging` to implement the parent/child components of the
IPC system.
2018-07-16 18:59:50 -04:00
Ben Newman
6407e4dafb Update meteor-babel to version 7.0.0-beta.49-1.
Also switching from babelOptions.sourceMap to babelOptions.sourceMaps,
finally: https://babeljs.io/docs/usage/api/#options
2018-05-25 18:43:13 -04:00
Ben Newman
a8b6accb11 Set .babel-cache directory correctly for command-line tool.
This depends on new functionality in meteor-babel@7.0.0-beta.46-3:
d5d2bbf81e
dea6465daf
2018-05-09 16:16:05 -04:00
Jesse Rosenberger
6f01d18252 Change tool "cleanup" module to use ESM format and remove Underscore. 2017-12-12 17:19:42 +02:00
Ben Newman
1a8efdc31f Merge branch 'devel' into release-1.6 2017-10-02 13:44:25 -04:00
Ben Newman
e85c69680d Combine all isopackets to share transitive dependencies. (#9168)
By my calculations, the sum of the sizes of the individual isopackets was
152MB, and the size of the combined isopacket is now just 36MB. That
remarkable difference goes to show how much duplication of transitive
dependencies was happening before this change.

That's a savings of 116MB for the (uncompressed) size of the meteor-tool
package. In Meteor 1.5.x, the meteor-tool package is about 544MB, but in
Meteor 1.6 it's considerably smaller: 373MB. In other words, this change
should reduce those sizes to 428MB (-21%) and 257MB (-31%), respectively.
2017-10-02 13:41:39 -04:00
Ben Newman
cbacc31dde Fix inline source maps in meteor/tools code. 2017-07-22 10:38:15 -04:00
Ben Newman
bd5370dda9 Fix mistaken usage of require(reify/lib/runtime).enable.
Related fix in meteor-babel@0.24.4:
786194734c
2017-07-22 09:17:05 -04:00
Ben Newman
2ae406a61f Enable the Reify runtime API even if meteor-babel/register does not. 2017-07-21 18:59:16 -04:00
Ben Newman
2ca9e322d9 Use Babel options appropriate for Node 8 to compile meteor/tools.
Related to https://github.com/meteor/meteor/pull/8728#issue-232369984,
though these changes apply only to the meteor/tools codebase. We still
need to make similar changes to the babel-compiler package so that
application code will benefit.

The assumption that we're using Node 8 also allows some simplifications to
the runtime polyfills that we use.
2017-07-21 14:07:28 -04:00
Ben Newman
42c41901c5 Call module.runSetters() after any meteor/tools modules load. 2017-05-09 21:23:41 -04:00
Ben Newman
f0355276a5 Remove babel-runtime-specific logic from compiler-plugin.js. 2016-11-02 12:05:33 -04:00
Ben Newman
0993eb664a Preserve own properties from Profile-wrapped functions. 2016-10-24 18:18:03 -07:00
Ben Newman
8e9896cfcf Include server startup timings in METEOR_PROFILE output.
Meteor 1.4.2 has been mostly focused on improving rebuild times, but what
ultimately matters is the time from changing a file to being able to make
requests against the restarted server, and any code that runs before
server startup should be considered part of that critical path.

If you have a lot of packages, and they do non-trivial work on startup,
this commit should give you much better insight into where time is spent.

Credit to @stubailo for pushing me to provide Meteor developers with
better profiling tools, and thanks to @veered for this specific idea.

Note: because tools/tool-env/profile.js is now loaded as-is by boot.js,
certain ECMAScript features are off-limits, e.g. ...rest params.
2016-10-23 16:36:23 -04:00
Ben Newman
7a18012975 Consult babel-runtime package when discarding helper modules.
The most fool-proof way to tell if a module is provided by babel-runtime
is to load babel-runtime as an isopacket and ask it.

This should fix any remaining issues like this one:
https://github.com/meteor/meteor/pull/7668#pullrequestreview-4379559
2016-10-16 16:40:11 -04:00
Ben Newman
17f79c66ce Search packages/non-core/*/packages for local packages.
Currently this finds only Blaze-related packages, but it does so without
hard-coding "blaze" in tools code.
2016-09-09 13:28:16 -04:00
Ben Newman
c6a54546c2 Avoid hard-coding packages/non-core/blaze in tools code.
Now that the blaze submodule is mounted inside the packages/non-core/
directory, it appears that we no longer have to mention it explicitly in
the localPackageSearchDirs array.
2016-09-09 12:12:43 -04:00
Ben Newman
9001b75f44 Move packages-for-isopackets/blaze to packages/non-core/blaze. 2016-09-09 11:17:43 -04:00
Tom Coleman
edf40c430b Use isopacket packages for self-test also 2016-08-25 13:24:40 +10:00
Tom Coleman
f01653e690 Use submodules for isopacket loading 2016-08-25 12:23:33 +10:00
Ben Newman
36afd7f5c3 Defend global.Promise against misbehaving polyfills. 2016-08-03 15:25:13 -04:00
Ben Newman
c3e73c264c Prevent archinfo.host() from yielding by forcing its result to be cached. 2016-07-14 11:27:55 -04:00
Ben Newman
a9e8cbe267 Move Promise runtime setup into its own module.
Test code was requiring the install-runtime.js module without requiring
the index.js module, so global.Promise was not defined.
2016-07-07 17:01:11 -04:00
Ben Newman
eadb6e65cc Ensure only one Promise constructor is ever used by tools code. 2016-07-07 11:04:18 -04:00
Ben Newman
a5b34af583 Fix babel-runtime/regenerator import in tools runtime setup.
Fixes #7181.
2016-06-16 16:59:58 -04:00
Ben Newman
6aec3603c8 Separate install-runtime.js from install-babel.js. 2016-05-19 17:04:08 -04:00
Ben Newman
d94e7d812d Upgrade dev bundle meteor-promise to 0.7.1. 2016-05-16 18:21:11 -04:00
Ben Newman
cf98e285ac Fix imports of tools/tool-env/isopackets.js.
Fixes #6778.
2016-04-11 12:33:16 -04:00
Ben Newman
911b4aa4cb Simplify CSS-to-CommonJS conversion by not handling @import rules.
We can revisit this conversion if it turns out anyone really wants to use
@import rules in CSS files instead of using something like LESS.

Part of #6037.
2016-04-08 19:02:33 -04:00
Ben Newman
5a78420b10 Upgrade meteor-babel versions to 0.9.2. 2016-04-07 13:51:24 -04:00
Ben Newman
b4fe0d5c85 Allow importing .css files from node_modules directories.
Fixes #6037.
2016-04-07 13:05:49 -04:00
Ben Newman
8248d86fb2 Consolidate exit code logic for meteor npm and meteor node.
Follow-up to #6675.
2016-04-01 12:08:55 -04:00
Maxime Quandalle
a7bc440ca7 Emphasize the tree structure in the profile output
The formating is freely inspired by the Unix `tree` command.
2016-02-06 14:32:05 +01:00
David Greenspan
601cfbcebd Don't re-parse versions during sorting; profiling
- We don't want to do a bunch of parsing *per comparison* when sorting
  a list of package version strings.  package-version-parser's `compare`
  (and server's `compare`, which it uses) both accept either a string
  or a parsed record.  By parsing explicitly with memoization, we avoid
  a super-linear blow-up in the amount of parsing.  This'll save someone
  half a second, at least.
- Adjust profiling hooks and messages
- Expose `Profile` to isopackets
2016-02-05 10:04:31 -08:00
David Greenspan
0a22393c90 Profiler: Encode entry keys a little faster
Don't want too much overhead in there.
2016-02-05 02:30:28 -08:00
David Greenspan
2b1b95dd1b Profiler: show counts for hot leaves
we put a count in "other $foo" entries now so that you can
see them under hot leaves, but we still don't show the count
in the hierarchical report.
2016-02-05 00:52:31 -08:00
Ben Newman
4c890ac20d Use Babel 6 to implement ECMAScript 2015+ in tool code.
Note that `export default` no longer modifies `module.exports`, but simply
defines `exports.default`, so these two import styles will work:

  import DefaultExport from "./export-default-module.js"; // preferred
  var DefaultExport = require("./export-default-module.js").default;

but this style will no longer work:

  var DefaultExport = require("./export-default-module.js");
2016-02-04 21:37:34 -05:00
David Greenspan
2fca3a9599 Profile more of tool and improvements to Profile
Previously, we would generate reports on
"Selecting Package Versions" and "Rebuild App".

- Instead of just profiling constraint solving, profile the entire
  process of preparing the project via ProjectContext, by giving
  each public function that "advances the stage" a Profile.run
  (typically prepareProjectForBuild).
- Improve profiler output to better distinguish multiple runs
- Distinguish "Build App" and "Rebuild App"
- Instrument lots of calls that weren't instrumented before
2016-02-03 11:54:05 -08:00
David Greenspan
b9f7613373 Don't show "other" in profile when no signif. kids
Background: we omit entries from the report whose time is below
a threshold (by default 1ms).

This change prevents a display like the following, where the
presence of child entries creates a "group" but the group
appears to be empty except for "other":
```
foo...........30 ms
   other foo  29 ms
```
2016-02-01 08:45:36 -08:00
David Greenspan
213deebf26 Improvements to profiler report
Call counts, and visual improvements
2016-02-01 08:45:36 -08:00
David Greenspan
e21b5498f2 Support sub-millisecond thresholds in Profile
METEOR_PROFILE=1 sets the threshold for displaying profiler entries
to 1ms.  Previously, however, passing "0.1" or "0" would enable
profiling but use the default threshold of 100ms.  With this change,
any recognizable number passed as METEOR_PROFILE will be used as
a threshold, including "0.1" and "0".
2016-02-01 08:45:35 -08:00
David Greenspan
8edffac142 Speed improvements to Profile
profile.js uses some "dumb" data structures and algorithms that are
N^2 or even N^3.  If you experiment with adding more data to the
profile (e.g. names of files written), you'll find that the time it
takes to generate the profiler report blows up.  This commit
makes the profiler usable again in that case.

* Don't create a new array in isChild(.), and compare elements
  starting at the end (because early elements are more likely
  to be similar)
* Swap order of entryName(.) (cheap) and isLeaf(.) (expensive)
  in leafTotal(.)
2016-02-01 08:45:35 -08:00
David Greenspan
ea3f8e3f15 Clarify a comment about source maps 2016-02-01 08:32:25 -08:00
David Greenspan
0dab7bdad3 Fix tool source maps (clobbered by coffee-script)
Switching from "require" to "import" in the coffeescript plugin
broke our hack that keeps coffeescript from clobbering our version
of Error.prepareStackTrace, because imports are automatically
hoisted to the top of the file, and thus so are any side effects of
requiring a module.

The new fix has the tool save a copy of the correct
Error.prepareStackTrace so that any plugin that wants to unclobber
Error.prepareStackTrace can do so.

Other, fancier fixes are possible; there's a package called
stack-chain that installs a getter/setter on
Error.prepareStackTrace:
e51a7b2e0f/stack-chain.js (L136)
2016-02-01 08:32:12 -08:00
Ben Newman
ed17924940 Add braces to every if/for(-in)/while statement in tools directory. 2015-11-13 12:25:19 -05:00
Evan You
0f98ea22fc fix git hook install check 2015-10-09 20:58:45 -04:00
Ben Newman
c00b12b8fa Use meteor-ecmascript-runtime in dev bundle instead of core-js. 2015-10-03 14:39:24 -04:00