Skip to content

feat(codegen): render the module entrypoint - #24

Draft
TomChv wants to merge 1 commit into
feat/packager-introspectorfrom
feat/codegen-entrypoint-mode
Draft

feat(codegen): render the module entrypoint#24
TomChv wants to merge 1 commit into
feat/packager-introspectorfrom
feat/codegen-entrypoint-mode

Conversation

@TomChv

@TomChv TomChv commented Aug 11, 2026

Copy link
Copy Markdown
Member

Wire the entrypoint renderer, ported with the client codegen but never
reachable, to a subcommand. Unlike the binding generators it never sees the
schema: it works from the typedef JSON the SDK introspector emits by scanning
the user's own source, which is what carries the per-declaration locations the
dispatcher imports classes from.

The golden is the introspector's real output, not hand-written JSON — captured
by scanning a module that exercises what dispatch has to handle: a constructor
with a defaulted argument, exposed fields (including an object one, which
round-trips through an ID), an optional argument, an async method and a void
return. Upstream has no test for this renderer at all, here or in
dagger/dagger, so this is the first thing pinning it.

Producing that fixture surfaced two constraints on how the compiler reaches the
scanner, both now recorded in the design: it must be the full package, since a
trimmed one loses lib/lib.*.d.ts and with it every global type (any module
returning Promise fails, confusingly, as "could not resolve type reference
for string"); and it must sit next to introspector.js, since bare imports
resolve from the importing file rather than the working directory.

Signed-off-by: Tom Chauveau tom@dagger.io


Stack created with GitHub Stacks CLIGive Feedback 💬

Wire the entrypoint renderer, ported with the client codegen but never
reachable, to a subcommand. Unlike the binding generators it never sees the
schema: it works from the typedef JSON the SDK introspector emits by scanning
the user's own source, which is what carries the per-declaration locations the
dispatcher imports classes from.

The golden is the introspector's real output, not hand-written JSON — captured
by scanning a module that exercises what dispatch has to handle: a constructor
with a defaulted argument, exposed fields (including an object one, which
round-trips through an ID), an optional argument, an async method and a void
return. Upstream has no test for this renderer at all, here or in
dagger/dagger, so this is the first thing pinning it.

Producing that fixture surfaced two constraints on how the compiler reaches the
scanner, both now recorded in the design: it must be the full package, since a
trimmed one loses lib/lib.*.d.ts and with it every global type (any module
returning Promise<T> fails, confusingly, as "could not resolve type reference
for string"); and it must sit next to introspector.js, since bare imports
resolve from the importing file rather than the working directory.

Signed-off-by: Tom Chauveau <tom@dagger.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant