In a previous commit, I changed
doc = _.extend({}, doc);
to avoid using underscore, thus:
doc = { ...doc };
While this may seem harmless, it broke a few Mongo.Collection tests
because _.extend copies *all* properties, both own and inherited, whereas
object ...spread only copies own properties.
However, the correct way to fix this problem is *not* to revert to the old
behavior, since flattening the inherited properties of a document was
never actually what we wanted. The old behavior was subtly broken, too.
Instead, we need to create a new object with the same prototoype as the
provided document, then shallow-copy the own properties. Any properties or
methods inherited from the original prototype will then be available on
the new object, even though they didn't get copied over.
I've intentionally left some trivial formatting changes in this commit to
remind myself which broken tests were fixed by this change.
This temporarily reverts back to using @babel/runtime/helpers/* rather
than @babel/runtime/helpers/builtin/*, since some helpers (for example,
`slicedToArray`) were using code patterns that cannot be made to work via
polyfills in older browsers, e.g.
if (Symbol.iterator in Object(arr)) {...}
to test whether `arr` is iterable.
Remove type:"dynamic js" and .map files from `appcache` (app.manifest) since the
dynamic-import package doesn't load dynamic modules from `appcache`, so caching
those files with `appcache` is redundant.
Google's OAuth2 token endpoint
(https://accounts.google.com/o/oauth2/token) returns an
`expires_in` property in its response, which was being stored
internally as `expiresIn`. The `getServiceDataFromTokens`
function would only attempt to work with the `expiresIn` value
if the `tokens` object had a set `expiresAt` property, meaning
the `expiresIn` property was never used. This commit switches
the `expiresAt` check to `expiresIn`.
Fixes#9435.
* Stop serving the application manifest from /manifest.json
Meteor currently serves its own manifest file from
`/manifest.json`. This location is not application
configurable, and can conflict with other non-Meteor
defined manifest files, that are already being served
from this location. There isn't really any reason why
Meteor needs to use the `/manifest.json` location, so
this commit moves it to `/__meteor__/webapp/manifest.json`.
Fixes#6674.
* Add PR link to History.md
For a while the livedata `reconnect to a different server` test
was failing since the `reverse.meteor.com` host and application
were taken down, but nobody noticed. This is because even
though the test was still enabled, it was configured to swallow
the failure if the connection failed. `reverse.meteor.com` has
been brought back up, so this commit adjusts the test to make
sure it will properly fail if `reverse.meteor.com` goes down
again.
Fixes https://github.com/meteor/meteor/issues/8092.
I previously had thought that a duplicate call to `setRequireAndModule`
encountered in code-path would no longer be necessary after some
consolidation in previous steps of this re-factor, but the test failure
seen here made it clear what was happening:
https://circleci.com/gh/meteor/meteor/12445
Specifically, if a module was imported in a piped command (that is to say,
when no TTY is present and the `evaluateAndExit` code-path is taken), as so:
echo 'import { Meteor } from "meteor/meteor"' | meteor shell
...the `module` and `require` symbols were not set. Conveniently, this is
the environment in effect when the `meteor self-test` suite is ran since
they do not have a TTY.
This moves the `setAndRequire` from the "interactive-only" function into
the general REPL setup and further harmonizes the code.
This is superfluous residue that I inadvertently created when splitting the
existing `startREPL` function into `setupREPL` and `enableInteractiveMode`.
The context is already set in `setupREPL` (to the exact same value as
here) by the time that this occurrence in `enableInteractiveMode` is called.
Addresses feedback from @benjamn.
Rather than copying the `IsRecoverableError` and `isCodeRecoverable`
methods from the Node.js `repl` module source (in order to capture
so-called "Recoverable" errors), wrap the default "eval" function with
our relatively thin logic, thus avoiding the need to continually update
the definition of what's "recoverable" as Node's implementation evolves.