docs: Enable docs from remote plugin (#10656)

* Add local components to build on new DocsPage functionality.

* Add new nav-data format, and placeholder remote-plugins config

* Bump to pre-release components and implement remote loading

- Migrates /docs to new DocsPage API, and adds remote plugin loading functionality
- Migrates /guides and /intro to new DocsPage API

* Remove now unused JS nav config

* Cut empty comment line
This commit is contained in:
Zachary Shilton 2021-03-03 10:13:50 -05:00 committed by GitHub
parent 16ccb8f685
commit a906a1b426
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 2239 additions and 582 deletions

View File

@ -0,0 +1,11 @@
import s from './style.module.css'
function DevAlert({ children }) {
return (
<div className={s.root}>
<div className={s.inner}>{children}</div>
</div>
)
}
export default DevAlert

View File

@ -0,0 +1,14 @@
.root {
border-top: 1px solid;
border-bottom: 1px solid;
border-color: var(--danger-d1);
padding: 1rem;
font-size: 1rem;
background: var(--danger-l2);
font-family: var(--font-monospace);
color: var(--danger-d1);
}
.inner {
composes: g-grid-container from global;
}

View File

@ -0,0 +1,22 @@
import React from 'react'
import InlineSvg from '@hashicorp/react-inline-svg'
import svgRibbonIcon from './ribbon-icon.svg?include'
import s from './style.module.css'
const tierNames = {
official: 'Official',
community: 'Community',
}
function PluginTierLabel({ tier }) {
return (
<div className={s.root} data-tier={tier}>
{tier === 'official' ? (
<InlineSvg className={s.icon} src={svgRibbonIcon} />
) : null}
<span className={s.text}>{tierNames[tier]}</span>
</div>
)
}
export default PluginTierLabel

View File

@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.4347 9.00402C12.5253 8.85068 12.6647 8.72602 12.976 8.42402C13.284 8.12402 13.4047 7.68802 13.292 7.27868C13.1787 6.86868 13.122 6.69202 13.122 6.51535C13.122 6.33868 13.178 6.16202 13.292 5.75068C13.3471 5.5491 13.3469 5.33638 13.2913 5.13493C13.2357 4.93349 13.1267 4.75076 12.976 4.60602C12.6647 4.30335 12.5253 4.17868 12.434 4.02468C12.3447 3.87202 12.3027 3.69135 12.1893 3.28268C12.1318 3.07957 12.0217 2.8952 11.8703 2.7481C11.7189 2.60101 11.5314 2.49636 11.3267 2.44468C10.902 2.33402 10.7167 2.29335 10.5587 2.20468C10.402 2.11535 10.272 1.97935 9.96534 1.68068C9.81164 1.53281 9.62251 1.42695 9.4161 1.37324C9.2097 1.31954 8.99295 1.31981 8.78667 1.37402C8.36267 1.48402 8.18134 1.53935 7.99934 1.53868C7.81734 1.53868 7.63601 1.48402 7.21334 1.37402C7.00716 1.31999 6.79056 1.31982 6.58429 1.37352C6.37803 1.42721 6.18901 1.53298 6.03534 1.68068C5.72534 1.98202 5.59534 2.11802 5.43801 2.20602C5.28001 2.29468 5.09467 2.33468 4.67334 2.44468C4.46871 2.49648 4.28129 2.60117 4.12988 2.74825C3.97847 2.89533 3.86839 3.07964 3.81067 3.28268C3.69734 3.69335 3.65534 3.87402 3.56534 4.02602C3.47467 4.17935 3.33534 4.30335 3.02401 4.60602C2.87327 4.75076 2.76436 4.93349 2.70875 5.13493C2.65313 5.33638 2.65288 5.5491 2.70801 5.75068C2.82201 6.16335 2.87867 6.34002 2.87801 6.51735C2.87801 6.69335 2.82134 6.86935 2.70801 7.27868C2.59534 7.68735 2.71601 8.12402 3.02401 8.42335C3.33467 8.72535 3.47467 8.85068 3.56534 9.00468C3.65534 9.15735 3.69734 9.33802 3.81067 9.74668C3.92334 10.156 4.25201 10.4753 4.67334 10.5847C5.26934 10.74 5.33334 11 5.33334 11.3333V14.6667L8.00001 13.192L10.6667 14.6667V11.3333C10.6667 11.002 10.73 10.74 11.3267 10.5853C11.5313 10.5336 11.7188 10.4289 11.8702 10.2819C12.0216 10.1348 12.1317 9.95043 12.1893 9.74735C12.3027 9.33668 12.3447 9.15602 12.4347 9.00402V9.00402ZM6.00001 6.66668C6.00001 6.13625 6.21072 5.62754 6.58579 5.25247C6.96087 4.8774 7.46957 4.66668 8.00001 4.66668C8.53044 4.66668 9.03915 4.8774 9.41422 5.25247C9.78929 5.62754 10 6.13625 10 6.66668C10 7.19712 9.78929 7.70582 9.41422 8.0809C9.03915 8.45597 8.53044 8.66668 8.00001 8.66668C7.46957 8.66668 6.96087 8.45597 6.58579 8.0809C6.21072 7.70582 6.00001 7.19712 6.00001 6.66668Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,48 @@
/*
Note: colours have been hard-coded
to match Terraform Registry tier labels.
*/
.root {
--background-color: #8f96a2;
--text-color: #fff;
align-items: center;
background: var(--background-color);
border-radius: 3px;
display: inline-flex;
margin: 40px 8px 8px 0;
padding: 1px 8px 2px 8px;
vertical-align: baseline;
/* variations */
&[data-tier='official'] {
--background-color: #f8e397;
--text-color: #975b06;
}
/* subsequent page titles should get cozy,
otherwise the label doesn't look associated */
& + h1 {
margin-top: 16px;
}
}
.text {
/* composes */
composes: g-type-body-small-strong from global;
/* additional properties */
color: var(--text-color);
line-height: 21px;
}
.icon {
margin-right: 4px;
& svg {
display: block;
& [fill] {
fill: var(--text-color);
}
}
}

View File

@ -0,0 +1,88 @@
import fs from 'fs'
import path from 'path'
import {
getNodeFromPath,
getPathsFromNavData,
validateNavData,
} from '@hashicorp/react-docs-page/server'
import renderPageMdx from '@hashicorp/react-docs-page/render-page-mdx'
import fetchGithubFile from './utils/fetch-github-file'
import mergeRemotePlugins from './utils/merge-remote-plugins'
const IS_DEV = process.env.VERCEL_ENV !== 'production'
async function generateStaticPaths(navDataFile, contentDir, options = {}) {
const navData = await resolveNavData(navDataFile, contentDir, options)
const paths = await getPathsFromNavData(navData)
return paths
}
async function generateStaticProps(
navDataFile,
localContentDir,
params,
{ productName, remotePluginsFile, additionalComponents } = {}
) {
const navData = await resolveNavData(navDataFile, localContentDir, {
remotePluginsFile,
})
const pathToMatch = params.page ? params.page.join('/') : ''
const navNode = getNodeFromPath(pathToMatch, navData, localContentDir)
const { filePath, remoteFile, pluginTier } = navNode
// Fetch the MDX file content
const [err, mdxString] = filePath
? // Read local content from the filesystem
[null, fs.readFileSync(path.join(process.cwd(), filePath), 'utf8')]
: // Fetch remote content using GitHub's API
await fetchGithubFile(remoteFile)
if (err) throw new Error(err)
// For plugin pages, prefix the MDX content with a
// label that reflects the plugin tier
// (current options are "Official" or "Community")
function mdxContentHook(mdxContent) {
if (pluginTier) {
const tierMdx = `<PluginTierLabel tier="${pluginTier}" />\n\n`
mdxContent = tierMdx + mdxContent
}
return mdxContent
}
const { mdxSource, frontMatter } = await renderPageMdx(mdxString, {
additionalComponents,
productName,
mdxContentHook,
})
// Build the currentPath from page parameters
const currentPath = !params.page ? '' : params.page.join('/')
// In development, set a flag if there is no GITHUB_API_TOKEN,
// as this means dev is seeing only local content, and we want to flag that
const isDevMissingRemotePlugins = IS_DEV && !process.env.GITHUB_API_TOKEN
return {
currentPath,
frontMatter,
isDevMissingRemotePlugins,
mdxSource,
mdxString,
navData,
navNode,
}
}
async function resolveNavData(navDataFile, localContentDir, options = {}) {
const { remotePluginsFile } = options
// Read in files
const navDataPath = path.join(process.cwd(), navDataFile)
const navData = JSON.parse(fs.readFileSync(navDataPath, 'utf8'))
const remotePluginsPath = path.join(process.cwd(), remotePluginsFile)
const remotePlugins = JSON.parse(fs.readFileSync(remotePluginsPath, 'utf-8'))
// Resolve plugins, this yields branches with NavLeafRemote nodes
const withPlugins = await mergeRemotePlugins(remotePlugins, navData, IS_DEV)
// Resolve local filePaths for NavLeaf nodes
const withFilePaths = await validateNavData(withPlugins, localContentDir)
// Return the nav data with:
// 1. Plugins merged, transformed into navData structures with NavLeafRemote nodes
// 2. filePaths added to all local NavLeaf nodes
return withFilePaths
}
export default { generateStaticPaths, generateStaticProps }
export { generateStaticPaths, generateStaticProps }

View File

@ -0,0 +1,71 @@
const fetch = require('isomorphic-unfetch')
const GITHUB_API_TOKEN = process.env.GITHUB_API_TOKEN
async function githubQuery(body, token) {
const result = await fetch('https://api.github.com/graphql', {
method: 'POST',
headers: {
Authorization: `bearer ${token}`,
ContentType: 'application/json',
},
body: JSON.stringify(body),
})
return await result.json()
}
// Fetch a file from GitHub using the GraphQL API
async function getGithubFile({ repo, branch, filePath }) {
const [repo_owner, repo_name] = repo.split('/')
// Set up the GraphQL query
// (usually we can keep this in a separate file, and rely on a
// plaintext loader we've set up in our NextJS config, but we need
// to fetch remote content when indexing it, which happens outside
// NextJS, so unfortunately it seems this has to be inlined)
const query = `
query($repo_name: String!, $repo_owner: String!, $object_expression: String!) {
repository(name: $repo_name, owner: $repo_owner) {
object(expression: $object_expression) {
... on Blob {
text
}
}
}
}
`
// Set variables
const variables = {
repo_name,
repo_owner,
object_expression: `${branch}:${filePath}`,
}
// Query the GitHub API, and parse the navigation data
const result = await githubQuery({ query, variables }, GITHUB_API_TOKEN)
try {
const fileText = result.data.repository.object.text
return [null, fileText]
} catch (e) {
const errorMsg = `Could not fetch remote file text from "${
variables.object_expression
}" in "${repo_owner}/${repo_name}". Received instead:\n\n${JSON.stringify(
result,
null,
2
)}`
return [errorMsg, null]
}
}
function memoize(method) {
let cache = {}
return async function () {
let args = JSON.stringify(arguments[0])
if (!cache[args]) {
cache[args] = method.apply(this, arguments)
}
return cache[args]
}
}
module.exports = memoize(getGithubFile)

View File

@ -0,0 +1,166 @@
const path = require('path')
const fetchGithubFile = require('./fetch-github-file')
const COMPONENT_TYPES = [
'builders',
'datasources',
'post-processors',
'provisioners',
]
async function gatherRemotePlugins(pluginsData, navData, isDev = true) {
const allPluginData = await Promise.all(
pluginsData.map(async (pluginEntry) => {
const componentEntries = await Promise.all(
COMPONENT_TYPES.map(async (type) => {
const routes = await gatherPluginBranch(pluginEntry, type)
if (!routes) return false
const isSingleLeaf =
routes.length === 1 && typeof routes[0].path !== 'undefined'
const navData = isSingleLeaf
? { ...routes[0], path: path.join(type, pluginEntry.path) }
: { title: pluginEntry.title, routes }
return { type, navData }
})
)
const validComponents = componentEntries.filter(Boolean)
if (validComponents.length === 0) {
const errMsg = `Could not fetch any component documentation for remote plugin from ${pluginEntry.repo}. This may be a GitHub credential issue at build time, or it may be an issue with missing docs in the source repository. Please ensure you have a valid GITHUB_API_TOKEN set in .env.local at the root of the project.`
if (isDev) {
console.warn(errMsg)
} else {
throw new Error(errMsg)
}
}
return validComponents
})
)
const allPluginsByType = allPluginData.reduce((acc, pluginData) => {
pluginData.forEach((p) => {
const { type, navData } = p
if (!acc[type]) acc[type] = []
acc[type].push(navData)
})
return acc
}, {})
const navDataWithPlugins = navData.slice().map((n) => {
// we only care about top-level NavBranch nodes
if (!n.routes) return n
// for each component type, check if this NavBranch
// is the parent route for that type
for (var i = 0; i < COMPONENT_TYPES.length; i++) {
const type = COMPONENT_TYPES[i]
const isTypeRoute = n.routes.filter((nn) => nn.path === type).length > 0
if (isTypeRoute) {
const pluginsOfType = allPluginsByType[type]
if (!pluginsOfType || pluginsOfType.length == 0) return n
// if this NavBranch is the parent route for the type,
// then append all remote plugins of this type to the
// NavBranch's child routes
const routesWithPlugins = n.routes.slice().concat(pluginsOfType)
// console.log(JSON.stringify(routesWithPlugins, null, 2))
// Also, sort the child routes so the order is alphabetical
routesWithPlugins.sort((a, b) => {
// (exception: "Overview" comes first)
if (a.title == 'Overview') return -1
if (b.title === 'Overview') return 1
// (exception: "Community-Supported" comes last)
if (a.title == 'Community-Supported') return 1
if (b.title === 'Community-Supported') return -1
// (exception: "Custom" comes second-last)
if (a.title == 'Custom') return 1
if (b.title === 'Custom') return -1
return a.title < b.title ? -1 : a.title > b.title ? 1 : 0
})
// return n
return { ...n, routes: routesWithPlugins }
}
}
return n
})
return navDataWithPlugins
}
async function gatherPluginBranch(pluginEntry, component) {
const artifactDir = pluginEntry.artifactDir || '.docs-artifacts'
const branch = pluginEntry.branch || 'main'
const navDataFilePath = `${artifactDir}/${component}/nav-data.json`
const [err, fileResult] = await fetchGithubFile({
repo: pluginEntry.repo,
branch,
filePath: navDataFilePath,
})
// If one component errors, that's expected - we try all components.
// We'll check one level up to see if ALL components fail.
if (err) return false
const navData = JSON.parse(fileResult)
const withPrefixedPath = await prefixNavDataPath(
navData,
{
repo: pluginEntry.repo,
branch,
componentArtifactsDir: path.join('.docs-artifacts', component),
},
path.join(component, pluginEntry.path)
)
// Add plugin tier
// Parse the plugin tier
const pluginOwner = pluginEntry.repo.split('/')[0]
const pluginTier = pluginOwner === 'hashicorp' ? 'official' : 'community'
const withPluginTier = addPluginTier(withPrefixedPath, pluginTier)
// Return the augmented navData
return withPluginTier
}
function addPluginTier(navData, pluginTier) {
return navData.slice().map((navNode) => {
if (typeof navNode.path !== 'undefined') {
return { ...navNode, pluginTier }
}
if (navNode.routes) {
return { ...navNode, routes: addPluginTier(navNode.routes, pluginTier) }
}
return navNode
})
}
async function prefixNavDataPath(
navData,
{ repo, branch, componentArtifactsDir },
parentPath
) {
return await Promise.all(
navData.slice().map(async (navNode) => {
if (typeof navNode.path !== 'undefined') {
const prefixedPath = path.join(parentPath, navNode.path)
const remoteFile = {
repo,
branch,
filePath: path.join(componentArtifactsDir, navNode.filePath),
}
const withPrefixedRoute = {
...navNode,
path: prefixedPath,
remoteFile: remoteFile,
}
delete withPrefixedRoute.filePath
return withPrefixedRoute
}
if (navNode.routes) {
const prefixedRoutes = await prefixNavDataPath(
navNode.routes,
{ repo, branch, componentArtifactsDir },
parentPath
)
const withPrefixedRoutes = { ...navNode, routes: prefixedRoutes }
return withPrefixedRoutes
}
return navNode
})
)
}
module.exports = gatherRemotePlugins

File diff suppressed because it is too large Load Diff

View File

@ -1,336 +0,0 @@
// The root folder for this documentation category is `pages/docs`
//
// - A string refers to the name of a file
// - A "category" value refers to the name of a directory
// - All directories must have an "index.mdx" file to serve as
// the landing page for the category
export default [
'--------',
'terminology',
{
category: 'commands',
content: ['init', 'build', 'console', 'fix', 'fmt', 'inspect', 'validate', 'hcl2_upgrade'],
},
{
category: 'templates',
content: [
{
category: 'hcl_templates',
content: [
{
category: 'blocks',
content: [
{
category: 'build',
content: [
'source',
'provisioner',
'post-processor',
'post-processors',
],
},
'locals',
'source',
'variable',
'packer',
'data'
],
},
{
category: 'functions',
content: [
{
category: 'contextual',
content: [
'aws_secretsmanager',
'consul',
'env',
'vault',
],
},
{
category: 'numeric',
content: [
'abs',
'ceil',
'floor',
'log',
'max',
'min',
'parseint',
'pow',
'signum',
],
},
{
category: 'string',
content: [
'chomp',
'format',
'formatlist',
'indent',
'join',
'lower',
'replace',
'regex_replace',
'regex',
'regexall',
'split',
'strrev',
'substr',
'title',
'trim',
'trimprefix',
'trimsuffix',
'trimspace',
'upper',
],
},
{
category: 'collection',
content: [
'chunklist',
'coalesce',
'coalescelist',
'compact',
'concat',
'contains',
'distinct',
'element',
'flatten',
'keys',
'length',
'lookup',
'merge',
'range',
'reverse',
'setintersection',
'setproduct',
'setunion',
'slice',
'sort',
'values',
'zipmap',
],
},
{
category: 'encoding',
content: [
'base64decode',
'base64encode',
'csvdecode',
'jsondecode',
'jsonencode',
'urlencode',
'yamldecode',
'yamlencode',
],
},
{
category: 'file',
content: [
'abspath',
'basename',
'dirname',
'file',
'fileexists',
'fileset',
'pathexpand',
],
},
{
category: 'datetime',
content: ['formatdate', 'timeadd', 'timestamp'],
},
{
category: 'crypto',
content: [
'bcrypt',
'md5',
'rsadecrypt',
'sha1',
'sha256',
'sha512',
],
},
{
category: 'uuid',
content: ['uuidv4', 'uuidv5'],
},
{
category: 'ipnet',
content: ['cidrhost', 'cidrnetmask', 'cidrsubnet'],
},
{
category: 'conversion',
content: ['can', 'convert', 'try'],
},
],
},
'variables',
'locals',
'contextual-variables',
'datasources',
'path-variables',
'syntax',
'onlyexcept',
'expressions',
'syntax-json',
],
},
{
category: "legacy_json_templates",
content: [
'builders',
'communicator',
'engine',
'post-processors',
'provisioners',
'user-variables',
]
},
],
},
'----------',
{category: 'communicators', content: ['ssh', 'winrm']},
{
category: 'builders',
content: [
'alicloud-ecs',
{
category: 'amazon',
content: ['chroot', 'ebs', 'ebssurrogate', 'ebsvolume', 'instance'],
},
{
category: 'azure',
content: ['arm', 'chroot'],
},
'cloudstack',
'digitalocean',
'docker',
'file',
'googlecompute',
'hetzner-cloud',
'hyperone',
{category: 'hyperv', content: ['iso', 'vmcx']},
'linode',
'lxc',
'lxd',
'ncloud',
'null',
'oneandone',
'openstack',
{category: 'oracle', content: ['classic', 'oci']},
{
category: 'outscale',
content: ['chroot', 'bsu', 'bsusurrogate', 'bsuvolume'],
},
{category: 'parallels', content: ['iso', 'pvm']},
'profitbricks',
{category: 'proxmox', content: ['iso', 'clone']},
'qemu',
'scaleway',
'tencentcloud-cvm',
'jdcloud',
'triton',
'ucloud-uhost',
'vagrant',
{
category: 'virtualbox',
content: ['iso', 'ovf', 'vm'],
},
{
category: 'vmware',
content: ['iso', 'vmx', 'vsphere-iso', 'vsphere-clone'],
},
'yandex',
'custom',
'community-supported',
],
},
{
category: 'datasources',
content: [
{
category: 'amazon',
content: [
'ami',
'secretsmanager'
],
},
]
},
{
category: 'provisioners',
content: [
'ansible-local',
'ansible',
'breakpoint',
'chef-client',
'chef-solo',
'converge',
'file',
'inspec',
'powershell',
'puppet-masterless',
'puppet-server',
'salt-masterless',
'shell',
'shell-local',
'windows-shell',
'windows-restart',
'custom',
'community-supported',
],
},
{
category: 'post-processors',
content: [
'alicloud-import',
'amazon-import',
'artifice',
'compress',
'checksum',
'digitalocean-import',
'docker-import',
'docker-push',
'docker-save',
'docker-tag',
'exoscale-import',
'googlecompute-export',
'googlecompute-import',
'manifest',
'shell-local',
'ucloud-import',
'vagrant',
'vagrant-cloud',
'vsphere',
'vsphere-template',
'yandex-export',
'yandex-import',
'community-supported',
],
},
'----------',
'install',
'configure',
'----------',
{
category: 'plugins',
content: [
{
category: 'creation',
content: [
'custom-builders',
'custom-post-processors',
'custom-provisioners',
'custom-datasources',
],
},
],
},
'---------',
'debugging',
]

View File

@ -0,0 +1 @@
[]

View File

@ -0,0 +1,98 @@
[
{
"title": "Upgrade Your Plugin to use the Packer plugin sdk",
"path": "1.7-plugin-upgrade"
},
{
"title": "Upgrade Your Template to use Packer init",
"path": "1.7-template-upgrade"
},
{
"title": "HCL guides",
"routes": [
{
"title": "Overview",
"path": "hcl"
},
{
"title": "From JSON v1",
"path": "hcl/from-json-v1"
},
{
"title": "Variables",
"path": "hcl/variables"
},
{
"title": "Making a plugin HCL2 enabled",
"path": "hcl/component-object-spec"
}
]
},
{
"title": "Automatic OS Installs",
"routes": [
{
"title": "Overview",
"path": "automatic-operating-system-installs"
},
{
"title": "Unattended Installation for Windows",
"path": "automatic-operating-system-installs/autounattend_windows"
},
{
"title": "Unattended Installation for Debian",
"path": "automatic-operating-system-installs/preseed_ubuntu"
}
]
},
{
"title": "Workflow Tips and Tricks",
"routes": [
{
"title": "Overview",
"path": "workflow-tips-and-tricks"
},
{
"title": "Isotime Template Function",
"path": "workflow-tips-and-tricks/isotime-template-function"
},
{
"title": "Veewee to Packer",
"path": "workflow-tips-and-tricks/veewee-to-packer"
},
{
"title": "Use jq to strip comments from a Packer template",
"path": "workflow-tips-and-tricks/use-packer-with-comment"
}
]
},
{
"title": "Build Immutable Infrastructure with Packer in CI/CD",
"routes": [
{
"title": "Overview",
"path": "packer-on-cicd"
},
{
"title": "Build Images in CI/CD",
"path": "packer-on-cicd/build-image-in-cicd"
},
{
"title": "Build a VirtualBox Image with Packer in TeamCity",
"path": "packer-on-cicd/build-virtualbox-image"
},
{
"title": "Pipelineing Builds",
"path": "packer-on-cicd/pipelineing-builds"
},
{
"title": "Trigger Terraform Enterprise runs",
"path": "packer-on-cicd/trigger-tfe"
},
{
"title": "Upload a VirtualBox Image to S3",
"path": "packer-on-cicd/upload-images-to-artifact"
}
]
}
]

View File

@ -1,37 +0,0 @@
// The root folder for this documentation category is `pages/guides`
//
// - A string refers to the name of a file
// - A "category" value refers to the name of a directory
// - All directories must have an "index.mdx" file to serve as
// the landing page for the category
export default [
'1.7-plugin-upgrade',
'1.7-template-upgrade',
{
category: 'hcl',
content: ['from-json-v1', 'variables', 'component-object-spec'],
},
{
category: 'automatic-operating-system-installs',
content: ['autounattend_windows', 'preseed_ubuntu'],
},
{
category: 'workflow-tips-and-tricks',
content: [
'isotime-template-function',
'veewee-to-packer',
'use-packer-with-comment',
],
},
{
category: 'packer-on-cicd',
content: [
'build-image-in-cicd',
'build-virtualbox-image',
'pipelineing-builds',
'trigger-tfe',
'upload-images-to-artifact',
],
},
]

View File

@ -0,0 +1,39 @@
[
{
"title": "Why Use Packer?",
"path": "why"
},
{
"title": "Use Cases",
"path": "use-cases"
},
{
"title": "Getting Started",
"routes": [
{
"title": "Install",
"href": "/intro/getting-started/install"
},
{
"title": "Build An Image",
"href": "/intro/getting-started/build-image"
},
{
"title": "Provision",
"href": "/intro/getting-started/provision"
},
{
"title": "Parallel Builds",
"href": "/intro/getting-started/parallel-builds"
},
{
"title": "Vagrant Boxes",
"href": "/intro/getting-started/vagrant"
},
{
"title": "Next Steps",
"href": "/intro/getting-started/next"
}
]
}
]

View File

@ -1,41 +0,0 @@
// The root folder for this documentation category is `pages/intro`
//
// - A string refers to the name of a file
// - A "category" value refers to the name of a directory
// - All directories must have an "index.mdx" file to serve as
// the landing page for the category
export default [
'why',
'use-cases',
{
category: 'getting-started',
name: 'Getting Started',
content: [
{
title: 'Install',
href: '/intro/getting-started/install',
},
{
title: 'Build An Image',
href: '/intro/getting-started/build-image',
},
{
title: 'Provision',
href: '/intro/getting-started/provision',
},
{
title: 'Parallel Builds',
href: '/intro/getting-started/parallel-builds',
},
{
title: 'Vagrant Boxes',
href: '/intro/getting-started/vagrant',
},
{
title: 'Next Steps',
href: '/intro/getting-started/next',
},
],
},
]

View File

@ -2416,9 +2416,9 @@
}
},
"@babel/runtime-corejs3": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.13.tgz",
"integrity": "sha512-8fSpqYRETHATtNitsCXq8QQbKJP31/KnDl2Wz2Vtui9nKzjss2ysuZtyVsWjBtvkeEFo346gkwjYPab1hvrXkQ==",
"version": "7.13.7",
"resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.13.7.tgz",
"integrity": "sha512-zkDsGGSRU2YyYTXkPfcxuYuCVc6xBOeH1ZMh72ywBvmrDs+kSmoMuCUXZJUPbXZafrPivDHS2Oq7wI37gaTvqw==",
"requires": {
"core-js-pure": "^3.0.0",
"regenerator-runtime": "^0.13.4"
@ -2551,17 +2551,17 @@
}
},
"@bugsnag/browser": {
"version": "7.6.0",
"resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.6.0.tgz",
"integrity": "sha512-8sth20TM8BVfebkqxqJQOCM2P2L4foOgFH2QA3ruG0iknDKZDhE7XcoWgmUP9zVSNJqkCyiIzcBOuiwZW8JaSQ==",
"version": "7.7.0",
"resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.7.0.tgz",
"integrity": "sha512-o3Y/8ZINTCyCiDid01xF4RwAfRCtt4Ak65sbEUjuen90Lf62LcqNIrguRotum5/5GrXl/ktm8gk6Tp8XBiS79A==",
"requires": {
"@bugsnag/core": "^7.6.0"
"@bugsnag/core": "^7.7.0"
}
},
"@bugsnag/core": {
"version": "7.6.0",
"resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.6.0.tgz",
"integrity": "sha512-hBYAZJw4ScqoyM1jA1x/m2e4iS2EqYEs0I2hdzBCZFv2ls17ILmU58eRSyVdUfyzbv0J7Hi6DwwBGC4Yb6ROZA==",
"version": "7.7.0",
"resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.7.0.tgz",
"integrity": "sha512-y6xY/ZjHRSD3h1ADdkgH4sUJeJ9TUjNjkui+pjdmQkG4asjA8lBNmjnqirGeAxgL00lg5xvbfLSq9iHdqFW9oQ==",
"requires": {
"@bugsnag/cuid": "^3.0.0",
"@bugsnag/safe-json-stringify": "^6.0.0",
@ -2585,11 +2585,11 @@
}
},
"@bugsnag/node": {
"version": "7.6.0",
"resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-7.6.0.tgz",
"integrity": "sha512-n3BVb04bq4z16nOM4gbWoXsi6k8R9bryWS/NAYi/jQg6tgyBkNYzmK0ojf3fYJ7uAgCjUJNMX6S9UHSJy/MMcQ==",
"version": "7.8.0",
"resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-7.8.0.tgz",
"integrity": "sha512-2ZkXP5gmTE4LcPu2TB350BUmClbwsPZ1ZjYMiHqHDb2Xjoico0PNt6F9tBLjDRy9jS/pFGbjt/iOpyfr4GFm8A==",
"requires": {
"@bugsnag/core": "^7.6.0",
"@bugsnag/core": "^7.7.0",
"byline": "^5.0.0",
"error-stack-parser": "^2.0.2",
"iserror": "^0.0.2",
@ -2682,9 +2682,9 @@
"integrity": "sha512-REr07tPJDKpyTh/u9tUS3sf29LnkDrWFVgY7FTvDJfbJ60IJ/R1TYNmcE7QKREGJ8j0p43QWEDabqVWOWvOXFA=="
},
"@hashicorp/nextjs-scripts": {
"version": "16.0.1",
"resolved": "https://registry.npmjs.org/@hashicorp/nextjs-scripts/-/nextjs-scripts-16.0.1.tgz",
"integrity": "sha512-k29n91PSqVeneBwsZ8botPA/fK5oheWiqoFqZxSYSmMPS4rfmC0HUW05RIXhkSEl7KvTuYGzt8BfsciSPvDPtw==",
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/@hashicorp/nextjs-scripts/-/nextjs-scripts-16.2.0.tgz",
"integrity": "sha512-CpqCaBji51EKp+1yoIKx1J2OLLunueVASgPMnnVgNkUokbt5PGFLbujgpC/hP9OroPtc7HlsXmvI6zEN/MWXYg==",
"requires": {
"@bugsnag/js": "7.5.4",
"@bugsnag/plugin-react": "7.5.4",
@ -2807,6 +2807,11 @@
"slugify": "1.3.6"
},
"dependencies": {
"@hashicorp/react-inline-svg": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-1.0.2.tgz",
"integrity": "sha512-AAFnBslSTgnEr++dTbMn3sybAqvn7myIj88ijGigF6u11eSRiV64zqEcyYLQKWTV6dF4AvYoxiYC6GSOgiM0Yw=="
},
"slugify": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/slugify/-/slugify-1.3.6.tgz",
@ -2832,6 +2837,13 @@
"requires": {
"@hashicorp/react-inline-svg": "^1.0.0",
"slugify": "^1.3.6"
},
"dependencies": {
"@hashicorp/react-inline-svg": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-1.0.2.tgz",
"integrity": "sha512-AAFnBslSTgnEr++dTbMn3sybAqvn7myIj88ijGigF6u11eSRiV64zqEcyYLQKWTV6dF4AvYoxiYC6GSOgiM0Yw=="
}
}
}
}
@ -2842,42 +2854,234 @@
"integrity": "sha512-AYIe6tcOxlKPe5Sq89o/Vk0rGE6Z1dCzf+N3ynECTh5L2A1zusf9xeM659QEh/edE/Ll9EBBLmq49sQXLNDxTw=="
},
"@hashicorp/react-docs-page": {
"version": "10.3.2",
"resolved": "https://registry.npmjs.org/@hashicorp/react-docs-page/-/react-docs-page-10.3.2.tgz",
"integrity": "sha512-gTOBF7MqOQdH2tYw3npUYwLMF8d9d1Rugp0Rk2QdjIzTRbKT3nO1CRyD+YfZTe2HPNdc+rKI2iM39Tc1TT39DA==",
"version": "10.9.4-alpha.18",
"resolved": "https://registry.npmjs.org/@hashicorp/react-docs-page/-/react-docs-page-10.9.4-alpha.18.tgz",
"integrity": "sha512-+eRKJ2PX9s4Is0ZT2O8ZBcBWuDt7OGxwBrqKF1ulo/DcZunj7pODCQQulb+jAtQyq7YzikWdFmQ/pcvwaVHK6Q==",
"requires": {
"@hashicorp/react-content": "^6.1.1",
"@hashicorp/react-docs-sidenav": "^6.0.1",
"@hashicorp/react-head": "^1.1.6",
"@hashicorp/react-search": "^3.0.0",
"@hashicorp/react-content": "^6.3.0",
"@hashicorp/react-docs-sidenav": "6.1.1-alpha.16",
"@hashicorp/react-head": "^1.2.0",
"@hashicorp/react-search": "^4.1.0",
"fs-exists-sync": "0.1.0",
"gray-matter": "4.0.2",
"js-yaml": "3.14.0",
"line-reader": "0.4.0",
"moize": "^5.4.7",
"readdirp": "3.5.0"
},
"dependencies": {
"@hashicorp/react-content": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@hashicorp/react-content/-/react-content-6.1.1.tgz",
"integrity": "sha512-X6BauLEsv6VOi+iGnDBxC6nzvx06WKM7s8K/VqJHQ5PTmCaPrgaaRZh99qQcnIXpuHcmScs85wq8yAfD8zpOUQ=="
},
"readdirp": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
"integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
"@algolia/cache-browser-local-storage": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.8.5.tgz",
"integrity": "sha512-9rs/Yi82ilgifweJamOy4DlJ4xPGsCN/zg+RKy4vjytNhOrkEHLRQC8vPZ3OhD8KVlw9lRQIZTlgjgFl8iMeeA==",
"requires": {
"picomatch": "^2.2.1"
"@algolia/cache-common": "4.8.5"
}
},
"@algolia/cache-common": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.8.5.tgz",
"integrity": "sha512-4SvRWnagKtwBFAy8Rsfmv0/Uk53fZL+6dy2idwdx6SjMGKSs0y1Qv+thb4h/k/H5MONisAoT9C2rgZ/mqwh5yw=="
},
"@algolia/cache-in-memory": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.8.5.tgz",
"integrity": "sha512-XBBfqs28FbjwLboY3sxvuzBgYsuXdFsj2mUvkgxfb0GVEzwW4I0NM7KzSPwT+iht55WS1PgIOnynjmhPsrubCw==",
"requires": {
"@algolia/cache-common": "4.8.5"
}
},
"@algolia/client-account": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.8.5.tgz",
"integrity": "sha512-DjXMpeCdY4J4IDBfowiG6Xl9ec/FhG1NpPQM0Uv4xXsc/TeeZ1JgbgNDhWe9jW0jBEALy+a/RmPrZ0vsxcadsg==",
"requires": {
"@algolia/client-common": "4.8.5",
"@algolia/client-search": "4.8.5",
"@algolia/transporter": "4.8.5"
}
},
"@algolia/client-analytics": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.8.5.tgz",
"integrity": "sha512-PQEY+chbHmZnRJdaWsvUYzDpEPr60az0EPUexdouvXGZId15/SnDaXjnf89F7tYmCzkHdUtG4bSvPzAupQ4AFA==",
"requires": {
"@algolia/client-common": "4.8.5",
"@algolia/client-search": "4.8.5",
"@algolia/requester-common": "4.8.5",
"@algolia/transporter": "4.8.5"
}
},
"@algolia/client-common": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.8.5.tgz",
"integrity": "sha512-Dn8vog2VrGsJeOcBMcSAEIjBtPyogzUBGlh1DtVd0m8GN6q+cImCESl6DY846M2PTYWsLBKBksq37eUfSe9FxQ==",
"requires": {
"@algolia/requester-common": "4.8.5",
"@algolia/transporter": "4.8.5"
}
},
"@algolia/client-recommendation": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.8.5.tgz",
"integrity": "sha512-ffawCC1C25rCa8/JU2niRZgwr8aV9b2qsLVMo73GXFzi2lceXPAe9K68mt/BGHU+w7PFUwVHsV2VmB+G/HQRVw==",
"requires": {
"@algolia/client-common": "4.8.5",
"@algolia/requester-common": "4.8.5",
"@algolia/transporter": "4.8.5"
}
},
"@algolia/client-search": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.8.5.tgz",
"integrity": "sha512-Ru2MljGZWrSQ0CVsDla11oGEPL/RinmVkLJfBtQ+/pk1868VfpAQFGKtOS/b8/xLrMA0Vm4EfC3Mgclk/p3KJA==",
"requires": {
"@algolia/client-common": "4.8.5",
"@algolia/requester-common": "4.8.5",
"@algolia/transporter": "4.8.5"
}
},
"@algolia/logger-common": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.8.5.tgz",
"integrity": "sha512-PS6NS6bpED0rAxgCPGhjZJg9why0PnoVEE7ZoCbPq6lsAOc6FPlQLri4OiLyU7wx8RWDoVtOadyzulqAAsfPSQ=="
},
"@algolia/logger-console": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.8.5.tgz",
"integrity": "sha512-3+4gLSbwzuGmrb5go3IZNcFIYVMSbB4c8UMtWEJ/gDBtgGZIvT6f/KlvVSOHIhthSxaM3Y13V6Qile/SpGqc6A==",
"requires": {
"@algolia/logger-common": "4.8.5"
}
},
"@algolia/requester-browser-xhr": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.8.5.tgz",
"integrity": "sha512-M/Gf2vv/fU4+CqDW+wok7HPpEcLym3NtDzU9zaPzGYI/9X7o36581oyfnzt2pNfsXSQVj5a2pZVUWC3Z4SO27w==",
"requires": {
"@algolia/requester-common": "4.8.5"
}
},
"@algolia/requester-common": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.8.5.tgz",
"integrity": "sha512-OIhsdwIrJVAlVlP7cwlt+RoR5AmxAoTGrFokOY9imVmgqXUUljdKO/DjhRL8vwYGFEidZ9efIjAIQ2B3XOhT9A=="
},
"@algolia/requester-node-http": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.8.5.tgz",
"integrity": "sha512-viHAjfo53A3VSE7Bb/nzgpSMZ3prPp2qti7Wg8w7qxhntppKp3Fln6t4Vp+BoPOqruLsj139xXhheAKeRcYa0w==",
"requires": {
"@algolia/requester-common": "4.8.5"
}
},
"@algolia/transporter": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.8.5.tgz",
"integrity": "sha512-Rb3cMlh/GoJK0+g+49GNA3IvR/EXsDEBwpyM+FOotSwxgiGt1wGBHM0K2v0GHwIEcuww02pl6KMDVlilA+qh0g==",
"requires": {
"@algolia/cache-common": "4.8.5",
"@algolia/logger-common": "4.8.5",
"@algolia/requester-common": "4.8.5"
}
},
"@hashicorp/react-content": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/@hashicorp/react-content/-/react-content-6.3.0.tgz",
"integrity": "sha512-B+QMlkMGryeNx3dGON4ExbzNvvll2ZXN3x+TkX80tUGClMI80MKjfSXiXIoVixlp22DMNG6wrnL42LC4WzZOxg=="
},
"@hashicorp/react-head": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@hashicorp/react-head/-/react-head-1.2.0.tgz",
"integrity": "sha512-6BNmhsrzVwJFOAcT3WhSeDlCdtlD3d7vzhXOGfkpPYVnYRaIpLLC6seemAr/wqZhYB87W+KvFilz8vZcpDAZzQ=="
},
"@hashicorp/react-inline-svg": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-1.0.2.tgz",
"integrity": "sha512-AAFnBslSTgnEr++dTbMn3sybAqvn7myIj88ijGigF6u11eSRiV64zqEcyYLQKWTV6dF4AvYoxiYC6GSOgiM0Yw=="
},
"@hashicorp/react-search": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@hashicorp/react-search/-/react-search-4.1.0.tgz",
"integrity": "sha512-TZChez9q/4bn/flQXRo0h/9B0kDMvin759hd8+vRrt1M3Qhz2C1TKpfZRKrX6dFZI8w4obGm1EzUzR130gdFfQ==",
"requires": {
"@hashicorp/react-inline-svg": "^1.0.2",
"@hashicorp/remark-plugins": "^3.0.0",
"algoliasearch": "^4.8.4",
"dotenv": "^8.2.0",
"glob": "^7.1.6",
"gray-matter": "^4.0.2",
"react-instantsearch-dom": "^6.9.0",
"remark": "^12.0.1",
"search-insights": "^1.6.0",
"unist-util-visit": "^2.0.3"
}
},
"algoliasearch": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.8.5.tgz",
"integrity": "sha512-GjKjpeevpePEJYinGokASNtIkl1t5EseNMlqDNAc+sXE8+iyyeqTyiJsN7bwlRG2BIremuslE/NlwdEfUuBLJw==",
"requires": {
"@algolia/cache-browser-local-storage": "4.8.5",
"@algolia/cache-common": "4.8.5",
"@algolia/cache-in-memory": "4.8.5",
"@algolia/client-account": "4.8.5",
"@algolia/client-analytics": "4.8.5",
"@algolia/client-common": "4.8.5",
"@algolia/client-recommendation": "4.8.5",
"@algolia/client-search": "4.8.5",
"@algolia/logger-common": "4.8.5",
"@algolia/logger-console": "4.8.5",
"@algolia/requester-browser-xhr": "4.8.5",
"@algolia/requester-common": "4.8.5",
"@algolia/requester-node-http": "4.8.5",
"@algolia/transporter": "4.8.5"
}
},
"algoliasearch-helper": {
"version": "3.4.4",
"resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.4.4.tgz",
"integrity": "sha512-OjyVLjykaYKCMxxRMZNiwLp8CS310E0qAeIY2NaublcmLAh8/SL19+zYHp7XCLtMem2ZXwl3ywMiA32O9jszuw==",
"requires": {
"events": "^1.1.1"
}
},
"events": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
},
"react-instantsearch-core": {
"version": "6.10.0",
"resolved": "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-6.10.0.tgz",
"integrity": "sha512-bn8rh/od4nw43caOiAsArA2Pw/JXX/7jL+nYe0n/Se66P7VR7UIA1i1ycthOrJzXCn9iNVFJFNMfyAN0HYVaWg==",
"requires": {
"@babel/runtime": "^7.1.2",
"algoliasearch-helper": "^3.4.3",
"prop-types": "^15.6.2",
"react-fast-compare": "^3.0.0"
}
},
"react-instantsearch-dom": {
"version": "6.10.0",
"resolved": "https://registry.npmjs.org/react-instantsearch-dom/-/react-instantsearch-dom-6.10.0.tgz",
"integrity": "sha512-t1IGn1i4btp9a8wNNV/OCYwfJwCx5CuCP6WNwBxYY1QeL27RKGaWPxvz6FjfRFCfrOvD2556STyvVriyGhDoeg==",
"requires": {
"@babel/runtime": "^7.1.2",
"algoliasearch-helper": "^3.4.3",
"classnames": "^2.2.5",
"prop-types": "^15.6.2",
"react-fast-compare": "^3.0.0",
"react-instantsearch-core": "^6.10.0"
}
}
}
},
"@hashicorp/react-docs-sidenav": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@hashicorp/react-docs-sidenav/-/react-docs-sidenav-6.0.1.tgz",
"integrity": "sha512-M1G9iehFrNCaBj0v9l9gAi6nRSc43wdkIf6OUeQS82I3QkIKzrBw3hx1PJpElkqoq+CJKk45yZv9jFFjEF3yxg==",
"version": "6.1.1-alpha.16",
"resolved": "https://registry.npmjs.org/@hashicorp/react-docs-sidenav/-/react-docs-sidenav-6.1.1-alpha.16.tgz",
"integrity": "sha512-RpPjNwMNe5L2LA1vvgp496CauVJ8wLnKge1lPBZKL5931jR1SFEMwuWLB8R6Pe2HmkIC55nPB/c43GrmPN4FFw==",
"requires": {
"@hashicorp/react-link-wrap": "^0.0.3",
"fuzzysearch": "1.0.3"
}
},
@ -2930,9 +3134,9 @@
}
},
"@hashicorp/react-inline-svg": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-1.0.0.tgz",
"integrity": "sha512-xzo9ubozATeW+irl93rkmtQulNNctgYzxUXxFn1Lcy9Y8L7bkLz7CROotv7TiUohkTCHPMzP4aBC8JPfTS1crw=="
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-5.0.0.tgz",
"integrity": "sha512-Nivb1ye+gquXeTaxhu5s0GBRGBoEptqJVaYC8F+77firw+e6D6VlOKSn6VLqTU9hVkEKFhOJUA+gUNAXGEcfXg=="
},
"@hashicorp/react-link-wrap": {
"version": "0.0.3",
@ -2967,6 +3171,13 @@
"requires": {
"@hashicorp/react-inline-svg": "^1.0.0",
"slugify": "^1.3.6"
},
"dependencies": {
"@hashicorp/react-inline-svg": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-1.0.2.tgz",
"integrity": "sha512-AAFnBslSTgnEr++dTbMn3sybAqvn7myIj88ijGigF6u11eSRiV64zqEcyYLQKWTV6dF4AvYoxiYC6GSOgiM0Yw=="
}
}
}
}
@ -3037,9 +3248,9 @@
}
},
"@hashicorp/react-tabs": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@hashicorp/react-tabs/-/react-tabs-3.0.0.tgz",
"integrity": "sha512-SsLMqUuntkMufnW1jrfhRGyxOZ46+7fHzh2G4v8cMODN8TsR3bTZdimXNA5vNi3p0/v4Mslp+F83f9+NKSNELg==",
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@hashicorp/react-tabs/-/react-tabs-3.0.1.tgz",
"integrity": "sha512-utidkiSZ9o9ewMSH7DD9AMBw+XRjOjNB/JU4P9g4F855DVquTIbzOQD1U+/5m/VTbeQvsPyWOWwkFLM6boEr0g==",
"requires": {
"@hashicorp/react-global-styles": "^4.5.0",
"@hashicorp/react-inline-svg": "^1.0.2",
@ -3529,9 +3740,9 @@
}
},
"unified": {
"version": "9.2.0",
"resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz",
"integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==",
"version": "9.2.1",
"resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz",
"integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==",
"requires": {
"bail": "^1.0.0",
"extend": "^3.0.0",
@ -3923,14 +4134,14 @@
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"array-includes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz",
"integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==",
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz",
"integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==",
"requires": {
"call-bind": "^1.0.0",
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.18.0-next.1",
"get-intrinsic": "^1.0.1",
"es-abstract": "^1.18.0-next.2",
"get-intrinsic": "^1.1.1",
"is-string": "^1.0.5"
}
},
@ -4067,9 +4278,9 @@
}
},
"axe-core": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.1.tgz",
"integrity": "sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ=="
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.2.tgz",
"integrity": "sha512-V+Nq70NxKhYt89ArVcaNL9FDryB3vQOd+BFXZIfO3RP6rwtj+2yqqqdHEkacutglPaZLkJeuXKCjCJDMGPtPqg=="
},
"axobject-query": {
"version": "2.2.0",
@ -5418,9 +5629,9 @@
}
},
"core-js-pure": {
"version": "3.8.3",
"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.8.3.tgz",
"integrity": "sha512-V5qQZVAr9K0xu7jXg1M7qTEwuxUgqr7dUOezGaNa7i+Xn9oXAU/d1fzqD9ObuwpVQOaorO5s70ckyi1woP9lVA=="
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.9.0.tgz",
"integrity": "sha512-3pEcmMZC9Cq0D4ZBh3pe2HLtqxpGNJBLXF/kZ2YzK17RbKp94w0HFbdbSx8H8kAlZG5k76hvLrkPm57Uyef+kg=="
},
"core-util-is": {
"version": "1.0.2",
@ -6358,11 +6569,11 @@
}
},
"resolve": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
"integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==",
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
"requires": {
"is-core-module": "^2.1.0",
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
}
}
@ -6822,6 +7033,11 @@
"resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
"integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w=="
},
"fast-equals": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-1.6.3.tgz",
"integrity": "sha512-4WKW0AL5+WEqO0zWavAfYGY1qwLsBgE//DN4TTcVEN2UlINgkv9b3vm2iHicoenWKSX9mKWmGOsU/iI5IST7pQ=="
},
"fast-glob": {
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz",
@ -6845,15 +7061,20 @@
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
},
"fast-stringify": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/fast-stringify/-/fast-stringify-1.1.2.tgz",
"integrity": "sha512-SfslXjiH8km0WnRiuPfpUKwlZjW5I878qsOm+2x8x3TgqmElOOLh1rgJFb+PolNdNRK3r8urEefqx0wt7vx1dA=="
},
"fastest-levenshtein": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
"integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow=="
},
"fastq": {
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz",
"integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==",
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz",
"integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==",
"requires": {
"reusify": "^1.0.4"
}
@ -6876,9 +7097,9 @@
}
},
"file-entry-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz",
"integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==",
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
"requires": {
"flat-cache": "^3.0.4"
}
@ -7024,9 +7245,9 @@
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
},
"form-data": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
"integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
"integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@ -8852,9 +9073,9 @@
}
},
"listr2": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/listr2/-/listr2-3.3.1.tgz",
"integrity": "sha512-8Zoxe7s/8nNr4bJ8bdAduHD8uJce+exmMmUWTXlq0WuUdffnH3muisHPHPFtW2vvOfohIsq7FGCaguUxN/h3Iw==",
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/listr2/-/listr2-3.3.3.tgz",
"integrity": "sha512-CeQrTeot/OQTrd2loXEBMfwlOjlPeHu/9alA8UyEoiEyncpj/mv2zRLgx32JzO62wbJIBSKgGM2L23XeOwrRlg==",
"requires": {
"chalk": "^4.1.0",
"cli-truncate": "^2.1.0",
@ -9313,6 +9534,11 @@
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
},
"micro-memoize": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-2.1.2.tgz",
"integrity": "sha512-COjNutiFgnDHXZEIM/jYuZPwq2h8zMUeScf6Sh6so98a+REqdlpaNS7Cb2ffGfK5I+xfgoA3Rx49NGuNJTJq3w=="
},
"micromark": {
"version": "2.11.4",
"resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
@ -9462,6 +9688,16 @@
"integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
"optional": true
},
"moize": {
"version": "5.4.7",
"resolved": "https://registry.npmjs.org/moize/-/moize-5.4.7.tgz",
"integrity": "sha512-7PZH8QFJ51cIVtDv7wfUREBd3gL59JB0v/ARA3RI9zkSRa9LyGjS1Bdldii2J1/NQXRQ/3OOVOSdnZrCcVaZlw==",
"requires": {
"fast-equals": "^1.6.0",
"fast-stringify": "^1.1.0",
"micro-memoize": "^2.1.1"
}
},
"mozjpeg": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-7.0.0.tgz",
@ -10138,24 +10374,24 @@
}
},
"object.fromentries": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz",
"integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz",
"integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==",
"requires": {
"call-bind": "^1.0.0",
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.18.0-next.1",
"es-abstract": "^1.18.0-next.2",
"has": "^1.0.3"
}
},
"object.getownpropertydescriptors": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz",
"integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==",
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz",
"integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==",
"requires": {
"call-bind": "^1.0.0",
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.18.0-next.1"
"es-abstract": "^1.18.0-next.2"
}
},
"object.pick": {
@ -10167,13 +10403,13 @@
}
},
"object.values": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz",
"integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==",
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz",
"integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==",
"requires": {
"call-bind": "^1.0.0",
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.18.0-next.1",
"es-abstract": "^1.18.0-next.2",
"has": "^1.0.3"
}
},
@ -11307,6 +11543,11 @@
"resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
"integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
},
"queue-microtask": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz",
"integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg=="
},
"quick-lru": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
@ -11653,9 +11894,9 @@
},
"dependencies": {
"unified": {
"version": "9.2.0",
"resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz",
"integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==",
"version": "9.2.1",
"resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz",
"integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==",
"requires": {
"bail": "^1.0.0",
"extend": "^3.0.0",
@ -11941,14 +12182,17 @@
"integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="
},
"run-parallel": {
"version": "1.1.10",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz",
"integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw=="
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"requires": {
"queue-microtask": "^1.2.2"
}
},
"rxjs": {
"version": "6.6.3",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz",
"integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==",
"version": "6.6.6",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz",
"integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==",
"requires": {
"tslib": "^1.9.0"
}
@ -12722,34 +12966,34 @@
}
},
"string.prototype.matchall": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz",
"integrity": "sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw==",
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz",
"integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==",
"requires": {
"call-bind": "^1.0.0",
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.18.0-next.1",
"es-abstract": "^1.18.0-next.2",
"has-symbols": "^1.0.1",
"internal-slot": "^1.0.2",
"regexp.prototype.flags": "^1.3.0",
"side-channel": "^1.0.3"
"internal-slot": "^1.0.3",
"regexp.prototype.flags": "^1.3.1",
"side-channel": "^1.0.4"
}
},
"string.prototype.trimend": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz",
"integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==",
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
"integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
"requires": {
"call-bind": "^1.0.0",
"call-bind": "^1.0.2",
"define-properties": "^1.1.3"
}
},
"string.prototype.trimstart": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz",
"integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==",
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
"integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
"requires": {
"call-bind": "^1.0.0",
"call-bind": "^1.0.2",
"define-properties": "^1.1.3"
}
},
@ -12965,9 +13209,9 @@
},
"dependencies": {
"ajv": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.4.tgz",
"integrity": "sha512-xzzzaqgEQfmuhbhAoqjJ8T/1okb6gAzXn/eQRNpAN1AEUoHJTNF9xCDRTtf/s3SKldtZfa+RJeTs+BQq+eZ/sw==",
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz",
"integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==",
"requires": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@ -13554,9 +13798,9 @@
}
},
"tlds": {
"version": "1.216.0",
"resolved": "https://registry.npmjs.org/tlds/-/tlds-1.216.0.tgz",
"integrity": "sha512-y9A+eMRKLdAOclcFRTk3durpvCWiEdWcQhCOopCO654pckH9+o5Z5VgBsTTAFqtyxB8yFRXSG1q7BCCeHyrm0w=="
"version": "1.218.0",
"resolved": "https://registry.npmjs.org/tlds/-/tlds-1.218.0.tgz",
"integrity": "sha512-JpD3eSrYaIFlU/OvtI5WTEK+v5qXZSeUifz4hT2bJsJKx5ykjZvg6i5yXVBJNjoN3XbTCtryc7H5v8B16yHfMg=="
},
"tmp": {
"version": "0.0.33",
@ -14017,9 +14261,9 @@
},
"dependencies": {
"mime": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.5.0.tgz",
"integrity": "sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag=="
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
"integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg=="
}
}
},
@ -14395,9 +14639,9 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"yargs-parser": {
"version": "20.2.4",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA=="
"version": "20.2.6",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.6.tgz",
"integrity": "sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA=="
},
"yauzl": {
"version": "2.10.0",

View File

@ -5,11 +5,12 @@
"author": "HashiCorp",
"dependencies": {
"@hashicorp/mktg-global-styles": "2.1.0",
"@hashicorp/nextjs-scripts": "16.0.1",
"@hashicorp/nextjs-scripts": "16.2.0",
"@hashicorp/react-button": "4.0.0",
"@hashicorp/react-docs-page": "^10.3.2",
"@hashicorp/react-docs-page": "10.9.4-alpha.18",
"@hashicorp/react-hashi-stack-menu": "^1.1.0",
"@hashicorp/react-head": "1.1.6",
"@hashicorp/react-inline-svg": "5.0.0",
"@hashicorp/react-markdown-page": "^0.1.0",
"@hashicorp/react-product-downloader": "4.0.2",
"@hashicorp/react-search": "^3.0.0",

View File

@ -1,33 +1,75 @@
import { productName, productSlug } from 'data/metadata'
import order from 'data/docs-navigation.js'
import DocsPage from '@hashicorp/react-docs-page'
import PluginTierLabel from 'components/plugin-tier-label'
import DevAlert from 'components/dev-alert'
// Imports below are only used server-side
import {
generateStaticPaths,
generateStaticProps,
} from '@hashicorp/react-docs-page/server'
} from 'components/remote-plugin-docs/server'
const subpath = 'docs'
// Configure the docs path
const BASE_ROUTE = 'docs'
const NAV_DATA = 'data/docs-nav-data.json'
const CONTENT_DIR = 'content/docs'
// override default "main" value for branch for "edit on this page"
const MAIN_BRANCH = 'master'
// add remote plugin docs loading
const OPTIONS = {
remotePluginsFile: 'data/docs-remote-plugins.json',
additionalComponents: { PluginTierLabel },
}
export default function DocsLayout(props) {
function DocsLayout({ isDevMissingRemotePlugins, ...props }) {
return (
<DocsPage
product={{ name: productName, slug: productSlug }}
subpath={subpath}
order={order}
staticProps={props}
mainBranch="master"
/>
<>
{isDevMissingRemotePlugins ? (
<DevAlert>
<strong className="g-type-label-strong">
Note for local development
</strong>
<p>
<span role="img" aria-label="Alert: ">
🚨
</span>{' '}
<strong>This preview is missing plugin docs</strong> pulled from
remote repos.
</p>
<p>
<span role="img" aria-label="Fix: ">
🛠
</span>{' '}
<strong>To preview docs pulled from plugin repos</strong>, please
include a <code>GITHUB_API_TOKEN</code> in{' '}
<code>website/.env.local</code>.
</p>
</DevAlert>
) : null}
<DocsPage
additionalComponents={OPTIONS.additionalComponents}
baseRoute={BASE_ROUTE}
mainBranch="master" // used for "edit on this page", default "main"
product={{ name: productName, slug: productSlug }}
staticProps={props}
/>
</>
)
}
export async function getStaticPaths() {
return generateStaticPaths(subpath)
const paths = await generateStaticPaths(NAV_DATA, CONTENT_DIR, OPTIONS)
return { paths, fallback: false }
}
export async function getStaticProps({ params }) {
return generateStaticProps({
subpath,
productName,
const props = await generateStaticProps(
NAV_DATA,
CONTENT_DIR,
params,
})
OPTIONS
)
return { props }
}
export default DocsLayout

View File

@ -1,33 +1,33 @@
import { productName, productSlug } from 'data/metadata'
import order from 'data/guides-navigation.js'
import DocsPage from '@hashicorp/react-docs-page'
// Imports below are only used server-side
import {
generateStaticPaths,
generateStaticProps,
} from '@hashicorp/react-docs-page/server'
const subpath = 'guides'
// Configure the docs path
const BASE_ROUTE = 'guides'
const NAV_DATA = 'data/guides-nav-data.json'
const CONTENT_DIR = 'content/guides'
export default function GuidesLayout(props) {
return (
<DocsPage
baseRoute={BASE_ROUTE}
mainBranch="master" // used for "edit on this page", default "main"
product={{ name: productName, slug: productSlug }}
subpath={subpath}
order={order}
staticProps={props}
mainBranch="master"
/>
)
}
export async function getStaticPaths() {
return generateStaticPaths(subpath)
const paths = await generateStaticPaths(NAV_DATA, CONTENT_DIR)
return { paths, fallback: false }
}
export async function getStaticProps({ params }) {
return generateStaticProps({
subpath,
productName,
params,
})
const props = await generateStaticProps(NAV_DATA, CONTENT_DIR, params)
return { props }
}

View File

@ -1,33 +1,33 @@
import { productName, productSlug } from 'data/metadata'
import order from 'data/intro-navigation.js'
import DocsPage from '@hashicorp/react-docs-page'
// Imports below are only used server-side
import {
generateStaticPaths,
generateStaticProps,
} from '@hashicorp/react-docs-page/server'
const subpath = 'intro'
// Configure the docs path
const BASE_ROUTE = 'intro'
const NAV_DATA = 'data/intro-nav-data.json'
const CONTENT_DIR = 'content/intro'
export default function IntroLayout(props) {
return (
<DocsPage
baseRoute={BASE_ROUTE}
mainBranch="master" // used for "edit on this page", default "main"
product={{ name: productName, slug: productSlug }}
subpath={subpath}
order={order}
staticProps={props}
mainBranch="master"
/>
)
}
export async function getStaticPaths() {
return generateStaticPaths(subpath)
const paths = await generateStaticPaths(NAV_DATA, CONTENT_DIR)
return { paths, fallback: false }
}
export async function getStaticProps({ params }) {
return generateStaticProps({
subpath,
productName,
params,
})
const props = await generateStaticProps(NAV_DATA, CONTENT_DIR, params)
return { props }
}

View File

@ -12,7 +12,6 @@
@import '~@hashicorp/react-consent-manager/style.css';
@import '~@hashicorp/react-content/style.css';
@import '~@hashicorp/react-docs-page/style.css';
@import '~@hashicorp/react-docs-sidenav/style.css';
@import '~@hashicorp/react-product-downloader/dist/style.css';
@import '~@hashicorp/react-search/style.css';
@import '~@hashicorp/react-subnav/style.css';