Commit Graph

1 Commits

Author SHA1 Message Date
Abhinav Gupta 1912563e24
sdk/go: Move Output implementation to internal
**Note to reviewers**:
GitHub's PR view will show a lot more for this change
than the actual code added/removed.
Consider opening a `git diff` of this with,

    git diff -C --diff-algorithm=minimal

This will correctly detect the bulk of the diff as
"copy a file and delete a bunch of stuff from it."

---

In preparation for implementing generic variants of Input and Output
in a pulumix subpackage, move some of the requisite types to internal/
so that we don't have a cyclic dependency between pulumi and pulumix.

This change is largely mechanical with adjustmenets made for
compilation.
For places in pulumi/ where internal state of an output was accessed,
new top-level functions were added to internal/
that expose this information.

Changes were noting explicitly:

- `OutputState` was changed to record dependencies as `[]internal.Resource`
  instead of `[]Resource` because moving `Resource` into internal
  will end up moving most of pulumi/ into internal.
  We cast to/from internal.Resource as needed.
- `internal.AnyOutputType` is a `reflect.Type` filled by sdk/go/pulumi
  at `init()` time.
  This is an annoying hack, but we can't move AnyOutput into internal.
- `internal.FullyResolvedTypes` is similarly filled by sdk/go/pulumi
  at `init()` time.

To add confidence to this change being safe,
I used [apidiff] to compare the API of the go/pulumi package
befor and after this change.
The command reported no changes.

  [apidiff]: https://pkg.go.dev/golang.org/x/exp@v0.0.0-20230713183714-613f0c0eb8a1/cmd/apidiff

On top of that, I also ran `go doc -all .` with the before/after
and ran a text diff on the result. The following changes were reported:

- `Input` is now an alias to `internal.Input`
- `Output` is now an alias to `internal.Output`
- `OutputState` is now an alias to `internal.OutputState`
- `OutputState.ApplyT`, `OutputState.ApplyTWithContext` were deleted
  (except they're present on the alias so they're still available)
- `Resource` now embeds `internal.Resource`

Resolves 
2023-07-25 18:13:35 -07:00