@maka/meteor-sdk 0.2.10 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/isopackets/combined/npm/node_modules/meteor/babel-compiler/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/boilerplate-generator/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/constraint-solver/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/ddp-client/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/ecmascript/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/ecmascript-runtime/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/ecmascript-runtime-client/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/ecmascript-runtime-server/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/fetch/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/fetch/node_modules/node-fetch/.meteor-portable-2.json +1 -0
- package/isopackets/combined/npm/node_modules/meteor/inter-process-messaging/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/logging/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/logic-solver/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/meteor/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/modules/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/modules-runtime/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/npm-mongo/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/package-version-parser/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/promise/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/react-fast-refresh/node_modules/.package-lock.json +1 -1
- package/isopackets/combined/npm/node_modules/meteor/socket-stream-client/node_modules/.package-lock.json +1 -1
- package/package.json +1 -1
- package/src/bootstrap.js +16 -11
- package/src/project.js +24 -14
|
@@ -0,0 +1 @@
|
|
|
1
|
+
true
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maka/meteor-sdk",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.11",
|
|
4
4
|
"description": "Programmatic Node API over the Meteor build tool (bundle/run/create/etc.) -- for driving Meteor's build system from plain Node code instead of shelling out to a meteor CLI (there isn't one anymore; see README.md). \"dependencies\" is generated by scripts/write-tool-package-json.js from scripts/dev-bundle-tool-package.js at the monorepo root -- do not hand-edit that field, edit that file and re-run the script instead.",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"exports": {
|
package/src/bootstrap.js
CHANGED
|
@@ -120,18 +120,22 @@ function ensureMainModuleShim() {
|
|
|
120
120
|
};
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
//
|
|
124
|
-
// meteor-npm.js)
|
|
125
|
-
//
|
|
126
|
-
//
|
|
127
|
-
//
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
//
|
|
123
|
+
// Restore every bundled package's node_modules from ~/.meteor-npm-cache
|
|
124
|
+
// in parallel (see tools/isobuild/meteor-npm.js), so the first build
|
|
125
|
+
// after a fresh SDK install doesn't pay a serial `npm install` per
|
|
126
|
+
// package. Restore-only here (no npm spawns) -- fast even across all
|
|
127
|
+
// ~140 bundled packages -- but still MUST be awaited before
|
|
128
|
+
// ensureRuntimeReady() touches any package: a createAppRunner() run
|
|
129
|
+
// sets up its file watcher soon after bootstrap, and a background swap
|
|
130
|
+
// racing that watcher's dependency-graph capture is exactly the bug
|
|
131
|
+
// that caused a per-package restart storm (see project.js's
|
|
132
|
+
// runAppNpmDepsPrewarm, which hit this for the app-scoped install
|
|
133
|
+
// stage -- same class of race, same fix). Memoized so a later
|
|
134
|
+
// bootstrap() call (already a no-op after the first) never re-runs it.
|
|
131
135
|
let npmDepsCachePrewarm = null;
|
|
132
|
-
function
|
|
136
|
+
function npmDepsCachePrewarmPromise() {
|
|
133
137
|
if (npmDepsCachePrewarm) {
|
|
134
|
-
return;
|
|
138
|
+
return npmDepsCachePrewarm;
|
|
135
139
|
}
|
|
136
140
|
try {
|
|
137
141
|
const meteorNpm = require("../tools/isobuild/meteor-npm.js");
|
|
@@ -143,6 +147,7 @@ function startNpmDepsCachePrewarm() {
|
|
|
143
147
|
// Best-effort: the build's own per-package install path still works.
|
|
144
148
|
npmDepsCachePrewarm = Promise.resolve();
|
|
145
149
|
}
|
|
150
|
+
return npmDepsCachePrewarm;
|
|
146
151
|
}
|
|
147
152
|
|
|
148
153
|
// Idempotent: safe to call from every public SDK entry point. The actual
|
|
@@ -177,7 +182,7 @@ async function bootstrap(options) {
|
|
|
177
182
|
require("../tools/tool-env/install-babel.js");
|
|
178
183
|
ensureAsyncLocalStorage();
|
|
179
184
|
consoleAdapter.patch();
|
|
180
|
-
|
|
185
|
+
await npmDepsCachePrewarmPromise();
|
|
181
186
|
await ensureRuntimeReady(options && options.offline);
|
|
182
187
|
bootstrapped = true;
|
|
183
188
|
}
|
package/src/project.js
CHANGED
|
@@ -70,13 +70,25 @@ async function loadProject(projectDir) {
|
|
|
70
70
|
// the exact core-package set the build will need, so cache MISSES can
|
|
71
71
|
// be npm-installed too -- in parallel (small pool; concurrent npm
|
|
72
72
|
// processes contend on npm's shared content cache) and BEFORE the
|
|
73
|
-
// build's serial per-package walk
|
|
74
|
-
//
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
//
|
|
78
|
-
//
|
|
79
|
-
|
|
73
|
+
// build's serial per-package walk.
|
|
74
|
+
//
|
|
75
|
+
// MUST be awaited, not fire-and-forget: prepareProjectForBuild()
|
|
76
|
+
// below captures each package's WatchSet (which includes
|
|
77
|
+
// npm-shrinkwrap.json) for the run/build that follows. For a one-shot
|
|
78
|
+
// bundle() an un-awaited prewarm only risked harmless redundant work
|
|
79
|
+
// with the real build's own on-demand install (the per-package lock
|
|
80
|
+
// serializes it). But createAppRunner()'s WATCHED run reacts to any
|
|
81
|
+
// change in that WatchSet -- including the prewarm's own (correct)
|
|
82
|
+
// .npm swap -- by restarting the build, which calls loadProject()
|
|
83
|
+
// again, which fired ANOTHER un-awaited prewarm pass for whatever
|
|
84
|
+
// wasn't done yet, repeating once per package (observed: a restart
|
|
85
|
+
// storm that ground through all ~25 core packages one at a time,
|
|
86
|
+
// matching the exact original "updating npm dependencies" report).
|
|
87
|
+
// Awaiting here means every relevant package's deps are settled
|
|
88
|
+
// before any watcher is ever created, so there is nothing left for
|
|
89
|
+
// it to race. Best-effort either way -- on any failure below the
|
|
90
|
+
// build's own on-demand install path still runs, just slower.
|
|
91
|
+
await runAppNpmDepsPrewarm(standardProjectDir);
|
|
80
92
|
|
|
81
93
|
await runCaptured("preparing project", () =>
|
|
82
94
|
projectContext.prepareProjectForBuild()
|
|
@@ -85,7 +97,7 @@ async function loadProject(projectDir) {
|
|
|
85
97
|
return new Project(projectContext);
|
|
86
98
|
}
|
|
87
99
|
|
|
88
|
-
function
|
|
100
|
+
async function runAppNpmDepsPrewarm(standardProjectDir) {
|
|
89
101
|
try {
|
|
90
102
|
const files = require("../tools/fs/files");
|
|
91
103
|
const versionsFile = files.pathJoin(
|
|
@@ -101,12 +113,10 @@ function startAppNpmDepsPrewarm(standardProjectDir) {
|
|
|
101
113
|
return;
|
|
102
114
|
}
|
|
103
115
|
const meteorNpm = require("../tools/isobuild/meteor-npm.js");
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
)
|
|
109
|
-
).catch(() => {});
|
|
116
|
+
await meteorNpm.prewarmNpmDepsCache(
|
|
117
|
+
path.resolve(__dirname, "..", "packages"),
|
|
118
|
+
{ onlyPackages: names, installOnMiss: true }
|
|
119
|
+
);
|
|
110
120
|
} catch (e) {
|
|
111
121
|
// Best-effort: the build's own per-package install path still works.
|
|
112
122
|
}
|