forgeos 0.1.0-alpha.36 → 0.1.0-alpha.37
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/AGENTS.md +1 -1
- package/CHANGELOG.md +11 -0
- package/docs/changelog.md +14 -0
- package/package.json +1 -1
- package/src/forge/_generated/releaseManifest.json +1 -1
- package/src/forge/_generated/releaseManifest.ts +3 -3
- package/src/forge/cli/deps.ts +3 -1
- package/src/forge/compiler/package-graph/compiler.ts +3 -1
- package/src/forge/compiler/package-graph/constants.ts +1 -1
- package/src/forge/compiler/package-upgrades/planner.ts +27 -10
- package/src/forge/compiler/types/package-graph.ts +6 -0
- package/src/forge/version.ts +1 -1
package/AGENTS.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// @forge-generated generator=0.1.0-alpha.
|
|
1
|
+
// @forge-generated generator=0.1.0-alpha.37 input=055c7d65fca3d6d8b05af2899c233ff69d377edf0f46f719e2d164ee0574309a content=721818a6f9a664aa898092d4aa5cd68cbbd8ad6e150c7d3ad3ef785a2e3fcf53
|
|
2
2
|
# AGENTS.md
|
|
3
3
|
|
|
4
4
|
<!-- forge-generated:start -->
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# forgeos
|
|
2
2
|
|
|
3
|
+
## 0.1.0-alpha.37
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Fix `forge deps upgrade-plan` for npm alias installs used by ForgeOS apps.
|
|
8
|
+
|
|
9
|
+
- Record the real package name from package metadata in the generated package graph when a dependency is installed through an alias such as `forge: npm:forgeos@...`.
|
|
10
|
+
- Resolve upgrade plans by either the real package name (`forgeos`) or the dependency alias (`forge`) while preserving install specs like `forge@npm:forgeos@0.1.0-alpha.37`.
|
|
11
|
+
- Avoid attempting to resolve the unrelated public `forge@alpha` package when an app asks to upgrade its ForgeOS alias dependency.
|
|
12
|
+
- Add regression coverage for aliased package graph entries where the import name and real npm package name differ.
|
|
13
|
+
|
|
3
14
|
## 0.1.0-alpha.36
|
|
4
15
|
|
|
5
16
|
### Patch Changes
|
package/docs/changelog.md
CHANGED
|
@@ -6,6 +6,20 @@ The canonical source file in the repository is `CHANGELOG.md`.
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## 0.1.0-alpha.37
|
|
10
|
+
|
|
11
|
+
- Fixed `forge deps upgrade-plan` for npm alias installs used by ForgeOS apps.
|
|
12
|
+
- Recorded the real package name from package metadata in generated package
|
|
13
|
+
graph entries when a dependency is installed through an alias such as
|
|
14
|
+
`forge: npm:forgeos@...`.
|
|
15
|
+
- Resolved upgrade plans by either the real package name (`forgeos`) or the
|
|
16
|
+
dependency alias (`forge`) while preserving install specs like
|
|
17
|
+
`forge@npm:forgeos@0.1.0-alpha.37`.
|
|
18
|
+
- Avoided attempting to resolve the unrelated public `forge@alpha` package when
|
|
19
|
+
an app asks to upgrade its ForgeOS alias dependency.
|
|
20
|
+
- Added regression coverage for aliased package graph entries where the import
|
|
21
|
+
name and real npm package name differ.
|
|
22
|
+
|
|
9
23
|
## 0.1.0-alpha.36
|
|
10
24
|
|
|
11
25
|
- Smoothed the alpha field-test loop after the Vendor Access app exercise.
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"defaultProvider":"local","diagnostics":[],"env":{"deployEnv":"FORGE_DEPLOY_ENV","deployId":"FORGE_DEPLOY_ID","publicReleaseId":"NEXT_PUBLIC_FORGE_RELEASE_ID","releaseId":"FORGE_RELEASE_ID"},"gitSha":"unknown","optionalProviders":["local","sentry-compatible","sentry","glitchtip","bugsink","otel","custom"],"packageName":"forgeos","packageVersion":"0.1.0-alpha.
|
|
1
|
+
{"defaultProvider":"local","diagnostics":[],"env":{"deployEnv":"FORGE_DEPLOY_ENV","deployId":"FORGE_DEPLOY_ID","publicReleaseId":"NEXT_PUBLIC_FORGE_RELEASE_ID","releaseId":"FORGE_RELEASE_ID"},"gitSha":"unknown","optionalProviders":["local","sentry-compatible","sentry","glitchtip","bugsink","otel","custom"],"packageName":"forgeos","packageVersion":"0.1.0-alpha.37","releaseId":"forgeos@0.1.0-alpha.37+unknown","schemaVersion":"0.1.0"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// @forge-generated generator=0.1.0-alpha.
|
|
1
|
+
// @forge-generated generator=0.1.0-alpha.37 input=055c7d65fca3d6d8b05af2899c233ff69d377edf0f46f719e2d164ee0574309a content=1e26c5249853569091c1b295aab06bd2b9546462328fe8126eda099222430b61
|
|
2
2
|
export const releaseManifest = {
|
|
3
3
|
"defaultProvider": "local",
|
|
4
4
|
"diagnostics": [],
|
|
@@ -19,7 +19,7 @@ export const releaseManifest = {
|
|
|
19
19
|
"custom"
|
|
20
20
|
],
|
|
21
21
|
"packageName": "forgeos",
|
|
22
|
-
"packageVersion": "0.1.0-alpha.
|
|
23
|
-
"releaseId": "forgeos@0.1.0-alpha.
|
|
22
|
+
"packageVersion": "0.1.0-alpha.37",
|
|
23
|
+
"releaseId": "forgeos@0.1.0-alpha.37+unknown",
|
|
24
24
|
"schemaVersion": "0.1.0"
|
|
25
25
|
} as const;
|
package/src/forge/cli/deps.ts
CHANGED
|
@@ -93,7 +93,9 @@ function findPackage(workspaceRoot: string, packageName: string): {
|
|
|
93
93
|
const lock = nodeFileSystem.exists(join(workspaceRoot, "forge.lock"))
|
|
94
94
|
? (JSON.parse((nodeFileSystem.readText(join(workspaceRoot, "forge.lock")) ?? "")) as ForgeLock)
|
|
95
95
|
: null;
|
|
96
|
-
const pkg = graph?.packages.find((candidate) =>
|
|
96
|
+
const pkg = graph?.packages.find((candidate) =>
|
|
97
|
+
candidate.name === packageName || candidate.packageName === packageName
|
|
98
|
+
);
|
|
97
99
|
return { graph, pkg, lock };
|
|
98
100
|
}
|
|
99
101
|
|
|
@@ -271,6 +271,7 @@ export class PackageGraphCompiler {
|
|
|
271
271
|
|
|
272
272
|
const partialApi = {
|
|
273
273
|
name: dep.name,
|
|
274
|
+
...(packageJson.name && packageJson.name !== dep.name ? { packageName: packageJson.name } : {}),
|
|
274
275
|
version: dep.version,
|
|
275
276
|
packageManager: dep.packageManager,
|
|
276
277
|
resolutionMode: opts.resolutionMode,
|
|
@@ -454,10 +455,11 @@ function portableDtsPath(dtsPath: string, dep: Pick<Dependency, "installPath" |
|
|
|
454
455
|
}
|
|
455
456
|
|
|
456
457
|
function readPackageJson(installPath: string): {
|
|
458
|
+
name?: string;
|
|
457
459
|
exports?: unknown;
|
|
458
460
|
} {
|
|
459
461
|
const raw = readTextFile(join(installPath, "package.json"));
|
|
460
|
-
return JSON.parse(raw) as { exports?: unknown };
|
|
462
|
+
return JSON.parse(raw) as { name?: string; exports?: unknown };
|
|
461
463
|
}
|
|
462
464
|
|
|
463
465
|
function resolveSandboxBackend(
|
|
@@ -119,6 +119,10 @@ interface PackageResolution {
|
|
|
119
119
|
current: PackageApi;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
+
function matchesPackageName(candidate: PackageApi, packageName: string): boolean {
|
|
123
|
+
return candidate.name === packageName || candidate.packageName === packageName;
|
|
124
|
+
}
|
|
125
|
+
|
|
122
126
|
function parseNpmAliasSpec(spec: string): NpmAliasSpec | null {
|
|
123
127
|
if (!spec.startsWith("npm:")) {
|
|
124
128
|
return null;
|
|
@@ -162,6 +166,12 @@ function dependencyType(workspaceRoot: string, packageName: string): DependencyT
|
|
|
162
166
|
if (packageName in (pkg.devDependencies ?? {})) {
|
|
163
167
|
return "devDependency";
|
|
164
168
|
}
|
|
169
|
+
for (const entry of dependencyEntries(pkg)) {
|
|
170
|
+
const alias = parseNpmAliasSpec(entry.spec);
|
|
171
|
+
if (alias?.packageName === packageName) {
|
|
172
|
+
return entry.type;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
165
175
|
return "dependency";
|
|
166
176
|
}
|
|
167
177
|
|
|
@@ -180,7 +190,8 @@ function resolvePackageForUpgrade(workspaceRoot: string, requestedName: string):
|
|
|
180
190
|
if (aliasEntry) {
|
|
181
191
|
const alias = parseNpmAliasSpec(aliasEntry.spec);
|
|
182
192
|
const packageName = alias?.packageName ?? aliasEntry.name;
|
|
183
|
-
const current = graph.packages.find((candidate) => candidate
|
|
193
|
+
const current = graph.packages.find((candidate) => matchesPackageName(candidate, packageName)) ??
|
|
194
|
+
graph.packages.find((candidate) => candidate.name === aliasEntry.name);
|
|
184
195
|
if (current) {
|
|
185
196
|
return {
|
|
186
197
|
requestedName,
|
|
@@ -194,18 +205,23 @@ function resolvePackageForUpgrade(workspaceRoot: string, requestedName: string):
|
|
|
194
205
|
}
|
|
195
206
|
}
|
|
196
207
|
|
|
197
|
-
const current = graph.packages.find((candidate) => candidate
|
|
208
|
+
const current = graph.packages.find((candidate) => matchesPackageName(candidate, requestedName));
|
|
198
209
|
if (!current) {
|
|
199
210
|
return null;
|
|
200
211
|
}
|
|
201
|
-
const directEntry = entries.find((entry) =>
|
|
212
|
+
const directEntry = entries.find((entry) => {
|
|
213
|
+
const alias = parseNpmAliasSpec(entry.spec);
|
|
214
|
+
return entry.name === requestedName || alias?.packageName === requestedName;
|
|
215
|
+
});
|
|
216
|
+
const alias = directEntry ? parseNpmAliasSpec(directEntry.spec) : null;
|
|
217
|
+
const packageName = alias?.packageName ?? current.packageName ?? requestedName;
|
|
202
218
|
return {
|
|
203
219
|
requestedName,
|
|
204
|
-
packageName
|
|
205
|
-
dependencyName: requestedName,
|
|
220
|
+
packageName,
|
|
221
|
+
dependencyName: directEntry?.name ?? requestedName,
|
|
206
222
|
dependencySpec: directEntry?.spec,
|
|
207
223
|
dependencyType: directEntry?.type ?? dependencyType(workspaceRoot, requestedName),
|
|
208
|
-
isNpmAlias:
|
|
224
|
+
isNpmAlias: Boolean(alias),
|
|
209
225
|
current,
|
|
210
226
|
};
|
|
211
227
|
}
|
|
@@ -632,18 +648,19 @@ export function listOutdatedFromFixture(options: {
|
|
|
632
648
|
|
|
633
649
|
return graph.packages
|
|
634
650
|
.flatMap((pkg) => {
|
|
635
|
-
const
|
|
651
|
+
const packageName = pkg.packageName ?? pkg.name;
|
|
652
|
+
const metadata = fixtureMetadata(registryDir, packageName);
|
|
636
653
|
const latest = metadata?.["dist-tags"]?.latest;
|
|
637
654
|
if (!latest || latest === pkg.version) {
|
|
638
655
|
return [];
|
|
639
656
|
}
|
|
640
|
-
const recipe = resolveByPackageName(
|
|
657
|
+
const recipe = resolveByPackageName(packageName);
|
|
641
658
|
return [{
|
|
642
|
-
name:
|
|
659
|
+
name: packageName,
|
|
643
660
|
current: pkg.version,
|
|
644
661
|
wanted: latest,
|
|
645
662
|
latest,
|
|
646
|
-
type: dependencyType(options.workspaceRoot,
|
|
663
|
+
type: dependencyType(options.workspaceRoot, packageName),
|
|
647
664
|
managedByRecipe: Boolean(recipe),
|
|
648
665
|
...(recipe?.alias ? { recipe: recipe.alias } : {}),
|
|
649
666
|
}];
|
|
@@ -92,7 +92,13 @@ export interface Entrypoint {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
export interface PackageApi {
|
|
95
|
+
/**
|
|
96
|
+
* Import/dependency name used by the app, which may be an npm alias such as
|
|
97
|
+
* "forge" for "npm:forgeos@...".
|
|
98
|
+
*/
|
|
95
99
|
name: string;
|
|
100
|
+
/** Real package.json name when it differs from the dependency/import name. */
|
|
101
|
+
packageName?: string;
|
|
96
102
|
version: string;
|
|
97
103
|
packageManager: PackageManager;
|
|
98
104
|
resolutionMode: ResolutionMode;
|
package/src/forge/version.ts
CHANGED