@bleedingdev/modern-js-ultramodern-create 3.8.3-ultramodern.5 → 3.8.3-ultramodern.6

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/README.md CHANGED
@@ -177,7 +177,7 @@ Package source is explicit and recorded in `.modernjs/ultramodern.json`.
177
177
 
178
178
  | Strategy | Use when | CLI |
179
179
  | --- | --- | --- |
180
- | `install` | Published BleedingDev package cohort or release proof | Default for the BleedingDev create package; optional `--ultramodern-package-version`, `--ultramodern-package-registry`, `--ultramodern-package-scope`, and `--ultramodern-package-name-prefix` |
180
+ | `install` | Published BleedingDev package cohort or release proof | Default for the BleedingDev create package; optional `--ultramodern-package-version`, `--ultramodern-package-registry` (serves the cohort scope only; release-age metadata for every other dependency is validated against npmjs), `--ultramodern-package-scope`, and `--ultramodern-package-name-prefix` |
181
181
  | `workspace` | Local monorepo testing against unreleased packages | `--workspace` or `--ultramodern-package-source=workspace` |
182
182
 
183
183
  ## Migrating Older Workspaces
@@ -423,6 +423,8 @@ function updateGeneratedPnpmWorkspacePolicy(io, packageSource, options = {}) {
423
423
  for (const stalePatchFile of stalePatchFiles)changed = io.remove(stalePatchFile) || changed;
424
424
  return changed;
425
425
  }
426
+ const NPM_REGISTRY_URL = 'https://registry.npmjs.org/';
427
+ const LOOPBACK_REGISTRY_HOST = '127.0.0.1';
426
428
  function packageRegistryUrl(registryUrl, packageName) {
427
429
  let base;
428
430
  try {
@@ -430,7 +432,7 @@ function packageRegistryUrl(registryUrl, packageName) {
430
432
  } catch {
431
433
  throw new Error(`Registry URL is invalid: ${registryUrl}`);
432
434
  }
433
- if ('https:' !== base.protocol) throw new Error(`Registry URL must use HTTPS: ${registryUrl}`);
435
+ if ('https:' !== base.protocol && !('http:' === base.protocol && base.hostname === LOOPBACK_REGISTRY_HOST)) throw new Error(`Registry URL must use HTTPS: ${registryUrl}`);
434
436
  const encodedName = packageName.startsWith('@') ? packageName.replace('/', '%2f') : encodeURIComponent(packageName);
435
437
  return new URL(encodedName, base);
436
438
  }
@@ -473,7 +475,7 @@ async function resolveRegistryCandidates(candidates, options) {
473
475
  const key = packageVersionKey(candidate.packageName, candidate.version);
474
476
  let response;
475
477
  try {
476
- response = await fetchRegistryResponse(options.fetchImpl, packageRegistryUrl(options.registryUrl, candidate.packageName));
478
+ response = await fetchRegistryResponse(options.fetchImpl, packageRegistryUrl(options.registryUrlFor(candidate.packageName), candidate.packageName));
477
479
  } catch (error) {
478
480
  throw new Error(`Registry metadata is uncertain for ${key} (${candidate.path.join(' -> ')}): ${error instanceof Error ? error.message : String(error)}`);
479
481
  }
@@ -550,10 +552,12 @@ async function validateGeneratedPnpmLockReleaseAgePolicy(workspaceRoot, packageS
550
552
  return true;
551
553
  };
552
554
  const thirdPartyCandidates = closure.candidates.filter((candidate)=>!isFirstPartyCandidate(candidate.packageName, candidate.version));
555
+ const scopeRegistryUrl = options.registryUrl ?? packageSource.registry ?? NPM_REGISTRY_URL;
556
+ const scopePrefix = packageSource.aliasScope ? `@${packageSource.aliasScope.replace(/^@/u, '')}/` : void 0;
553
557
  const activeCandidates = await resolveRegistryCandidates(thirdPartyCandidates, {
554
558
  fetchImpl: options.fetchImpl ?? fetch,
555
559
  now,
556
- registryUrl: options.registryUrl ?? packageSource.registry ?? 'https://registry.npmjs.org/'
560
+ registryUrlFor: (packageName)=>void 0 !== scopePrefix && packageName.startsWith(scopePrefix) ? scopeRegistryUrl : NPM_REGISTRY_URL
557
561
  });
558
562
  const resolved = (0, policy_cjs_namespaceObject.resolveReleaseAgeApprovals)(activeCandidates, {
559
563
  approvals,
@@ -378,6 +378,8 @@ function updateGeneratedPnpmWorkspacePolicy(io, packageSource, options = {}) {
378
378
  for (const stalePatchFile of stalePatchFiles)changed = io.remove(stalePatchFile) || changed;
379
379
  return changed;
380
380
  }
381
+ const NPM_REGISTRY_URL = 'https://registry.npmjs.org/';
382
+ const LOOPBACK_REGISTRY_HOST = '127.0.0.1';
381
383
  function packageRegistryUrl(registryUrl, packageName) {
382
384
  let base;
383
385
  try {
@@ -385,7 +387,7 @@ function packageRegistryUrl(registryUrl, packageName) {
385
387
  } catch {
386
388
  throw new Error(`Registry URL is invalid: ${registryUrl}`);
387
389
  }
388
- if ('https:' !== base.protocol) throw new Error(`Registry URL must use HTTPS: ${registryUrl}`);
390
+ if ('https:' !== base.protocol && !('http:' === base.protocol && base.hostname === LOOPBACK_REGISTRY_HOST)) throw new Error(`Registry URL must use HTTPS: ${registryUrl}`);
389
391
  const encodedName = packageName.startsWith('@') ? packageName.replace('/', '%2f') : encodeURIComponent(packageName);
390
392
  return new URL(encodedName, base);
391
393
  }
@@ -428,7 +430,7 @@ async function resolveRegistryCandidates(candidates, options) {
428
430
  const key = packageVersionKey(candidate.packageName, candidate.version);
429
431
  let response;
430
432
  try {
431
- response = await fetchRegistryResponse(options.fetchImpl, packageRegistryUrl(options.registryUrl, candidate.packageName));
433
+ response = await fetchRegistryResponse(options.fetchImpl, packageRegistryUrl(options.registryUrlFor(candidate.packageName), candidate.packageName));
432
434
  } catch (error) {
433
435
  throw new Error(`Registry metadata is uncertain for ${key} (${candidate.path.join(' -> ')}): ${error instanceof Error ? error.message : String(error)}`);
434
436
  }
@@ -505,10 +507,12 @@ async function validateGeneratedPnpmLockReleaseAgePolicy(workspaceRoot, packageS
505
507
  return true;
506
508
  };
507
509
  const thirdPartyCandidates = closure.candidates.filter((candidate)=>!isFirstPartyCandidate(candidate.packageName, candidate.version));
510
+ const scopeRegistryUrl = options.registryUrl ?? packageSource.registry ?? NPM_REGISTRY_URL;
511
+ const scopePrefix = packageSource.aliasScope ? `@${packageSource.aliasScope.replace(/^@/u, '')}/` : void 0;
508
512
  const activeCandidates = await resolveRegistryCandidates(thirdPartyCandidates, {
509
513
  fetchImpl: options.fetchImpl ?? fetch,
510
514
  now,
511
- registryUrl: options.registryUrl ?? packageSource.registry ?? 'https://registry.npmjs.org/'
515
+ registryUrlFor: (packageName)=>void 0 !== scopePrefix && packageName.startsWith(scopePrefix) ? scopeRegistryUrl : NPM_REGISTRY_URL
512
516
  });
513
517
  const resolved = resolveReleaseAgeApprovals(activeCandidates, {
514
518
  approvals,
@@ -379,6 +379,8 @@ function updateGeneratedPnpmWorkspacePolicy(io, packageSource, options = {}) {
379
379
  for (const stalePatchFile of stalePatchFiles)changed = io.remove(stalePatchFile) || changed;
380
380
  return changed;
381
381
  }
382
+ const NPM_REGISTRY_URL = 'https://registry.npmjs.org/';
383
+ const LOOPBACK_REGISTRY_HOST = '127.0.0.1';
382
384
  function packageRegistryUrl(registryUrl, packageName) {
383
385
  let base;
384
386
  try {
@@ -386,7 +388,7 @@ function packageRegistryUrl(registryUrl, packageName) {
386
388
  } catch {
387
389
  throw new Error(`Registry URL is invalid: ${registryUrl}`);
388
390
  }
389
- if ('https:' !== base.protocol) throw new Error(`Registry URL must use HTTPS: ${registryUrl}`);
391
+ if ('https:' !== base.protocol && !('http:' === base.protocol && base.hostname === LOOPBACK_REGISTRY_HOST)) throw new Error(`Registry URL must use HTTPS: ${registryUrl}`);
390
392
  const encodedName = packageName.startsWith('@') ? packageName.replace('/', '%2f') : encodeURIComponent(packageName);
391
393
  return new URL(encodedName, base);
392
394
  }
@@ -429,7 +431,7 @@ async function resolveRegistryCandidates(candidates, options) {
429
431
  const key = packageVersionKey(candidate.packageName, candidate.version);
430
432
  let response;
431
433
  try {
432
- response = await fetchRegistryResponse(options.fetchImpl, packageRegistryUrl(options.registryUrl, candidate.packageName));
434
+ response = await fetchRegistryResponse(options.fetchImpl, packageRegistryUrl(options.registryUrlFor(candidate.packageName), candidate.packageName));
433
435
  } catch (error) {
434
436
  throw new Error(`Registry metadata is uncertain for ${key} (${candidate.path.join(' -> ')}): ${error instanceof Error ? error.message : String(error)}`);
435
437
  }
@@ -506,10 +508,12 @@ async function validateGeneratedPnpmLockReleaseAgePolicy(workspaceRoot, packageS
506
508
  return true;
507
509
  };
508
510
  const thirdPartyCandidates = closure.candidates.filter((candidate)=>!isFirstPartyCandidate(candidate.packageName, candidate.version));
511
+ const scopeRegistryUrl = options.registryUrl ?? packageSource.registry ?? NPM_REGISTRY_URL;
512
+ const scopePrefix = packageSource.aliasScope ? `@${packageSource.aliasScope.replace(/^@/u, '')}/` : void 0;
509
513
  const activeCandidates = await resolveRegistryCandidates(thirdPartyCandidates, {
510
514
  fetchImpl: options.fetchImpl ?? fetch,
511
515
  now,
512
- registryUrl: options.registryUrl ?? packageSource.registry ?? 'https://registry.npmjs.org/'
516
+ registryUrlFor: (packageName)=>void 0 !== scopePrefix && packageName.startsWith(scopePrefix) ? scopeRegistryUrl : NPM_REGISTRY_URL
513
517
  });
514
518
  const resolved = resolveReleaseAgeApprovals(activeCandidates, {
515
519
  approvals,
package/package.json CHANGED
@@ -26,7 +26,7 @@
26
26
  "engines": {
27
27
  "node": ">=26.7.0"
28
28
  },
29
- "version": "3.8.3-ultramodern.5",
29
+ "version": "3.8.3-ultramodern.6",
30
30
  "types": "./dist/types/index.d.ts",
31
31
  "main": "./dist/esm-node/index.js",
32
32
  "bin": {
@@ -82,8 +82,8 @@
82
82
  ],
83
83
  "dependencies": {
84
84
  "@modern-js/codesmith": "2.6.9",
85
- "@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.8.3-ultramodern.5",
86
- "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.8.3-ultramodern.5",
85
+ "@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.8.3-ultramodern.6",
86
+ "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.8.3-ultramodern.6",
87
87
  "esbuild": "^0.28.1",
88
88
  "oxfmt": "0.65.0",
89
89
  "ultracite": "7.10.6"
@@ -110,6 +110,6 @@
110
110
  "type-check": "tsgo --noEmit -p tsconfig.json"
111
111
  },
112
112
  "ultramodern": {
113
- "frameworkVersion": "3.8.3-ultramodern.5"
113
+ "frameworkVersion": "3.8.3-ultramodern.6"
114
114
  }
115
115
  }
@@ -43,202 +43,202 @@
43
43
  {
44
44
  "sourceName": "@modern-js/adapter-rstest",
45
45
  "targetName": "@bleedingdev/modern-js-adapter-rstest",
46
- "version": "3.8.3-ultramodern.5"
46
+ "version": "3.8.3-ultramodern.6"
47
47
  },
48
48
  {
49
49
  "sourceName": "@modern-js/app-tools",
50
50
  "targetName": "@bleedingdev/modern-js-app-tools",
51
- "version": "3.8.3-ultramodern.5"
51
+ "version": "3.8.3-ultramodern.6"
52
52
  },
53
53
  {
54
54
  "sourceName": "@modern-js/app-tools-extensions",
55
55
  "targetName": "@bleedingdev/modern-js-app-tools-extensions",
56
- "version": "3.8.3-ultramodern.5"
56
+ "version": "3.8.3-ultramodern.6"
57
57
  },
58
58
  {
59
59
  "sourceName": "@modern-js/bff-core",
60
60
  "targetName": "@bleedingdev/modern-js-bff-core",
61
- "version": "3.8.3-ultramodern.5"
61
+ "version": "3.8.3-ultramodern.6"
62
62
  },
63
63
  {
64
64
  "sourceName": "@modern-js/bff-effect",
65
65
  "targetName": "@bleedingdev/modern-js-bff-effect",
66
- "version": "3.8.3-ultramodern.5"
66
+ "version": "3.8.3-ultramodern.6"
67
67
  },
68
68
  {
69
69
  "sourceName": "@modern-js/bff-runtime",
70
70
  "targetName": "@bleedingdev/modern-js-bff-runtime",
71
- "version": "3.8.3-ultramodern.5"
71
+ "version": "3.8.3-ultramodern.6"
72
72
  },
73
73
  {
74
74
  "sourceName": "@modern-js/builder",
75
75
  "targetName": "@bleedingdev/modern-js-builder",
76
- "version": "3.8.3-ultramodern.5"
76
+ "version": "3.8.3-ultramodern.6"
77
77
  },
78
78
  {
79
79
  "sourceName": "@modern-js/code-tools",
80
80
  "targetName": "@bleedingdev/modern-js-code-tools",
81
- "version": "3.8.3-ultramodern.5"
81
+ "version": "3.8.3-ultramodern.6"
82
82
  },
83
83
  {
84
84
  "sourceName": "@modern-js/create-request",
85
85
  "targetName": "@bleedingdev/modern-js-create-request",
86
- "version": "3.8.3-ultramodern.5"
86
+ "version": "3.8.3-ultramodern.6"
87
87
  },
88
88
  {
89
89
  "sourceName": "@modern-js/i18n-runtime-extensions",
90
90
  "targetName": "@bleedingdev/modern-js-i18n-runtime-extensions",
91
- "version": "3.8.3-ultramodern.5"
91
+ "version": "3.8.3-ultramodern.6"
92
92
  },
93
93
  {
94
94
  "sourceName": "@modern-js/i18n-utils",
95
95
  "targetName": "@bleedingdev/modern-js-i18n-utils",
96
- "version": "3.8.3-ultramodern.5"
96
+ "version": "3.8.3-ultramodern.6"
97
97
  },
98
98
  {
99
99
  "sourceName": "@modern-js/image",
100
100
  "targetName": "@bleedingdev/modern-js-image",
101
- "version": "3.8.3-ultramodern.5"
101
+ "version": "3.8.3-ultramodern.6"
102
102
  },
103
103
  {
104
104
  "sourceName": "@modern-js/main-doc",
105
105
  "targetName": "@bleedingdev/modern-js-main-doc",
106
- "version": "3.8.3-ultramodern.5"
106
+ "version": "3.8.3-ultramodern.6"
107
107
  },
108
108
  {
109
109
  "sourceName": "@modern-js/plugin",
110
110
  "targetName": "@bleedingdev/modern-js-plugin",
111
- "version": "3.8.3-ultramodern.5"
111
+ "version": "3.8.3-ultramodern.6"
112
112
  },
113
113
  {
114
114
  "sourceName": "@modern-js/plugin-bff",
115
115
  "targetName": "@bleedingdev/modern-js-plugin-bff",
116
- "version": "3.8.3-ultramodern.5"
116
+ "version": "3.8.3-ultramodern.6"
117
117
  },
118
118
  {
119
119
  "sourceName": "@modern-js/plugin-bff-extensions",
120
120
  "targetName": "@bleedingdev/modern-js-plugin-bff-extensions",
121
- "version": "3.8.3-ultramodern.5"
121
+ "version": "3.8.3-ultramodern.6"
122
122
  },
123
123
  {
124
124
  "sourceName": "@modern-js/plugin-data-loader",
125
125
  "targetName": "@bleedingdev/modern-js-plugin-data-loader",
126
- "version": "3.8.3-ultramodern.5"
126
+ "version": "3.8.3-ultramodern.6"
127
127
  },
128
128
  {
129
129
  "sourceName": "@modern-js/plugin-i18n",
130
130
  "targetName": "@bleedingdev/modern-js-plugin-i18n",
131
- "version": "3.8.3-ultramodern.5"
131
+ "version": "3.8.3-ultramodern.6"
132
132
  },
133
133
  {
134
134
  "sourceName": "@modern-js/plugin-polyfill",
135
135
  "targetName": "@bleedingdev/modern-js-plugin-polyfill",
136
- "version": "3.8.3-ultramodern.5"
136
+ "version": "3.8.3-ultramodern.6"
137
137
  },
138
138
  {
139
139
  "sourceName": "@modern-js/plugin-ssg",
140
140
  "targetName": "@bleedingdev/modern-js-plugin-ssg",
141
- "version": "3.8.3-ultramodern.5"
141
+ "version": "3.8.3-ultramodern.6"
142
142
  },
143
143
  {
144
144
  "sourceName": "@modern-js/plugin-styled-components",
145
145
  "targetName": "@bleedingdev/modern-js-plugin-styled-components",
146
- "version": "3.8.3-ultramodern.5"
146
+ "version": "3.8.3-ultramodern.6"
147
147
  },
148
148
  {
149
149
  "sourceName": "@modern-js/plugin-tanstack",
150
150
  "targetName": "@bleedingdev/modern-js-plugin-tanstack",
151
- "version": "3.8.3-ultramodern.5"
151
+ "version": "3.8.3-ultramodern.6"
152
152
  },
153
153
  {
154
154
  "sourceName": "@modern-js/prod-server",
155
155
  "targetName": "@bleedingdev/modern-js-prod-server",
156
- "version": "3.8.3-ultramodern.5"
156
+ "version": "3.8.3-ultramodern.6"
157
157
  },
158
158
  {
159
159
  "sourceName": "@modern-js/render",
160
160
  "targetName": "@bleedingdev/modern-js-render",
161
- "version": "3.8.3-ultramodern.5"
161
+ "version": "3.8.3-ultramodern.6"
162
162
  },
163
163
  {
164
164
  "sourceName": "@modern-js/runtime",
165
165
  "targetName": "@bleedingdev/modern-js-runtime",
166
- "version": "3.8.3-ultramodern.5"
166
+ "version": "3.8.3-ultramodern.6"
167
167
  },
168
168
  {
169
169
  "sourceName": "@modern-js/runtime-extensions",
170
170
  "targetName": "@bleedingdev/modern-js-runtime-extensions",
171
- "version": "3.8.3-ultramodern.5"
171
+ "version": "3.8.3-ultramodern.6"
172
172
  },
173
173
  {
174
174
  "sourceName": "@modern-js/runtime-utils",
175
175
  "targetName": "@bleedingdev/modern-js-runtime-utils",
176
- "version": "3.8.3-ultramodern.5"
176
+ "version": "3.8.3-ultramodern.6"
177
177
  },
178
178
  {
179
179
  "sourceName": "@modern-js/sandpack-react",
180
180
  "targetName": "@bleedingdev/modern-js-sandpack-react",
181
- "version": "3.8.3-ultramodern.5"
181
+ "version": "3.8.3-ultramodern.6"
182
182
  },
183
183
  {
184
184
  "sourceName": "@modern-js/server",
185
185
  "targetName": "@bleedingdev/modern-js-server",
186
- "version": "3.8.3-ultramodern.5"
186
+ "version": "3.8.3-ultramodern.6"
187
187
  },
188
188
  {
189
189
  "sourceName": "@modern-js/server-core",
190
190
  "targetName": "@bleedingdev/modern-js-server-core",
191
- "version": "3.8.3-ultramodern.5"
191
+ "version": "3.8.3-ultramodern.6"
192
192
  },
193
193
  {
194
194
  "sourceName": "@modern-js/server-runtime",
195
195
  "targetName": "@bleedingdev/modern-js-server-runtime",
196
- "version": "3.8.3-ultramodern.5"
196
+ "version": "3.8.3-ultramodern.6"
197
197
  },
198
198
  {
199
199
  "sourceName": "@modern-js/server-runtime-extensions",
200
200
  "targetName": "@bleedingdev/modern-js-server-runtime-extensions",
201
- "version": "3.8.3-ultramodern.5"
201
+ "version": "3.8.3-ultramodern.6"
202
202
  },
203
203
  {
204
204
  "sourceName": "@modern-js/server-utils",
205
205
  "targetName": "@bleedingdev/modern-js-server-utils",
206
- "version": "3.8.3-ultramodern.5"
206
+ "version": "3.8.3-ultramodern.6"
207
207
  },
208
208
  {
209
209
  "sourceName": "@modern-js/tsconfig",
210
210
  "targetName": "@bleedingdev/modern-js-tsconfig",
211
- "version": "3.8.3-ultramodern.5"
211
+ "version": "3.8.3-ultramodern.6"
212
212
  },
213
213
  {
214
214
  "sourceName": "@modern-js/types",
215
215
  "targetName": "@bleedingdev/modern-js-types",
216
- "version": "3.8.3-ultramodern.5"
216
+ "version": "3.8.3-ultramodern.6"
217
217
  },
218
218
  {
219
219
  "sourceName": "@modern-js/ultramodern-create",
220
220
  "targetName": "@bleedingdev/modern-js-ultramodern-create",
221
- "version": "3.8.3-ultramodern.5"
221
+ "version": "3.8.3-ultramodern.6"
222
222
  },
223
223
  {
224
224
  "sourceName": "@modern-js/ultramodern-sandpack-profile",
225
225
  "targetName": "@bleedingdev/modern-js-ultramodern-sandpack-profile",
226
- "version": "3.8.3-ultramodern.5"
226
+ "version": "3.8.3-ultramodern.6"
227
227
  },
228
228
  {
229
229
  "sourceName": "@modern-js/utils",
230
230
  "targetName": "@bleedingdev/modern-js-utils",
231
- "version": "3.8.3-ultramodern.5"
231
+ "version": "3.8.3-ultramodern.6"
232
232
  }
233
233
  ],
234
234
  "release": {
235
235
  "tag": "latest",
236
- "version": "3.8.3-ultramodern.5"
236
+ "version": "3.8.3-ultramodern.6"
237
237
  },
238
238
  "schema": "bleedingdev.ultramodern.release-cohort",
239
239
  "schemaVersion": 1,
240
240
  "source": {
241
- "commit": "ccb24fc94710cc8c4818b5af64df4a66b6445562",
241
+ "commit": "fd20d7a49791204fb51f1bfdf8ccdc16f690b6c2",
242
242
  "repository": "BleedingDev/ultramodern.js"
243
243
  }
244
244
  }