diff --git a/website/Makefile b/website/Makefile
deleted file mode 100644
index 0d35466ad..000000000
--- a/website/Makefile
+++ /dev/null
@@ -1,60 +0,0 @@
-######################################################
-# NOTE: This file is managed by the Digital Team's #
-# Terraform configuration @ hashicorp/mktg-terraform #
-######################################################
-
-.DEFAULT_GOAL := website
-
-# Set the preview mode for the website shell to "developer" or "io"
-PREVIEW_MODE ?= developer
-REPO ?= terraform-plugin-testing
-
-# Enable setting alternate docker tool, e.g. 'make DOCKER_CMD=podman'
-DOCKER_CMD ?= docker
-
-CURRENT_GIT_BRANCH=$$(git rev-parse --abbrev-ref HEAD)
-LOCAL_CONTENT_DIR=../docs
-PWD=$$(pwd)
-
-DOCKER_IMAGE="hashicorp/dev-portal"
-DOCKER_IMAGE_LOCAL="dev-portal-local"
-DOCKER_RUN_FLAGS=-it \
- --publish "3000:3000" \
- --rm \
- --tty \
- --volume "$(PWD)/docs:/app/docs" \
- --volume "$(PWD)/img:/app/public/img" \
- --volume "$(PWD)/data:/app/data" \
- --volume "$(PWD)/redirects.js:/app/redirects.js" \
- --volume "next-dir:/app/website-preview/.next" \
- --volume "$(PWD)/.env:/app/.env" \
- --volume "$(PWD)/.env.development:/app/website-preview/.env.development" \
- --volume "$(PWD)/.env.local:/app/website-preview/.env.local" \
- -e "REPO=$(REPO)" \
- -e "PREVIEW_FROM_REPO=$(REPO)" \
- -e "IS_CONTENT_PREVIEW=true" \
- -e "LOCAL_CONTENT_DIR=$(LOCAL_CONTENT_DIR)" \
- -e "CURRENT_GIT_BRANCH=$(CURRENT_GIT_BRANCH)" \
- -e "PREVIEW_MODE=$(PREVIEW_MODE)"
-
-# Default: run this if working on the website locally to run in watch mode.
-.PHONY: website
-website:
- @echo "==> Downloading latest Docker image..."
- @$(DOCKER_CMD) pull $(DOCKER_IMAGE)
- @echo "==> Starting website..."
- @$(DOCKER_CMD) run $(DOCKER_RUN_FLAGS) $(DOCKER_IMAGE)
-
-# Use this if you have run `website/build-local` to use the locally built image.
-.PHONY: website/local
-website/local:
- @echo "==> Starting website from local image..."
- @$(DOCKER_CMD) run $(DOCKER_RUN_FLAGS) $(DOCKER_IMAGE_LOCAL)
-
-# Run this to generate a new local Docker image.
-.PHONY: website/build-local
-website/build-local:
- @echo "==> Building local Docker image"
- @$(DOCKER_CMD) build https://github.com/hashicorp/dev-portal.git\#main \
- -t $(DOCKER_IMAGE_LOCAL)
-
\ No newline at end of file
diff --git a/website/README.md b/website/README.md
deleted file mode 100644
index 4b67a363f..000000000
--- a/website/README.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# Terraform Documentation
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-This directory contains the portions of [the Terraform website][terraform.io] that pertain to the Terraform Plugin Testing.
-
-The files in this directory are intended to be used in conjunction with
-[the `terraform-website` repository](https://github.com/hashicorp/terraform-website), which brings all of the
-different documentation sources together and contains the scripts for testing and building the site as
-a whole.
-
-## Updating Sidebar Navigation
-
-You must update the sidebar navigation for the `terraform-plugin-testing` documentation any time that you add or delete a documentation page. The website builds the sidebar navigation menu from the [nav-data] JSON file. For more details about how to update this file, refer to https://github.com/hashicorp/terraform-website#editing-navigation-sidebars.
-
-## Adding Redirects
-
-You must add a redirect when you move, rename, or delete documentation pages. Refer to https://github.com/hashicorp/terraform-website#redirects for details.
-
-## Previewing Changes
-
-You should preview your changes locally to ensure that the content is rendering properly before you create a pull request. The build includes content from this repository and the [`terraform-website`](https://github.com/hashicorp/terraform-website/) repository, allowing you to preview the entire Terraform documentation site.
-
-To preview your content, complete the following steps:
-
-**Set Up Local Environment**
-
-1. [Install Docker](https://docs.docker.com/get-docker/).
-1. Restart your terminal or command line session.
-
-**Launch Site Locally**
-
-1. Navigate into your local `terraform-plugin-testing` top-level directory and run `make website`.
-1. Open `http://localhost:3000` in your web browser. While the preview is running, you can edit pages and Next.js will automatically rebuild them.
-1. When you're done with the preview, press `ctrl-C` in your terminal to stop the server.
-
-### Validating Content
-
-Content changes are automatically validated against a set of rules as part of the pull request process. If you want to run these checks locally to validate your content before committing your changes, you can run the following command:
-
-```
-npm run content-check
-```
-
-If the validation fails, actionable error messages will be displayed to help you address detected issues.
-
-## Deployment
-
-The website reads content from release tags to generate documentation for all versions of `terraform-plugin-testing` documentation. Changes merged into `main` will be included in the documentation for the next product release.
-
-You cannot edit documentation for past versions of `terraform-plugin-testing` on the site. Documentation is an artifact of a product release. We push docs fixes forward for the next release, rather than retroactively fixing older versions.
-
-[nav-data]: ../website/data/plugin-testing-nav-data.json
-[terraform.io]: https://www.terraform.io/
diff --git a/website/data/plugin-testing-nav-data.json b/website/data/plugin-testing-nav-data.json
deleted file mode 100644
index 5eee96627..000000000
--- a/website/data/plugin-testing-nav-data.json
+++ /dev/null
@@ -1,178 +0,0 @@
-[
- {
- "heading": "Testing"
- },
- {
- "title": "Overview",
- "path": ""
- },
- {
- "title": "Migrating from SDK",
- "path": "migrating"
- },
- {
- "title": "Acceptance Testing",
- "routes": [
- {
- "title": "Overview",
- "path": "acceptance-tests"
- },
- {
- "title": "Test Cases",
- "path": "acceptance-tests/testcase"
- },
- {
- "title": "Test Steps",
- "path": "acceptance-tests/teststep"
- },
- {
- "title": "Terraform Version Checks",
- "path": "acceptance-tests/tfversion-checks"
- },
- {
- "title": "Plan Checks",
- "routes": [
- {
- "title": "Overview",
- "path": "acceptance-tests/plan-checks"
- },
- {
- "title": "Resource Plan Checks",
- "path": "acceptance-tests/plan-checks/resource"
- },
- {
- "title": "Output Plan Checks",
- "path": "acceptance-tests/plan-checks/output"
- },
- {
- "title": "Custom Plan Checks",
- "path": "acceptance-tests/plan-checks/custom"
- }
- ]
- },
- {
- "title": "State Checks",
- "routes": [
- {
- "title": "Overview",
- "path": "acceptance-tests/state-checks"
- },
- {
- "title": "Resource State Checks",
- "path": "acceptance-tests/state-checks/resource"
- },
- {
- "title": "Output State Checks",
- "path": "acceptance-tests/state-checks/output"
- },
- {
- "title": "Custom State Checks",
- "path": "acceptance-tests/state-checks/custom"
- }
- ]
- },
- {
- "title": "Known Value Checks",
- "routes": [
- {
- "title": "Overview",
- "path": "acceptance-tests/known-value-checks"
- },
- {
- "title": "Bool",
- "path": "acceptance-tests/known-value-checks/bool"
- },
- {
- "title": "Custom",
- "path": "acceptance-tests/known-value-checks/custom"
- },
- {
- "title": "Float32",
- "path": "acceptance-tests/known-value-checks/float32"
- },
- {
- "title": "Float64",
- "path": "acceptance-tests/known-value-checks/float64"
- },
- {
- "title": "Int32",
- "path": "acceptance-tests/known-value-checks/int32"
- },
- {
- "title": "Int64",
- "path": "acceptance-tests/known-value-checks/int64"
- },
- {
- "title": "List",
- "path": "acceptance-tests/known-value-checks/list"
- },
- {
- "title": "Map",
- "path": "acceptance-tests/known-value-checks/map"
- },
- {
- "title": "NotNull",
- "path": "acceptance-tests/known-value-checks/not-null"
- },
- {
- "title": "Null",
- "path": "acceptance-tests/known-value-checks/null"
- },
- {
- "title": "Number",
- "path": "acceptance-tests/known-value-checks/number"
- },
- {
- "title": "Object",
- "path": "acceptance-tests/known-value-checks/object"
- },
- {
- "title": "Set",
- "path": "acceptance-tests/known-value-checks/set"
- },
- {
- "title": "String",
- "path": "acceptance-tests/known-value-checks/string"
- },
- {
- "title": "Tuple",
- "path": "acceptance-tests/known-value-checks/tuple"
- }
- ]
- },
- {
- "title": "Value Comparers",
- "routes": [
- {
- "title": "Overview",
- "path": "acceptance-tests/value-comparers"
- }
- ]
- },
- {
- "title": "Sweepers",
- "path": "acceptance-tests/sweepers"
- },
- {
- "title": "Terraform JSON Paths",
- "path": "acceptance-tests/tfjson-paths"
- },
- {
- "title": "Terraform Configuration",
- "path": "acceptance-tests/configuration"
- },
- {
- "title": "Ephemeral Resources",
- "path": "acceptance-tests/ephemeral-resources"
- }
- ]
- },
- {
- "title": "Testing Patterns",
- "path": "testing-patterns"
- },
- {
- "title": "Unit Testing",
- "path": "unit-testing"
- }
-]
diff --git a/website/docs/plugin/testing/acceptance-tests/configuration.mdx b/website/docs/plugin/testing/acceptance-tests/configuration.mdx
deleted file mode 100644
index c0e821908..000000000
--- a/website/docs/plugin/testing/acceptance-tests/configuration.mdx
+++ /dev/null
@@ -1,280 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Terraform Configuration'
-description: >-
- Terraform Configuration specifies the configuration to be used during an acceptance test at the TestStep level. Terraform variables define the values to be used
- in conjunction with Terraform configuration.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Terraform Configuration
-
-The configuration used during the execution of an acceptance test can be specified at the [TestStep](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestStep) level by populating one of the following mutually exclusive fields:
-
-* [TestStep.Config](#teststep-config)
-* [TestStep.ConfigDirectory](#teststep-configdirectory)
-* [TestStep.ConfigFile](#teststep-configfile)
-
-Terraform configuration can be used in conjunction with Terraform variables defined via [TestStep.ConfigVariables](/terraform/plugin/testing/acceptance-tests/configuration#teststep-configvariables).
-
-## TestStep Config
-
-The `TestStep.Config` field accepts a string containing valid Terraform configuration.
-
-In the following example, the `Config` field specifies a resource which is used in combination with `ExternalProviders` to specify the version and source for the provider:
-
-```go
-func TestAccResourcePassword_UpgradeFromVersion3_2_0(t *testing.T) {
- resource.Test(t, resource.TestCase{
- Steps: []resource.TestStep{
- {
- ExternalProviders: map[string]resource.ExternalProvider{
- "random": {
- VersionConstraint: "3.2.0",
- Source: "hashicorp/random",
- },
- },
- Config: `resource "random_password" "min" {
- length = 12
- override_special = "!#@"
- min_lower = 2
- min_upper = 3
- min_special = 1
- min_numeric = 4
- }`,
-
-```
-
-## TestStep ConfigDirectory
-
-The `TestStep.ConfigDirectory` field accepts a [TestStepConfigFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestStepConfigFunc) which is a function that accepts a [TestStepConfigRequest](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestStepConfigRequest) and returns a string containing a path to a directory containing Terraform configuration files. The path can be a relative or absolute path.
-
-There are helper methods available for generating a [TestStepConfigFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestStepConfigFunc) including:
-
-* [StaticDirectory(directory string)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#StaticDirectory)
-* [TestNameDirectory()](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestNameDirectory)
-* [TestStepDirectory()](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestStepDirectory)
-
-~> **Note**: `TestStep.ExternalProviders` cannot be specified when using ConfigDirectory. It is expected that [required_providers](/terraform/language/providers/requirements#requiring-providers) are defined within the configuration files.
-
-Custom functions can be written and used in the `TestStep.ConfigDirectory` field as long as the function is a [TestStepConfigFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestStepConfigFunc) type.
-
-### StaticDirectory
-
-The [StaticDirectory(directory string)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#StaticDirectory) function accepts a string specifying a path to a directory containing Terraform configuration.
-
-For example:
-
-```go
-func Test_ConfigDirectory_StaticDirectory(t *testing.T) {
- t.Parallel()
-
- Test(t, TestCase{
- Steps: []TestStep{
- {
- ConfigDirectory: config.StaticDirectory(`testdata/directory_containing_config`),
- /* ... */
- },
- },
- })
-}
-```
-
-In this instance, the testing configuration is expected to be in the `testdata/directory_containing_config` directory relative to the file containing the `Test_ConfigDirectory_StaticDirectory` test.
-
-### TestNameDirectory
-
-The [TestNameDirectory()](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestNameDirectory) function will use the name of the executing test to specify a path to a directory containing Terraform configuration.
-
-For example:
-
-```go
-func Test_ConfigDirectory_TestNameDirectory(t *testing.T) {
- t.Parallel()
-
- Test(t, TestCase{
- Steps: []TestStep{
- {
- ConfigDirectory: config.TestNameDirectory(),
- /* ... */
- },
- },
- })
-}
-```
-
-In this instance, the testing configuration is expected to be in the `testdata/Test_ConfigDirectory_TestNameDirectory` directory relative to the file containing the `Test_ConfigDirectory_TestNameDirectory` test.
-
-### TestStepDirectory
-
-The [TestStepDirectory()](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestStepDirectory) function will use the name of the executing test and the current test step number to specify a path to a directory containing Terraform configuration.
-
-For example:
-
-```go
-func Test_ConfigDirectory_TestStepDirectory(t *testing.T) {
- t.Parallel()
-
- Test(t, TestCase{
- Steps: []TestStep{
- {
- ConfigDirectory: config.TestStepDirectory(),
- /* ... */
- },
- },
- })
-}
-```
-
-In this instance, because this is the first test step in the test, the testing configuration is expected to be in the `testdata/Test_ConfigDirectory_TestStepDirectory/1` directory relative to the file containing the `Test_ConfigDirectory_TestStepDirectory` test.
-
-## TestStep ConfigFile
-
-The `TestStep.ConfigFile` field accepts a [TestStepConfigFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestStepConfigFunc) which is a function that accepts a [TestStepConfigRequest](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestStepConfigRequest) and returns a string containing a path to a file containing Terraform configuration. The path can be a relative or absolute path.
-
-There are helper methods available for generating a [TestStepConfigFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestStepConfigFunc) including:
-
-* [StaticFile(file string)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#StaticFile)
-* [TestNameFile(file string)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestNameFile)
-* [TestStepFile(file string)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestStepFile)
-
-~> **Note**: `TestStep.ExternalProviders` cannot be specified when using `ConfigFile`. It is expected that [required_providers](/terraform/language/providers/requirements#requiring-providers) are defined within the configuration file.
-
-Custom functions can be written and used in the `TestStep.ConfigFile` field as long as the function is a [TestStepConfigFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestStepConfigFunc) type.
-
-### StaticFile
-
-The [StaticFile(file string)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#Staticfile) function accepts a string specifying a path to a file containing Terraform configuration.
-
-For example:
-
-```go
-func Test_ConfigFile_StaticFile(t *testing.T) {
- t.Parallel()
-
- Test(t, TestCase{
- Steps: []TestStep{
- {
- ConfigFile: config.StaticFile(`testdata/directory_containing_config/main.tf`),
- /* ... */
- },
- },
- })
-}
-```
-
-In this instance, the testing configuration is expected to be in the `testdata/directory_containing_config/main.tf` file relative to the file containing the `Test_ConfigFile_StaticFile` test.
-
-### TestNameFile
-
-The [TestNameFile(file string)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestNameFile) function will use the name of the executing test to specify a path to a file containing Terraform configuration.
-
-For example:
-
-```go
-func Test_ConfigFile_TestNameFile(t *testing.T) {
- t.Parallel()
-
- Test(t, TestCase{
- Steps: []TestStep{
- {
- ConfigFile: config.TestNameFile("main.tf"),
- /* ... */
- },
- },
- })
-}
-```
-
-In this instance, the testing configuration is expected to be in the `testdata/Test_ConfigFile_TestNameFile` directory relative to the file containing the `Test_ConfigFile_TestNameFile` test.
-
-### TestStepFile
-
-The [TestStepFile(file string)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TestStepFile) function will use the name of the executing test and the current test step number to specify a path to a file containing Terraform configuration.
-
-For example:
-
-```go
-func Test_ConfigFile_TestStepFile(t *testing.T) {
- t.Parallel()
-
- Test(t, TestCase{
- Steps: []TestStep{
- {
- ConfigFile: config.TestStepFile("main.tf"),
- /* ... */
- },
- },
- })
-}
-```
-
-In this instance, because this is the first test step in the test, the testing configuration is expected to be in the `testdata/Test_ConfigFile_TestStepFile/1/main.tf` file relative to the file containing the `Test_ConfigDirectory_TestNameDirectory` test.
-
-## TestStep ConfigVariables
-
-[Terraform input variables](https://developer.hashicorp.com/terraform/language/values/variables) allow customization of a Terraform configuration without altering the configuration itself.
-
-The `TestStep.ConfigVariables` field accepts a [Variables](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#Variables) type which is a key-value map of string to [Variable](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#Variable).
-
-The following functions return types implementing [Variable](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#Variable) that correlate with the [Terraform type constraints](https://developer.hashicorp.com/terraform/language/values/variables#type-constraints):
-
-* [BoolVariable(value bool)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#BoolVariable)
-* [FloatVariable[T constraints.Float](value T)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#FloatVariable)
-* [IntegerVariable[T constraints.Integer](value T)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#IntegerVariable)
-* [func ListVariable(value ...Variable)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#ListVariable)
-* [MapVariable(value map[string]Variable)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#MapVariable)
-* [ObjectVariable(value map[string]Variable)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#ObjectVariable)
-* [SetVariable(value ...Variable)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#SetVariable)
-* [StringVariable(value string)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#StringVariable)
-* [TupleVariable(value ...Variable)](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/config#TupleVariable)
-
-The following example shows the usage of `TestStep.ConfigVariables` in conjunction with `TestStep.ConfigFile`:
-
-```go
-func Test_ConfigFile_TestNameFile(t *testing.T) {
- t.Parallel()
-
- Test(t, TestCase{
- Steps: []TestStep{
- {
- ConfigFile: config.TestNameFile("random.tf"),
- ConfigVariables: config.Variables{
- "length": config.IntegerVariable(8),
- "numeric": config.BoolVariable(false),
- },
- /* ... */
- },
- },
- })
-}
-```
-
-The configuration would be expected to be in the `testdata/Test_ConfigFile_TestNameFile/random.tf` file, for example:
-
-```terraform
-terraform {
- required_providers {
- random = {
- source = "registry.terraform.io/hashicorp/random"
- version = "3.5.1"
- }
- }
-}
-
-provider "random" {}
-
-resource "random_password" "test" {
- length = var.length
- numeric = var.numeric
-}
-
-variable "length" {
- type = number
-}
-
-variable "numeric" {
- type = bool
-}
-```
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/ephemeral-resources.mdx b/website/docs/plugin/testing/acceptance-tests/ephemeral-resources.mdx
deleted file mode 100644
index db5d04bd4..000000000
--- a/website/docs/plugin/testing/acceptance-tests/ephemeral-resources.mdx
+++ /dev/null
@@ -1,274 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Ephemeral Resources'
-description: >-
- Guidance on how to test ephemeral resources and data.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-
-
-Ephemeral resource support is in technical preview and offered without compatibility promises until Terraform 1.10 is generally available.
-
-
-
-# Ephemeral Resources
-
-[Ephemeral Resources](/terraform/language/v1.10.x/resources/ephemeral) are an abstraction that allows Terraform to reference external data, similar to [data sources](/terraform/language/data-sources), without persisting that data to plan or state artifacts. The `terraform-plugin-testing` module exclusively uses Terraform plan and state artifacts for it's assertion-based test checks, like [plan checks](/terraform/plugin/testing/acceptance-tests/plan-checks) or [state checks](/terraform/plugin/testing/acceptance-tests/state-checks), which means that ephemeral resource data cannot be asserted using these methods alone.
-
-The following is a test for a hypothetical `examplecloud_secret` ephemeral resource which is referenced by a provider configuration that has a single managed resource. For this test to pass, the ephemeral `examplecloud_secret` resource must return valid data, specifically a kerberos `username`, `password`, and `realm`, which are used to configure the `dns` provider and create a DNS record via the `dns_a_record_set` managed resource.
-
-```go
-func TestExampleCloudSecret_DnsKerberos(t *testing.T) {
- resource.UnitTest(t, resource.TestCase{
- // Ephemeral resources are only available in 1.10 and later
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.SkipBelow(tfversion.Version1_10_0),
- },
- ExternalProviders: map[string]resource.ExternalProvider{
- "dns": {
- Source: "hashicorp/dns",
- },
- },
- ProtoV5ProviderFactories: map[string]func() (tfprotov5.ProviderServer, error){
- "examplecloud": providerserver.NewProtocol5WithError(New()),
- },
- Steps: []resource.TestStep{
- {
- Config: `
- # Retrieves a secret containing user kerberos configuration
- ephemeral "examplecloud_secret" "krb" {
- name = "example_kerberos_user"
- }
-
- # Ephemeral data can be referenced in provider configuration
- provider "dns" {
- update {
- server = "ns.example.com"
- gssapi {
- realm = ephemeral.examplecloud_secret.krb.secret_data.realm
- username = ephemeral.examplecloud_secret.krb.secret_data.username
- password = ephemeral.examplecloud_secret.krb.secret_data.password
- }
- }
- }
-
- # If we can create this DNS record successfully, then the ephemeral resource returned valid data.
- resource "dns_a_record_set" "record_set" {
- zone = "example.com."
- addresses = [
- "192.168.0.1",
- "192.168.0.2",
- "192.168.0.3",
- ]
- }
- `,
- },
- },
- })
-}
-```
-
-See the Terraform [ephemeral documentation](http://localhost:3000/terraform/language/v1.10.x/resources/ephemeral#referencing-ephemeral-resources) for more details on where ephemeral data can be referenced in configurations.
-
-## Testing ephemeral data with `echo` provider
-
-Test assertions on [result data](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-framework/ephemeral#OpenResponse.Result) returned by an ephemeral resource during [`Open`](/terraform/plugin/framework/ephemeral-resources/open) can be arranged using the `echoprovider` package.
-
-This package contains a [Protocol V6 Terraform Provider](/terraform/plugin/terraform-plugin-protocol#protocol-version-6) named `echo`, with a single managed resource also named `echo`. Using the `echo` provider configuration and an instance of the managed resource, ephemeral data can be "echoed" from the provider configuration into Terraform state, where it can be referenced in test assertions with [state checks](/terraform/plugin/testing/acceptance-tests/state-checks). For example:
-
-```terraform
-ephemeral "examplecloud_secret" "krb" {
- name = "example_kerberos_user"
-}
-
-provider "echo" {
- # Provide the ephemeral data we want to run test assertions against
- data = ephemeral.examplecloud_secret.krb.secret_data
-}
-
-# The ephemeral data will be echoed into state
-resource "echo" "test_krb" {}
-```
-
-
-
-This provider is designed specifically to be used as a utility for acceptance testing ephemeral data and is only available via the `terraform-plugin-testing` Go module.
-
-
-
-### Using `echo` provider in acceptance tests
-
-First, we include the `echo` provider using the [`echoprovider.NewProviderServer`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/echoprovider#NewProviderServer) function in the `(TestCase).ProtoV6ProviderFactories` property:
-
-```go
-import (
- // .. other imports
-
- "github.com/hashicorp/terraform-plugin-testing/echoprovider"
-)
-
-func TestExampleCloudSecret(t *testing.T) {
- resource.UnitTest(t, resource.TestCase{
- // Ephemeral resources are only available in 1.10 and later
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.SkipBelow(tfversion.Version1_10_0),
- },
- // Include the provider we want to test: `examplecloud`
- ProtoV5ProviderFactories: map[string]func() (tfprotov5.ProviderServer, error){
- "examplecloud": providerserver.NewProtocol5WithError(New()),
- },
- // Include `echo` as a v6 provider from `terraform-plugin-testing`
- ProtoV6ProviderFactories: map[string]func() (tfprotov6.ProviderServer, error){
- "echo": echoprovider.NewProviderServer(),
- },
- Steps: []resource.TestStep{
- // .. test step configurations can now use the `echo` and `examplecloud` providers
- },
- })
-}
-```
-
-After including both providers, our test step `Config` references the ephemeral data from `examplecloud_secret` in the `echo` provider configuration `data` attribute:
-
-```go
-func TestExampleCloudSecret(t *testing.T) {
- resource.UnitTest(t, resource.TestCase{
- // .. test case setup
-
- Steps: []resource.TestStep{
- {
- Config: `
- ephemeral "examplecloud_secret" "krb" {
- name = "example_kerberos_user"
- }
-
- provider "echo" {
- data = ephemeral.examplecloud_secret.krb.secret_data
- }
-
- resource "echo" "test_krb" {}
- `,
- },
- },
- })
-}
-```
-
-The `echo.test_krb` managed resource has a single computed `data` attribute, which will contain the provider configuration `data` results. This data is then used in assertions with the [state check](/terraform/plugin/testing/acceptance-tests/state-checks) functionality:
-
-```go
-func TestExampleCloudSecret(t *testing.T) {
- resource.UnitTest(t, resource.TestCase{
- // .. test case setup
-
- Steps: []resource.TestStep{
- {
- Config: `
- ephemeral "examplecloud_secret" "krb" {
- name = "example_kerberos_user"
- }
-
- provider "echo" {
- data = ephemeral.examplecloud_secret.krb.secret_data
- }
-
- resource "echo" "test_krb" {}
- `,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue("echo.test_krb", tfjsonpath.New("data").AtMapKey("realm"), knownvalue.StringExact("EXAMPLE.COM")),
- statecheck.ExpectKnownValue("echo.test_krb", tfjsonpath.New("data").AtMapKey("username"), knownvalue.StringExact("john-doe")),
- statecheck.ExpectKnownValue("echo.test_krb", tfjsonpath.New("data").AtMapKey("password"), knownvalue.StringRegexp(regexp.MustCompile(`^.{12}$`))),
- },
- },
- },
- })
-}
-```
-
-`data` is a `dynamic` attribute, so whatever [type](/terraform/language/expressions/types) you pass in will be directly reflected in the managed resource `data` attribute. In the config above, we reference an object (`secret_data`) from the ephemeral resource instance, so the resulting type of `echo.test_krb.data` is also an `object`.
-
-You can also reference the entire ephemeral resource instance for assertions, rather than specific attributes:
-
-```go
-func TestExampleCloudSecret(t *testing.T) {
- resource.UnitTest(t, resource.TestCase{
- // .. test case setup
-
- Steps: []resource.TestStep{
- {
- Config: `
- ephemeral "examplecloud_secret" "krb" {
- name = "example_kerberos_user"
- }
-
- provider "echo" {
- data = ephemeral.examplecloud_secret.krb
- }
-
- resource "echo" "test_krb" {}
- `,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue("echo.test_krb", tfjsonpath.New("data").AtMapKey("name"), knownvalue.StringExact("example_kerberos_user")),
- },
- },
- },
- })
-}
-```
-
-### Caveats with `echo` provider
-
-Since data produced by an ephemeral resource is allowed to change between plan/apply operations, the `echo` resource has special handling to allow this data to be used in the `terraform-plugin-testing` Go module without producing confusing error messages:
-
-* During plan, if the `echo` resource is being created, the `data` attribute will always be marked as unknown.
-* During plan, if the `echo` resource already exists and is not being destroyed, prior state will always be fully preserved regardless of changes to the provider configuration. This essentially means an instance of the `echo` resource is immutable.
-* During refresh, the prior state of the `echo` resource is always returned, regardless of changes to the provider configuration.
-
-Due to this special handling, if multiple test steps are required for testing data, provider developers should create new instances of `echo` for each new test step, for example:
-
-```go
-func TestExampleCloudSecret(t *testing.T) {
- resource.UnitTest(t, resource.TestCase{
- // .. test case setup
-
- Steps: []resource.TestStep{
- {
- Config: `
- ephemeral "examplecloud_secret" "krb" {
- name = "user_one"
- }
-
- provider "echo" {
- data = ephemeral.examplecloud_secret.krb
- }
-
- # First test object -> 1
- resource "echo" "test_krb_one" {}
- `,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue("echo.test_krb_one", tfjsonpath.New("data").AtMapKey("name"), knownvalue.StringExact("user_one")),
- },
- },
- {
- Config: `
- ephemeral "examplecloud_secret" "krb" {
- name = "user_two"
- }
-
- provider "echo" {
- data = ephemeral.examplecloud_secret.krb
- }
-
- # New test object -> 2
- resource "echo" "test_krb_two" {}
- `,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue("echo.test_krb_two", tfjsonpath.New("data").AtMapKey("name"), knownvalue.StringExact("user_two")),
- },
- },
- },
- })
-}
-```
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/index.mdx b/website/docs/plugin/testing/acceptance-tests/index.mdx
deleted file mode 100644
index ebc038120..000000000
--- a/website/docs/plugin/testing/acceptance-tests/index.mdx
+++ /dev/null
@@ -1,310 +0,0 @@
----
-page_title: Plugin Development - Acceptance Testing
-description: |-
- Terraform includes a framework for constructing acceptance tests that
- imitate applying one or more configuration files.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Acceptance Tests
-
-In order to deliver on our promise to be safe and predictable, we need to be
-able to easily and routinely verify that Terraform Plugins produce the expected
-outcome. The most common usage of an acceptance test is in Terraform Providers,
-where each Resource is tested with configuration files and the resulting
-infrastructure is verified. Terraform includes a framework for constructing
-acceptance tests that imitate the execution of one or more steps of applying one
-or more configuration files, allowing multiple scenarios to be tested.
-
-Terraform acceptance tests use real Terraform configurations to exercise the
-code in real plan, apply, refresh, and destroy life cycles. When run from the
-root of a Terraform Provider codebase, Terraform's testing framework compiles
-the current provider in-memory and executes the provided configuration in
-developer defined steps, creating infrastructure along the way. At the
-conclusion of all the steps, Terraform automatically destroys the
-infrastructure. It's important to note that during development, it's possible
-for Terraform to leave orphaned or “dangling” resources behind, depending on the
-correctness of the code in development. The testing framework provides means to
-validate all resources are destroyed, alerting developers if any fail to
-destroy. It is the developer's responsibility to clean up any dangling resources
-left over from testing and development.
-
-## How Acceptance Tests Work
-
-Provider acceptance tests use a Terraform CLI binary to run real Terraform commands. The goal is to approximate using the provider with Terraform in production as closely as possible.
-
-Terraform Core and Terraform Plugins act as gRPC client and server, implemented using HashiCorp's [go-plugin](https://github.com/hashicorp/go-plugin) system (refer to the [RPC Plugin Model](https://github.com/hashicorp/terraform/tree/main/docs/plugin-protocol) section of the Terraform documentation). When `go test` is run, the acceptance test framework starts a plugin server in the same process as the Go test framework. This plugin server runs for the duration of the test case, and each Terraform command (`terraform plan`, `terraform apply`, etc) creates a client that reattaches to this server.
-
-Real-world Terraform usage requires a config file and Terraform working directory on the local filesystem. The module uses the [`internal/plugintest` package](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/internal/plugintest) to manage temporary directories and files during test runs. Provider developers should not use this library directly.
-
-While the test framework provides a reasonable simulation of real-world usage, there are some differences, the major one being in the lifecycle of the plugin gRPC server. During normal Terraform operation, the plugin server starts and stops once per graph walk, of which there may be several during one Terraform command. The acceptance test framework, however, maintains one plugin gRPC server for the duration of each test case. In theory, it is possible for providers to carry internal state between operations during tests - but providers would have to go out of their way (and the SDK's public API) to do this.
-
-## Test files
-
-Terraform follows many of the Go programming language conventions with regards
-to testing, with both acceptance tests and unit tests being placed in a file
-that matches the file under test, with an added `_test.go` suffix. Here's an
-example file structure:
-
-```
-terraform-plugin-example/
-├── provider.go
-├── provider_test.go
-├── example/
-│ ├── resource_example_compute.go
-│ ├── resource_example_compute_test.go
-```
-
-To create an acceptance test in the example `resource_example_compute_test.go`
-file, the function name must begin with `TestAccXxx`, and have the following
-signature:
-
-```
-func TestAccXxx(*testing.T)
-```
-
-## Requirements and Recommendations
-
-Acceptance tests have the following requirements:
-
-- **[Go](https://go.dev/)**: The most recent stable version.
-- **Terraform CLI**: Version 0.12.26 or later.
-- **Provider Access**: Network or system access to the provider and any resources being tested.
-- **Provider Credentials**: Authorized credentials to the provider and any resources being tested.
-- **TF_ACC Environment Variable**: Set to any value. Prevents developers from incurring unintended charges when running other Go tests.
-
-We also recommend the following when running acceptance tests:
-
-- **Separate Account**: Use a separate provider account or namespace for acceptance testing. This prevents Terraform from unexpectedly modifying or destroying infrastructure due to code or testing issues.
-- **Previous Terraform CLI Installation**: Install Terraform CLI either into the operating system `PATH` or use the `TF_ACC_TERRAFORM_PATH` environment variable prior to running acceptance tests. Otherwise, the testing framework will download and install the latest Terraform CLI version into a temporary directory for every test invocation. Refer to the [Terraform CLI Installation Behaviors](#terraform-cli-installation-behaviors) section for details.
-
-Each provider may have additional requirements and setup recommendations. Refer to the provider's codebase for more details.
-
-### Terraform CLI Installation Behaviors
-
-The testing framework implements the following Terraform CLI discovery and installation behaviors:
-
-- If the `TF_ACC_TERRAFORM_PATH` environment variable is set, the framework will use that Terraform CLI binary if it exists and is executable. If the framework cannot find the binary or it is not executable, the framework returns an error unless the `TF_ACC_TERRAFORM_VERSION` environment variable is also set.
-- If the `TF_ACC_TERRAFORM_VERSION` environment variable is set, the framework will install and use that Terraform CLI version.
-- If both the `TF_ACC_TERRAFORM_PATH` and `TF_ACC_TERRAFORM_VERSION` environment variables are unset, the framework will search for the Terraform CLI binary based on the operating system `PATH`. If the framework cannot find the specified binary, it installs the latest available Terraform CLI binary.
-
-Refer to the [Environment Variables](#environment-variables) section for more details about behaviors and valid configurations.
-
-## Running Acceptance Tests
-
-Ensure that the [acceptance testing requirements](#requirements-and-recommendations) are met and then use the [`go test`](https://pkg.go.dev/cmd/go/internal/test) command to run acceptance tests. You can run the acceptance tests on any environment capable of running `go test`, such as a local workstation [command line](#command-line-workflow), or continuous integration runner, such as [GitHub Actions](#github-actions-workflow).
-
-~> **Note**: Acceptance tests typically create and destroy actual infrastructure resources, possibly incurring expenses during or after the test duration.
-
-### Command Line Workflow
-
-Run acceptance testing with the command line of any workstation. Use these instructions as the basis for other environments such as continuous integration runners.
-
-The following example will execute all available acceptance tests in a provider codebase:
-
-```shell
-TF_ACC=1 go test -v ./...
-```
-
-Some provider codebases also implement a [Makefile](https://www.gnu.org/software/make/manual/make.html#Makefiles) with a `testacc` target, which will set `TF_ACC` and other testing flags automatically.
-
-The following is an example Makefile configuration:
-
-```make
-testacc:
- TF_ACC=1 go test -v ./...
-```
-
-The Makefile configuration lets developers to use the following command to run acceptance tests:
-
-```shell
-make testacc
-```
-
-### GitHub Actions Workflow
-
-If using [GitHub](https://github.com/), run acceptance testing via [GitHub Actions](https://github.com/features/actions). Other continuous integration runners, while not exhaustively documented, are also supported.
-
-Ensure the [GitHub Organization settings for GitHub Actions](https://docs.github.com/en/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization) and [GitHub Repository settings for GitHub Actions](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository) allows running workflows and allows the `actions/checkout`, `actions/setup-go`, and `hashicorp/setup-terraform` actions.
-
-Create a [GitHub Actions workflow](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions) file, such as `.github/workflows/test.yaml`, that does the following:
-
-- Runs when pull requests are submitted or on [other events](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows) as appropriate.
-- Uses [`actions/checkout`](https://github.com/actions/checkout) to checkout the provider codebase.
-- Uses [`actions/setup-go`](https://github.com/actions/setup-go) to install Go.
-- Uses [`hashicorp/setup-terraform`](https://github.com/hashicorp/setup-terraform) to install Terraform CLI.
-- Runs the `go test` command with the appropriate environment variables and flags.
-
-Use the [`matrix`](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrix) strategy for more advanced configuration, such as running acceptance testing against multiple Terraform CLI versions.
-
-The following example workflow runs acceptance testing for the provider using the latest patch versions of the Go version in the `go.mod` file and Terraform CLI 1.5:
-
-```yaml
-name: Terraform Provider Tests
-
-on:
- pull_request:
- paths:
- - '.github/workflows/test.yaml'
- - '**.go'
-
-permissions:
- # Permission for checking out code
- contents: read
-
-jobs:
- acceptance:
- name: Acceptance Tests
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-go@v4
- with:
- go-version-file: 'go.mod'
- - uses: hashicorp/setup-terraform@v2
- with:
- terraform_version: '1.5.*'
- terraform_wrapper: false
- - run: go test -v -cover ./...
- env:
- TF_ACC: '1'
- unit:
- name: Unit Tests
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-go@v4
- with:
- go-version-file: 'go.mod'
- - run: go test -v -cover ./...
-```
-
-
-The following example workflow runs acceptance testing for the provider using the latest patch versions of Go version in the `go.mod` file and Terraform CLI 0.12 through 1.5:
-
-```yaml
-name: Terraform Provider Tests
-
-on:
- pull_request:
- paths:
- - '.github/workflows/test.yaml'
- - '**.go'
-
-permissions:
- # Permission for checking out code
- contents: read
-
-jobs:
- acceptance:
- name: Acceptance Tests (Terraform ${{ matrix.terraform-version }})
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- matrix:
- terraform-version:
- - '0.12.*'
- - '0.13.*'
- - '0.14.*'
- - '0.15.*'
- - '1.0.*'
- - '1.1.*'
- - '1.2.*'
- - '1.3.*'
- - '1.4.*'
- - '1.5.*'
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-go@v4
- with:
- go-version-file: 'go.mod'
- - uses: hashicorp/setup-terraform@v2
- with:
- terraform_version: ${{ matrix.terraform-version }}
- terraform_wrapper: false
- - run: go test -v -cover ./...
- env:
- TF_ACC: '1'
- unit:
- name: Unit Tests
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-go@v4
- with:
- go-version-file: 'go.mod'
- - run: go test -v -cover ./...
-```
-
-## Environment Variables
-
-A number of environment variables are available to control aspects of acceptance test execution.
-
-| Environment Variable Name | Default | Description |
-|------------------------------|-------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `TF_ACC` | N/A | Set to any value to enable acceptance testing via the [`helper/resource.ParallelTest()`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#ParallelTest) and [`helper/resource.Test()`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#Test) functions. |
-| `TF_ACC_PROVIDER_HOST`: | `registry.terraform.io` | Set the hostname of the provider under test, such as `example.com` in the `example.com/myorg/myprovider` provider source address. This is only required if any [`TestStep.Config`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestStep.Config) specifies a provider source address, such as in the [`terraform` configuration block `required_providers` attribute](/terraform/language/settings#specifying-provider-requirements). |
-| `TF_ACC_PROVIDER_NAMESPACE` | `hashicorp` | Set the namespace of the provider under test, such as `myorg` in the `registry.terraform.io/myorg/myprovider` provider source address. This is only required if any [`TestStep.Config`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestStep.Config) specifies a provider source address, such as in the [`terraform` configuration block `required_providers` attribute](/terraform/language/settings#specifying-provider-requirements). |
-| `TF_ACC_STATE_LINEAGE` | N/A | Set to `1` to enable state lineage debug logs, which are normally suppressed during acceptance testing. |
-| `TF_ACC_TEMP_DIR` | Operating system specific via [`os.TempDir()`](https://pkg.go.dev/os#TempDir) | Set a temporary directory used for testing files and installing Terraform CLI, if installation is required. |
-| `TF_ACC_TERRAFORM_PATH` | N/A | Set the path to a Terraform CLI binary on the local filesystem to be used during testing. It must be executable. If not found and `TF_ACC_TERRAFORM_VERSION` is not set, an error is returned. |
-| `TF_ACC_TERRAFORM_VERSION` | N/A | Set the exact version of Terraform CLI to automatically install into `TF_ACC_TEMP_DIR`. For example, `1.1.6` or `v1.0.11`. |
-| `TF_ACC_PERSIST_WORKING_DIR` | N/A | Set to any value to enable persisting the working directory and the files generated during execution of each `TestStep`. The location of each directory is written to the test output for each `TestStep` when the `go test -v` (verbose) flag is provided. |
-
-### Logging Environment Variables
-
-A number of environment variables available to control logging aspects during acceptance test execution. Some of these modify or replace the production behaviors defined in [managing provider log output](/terraform/plugin/log/managing) and [debugging Terraform](/terraform/internals/debugging).
-
-#### Logging Levels
-
-| Environment Variable Name | Default | Description |
-|---------------------------|--------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `TF_ACC_LOG` | N/A | Set the `TF_LOG` environment variable used by Terraform CLI while testing. If set, overrides `TF_LOG_CORE`. Use `TF_LOG_CORE` and `TF_LOG_PROVIDER` to configure separate levels for Terraform CLI logging. |
-| `TF_LOG` | N/A | Set the log level for the Go standard library `log` package. If set to any level, sets the `TRACE` log level for any SDK and provider logs written by [`terraform-plugin-log`](/terraform/plugin/log/writing). Use the `TF_LOG_SDK*` and `TF_LOG_PROVIDER_*` environment variables described in [managing log output](/terraform/plugin/log/managing) to decrease or disable SDK and provider logs written by [`terraform-plugin-log`](/terraform/plugin/log/writing). Use `TF_ACC_LOG`, `TF_LOG_CORE`, or `TF_LOG_PROVIDER` environment variables to set the logging levels used by Terraform CLI while testing. |
-| `TF_LOG_CORE` | `TF_ACC_LOG` | Set the `TF_LOG_CORE` environment variable used by Terraform CLI logging of graph operations and other core functionality while testing. If `TF_ACC_LOG` is set, this setting has no effect. Use `TF_LOG_PROVIDER` to configure a separate level for Terraform CLI logging of external providers while testing (e.g. defined by the `TestCase` or `TestStep` type `ExternalProviders` field). |
-| `TF_LOG_PROVIDER` | `TF_ACC_LOG` | Set the `TF_LOG_PROVIDER` environment variable used by Terraform CLI logging of external providers while testing (e.g. defined by the `TestCase` or `TestStep` type `ExternalProviders` field). If set, overrides `TF_ACC_LOG`. Use `TF_LOG_CORE` to configure a separate level for Terraform CLI logging of graph operations and other core functionality while testing. |
-
-#### Logging Output
-
-By default, there is no logging output when running the `go test` command. Use one of the below environment variables to output logs to the local filesystem or use the `go test` command `-v` (verbose) flag to view logging without writing file(s).
-
-| Environment Variable Name | Default | Description |
-|---------------------------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `TF_ACC_LOG_PATH` | N/A | Set a file path for all logs during testing. Use `TF_LOG_PATH_MASK` to configure individual log files per test. |
-| `TF_LOG_PATH_MASK` | N/A | Set a file path containing the string `%s`, which is replaced with the test name, to write a separate log file per test. Use `TF_ACC_LOG_PATH` to configure a single log file for all tests. |
-
-The logs associated with each test can output across incorrect files as each new test starts if the provider is using the Go standard library [`log` package](https://pkg.go.dev/log) for logging, acceptance testing that uses [`helper/resource.ParallelTest()`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#ParallelTest), and `TF_LOG_PATH_MASK`. To resolve this issue, choose one of the following approaches:
-
-* Use [`terraform-plugin-log`](/terraform/plugin/log/writing) based logging. Each logger will be correctly associated with each test name output.
-* Wrap testing execution so that each test is individually executed with `go test`. Since each `go test` process will have its own `log` package output handling, logging will be correctly associated with each test name output.
-* Replace [`helper/resource.ParallelTest()`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#ParallelTest) with [`helper/resource.Test()`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#Test) and ensure [`(*testing.T).Parallel()`](https://pkg.go.dev/testing#T.Parallel) is not called in tests. This serializes all testing so each test will be associated with each test name output.
-
-## Troubleshooting
-
-This section lists common errors encountered during testing.
-
-### Unrecognized remote plugin message
-
-```
-terraform failed: exit status 1
-
- stderr:
-
- Error: Failed to instantiate provider "random" to obtain schema: Unrecognized remote plugin message: --- FAIL: TestAccResourceID (4.28s)
-
- This usually means that the plugin is either invalid or simply
- needs to be recompiled to support the latest protocol.
-```
-
-This error indicates that the provider server could not connect to Terraform Core. Verify that the output of `terraform version` is v0.12.26 or above.
-
-## Next Steps
-
-Terraform relies heavily on acceptance tests to ensure we keep our promise of
-helping users safely and predictably create, change, and improve
-infrastructure. In our next section we detail how to create “Test Cases”,
-individual acceptance tests using Terraform's testing framework, in order to
-build and verify real infrastructure. [Proceed to Test
-Cases](/terraform/plugin/testing/acceptance-tests/testcase)
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/bool.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/bool.mdx
deleted file mode 100644
index d5e91e113..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/bool.mdx
+++ /dev/null
@@ -1,80 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- Bool Value Checks for use with Plan and State Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Bool Known Value Checks
-
-The known value checks that are available for bool values are:
-
-* [Bool](/terraform/plugin/testing/acceptance-tests/known-value-checks/bool#bool-check)
-* [BoolFunc](/terraform/plugin/testing/acceptance-tests/known-value-checks/bool#boolfunc-check)
-
-## `Bool` Check
-
-The [Bool](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Bool) check tests that a resource attribute, or output value has an exactly matching bool value.
-
-Example usage of [Bool](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Bool) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_Bool(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed boolean attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.Bool(true),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `BoolFunc` Check
-
-The [BoolFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#BoolFunc) check allows defining a custom function to validate whether the bool value of a resource attribute or output satisfies specific conditions.
-
-Example usage of [BoolFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#BoolFunc) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/state-checks/resource) state check.
-
-```go
-func TestExpectKnownValue_CheckState_BoolFunc(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a boolean attribute named "configurable_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("configurable_attribute"),
- knownvalue.BoolFunc(func(v bool) error {
- if !v {
- return fmt.Errorf("expected true, got %t", v)
- }
- return nil
- }),
- ),
- },
- },
- },
- })
-}
-```
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/custom.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/custom.mdx
deleted file mode 100644
index b0423ccd2..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/custom.mdx
+++ /dev/null
@@ -1,79 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- Custom Value Checks for use with Plan Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Custom Known Value Checks
-
-Custom known value checks can be created by implementing the [knownvalue.Check](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Check) interface.
-
-```go
-type Check interface {
- CheckValue(value any) error
- String() string
-}
-```
-
-For example, a `StringContains` implementation could look as follows:
-
-```go
-var _ knownvalue.Check = stringContains{}
-
-type stringContains struct {
- value string
-}
-
-func (v stringContains) CheckValue(other any) error {
- otherVal, ok := other.(string)
-
- if !ok {
- return fmt.Errorf("expected string value for StringContains check, got: %T", other)
- }
-
- if !strings.Contains(otherVal, v.value) {
- return fmt.Errorf("expected string %q to contain %q for StringContains check", otherVal, v.value)
- }
-
- return nil
-}
-
-func (v stringContains) String() string {
- return v.value
-}
-
-func StringContains(value string) stringContains {
- return stringContains{
- value: value,
- }
-}
-```
-
-## `CheckValue` Method Implementation
-
-The `other` parameter passed to the `CheckValue` method is one of the following types:
-
-* bool
-* map[string]any
-* []any
-* string
-
--> **Note:** Numerical values will be of type `json.Number`, with an underlying type of `string`.
-
-Refer to the following built-in known value checks for implementations that handle the different types that can be passed to the `CheckValue` method in the `other` parameter:
-
-* [Bool](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Bool)
-* [Float32Exact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Float32Exact)
-* [Float64Exact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Float64Exact)
-* [Int32Exact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Int32Exact)
-* [Int64Exact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Int64Exact)
-* [ListExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#ListExact)
-* [MapExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#MapExact)
-* [NumberExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#NumberExact)
-* [ObjectExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#ObjectExact)
-* [SetExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#SetExact)
-* [StringExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#StringExact)
-* [TupleExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#TupleExact)
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/float32.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/float32.mdx
deleted file mode 100644
index 31b58fda3..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/float32.mdx
+++ /dev/null
@@ -1,80 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- Float32 Value Checks for use with Plan and State Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Float32 Known Value Checks
-
-The known value checks that are available for float32 values are:
-
-* [Float32Exact](/terraform/plugin/testing/acceptance-tests/known-value-checks/float32#float32exact-check)
-* [Float32Func](/terraform/plugin/testing/acceptance-tests/known-value-checks/float32#float32func-check)
-
-## `Float32Exact` Check
-
-The [Float32Exact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Float32Exact) check tests that a resource attribute, or output value has an exactly matching float32 value.
-
-Example usage of [Float32Exact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Float32Exact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_Float32(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed float32 attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.Float32Exact(1.23),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `Float32Func` Check
-
-The [Float32Func](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Float32Func) check allows defining a custom function to validate whether the float32 value of a resource attribute or output satisfies specific conditions.
-
-Example usage of [Float32Func](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Float32Func) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/state-checks/resource) state check.
-
-```go
-func TestExpectKnownValue_CheckState_Float32Func(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a float32 attribute named "configurable_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("configurable_attribute"),
- knownvalue.Float32Func(func(v float32) error {
- if v > 1.0 && v < 5.0 {
- return fmt.Errorf("value must be between 1.0 and 5.0")
- }
- return nil
- }),
- ),
- },
- },
- },
- })
-}
-```
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/float64.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/float64.mdx
deleted file mode 100644
index 378eccc27..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/float64.mdx
+++ /dev/null
@@ -1,80 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- Float64 Value Checks for use with Plan Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Float64 Known Value Checks
-
-The known value checks that are available for float64 values are:
-
-* [Float64Exact](/terraform/plugin/testing/acceptance-tests/known-value-checks/float64#float64exact-check)
-* [Float64Func](/terraform/plugin/testing/acceptance-tests/known-value-checks/float64#float64func-check)
-
-## `Float64Exact` Check
-
-The [Float64Exact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Float64Exact) check tests that a resource attribute, or output value has an exactly matching float64 value.
-
-Example usage of [Float64Exact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Float64Exact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_Float64(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed float64 attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.Float64Exact(1.23),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `Float64Func` Check
-
-The [Float64Func](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Float64Func) check allows defining a custom function to validate whether the float64 value of a resource attribute or output satisfies specific conditions.
-
-Example usage of [Float64Func](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Float64Func) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/state-checks/resource) state check.
-
-```go
-func TestExpectKnownValue_CheckState_Float64Func(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a float64 attribute named "configurable_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("configurable_attribute"),
- knownvalue.Float64Func(func(v float64) error {
- if v > 1.0 && v < 5.0 {
- return fmt.Errorf("value must be between 1.0 and 5.0")
- }
- return nil
- }),
- ),
- },
- },
- },
- })
-}
-```
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/index.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/index.mdx
deleted file mode 100644
index a150822c0..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/index.mdx
+++ /dev/null
@@ -1,59 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- How to use known values in the testing module.
- Known values define an expected type, and value for a resource attribute, or output value in a Terraform plan or state for use in Plan Checks or State Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Known Value Checks
-
-Known Value Checks are for use in conjunction with [Plan Checks](/terraform/plugin/testing/acceptance-tests/plan-checks), and [State Checks](/terraform/plugin/testing/acceptance-tests/state-checks) which leverage the [terraform-json](https://pkg.go.dev/github.com/hashicorp/terraform-json) representation of a Terraform plan.
-
-## Usage
-
-Example uses in the testing module include:
-
-- **Plan Checks**: The [`ExpectKnownValue()`](/terraform/plugin/testing/acceptance-tests/plan-checks/resource#expectknownvalue-plan-check), [`ExpectKnownOutputValue()`](/terraform/plugin/testing/acceptance-tests/plan-checks/output#expectknownoutputvalue-plan-check) and [`ExpectKnownOutputValueAtPath()`](/terraform/plugin/testing/acceptance-tests/plan-checks/output#expectknownoutputvalueatpath-plan-check) [built-in plan checks](/terraform/plugin/testing/acceptance-tests/plan-checks) use known value checks for asserting whether a specific resource attribute, or output value has a particular type, and value.
-- **State Checks**: The [`ExpectKnownValue()`](/terraform/plugin/testing/acceptance-tests/state-checks/resource#expectknownvalue-state-check), [`ExpectKnownOutputValue()`](/terraform/plugin/testing/acceptance-tests/state-checks/output#expectknownoutputvalue-state-check) and [`ExpectKnownOutputValueAtPath()`](/terraform/plugin/testing/acceptance-tests/state-checks/output#expectknownoutputvalueatpath-state-check) [built-in state checks](/terraform/plugin/testing/acceptance-tests/state-checks) use known value checks for asserting whether a specific resource attribute, or output value has a particular type, and value.
-
-## Using a Known Value Check
-
-The known value check types are implemented within the `terraform-plugin-testing` module in the [`knownvalue` package](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue). Known value checks are instantiated by calling the relevant constructor function.
-
-```go
-knownvalue.Bool(true)
-```
-
-For known value checks that represent collections, or objects, nesting of known value checks can be used to define a "composite" known value check for use in asserting against a resource attribute, or output value that contains other values.
-
-```go
-knownvalue.ListExact([]knownvalue.Check{
- knownvalue.StringExact("value1"),
- knownvalue.StringExact("value2"),
-})
-```
-
-## Known Value Check Types
-
-The following table shows the correspondence between [knownvalue.Check](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Check) types, and attributes.
-
-| Known Value Check Type | Framework Attribute Type | SDKv2 Attribute Type |
-|------------------------------------------------------------------------------------------------------|---------------------------|----------------------|
-| [Bool Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/bool) | `schema.BoolAttribute` | `schema.TypeBool` |
-| [Float32 Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/float32) | `schema.Float32Attribute` | `schema.TypeFloat` |
-| [Float64 Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/float64) | `schema.Float64Attribute` | `schema.TypeFloat` |
-| [Int32 Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/int32) | `schema.Int32Attribute` | `schema.TypeInt` |
-| [Int64 Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/int64) | `schema.Int64Attribute` | `schema.TypeInt` |
-| [List Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/list) | `schema.ListAttribute` | `schema.TypeList` |
-| [Map Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/map) | `schema.MapAttribute` | `schema.TypeMap` |
-| [NotNull Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/not-null) | All | All |
-| [Null Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/null) | All | All |
-| [Number Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/number) | `schema.NumberAttribute` | N/A |
-| [Object Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/object) | `schema.ObjectAttribute` | N/A |
-| [Set Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/set) | `schema.SetAttribute` | `schema.TypeSet` |
-| [String Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/string) | `schema.StringAttribute` | `schema.TypeString` |
-| [Tuple Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks/tuple) | `schema.DynamicAttribute` | N/A |
-
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/int32.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/int32.mdx
deleted file mode 100644
index fed9c31f3..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/int32.mdx
+++ /dev/null
@@ -1,80 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- Int32 Value Checks for use with Plan and State Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Int32 Known Value Checks
-
-The known value checks that are available for int32 values are:
-
-* [Int32Exact](/terraform/plugin/testing/acceptance-tests/known-value-checks/int32#int32exact-check)
-* [Int32Func](/terraform/plugin/testing/acceptance-tests/known-value-checks/int32#int32func-check)
-
-## `Int32Exact` Check
-
-The [Int32Exact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Int32Exact) check tests that a resource attribute, or output value has an exactly matching int32 value.
-
-Example usage of [Int32Exact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Int32Exact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_Int32(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed int32 attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.Int32Exact(123),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `Int32Func` Check
-
-The [Int32Func](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Int32Func) check allows defining a custom function to validate whether the int32 value of a resource attribute or output satisfies specific conditions.
-
-Example usage of [Int32Func](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Int32Func) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/state-checks/resource) state check.
-
-```go
-func TestExpectKnownValue_CheckState_Int32Func(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing an int32 attribute named "configurable_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("configurable_attribute"),
- knownvalue.Int32Func(func(v int32) error {
- if v > 1 && v < 12 {
- return fmt.Errorf("value must be between 1 and 12")
- }
- return nil
- }),
- ),
- },
- },
- },
- })
-}
-```
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/int64.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/int64.mdx
deleted file mode 100644
index 6f6516637..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/int64.mdx
+++ /dev/null
@@ -1,80 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- Int64 Value Checks for use with Plan and State Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Int64 Known Value Checks
-
-The known value checks that are available for int64 values are:
-
-* [Int64Exact](/terraform/plugin/testing/acceptance-tests/known-value-checks/int64#int64exact-check)
-* [Int64Func](/terraform/plugin/testing/acceptance-tests/known-value-checks/int64#int64func-check)
-
-## `Int64Exact` Check
-
-The [Int64Exact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Int64Exact) check tests that a resource attribute, or output value has an exactly matching int64 value.
-
-Example usage of [Int64Exact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Int64Exact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_Int64(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed int64 attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.Int64Exact(123),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `Int64Func` Check
-
-The [Int64Func](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Int64Func) check allows defining a custom function to validate whether the int64 value of a resource attribute or output satisfies specific conditions.
-
-Example usage of [Int64Func](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Int64Func) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/state-checks/resource) state check.
-
-```go
-func TestExpectKnownValue_CheckState_Int64Func(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing an int64 attribute named "configurable_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("configurable_attribute"),
- knownvalue.Int64Func(func(v int64) error {
- if v > 1 && v < 12 {
- return fmt.Errorf("value must be between 1 and 12")
- }
- return nil
- }),
- ),
- },
- },
- },
- })
-}
-```
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/list.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/list.mdx
deleted file mode 100644
index ce252c16d..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/list.mdx
+++ /dev/null
@@ -1,114 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- List Value Checks for use with Plan Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# List Known Value Checks
-
-The known value checks that are available for list values are:
-
-* [ListExact](/terraform/plugin/testing/acceptance-tests/known-value-checks/list#listexact-check)
-* [ListPartial](/terraform/plugin/testing/acceptance-tests/known-value-checks/list#listpartial-check)
-* [ListSizeExact](/terraform/plugin/testing/acceptance-tests/known-value-checks/list#listsizeexact-check)
-
-## `ListExact` Check
-
-The [ListExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#ListExact) check tests that a resource attribute, or output value has an order-dependent, matching collection of element values.
-
-Example usage of [ListExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#ListExact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_List(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed list attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.ListExact([]knownvalue.Check{
- knownvalue.StringExact("value1"),
- knownvalue.StringExact("value2"),
- }),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `ListPartial` Check
-
-The [ListPartial](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#ListPartial) check tests that a resource attribute, or output value has matching element values for the specified collection indices.
-
-Example usage of [ListPartial](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#ListPartial) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check. In this example, only the first element within the list, the element defined at index `0`, is checked.
-
-```go
-func TestExpectKnownValue_CheckPlan_ListPartial(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed list attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.ListPartial(map[int]knownvalue.Check{
- 0: knownvalue.StringExact("value1"),
- }),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `ListSizeExact` Check
-
-The [ListSizeExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#ListSizeExact) check tests that a resource attribute, or output value contains the specified number of elements.
-
-Example usage of [ListSizeExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#ListSizeExact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_ListElements(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed list attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.ListSizeExact(2),
- ),
- },
- },
- },
- },
- })
-}
-```
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/map.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/map.mdx
deleted file mode 100644
index 5a4820ab3..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/map.mdx
+++ /dev/null
@@ -1,116 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- Map Value Checks for use with Plan Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Map Known Value Checks
-
-The known value checks that are available for map values are:
-
-* [MapExact](/terraform/plugin/testing/acceptance-tests/known-value-checks/map#mapexact-check)
-* [MapPartial](/terraform/plugin/testing/acceptance-tests/known-value-checks/map#mappartial-check)
-* [MapSizeExact](/terraform/plugin/testing/acceptance-tests/known-value-checks/map#mapsizeexact-check)
-
-## `MapExact` Check
-
-The [MapExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#MapExact) check tests that a resource attribute, or output value has a key-specified, matching collection of element values.
-
-Example usage of [MapExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#MapExact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_Map(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed map attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.MapExact(map[string]knownvalue.Check{
- "key1": knownvalue.StringExact("value1"),
- "key2": knownvalue.StringExact("value2"),
- }),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `MapPartial` Check
-
-The [MapPartial](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#MapPartial) check tests that a resource attribute, or output value has matching element values for the specified keys.
-
-Example usage of [MapPartial](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#MapPartial) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-In this example, only the element associated with `key1` within the map is checked.
-
-```go
-func TestExpectKnownValue_CheckPlan_MapPartial(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed map attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.MapPartial(map[string]knownvalue.Check{
- "key1": knownvalue.StringExact("value1"),
- }),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `MapSizeExact` Check
-
-The [MapSizeExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#MapSizeExact) check tests that a resource attribute, or output value contains the specified number of elements.
-
-Example usage of [MapSizeExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#MapSizeExact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_MapElements(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed map attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.MapSizeExact(2),
- ),
- },
- },
- },
- },
- })
-}
-```
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/not-null.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/not-null.mdx
deleted file mode 100644
index 25c60cde0..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/not-null.mdx
+++ /dev/null
@@ -1,43 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- NotNull Value Checks for use with Plan Checks or State Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# NotNull Known Value Checks
-
-The known value checks that are available for values that are not null are:
-
-* [NotNull](/terraform/plugin/testing/acceptance-tests/known-value-checks/null#notnull-check)
-
-## `NotNull` Check
-
-The [NotNull](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#NotNull) check tests that a resource attribute, or output value is not null (i.e., any known value).
-
-Example usage of [NotNull](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#NotNull) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/state-checks/resource) state check.
-
-```go
-func TestExpectKnownValue_CheckState_AttributeValueNull(t *testing.T) {
- t.Parallel()
-
- r.Test(t, r.TestCase{
- // Provider definition omitted.
- Steps: []r.TestStep{
- {
- // Example resource containing a computed attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.NotNull(),
- ),
- },
- },
- },
- })
-}
-```
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/null.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/null.mdx
deleted file mode 100644
index 0504034aa..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/null.mdx
+++ /dev/null
@@ -1,43 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- Null Value Checks for use with Plan Checks or State Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Null Known Value Checks
-
-The known value checks that are available for null values are:
-
-* [Null](/terraform/plugin/testing/acceptance-tests/known-value-checks/null#null-check)
-
-## `Null` Check
-
-The [Null](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Null) check tests that a resource attribute, or output value has an exactly matching null value.
-
-Example usage of [Null](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Null) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/state-checks/resource) state check.
-
-```go
-func TestExpectKnownValue_CheckState_AttributeValueNull(t *testing.T) {
- t.Parallel()
-
- r.Test(t, r.TestCase{
- // Provider definition omitted.
- Steps: []r.TestStep{
- {
- // Example resource containing a computed attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.Null(),
- ),
- },
- },
- },
- })
-}
-```
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/number.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/number.mdx
deleted file mode 100644
index fee58d9cb..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/number.mdx
+++ /dev/null
@@ -1,84 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- Number Value Checks for use with Plan Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Number Known Value Checks
-
-The known value checks that are available for number values are:
-
-* [NumberExact](/terraform/plugin/testing/acceptance-tests/known-value-checks/number#numberexact-check)
-
-## `NumberExact` Check
-
-The [NumberExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#NumberExact) check tests that a resource attribute, or output value has an exactly matching number value.
-
-Example usage of [NumberExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#NumberExact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_Number(t *testing.T) {
- t.Parallel()
-
- num, _, err := big.ParseFloat("1.797693134862315797693134862315797693134862315", 10, 512, big.ToNearestEven)
-
- if err != nil {
- t.Errorf("%s", err)
- }
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed number attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.NumberExact(num),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `NumberFunc` Check
-
-The [NumberFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#NumberFunc) check allows defining a custom function to validate whether the number value of a resource attribute or output satisfies specific conditions.
-
-Example usage of [NumberFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#NumberFunc) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/state-checks/resource) state check.
-
-```go
-func TestExpectKnownValue_CheckState_NumberFunc(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a number attribute named "configurable_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("configurable_attribute"),
- knownvalue.NumberFunc(func(v *big.Float) error {
- if err := testConfigurableAttribute(v); err != nil {
- return fmt.Errorf("attribute validation failed: %w", err)
- }
- return nil
- }),
- ),
- },
- },
- },
- })
-}
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/object.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/object.mdx
deleted file mode 100644
index 11cc0934a..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/object.mdx
+++ /dev/null
@@ -1,84 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- Object Value Checks for use with Plan Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Object Known Value Checks
-
-The known value checks that are available for object values are:
-
-* [ObjectExact](/terraform/plugin/testing/acceptance-tests/known-value-checks/object#objectexact-check)
-* [ObjectPartial](/terraform/plugin/testing/acceptance-tests/known-value-checks/object#objectpartial-check)
-
-## `ObjectExact` Check
-
-The [ObjectExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#ObjectExact) check tests that a resource attribute, or output value has a matching collection of attribute name, and attribute values.
-
-Example usage of [ObjectExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#ObjectExact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_Object(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed object attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.ObjectExact(map[string]knownvalue.Check{
- "attr1": knownvalue.StringExact("value1"),
- "attr2": knownvalue.StringExact("value2"),
- }),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `ObjectPartial` Check
-
-The [ObjectPartial](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#ObjectPartial) check tests that a resource attribute, or output value has matching attribute values for the specified attribute names.
-
-Example usage of [ObjectPartial](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#ObjectPartial) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-In this example, only the attribute value associated with the attribute name `attr1` within the object is checked.
-
-```go
-func TestExpectKnownValue_CheckPlan_ObjectPartial(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed object attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.ObjectPartial(map[string]knownvalue.Check{
- "attr1": knownvalue.StringExact("value1"),
- }),
- ),
- },
- },
- },
- },
- })
-}
-```
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/set.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/set.mdx
deleted file mode 100644
index 55f1919d0..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/set.mdx
+++ /dev/null
@@ -1,114 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- Set Value Checks for use with Plan Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Set Known Value Checks
-
-The known value checks that are available for set values are:
-
-* [SetExact](/terraform/plugin/testing/acceptance-tests/known-value-checks/set#setexact-check)
-* [SetPartial](/terraform/plugin/testing/acceptance-tests/known-value-checks/set#setpartial-check)
-* [SetSizeExact](/terraform/plugin/testing/acceptance-tests/known-value-checks/set#setsizeexact-check)
-
-## `SetExact` Check
-
-The [SetExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#SetExact) check tests that a resource attribute, or output value has an order-independent, matching collection of element values.
-
-Example usage of [SetExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#SetExact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_Set(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed set attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.SetExact([]knownvalue.Check{
- knownvalue.StringExact("value2"),
- knownvalue.StringExact("value1"),
- }),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `SetPartial` Check
-
-The [SetPartial](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#SetPartial) check tests that a resource attribute, or output value contains matching element values.
-
-Example usage of [SetPartial](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#SetPartial) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check. In this example, only the one element within the set is checked.
-
-```go
-func TestExpectKnownValue_CheckPlan_SetPartial(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed set attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.SetPartial([]knownvalue.Check{
- knownvalue.StringExact("value2"),
- }),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `SetSizeExact` Check
-
-The [SetSizeExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#SetSizeExact) check tests that a resource attribute, or output value contains the specified number of elements.
-
-Example usage of [SetSizeExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#SetSizeExact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_SetElements(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed set attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.SetSizeExact(2),
- ),
- },
- },
- },
- },
- })
-}
-```
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/string.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/string.mdx
deleted file mode 100644
index 2f6e1039f..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/string.mdx
+++ /dev/null
@@ -1,110 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- String Value Checks for use with Plan Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# String Known Value Checks
-
-The known value checks that are available for string values are:
-
-* [StringExact](/terraform/plugin/testing/acceptance-tests/known-value-checks/string#stringexact-check)
-* [StringRegexp](/terraform/plugin/testing/acceptance-tests/known-value-checks/string#stringregexp-check)
-* [StringFunc](/terraform/plugin/testing/acceptance-tests/known-value-checks/string#stringfunc-check)
-
-## `StringExact` Check
-
-The [StringExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#StringExact) check tests that a resource attribute, or output value has an exactly matching string value.
-
-Example usage of [StringExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#StringExact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_StringExact(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed string attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.StringExact("str")),
- },
- },
- },
- },
- })
-}
-```
-
-## `StringRegexp` Check
-
-The [StringRegexp](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#StringRegexp) check tests that a resource attribute, or output value has a string value which matches the supplied regular expression.
-
-Example usage of [StringRegexp](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#StringRegexp) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_StringRegexp(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed string attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.StringRegexp(regexp.MustCompile("str"))),
- },
- },
- },
- },
- })
-}
-```
-
-## `StringFunc` Check
-
-The [StringFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#StringFunc) check allows defining a custom function to validate whether the string value of a resource attribute or output satisfies specific conditions.
-
-Example usage of [StringFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#StringFunc) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/state-checks/resource) state check.
-
-```go
-func TestExpectKnownValue_CheckState_StringFunc(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a string attribute named "configurable_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("configurable_attribute"),
- knownvalue.StringFunc(func(v string) error {
- if !strings.HasPrefix(v, "str") {
- return fmt.Errorf("value must start with 'str'")
- }
- return nil
- }),
- ),
- },
- },
- },
- })
-}
-```
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/known-value-checks/tuple.mdx b/website/docs/plugin/testing/acceptance-tests/known-value-checks/tuple.mdx
deleted file mode 100644
index b353bcc0f..000000000
--- a/website/docs/plugin/testing/acceptance-tests/known-value-checks/tuple.mdx
+++ /dev/null
@@ -1,126 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Known Values'
-description: >-
- Tuple Value Checks for use with Plan Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Tuple Known Value Checks
-
-
-
-Provider developers will only encounter tuples when testing [dynamic data values](/terraform/plugin/framework/handling-data/dynamic-data).
-
-
-
-The known value checks that are available for tuple values are:
-
-* [TupleExact](/terraform/plugin/testing/acceptance-tests/known-value-checks/tuple#tupleexact-check)
-* [TuplePartial](/terraform/plugin/testing/acceptance-tests/known-value-checks/tuple#tuplepartial-check)
-* [TupleSizeExact](/terraform/plugin/testing/acceptance-tests/known-value-checks/tuple#tuplesizeexact-check)
-
-## `TupleExact` Check
-
-The [TupleExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#TupleExact) check tests that a resource attribute, or output value has an order-dependent, matching collection of element values.
-
-Example usage of [TupleExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#TupleExact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_Tuple(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a required dynamic attribute named "example_attribute"
- Config: `resource "test_resource" "one" {
- example_attribute = [true, "hello world"]
- }`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("example_attribute"),
- knownvalue.TupleExact([]knownvalue.Check{
- knownvalue.Bool(true),
- knownvalue.StringExact("hello world"),
- }),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `TuplePartial` Check
-
-The [TuplePartial](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#TuplePartial) check tests that a resource attribute, or output value has matching element values for the specified collection indices.
-
-Example usage of [TuplePartial](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#TuplePartial) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check. In this example, only the second element within the tuple, the element defined at index `1`, is checked.
-
-```go
-func TestExpectKnownValue_CheckPlan_TuplePartial(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a required dynamic attribute named "example_attribute"
- Config: `resource "test_resource" "one" {
- example_attribute = [true, "hello world"]
- }`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("example_attribute"),
- knownvalue.TuplePartial(map[int]knownvalue.Check{
- 1: knownvalue.StringExact("hello world"),
- }),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `TupleSizeExact` Check
-
-The [TupleSizeExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#TupleSizeExact) check tests that a resource attribute, or output value contains the specified number of elements.
-
-Example usage of [TupleSizeExact](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#TupleSizeExact) in an [ExpectKnownValue](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) plan check.
-
-```go
-func TestExpectKnownValue_CheckPlan_TupleElements(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a required dynamic attribute named "example_attribute"
- Config: `resource "test_resource" "one" {
- example_attribute = [true, "hello world"]
- }`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("example_attribute"),
- knownvalue.TupleSizeExact(2),
- ),
- },
- },
- },
- },
- })
-}
-```
diff --git a/website/docs/plugin/testing/acceptance-tests/plan-checks/custom.mdx b/website/docs/plugin/testing/acceptance-tests/plan-checks/custom.mdx
deleted file mode 100644
index a4e6a889d..000000000
--- a/website/docs/plugin/testing/acceptance-tests/plan-checks/custom.mdx
+++ /dev/null
@@ -1,90 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Plan Checks'
-description: >-
- Plan Checks are test assertions that can inspect a plan at different phases in a TestStep. Custom Plan Checks can be implemented.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Custom Plan Checks
-
-The package [`plancheck`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck) also provides the [`PlanCheck`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#PlanCheck) interface, which can be implemented for a custom plan check.
-
-The [`plancheck.CheckPlanRequest`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#CheckPlanRequest) contains the current plan file, parsed by the [terraform-json package](https://pkg.go.dev/github.com/hashicorp/terraform-json#Plan).
-
-Here is an example implementation of a plan check that asserts that every resource change is a no-op, aka, an empty plan:
-```go
-package example_test
-
-import (
- "context"
- "fmt"
-
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
-)
-
-var _ plancheck.PlanCheck = expectEmptyPlan{}
-
-type expectEmptyPlan struct{}
-
-func (e expectEmptyPlan) CheckPlan(ctx context.Context, req plancheck.CheckPlanRequest, resp *plancheck.CheckPlanResponse) {
- var result error
-
- for _, rc := range req.Plan.ResourceChanges {
- if !rc.Change.Actions.NoOp() {
- result = errors.Join(result, fmt.Errorf("expected empty plan, but %s has planned action(s): %v", rc.Address, rc.Change.Actions))
- }
- }
-
- resp.Error = result
-}
-
-func ExpectEmptyPlan() plancheck.PlanCheck {
- return expectEmptyPlan{}
-}
-```
-
-And example usage:
-```go
-package example_test
-
-import (
- "context"
- "errors"
- "fmt"
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
-)
-
-func Test_CustomPlanCheck_ExpectEmptyPlan(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- ExternalProviders: map[string]resource.ExternalProvider{
- "random": {
- Source: "registry.terraform.io/hashicorp/random",
- },
- },
- Steps: []resource.TestStep{
- {
- Config: `resource "random_string" "one" {
- length = 16
- }`,
- },
- {
- Config: `resource "random_string" "one" {
- length = 16
- }`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- ExpectEmptyPlan(),
- },
- },
- },
- },
- })
-}
-```
diff --git a/website/docs/plugin/testing/acceptance-tests/plan-checks/index.mdx b/website/docs/plugin/testing/acceptance-tests/plan-checks/index.mdx
deleted file mode 100644
index cff623441..000000000
--- a/website/docs/plugin/testing/acceptance-tests/plan-checks/index.mdx
+++ /dev/null
@@ -1,131 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Plan Checks'
-description: >-
- Plan Checks are test assertions that can inspect a plan at different phases in a TestStep. The testing module
- provides built-in Plan Checks for common use-cases, and custom Plan Checks can also be implemented.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Plan Checks
-
-During the **Lifecycle (config)** and **Refresh** [modes](/terraform/plugin/testing/acceptance-tests/teststep#test-modes) of a `TestStep`, the testing framework will run `terraform plan` before and after certain operations. For example, the **Lifecycle (config)** mode will run a plan before the `terraform apply` phase, as well as a plan before and after the `terraform refresh` phase.
-
-These `terraform plan` operations results in a [plan file](/terraform/cli/commands/plan#out-filename) and can be represented by this [JSON format](/terraform/internals/json-format#plan-representation).
-
-A **plan check** is a test assertion that inspects the plan file at a specific phase during the current testing mode. Multiple plan checks can be run at each defined phase, all assertion errors returned are aggregated, reported as a test failure, and all test cleanup logic is executed.
-
-- Available plan phases for **Lifecycle (config)** mode are defined in the [`TestStep.ConfigPlanChecks`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestStep) struct
-- Available plan phases for **Refresh** mode are defined in the [`TestStep.RefreshPlanChecks`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestStep) struct
-- **Import** mode currently does not run any plan operations, and therefore does not support plan checks.
-
-Refer to:
-
-- [General Plan Checks](#general-plan-checks) for built-in general purpose plan checks.
-- [Resource Plan Checks](/terraform/plugin/testing/acceptance-tests/plan-checks/resource) for built-in managed resource and data source plan checks.
-- [Output Plan Checks](/terraform/plugin/testing/acceptance-tests/plan-checks/output) for built-in output-related plan checks.
-- [Custom Plan Checks](/terraform/plugin/testing/acceptance-tests/plan-checks/custom) for defining bespoke plan checks.
-
-## General Plan Checks
-
-The `terraform-plugin-testing` module provides a package [`plancheck`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck) with built-in general plan checks for common use-cases:
-
-| Check | Description |
-|--------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
-| [`ExpectEmptyPlan`](/terraform/plugin/testing/acceptance-tests/plan-checks#expectemptyplan-plan-check) | Asserts the entire plan has no operations for apply. |
-| [`ExpectNonEmptyPlan`](/terraform/plugin/testing/acceptance-tests/plan-checks#expectnonemptyplan-plan-check) | Asserts the entire plan contains at least one operation for apply. |
-
-## `ExpectEmptyPlan` Plan Check
-
-One of the built-in plan checks, [`plancheck.ExpectEmptyPlan`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#ExpectEmptyPlan), is useful for determining a plan is a no-op prior to, for instance, the `terraform apply` phase.
-
-Given the following example with the [random provider](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string), we have written a test that asserts that there are no planned changes:
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
-)
-
-func Test_Random_EmptyPlan(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- ExternalProviders: map[string]resource.ExternalProvider{
- "random": {
- Source: "registry.terraform.io/hashicorp/random",
- },
- },
- Steps: []resource.TestStep{
- {
- Config: `resource "random_string" "one" {
- length = 16
- }`,
- },
- {
- Config: `resource "random_string" "one" {
- length = 16
- }`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectEmptyPlan(),
- },
- },
- },
- },
- })
-}
-```
-
-## `ExpectNonEmptyPlan` Plan Check
-
-One of the built-in plan checks, [`plancheck.ExpectNonEmptyPlan`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#ExpectNonEmptyPlan), is useful for determining whether a plan contains changes prior to, for instance, the `terraform apply` phase.
-
-The following example, which uses the built-in [terraform_data resource](https://developer.hashicorp.com/terraform/language/resources/terraform-data), asserts that there are planned changes:
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
- "github.com/hashicorp/terraform-plugin-testing/tfversion"
-)
-
-func Test_ExpectNonEmptyPlan_ResourceChanges(t *testing.T) {
- t.Parallel()
-
- resource.UnitTest(t, resource.TestCase{
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.SkipBelow(tfversion.Version1_4_0),
- },
- ExternalProviders: map[string]resource.ExternalProvider{
- "terraform": {Source: "terraform.io/builtin/terraform"},
- },
- Steps: []resource.TestStep{
- {
- Config: `resource "terraform_data" "one" {
- triggers_replace = ["original"]
- }`,
- },
- {
- Config: `resource "terraform_data" "one" {
- triggers_replace = ["new"]
- }`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectNonEmptyPlan(),
- },
- },
- },
- },
- })
-}
-```
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/plan-checks/output.mdx b/website/docs/plugin/testing/acceptance-tests/plan-checks/output.mdx
deleted file mode 100644
index e390b5d85..000000000
--- a/website/docs/plugin/testing/acceptance-tests/plan-checks/output.mdx
+++ /dev/null
@@ -1,312 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Plan Checks'
-description: >-
- Plan Checks are test assertions that can inspect a plan at different phases in a TestStep. The testing module
- provides built-in Output Value Plan Checks for common use-cases.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Output Plan Checks
-
-The `terraform-plugin-testing` module provides a package [`plancheck`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck) with built-in output value plan checks for common use-cases:
-
-| Check | Description |
-|-------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|
-| [`ExpectKnownOutputValue`](/terraform/plugin/testing/acceptance-tests/plan-checks/output#expectknownoutputvalue-plan-check) | Asserts the output at the specified address has the specified type, and value. |
-| [`ExpectKnownOutputValueAtPath`](/terraform/plugin/testing/acceptance-tests/plan-checks/output#expectknownoutputvalueatpath-plan-check) | Asserts the output at the specified address, and path has the specified type, and value. |
-| [`ExpectNullOutputValue`](/terraform/plugin/testing/acceptance-tests/plan-checks/output#expectnulloutputvalue-plan-check) | Asserts the output at the specified address has a null value. |
-| [`ExpectNullOutputValueAtPath`](/terraform/plugin/testing/acceptance-tests/plan-checks/output#expectnulloutputvalueatpath-plan-check) | Asserts the output at the specified address, and path has a null value. |
-| [`ExpectUnknownOutputValue`](/terraform/plugin/testing/acceptance-tests/plan-checks/output#expectunknownoutputvalue-plan-check) | Asserts the output at the specified address has an unknown value. |
-| [`ExpectUnknownOutputValueAtPath`](/terraform/plugin/testing/acceptance-tests/plan-checks/output#expectknownoutputvalueatpath-plan-check) | Asserts the output at the specified address, and path has an unknown value. |
-
-## `ExpectKnownOutputValue` Plan Check
-
-The [`plancheck.ExpectKnownOutputValue(address, value)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#ExpectKnownOutputValue) plan check verifies that a specific output value has a known type, and value.
-
-Refer to [Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks) for details, and examples of the available [knownvalue.Check](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Check) types that can be used with the `ExpectKnownOutputValue` plan check.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/knownvalue"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
- "github.com/hashicorp/terraform-plugin-testing/tfversion"
-)
-
-func TestExpectKnownOutputValue_CheckPlan_Bool(t *testing.T) {
- t.Parallel()
-
- resource.UnitTest(t, resource.TestCase{
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.SkipBelow(tfversion.Version1_8_0),
- },
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- Config: `
- output "test" {
- value = provider::example::bool(true)
- }`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownOutputValue(
- "test",
- knownvalue.Bool(true),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `ExpectKnownOutputValueAtPath` Plan Check
-
-The [`plancheck.ExpectKnownOutputValueAtPath(address, path, value)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#ExpectKnownOutputValueAtPath) plan check verifies that a specific output value at a defined path has a known type, and value.
-
-~> **Note**: Prior to Terraform v1.3.0 a planned output is marked as fully unknown if any attribute is unknown.
-
-Refer to [Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks) for details, and examples of the available [knownvalue.Check](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Check) types that can be used with the `ExpectKnownOutputValueAtPath` plan check.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/knownvalue"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
-)
-
-func TestExpectKnownOutputValue_CheckPlan_Bool(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed boolean attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}
-
- // Generally, it is not necessary to use an output to test a resource attribute,
- // the resource attribute should be tested directly instead. This is only shown as
- // an example.
- //
- // ConfigPlanChecks: resource.ConfigPlanChecks{
- // PreApply: []plancheck.PlanCheck{
- // plancheck.ExpectKnownValue(
- // "test_resource.one",
- // tfjsonpath.New("computed_attribute"),
- // knownvalue.Bool(true),
- // ),
- // },
- // },
- //
- // This is only shown as an example.
- output test {
- value = test_resource.one
- }`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownOutputValueAtPath(
- "test",
- tfjsonpath.New("computed_attribute"),
- knownvalue.Bool(true),
- ),
- },
- },
- },
- },
- })
-}
-```
-
-## `ExpectNullOutputValue` Plan Check
-
-~> **Note**: `ExpectNullOutputValue` is deprecated. Use [`ExpectKnownOutputValue`](/terraform/plugin/testing/acceptance-tests/plan-checks/output#expectknownoutputvalue-plan-check) with [`knownvalue.Null()`](/terraform/plugin/testing/acceptance-tests/known-value-checks/null) instead.
-
-The built-in [`plancheck.ExpectNullOutputValue(address)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#ExpectNullOutputValue) plan check determines whether an output at the specified address has a null value.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
-)
-
-func Test_ExpectNullOutputValue_StringAttribute_NullConfig(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- Config: `resource "test_resource" "test" {
- string_attribute = null
- }
-
- output "string_attribute" {
- value = test_resource.test.string_attribute
- }
- `,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectNullOutputValue("string_attribute"),
- },
- },
- },
- },
- })
-}
-```
-
-## `ExpectNullOutputValueAtPath` Plan Check
-
-~> **Note**: `ExpectNullOutputValueAtPath` is deprecated. Use [`ExpectKnownOutputValueAtPath`](/terraform/plugin/testing/acceptance-tests/plan-checks/output#expectknownoutputvalueatpath-plan-check) with [`knownvalue.Null()`](/terraform/plugin/testing/acceptance-tests/known-value-checks/null) instead.
-
-The built-in [`plancheck.ExpectNullOutputValueAtPath(address, path)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#ExpectNullOutputValueAtPath) plan check determines whether an output at the specified address, and path has a null value. |
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
- "github.com/hashicorp/terraform-plugin-testing/tfversion"
-)
-
-func Test_ExpectNullOutputValueAtPath_StringAttribute_NullConfig(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Prior to Terraform v1.3.0 a planned output is marked as fully unknown
- // if any attribute is unknown. The id attribute within the test provider
- // is unknown.
- // Reference: https://github.com/hashicorp/terraform/blob/v1.3/CHANGELOG.md#130-september-21-2022
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.SkipBelow(tfversion.Version1_3_0),
- },
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- Config: `resource "test_resource" "test" {
- string_attribute = null
- }
-
- output "resource" {
- value = test_resource.test
- }
- `,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectNullOutputValueAtPath("resource", tfjsonpath.New("string_attribute")),
- },
- },
- },
- },
- })
-}
-```
-
-## `ExpectUnknownOutputValue` Plan Check
-
-One of the built-in plan checks, [`plancheck.ExpectUnknownOutputValue`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#ExpectUnknownOutputValue), determines whether an output value is unknown, for example, prior to the `terraform apply` phase.
-
-The following uses the [time_offset](https://registry.terraform.io/providers/hashicorp/time/latest/docs/resources/offset) resource from the [time provider](https://registry.terraform.io/providers/hashicorp/time/latest), to illustrate usage of the [`plancheck.ExpectUnknownOutputValue`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#ExpectUnknownOutputValue), and verifies that `day` is unknown.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
-)
-
-func Test_Time_Unknown(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- ExternalProviders: map[string]resource.ExternalProvider{
- "time": {
- Source: "registry.terraform.io/hashicorp/time",
- },
- },
- Steps: []resource.TestStep{
- {
- Config: `resource "time_offset" "one" {
- offset_days = 1
- }
-
- output day {
- value = time_offset.one.day
- }`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectUnknownOutputValue("day"),
- },
- },
- },
- },
- })
-}
-```
-
-## `ExpectUnknownOutputValueAtPath` Plan Check
-
-Output values can contain objects or collections as well as primitive (e.g., string) values. Output value plan checks provide two forms for the plan checks, for example `ExpectUnknownOutputValue()`, and `ExpectUnknownOutputValueAtPath()`. The `Expect<...>OutputValueAtPath()` form is used to access a value contained within an object or collection, as illustrated in the following example.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
-)
-
-func Test_Time_Unknown(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- ExternalProviders: map[string]resource.ExternalProvider{
- "time": {
- Source: "registry.terraform.io/hashicorp/time",
- },
- },
- Steps: []resource.TestStep{
- {
- Config: `resource "time_offset" "one" {
- offset_days = 1
- }
-
- output time_offset_one {
- value = time_offset.one
- }`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectUnknownOutputValueAtPath("time_offset_one", tfjsonpath.New("day")),
- },
- },
- },
- },
- })
-}
-```
diff --git a/website/docs/plugin/testing/acceptance-tests/plan-checks/resource.mdx b/website/docs/plugin/testing/acceptance-tests/plan-checks/resource.mdx
deleted file mode 100644
index 1172ce855..000000000
--- a/website/docs/plugin/testing/acceptance-tests/plan-checks/resource.mdx
+++ /dev/null
@@ -1,289 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Plan Checks'
-description: >-
- Plan Checks are test assertions that can inspect a plan at different phases in a TestStep. The testing module
- provides built-in Managed Resource and Data Source Plan Checks for common use-cases.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Resource Plan Checks
-
-The `terraform-plugin-testing` module provides a package [`plancheck`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck) with built-in managed resource, and data source plan checks for common use-cases:
-
-| Check | Description |
-|---------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
-| [`ExpectKnownValue`](/terraform/plugin/testing/acceptance-tests/plan-checks/resource#expectknownvalue-plan-check) | Asserts the specified attribute at the given managed resource, or data source, has the specified type, and value. |
-| [`ExpectResourceAction`](/terraform/plugin/testing/acceptance-tests/plan-checks/resource#expectresourceaction-plan-check) | Asserts the given managed resource, or data source, has the specified operation for apply. |
-| [`ExpectSensitiveValue`](/terraform/plugin/testing/acceptance-tests/plan-checks/resource#expectsensitivevalue-plan-check) | Asserts the specified attribute at the given managed resource, or data source, has a sensitive value. |
-| [`ExpectUnknownValue`](/terraform/plugin/testing/acceptance-tests/plan-checks/resource#expectunknownvalue-plan-check) | Asserts the specified attribute at the given managed resource, or data source, has an unknown value. |
-
-## `ExpectKnownValue` Plan Check
-
-The [`plancheck.ExpectKnownValue(address, path, value)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#ExpectKnownValue) plan check provides a basis for asserting that a specific resource attribute has a known type, and value.
-
-Refer to [Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks) for details, and examples of the available [knownvalue.Check](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Check) types that can be used with the `ExpectKnownValue` plan check.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/knownvalue"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
-)
-
-func TestExpectKnownValue_CheckPlan_String(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed string attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.StringExact("str")),
- },
- },
- },
- },
- })
-}
-```
-
-## `ExpectResourceAction` Plan Check
-
-One of the built-in plan checks, [`plancheck.ExpectResourceAction`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#ExpectResourceAction), is useful for determining the exact action type a resource will under-go during, say, the `terraform apply` phase.
-
-Given the following example with the [random provider](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string), we have written a test that asserts that `random_string.one` will be destroyed and re-created when the `length` attribute is changed:
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
-)
-
-func Test_Random_ForcesRecreate(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- ExternalProviders: map[string]resource.ExternalProvider{
- "random": {
- Source: "registry.terraform.io/hashicorp/random",
- },
- },
- Steps: []resource.TestStep{
- {
- Config: `resource "random_string" "one" {
- length = 16
- }`,
- },
- {
- Config: `resource "random_string" "one" {
- length = 15
- }`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectResourceAction("random_string.one", plancheck.ResourceActionDestroyBeforeCreate),
- },
- },
- },
- },
- })
-}
-```
-
-Another example with the [time provider](https://registry.terraform.io/providers/hashicorp/time/latest/docs/resources/offset) asserts that `time_offset.one` will be updated in-place when the `offset_days` attribute is changed:
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
-)
-
-func Test_Time_UpdateInPlace(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- ExternalProviders: map[string]resource.ExternalProvider{
- "time": {
- Source: "registry.terraform.io/hashicorp/time",
- },
- },
- Steps: []resource.TestStep{
- {
- Config: `resource "time_offset" "one" {
- offset_days = 1
- }`,
- },
- {
- Config: `resource "time_offset" "one" {
- offset_days = 2
- }`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectResourceAction("time_offset.one", plancheck.ResourceActionUpdate),
- },
- },
- },
- },
- })
-}
-```
-
-Multiple plan checks can be combined if you want to assert multiple resource actions:
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
-)
-
-func Test_Time_UpdateInPlace_and_NoOp(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- ExternalProviders: map[string]resource.ExternalProvider{
- "time": {
- Source: "registry.terraform.io/hashicorp/time",
- },
- },
- Steps: []resource.TestStep{
- {
- Config: `resource "time_offset" "one" {
- offset_days = 1
- }
- resource "time_offset" "two" {
- offset_days = 1
- }`,
- },
- {
- Config: `resource "time_offset" "one" {
- offset_days = 2
- }
- resource "time_offset" "two" {
- offset_days = 1
- }`,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectResourceAction("time_offset.one", plancheck.ResourceActionUpdate),
- plancheck.ExpectResourceAction("time_offset.two", plancheck.ResourceActionNoop),
- },
- },
- },
- },
- })
-}
-```
-
-## `ExpectSensitiveValue` Plan Check
-
-The built-in [`plancheck.ExpectSensitiveValue(address, path)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#ExpectSensitiveValue) plan check is used to determine whether the specified attribute at the given managed resource, or data source, has a sensitive value.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
- "github.com/hashicorp/terraform-plugin-testing/tfversion"
-)
-
-func Test_ExpectSensitiveValue_SensitiveStringAttribute(t *testing.T) {
- t.Parallel()
-
- resource.UnitTest(t, resource.TestCase{
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.SkipBelow(tfversion.Version1_0_0), // Change.AfterSensitive
- },
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- Config: `
- resource "test_resource" "one" {
- sensitive_string_attribute = "test"
- }
- `,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectSensitiveValue("test_resource.one",
- tfjsonpath.New("sensitive_string_attribute")),
- },
- },
- },
- },
- })
-}
-```
-
-## `ExpectUnknownValue` Plan Check
-
-The built-in [`plancheck.ExpectUnknownValue(address, path)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#ExpectUnknownValue) plan check is used to determine whether the specified attribute at the given managed resource, or data source, has an unknown value.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/plancheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
-)
-
-func Test_ExpectUnknownValue_StringAttribute(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- ExternalProviders: map[string]resource.ExternalProvider{
- "time": {
- Source: "registry.terraform.io/hashicorp/time",
- },
- },
- // Provider definition for `test` omitted.
- Steps: []resource.TestStep{
- {
- Config: `resource "time_static" "one" {}
-
- resource "test_resource" "two" {
- string_attribute = time_static.one.rfc3339
- }
- `,
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectUnknownValue("test_resource.two", tfjsonpath.New("string_attribute")),
- },
- },
- },
- },
- })
-}
-```
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/state-checks/custom.mdx b/website/docs/plugin/testing/acceptance-tests/state-checks/custom.mdx
deleted file mode 100644
index 7c0751c46..000000000
--- a/website/docs/plugin/testing/acceptance-tests/state-checks/custom.mdx
+++ /dev/null
@@ -1,125 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: State Checks'
-description: >-
- State Checks are test assertions that can inspect state during a TestStep. Custom State Checks can be implemented.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Custom State Checks
-
-The package [`statecheck`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/statecheck) also provides the [`StateCheck`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/statecheck#StateCheck) interface, which can be implemented for a custom state check.
-
-The [`statecheck.CheckStateRequest`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/statecheck#CheckStateRequest) contains the current state file, parsed by the [terraform-json package](https://pkg.go.dev/github.com/hashicorp/terraform-json#State).
-
-Here is an example implementation of a state check that asserts that a specific resource attribute has a known type and value:
-
-```go
-package example_test
-
-import (
- "context"
- "fmt"
-
- tfjson "github.com/hashicorp/terraform-json"
-
- "github.com/hashicorp/terraform-plugin-testing/knownvalue"
- "github.com/hashicorp/terraform-plugin-testing/statecheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
-)
-
-var _ statecheck.StateCheck = expectKnownValue{}
-
-type expectKnownValue struct {
- resourceAddress string
- attributePath tfjsonpath.Path
- knownValue knownvalue.Check
-}
-
-func (e expectKnownValue) CheckState(ctx context.Context, req statecheck.CheckStateRequest, resp *statecheck.CheckStateResponse) {
- var resource *tfjson.StateResource
-
- if req.State == nil {
- resp.Error = fmt.Errorf("state is nil")
- }
-
- if req.State.Values == nil {
- resp.Error = fmt.Errorf("state does not contain any state values")
- }
-
- if req.State.Values.RootModule == nil {
- resp.Error = fmt.Errorf("state does not contain a root module")
- }
-
- for _, r := range req.State.Values.RootModule.Resources {
- if e.resourceAddress == r.Address {
- resource = r
-
- break
- }
- }
-
- if resource == nil {
- resp.Error = fmt.Errorf("%s - Resource not found in state", e.resourceAddress)
-
- return
- }
-
- result, err := tfjsonpath.Traverse(resource.AttributeValues, e.attributePath)
-
- if err != nil {
- resp.Error = err
-
- return
- }
-
- if err := e.knownValue.CheckValue(result); err != nil {
- resp.Error = err
- }
-}
-
-func ExpectKnownValue(resourceAddress string, attributePath tfjsonpath.Path, knownValue knownvalue.Check) statecheck.StateCheck {
- return expectKnownValue{
- resourceAddress: resourceAddress,
- attributePath: attributePath,
- knownValue: knownValue,
- }
-}
-```
-
-And example usage:
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/knownvalue"
- "github.com/hashicorp/terraform-plugin-testing/statecheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
-)
-
-func TestExpectKnownValue_CheckState_Bool(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed boolean attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.Bool(true),
- ),
- },
- },
- },
- })
-}
-```
diff --git a/website/docs/plugin/testing/acceptance-tests/state-checks/index.mdx b/website/docs/plugin/testing/acceptance-tests/state-checks/index.mdx
deleted file mode 100644
index d8efb3d6a..000000000
--- a/website/docs/plugin/testing/acceptance-tests/state-checks/index.mdx
+++ /dev/null
@@ -1,23 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: State Checks'
-description: >-
- State Checks are test assertions that can inspect state during a TestStep. The testing module
- provides built-in State Checks for common use-cases, and custom State Checks can also be implemented.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# State Checks
-
-During the **Lifecycle (config)** [mode](/terraform/plugin/testing/acceptance-tests/teststep#test-modes) of a `TestStep`, the testing framework will run `terraform apply`.
-
-The execution of `terraform apply` results in a [state file](/terraform/language/state), and can be represented by this [JSON format](/terraform/internals/json-format#state-representation).
-
-A **state check** is a test assertion that inspects the state file. Multiple state checks can be run, all assertion errors returned are aggregated, reported as a test failure, and all test cleanup logic is executed.
-
-Refer to:
-
-- [Resource State Checks](/terraform/plugin/testing/acceptance-tests/state-checks/resource) for built-in managed resource and data source state checks.
-- [Output State Checks](/terraform/plugin/testing/acceptance-tests/state-checks/output) for built-in output-related state checks.
-- [Custom State Checks](/terraform/plugin/testing/acceptance-tests/state-checks/custom) for defining bespoke state checks.
diff --git a/website/docs/plugin/testing/acceptance-tests/state-checks/output.mdx b/website/docs/plugin/testing/acceptance-tests/state-checks/output.mdx
deleted file mode 100644
index b27149373..000000000
--- a/website/docs/plugin/testing/acceptance-tests/state-checks/output.mdx
+++ /dev/null
@@ -1,122 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: State Checks'
-description: >-
- State Checks are test assertions that can inspect state during a TestStep. The testing module
- provides built-in Output Value State Checks for common use-cases.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Output State Checks
-
-The `terraform-plugin-testing` module provides a package [`statecheck`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/statecheck) with built-in output value state checks for common use-cases:
-
-| Check | Description |
-|-------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|
-| [`ExpectKnownOutputValue`](/terraform/plugin/testing/acceptance-tests/state-checks/output#expectknownoutputvalue-state-check) | Asserts the output at the specified address has the specified type, and value. |
-| [`ExpectKnownOutputValueAtPath`](/terraform/plugin/testing/acceptance-tests/state-checks/output#expectknownoutputvalueatpath-state-check) | Asserts the output at the specified address, and path has the specified type, and value. |
-
-## `ExpectKnownOutputValue` State Check
-
-The [`statecheck.ExpectKnownOutputValue(address, value)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/statecheck#ExpectKnownOutputValue) state check verifies that a specific output value has a known type, and value.
-
-Refer to [Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks) for details, and examples of the available [knownvalue.Check](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Check) types that can be used with the `ExpectKnownOutputValue` state check.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/knownvalue"
- "github.com/hashicorp/terraform-plugin-testing/statecheck"
- "github.com/hashicorp/terraform-plugin-testing/tfversion"
-)
-
-func TestExpectKnownOutputValue_CheckState_Bool(t *testing.T) {
- t.Parallel()
-
- resource.UnitTest(t, resource.TestCase{
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.SkipBelow(tfversion.Version1_8_0),
- },
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- Config: `
- output "test" {
- value = provider::example::bool(true)
- }`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownOutputValue(
- "test",
- knownvalue.Bool(true),
- ),
- },
- },
- },
- })
-}
-```
-
-## `ExpectKnownOutputValueAtPath` State Check
-
-The [`statecheck.ExpectKnownOutputValueAtPath(address, path, value)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/statecheck#ExpectKnownOutputValueAtPath) state check verifies that a specific output value at a defined path has a known type, and value.
-
-Refer to [Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks) for details, and examples of the available [knownvalue.Check](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Check) types that can be used with the `ExpectKnownOutputValueAtPath` state check.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/knownvalue"
- "github.com/hashicorp/terraform-plugin-testing/statecheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
-)
-
-func TestExpectKnownOutputValueAtPath_CheckState_Bool(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed boolean attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}
-
- // Generally, it is not necessary to use an output to test a resource attribute,
- // the resource attribute should be tested directly instead. This is only shown as
- // an example.
- // Generally, it is not necessary to use an output to test a resource attribute,
- // the resource attribute should be tested directly instead, by inspecting the
- // value of the resource attribute. For instance:
- //
- // ConfigStateChecks: []statecheck.StateCheck{
- // statecheck.ExpectKnownValue(
- // "test_resource.one",
- // tfjsonpath.New("computed_attribute"),
- // knownvalue.Bool(true),
- // ),
- // },
- //
- // This is only shown as an example.
- output test_resource_one_output {
- value = test_resource.one
- }`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownOutputValueAtPath(
- "test_resource_one_output",
- tfjsonpath.New("computed_attribute"),
- knownvalue.Bool(true),
- ),
- },
- },
- },
- })
-}
-```
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/state-checks/resource.mdx b/website/docs/plugin/testing/acceptance-tests/state-checks/resource.mdx
deleted file mode 100644
index 5d88681c0..000000000
--- a/website/docs/plugin/testing/acceptance-tests/state-checks/resource.mdx
+++ /dev/null
@@ -1,313 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: State Checks'
-description: >-
- State Checks are test assertions that can inspect state during a TestStep. The testing module
- provides built-in Managed Resource and Data Source State Checks for common use-cases.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Resource State Checks
-
-The `terraform-plugin-testing` module provides a package [`statecheck`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/statecheck) with built-in managed resource, and data source state checks for common use-cases:
-
-| Check | Description |
-|---------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| [`CompareValue`](/terraform/plugin/testing/acceptance-tests/state-checks/resource#comparevalue-state-check) | Compares sequential values of the specified attribute at the given managed resource, or data source, using the supplied [value comparer](/terraform/plugin/testing/acceptance-tests/value-comparers). |
-| [`CompareValueCollection`](/terraform/plugin/testing/acceptance-tests/state-checks/resource#comparevaluecollection-state-check) | Compares each item in the specified collection (e.g., list, set) attribute, with the second specified attribute at the given managed resources, or data sources, using the supplied [value comparer](/terraform/plugin/testing/acceptance-tests/value-comparers). |
-| [`CompareValuePairs`](/terraform/plugin/testing/acceptance-tests/state-checks/resource#comparevaluecollection-state-check) | Compares the specified attributes at the given managed resources, or data sources, using the supplied [value comparer](/terraform/plugin/testing/acceptance-tests/value-comparers). |
-| [`ExpectKnownValue`](/terraform/plugin/testing/acceptance-tests/state-checks/resource#expectknownvalue-state-check) | Asserts the specified attribute at the given managed resource, or data source, has the specified type, and value. |
-| [`ExpectSensitiveValue`](/terraform/plugin/testing/acceptance-tests/state-checks/resource#expectsensitivevalue-state-check) | Asserts the specified attribute at the given managed resource, or data source, has a sensitive value. |
-
-## `CompareValue` State Check
-
-The intended usage of [`statecheck.CompareValue(comparer)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/statecheck#CompareValue) state check is to retrieve a specific resource attribute value from state during sequential test steps, and to compare these values using the supplied value comparer.
-
-Refer to [Value Comparers](/terraform/plugin/testing/acceptance-tests/value-comparers) for details, and examples of the available [compare.ValueComparer](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/compare#ValueComparer) types that can be used with the `CompareValue` state check.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/compare"
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/statecheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
-)
-
-func TestCompareValue_CheckState_ValuesSame(t *testing.T) {
- t.Parallel()
-
- compareValuesSame := statecheck.CompareValue(compare.ValuesSame())
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- compareValuesSame.AddStateValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- ),
- },
- },
- {
- // Example resource containing a computed attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- compareValuesSame.AddStateValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- ),
- },
- },
- },
- })
-}
-```
-
-## `CompareValueCollection` State Check
-
-The [`statecheck.CompareValueCollection(resourceAddressOne, collectionPath, resourceAddressTwo, attributePath, comparer)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/statecheck#CompareValueCollection) state check retrieves a specific collection (e.g., list, set) resource attribute, and a second resource attribute from state, and compares each of the items in the collection with the second attribute using the supplied value comparer.
-
-Refer to [Value Comparers](/terraform/plugin/testing/acceptance-tests/value-comparers) for details, and examples of the available [compare.ValueComparer](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/compare#ValueComparer) types that can be used with the `CompareValueCollection` state check.
-
-The following example illustrates how a `CompareValue` state check can be used to determine whether an attribute value appears in a collection attribute. Note that this is for illustrative purposes only, `CompareValue` should only be used for checking computed values.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/compare"
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/statecheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
-)
-
-func TestCompareValueCollection_CheckState_ValuesSame(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // The following is for illustrative purposes. State checking
- // should only be used for computed attributes
- Config: `resource "test_resource" "one" {
- string_attribute = "str"
- }
-
- resource "test_resource" "two" {
- list_attribute = [
- "str2",
- "str",
- ]
- }
- `,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.CompareValueCollection(
- "test_resource.two",
- []tfjsonpath.Path{
- tfjsonpath.New("list_attribute"),
- },
- "test_resource.one",
- tfjsonpath.New("string_attribute"),
- compare.ValuesSame(),
- ),
- },
- },
- },
- })
-}
-```
-
-The following example illustrates how a `CompareValue` state check can be used to determine whether an object attribute value appears in a collection (e.g., list) attribute containing objects. Note that this is for illustrative purposes only, `CompareValue` should only be used for checking computed values.
-
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/compare"
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/statecheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
-)
-
-func TestCompareValueCollection_CheckState_ValuesSame(t *testing.T) {
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // The following is for illustrative purposes. State checking
- // should only be used for computed attributes
- Config: `resource "test_resource" "one" {
- list_nested_attribute = [
- {
- a = false
- b = "two"
- },
- {
- a = true
- b = "four"
- }
- ]
- single_nested_attribute = {
- a = true
- b = "four"
- }
- }`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.CompareValueCollection(
- "test_resource.one",
- []tfjsonpath.Path{
- tfjsonpath.New("list_nested_attribute"),
- tfjsonpath.New("b"),
- },
- "test_resource.one",
- tfjsonpath.New("single_nested_attribute").AtMapKey("b"),
- compare.ValuesSame(),
- ),
- },
- },
- },
- })
-}
-```
-
-## `CompareValuePairs` State Check
-
-The [`statecheck.CompareValuePairs(resourceAddressOne, attributePathOne, resourceAddressTwo, attributePathTwo, comparer)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/statecheck#CompareValuePairs) state check provides a basis for retrieving a pair of attribute values, and comparing them using the supplied value comparer.
-
-Refer to [Value Comparers](/terraform/plugin/testing/acceptance-tests/value-comparers) for details, and examples of the available [compare.ValueComparer](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/compare#ValueComparer) types that can be used with the `CompareValuePairs` state check.
-
-```go
-package statecheck_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/compare"
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/statecheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
-)
-
-func TestCompareValuePairs_CheckState_ValuesSame(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}
-
- resource "test_resource" "two" {}
- `,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.CompareValuePairs(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- "test_resource.two",
- tfjsonpath.New("computed_attribute"),
- compare.ValuesSame(),
- ),
- },
- },
- },
- })
-}
-```
-
-## `ExpectKnownValue` State Check
-
-The [`statecheck.ExpectKnownValue(address, path, value)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/statecheck#ExpectKnownValue) state check provides a basis for asserting that a specific resource attribute has a known type, and value.
-
-Refer to [Known Value Checks](/terraform/plugin/testing/acceptance-tests/known-value-checks) for details, and examples of the available [knownvalue.Check](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/knownvalue#Check) types that can be used with the `ExpectKnownValue` state check.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/knownvalue"
- "github.com/hashicorp/terraform-plugin-testing/statecheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
-)
-
-func TestExpectKnownValue_CheckState_Bool(t *testing.T) {
- t.Parallel()
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- // Example resource containing a computed boolean attribute named "computed_attribute"
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- knownvalue.Bool(true),
- ),
- },
- },
- },
- })
-}
-```
-
-## `ExpectSensitiveValue` State Check
-
-The [`statecheck.ExpectSensitiveValue(address, path)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/statecheck#ExpectSensitiveValue) state check provides a basis for asserting that a specific resource attribute is marked as sensitive.
-
--> **Note:** In this example, a [TerraformVersionCheck](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#TerraformVersionCheck) is being used to prevent execution of this test prior to Terraform version `1.4.6` (refer to the release notes for Terraform [v1.4.6](https://github.com/hashicorp/terraform/releases/tag/v1.4.6)).
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/statecheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
- "github.com/hashicorp/terraform-plugin-testing/tfversion"
-)
-
-func Test_ExpectSensitiveValue_SensitiveStringAttribute(t *testing.T) {
- t.Parallel()
-
- resource.UnitTest(t, resource.TestCase{
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.SkipBelow(tfversion.Version1_4_6), // StateResource.SensitiveValues
- },
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- Config: `
- resource "test_resource" "one" {
- sensitive_string_attribute = "test"
- }
- `,
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectSensitiveValue("test_resource.one",
- tfjsonpath.New("sensitive_string_attribute")),
- },
- },
- },
- })
-}
-```
diff --git a/website/docs/plugin/testing/acceptance-tests/sweepers.mdx b/website/docs/plugin/testing/acceptance-tests/sweepers.mdx
deleted file mode 100644
index ef0953cf5..000000000
--- a/website/docs/plugin/testing/acceptance-tests/sweepers.mdx
+++ /dev/null
@@ -1,124 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Sweepers'
-description: >-
- Acceptance tests provision and verify real infrastructure with Terraform's
- testing framework. Sweepers clean up leftover infrastructure.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Sweepers
-
-Acceptance tests in Terraform provision and verify real infrastructure using [Terraform's testing framework](/terraform/plugin/testing/acceptance-tests). Ideally all infrastructure created is then destroyed within the lifecycle of a test, however the reality is that there are several situations that can arise where resources created during a test are “leaked”. Leaked test resources are resources created by Terraform during a test, but Terraform either failed to destroy them as part of the test, or the test falsely reported all resources were destroyed after completing the test. Common causes are intermittent errors or failures in vendor APIs, or developer error in the resource code or test.
-
-To address the possibility of leaked resources, Terraform provides a mechanism called sweepers to cleanup leftover infrastructure. We will add a file to our folder structure that will invoke the sweeper helper.
-
-```
-terraform-plugin-example/
-├── provider.go
-├── provider_test.go
-├── example/
-│ ├── example_sweeper_test.go
-│ ├── resource_example_compute.go
-│ ├── resource_example_compute_test.go
-```
-
-**`example_sweeper_test.go`**
-
-```go
-package example
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
-)
-
-func TestMain(m *testing.M) {
- resource.TestMain(m)
-}
-
-// sharedClientForRegion returns a common provider client configured for the specified region
-func sharedClientForRegion(region string) (any, error) {
- ...
- return client, nil
-}
-```
-
-`resource.TestMain` is responsible for parsing the special test flags and invoking the sweepers. Sweepers should be added within the acceptance test file of a resource.
-
-**`resource_example_compute_test.go`**
-
-```go
-package example
-
-import (
- "log"
- "strings"
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
-)
-
-func init() {
- resource.AddTestSweepers("example_compute", &resource.Sweeper{
- Name: "example_compute",
- F: func (region string) error {
- client, err := sharedClientForRegion(region)
- if err != nil {
- return fmt.Errorf("Error getting client: %s", err)
- }
- conn := client.(*ExampleClient)
-
- instances, err := conn.DescribeComputeInstances()
- if err != nil {
- return fmt.Errorf("Error getting instances: %s", err)
- }
- for _, instance := range instances {
- if strings.HasPrefix(instance.Name, "test-acc") {
- err := conn.DestroyInstance(instance.ID)
-
- if err != nil {
- log.Printf("Error destroying %s during sweep: %s", instance.Name, err)
- }
- }
- }
- return nil
- },
- })
-}
-```
-
-This example demonstrates adding a sweeper, it is important to note that the string passed to `resource.AddTestSweepers` is added to a map, this name must therefore be unique. Also note there needs to be a way of identifying resources created by Terraform during acceptance tests, a common practice is to prefix all resource names created during acceptance tests with `"test-acc"` or something similar.
-
-For more complex leaks, sweepers can also specify a list of sweepers that need to be run prior to the one being defined.
-
-**`resource_example_compute_disk_test.go`**
-
-```go
-package example
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
-)
-
-func init() {
- resource.AddTestSweepers("example_compute_disk", &resource.Sweeper{
- Name: "example_compute_disk",
- Dependencies: []string{"example_compute"}
- ...
- })
-}
-```
-
-The sweepers can be invoked with the common make target `sweep`:
-
-```
-$ make sweep
-WARNING: This will destroy infrastructure. Use only in development accounts.
-go test ...
-...
-```
diff --git a/website/docs/plugin/testing/acceptance-tests/testcase.mdx b/website/docs/plugin/testing/acceptance-tests/testcase.mdx
deleted file mode 100644
index 9e90849cd..000000000
--- a/website/docs/plugin/testing/acceptance-tests/testcase.mdx
+++ /dev/null
@@ -1,359 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: TestCase'
-description: |-
- Acceptance tests are expressed in terms of Test Cases. Each Test Case
- creates a set of resources then verifies the new infrastructure.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Acceptance Tests: TestCases
-
-Acceptance tests are expressed in terms of **Test Cases**, each using one or
-more Terraform configurations designed to create a set of resources under test,
-and then verify the actual infrastructure created. Terraform's `resource`
-package offers a method `Test()`, accepting two parameters and acting as the
-entry point to Terraform's acceptance test framework. The first parameter is the
-standard [\*testing.T struct from Golang's Testing package][3], and the second is
-[TestCase][1], a Go struct that developers use to setup the acceptance tests.
-
-Here's an example acceptance test. Here the Provider is named `Example`, and the
-Resource under test is `Widget`. The parts of this test are explained below the
-example.
-
-```go
-package example
-
-// example.Widget represents a concrete Go type that represents an API resource
-func TestAccExampleWidget_basic(t *testing.T) {
- var widgetBefore, widgetAfter example.Widget
- rName := acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)
-
- resource.Test(t, resource.TestCase{
- PreCheck: func() { testAccPreCheck(t) },
- Providers: testAccProviders,
- CheckDestroy: testAccCheckExampleResourceDestroy,
- Steps: []resource.TestStep{
- {
- Config: testAccExampleResource(rName),
- ConfigStateChecks: []statecheck.StateCheck{
- stateCheckExampleResourceExists("example_widget.foo", &widgetBefore),
- },
- },
- {
- Config: testAccExampleResource_removedPolicy(rName),
- ConfigStateChecks: []statecheck.StateCheck{
- stateCheckExampleResourceExists("example_widget.foo", &widgetAfter),
- },
- },
- },
- })
-}
-```
-
-## Creating Acceptance Tests Functions
-
-Terraform acceptance tests are declared with the naming pattern `TestAccXxx`
-and with the standard Go test function signature of `func TestAccXxx(*testing.T)`.
-Using the above test as an example:
-
-```go
-// File: example/widget_test.go
-package example
-
-func TestAccExampleWidget_basic(t *testing.T) {
- // ...
-}
-```
-
-Inside this function we invoke `resource.Test()` with the `*testing.T` input and
-a new testcase object:
-
-```go
-// File: example/widget_test.go
-package example
-
-func TestAccExampleWidget_basic(t *testing.T) {
- resource.Test(t, resource.TestCase{
- // ...
- })
-}
-```
-
-The majority of acceptance tests will only invoke `resource.Test()` and exit. If
-at any point this method encounters an error, either in executing the provided
-Terraform configurations or subsequent developer defined checks, `Test()` will
-invoke the `t.Error` method of Go's standard testing framework and the test will
-fail. A failed test will not halt or otherwise interrupt any other tests
-currently running.
-
-## TestCase Reference API
-
-`TestCase` offers several fields for developers to add to customize and validate
-each test, defined below. The source for `TestCase` can be viewed [here on
-godoc.org](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestCase)
-
-### IsUnitTest
-
-**Type:** [bool](https://pkg.go.dev/builtin#bool)
-
-**Default:** `false`
-
-**Required:** no
-
-**IsUnitTest** allows a test to run regardless of the TF_ACC environment
-variable. This should be used with care - only for fast tests on local resources
-(e.g. remote state with a local backend) but can be used to increase confidence
-in correct operation of Terraform without waiting for a full acceptance test
-run.
-
-### PreCheck
-
-**Type:** `function`
-
-**Default:** `nil`
-
-**Required:** no
-
-**PreCheck** if non-nil, will be called before any test steps are executed. It
-is commonly used to verify that required values exist for testing, such as
-environment variables containing test keys that are used to configure the
-Provider or Resource under test.
-
-**Example usage:**
-
-```go
-// File: example/widget_test.go
-package example
-
-func TestAccExampleWidget_basic(t *testing.T) {
- resource.Test(t, resource.TestCase{
- PreCheck: func() { testAccPreCheck(t) },
- // ...
- })
-}
-
-
-// testAccPreCheck validates the necessary test API keys exist
-// in the testing environment
-func testAccPreCheck(t *testing.T) {
- if v := os.Getenv("EXAMPLE_KEY"); v == "" {
- t.Fatal("EXAMPLE_KEY must be set for acceptance tests")
- }
- if v := os.Getenv("EXAMPLE_SECRET"); v == "" {
- t.Fatal("EXAMPLE_SECRET must be set for acceptance tests")
- }
-}
-```
-
-### TerraformVersionChecks
-
-**Type:** [`[]tfversion.TerraformVersionCheck`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#TerraformVersionCheck)
-
-**Default:** `nil`
-
-**Required:** no
-
-**TerraformVersionChecks** if non-nil, will be called after any defined PreChecks
-but before any test steps are executed. The [Terraform Version Checks](/terraform/plugin/testing/acceptance-tests/tfversion-checks)
-are generic checks that check logic against the Terraform CLI version and can
-immediately pass or fail a test before any test steps are executed.
-
-The [`tfversion`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion) package provides built-in checks for common scenarios.
-
-**Example usage:**
-
-```go
-// File: example/widget_test.go
-package example
-
-func TestAccExampleWidget_basic(t *testing.T) {
- resource.Test(t, resource.TestCase{
- PreCheck: func() { testAccPreCheck(t) },
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.SkipBelow(tfversion.Version1_1_0), // built-in check from tfversion package
- },
- // ...
- })
-}
-
-```
-
-### Providers
-
-**Type:** [`map[string]*schema.Provider`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema#Provider)
-
-**Required:** Yes
-
-**Providers** is a map of `*schema.Provider` values with `string`
-keys, representing the Providers that will be under test. Only the Providers
-included in this map will be loaded during the test, so any Provider included in
-a configuration file for testing must be represented in this map or the test
-will fail during initialization.
-
-This map is most commonly constructed once in a common `init()` method of the
-Provider's main test file, and includes an object of the current Provider type.
-
-**Example usage:** (note the different files `widget_test.go` and `provider_test.go`)
-
-```go
-// File: example/widget_test.go
-package example
-
-func TestAccExampleWidget_basic(t *testing.T) {
- resource.Test(t, resource.TestCase{
- PreCheck: func() { testAccPreCheck(t) },
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.SkipBelow(tfversion.Version1_1_0),
- },
- Providers: testAccProviders,
- // ...
- })
-}
-
-// File: example/provider_test.go
-package example
-
-var testAccProviders map[string]*schema.Provider
-var testAccProvider *schema.Provider
-
-func init() {
- testAccProvider = Provider()
- testAccProviders = map[string]*schema.Provider{
- "example": testAccProvider,
- }
-}
-```
-
-### CheckDestroy
-
-**Type:** [TestCheckFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestCheckFunc)
-
-**Default:** `nil`
-
-**Required:** no
-
-**CheckDestroy** is called after all test steps have been run and Terraform
-has run `destroy` on the remaining state. This allows developers to ensure any
-resource created is truly destroyed. This method receives the last known
-Terraform state as input, and commonly uses infrastructure SDKs to query APIs
-directly to verify the expected objects are no longer found, and should return
-an error if any resources remain.
-
-**Example usage:**
-
-```go
-// File: example/widget_test.go
-package example
-
-func TestAccExampleWidget_basic(t *testing.T) {
- resource.Test(t, resource.TestCase{
- PreCheck: func() { testAccPreCheck(t) },
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.SkipBelow(tfversion.Version1_1_0),
- },
- Providers: testAccProviders,
- CheckDestroy: testAccCheckExampleResourceDestroy,
- // ...
- })
-}
-
-// testAccCheckExampleResourceDestroy verifies the Widget
-// has been destroyed
-func testAccCheckExampleResourceDestroy(s *terraform.State) error {
- // retrieve the connection established in Provider configuration
- conn := testAccProvider.Meta().(*ExampleClient)
-
- // loop through the resources in state, verifying each widget
- // is destroyed
- for _, rs := range s.RootModule().Resources {
- if rs.Type != "example_widget" {
- continue
- }
-
- // Retrieve our widget by referencing it's state ID for API lookup
- request := &example.DescribeWidgets{
- IDs: []string{rs.Primary.ID},
- }
-
- response, err := conn.DescribeWidgets(request)
- if err == nil {
- if len(response.Widgets) > 0 && *response.Widgets[0].ID == rs.Primary.ID {
- return fmt.Errorf("Widget (%s) still exists.", rs.Primary.ID)
- }
-
- return nil
- }
-
- // If the error is equivalent to 404 not found, the widget is destroyed.
- // Otherwise return the error
- if !strings.Contains(err.Error(), "Widget not found") {
- return err
- }
- }
-
- return nil
-}
-```
-
-### Steps
-
-**Type:** [`[]TestStep`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestStep)
-
-**Required:** yes
-
-**TestStep** is a single apply sequence of a test, done within the context of a
-state. Multiple `TestStep`s can be sequenced in a Test to allow testing
-potentially complex update logic and usage. Basic tests typically contain one to
-two steps, to verify the resource can be created and subsequently updated,
-depending on the properties of the resource. In general, simply create/destroy
-tests will only need one step.
-
-`TestStep`s are covered in detail in [the next section, `TestSteps`](/terraform/plugin/testing/acceptance-tests/teststep).
-
-**Example usage:**
-
-```go
-// File: example/widget_test.go
-package example
-
-func TestAccExampleWidget_basic(t *testing.T) {
- resource.Test(t, resource.TestCase{
- PreCheck: func() { testAccPreCheck(t) },
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.SkipBelow(tfversion.Version1_1_0),
- },
- Providers: testAccProviders,
- CheckDestroy: testAccCheckExampleResourceDestroy,
- Steps: []resource.TestStep{
- {
- Config: testAccExampleResource(rName),
- ConfigStateChecks: []statecheck.StateCheck{
- stateCheckExampleResourceExists("example_widget.foo", &widgetBefore),
- },
- },
- {
- Config: testAccExampleResource_removedPolicy(rName),
- ConfigStateChecks: []statecheck.StateCheck{
- stateCheckExampleResourceExists("example_widget.foo", &widgetAfter),
- },
- },
- },
- })
-}
-```
-
-## Next Steps
-
-`TestCases` are used to verify the features of a given part of a plugin. Each
-case should represent a scenario of normal usage of the plugin, from simple
-creation to creating, adding, and removing specific properties. In the next
-Section [`TestSteps`][2], we'll detail `Steps` portion of `TestCase` and see how
-to create these scenarios by iterating on Terraform configurations.
-
-[1]: https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestCase
-
-[2]: /terraform/plugin/testing/acceptance-tests/teststep
-
-[3]: https://pkg.go.dev/testing#T
diff --git a/website/docs/plugin/testing/acceptance-tests/teststep.mdx b/website/docs/plugin/testing/acceptance-tests/teststep.mdx
deleted file mode 100644
index 3d08b81c4..000000000
--- a/website/docs/plugin/testing/acceptance-tests/teststep.mdx
+++ /dev/null
@@ -1,324 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: TestStep'
-description: |-
- TestSteps represent the application of an actual Terraform configuration
- file to a given state.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Acceptance Tests: TestSteps
-
-`TestStep`s represent the application of an actual Terraform configuration file
-to a given state. Each step requires a configuration as input and provides
-developers several means of validating the behavior of the specific resource
-under test.
-
-## Test Modes
-
-Terraform's test framework facilitates three distinct modes of acceptance tests,
-_Lifecycle (config)_, _Import_ and _Refresh_.
-
-_Lifecycle (config)_ mode is the most common mode, and is used for testing plugins by
-providing one or more configuration files with the same logic as would be used
-when running `terraform apply`. Configuration is supplied by specifying
-[TestStep.Config](/terraform/plugin/testing/acceptance-tests/configuration#teststep-config),
-[TestStep.ConfigDirectory](/terraform/plugin/testing/acceptance-tests/configuration#teststep-configdirectory), or
-[TestStep.ConfigFile](/terraform/plugin/testing/acceptance-tests/configuration#teststep-configfile).
-Variables for use with configuration are defined by specifying
-[TestStep.ConfigVariables](/terraform/plugin/testing/acceptance-tests/configuration#teststep-configvariables).
-
-_Import_ mode is used for testing resource functionality to import existing
-infrastructure into a Terraform statefile, using the same logic as would be used
-when running `terraform import`.
-
-_Refresh_ mode is used for testing resource functionality to refresh existing
-infrastructure, using the same logic as would be used when running
-`terraform refresh`.
-
-An acceptance test's mode is implicitly determined by the fields provided in the
-`TestStep` definition. The applicable fields are defined in the [TestStep
-Reference API](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestStep).
-
-## Steps
-
-`Steps` is a field within
-[TestCase](/terraform/plugin/testing/acceptance-tests/testcase), the struct used
-to construct acceptance tests. Each step represents a full `terraform apply` of
-a given configuration language, followed by zero or more checks (defined later)
-to verify the application. Each `Step` is applied in order, and require its own
-configuration and optional check functions.
-
-Below is a code example of a lifecycle test that provides two `TestStep` structs:
-
-```go
-package example
-
-// example.Widget represents a concrete Go type that represents an API resource
-func TestAccExampleWidget_basic(t *testing.T) {
- var widgetBefore, widgetAfter example.Widget
- rName := acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)
-
- resource.Test(t, resource.TestCase{
- PreCheck: func() { testAccPreCheck(t) },
- Providers: testAccProviders,
- CheckDestroy: testAccCheckExampleResourceDestroy,
- Steps: []resource.TestStep{
- {
- Config: testAccExampleResource(rName),
- ConfigStateChecks: []statecheck.StateCheck{
- stateCheckExampleResourceExists("example_widget.foo", &widgetBefore),
- },
- },
- {
- Config: testAccExampleResource_removedPolicy(rName),
- ConfigStateChecks: []statecheck.StateCheck{
- stateCheckExampleResourceExists("example_widget.foo", &widgetAfter),
- },
- },
- },
- })
-}
-```
-
-In the above example each `TestCase` invokes a function to retrieve it's desired
-configuration, based on a randomized name provided, however an in-line string or
-constant string would work as well, so long as they contain valid Terraform
-configuration for the plugin or resource under test. This pattern of first
-applying and checking a basic configuration, followed by applying a modified
-configuration with updated or additional checks is a common pattern used to test
-update functionality.
-
-## Plan Checks
-Before and after the configuration for a `TestStep` is applied, Terraform's testing framework provides developers an opportunity to make test assertions against `terraform plan` results via the plan file. This is provided via [Plan Checks](/terraform/plugin/testing/acceptance-tests/plan-checks), which provide both built-in plan checks and an interface to implement custom plan checks.
-
-## State Checks
-
-After the configuration for a `TestStep` is applied, Terraform's testing
-framework provides developers an opportunity to check the results by providing one
-or more [state check implementations](/terraform/plugin/testing/acceptance-tests/state-checks).
-While possible to only supply a single state check, it is recommended you use multiple state checks
-to validate specific information about the results of the `terraform apply` ran in each `TestStep`.
-
-See the [State Checks](/terraform/plugin/testing/acceptance-tests/state-checks) section for more information about the built-in state checks for resources, data sources,
-output values, and how to write custom state checks.
-
-### Legacy Check function
-
-
-
-Use the new `ConfigStateChecks` attribute and [State Check implementations](/terraform/plugin/testing/acceptance-tests/state-checks)
-instead of the `Check` function.
-
-
-
-The `Check` function is used to check results of a Terraform operation. The `Check`
-attribute of `TestStep` is singular, so in order to include multiple checks
-developers should use either `ComposeTestCheckFunc` or
-`ComposeAggregateTestCheckFunc` (defined below) to group multiple check
-functions, defined below:
-
-#### ComposeTestCheckFunc
-
-ComposeTestCheckFunc lets you compose multiple TestCheckFunc functions into a
-single check. As a user testing their provider, this lets you decompose your
-checks into smaller pieces more easily, with individual methods for checking
-specific attributes. Each check is ran in the order provided, and on failure the
-entire `TestCase` is stopped, and Terraform attempts to destroy any resources
-created.
-
-Example:
-
-```go
-Steps: []resource.TestStep{
- {
- Config: testAccExampleResource(rName),
- Check: resource.ComposeTestCheckFunc(
- // if testAccCheckExampleResourceExists fails to find the resource,
- // the parent TestStep and TestCase fail
- testAccCheckExampleResourceExists("example_widget.foo", &widgetBefore),
- resource.TestCheckResourceAttr("example_widget.foo", "size", "expected size"),
- ),
- },
-},
-```
-
-#### ComposeAggregateTestCheckFunc
-
-ComposeAggregateTestCheckFunc lets you compose multiple TestCheckFunc functions
-into a single check. It's purpose and usage is identical to
-ComposeTestCheckFunc, however each check is ran in order even if a previous
-check failed, collecting the errors returned from any checks and returning a
-single aggregate error. The entire `TestCase` is still stopped, and Terraform
-attempts to destroy any resources created.
-
-Example:
-
-```go
-Steps: []resource.TestStep{
- {
- Config: testAccExampleResource(rName),
- Check: resource.ComposeAggregateTestCheckFunc(
- // if testAccCheckExampleResourceExists fails to find the resource,
- // the following TestCheckResourceAttr is still run, with any errors aggregated
- testAccCheckExampleResourceExists("example_widget.foo", &widgetBefore),
- resource.TestCheckResourceAttr("example_widget.foo", "active", "true"),
- ),
- },
-},
-```
-
-#### Built-in check functions
-
-Terraform has several TestCheckFunc functions built in for developers to use for
-common checks, such as verifying the status and value of a specific attribute in
-the resulting state. Developers are encouraged to use as many as reasonable to
-verify the behavior of the plugin/resource, and should combine them with the
-above mentioned `ComposeTestCheckFunc` or `ComposeAggregateTestCheckFunc`
-functions.
-
-Most builtin functions accept `name`, `key`, and/or `value` fields, derived from
-the typical Terraform configuration stanzas:
-
-```hcl
-resource "example_widget" "foo" {
- active = true
-}
-```
-
-Here the `name` represents the resource name in state (`example_widget.foo`),
-the `key` represents the attribute to check (`active`), and `value` represents
-the desired value to check against (`true`). In this case, an equality check
-would be:
-
-```go
-resource.TestCheckResourceAttr("example_widget.foo", "active", "true"),
-```
-
-The full list of functions can be seen in the [`helper/resource` package](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource). Names for these begin with `TestCheck...` and `TestMatch...`. The most common checks for non-`TypeSet` attributes are below.
-
-| Function | Purpose |
-| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
-| [`TestCheckResourceAttr(name string, key string, value string)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestCheckResourceAttr) | Value equality checks |
-| [`TestMatchResourceAttr(name string, key string, regex *regexp.Regexp)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestMatchResourceAttr) | |
-| Value regular expression checks | |
-| [`TestCheckResourceAttrPair(nameFirst string, keyFirst string, nameSecond string, keySecond string)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestCheckResourceAttrPair) | Value equality across two attributes (usually in different resources) |
-| [`TestCheckResourceAttrSet(name string, key string)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestCheckResourceAttrSet) | Passes if any value was set |
-| [`TestCheckNoResourceAttr(name string, key string)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestCheckNoResourceAttr) | Passes if no value was set |
-
-For `TypeSet` attributes, there are some additional functions that accept a `*` placeholder in attribute keys for indexing into the set.
-
-| Function | Purpose |
-| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
-| [`TestCheckTypeSetElemAttr(name string, key string, value string)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestCheckTypeSetElemAttr) | Value is contained in set |
-| [`TestCheckTypeSetElemAttrPair(nameFirst string, keyFirst string, nameSecond string, keySecond string)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestCheckTypeSetElemAttrPair) | Value is contained in set from another attribute (usually in different resources) |
-| [`TestCheckTypeSetElemNestedAttrs(name string, key string, values map[string]string)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestCheckTypeSetElemNestedAttrs) | Map of values is contained in set (usually checking multiple attributes of a block) |
-
-All of these functions also accept the below syntax in attribute keys to enable additional behaviors.
-
-| Syntax | Purpose | Example |
-| ----------- | --------------------------------- | ------------------------------------------------------------------------------- |
-| `.{NUMBER}` | List index | `TestCheckResourceAttr("example_widget.foo", "some_block.0", "first value")` |
-| `.{KEY}` | Map key | `TestCheckResourceAttr("example_widget.foo", "some_map.some_key", "map value")` |
-| `.#` | Number of elements in list or set | `TestCheckResourceAttr("example_widget.foo", "some_list.#", "2")` |
-| `.%` | Number of keys in map | `TestCheckResourceAttr("example_widget.foo", "some_map.%", "2")` |
-
-### Custom check functions
-
-The `Check` field of `TestStep` accepts any function of type
-[TestCheckFunc](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestCheckFunc).
-Developers are free to write their own `check` functions to create customized
-validation functions for their plugin. Any function that matches the
-`TestCheckFunc` function signature of `func(*terraform.State) error` can be used
-individually, or with other `TestCheckFunc` functions with one of the above
-Aggregate functions.
-
-It's common to write custom `TestCheckFunc` functions to validate resources were
-created correctly by using SDKs directly to verify identity and properties of
-resources. These functions can retrieve information by SDKs and provide the
-results to other `TestCheckFunc` methods. The below example uses
-`ComposeTestCheckFunc` to group a set of `TestCheckFunc` functions together. The
-first function `testAccCheckExampleWidgetExists` uses the `Example` service SDK
-directly, and queries it for the ID of the widget we have in state. Once found,
-the result is stored into the `widget` struct declared at the beginning of the
-test function. The next check function `testAccCheckExampleWidgetAttributes`
-receives the updated `widget` and checks its attributes. The final check
-`TestCheckResourceAttr` verifies that the same value is stored in state.
-
-```go
-func TestAccExampleWidget_basic(t *testing.T) {
- var widget example.WidgetDescription
-
- resource.Test(t, resource.TestCase{
- PreCheck: func() { testAccPreCheck(t) },
- Providers: testAccProviders,
- CheckDestroy: testAccCheckExampleWidgetDestroy,
- Steps: []resource.TestStep{
- {
- Config: testAccExampleWidgetConfig,
- Check: resource.ComposeTestCheckFunc(
- testAccCheckExampleWidgetExists("example_widget.bar", &widget),
- testAccCheckExampleWidgetAttributes(&widget),
- resource.TestCheckResourceAttr("example_widget.bar", "active", "true"),
- ),
- },
- },
- })
-}
-
-// testAccCheckExampleWidgetAttributes verifies attributes are set correctly by
-// Terraform
-func testAccCheckExampleWidgetAttributes(widget *example.WidgetDescription) resource.TestCheckFunc {
- return func(s *terraform.State) error {
- if *widget.active != true {
- return fmt.Errorf("widget is not active")
- }
-
- return nil
- }
-}
-
-// testAccCheckExampleWidgetExists uses the Example SDK directly to retrieve
-// the Widget description, and stores it in the provided
-// *example.WidgetDescription
-func testAccCheckExampleWidgetExists(resourceName string, widget *example.WidgetDescription) resource.TestCheckFunc {
- return func(s *terraform.State) error {
- // retrieve the resource by name from state
- rs, ok := s.RootModule().Resources[resourceName]
- if !ok {
- return fmt.Errorf("Not found: %s", resourceName)
- }
-
- if rs.Primary.ID == "" {
- return fmt.Errorf("Widget ID is not set")
- }
-
- // retrieve the client from the test provider
- client := testAccProvider.Meta().(*ExampleClient)
-
- response, err := client.DescribeWidgets(&example.DescribeWidgetsInput{
- WidgetIDs: []string{rs.Primary.ID},
- })
-
- if err != nil {
- return err
- }
-
- // we expect only a single widget by this ID. If we find zero, or many,
- // then we consider this an error
- if len(response.WidgetDescriptions) != 1 ||
- *response.WidgetDescriptions[0].WidgetID != rs.Primary.ID {
- return fmt.Errorf("Widget not found")
- }
-
- // store the resulting widget in the *example.WidgetDescription pointer
- *widget = *response.WidgetDescriptions[0]
- return nil
- }
-}
-```
-
-## Sweepers
-
-Acceptance Testing is an essential approach to validating the implementation of a Terraform Provider. Using actual APIs to provision resources for testing can leave behind real infrastructure that costs money between tests. The reasons for these leaks can vary, regardless Terraform provides a mechanism known as [Sweepers](/terraform/plugin/testing/acceptance-tests/sweepers) to help keep the testing account clean.
\ No newline at end of file
diff --git a/website/docs/plugin/testing/acceptance-tests/tfjson-paths.mdx b/website/docs/plugin/testing/acceptance-tests/tfjson-paths.mdx
deleted file mode 100644
index 92302e040..000000000
--- a/website/docs/plugin/testing/acceptance-tests/tfjson-paths.mdx
+++ /dev/null
@@ -1,695 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Terraform JSON Paths'
-description: >-
- How to implement attribute paths in the testing module.
- Attribute paths represent the location of an attribute within Terraform JSON data.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Terraform JSON Paths
-
-An exact location within Terraform JSON data is referred to as a Terraform JSON or tfjson path.
-
-## Usage
-
-Example uses in the testing module include:
-
-- The `ExpectUnknownValue()` and `ExpectSensitiveValue()` [built-in plan checks](/terraform/plugin/testing/acceptance-tests/plan-checks#built-in-plan-checks) for specifying an attribute to make the check assertion against.
-
-## Concepts
-
-Terraform JSON Paths are designed around the underlying Go types corresponding to the Terraform JSON implementation of a schema and schema-based data. The [terraform-json](https://pkg.go.dev/github.com/hashicorp/terraform-json) library serves as the de-facto documentation for Terraform JSON data. Paths are always absolute and start from the root, or top level, of a JSON object.
-
-Given the tree structure of JSON objects, descriptions of paths and their steps borrow certain hierarchy terminology such as parent and child. A parent path describes a path without one or more of the final steps of a given path, or put differently, a partial path closer to the root of the object. A child path describes a path with one or more additional steps beyond a given path, or put differently, a path containing the given path but further from the root of the object.
-
-## Building Paths
-
-The `terraform-plugin-testing` module implementation for tfjson paths is in the [`tfjsonpath` package](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfjsonpath), with the [`tfjsonpath.Path` type](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfjsonpath#Path) being the main provider developer interaction point. Call the [`tfjsonpath.New()` function](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfjsonpath#New) with a property name at the root of the object to begin a path.
-
-Given the following JSON object
-
-```json
-{
- "first_name": "John",
- "last_name": "Doe",
- "age": 18,
- "street_address": "123 Terraform Dr.",
- "phone_numbers": [
- { "mobile": "111-111-1111" },
- { "home": "222-222-2222" }
- ]
-}
-```
-
-The call to `tfjsonpath.New()` which matches the location of `first_name` string value is:
-
-```go
-tfjsonpath.New("first_name")
-```
-
-Once a `tfjsonpath.Path` is started, it supports a builder pattern, which allows for chaining method calls to construct a full path.
-
-The path which matches the location of the string value `"222-222-222"` is:
-
-```go
-tfjsonpath.New("phone_numbers").AtSliceIndex(1).AtMapKey("home")
-```
-
-The most common usage of `tfjsonpath.Path` is to specify an attribute within Terraform JSON data. When used in this way, the root of the JSON object is the same as the root of a schema.
-The follow sections show how to build attribute paths for [primitive attributes](#building-attribute-paths), [aggregate attributes](#building-aggregate-type-attribute-paths), [nested attributes](#building-nested-attribute-paths), and [blocks](#building-block-paths).
-
-### Building Attribute Paths
-
-The following table shows the different [`tfjsonpath.Path` type](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfjsonpath#Path) methods associated with building paths for attribute implementations. Attribute types that cannot be traversed further are shown with N/A (not applicable).
-
-| Framework Attribute Type | SDKv2 Attribute Type | Child Path Method |
-|---------------------------|----------------------|-------------------|
-| `schema.BoolAttribute` | `schema.TypeBool` | N/A |
-| `schema.Float32Attribute` | `schema.TypeFloat` | N/A |
-| `schema.Float64Attribute` | `schema.TypeFloat` | N/A |
-| `schema.Int32Attribute` | `schema.TypeInt` | N/A |
-| `schema.Int64Attribute` | `schema.TypeInt` | N/A |
-| `schema.ListAttribute` | `schema.TypeList` | `AtSliceIndex()` |
-| `schema.MapAttribute` | `schema.TypeMap` | `AtMapKey()` |
-| `schema.NumberAttribute` | N/A | N/A |
-| `schema.ObjectAttribute` | N/A | `AtMapKey()` |
-| `schema.SetAttribute` | `schema.TypeSet` | `AtSliceIndex()` |
-| `schema.StringAttribute` | `schema.TypeString` | N/A |
-
-
-Given this example schema with a root attribute named `example_root_attribute`:
-
-```go
-//Terraform Plugin Framework
-schema.Schema{
- Attributes: map[string]schema.Attribute{
- "example_root_attribute": schema.StringAttribute{
- Required: true,
- },
- },
-}
-
-//Terraform Plugin SDKv2
-Schema: map[string]*schema.Schema{
- "example_root_attribute": {
- Type: schema.TypeString,
- Required: true,
- },
-},
-```
-
-And the following Terraform JSON object representation of the state:
-```json
-{
- "example_root_attribute": "example-value"
-}
-```
-
-The call to `tfjsonpath.New()` which matches the location of `example_root_attribute` string value is:
-
-```go
-tfjsonpath.New("example_root_attribute")
-```
-
-For blocks, the beginning of a path is similarly defined.
-
-Given this example schema with a root block named `example_root_block`:
-
-```go
-//Terraform Plugin Framework
-schema.Schema{
- Blocks: map[string]schema.Block{
- "example_root_block": schema.ListNestedBlock{
- NestedObject: schema.NestedBlockObject{/* ... */},
- },
- },
-}
-
-//Terraform Plugin SDKv2
-Schema: map[string]*schema.Schema{
- "example_root_block": {
- Type: schema.TypeList,
- Elem: &schema.Resource{
- Schema: map[string]*schema.Schema{/* ... */},
- },
- },
-},
-```
-
-And the following Terraform JSON object representation of the state:
-```json
-{
- "example_root_block": [
- {}
- ]
-}
-```
-
-The call to `tfjsonpath.New()` which matches the location of `example_root_block` slice value is:
-
-```go
-tfjsonpath.New("example_root_block")
-```
-
-### Building Aggregate Type Attribute Paths
-
-Given following schema example:
-
-```go
-//Terraform Plugin Framework
-schema.Schema{
- Attributes: map[string]schema.Attribute{
- "root_map_attribute": schema.MapAttribute{
- ElementType: types.StringType,
- Required: true,
- },
- "root_list_attribute": schema.ListAttribute{
- ElementType: types.StringType,
- Required: true,
- },
- "root_set_attribute": schema.SetAttribute{
- ElementType: types.StringType,
- Required: true,
- },
- },
-}
-
-//Terraform Plugin SDKv2
-Schema: map[string]*schema.Schema{
- "root_map_attribute": {
- Type: schema.TypeMap,
- Elem: &schema.Schema{
- Type: schema.TypeString,
- },
- Required: true,
- },
- "root_list_attribute": {
- Type: schema.TypeList,
- Elem: &schema.Schema{
- Type: schema.TypeString,
- },
- Required: true,
- },
- "root_set_attribute": {
- Type: schema.TypeSet,
- Elem: &schema.Schema{
- Type: schema.TypeString,
- },
- Required: true,
- },
-},
-```
-
-And the following Terraform JSON object representation of the state:
-```json
-{
- "root_map_attribute": {
- "example-key": "map-value"
- },
- "root_list_attribute": [
- "list-value1",
- "list-value2"
- ],
- "root_set_attribute": [
- "set-value1",
- "set-value2"
- ]
-}
-```
-
-The path which matches the string value associated with the map key `example-key` of the `root_map_attribute` attribute is:
-
-```go
-tfjsonpath.New("root_map_attribute").AtMapKey("example-key")
-```
-
-The path which matches the string value `list-value1` in the `root_list_attribute` attribute is:
-
-```go
-tfjsonpath.New("root_list_attribute").AtSliceIndex(0)
-```
-
-The path which matches the string value `set-value2` in the `root_set_attribute` attribute is:
-
-```go
-tfjsonpath.New("root_set_attribute").AtSliceIndex(1)
-```
-
-Note that because Sets are unordered in Terraform, the ordering of Set elements in the Terraform JSON data is not guaranteed to be the same as the ordering in the configuration.
-
-### Building Nested Attribute Paths
-
-The following table shows the different [`tfjsonpath.Path` type](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfjsonpath#Path) methods associated with building paths for nested attributes.
-
-| Nested Attribute Type | Child Path Method(s) |
-|--------------------------------|-----------------------------|
-| `schema.ListNestedAttribute` | `AtSliceIndex().AtMapKey()` |
-| `schema.MapNestedAttribute` | `AtMapKey().AtMapKey()` |
-| `schema.SetNestedAttribute` | `AtSliceIndex().AtMapKey()` |
-| `schema.SingleNestedAttribute` | `AtMapKey()` |
-
-Nested attributes eventually follow the same path rules as attributes at child paths, which follow the methods shown in the [Building Attribute Paths section](#building-attribute-paths).
-
-#### Building List Nested Attributes Paths
-
-An attribute that implements `schema.ListNestedAttribute` conceptually is a slice containing a map with attribute names as keys.
-
-Given the following schema example:
-
-```go
-schema.Schema{
- Attributes: map[string]schema.Attribute{
- "root_list_attribute": schema.ListNestedAttribute{
- NestedObject: schema.NestedAttributeObject{
- Attributes: map[string]schema.Attribute{
- "nested_string_attribute": schema.StringAttribute{
- Required: true,
- },
- },
- },
- Required: true,
- },
- },
-}
-```
-
-And the following Terraform JSON object representation of the state:
-```json
-{
- "root_list_attribute": [
- {
- "nested_string_attribute": "value"
- }
- ]
-}
-```
-
-The path which matches the slice associated with the `root_list_attribute` attribute is:
-
-```go
-tfjsonpath.New("root_list_attribute")
-```
-
-The path which matches the first map in the slice associated with the `root_list_attribute` attribute is:
-
-```go
-tfjsonpath.New("root_list_attribute").AtSliceIndex(0)
-```
-
-The path which matches the `nested_string_attribute` map key in the first map in the slice associated with `root_list_attribute` attribute is:
-
-```go
-tfjsonpath.New("root_list_attribute").AtSliceIndex(0).AtMapKey("nested_string_attribute")
-```
-
-#### Building Map Nested Attributes Paths
-
-An attribute that implements `schema.MapNestedAttribute` conceptually is a map containing values of maps with attribute names as keys.
-
-Given the following schema example:
-
-```go
-schema.Schema{
- Attributes: map[string]schema.Attribute{
- "root_map_attribute": schema.MapNestedAttribute{
- NestedObject: schema.NestedAttributeObject{
- Attributes: map[string]schema.Attribute{
- "nested_string_attribute": schema.StringAttribute{
- Required: true,
- },
- },
- },
- Required: true,
- },
- },
-}
-```
-
-And the following Terraform JSON object representation of the state:
-```json
-{
- "root_map_attribute": {
- "example-key" : {
- "nested_string_attribute": "value"
- }
- }
-}
-```
-
-The path which matches the map associated with the `root_map_attribute` attribute is:
-
-```go
-tfjsonpath.New("root_map_attribute")
-```
-
-The path which matches the `"example-key"` object in the map associated with the `root_map_attribute` attribute is:
-
-```go
-tfjsonpath.New("root_map_attribute").AtMapKey("example-key")
-```
-
-The path which matches the `nested_string_attribute` string value in a `"example-key"` object in the map associated with `root_map_attribute` attribute is:
-
-```go
-tfjsonpath.New("root_map_attribute").AtMapKey("example-key").AtMapKey("nested_string_attribute")
-```
-
-#### Building Set Nested Attributes Paths
-
-An attribute that implements `schema.SetNestedAttribute` conceptually is a slice containing maps with attribute names as keys.
-
-Given the following schema example:
-
-```go
-schema.Schema{
- Attributes: map[string]schema.Attribute{
- "root_set_attribute": schema.SetNestedAttribute{
- NestedObject: schema.NestedAttributeObject{
- Attributes: map[string]schema.Attribute{
- "nested_string_attribute": schema.StringAttribute{
- Required: true,
- },
- },
- },
- Required: true,
- },
- },
-}
-```
-
-And the following Terraform JSON object representation of the state:
-```json
-{
- "root_set_attribute": [
- {
- "nested_string_attribute": "value"
- }
- ]
-}
-```
-
-The path which matches the set associated with the `root_set_attribute` attribute is:
-
-```go
-tfjsonpath.New("root_set_attribute")
-```
-
-The path which matches the first map in the slice associated with the `root_set_attribute` attribute is:
-
-```go
-tfjsonpath.New("root_set_attribute").AtSliceIndex(0)
-```
-
-Note that because Sets are unordered in Terraform, the ordering of Set elements in the Terraform JSON data is not guaranteed to be the same as the ordering in the configuration.
-
-The path which matches the `nested_string_attribute` map key in the first map in the slice associated with `root_set_attribute` attribute is:
-
-```go
-tfjsonpath.New("root_set_attribute").AtSliceIndex(0).AtMapKey("nested_string_attribute")
-```
-
-#### Building Single Nested Attributes Paths
-
-An attribute that implements `schema.SingleNestedAttribute` conceptually is a map with attribute names as keys.
-
-Given the following schema example:
-
-```go
-schema.Schema{
- Attributes: map[string]schema.Attribute{
- "root_grouped_attributes": schema.SingleNestedAttribute{
- Attributes: map[string]schema.Attribute{
- "nested_string_attribute": schema.StringAttribute{
- Required: true,
- },
- },
- Required: true,
- },
- },
-}
-```
-
-And the following Terraform JSON object representation of the state:
-```json
-{
- "root_grouped_attributes": {
- "nested_string_attribute": "value"
- }
-}
-```
-
-The path which matches the map associated with the `root_grouped_attributes` attribute is:
-
-```go
-tfjsonpath.New("root_grouped_attributes")
-```
-
-The path which matches the `nested_string_attribute` string value in the map associated with the `root_grouped_attributes` attribute is:
-
-```go
-tfjsonpath.New("root_grouped_attributes").AtMapKey("nested_string_attribute")
-```
-
-### Building Block Paths
-
-The following table shows the different [`tfjsonpath.Path` type](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfjsonpath#Path) methods associated with building paths for blocks.
-
-| Block Type | Child Path Method(s) |
-|---------------------|-----------------------------|
-| `ListNestedBlock` | `AtSliceIndex().AtMapKey()` |
-| `SetNestedBlock` | `AtSliceIndex().AtMapKey()` |
-| `SingleNestedBlock` | `AtMapKey()` |
-
-Blocks can implement nested blocks. Paths can continue to be built using the associated method with each level of the block type.
-
-Blocks eventually follow the same path rules as attributes at child paths, which follow the methods shown in the [Building Attribute Paths section](#building-attribute-paths). Blocks cannot contain nested attributes.
-
-#### Building List Block Paths
-
-A `ListNestedBlock` conceptually is a slice containing maps with attribute or block names as keys.
-
-Given following schema example:
-
-```go
-//Terraform Plugin Framework
-schema.Schema{
- Blocks: map[string]schema.Block{
- "root_list_block": schema.ListNestedBlock{
- NestedObject: schema.NestedBlockObject{
- Attributes: map[string]schema.Attribute{
- "block_string_attribute": schema.StringAttribute{
- Required: true,
- },
- },
- Blocks: map[string]schema.Block{
- "nested_list_block": schema.ListNestedBlock{
- NestedObject: schema.NestedBlockObject{
- Attributes: map[string]schema.Attribute{
- "nested_block_string_attribute": schema.StringAttribute{
- Required: true,
- },
- },
- },
- },
- },
- },
- },
- },
-}
-
-//Terraform Plugin SDKv2
-Schema: map[string]*schema.Schema{
- "root_list_block": {
- Type: schema.TypeList,
- Elem: &schema.Resource{
- Schema: map[string]*schema.Schema{
- "block_string_attribute": {
- Type: schema.TypeString,
- Required: true,
- },
- "nested_list_block": {
- Type: schema.TypeList,
- Elem: &schema.Resource{
- Schema: map[string]*schema.Schema{
- "nested_block_string_attribute": {
- Type: schema.TypeString,
- Required: true,
- },
- },
- },
- },
- },
- },
- },
-},
-```
-
-And the following Terraform JSON object representation of the state:
-```json
-{
- "root_list_block": [
- {
- "block_string_attribute": "value1",
- "nested_list_block": [
- {"nested_block_string_attribute": "value2"}
- ]
- }
- ]
-}
-```
-
-The path which matches the slice associated with the `root_list_block` block is:
-
-```go
-tfjsonpath.New("root_list_block")
-```
-
-The path which matches the first map in the slice associated with the `root_list_block` block is:
-
-```go
-tfjsonpath.New("root_list_block").AtSliceIndex(0)
-```
-
-The path which matches the `block_string_attribute` string value in the first map in the slice associated with `root_list_block` block is:
-
-```go
-tfjsonpath.New("root_list_block").AtSliceIndex(0).AtMapKey("block_string_attribute")
-```
-
-The path which matches the `nested_list_block` slice in the first object in the slice associated with `root_list_block` block is:
-
-```go
-tfjsonpath.New("root_list_block").AtSliceIndex(0).AtMapKey("nested_list_block")
-```
-
-The path which matches the `nested_block_string_attribute` string value in the first map in the slice associated with the `nested_list_block` slice in the first map in the slice associated with `root_list_block` block is:
-
-```go
-tfjsonpath.New("root_list_block").AtSliceIndex(0).AtMapKey("nested_list_block").AtSliceIndex(0).AtMapKey("nested_block_string_attribute")
-```
-
-#### Building Set Block Paths
-
-A `SetNestedBlock` conceptually is a slice containing maps with attribute or block names as keys.
-
-Given following schema example:
-
-```go
-//Terraform Plugin Framework
-schema.Schema{
- Blocks: map[string]schema.Block{
- "root_set_block": schema.SetNestedBlock{
- NestedObject: schema.NestedBlockObject{
- Attributes: map[string]schema.Attribute{
- "block_string_attribute": schema.StringAttribute{
- Optional: true,
- },
- },
- },
- },
- },
-}
-
-//Terraform Plugin SDKv2
-Schema: map[string]*schema.Schema{
- "root_set_block": {
- Type: schema.TypeSet,
- Elem: &schema.Resource{
- Schema: map[string]*schema.Schema{
- "block_string_attribute": {
- Type: schema.TypeString,
- Optional: true,
- },
- },
- },
- },
-},
-```
-
-And the following Terraform JSON object representation of the state:
-```json
-{
- "root_set_block": [
- {
- "block_string_attribute": "value1"
- }
- ]
-}
-```
-
-The path which matches the slice associated with the `root_set_block` block is:
-
-```go
-tfjsonpath.New("root_set_block")
-```
-
-
-The path which matches the first map in the slice associated with the `root_set_block` block is:
-
-```go
-tfjsonpath.New("root_set_block").AtSliceIndex(0)
-```
-
-Note that because sets are unordered in Terraform, the ordering of set elements in the Terraform JSON data is not guaranteed to be the same as the ordering in the configuration.
-
-The path which matches the `block_string_attribute` string value in the first map in the slice associated with `root_set_block` block is:
-
-```go
-tfjsonpath.New("root_set_block").AtSliceIndex(0).AtMapKey("block_string_attribute")
-````
-
-#### Building Single Block Paths
-
-A `SingleNestedBlock` conceptually is a map with attribute or block names as keys.
-
-Given following schema example:
-
-```go
-//Terraform Plugin Framework
-schema.Schema{
- Blocks: map[string]schema.Block{
- "root_single_block": schema.SingleNestedBlock{
- Attributes: map[string]schema.Attribute{
- "block_string_attribute": schema.StringAttribute{
- Required: true,
- },
- },
- Blocks: map[string]schema.Block{
- "nested_single_block": schema.SingleNestedBlock{
- Attributes: map[string]schema.Attribute{
- "nested_block_string_attribute": schema.StringAttribute{
- Required: true,
- },
- },
- },
- },
- },
- },
-}
-```
-
-The path which matches the map associated with the `root_single_block` block is:
-
-```go
-tfjsonpath.New("root_single_block")
-```
-
-The path which matches the `block_string_attribute` string value in the map associated with `root_single_block` block is:
-
-```go
-tfjsonpath.New("root_single_block").AtMapKey("block_string_attribute")
-```
-
-The path which matches the `nested_single_block` map in the map associated with `root_single_block` block is:
-
-```go
-tfjsonpath.New("root_single_block").AtMapKey("nested_single_block")
-```
-
-The path which matches the `nested_block_string_attribute` string value in the map associated with the `nested_single_block` in the map associated with `root_single_block` block is:
-
-```go
-tfjsonpath.New("root_single_block").AtMapKey("nested_single_block").AtMapKey("nested_block_string_attribute")
-```
diff --git a/website/docs/plugin/testing/acceptance-tests/tfversion-checks.mdx b/website/docs/plugin/testing/acceptance-tests/tfversion-checks.mdx
deleted file mode 100644
index 7fda56cf4..000000000
--- a/website/docs/plugin/testing/acceptance-tests/tfversion-checks.mdx
+++ /dev/null
@@ -1,270 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Terraform Version Checks'
-description: >-
- Terraform Version Checks are generic checks defined at the TestCase level that check logic against the Terraform CLI version. The testing module
- provides built-in Version Checks for common use-cases, but custom Version Checks can also be implemented.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Terraform Version Checks
-
-**Terraform Version Checks** are generic checks defined at the TestCase level that check logic against the Terraform CLI version. The checks are executed at the beginning of the TestCase before any TestStep is executed.
-
-The Terraform CLI version is determined by the binary selected by the [`TF_ACC_TERRAFORM_PATH`](/terraform/plugin/testing/acceptance-tests#environment-variables) environment variable value, installed by the [`TF_ACC_TERRAFORM_VERSION`](/terraform/plugin/testing/acceptance-tests#environment-variables) value, or already existing based on the `PATH` environment variable.
-
-A **version check** will either return an error and fail the associated test, return a skip message and pass the associated test immediately by skipping, or it will return nothing and allow the associated test to run.
-
-Terraform CLI prerelease versions include a `-alphaYYYYMMDD`, `-beta#`, or `rc#` (release candidate) suffix for a minor version with `0` patch version. For example, `1.8.0-rc1`. Prereleases of Terraform are considered semantically equivalent to the associated minor version since prereleases are when any new features are introduced.
-
-## Built-in Version Checks and Variables
-
-The `terraform-plugin-testing` module provides a package [`tfversion`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion) with built-in version checks for common use-cases. There are three types of version checks: Skip Checks, Require Checks, and Collection Checks.
-
-
-
-Built-in version checks handle prereleases of a minor version as semantically equivalent to given minor versions. For example, if the test includes `tfversion.SkipBelow(tfversion.Version1_8_0)` and the running Terraform CLI version is `1.8.0-rc1`, the test will run, not skip. This is intended to enable prerelease testing of new features.
-
-
-
-### Version Variables
-
-The built-in checks in the `tfversion` package typically require the use of the [`github.com/hashicorp/go-version`](https://pkg.go.dev/github.com/hashicorp/go-version) module [`version.Version`](https://pkg.go.dev/github.com/hashicorp/go-version#Version) type. To simplify provider testing implementations, the `tfversion` package provides [built-in variables](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#pkg-variables) for common use case versions, such as each released minor and major Terraform version. These follow the pattern of `Version{MAJOR}_{MINOR}_{PATCH}` with the major, minor, and patch version numbers, such as `Version1_2_0`.
-
-### Skip Version Checks
-
-Skip Version Checks will pass the associated test by skipping and provide a skip message if the detected Terraform CLI version satisfies the specified check criteria.
-
-| Check | Description |
-|---------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
-| [`tfversion.SkipAbove(maximumVersion)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#SkipAbove) | Skips the test if the Terraform CLI version is exclusively above the given maximum. |
-| [`tfversion.SkipBelow(minimumVersion)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#SkipBelow) | Skips the test if the Terraform CLI version is exclusively below the given minimum. |
-| [`tfversion.SkipBetween(minimumVersion, maximumVersion)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#SkipBetween) | Skips the test if the Terraform CLI version is between the given minimum (inclusive) and maximum (exclusive). |
-| [`tfversion.SkipIf(version)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#SkipIf) | Skips the test if the Terraform CLI version matches the given version. |
-
-#### Example using `tfversion.SkipBetween`
-
-The built-in [`tfversion.SkipBetween`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#SkipBetween) version check is useful for skipping all patch versions associated with a minor version.
-
-In the following example, we have written a test that skips all Terraform CLI patch versions associated with 0.14.0:
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-go/tfprotov6"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/tfversion"
-)
-
-func Test_Skip_TF14(t *testing.T) {
- t.Parallel()
-
- resource.UnitTest(t, resource.TestCase{
- ProtoV6ProviderFactories: map[string]func() (tfprotov6.ProviderServer, error){
- "test": func() (tfprotov6.ProviderServer, error) {
- return nil, nil
- },
- },
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.SkipBetween(tfversion.Version0_14_0, tfversion.Version0_15_0),
- },
- Steps: []resource.TestStep{
- {
- Config: `//example test config`,
- },
- },
- })
-}
-```
-
-### Require Version Checks
-
-Require Version Checks will raise an error and fail the associated test if the detected Terraform CLI version does not satisfy the specified check requirements.
-
-| Check | Description |
-|---------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
-| [`tfversion.RequireAbove(minimumVersion)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#RequireAbove) | Fails the test if the Terraform CLI version is exclusively below the given minimum. |
-| [`tfversion.RequireBelow(maximumVersion)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#RequireBelow) | Fails the test if the Terraform CLI version is inclusively above the given maximum. |
-| [`tfversion.RequireBetween(minimumVersion, maximumVersion)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#RequireBetween) | Fails the test if the Terraform CLI version is outside the given minimum (exclusive) and maximum (inclusive). |
-| [`tfversion.RequireNot(version)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#RequireNot) | Fails the test if the Terraform CLI version matches the given version. |
-
-
-#### Example using `tfversion.RequireAbove`
-
-The built-in [`tfversion.RequireAbove`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#RequireAbove) version check is useful for required tests that may use features only available in newer versions of the Terraform ClI.
-
-In the following example, the test Terraform configuration uses the `nullable` argument for an input variable, a feature that is only available in Terraform CLI versions `1.3.0` and above. The version check will fail the test with a specific error if the detected version is below `1.3.0`.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-go/tfprotov6"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/tfversion"
-)
-
-func Test_Require_TF1_3(t *testing.T) {
- t.Parallel()
-
- resource.UnitTest(t, resource.TestCase{
- ProtoV6ProviderFactories: map[string]func() (tfprotov6.ProviderServer, error){
- "test": func() (tfprotov6.ProviderServer, error) {
- return nil, nil
- },
- },
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.RequireAbove(tfversion.Version1_3_0),
- },
- Steps: []resource.TestStep{
- {
- Config: `variable "a" {
- nullable = true
- default = "hello"
- }`,
- },
- },
- })
-}
-```
-
-### Collection Version Checks
-
-Collection Version Checks operate on multiple version checks and can be used to create more complex checks.
-
-[`tfversion.Any(TerraformVersionChecks...)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#Any) will run the associated test by returning a nil error and empty skip message
-if any of the given version sub-checks return a nil error and empty skip message. If none of the sub-checks return a nil error and empty skip message, then the check will return all sub-check errors and fail the associated test.
-Otherwise, if none of the sub-checks return a non-nil error, the check will pass the associated test by skipping and return all sub-check skip messages.
-
-[`tfversion.All(TerraformVersionChecks...)`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#All) will either fail or skip the associated test if any of the given sub-checks return a non-nil error or non-empty skip message. The check will return the
-first non-nil error or non-empty skip message from the given sub-checks in the order that they are given. Otherwise, if all sub-checks return a nil error and empty skip message, then the check will return a nil error and empty skip message and run the associated test. This check should only be
-used in conjunction with `tfversion.Any()` as the behavior provided by this check is applied to the `TerraformVersionChecks` field by default.
-
-#### Example using `tfversion.Any`
-
-In the following example, the test will only run if either the Terraform CLI version is above `1.2.0` or if it's below `1.0.0` but not version `0.15.0`, otherwise an error will be returned.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-go/tfprotov6"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/tfversion"
-)
-
-func Test_Any(t *testing.T) {
- t.Parallel()
-
- resource.UnitTest(t, resource.TestCase{
- ProtoV6ProviderFactories: map[string]func() (tfprotov6.ProviderServer, error){
- "test": func() (tfprotov6.ProviderServer, error) { //nolint:unparam // required signature
- return nil, nil
- },
- },
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.Any(
- tfversion.All(
- tfversion.RequireNot(tfversion.Version0_15_0),
- tfversion.RequireBelow(tfversion.Version1_0_0),
- ),
- tfversion.RequireAbove(tfversion.Version1_2_0),
- ),
- },
- Steps: []resource.TestStep{
- {
- Config: `//example test config`,
- },
- },
- })
-}
-```
-
-
-## Custom Version Checks
-
-The package [`tfversion`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion) also provides the [`TerraformVersionCheck`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#TerraformVersionCheck) interface, which can be implemented for a custom version check.
-
-The [`tfversion.CheckTerraformVersionRequest`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#CheckTerraformVersionRequest) has a `TerraformVersion` field of type [`*version.Version`](https://pkg.go.dev/github.com/hashicorp/go-version#Version) which contains the version of the Terraform CLI binary running the test.
-
-The [`tfversion.CheckTerraformVersionResponse`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/tfversion#CheckTerraformVersionResponse) has an `Error` field and a `Skip` field. The behavior of the version check depends on which field is populated. Populating the `Error` field will fail the associated test with the given error.
-Populating the `Skip` field will pass the associated test by skipping the test with the given skip message. Only one of these fields should be populated.
-
-Here is an example implementation of a version check returns an error if the detected Terraform CLI version matches the given version:
-
-```go
-package example_test
-
-import (
- "context"
- "fmt"
-
- "github.com/hashicorp/go-version"
-)
-
-// Ensure implementation satisfies the tfversion.TerraformVersionCheck interface.
-var _ tfversion.TerraformVersionCheck = requireNotCheck{}
-
-// RequireNot will fail the test if the given version matches.
-func RequireNot(v *version.Version) tfversion.TerraformVersionCheck {
- return requireNotCheck{
- version: v,
- }
-}
-
-type requireNotCheck struct {
- version *version.Version
-}
-
-func (s requireNotCheck) CheckTerraformVersion(ctx context.Context, req tfversion.CheckTerraformVersionRequest, resp *tfversion.CheckTerraformVersionResponse) {
- if req.TerraformVersion.Equal(s.version) {
- resp.Error = fmt.Errorf("unexpected Terraform CLI version: %s", s.version)
- }
-}
-```
-
-And example usage:
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-go/tfprotov6"
-
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/tfversion"
-)
-
-func Test_RequireNot(t *testing.T) {
- t.Parallel()
-
- resource.UnitTest(t, resource.TestCase{
- ProtoV6ProviderFactories: map[string]func() (tfprotov6.ProviderServer, error){
- "test": func() (tfprotov6.ProviderServer, error) {
- return nil, nil
- },
- },
- TerraformVersionChecks: []tfversion.TerraformVersionCheck{
- tfversion.RequireNot(tfversion.Version0_13_0),
- },
- Steps: []resource.TestStep{
- {
- Config: `//example test config`,
- },
- },
- })
-}
-```
diff --git a/website/docs/plugin/testing/acceptance-tests/value-comparers/index.mdx b/website/docs/plugin/testing/acceptance-tests/value-comparers/index.mdx
deleted file mode 100644
index 99d640927..000000000
--- a/website/docs/plugin/testing/acceptance-tests/value-comparers/index.mdx
+++ /dev/null
@@ -1,186 +0,0 @@
----
-page_title: 'Plugin Development - Acceptance Testing: Value Comparers'
-description: >-
- How to use value comparers in the testing module.
- Value comparers define a comparison for a resource attribute, or output value for use in State Checks.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Value Comparers
-
-
-
-Value Comparers are for use in conjunction with [State Checks](/terraform/plugin/testing/acceptance-tests/state-checks), which leverage the [terraform-json](https://pkg.go.dev/github.com/hashicorp/terraform-json) representation of Terraform state.
-
-
-
-Value comparers can be used to assert a resource or data source attribute value across multiple [Test Steps](/terraform/plugin/testing/acceptance-tests/teststep), like asserting that a randomly generated resource attribute doesn't change after multiple apply steps. This is done by creating the value comparer, typically before the test case is defined, using the relevant constructor function:
-```go
-func TestExample(t *testing.T) {
- // Create the value comparer so we can add state values to it during the test steps
- compareValuesDiffer := statecheck.CompareValue(compare.ValuesDiffer())
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- // .. test steps omitted
- },
- })
-}
-```
-
-Once the value comparer is created, state values can be added in `TestStep.ConfigStateChecks`:
-```go
-func TestExample(t *testing.T) {
- // Create the value comparer so we can add state values to it during the test steps
- compareValuesDiffer := statecheck.CompareValue(compare.ValuesDiffer())
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- // Add the current state value of "computed_attribute" to the value comparer.
- // Since there are no other state values at this point, no assertion is made.
- compareValuesDiffer.AddStateValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- ),
- },
- },
- {
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- // Add the current state value of "computed_attribute" to the value comparer.
- // Since there is an existing state value in the value comparer at this point,
- // if the two values are equal, the test will produce an error.
- compareValuesDiffer.AddStateValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- ),
- },
- },
- },
- })
-}
-```
-
-The value comparer implementation (defined by the [`ValueComparer` interface](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/compare#ValueComparer)) determines what assertion occurs when a state value is added. The built-in value comparers are:
-- [`CompareValue()`](/terraform/plugin/testing/acceptance-tests/state-checks/resource#comparevalue-state-check)
-- [`CompareValueCollection()`](/terraform/plugin/testing/acceptance-tests/state-checks/resource#comparevaluecollection-state-check)
-- [`CompareValuePairs()`](/terraform/plugin/testing/acceptance-tests/state-checks/resource#comparevaluepairs-state-check)
-
-## Values Differ
-
-The [ValuesDiffer](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/compare#ValuesDiffer) value comparer verifies that each value in the sequence of values supplied to the `CompareValues()` method differs from the preceding value.
-
-Example usage of [ValuesDiffer](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/compare#ValuesDiffer) in a [CompareValue](/terraform/plugin/testing/acceptance-tests/state-checks/resource#comparevalue-state-check) state check.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
-
- "github.com/hashicorp/terraform-plugin-testing/compare"
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/statecheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
-)
-
-func TestCompareValue_CheckState_ValuesDiffer(t *testing.T) {
- t.Parallel()
-
- compareValuesDiffer := statecheck.CompareValue(compare.ValuesDiffer())
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- // Add the current state value of "computed_attribute" to the value comparer.
- // Since there are no other state values at this point, no assertion is made.
- compareValuesDiffer.AddStateValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- ),
- },
- },
- {
- // Add the current state value of "computed_attribute" to the value comparer.
- // Since there is an existing state value in the value comparer at this point,
- // if the two values are equal, the test will produce an error.
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- compareValuesDiffer.AddStateValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- ),
- },
- },
- },
- })
-}
-```
-
-## Values Same
-
-The [ValuesSame](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/compare#ValuesSame) value comparer verifies that each value in the sequence of values supplied to the `CompareValues()` method is the same as the preceding value.
-
-Example usage of [ValuesSame](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/compare#ValuesSame) in a [CompareValue](/terraform/plugin/testing/acceptance-tests/state-checks/resource#comparevalue-state-check) state check.
-
-```go
-package example_test
-
-import (
- "testing"
-
- "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
-
- "github.com/hashicorp/terraform-plugin-testing/compare"
- "github.com/hashicorp/terraform-plugin-testing/helper/resource"
- "github.com/hashicorp/terraform-plugin-testing/statecheck"
- "github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
-)
-
-func TestCompareValue_CheckState_ValuesSame(t *testing.T) {
- t.Parallel()
-
- compareValuesSame := statecheck.CompareValue(compare.ValuesSame())
-
- resource.Test(t, resource.TestCase{
- // Provider definition omitted.
- Steps: []resource.TestStep{
- {
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- // Add the current state value of "computed_attribute" to the value comparer.
- // Since there are no other state values at this point, no assertion is made.
- compareValuesSame.AddStateValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- ),
- },
- },
- {
- Config: `resource "test_resource" "one" {}`,
- ConfigStateChecks: []statecheck.StateCheck{
- // Add the current state value of "computed_attribute" to the value comparer.
- // Since there is an existing state value in the value comparer at this point,
- // if the two values are not equal, the test will produce an error.
- compareValuesSame.AddStateValue(
- "test_resource.one",
- tfjsonpath.New("computed_attribute"),
- ),
- },
- },
- },
- })
-}
-```
diff --git a/website/docs/plugin/testing/index.mdx b/website/docs/plugin/testing/index.mdx
deleted file mode 100644
index 6e6a86383..000000000
--- a/website/docs/plugin/testing/index.mdx
+++ /dev/null
@@ -1,76 +0,0 @@
----
-page_title: Plugin Development - Testing
-description: |-
- Learn how to write successful acceptance and unit tests for Terraform
- plugins.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Testing Terraform Plugins
-
-Here we cover information needed to write successful tests for Terraform
-Plugins. Tests are a vital part of the Terraform ecosystem, verifying we can
-deliver on our mission to safely and predictably create, change, and improve
-infrastructure. Documentation for Terraform tests falls into categories
-briefly described on this page. Each category has more detailed information on a separate page within the documentation.
-
--> **Note:** Recent versions of Terraform CLI also support [developer overrides in the CLI configuration](/terraform/cli/config/config-file#development-overrides-for-provider-developers), which can be useful for manually testing providers. The acceptance testing framework uses real Terraform CLI executions, so we only recommend developer overrides as a last resort option for missing functionality.
-
-## Acceptance Tests
-
-In order to
-deliver on our promise to be safe and predictable, we need to be able to easily
-and routinely verify that Terraform Plugins produce the expected outcome. The
-most common usage of an acceptance test is in Terraform Providers, where each
-Resource is tested with configuration files and the resulting infrastructure is
-verified. Terraform includes a framework for constructing acceptance tests that
-imitate the execution of one or more steps of applying one or more configuration
-files, allowing multiple scenarios to be tested.
-
-It's important to reiterate that acceptance tests in resources _create actual
-cloud infrastructure_, with possible expenses incurred, and are the
-responsibility of the user running the tests. Creating real infrastructure in
-tests verifies the described behavior of Terraform Plugins in real world use
-cases against the actual APIs, and verifies both local state and remote values
-match. Acceptance tests require a network connection and often require
-credentials to access an account for the given API. When writing and testing
-plugins, **it is highly recommended to use an account dedicated to testing, to
-ensure no infrastructure is created in error in any environment that cannot be
-completely and safely destroyed.**
-
-For a given plugin, Acceptance Tests can be run from the root of the project by
-using a common make task:
-
-```shell
-$ make testacc
-```
-
-See [Acceptance Testing](/terraform/plugin/testing/acceptance-tests) to learn more.
-
-## Unit Tests
-
-Testing plugin code in small, isolated units is distinct from Acceptance Tests,
-and does not require network connections. Unit tests are commonly used for
-testing helper methods that expand or flatten API response data into data
-structures for storage into state by Terraform. This section covers the
-specifics of writing Unit Tests for Terraform Plugin code.
-
-For a given plugin, Unit Tests can be run from the root of the project by using
-a common make task:
-
-```shell
-$ make test
-```
-
-See [Unit Testing](/terraform/plugin/testing/unit-testing) to learn more.
-
-## Testing Patterns
-
-Terraform developers are encouraged to write acceptance tests that create real
-resource to verify the behavior of plugins, ensuring a reliable and safe
-way to manage infrastructure. In [Testing Patterns](/terraform/plugin/testing/testing-patterns) we cover
-some basic acceptance tests that almost all resources should have to validate
-not only the functionality of the resource, but that the resource behaves as
-Terraform would expect.
\ No newline at end of file
diff --git a/website/docs/plugin/testing/migrating.mdx b/website/docs/plugin/testing/migrating.mdx
deleted file mode 100644
index f4a9c75e5..000000000
--- a/website/docs/plugin/testing/migrating.mdx
+++ /dev/null
@@ -1,136 +0,0 @@
----
-page_title: 'Plugin Development: Migrating testing from SDKv2 to the testing module'
-description: >-
- Migrate your provider's acceptance testing dependencies from SDKv2 to the testing module.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Overview
-
-This guide helps you migrate a Terraform provider's acceptance testing dependencies from SDKv2 to the plugin testing module. We recommend migrating to terraform-plugin-testing to take advantage of new features of the testing module and to avoid importing the SDKv2 for providers that are built on the plugin Framework.
-
-This guide provides information and examples for most common use cases, but it does not discuss every nuance of migration. You can ask additional migration questions in the [HashiCorp Discuss forum](https://discuss.hashicorp.com/c/terraform-providers/tf-plugin-sdk/43). To request additions or updates to this guide, submit issues or pull requests to the [`terraform-plugin-testing` repository](https://github.com/hashicorp/terraform-plugin-testing).
-
-## Migration steps
-
-Take the following steps when you migrate a provider's acceptance tests from SDKv2 to the testing module.
-
-Change all instances of the following Go import statements in `*_test.go` files:
-
-| Original Import | Migrated Import |
-|---|---|
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest` | `github.com/hashicorp/terraform-plugin-testing/helper/acctest` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource` | `github.com/hashicorp/terraform-plugin-testing/helper/resource` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/terraform` | `github.com/hashicorp/terraform-plugin-testing/terraform` |
-
-If the provider implements terraform-plugin-sdk based state migration unit testing with `github.com/hashicorp/terraform-plugin-sdk/v2/terraform.InstanceState`, this must remain with the original import since it is testing terraform-plugin-sdk functionality.
-
-Verify if the `TestStep` type `PlanOnly` field is enabled in any tests where the final `TestStep` is intentionally changing the provider setup to ensure schema changes (e.g. state upgrades or SDK to framework migrations) cause no plan differences. In those tests, replace `PlanOnly` with `ConfigPlanChecks` containing a `PreApply` check of `plancheck.ExpectEmptyPlan()` instead:
-
-```go
-resource.Test(t, resource.TestCase{
- // ...
- Steps: []resource.TestStep{
- { /* ... */ },
- {
- // ...
- // The below replacing PlanOnly: true
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectEmptyPlan(),
- },
- },
- },
- },
-})
-```
-
-Change all instances of the following in **non-test** `*.go` files:
-
-| Original Reference | Migrated Reference |
-|---|---|
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.NonRetryableError` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.NonRetryableError` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.NotFoundError` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.NotFoundError` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.PrefixedUniqueId` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/id.PrefixedUniqueId` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.Retry` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.Retry` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.RetryableError` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.RetryableError` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.RetryContext` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.RetryContext` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.RetryError` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.RetryError` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.RetryFunc` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.RetryFunc` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.StateChangeConf` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.StateChangeConf` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.StateRefreshFunc` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.StateRefreshFunc` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.TimeoutError` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.TimeoutError` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.UnexpectedStateError` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.UnexpectedStateError` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.UniqueId` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/id.UniqueId` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.UniqueIdPrefix` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/id.UniqueIdPrefix` |
-| `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource.UniqueIDSuffixLength` | `github.com/hashicorp/terraform-plugin-sdk/v2/helper/id.UniqueIDSuffixLength` |
-
-Get and download the latest version of terraform-plugin-testing:
-
-```shell
-$ go get github.com/hashicorp/terraform-plugin-testing@latest
-```
-
-Clean up `go.mod`:
-
-```shell
-$ go mod tidy
-```
-
-Verify that the tests are working as expected.
-
-## Troubleshooting
-
-### flag redefined Panic
-
-This panic occurs when your provider code imports both the `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource` and `github.com/hashicorp/terraform-plugin-testing/helper/resource` packages because they contain a duplicate `TestMain` function:
-
-```text
-panic: XXX flag redefined: sweep
-
-goroutine 1 [running]:
-flag.(*FlagSet).Var(0x14000030240, {0x10132b6d8, 0x140002219c0}, {0x10103ad88, 0x5}, {0x10105d47b, 0x29})
- /usr/local/go/src/flag/flag.go:982 +0x2a4
-flag.(*FlagSet).StringVar(...)
- /usr/local/go/src/flag/flag.go:847
-flag.(*FlagSet).String(0x1400031fb98?, {0x10103ad88, 0x5}, {0x0, 0x0}, {0x10105d47b, 0x29})
- /usr/local/go/src/flag/flag.go:860 +0x98
-flag.String(...)
- /usr/local/go/src/flag/flag.go:867
-github.com/hashicorp/terraform-plugin-testing/helper/resource.init()
- /XXX/go/pkg/mod/github.com/hashicorp/terraform-plugin-testing@v1.1.0/helper/resource/testing.go:53 +0x44
-```
-
-Remove imports of `github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource` to resolve the issue. terraform-plugin-sdk version 2.26.0 introduced separate packages, [`github.com/hashicorp/terraform-plugin-sdk/v2/helper/id`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-sdk/v2/helper/id) and [`github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry), which contain all non-testing functionality.
-
-### Failed to marshal state to json
-
-This error can occur when your testing includes `PlanOnly: true` in final `TestStep` that is intentionally changing the provider setup to ensure schema changes (e.g. state upgrades or SDK to framework migrations) cause no plan differences:
-
-```text
-Failed to marshal state to json: schema version 0 for examplecloud_thing.test in state does not match version 1 from the provider
-# or in the case of removed attributes between provider versions:
-Failed to marshal state to json: unsupported attribute
-```
-
-In those tests, replace `PlanOnly` with `ConfigPlanChecks` containing a `PreApply` check of `plancheck.ExpectEmptyPlan()` instead:
-
-```go
-resource.Test(t, resource.TestCase{
- // ...
- Steps: []resource.TestStep{
- { /* ... at least one prior step ... */ },
- {
- // ...
- // Replacing PlanOnly: true
- ConfigPlanChecks: resource.ConfigPlanChecks{
- PreApply: []plancheck.PlanCheck{
- plancheck.ExpectEmptyPlan(),
- },
- },
- },
- },
-})
-```
diff --git a/website/docs/plugin/testing/testing-patterns.mdx b/website/docs/plugin/testing/testing-patterns.mdx
deleted file mode 100644
index 93c80c11b..000000000
--- a/website/docs/plugin/testing/testing-patterns.mdx
+++ /dev/null
@@ -1,339 +0,0 @@
----
-page_title: Plugin Development - Testing Patterns
-description: |-
- Testing Patterns covers essential acceptance test patterns to implement for
- Terraform resources.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Testing Patterns
-
-In [Testing Terraform Plugins][1] we introduce Terraform's Testing Framework,
-providing reference for its functionality and introducing the basic parts of
-writing acceptance tests. In this section we'll cover some test patterns that
-are common and considered a best practice to have when developing and verifying
-your Terraform plugins. At time of writing these guides are particular to
-Terraform Resources, but other testing best practices may be added later.
-
-## Table of Contents
-
-- [Built-in Patterns](#built-in-patterns)
-- [Basic test to verify attributes](#basic-test-to-verify-attributes)
-- [Update test verify configuration changes](#update-test-verify-configuration-changes)
-- [Expecting errors or non-empty plans](#expecting-errors-or-non-empty-plans)
-- [Regression tests](#regression-tests)
-
-## Built-in Patterns
-
-Acceptance tests use [TestCases][2] to construct scenarios that can be evaluated
-with Terraform's lifecycle of plan, apply, refresh, and destroy. The test
-framework has some behaviors built in that provide very basic workflow assurance
-tests, such as verifying configurations apply with no diff generated by the next
-plan.
-
-Each TestCase will run any [PreCheck][3] function provided before running the
-test, and then any [CheckDestroy][4] functions after the test concludes. These
-functions allow developers to verify the state of the resource and test before
-and after it runs.
-
-When a test is ran, Terraform runs plan, apply, refresh, and then final plan for
-each [TestStep][5] in the TestCase. If the last plan results in a non-empty
-plan, Terraform will exit with an error. This enables developers to ensure that
-configurations apply cleanly. In the case of introducing regression tests or
-otherwise testing specific error behavior, TestStep offers a boolean field
-[ExpectNonEmptyPlan][6] as well [ExpectError][7] regex field to specify ways the
-test framework can handle expected failures. If these properties are omitted and
-either a non-empty plan occurs or an error encountered, Terraform will fail the
-test.
-
-After all TestSteps have been ran, Terraform then runs destroy, and ends by
-running any CheckDestroy function provided.
-
-[Back to top](#table-of-contents)
-
-## Basic test to verify attributes
-
-The most basic resource acceptance test should use what is likely to be a common
-configuration for the resource under test, and verify that Terraform can
-correctly create the resource, and that resources attributes are what Terraform
-expects them to be. At a high level, the first basic test for a resource should
-establish the following:
-
-- Terraform can plan and apply a common resource configuration without error.
-- Verify the expected attributes are saved to state, and contain the values
- expected.
-- Verify the values in the remote API/Service for the resource match
- what is stored in state.
-- Verify that a subsequent terraform plan does not produce
- a diff/change.
-
-The first and last item are provided by the test framework as described above in
-**Built-in Patterns**. The middle items are implemented by composing a series of
-State Check implementations as described in [Acceptance Tests: State Checks][8].
-
-To verify attributes are saved to the state file correctly, use a combination of
-the built-in [`statecheck`](https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/statecheck)
-implementations provided by the testing framework. See [Resource State Checks][9] to see available
-state checks for managed resource and data source attributes.
-
-Checking the values in a remote API generally consists of two parts: a function
-to verify the corresponding object exists remotely, and a state check implementation to
-verify the values of the object. By separating the check used to verify the
-object exists into its own function, developers are free to re-use it for all
-TestSteps as a means of retrieving it's values, and can provide [custom state checks][10]
-functions per TestStep to verify remote values or scenarios specific to that TestStep.
-
-Here's an example test, with in-line comments to demonstrate the key parts of a
-basic test.
-
-```go
-package example
-
-// example.Widget represents a concrete Go type that represents an API resource
-func TestAccExampleWidget_basic(t *testing.T) {
- var widget example.Widget
-
- // generate a random name for each widget test run, to avoid
- // collisions from multiple concurrent tests.
- // the acctest package includes many helpers such as RandStringFromCharSet
- // See https://pkg.go.dev/github.com/hashicorp/terraform-plugin-sdk/helper/acctest
- rName := acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)
-
- resource.Test(t, resource.TestCase{
- PreCheck: func() { testAccPreCheck(t) },
- Providers: testAccProviders,
- CheckDestroy: testAccCheckExampleResourceDestroy,
- Steps: []resource.TestStep{
- {
- // use a dynamic configuration with the random name from above
- Config: testAccExampleResource(rName),
- // compose a basic test, checking both remote and local values
- ConfigStateChecks: []statecheck.StateCheck{
- // custom state check - query the API to retrieve the widget object
- stateCheckExampleResourceExists("example_widget.foo", &widget),
- // custom state check - verify remote values
- stateCheckExampleWidgetValues(widget, rName),
- // built-in state checks - verify local (state) values
- statecheck.ExpectKnownValue("example_widget.foo", tfjsonpath.New("active"), knownvalue.Bool(true)),
- statecheck.ExpectKnownValue("example_widget.foo", tfjsonpath.New("name"), knownvalue.StringExact(rName)),
- },
- },
- },
- })
-}
-
-// testAccExampleResource returns an configuration for an Example Widget with the provided name
-func testAccExampleResource(name string) string {
- return fmt.Sprintf(`
-resource "example_widget" "foo" {
- active = true
- name = "%s"
-}`, name)
-}
-```
-
-This example covers all the items needed for a basic test, and will be
-referenced or added to in the other test cases to come.
-
-[Back to top](#table-of-contents)
-
-## Update test verify configuration changes
-
-A basic test covers a simple configuration that should apply successfully and
-with no follow up differences in state. To verify a resource correctly applies
-updates, the second most common test found is an extension of the basic test,
-that simply applies another `TestStep` with a modified version of the original
-configuration.
-
-Below is an example test, copied and modified from the basic test. Here we
-preserve the `TestStep` from the basic test, but we add an additional
-`TestStep`, changing the configuration and rechecking the values, with a
-different configuration function `testAccExampleResourceUpdated` and state check
-implementation `stateCheckExampleWidgetValuesUpdated` for verifying the values.
-
-```go
-func TestAccExampleWidget_update(t *testing.T) {
- var widget example.Widget
- rName := acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)
-
- resource.Test(t, resource.TestCase{
- PreCheck: func() { testAccPreCheck(t) },
- Providers: testAccProviders,
- CheckDestroy: testAccCheckExampleResourceDestroy,
- Steps: []resource.TestStep{
- {
- // use a dynamic configuration with the random name from above
- Config: testAccExampleResource(rName),
- ConfigStateChecks: []statecheck.StateCheck{
- stateCheckExampleResourceExists("example_widget.foo", &widget),
- stateCheckExampleWidgetValues(widget, rName),
- statecheck.ExpectKnownValue("example_widget.foo", tfjsonpath.New("active"), knownvalue.Bool(true)),
- statecheck.ExpectKnownValue("example_widget.foo", tfjsonpath.New("name"), knownvalue.StringExact(rName)),
- },
- },
- {
- // use a dynamic configuration with the random name from above
- Config: testAccExampleResourceUpdated(rName),
- ConfigStateChecks: []statecheck.StateCheck{
- stateCheckExampleResourceExists("example_widget.foo", &widget),
- stateCheckExampleWidgetValuesUpdated(widget, rName),
- statecheck.ExpectKnownValue("example_widget.foo", tfjsonpath.New("active"), knownvalue.Bool(false)),
- statecheck.ExpectKnownValue("example_widget.foo", tfjsonpath.New("name"), knownvalue.StringExact(rName)),
- },
- },
- },
- })
-}
-
-// testAccExampleResource returns an configuration for an Example Widget with the provided name
-func testAccExampleResourceUpdated(name string) string {
- return fmt.Sprintf(`
-resource "example_widget" "foo" {
- active = false
- name = "%s"
-}`, name)
-}
-```
-
-It's common for resources to just have the above update test, as it is a
-superset of the basic test. So long as the basics are covered, combining the two
-tests is sufficient as opposed to having two separate tests.
-
-[Back to top](#table-of-contents)
-
-## Expecting errors or non-empty plans
-
-The number of acceptance tests for a given resource typically start small with
-the basic and update scenarios covered. Other tests should be added to
-demonstrate common expected configurations or behavior scenarios for a given
-resource, such as typical updates or changes to configuration, or exercising
-logic that uses polling for updates such as an autoscaling group adding or
-draining instances.
-
-It is possible for scenarios to exist where a valid configuration (no errors
-during `plan`) would result in a non-empty `plan` after successfully running
-`terraform apply`. This is typically due to a valid but otherwise
-misconfiguration of the resource, and is generally undesirable. Occasionally it
-is useful to intentionally create this scenario in an early `TestStep` in order
-to demonstrate correcting the state with proper configuration in a follow-up
-`TestStep`. Normally a `TestStep` that results in a non-empty plan would fail
-the test after apply, however developers can use the `ExpectNonEmptyPlan`
-attribute to prevent failure and allow the `TestCase` to continue:
-
-```go
-func TestAccExampleWidget_expectPlan(t *testing.T) {
- var widget example.Widget
- rName := acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)
-
- resource.Test(t, resource.TestCase{
- PreCheck: func() { testAccPreCheck(t) },
- Providers: testAccProviders,
- CheckDestroy: testAccCheckExampleResourceDestroy,
- Steps: []resource.TestStep{
- {
- // use an incomplete configuration that we expect
- // to result in a non-empty plan after apply
- Config: testAccExampleResourceIncomplete(rName),
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue("example_widget.foo", tfjsonpath.New("name"), knownvalue.StringExact(rName)),
- },
- ExpectNonEmptyPlan: true,
- },
- {
- // apply the complete configuration
- Config: testAccExampleResourceComplete(rName),
- ConfigStateChecks: []statecheck.StateCheck{
- statecheck.ExpectKnownValue("example_widget.foo", tfjsonpath.New("name"), knownvalue.StringExact(rName)),
- },
- },
- },
- })
-}
-```
-
-In addition to `ExpectNonEmptyPlan`, `TestStep` also exposes an `ExpectError`
-hook, allowing developers to test configuration that they expect to produce an
-error, such as configuration that fails schema validators:
-
-```go
-func TestAccExampleWidget_expectError(t *testing.T) {
- var widget example.Widget
- rName := acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)
-
- resource.Test(t, resource.TestCase{
- PreCheck: func() { testAccPreCheck(t) },
- Providers: testAccProviders,
- CheckDestroy: testAccCheckExampleResourceDestroy,
- Steps: []resource.TestStep{
- {
- // use a configuration that we expect to fail a validator
- // on the resource Name attribute, which only allows alphanumeric
- // characters
- Config: testAccExampleResourceError(rName + "*$%%^"),
- // No check function is given because we expect this configuration
- // to fail before any infrastructure is created
- ExpectError: regexp.MustCompile("Widget names may only contain alphanumeric characters"),
- },
- },
- })
-}
-```
-
-`ExpectError` expects a valid regular expression, and the error message must
-match in order to consider the error as expected and allow the test to pass. If
-the regular expression does not match, the `TestStep` fails explaining that the
-configuration did not produce the error expected.
-
-[Back to top](#table-of-contents)
-
-## Regression tests
-
-As resources are put into use, issues can arise as bugs that need to be fixed
-and released in a new version. Developers are encouraged to introduce regression
-tests that demonstrate not only any bugs reported, but that code modified to
-address any bug is verified as fixing the issues. These regression tests should
-be named and documented appropriately to identify the issue(s) they demonstrate
-fixes for. When possible the documentation for a regression test should include
-a link to the original bug report.
-
-An ideal bug fix would include at least 2 commits to source control:
-
-A single commit introducing the regression test, verifying the issue(s) 1 or
-more commits that modify code to fix the issue(s)
-
-This allows other developers to independently verify that a regression test
-indeed reproduces the issue by checking out the source at that commit first, and
-then advancing the revisions to evaluate the fix.
-
-[Back to top](#table-of-contents)
-
-# Conclusion
-
-Terraform's [Testing Framework][1] allows for powerful, iterative acceptance
-tests that enable developers to fully test the behavior of Terraform plugins. By
-following the above best practices, developers can ensure their plugin behaves
-correctly across the most common use cases and everyday operations users will
-have using their plugins, and ensure that Terraform remains a world-class tool
-for safely managing infrastructure.
-
-[1]: /terraform/plugin/testing
-
-[2]: /terraform/plugin/testing/acceptance-tests/testcase
-
-[3]: /terraform/plugin/testing/acceptance-tests/testcase#precheck
-
-[4]: /terraform/plugin/testing/acceptance-tests/testcase#checkdestroy
-
-[5]: /terraform/plugin/testing/acceptance-tests/teststep
-
-[6]: https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestStep.ExpectNonEmptyPlan
-
-[7]: https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/helper/resource#TestStep.ExpectError
-
-[8]: /terraform/plugin/testing/acceptance-tests/state-checks
-
-[9]: /terraform/plugin/testing/acceptance-tests/state-checks/resource
-
-[10]: /terraform/plugin/testing/acceptance-tests/state-checks/custom
\ No newline at end of file
diff --git a/website/docs/plugin/testing/unit-testing.mdx b/website/docs/plugin/testing/unit-testing.mdx
deleted file mode 100644
index a85130071..000000000
--- a/website/docs/plugin/testing/unit-testing.mdx
+++ /dev/null
@@ -1,96 +0,0 @@
----
-page_title: Plugin Development - Unit Testing
-description: |-
- Unit tests are commonly used for testing helper methods that expand or
- flatten API responses into data structures that Terraform stores as state.
----
-
-> [!IMPORTANT]
-> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
-
-# Unit Testing
-
-Testing plugin code in small, isolated units is distinct from Acceptance Tests,
-and does not require network connections. Unit tests are commonly used for
-testing helper methods that expand or flatten API responses into data structures
-for storage into state by Terraform. This section covers the specifics of
-writing Unit Tests for Terraform Plugin code.
-
-The procedure for writing unit tests for Terraform follows the same setup and
-conventions of writing any Go unit tests. We recommend naming tests to follow
-the same convention as our acceptance tests, `Test_`. For more
-information on Go tests, see the [official Golang docs on testing](https://pkg.go.dev/testing).
-
-Below is an example unit test used in flattening AWS security group rules,
-demonstrating a typical `flattener` type method that's commonly used to convert
-structures returned from APIs into data structures used by Terraform in saving
-to state. This example is truncated for brevity, but you can see the full test in the
-[aws/structure_test.go in the Terraform AWS Provider
-repository on GitHub](https://github.com/hashicorp/terraform-provider-aws/blob/f22ae122d8407672bd38951f80a2813b8b9af683/aws/structure_test.go#L930-L1027)
-
-```go
-func TestFlattenSecurityGroups(t *testing.T) {
- cases := []struct {
- ownerId *string
- pairs []*ec2.UserIdGroupPair
- expected []*GroupIdentifier
- }{
- // simple, no user id included
- {
- ownerId: aws.String("user1234"),
- pairs: []*ec2.UserIdGroupPair{
- &ec2.UserIdGroupPair{
- GroupId: aws.String("sg-12345"),
- },
- },
- expected: []*GroupIdentifier{
- &GroupIdentifier{
- GroupId: aws.String("sg-12345"),
- },
- },
- },
- // include the owner id, but keep it consitent with the same account. Tests
- // EC2 classic situation
- {
- ownerId: aws.String("user1234"),
- pairs: []*ec2.UserIdGroupPair{
- &ec2.UserIdGroupPair{
- GroupId: aws.String("sg-12345"),
- UserId: aws.String("user1234"),
- },
- },
- expected: []*GroupIdentifier{
- &GroupIdentifier{
- GroupId: aws.String("sg-12345"),
- },
- },
- },
-
- // include the owner id, but from a different account. This is reflects
- // EC2 Classic when referring to groups by name
- {
- ownerId: aws.String("user1234"),
- pairs: []*ec2.UserIdGroupPair{
- &ec2.UserIdGroupPair{
- GroupId: aws.String("sg-12345"),
- GroupName: aws.String("somegroup"), // GroupName is only included in Classic
- UserId: aws.String("user4321"),
- },
- },
- expected: []*GroupIdentifier{
- &GroupIdentifier{
- GroupId: aws.String("sg-12345"),
- GroupName: aws.String("user4321/somegroup"),
- },
- },
- },
- }
-
- for _, c := range cases {
- out := flattenSecurityGroups(c.pairs, c.ownerId)
- if !reflect.DeepEqual(out, c.expected) {
- t.Fatalf("Error matching output and expected: %#v vs %#v", out, c.expected)
- }
- }
-}
-```
diff --git a/website/img/.gitkeep b/website/img/.gitkeep
deleted file mode 100644
index e69de29bb..000000000
diff --git a/website/package-lock.json b/website/package-lock.json
deleted file mode 100644
index f879d8728..000000000
--- a/website/package-lock.json
+++ /dev/null
@@ -1,2713 +0,0 @@
-{
- "name": "terraform-plugin-testing-docs-preview",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "terraform-plugin-testing-docs-preview",
- "devDependencies": {
- "@hashicorp/platform-content-conformance": "^0.0.10",
- "next": "^13.5.4"
- },
- "engines": {
- "npm": ">=7.0.0"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.12.9",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz",
- "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helpers": "^7.12.5",
- "@babel/parser": "^7.12.7",
- "@babel/template": "^7.12.7",
- "@babel/traverse": "^7.12.9",
- "@babel/types": "^7.12.7",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
- "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.23.0",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
- "jsesc": "^2.5.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
- "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-function-name": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
- "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
- "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
- "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.20.11",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz",
- "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.20.2",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.19.1",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.20.10",
- "@babel/types": "^7.20.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- },
- "node_modules/@babel/helper-simple-access": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
- "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.20.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.20.13",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz",
- "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.20.13",
- "@babel/types": "^7.20.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.22.20",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
- "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
- "dev": true,
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/plugin-proposal-object-rest-spread": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz",
- "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
- "@babel/plugin-transform-parameters": "^7.12.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
- "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-parameters": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz",
- "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.20.2"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-parameters/node_modules/@babel/helper-plugin-utils": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
- "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
- "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.0",
- "@babel/types": "^7.23.0",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
- "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.20",
- "to-fast-properties": "^2.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@hashicorp/platform-content-conformance": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/@hashicorp/platform-content-conformance/-/platform-content-conformance-0.0.10.tgz",
- "integrity": "sha512-vXLbd2w9phS4JfFyh17jCiyu+LXVonTfb7WEUK2eMlOL/wxe2umyJvEQaJNzD5bwyYC8LuXGA5JkbnPXnU5ZQg==",
- "dev": true,
- "dependencies": {
- "find-up": "^6.3.0",
- "flat": "^5.0.2",
- "globby": "^13.1.2",
- "mdast-util-to-string": "^3.1.0",
- "remark": "12.0.1",
- "remark-mdx": "^1.6.22",
- "unified-lint-rule": "^2.1.1",
- "unist-util-stringify-position": "^3.0.2",
- "unist-util-visit": "^4.1.1",
- "vfile": "^5.3.6",
- "vfile-matter": "^4.0.0",
- "vfile-reporter": "^7.0.4",
- "vfile-reporter-json": "^3.2.0",
- "vfile-statistics": "^2.0.0",
- "yaml": "^2.1.3",
- "yargs": "^17.4.1",
- "zod": "^3.19.1"
- },
- "bin": {
- "hc-content": "dist/cli.js"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
- "dev": true
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.17",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
- "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
- "dev": true,
- "dependencies": {
- "@jridgewell/resolve-uri": "3.1.0",
- "@jridgewell/sourcemap-codec": "1.4.14"
- }
- },
- "node_modules/@mdx-js/util": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz",
- "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@next/env": {
- "version": "13.5.4",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz",
- "integrity": "sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==",
- "dev": true
- },
- "node_modules/@next/swc-darwin-arm64": {
- "version": "13.5.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz",
- "integrity": "sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-darwin-x64": {
- "version": "13.5.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz",
- "integrity": "sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-gnu": {
- "version": "13.5.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz",
- "integrity": "sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-musl": {
- "version": "13.5.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz",
- "integrity": "sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-gnu": {
- "version": "13.5.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz",
- "integrity": "sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-musl": {
- "version": "13.5.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz",
- "integrity": "sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-arm64-msvc": {
- "version": "13.5.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz",
- "integrity": "sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-ia32-msvc": {
- "version": "13.5.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz",
- "integrity": "sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-x64-msvc": {
- "version": "13.5.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz",
- "integrity": "sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@swc/helpers": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz",
- "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@types/mdast": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz",
- "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==",
- "dev": true,
- "dependencies": {
- "@types/unist": "*"
- }
- },
- "node_modules/@types/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==",
- "dev": true
- },
- "node_modules/@types/unist": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
- "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==",
- "dev": true
- },
- "node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/bail": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
- "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/busboy": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
- "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
- "dev": true,
- "dependencies": {
- "streamsearch": "^1.1.0"
- },
- "engines": {
- "node": ">=10.16.0"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001452",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001452.tgz",
- "integrity": "sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- }
- ]
- },
- "node_modules/ccount": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz",
- "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/character-entities": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
- "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-entities-html4": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz",
- "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-entities-legacy": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
- "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-reference-invalid": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
- "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/client-only": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
- "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
- "dev": true
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/cliui/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/cliui/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/collapse-white-space": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz",
- "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "dev": true
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
- },
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "node_modules/fast-glob": {
- "version": "3.2.12",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
- "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
- "dev": true,
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
- "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^7.1.0",
- "path-exists": "^5.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true,
- "bin": {
- "flat": "cli.js"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "dev": true
- },
- "node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/globby": {
- "version": "13.1.3",
- "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz",
- "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==",
- "dev": true,
- "dependencies": {
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.11",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "node_modules/is-alphabetical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
- "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-alphanumeric": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz",
- "integrity": "sha512-ZmRL7++ZkcMOfDuWZuMJyIVLr2keE1o/DeNWh1EmgqGhUcV+9BIVsx0BcSBOHTZqzjs4+dISzr2KAeBEWGgXeA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-alphanumerical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
- "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
- "dev": true,
- "dependencies": {
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-buffer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
- "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
- "dev": true,
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-decimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
- "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-hexadecimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
- "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-whitespace-character": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz",
- "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-word-character": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz",
- "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true,
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/locate-path": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
- "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
- "dev": true,
- "dependencies": {
- "p-locate": "^6.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "node_modules/longest-streak": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
- "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/markdown-escapes": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz",
- "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/markdown-table": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz",
- "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==",
- "dev": true,
- "dependencies": {
- "repeat-string": "^1.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/mdast-util-compact": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz",
- "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==",
- "dev": true,
- "dependencies": {
- "unist-util-visit": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-compact/node_modules/unist-util-is": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
- "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-compact/node_modules/unist-util-visit": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
- "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^4.0.0",
- "unist-util-visit-parents": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-compact/node_modules/unist-util-visit-parents": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
- "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-to-string": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.1.tgz",
- "integrity": "sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==",
- "dev": true,
- "dependencies": {
- "@types/mdast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
- "dependencies": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/nanoid": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
- "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/next": {
- "version": "13.5.4",
- "resolved": "https://registry.npmjs.org/next/-/next-13.5.4.tgz",
- "integrity": "sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==",
- "dev": true,
- "dependencies": {
- "@next/env": "13.5.4",
- "@swc/helpers": "0.5.2",
- "busboy": "1.6.0",
- "caniuse-lite": "^1.0.30001406",
- "postcss": "8.4.31",
- "styled-jsx": "5.1.1",
- "watchpack": "2.4.0"
- },
- "bin": {
- "next": "dist/bin/next"
- },
- "engines": {
- "node": ">=16.14.0"
- },
- "optionalDependencies": {
- "@next/swc-darwin-arm64": "13.5.4",
- "@next/swc-darwin-x64": "13.5.4",
- "@next/swc-linux-arm64-gnu": "13.5.4",
- "@next/swc-linux-arm64-musl": "13.5.4",
- "@next/swc-linux-x64-gnu": "13.5.4",
- "@next/swc-linux-x64-musl": "13.5.4",
- "@next/swc-win32-arm64-msvc": "13.5.4",
- "@next/swc-win32-ia32-msvc": "13.5.4",
- "@next/swc-win32-x64-msvc": "13.5.4"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.1.0",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "sass": "^1.3.0"
- },
- "peerDependenciesMeta": {
- "@opentelemetry/api": {
- "optional": true
- },
- "sass": {
- "optional": true
- }
- }
- },
- "node_modules/p-limit": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
- "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^1.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
- "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parse-entities": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
- "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
- "dev": true,
- "dependencies": {
- "character-entities": "^1.0.0",
- "character-entities-legacy": "^1.0.0",
- "character-reference-invalid": "^1.0.0",
- "is-alphanumerical": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-hexadecimal": "^1.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/path-exists": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
- "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
- "dev": true,
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/react": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
- "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "loose-envify": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
- "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "loose-envify": "^1.1.0",
- "scheduler": "^0.23.0"
- },
- "peerDependencies": {
- "react": "^18.2.0"
- }
- },
- "node_modules/remark": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/remark/-/remark-12.0.1.tgz",
- "integrity": "sha512-gS7HDonkdIaHmmP/+shCPejCEEW+liMp/t/QwmF0Xt47Rpuhl32lLtDV1uKWvGoq+kxr5jSgg5oAIpGuyULjUw==",
- "dev": true,
- "dependencies": {
- "remark-parse": "^8.0.0",
- "remark-stringify": "^8.0.0",
- "unified": "^9.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-mdx": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz",
- "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==",
- "dev": true,
- "dependencies": {
- "@babel/core": "7.12.9",
- "@babel/helper-plugin-utils": "7.10.4",
- "@babel/plugin-proposal-object-rest-spread": "7.12.1",
- "@babel/plugin-syntax-jsx": "7.12.1",
- "@mdx-js/util": "1.6.22",
- "is-alphabetical": "1.0.4",
- "remark-parse": "8.0.3",
- "unified": "9.2.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-mdx/node_modules/unified": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz",
- "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==",
- "dev": true,
- "dependencies": {
- "bail": "^1.0.0",
- "extend": "^3.0.0",
- "is-buffer": "^2.0.0",
- "is-plain-obj": "^2.0.0",
- "trough": "^1.0.0",
- "vfile": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-mdx/node_modules/unist-util-stringify-position": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
- "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-mdx/node_modules/vfile": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
- "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "is-buffer": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0",
- "vfile-message": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-mdx/node_modules/vfile-message": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
- "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-parse": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz",
- "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==",
- "dev": true,
- "dependencies": {
- "ccount": "^1.0.0",
- "collapse-white-space": "^1.0.2",
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-whitespace-character": "^1.0.0",
- "is-word-character": "^1.0.0",
- "markdown-escapes": "^1.0.0",
- "parse-entities": "^2.0.0",
- "repeat-string": "^1.5.4",
- "state-toggle": "^1.0.0",
- "trim": "0.0.1",
- "trim-trailing-lines": "^1.0.0",
- "unherit": "^1.0.4",
- "unist-util-remove-position": "^2.0.0",
- "vfile-location": "^3.0.0",
- "xtend": "^4.0.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-stringify": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz",
- "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==",
- "dev": true,
- "dependencies": {
- "ccount": "^1.0.0",
- "is-alphanumeric": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-whitespace-character": "^1.0.0",
- "longest-streak": "^2.0.1",
- "markdown-escapes": "^1.0.0",
- "markdown-table": "^2.0.0",
- "mdast-util-compact": "^2.0.0",
- "parse-entities": "^2.0.0",
- "repeat-string": "^1.5.4",
- "state-toggle": "^1.0.0",
- "stringify-entities": "^3.0.0",
- "unherit": "^1.0.4",
- "xtend": "^4.0.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
- "dev": true,
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
- "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
- "dev": true,
- "dependencies": {
- "is-core-module": "^2.9.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/scheduler": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
- "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "loose-envify": "^1.1.0"
- }
- },
- "node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/slash": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
- "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/state-toggle": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz",
- "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/streamsearch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
- "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
- "dev": true,
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/stringify-entities": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz",
- "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==",
- "dev": true,
- "dependencies": {
- "character-entities-html4": "^1.0.0",
- "character-entities-legacy": "^1.0.0",
- "xtend": "^4.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/strip-ansi": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
- "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/styled-jsx": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
- "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
- "dev": true,
- "dependencies": {
- "client-only": "0.0.1"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "peerDependencies": {
- "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
- },
- "peerDependenciesMeta": {
- "@babel/core": {
- "optional": true
- },
- "babel-plugin-macros": {
- "optional": true
- }
- }
- },
- "node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/trim": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
- "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==",
- "dev": true
- },
- "node_modules/trim-trailing-lines": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz",
- "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/trough": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
- "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
- "dev": true
- },
- "node_modules/unherit": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz",
- "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.0",
- "xtend": "^4.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/unified": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz",
- "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==",
- "dev": true,
- "dependencies": {
- "bail": "^1.0.0",
- "extend": "^3.0.0",
- "is-buffer": "^2.0.0",
- "is-plain-obj": "^2.0.0",
- "trough": "^1.0.0",
- "vfile": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unified-lint-rule": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.1.1.tgz",
- "integrity": "sha512-vsLHyLZFstqtGse2gvrGwasOmH8M2y+r2kQMoDSWzSqUkQx2MjHjvZuGSv5FUaiv4RQO1bHRajy7lSGp7XWq5A==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "trough": "^2.0.0",
- "unified": "^10.0.0",
- "vfile": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unified-lint-rule/node_modules/bail": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
- "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/unified-lint-rule/node_modules/is-plain-obj": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
- "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/unified-lint-rule/node_modules/trough": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
- "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/unified-lint-rule/node_modules/unified": {
- "version": "10.1.2",
- "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
- "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "bail": "^2.0.0",
- "extend": "^3.0.0",
- "is-buffer": "^2.0.0",
- "is-plain-obj": "^4.0.0",
- "trough": "^2.0.0",
- "vfile": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unified/node_modules/unist-util-stringify-position": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
- "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unified/node_modules/vfile": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
- "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "is-buffer": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0",
- "vfile-message": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unified/node_modules/vfile-message": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
- "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-is": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.0.tgz",
- "integrity": "sha512-Glt17jWwZeyqrFqOK0pF1Ded5U3yzJnFr8CG1GMjCWTp9zDo2p+cmD6pWbZU8AgM5WU3IzRv6+rBwhzsGh6hBQ==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-remove-position": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz",
- "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==",
- "dev": true,
- "dependencies": {
- "unist-util-visit": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-remove-position/node_modules/unist-util-is": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
- "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-remove-position/node_modules/unist-util-visit": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
- "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^4.0.0",
- "unist-util-visit-parents": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-remove-position/node_modules/unist-util-visit-parents": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
- "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-stringify-position": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
- "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-visit-parents": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
- "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile": {
- "version": "5.3.7",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
- "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "is-buffer": "^2.0.0",
- "unist-util-stringify-position": "^3.0.0",
- "vfile-message": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-location": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz",
- "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-matter": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/vfile-matter/-/vfile-matter-4.0.1.tgz",
- "integrity": "sha512-ZeACdaxCOxhePpoLO4A5y/VgI9EuWBXu+sUk65aQ7lXBZDFg7X0tuOzigLJUtsQzazFt6K2m9SdlDxZdfL5vVg==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^2.0.0",
- "vfile": "^5.0.0",
- "yaml": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-message": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
- "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-reporter": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.5.tgz",
- "integrity": "sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==",
- "dev": true,
- "dependencies": {
- "@types/supports-color": "^8.0.0",
- "string-width": "^5.0.0",
- "supports-color": "^9.0.0",
- "unist-util-stringify-position": "^3.0.0",
- "vfile": "^5.0.0",
- "vfile-message": "^3.0.0",
- "vfile-sort": "^3.0.0",
- "vfile-statistics": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-reporter-json": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/vfile-reporter-json/-/vfile-reporter-json-3.3.0.tgz",
- "integrity": "sha512-/zgRtjxQ2UGJn+HViiZ7+nIXtUzkkXFQum3BmaS/bSyr10P0X41ETRqqwMJ95RtbKUah3m7pKb6oS1eZeXXHzQ==",
- "dev": true,
- "dependencies": {
- "vfile": "^5.0.0",
- "vfile-message": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-reporter/node_modules/supports-color": {
- "version": "9.3.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.3.1.tgz",
- "integrity": "sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/vfile-sort": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.1.tgz",
- "integrity": "sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==",
- "dev": true,
- "dependencies": {
- "vfile": "^5.0.0",
- "vfile-message": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-statistics": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.1.tgz",
- "integrity": "sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==",
- "dev": true,
- "dependencies": {
- "vfile": "^5.0.0",
- "vfile-message": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/watchpack": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
- "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
- "dev": true,
- "dependencies": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/wrap-ansi/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/wrap-ansi/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true,
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yaml": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
- "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
- "dev": true,
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/yargs": {
- "version": "17.6.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz",
- "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==",
- "dev": true,
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/yargs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yocto-queue": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
- "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
- "dev": true,
- "engines": {
- "node": ">=12.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/zod": {
- "version": "3.20.6",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.20.6.tgz",
- "integrity": "sha512-oyu0m54SGCtzh6EClBVqDDlAYRz4jrVtKwQ7ZnsEmMI9HnzuZFj8QFwAY1M5uniIYACdGvv0PBWPF2kO0aNofA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- }
- }
-}
diff --git a/website/package.json b/website/package.json
deleted file mode 100644
index 0934055f6..000000000
--- a/website/package.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "terraform-plugin-testing-docs-preview",
- "private": "true",
- "scripts": {
- "build": "./scripts/website-build.sh",
- "content-check": "hc-content --config base-docs"
- },
- "devDependencies": {
- "@hashicorp/platform-content-conformance": "^0.0.10",
- "next": "^13.5.4"
- },
- "engines": {
- "npm": ">=7.0.0"
- }
-}
diff --git a/website/scripts/should-build.sh b/website/scripts/should-build.sh
deleted file mode 100644
index b653682c5..000000000
--- a/website/scripts/should-build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) HashiCorp, Inc.
-# SPDX-License-Identifier: MPL-2.0
-
-
-######################################################
-# NOTE: This file is managed by the Digital Team's #
-# Terraform configuration @ hashicorp/mktg-terraform #
-######################################################
-
-# This is run during the website build step to determine if we should skip the build or not.
-# More information: https://vercel.com/docs/platform/projects#ignored-build-step
-
-if [[ "$VERCEL_GIT_COMMIT_REF" == "stable-website" ]] ; then
- # Proceed with the build if the branch is stable-website
- echo "✅ - Build can proceed"
- exit 1;
-else
- # Check for differences in the website directory
- git diff --quiet HEAD^ HEAD ./
-fi
\ No newline at end of file
diff --git a/website/scripts/website-build.sh b/website/scripts/website-build.sh
deleted file mode 100644
index 88fb9028b..000000000
--- a/website/scripts/website-build.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (c) HashiCorp, Inc.
-# SPDX-License-Identifier: MPL-2.0
-
-######################################################
-# NOTE: This file is managed by the Digital Team's #
-# Terraform configuration @ hashicorp/mktg-terraform #
-######################################################
-
-# Repo which we are cloning and executing npm run build:deploy-preview within
-REPO_TO_CLONE=dev-portal
-# Set the subdirectory name for the base project
-PREVIEW_DIR=website-preview
-# The directory we want to clone the project into
-CLONE_DIR=website-preview
-# The product for which we are building the deploy preview
-PRODUCT=terraform-plugin-testing
-# Preview mode, controls the UI rendered (either the product site or developer). Can be `io` or `developer`
-PREVIEW_MODE=developer
-
-# Get the git branch of the commit that triggered the deploy preview
-# This will power remote image assets in local and deploy previews
-CURRENT_GIT_BRANCH=$VERCEL_GIT_COMMIT_REF
-
-# This is where content files live, relative to the website-preview dir. If omitted, "../content" will be used
-LOCAL_CONTENT_DIR=../docs
-
-from_cache=false
-
-if [ -d "$PREVIEW_DIR" ]; then
- echo "$PREVIEW_DIR found"
- CLONE_DIR="$PREVIEW_DIR-tmp"
- from_cache=true
-fi
-
-# Clone the base project, if needed
-echo "⏳ Cloning the $REPO_TO_CLONE repo, this might take a while..."
-git clone --depth=1 "https://github.com/hashicorp/$REPO_TO_CLONE.git" "$CLONE_DIR"
-
-if [ "$from_cache" = true ]; then
- echo "Setting up $PREVIEW_DIR"
- cp -R "./$CLONE_DIR/." "./$PREVIEW_DIR"
-fi
-
-# cd into the preview directory project
-cd "$PREVIEW_DIR"
-
-# Run the build:deploy-preview start script
-PREVIEW_FROM_REPO=$PRODUCT \
-IS_CONTENT_PREVIEW=true \
-PREVIEW_MODE=$PREVIEW_MODE \
-REPO=$PRODUCT \
-HASHI_ENV=project-preview \
-LOCAL_CONTENT_DIR=$LOCAL_CONTENT_DIR \
-CURRENT_GIT_BRANCH=$CURRENT_GIT_BRANCH \
-npm run build:deploy-preview
\ No newline at end of file
diff --git a/website/scripts/website-start.sh b/website/scripts/website-start.sh
deleted file mode 100644
index e7dec6b3e..000000000
--- a/website/scripts/website-start.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright (c) HashiCorp, Inc.
-# SPDX-License-Identifier: MPL-2.0
-
-######################################################
-# NOTE: This file is managed by the Digital Team's #
-# Terraform configuration @ hashicorp/mktg-terraform #
-######################################################
-
-# Repo which we are cloning and executing npm run build:deploy-preview within
-REPO_TO_CLONE=dev-portal
-# Set the subdirectory name for the dev-portal app
-PREVIEW_DIR=website-preview
-# The product for which we are building the deploy preview
-PRODUCT=terraform-plugin-testing
-# Preview mode, controls the UI rendered (either the product site or developer). Can be `io` or `developer`
-PREVIEW_MODE=developer
-
-# Get the git branch of the commit that triggered the deploy preview
-# This will power remote image assets in local and deploy previews
-CURRENT_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
-
-# This is where content files live, relative to the website-preview dir. If omitted, "../content" will be used
-LOCAL_CONTENT_DIR=../docs
-
-should_pull=true
-
-# Clone the dev-portal project, if needed
-if [ ! -d "$PREVIEW_DIR" ]; then
- echo "⏳ Cloning the $REPO_TO_CLONE repo, this might take a while..."
- git clone --depth=1 https://github.com/hashicorp/$REPO_TO_CLONE.git "$PREVIEW_DIR"
- should_pull=false
-fi
-
-cd "$PREVIEW_DIR"
-
-# If the directory already existed, pull to ensure the clone is fresh
-if [ "$should_pull" = true ]; then
- git pull origin main
-fi
-
-# Run the dev-portal content-repo start script
-REPO=$PRODUCT \
-PREVIEW_FROM_REPO=$PRODUCT \
-LOCAL_CONTENT_DIR=$LOCAL_CONTENT_DIR \
-CURRENT_GIT_BRANCH=$CURRENT_GIT_BRANCH \
-PREVIEW_MODE=$PREVIEW_MODE \
-npm run start:local-preview
\ No newline at end of file