Merge pull request #12540 from meteor/release-3.0-tools-and-mongo

Release 3.0 tools and mongo
This commit is contained in:
Gabriel Grubba
2023-03-06 09:35:26 -03:00
committed by GitHub
11 changed files with 1020 additions and 1186 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -5,8 +5,8 @@ Package.describe({
});
Npm.depends({
// '@meteorjs/babel': '7.18.0-beta.5',
'@meteorjs/babel': 'file:///../../../../npm-packages/meteor-babel',
'@meteorjs/babel': '7.19.0-beta.1',
// '@meteorjs/babel': 'file:///../../../../npm-packages/meteor-babel',
'json5': '2.1.1',
'semver': '7.3.8'
});

View File

@@ -987,10 +987,10 @@ var buildCommands = {
main.registerCommand({
name: "build",
...buildCommands,
}, function (options) {
return Profile.run(
}, async function (options) {
return await Profile.run(
"meteor build",
() => buildCommand(options)
async () => await buildCommand(options)
);
});
@@ -1002,7 +1002,7 @@ main.registerCommand({
name: "bundle",
hidden: true,
...buildCommands,
}, function (options) {
}, async function (options) {
Console.error(
"This command has been deprecated in favor of " +
Console.command("'meteor build'") + ", which allows you to " +
@@ -1011,9 +1011,9 @@ main.registerCommand({
"for more information.");
Console.error();
return Profile.run(
return await Profile.run(
"meteor bundle",
() => buildCommand({
async () => await buildCommand({
...options,
_bundleOnly: true,
})
@@ -2015,9 +2015,9 @@ async function doTestCommand(options) {
projectContext = new projectContextModule.ProjectContext(projectContextOptions);
await projectContext.init();
await main.captureAndExit("=> Errors while setting up tests:", function () {
await main.captureAndExit("=> Errors while setting up tests:", async function () {
// Read metadata and initialize catalog.
return projectContext.initializeCatalog();
return await projectContext.initializeCatalog();
});
} else {
throw new Error("Unexpected: neither test-packages nor test");
@@ -2055,7 +2055,7 @@ async function doTestCommand(options) {
options.cordovaRunner = cordovaRunner;
return runTestAppForPackages(projectContext, Object.assign(
return await runTestAppForPackages(projectContext, Object.assign(
options,
{
mobileServerUrl: utils.formatUrl(parsedMobileServerUrl),

View File

@@ -2269,7 +2269,7 @@ class JsImage {
if (ret['core-runtime']) {
var promise = ret['core-runtime'].waitUntilAllLoaded();
if (promise) {
promise.await();
await promise
}
}

View File

@@ -976,7 +976,7 @@ export default class ImportScanner {
private async findImportedModuleIdentifiers(
file: File,
): Promise<Record<string, ImportInfo>> {
const fileHash = await file.hash;
const fileHash = file.hash;
if (IMPORT_SCANNER_CACHE.has(fileHash)) {
return IMPORT_SCANNER_CACHE.get(fileHash);
}

View File

@@ -1002,8 +1002,8 @@ Object.assign(ProjectContext.prototype, {
? null : self._forceRebuildPackages);
}
await buildmessage.enterJob('building local packages', function () {
return self.isopackCache.buildLocalPackages();
await buildmessage.enterJob('building local packages', async function () {
return await self.isopackCache.buildLocalPackages();
});
self._completedStage = STAGE.BUILD_LOCAL_PACKAGES;
}),

View File

@@ -170,22 +170,26 @@ class Runner {
runLog.log("Started proxy.", { arrow: true });
}
/**
*
* @type {(function(): *)}
*/
var unblockAppRunner = self.appRunner.makeBeforeStartPromise();
async function startMongo(tries = 3) {
try {
await self._startMongoAsync();
await unblockAppRunner();
unblockAppRunner();
} catch (error) {
--tries;
const left = tries + (tries === 1 ? " try" : " tries");
Console.error(
`Error starting Mongo (${left} left): ${error.message}`
);
);
if (tries > 0) {
await self.mongoRunner.stop();
await setTimeout(() => startMongo(tries), 1000);
setTimeout(async () => await startMongo(tries), 1000);
} else {
await self.mongoRunner._fail();
}
@@ -194,13 +198,12 @@ class Runner {
}
await startMongo();
if (!self.noReleaseCheck && ! self.stopped) {
await self.updater.start();
self.updater.start();
}
if (!self.stopped && self.hmrServer) {
await self.hmrServer.start();
self.hmrServer.start();
if (!self.quiet && !self.stopped) {
runLog.log("Started HMR server.", { arrow: true });
@@ -209,7 +212,7 @@ class Runner {
if (! self.stopped) {
await buildmessage.enterJob({ title: "starting your app" }, async function () {
await self.appRunner.start();
await self.appRunner.start();
});
if (! self.quiet && ! self.stopped) {
runLog.log("Started your app.", { arrow: true });
@@ -234,8 +237,8 @@ class Runner {
}
if (self.selenium && ! self.stopped) {
await buildmessage.enterJob({ title: "starting Selenium" }, function () {
return self.selenium.start();
await buildmessage.enterJob({ title: "starting Selenium" }, async function () {
return await self.selenium.start();
});
if (! self.quiet && ! self.stopped) {
runLog.log("Started Selenium.", { arrow: true });
@@ -340,7 +343,6 @@ class Runner {
exports.run = async function (options) {
var runOptions = _.clone(options);
var once = runOptions.once;
var promise = new Promise(function (resolve) {
runOptions.onFailure = async function () {
// Ensure that runner stops now. You might think this is unnecessary

View File

@@ -13,7 +13,7 @@ import { pluginVersionsFromStarManifest } from '../cordova/index.js';
import { closeAllWatchers } from "../fs/safe-watcher";
import { eachline } from "../utils/eachline";
import { loadIsopackage } from '../tool-env/isopackets.js';
import { once , EventEmitter, on } from "events"
// Parse out s as if it were a bash command line.
var bashParse = function (s) {
if (s.search("\"") !== -1 || s.search("'") !== -1) {
@@ -404,31 +404,47 @@ Object.assign(AppRunner.prototype, {
self.startPromise = self._makePromise("start");
self.isRunning = true;
self._runApp();
self._runApp()
await self.startPromise;
self.startPromise = null;
},
_findCachedEE: function (name) {
if (!this._promiseResolvers[name]) {
this._promiseResolvers[name] = new EventEmitter();
}
return this._promiseResolvers[name];
},
_makeIterable : function (name) {
var self = this;
const ee = self._findCachedEE(name);
return on(ee, name);
},
/**
* @param name
* @return {Promise<[any]>}
* @private
*/
_makePromise: function (name) {
var self = this;
return new Promise(function (resolve) {
self._promiseResolvers[name] = resolve;
});
const ee = self._findCachedEE(name);
return once(ee, name);
},
_resolvePromise: function (name, value) {
var resolve = this._promiseResolvers[name];
if (resolve) {
const ee = this._promiseResolvers[name];
if (ee) {
ee.emit(name, value);
this._promiseResolvers[name] = null;
resolve(value);
}
},
_cleanUpPromises: function () {
if (this._promiseResolvers) {
_.each(this._promiseResolvers, function (resolve) {
resolve && resolve();
_.each(this._promiseResolvers, (resolve) => {
resolve && this._promiseResolvers[resolve]?.emit(resolve, false);
});
this._promiseResolvers = null;
}
@@ -452,10 +468,8 @@ Object.assign(AppRunner.prototype, {
// The existence of this promise makes the fiber break out of its loop.
self.exitPromise = self._makePromise("exit");
self._resolvePromise("run", { outcome: 'stopped' });
self._resolvePromise("watch");
if (self._beforeStartPromise) {
// If we stopped before mongod started (eg, due to mongod startup
// failure), unblock the runner fiber from waiting for mongod to start.
@@ -472,7 +486,7 @@ Object.assign(AppRunner.prototype, {
throw new Error("makeBeforeStartPromise called twice?");
}
this._beforeStartPromise = this._makePromise("beforeStart");
return this._promiseResolvers["beforeStart"];
return () => this._resolvePromise("beforeStart");
},
// Run the program once, wait for it to exit, and then return. The
@@ -500,7 +514,6 @@ Object.assign(AppRunner.prototype, {
// it even if we refreshed previously, since that might have been a
// little while ago.
catalog.triedToRefreshRecently = false;
// If this isn't the first time we've run, we need to reset the project
// context since everything we have cached may have changed.
// XXX We can try to be a little less conservative here:
@@ -521,8 +534,8 @@ Object.assign(AppRunner.prototype, {
// shown from the previous solution.
preservePackageMap: true
});
var messages = await buildmessage.capture(function () {
return self.projectContext.readProjectMetadata();
var messages = await buildmessage.capture(async function () {
return await self.projectContext.readProjectMetadata();
});
if (messages.hasMessages()) {
return {
@@ -548,7 +561,7 @@ Object.assign(AppRunner.prototype, {
}
messages = await buildmessage.capture(async function () {
await self.projectContext.prepareProjectForBuild();
return await self.projectContext.prepareProjectForBuild();
});
if (messages.hasMessages()) {
return {
@@ -573,7 +586,7 @@ Object.assign(AppRunner.prototype, {
});
}
var bundleResult = await Profile.run((firstRun?"B":"Reb")+"uild App", async () => {
var bundleResult = await Profile.run((firstRun?"B":"Reb")+"uild App", async function() {
return await bundler.bundle({
projectContext: self.projectContext,
outputPath: bundlePath,
@@ -618,7 +631,6 @@ Object.assign(AppRunner.prototype, {
watchSet.merge(br.clientWatchSet);
return watchSet;
};
var bundleResult;
var bundleResultOrRunResult = await bundleApp();
if (bundleResultOrRunResult.runResult) {
@@ -706,8 +718,8 @@ Object.assign(AppRunner.prototype, {
// We should have reset self.runPromise to null by now, but await it
// just in case it's still defined.
await self.runPromise;
var runPromise = self.runPromise = self._makePromise("run");
self.runPromise = self._makePromise("run");
var runPromise = self.runPromise;
var listenPromise = self._makePromise("listen");
// Run the program
@@ -747,13 +759,13 @@ Object.assign(AppRunner.prototype, {
});
if (options.firstRun && self._beforeStartPromise) {
var stopped = await self._beforeStartPromise;
if (stopped) {
return true;
}
var [stopped] = await self._beforeStartPromise;
if (stopped) {
return stopped
}
}
await appProcess.start();
function maybePrintLintWarnings(bundleResult) {
if (! (self.projectContext.lintAppAndLocalPackages &&
bundleResult.warnings)) {
@@ -805,7 +817,7 @@ Object.assign(AppRunner.prototype, {
}
var setupClientWatcher = function () {
clientWatcher && clientWatcher.stop();
clientWatcher && clientWatcher.stop();
clientWatcher = new watch.Watcher({
watchSet: bundleResult.clientWatchSet,
onChange: function () {
@@ -875,17 +887,17 @@ Object.assign(AppRunner.prototype, {
Console.enableProgressDisplay(false);
await Promise.race([
listenPromise,
runPromise]);
const postStartupResult = await runPostStartupCallbacks(bundleResult);
const promList = [runPromise, listenPromise];
await Promise.race(promList)
const postStartupResult =
await runPostStartupCallbacks(bundleResult)
if (postStartupResult) return postStartupResult;
// Wait for either the process to exit, or (if watchForChanges) a
// source file to change. Or, for stop() to be called.
var ret = await runPromise;
var [ret] = await runPromise;
try {
while (ret.outcome === 'changed-refreshable') {
if (! canRefreshClient) {
@@ -895,6 +907,7 @@ Object.assign(AppRunner.prototype, {
// We stay in this loop as long as only refreshable assets have changed.
// When ret.refreshable becomes false, we restart the server.
bundleResultOrRunResult = await bundleApp();
if (bundleResultOrRunResult.runResult) {
return bundleResultOrRunResult.runResult;
}
@@ -915,7 +928,7 @@ Object.assign(AppRunner.prototype, {
if (postStartupResult) return postStartupResult;
// Wait until another file changes.
ret = await oldPromise;
[ret] = await oldPromise;
}
} finally {
self.runPromise = null;
@@ -928,10 +941,10 @@ Object.assign(AppRunner.prototype, {
if (self.hmrServer) {
self.hmrServer.setAppState("okay");
}
appProcess.stop();
await appProcess.stop();
serverWatcher && serverWatcher.stop();
clientWatcher && clientWatcher.stop();
serverWatcher && serverWatcher.stop();
clientWatcher && clientWatcher.stop();
}
return ret;
@@ -1002,7 +1015,7 @@ Object.assign(AppRunner.prototype, {
}
if (self.watchForChanges) {
self.watchPromise = self._makePromise("watch");
self.watchPromise = self._makePromise("watch");
if (!runResult.watchSet) {
throw Error("watching for changes with no watchSet?");

View File

@@ -595,6 +595,7 @@ var launchMongo = async function(options) {
listening &&
(noOplog || replSetReadyToBeInitiated || replSetReady)
) {
proc.stdout.removeListener('data', stdoutOnData);
resolve();
resolve = null;

View File

@@ -223,7 +223,6 @@ var specialArgPaths = {
var loadServerBundles = Profile("Load server bundles", async function () {
var infos = [];
var nonLocalNodeModulesPaths = new Set();
for (const fileInfo of serverJson.load) {
var code = fs.readFileSync(path.resolve(serverDir, fileInfo.path));
@@ -503,5 +502,9 @@ var runMain = Profile("Run main()", async function () {
await runMain();
});
});
})().catch(e => console.log('error on boot.js', e));
})().catch(e => {
console.log('error on boot.js', e )
console.log(e.stack);
process.exit(1)
});

View File

@@ -48,7 +48,7 @@ type ExecFileOptions = {
* status and signal.
* @param command The command to run
* @param args List of string arguments
* @param options
* @param options
* @returns The stdout from the command
*/
export function execFileSync(
@@ -67,7 +67,7 @@ export function execFileSync(
* the error will contain fields pid, stderr, stdout, status and signal.
* @param command The command to run
* @param args List of string arguments
* @param options
* @param options
*/
export function execFileAsync(
command: string,
@@ -96,7 +96,7 @@ export function execFileAsync(
const exitEvent = options.waitForClose ? 'close' : 'exit';
return new Promise((resolve, reject) => {
let child: ReturnType<typeof child_process.exec>;
let child: ReturnType<typeof child_process.exec>;
const spawnArgs: ReadonlyArray<string> = Array.isArray(args) ? args : [];
const { cwd, env, stdio } = options;