Commit Graph

22017 Commits

Author SHA1 Message Date
Ben Newman
e94d5d3237 Bump package versions for 1.8.2-beta.3 release. release/METEOR@1.8.2-beta.3 2019-05-05 19:39:22 -04:00
Ben Newman
d9fd447e6f Avoid using fs.unlinkSync on directories.
Should help with #10549.
2019-05-05 19:37:45 -04:00
Ben Newman
fd68d4aa8c Merge pull request #10550 from meteor/support-module-syntax-in-ImportScanner
Support module syntax in ImportScanner, rather than using PackageSource#_findSources.
2019-05-05 19:36:31 -04:00
Ben Newman
f4af3ab2fa Backstop ESM module compilation with Reify in the ImportScanner.
Instead of compiling ESM syntax in node_modules using compiler plugins,
the ImportScanner can provide "native" support for ESM syntax by using
Reify to quickly compile just the import/export syntax in any imported
modules that were not already handled by compiler plugins.

Since this code runs every time the app is built, it should not matter
which version of Meteor was used to publish a package. Compared to the
previous implementation based on PackageSource#_findSources and unibuild
JSON files (#10545), this implementation should have far fewer
compatibility concerns, as well as being faster thanks to not processing
or compiling modules until the ImportScanner determines that they are
actually imported.

Though the number of files that get compiled by this system should be
relatively small for now, to maintain good performance, the results of the
compilation are cached on disk and in memory.
2019-05-05 19:10:13 -04:00
Ben Newman
72c704bcae Revert using _findSources to scan .npm/package/node_modules.
After much thought, I believe this implementation (#10545) would have
caused severe compatibility problems when using packages published with
earlier versions of Meteor in a Meteor 1.8.2 app, or when publishing
packages with Meteor 1.8.2 for use with earlier Meteor versions.

Specifically, this implementation relied on writing the additional
.npm/package/node_modules resources found by _findSources into the
unibuild JSON file(s), and there just wasn't any good way to make sure the
new JSON format could be safely consumed by previous Meteor versions.

Even if we found a way to hide the new resources from older versions of
Meteor, perhaps by putting them in a new/different property of the
unibuild JSON file, packages published with older Meteor versions might
try to load an npm package with a "module" field without realizing the
code must be compiled, which would likely cause a syntax error in Meteor
1.8.2, since the "module" field always gets preference over the "main"
field of package.json (in Meteor 1.8.2).
2019-05-05 19:03:30 -04:00
zodern
da323022b1 Do not remove source map url comments in public files (#10525) 2019-05-05 15:23:13 -05:00
Ben Newman
43d72af0f0 Bump package versions for 1.8.2-beta.2 release. release/METEOR@1.8.2-beta.2 2019-05-04 18:57:36 -04:00
Ben Newman
a69e6ffd21 Merge pull request #10545 from meteor/compile-Npm.depends-packages-with-ESM-entry-points
Allow .npm/package/node_modules to be compiled in Meteor packages.
2019-05-04 18:48:36 -04:00
Ben Newman
683d23cdee Bump compiler.BUILT_BY and LINKER_CACHE_SALT to force rebuild. 2019-05-04 18:08:49 -04:00
Ben Newman
5d0a1200c7 Allow .npm/package/node_modules to be compiled in Meteor packages.
When I implemented support for the "module" entry point in package.json
files for client code in #10541, I modified PackageSource#_findSources to
include files found in node_modules that need to be compiled, but my
implementation considered only "local" node_modules directories, like the
one in the application root directory, while neglecting the private
.npm/package/node_modules directories that many Meteor packages have.

This commit includes .npm/**/node_modules when _findSources is scanning a
Meteor package, which should solve issues like #10544, where a Meteor
package imports an npm package that was installed with Npm.depends, and
that npm package has a "module" field in its package.json file, pointing
to an ESM entry point module, but the ESM syntax was not appropriately
compiled, leading to parse errors like "Unexpected token export".

Before lazy compilation was introduced in Meteor 1.7 (#9983), including
the node_modules directories of Meteor packages would likely have been a
big problem for build performance, since there would be that many more
modules to compile. It's still worth making sure this change doesn't
regress build performance for other reasons, but I'm reasonably confident
lazy compilation will save us here, unless there are just too many npm
packages installed via Npm.depends that export ESM modules.
2019-05-04 18:08:49 -04:00
Ben Newman
9a4fa16db9 Merge branch 'devel' into release-1.8.2 2019-05-03 14:29:48 -04:00
zodern
eb5c0b5eed Fix checking for a rerender timeout (#10523) 2019-05-02 19:35:44 -04:00
Ben Newman
3fbf0619d5 Bump package versions for 1.8.2-beta.1 release. 2019-05-02 19:23:29 -04:00
Ben Newman
f166f226d8 Support the "module" field of package.json for client code. (#10541)
Supporting "module" in package.json for server code is not advisable
because Node.js will be adopting the "type":"module" convention instead,
and in the meantime we need to maintain consistency with Node's module
resolution rules, which only currently pay attention to "main":
https://medium.com/@nodejs/announcing-a-new-experimental-modules-1be8d2d6c2ff
2019-05-02 18:30:13 -04:00
Ben Newman
c4382c7d59 Bump $BUNDLE_VERSION to 8.16.0.2 before rebuilding dev bundle. 2019-05-02 17:11:18 -04:00
Ben Newman
35ca6980dc Use is-reachable to detect child process health in self-test.
On Linux, child processes that have exited may remain as <defunct>
"zombie" processes, which prevents process.kill(childPid, 0) from
throwing, so we need a different trick for detecting whether the child
process is still alive.
2019-05-02 17:10:41 -04:00
Ben Newman
4b0e4f8b0d Add package.json to tools/tests/apps/app-prints-pid.
The SIGKILL self-test in tools/tests/run.js has been failing recently
because @babel/runtime can't be found when the app-prints-pid app starts
up, which prevents the app from polling the parent process correctly.
2019-05-02 15:24:57 -04:00
Ben Newman
e680804ffc Wrap fs.copyFile[Sync] rather than reimplementing it. (#10542)
Should help prevent noYieldsAllowed errors due to the Promise#await call
in the removed copyFileHelper function, which is what caused 1.8.2-beta.0
to fail to publish on Linux (reported in #10540).
2019-05-02 13:48:02 -04:00
Ben Newman
b0a8e1bfaf Increase arbitrary SIGKILL timeout to make self-test more robust. 2019-05-02 13:44:49 -04:00
Ben Newman
f4b92a004e Bump package versions for 1.8.2-beta.0 release. release/METEOR@1.8.2-beta.0 2019-04-26 19:49:03 -04:00
Ben Newman
0482e66117 Bump $BUNDLE_VERSION to 8.16.0.1 before rebuilding dev bundle. 2019-04-26 18:55:08 -04:00
Ben Newman
114a348bb3 Convert programs/server/debug.js to TypeScript.
Another tiny module (like tools/isobuild/css-modules.ts) that proves we
can use TypeScript in programs/server/* code.
2019-04-26 18:55:08 -04:00
Ben Newman
c9ba0f3a22 Install latest Reify runtime in programs/server/main.js.
Also updated meteor-babel in the dev bundle to depend on reify@0.18.1, to
be consistent with the version used by server code.
2019-04-26 18:55:08 -04:00
Ben Newman
4ff27f8a52 Use Builder#copyTranspiledModules to compile .js and .ts files with Babel. 2019-04-26 18:55:07 -04:00
Luigi Pinca
efc8a3525d Fix variable scope (#10526)
Currenlty the `v` variable is only visible in the `if` block but it is
also used in the outer scope. Move the declaration to the outer scope.
2019-04-26 17:40:53 -04:00
Ben Newman
e3aecf2bc1 Bump $BUNDLE_VERSION to 8.16.0.0 before rebuilding dev bundle. 2019-04-23 19:21:57 -04:00
Ben Newman
15ba990d72 Update Node.js to version 8.16.0.
https://nodejs.org/en/blog/release/v8.16.0/
https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V8.md#8.16.0
2019-04-23 19:21:57 -04:00
Ben Newman
59c66baa9b Convert tools/static-assets/server/mini-files.js to module. 2019-04-23 19:21:57 -04:00
Ben Newman
f0192a82d9 Stop using mini-files.js in non-Babel-compiled code. 2019-04-23 19:21:57 -04:00
Ben Newman
36c4ae0a73 Bump accounts-base package version to 1.4.4.
This should have been done when PR #10299 was first merged. Thankfully,
@macrozone discovered the problem while diagnosing issue #10530.

Should fix #10530.
2019-04-23 16:59:24 -04:00
Ben Newman
154ca31faa Enable compilation of tools/static-assets/server. 2019-04-22 13:50:07 -04:00
Ben Newman
20273d72e9 Bump package versions for 1.8.2-alpha.1 release. release/METEOR@1.8.2-alpha.1 2019-04-14 14:27:07 -04:00
Ben Newman
5d52ff2685 Merge pull request #10528 from meteor/enable-TypeScript-compilation-of-meteor/tools
Enable TypeScript compilation of .ts modules in meteor/tools.
2019-04-14 14:25:28 -04:00
Ben Newman
543bed4e0b Convert tools/isobuild/css-modules.js to TypeScript.
Choosing this module first because it's tiny and only imported twice.
2019-04-14 14:00:48 -04:00
Ben Newman
257b2d62d3 Bump $BUNDLE_VERSION to 8.15.1.7 before rebuilding dev bundle. 2019-04-14 13:15:03 -04:00
Ben Newman
798a155c64 Enable Babel-powered TypeScript compilation of meteor/tools.
These changes pave the way for incrementally converting the implementation
of Meteor's command-line tool to TypeScript, which should have profound
benefits for self-documentation via types, as well as substantially
improving navigability and approachability for community contributors.

Just imagine being able to auto-complete the fields of the various
File-like classes currently floating around the codebase, instead of
having to track down their implementations every time. TypeScript was
designed with large projects like Meteor in mind, and it seems
increasingly irresponsible to forgo the benefits of a type system by
relying on the expertise of a few core contributors who know the codebase
inside and out. I am one of those few people, and I am very excited to
have the assistance of a type system, so I can only imagine how
transformative and empowering it will be for everyone else.

If you've ever wanted to get involved in core Meteor development, picking
a few meteor/tools modules to convert to TypeScript is a great way to get
to know that part of the codebase, while also making things easier for
everyone else who interacts with that code in the future.

Because we already compile meteor/tools using Babel, it makes the most
sense to use Babel's @babel/preset-typescript to compile .ts files:
https://babeljs.io/docs/en/next/babel-preset-typescript.html

Using Babel also means we get to keep all of our current advanced
compilation strategies, such as using Reify to compile module syntax:
https://www.npmjs.com/package/reify

Since we're using Babel, the meteor/tools/tsconfig.json file exists mostly
for the benefit of external tools like VSCode, rather than as a source of
truth for compilation behavior.

Despite our existing convention of including explicit .js file extensions
when importing modules, TypeScript and VSCode strongly encourage omitting
the file extension, so the import can be resolved to a .ts file in
development or a .js file when compiled. Although I find this ambiguity
somewhat unfortunate, it makes sense to follow community norms, at least
until Node.js begins supporting .ts modules by default.
2019-04-14 13:06:49 -04:00
Ben Newman
588d037ca6 Bump package versions for 1.8.2-alpha.0 release. release/METEOR@1.8.2-alpha.0 2019-04-12 19:34:13 -04:00
Ben Newman
96778efcc8 Shorten meteor/context summary. 2019-04-12 19:24:38 -04:00
Ben Newman
b510327f9c Add a basic summary and README.md to meteor/context. 2019-04-12 19:18:01 -04:00
Ben Newman
312dc29da7 Bump $BUNDLE_VERSION to 8.15.1.6 before rebuilding dev bundle. 2019-04-12 17:02:53 -04:00
Ben Newman
664560d8bb Implement basic meteor/context package with @wry/context.
The promise package needs a weak dependency on this package (on the
server) because meteor-promise saves a reference to Fiber.yield, so we
need to have wrapped Fiber.yield with noContext before that happens.
2019-04-12 16:12:51 -04:00
Ben Newman
f096796a8f Update optimism and @wry/context to latest versions. 2019-04-12 14:37:19 -04:00
Ben Newman
5e24494e01 Update dynamic import test app to Meteor 1.8.1 and meteor-node-stubs@1.0.0. 2019-04-10 19:18:36 -04:00
Ben Newman
07815583f1 Update modules test app to Meteor 1.8.1 and meteor-node-stubs@1.0.0. 2019-04-10 19:18:36 -04:00
Ben Newman
466cda693e Use wrapYieldingFiberMethods from @wry/context. 2019-04-10 18:48:10 -04:00
Ben Newman
d1f8bca88b Bump $BUNDLE_VERSION to 8.15.1.5 before rebuilding dev bundle. 2019-04-10 18:35:14 -04:00
Ben Newman
ca3caa9c8f Update optimism and explicitly depend on @wry/context and tslib. 2019-04-10 18:34:30 -04:00
Ben Newman
5adb7c64ab Wrap Fiber.prototype.{run,throwInto} as well as Fiber.yield.
ddebed9b8a/fibers.js (L97-L100)
2019-04-10 17:14:26 -04:00
Ben Newman
bb83acb286 Bump $BUNDLE_VERSION to 8.15.1.4 before rebuilding dev bundle. 2019-04-10 14:46:34 -04:00
Ben Newman
0383f01c63 Update optimism and use noContext to isolate Fiber contexts.
The optimism package no longer knows anything about Fibers, but it does
export various helpers for managing execution contexts, one of which
(noContext) allows us to censor the current context for the duration of a
function call. By wrapping Fiber.yield with noContext, we keep distinct
Fibers from accidentally registering cache dependencies on one another.
2019-04-10 14:42:34 -04:00