<!---
Thanks so much for your contribution! If this is your first time
contributing, please ensure that you have read the
[CONTRIBUTING](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md)
documentation.
-->
# Description
<!--- Please include a summary of the change and which issue is fixed.
Please also include relevant motivation and context. -->
This is a pass over all of /sdk to replace asserts that just checked we
had an error with asserts for what the error value is.
Just checking for an error is a weak test that can result in error paths
being broken and tests not detecting it.
**Each commit is separately reviewable.**
---
Adds the pulumix subpackage implementing strongly-typed
inputs, outputs, and combinators.
internal/cmd/gen-pux-applyn generates all four variants of `Apply` for
up to 8 parameters.
See individual commits for more details on each change.
Resolves#13586
**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#13585