@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.
Files changed (24) hide show
  1. package/isopackets/combined/npm/node_modules/meteor/babel-compiler/node_modules/.package-lock.json +1 -1
  2. package/isopackets/combined/npm/node_modules/meteor/boilerplate-generator/node_modules/.package-lock.json +1 -1
  3. package/isopackets/combined/npm/node_modules/meteor/constraint-solver/node_modules/.package-lock.json +1 -1
  4. package/isopackets/combined/npm/node_modules/meteor/ddp-client/node_modules/.package-lock.json +1 -1
  5. package/isopackets/combined/npm/node_modules/meteor/ecmascript/node_modules/.package-lock.json +1 -1
  6. package/isopackets/combined/npm/node_modules/meteor/ecmascript-runtime/node_modules/.package-lock.json +1 -1
  7. package/isopackets/combined/npm/node_modules/meteor/ecmascript-runtime-client/node_modules/.package-lock.json +1 -1
  8. package/isopackets/combined/npm/node_modules/meteor/ecmascript-runtime-server/node_modules/.package-lock.json +1 -1
  9. package/isopackets/combined/npm/node_modules/meteor/fetch/node_modules/.package-lock.json +1 -1
  10. package/isopackets/combined/npm/node_modules/meteor/fetch/node_modules/node-fetch/.meteor-portable-2.json +1 -0
  11. package/isopackets/combined/npm/node_modules/meteor/inter-process-messaging/node_modules/.package-lock.json +1 -1
  12. package/isopackets/combined/npm/node_modules/meteor/logging/node_modules/.package-lock.json +1 -1
  13. package/isopackets/combined/npm/node_modules/meteor/logic-solver/node_modules/.package-lock.json +1 -1
  14. package/isopackets/combined/npm/node_modules/meteor/meteor/node_modules/.package-lock.json +1 -1
  15. package/isopackets/combined/npm/node_modules/meteor/modules/node_modules/.package-lock.json +1 -1
  16. package/isopackets/combined/npm/node_modules/meteor/modules-runtime/node_modules/.package-lock.json +1 -1
  17. package/isopackets/combined/npm/node_modules/meteor/npm-mongo/node_modules/.package-lock.json +1 -1
  18. package/isopackets/combined/npm/node_modules/meteor/package-version-parser/node_modules/.package-lock.json +1 -1
  19. package/isopackets/combined/npm/node_modules/meteor/promise/node_modules/.package-lock.json +1 -1
  20. package/isopackets/combined/npm/node_modules/meteor/react-fast-refresh/node_modules/.package-lock.json +1 -1
  21. package/isopackets/combined/npm/node_modules/meteor/socket-stream-client/node_modules/.package-lock.json +1 -1
  22. package/package.json +1 -1
  23. package/src/bootstrap.js +16 -11
  24. package/src/project.js +24 -14
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-1kpsk4y03rr",
2
+ "name": "package-new-aon0csck5nc",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-xg8du3zbrol",
2
+ "name": "package-new-7itqfmhxkkg",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-mhlbtt2fnfc",
2
+ "name": "package-new-qgt8go4v4cs",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-f24lx9gefxh",
2
+ "name": "package-new-fbqyehtl14",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-9bziul8lrot",
2
+ "name": "package-new-1nlaexi6t2",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-9xqggeva6vs",
2
+ "name": "package-new-13bd6omdq4x",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-1ils6fgco69",
2
+ "name": "package-new-1le53rxf2hi",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-fz7zd0zppze",
2
+ "name": "package-new-1a1df3n6xd4",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-1bo66emam3qj",
2
+ "name": "package-new-1ldgtyhcd5n",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-153hmyzmzzo",
2
+ "name": "package-new-14v72dpcwfz",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-xqdz4rb997l",
2
+ "name": "package-new-8wlu1ysez5",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-13pz8f1aynj",
2
+ "name": "package-new-33r4gwibq95",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-197wm78nwi7",
2
+ "name": "package-new-2wo7c94bv9g",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-17en99ibbmv",
2
+ "name": "package-new-z9yv54fjb0r",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-1cp3re039w9",
2
+ "name": "package-new-1grd8lv1qrj",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-1wkg0541fwq",
2
+ "name": "package-new-1qdbcf9ihki",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-b5a9l27ykfp",
2
+ "name": "package-new-y4wyssce4p",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-1f74r589ogwk",
2
+ "name": "package-new-ilz08vtgbji",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-1v9u2tnhfn",
2
+ "name": "package-new-1w7r6hcpr0b",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "package-new-lsdjl8inhw",
2
+ "name": "package-new-x51xwlmyyae",
3
3
  "lockfileVersion": 3,
4
4
  "requires": true,
5
5
  "packages": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maka/meteor-sdk",
3
- "version": "0.2.10",
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
- // Kick off the persistent npm-deps cache prewarm (see tools/isobuild/
124
- // meteor-npm.js): restore every bundled package's node_modules from
125
- // ~/.meteor-npm-cache in parallel, so the first build after a fresh SDK
126
- // install doesn't pay a serial `npm install` per package. Deliberately
127
- // NOT awaited -- each restore holds the same cross-process lock
128
- // updateDependencies() takes, so a build racing ahead of the prewarm
129
- // simply waits on (or wins) the per-package lock; firing it before
130
- // ensureRuntimeReady() lets even the isopacket builds overlap with it.
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 startNpmDepsCachePrewarm() {
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
- startNpmDepsCachePrewarm();
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, which also keeps those installs'
74
- // .npm churn from re-firing the app runner's file watcher mid-build.
75
- // Un-awaited: every prewarm operation holds the same cross-process
76
- // per-package lock updateDependencies() takes, so the build below
77
- // simply waits on (or wins) each package's lock. Best-effort by
78
- // design -- on any failure the build installs serially as before.
79
- startAppNpmDepsPrewarm(standardProjectDir);
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 startAppNpmDepsPrewarm(standardProjectDir) {
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
- Promise.resolve(
105
- meteorNpm.prewarmNpmDepsCache(
106
- path.resolve(__dirname, "..", "packages"),
107
- { onlyPackages: names, installOnMiss: true }
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
  }