diff --git a/dagger.json b/dagger.json index 57db1dc..28c9169 100644 --- a/dagger.json +++ b/dagger.json @@ -8,7 +8,7 @@ { "name": "polyfill", "source": "github.com/dagger/polyfill@main", - "pin": "e90bbfc4843258a877a3a95b8db1571e7981e65f" + "pin": "16627066d1852106320bdc0cfa0e5f901efe5970" } ], "source": "." diff --git a/mod.dang b/mod.dang index fb06415..7b1f1b7 100644 --- a/mod.dang +++ b/mod.dang @@ -74,7 +74,10 @@ type Mod { if (skipGenerate(ws)) { polyfill.workspace(ws).fork.changes } else { - polyfill.workspace(ws).moduleSource("/" + rootPath).generate.changes + # Stage the local dependency closure so this module's codegen sees + # up-to-date dependency bindings before generating it. + let stagedWs = ws.withChanges(polyfill.workspace(ws).moduleSource("/" + rootPath).core.generateLocalDependencies(ws)) + polyfill.workspace(stagedWs).moduleSource("/" + rootPath).generate.changes } } } diff --git a/typescript-sdk.dang b/typescript-sdk.dang index eecbddb..2f9523f 100644 --- a/typescript-sdk.dang +++ b/typescript-sdk.dang @@ -356,7 +356,12 @@ type TypescriptSdk { modules(ws) .filter { mod => mod.skipGenerate(ws) == false } .reduce(pws.fork) { fork, mod => - fork.merge(pws.moduleSource("/" + mod.rootPath).generate) + # Stage this module's local dependency closure first (leaf-first, possibly + # across SDKs) so its codegen sees up-to-date dependency bindings. The dep + # codegen is ephemeral: it appears in both the fork's before and after, so + # it cancels in the merge, leaving only each module's own changes. + let stagedWs = ws.withChanges(pws.moduleSource("/" + mod.rootPath).core.generateLocalDependencies(ws)) + fork.merge(polyfill.workspace(stagedWs).moduleSource("/" + mod.rootPath).generate) } .changes }