From a906a1b4265bc181c91aa9cf88b9cd3d1d5db5c5 Mon Sep 17 00:00:00 2001 From: Zachary Shilton <4624598+zchsh@users.noreply.github.com> Date: Wed, 3 Mar 2021 10:13:50 -0500 Subject: [PATCH] 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 --- website/components/dev-alert/index.js | 11 + website/components/dev-alert/style.module.css | 14 + website/components/plugin-tier-label/index.js | 22 + .../plugin-tier-label/ribbon-icon.svg | 3 + .../plugin-tier-label/style.module.css | 48 + .../components/remote-plugin-docs/server.js | 88 ++ .../utils/fetch-github-file.js | 71 + .../utils/merge-remote-plugins.js | 166 +++ website/data/docs-nav-data.json | 1224 +++++++++++++++++ website/data/docs-navigation.js | 336 ----- website/data/docs-remote-plugins.json | 1 + website/data/guides-nav-data.json | 98 ++ website/data/guides-navigation.js | 37 - website/data/intro-nav-data.json | 39 + website/data/intro-navigation.js | 41 - website/package-lock.json | 498 +++++-- website/package.json | 5 +- website/pages/docs/[[...page]].jsx | 74 +- website/pages/guides/[[...page]].jsx | 22 +- website/pages/intro/[[...page]].jsx | 22 +- website/pages/style.css | 1 - 21 files changed, 2239 insertions(+), 582 deletions(-) create mode 100644 website/components/dev-alert/index.js create mode 100644 website/components/dev-alert/style.module.css create mode 100644 website/components/plugin-tier-label/index.js create mode 100644 website/components/plugin-tier-label/ribbon-icon.svg create mode 100644 website/components/plugin-tier-label/style.module.css create mode 100644 website/components/remote-plugin-docs/server.js create mode 100644 website/components/remote-plugin-docs/utils/fetch-github-file.js create mode 100644 website/components/remote-plugin-docs/utils/merge-remote-plugins.js create mode 100644 website/data/docs-nav-data.json delete mode 100644 website/data/docs-navigation.js create mode 100644 website/data/docs-remote-plugins.json create mode 100644 website/data/guides-nav-data.json delete mode 100644 website/data/guides-navigation.js create mode 100644 website/data/intro-nav-data.json delete mode 100644 website/data/intro-navigation.js diff --git a/website/components/dev-alert/index.js b/website/components/dev-alert/index.js new file mode 100644 index 000000000..836a42d1e --- /dev/null +++ b/website/components/dev-alert/index.js @@ -0,0 +1,11 @@ +import s from './style.module.css' + +function DevAlert({ children }) { + return ( +
+
{children}
+
+ ) +} + +export default DevAlert diff --git a/website/components/dev-alert/style.module.css b/website/components/dev-alert/style.module.css new file mode 100644 index 000000000..1e58465ca --- /dev/null +++ b/website/components/dev-alert/style.module.css @@ -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; +} diff --git a/website/components/plugin-tier-label/index.js b/website/components/plugin-tier-label/index.js new file mode 100644 index 000000000..21c71dd02 --- /dev/null +++ b/website/components/plugin-tier-label/index.js @@ -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 ( +
+ {tier === 'official' ? ( + + ) : null} + {tierNames[tier]} +
+ ) +} + +export default PluginTierLabel diff --git a/website/components/plugin-tier-label/ribbon-icon.svg b/website/components/plugin-tier-label/ribbon-icon.svg new file mode 100644 index 000000000..60fb00901 --- /dev/null +++ b/website/components/plugin-tier-label/ribbon-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/website/components/plugin-tier-label/style.module.css b/website/components/plugin-tier-label/style.module.css new file mode 100644 index 000000000..fe4e19381 --- /dev/null +++ b/website/components/plugin-tier-label/style.module.css @@ -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); + } + } +} diff --git a/website/components/remote-plugin-docs/server.js b/website/components/remote-plugin-docs/server.js new file mode 100644 index 000000000..a7d699e57 --- /dev/null +++ b/website/components/remote-plugin-docs/server.js @@ -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 = `\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 } diff --git a/website/components/remote-plugin-docs/utils/fetch-github-file.js b/website/components/remote-plugin-docs/utils/fetch-github-file.js new file mode 100644 index 000000000..e12a2738d --- /dev/null +++ b/website/components/remote-plugin-docs/utils/fetch-github-file.js @@ -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) diff --git a/website/components/remote-plugin-docs/utils/merge-remote-plugins.js b/website/components/remote-plugin-docs/utils/merge-remote-plugins.js new file mode 100644 index 000000000..41d0d7139 --- /dev/null +++ b/website/components/remote-plugin-docs/utils/merge-remote-plugins.js @@ -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 diff --git a/website/data/docs-nav-data.json b/website/data/docs-nav-data.json new file mode 100644 index 000000000..d416fc8f1 --- /dev/null +++ b/website/data/docs-nav-data.json @@ -0,0 +1,1224 @@ +[ + { + "divider": true + }, + { + "title": "Terminology", + "path": "terminology" + }, + { + "title": "Commands (CLI)", + "routes": [ + { + "title": "Overview", + "path": "commands" + }, + { + "title": "init", + "path": "commands/init" + }, + { + "title": "build", + "path": "commands/build" + }, + { + "title": "console", + "path": "commands/console" + }, + { + "title": "fix", + "path": "commands/fix" + }, + { + "title": "fmt", + "path": "commands/fmt" + }, + { + "title": "inspect", + "path": "commands/inspect" + }, + { + "title": "validate", + "path": "commands/validate" + }, + { + "title": "hcl2_upgrade", + "path": "commands/hcl2_upgrade" + } + ] + }, + { + "title": "Templates", + "routes": [ + { + "title": "Overview", + "path": "templates" + }, + { + "title": "HCL Templates", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates" + }, + { + "title": "Blocks", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/blocks" + }, + { + "title": "build", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/blocks/build" + }, + { + "title": "source", + "path": "templates/hcl_templates/blocks/build/source" + }, + { + "title": "provisioner", + "path": "templates/hcl_templates/blocks/build/provisioner" + }, + { + "title": "post-processor", + "path": "templates/hcl_templates/blocks/build/post-processor" + }, + { + "title": "post-processors", + "path": "templates/hcl_templates/blocks/build/post-processors" + } + ] + }, + { + "title": "locals", + "path": "templates/hcl_templates/blocks/locals" + }, + { + "title": "source", + "path": "templates/hcl_templates/blocks/source" + }, + { + "title": "variable", + "path": "templates/hcl_templates/blocks/variable" + }, + { + "title": "packer", + "path": "templates/hcl_templates/blocks/packer" + }, + { + "title": "data", + "path": "templates/hcl_templates/blocks/data" + } + ] + }, + { + "title": "Functions", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/functions" + }, + { + "title": "Contextual Functions", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/functions/contextual" + }, + { + "title": "aws_secretsmanager", + "path": "templates/hcl_templates/functions/contextual/aws_secretsmanager" + }, + { + "title": "consul", + "path": "templates/hcl_templates/functions/contextual/consul" + }, + { + "title": "env", + "path": "templates/hcl_templates/functions/contextual/env" + }, + { + "title": "vault", + "path": "templates/hcl_templates/functions/contextual/vault" + } + ] + }, + { + "title": "Numeric Functions", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/functions/numeric" + }, + { + "title": "abs", + "path": "templates/hcl_templates/functions/numeric/abs" + }, + { + "title": "ceil", + "path": "templates/hcl_templates/functions/numeric/ceil" + }, + { + "title": "floor", + "path": "templates/hcl_templates/functions/numeric/floor" + }, + { + "title": "log", + "path": "templates/hcl_templates/functions/numeric/log" + }, + { + "title": "max", + "path": "templates/hcl_templates/functions/numeric/max" + }, + { + "title": "min", + "path": "templates/hcl_templates/functions/numeric/min" + }, + { + "title": "parseint", + "path": "templates/hcl_templates/functions/numeric/parseint" + }, + { + "title": "pow", + "path": "templates/hcl_templates/functions/numeric/pow" + }, + { + "title": "signum", + "path": "templates/hcl_templates/functions/numeric/signum" + } + ] + }, + { + "title": "String Functions", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/functions/string" + }, + { + "title": "chomp", + "path": "templates/hcl_templates/functions/string/chomp" + }, + { + "title": "format", + "path": "templates/hcl_templates/functions/string/format" + }, + { + "title": "formatlist", + "path": "templates/hcl_templates/functions/string/formatlist" + }, + { + "title": "indent", + "path": "templates/hcl_templates/functions/string/indent" + }, + { + "title": "join", + "path": "templates/hcl_templates/functions/string/join" + }, + { + "title": "lower", + "path": "templates/hcl_templates/functions/string/lower" + }, + { + "title": "replace", + "path": "templates/hcl_templates/functions/string/replace" + }, + { + "title": "regex_replace", + "path": "templates/hcl_templates/functions/string/regex_replace" + }, + { + "title": "regex", + "path": "templates/hcl_templates/functions/string/regex" + }, + { + "title": "regexall", + "path": "templates/hcl_templates/functions/string/regexall" + }, + { + "title": "split", + "path": "templates/hcl_templates/functions/string/split" + }, + { + "title": "strrev", + "path": "templates/hcl_templates/functions/string/strrev" + }, + { + "title": "substr", + "path": "templates/hcl_templates/functions/string/substr" + }, + { + "title": "title", + "path": "templates/hcl_templates/functions/string/title" + }, + { + "title": "trim", + "path": "templates/hcl_templates/functions/string/trim" + }, + { + "title": "trimprefix", + "path": "templates/hcl_templates/functions/string/trimprefix" + }, + { + "title": "trimsuffix", + "path": "templates/hcl_templates/functions/string/trimsuffix" + }, + { + "title": "trimspace", + "path": "templates/hcl_templates/functions/string/trimspace" + }, + { + "title": "upper", + "path": "templates/hcl_templates/functions/string/upper" + } + ] + }, + { + "title": "Collection Functions", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/functions/collection" + }, + { + "title": "chunklist", + "path": "templates/hcl_templates/functions/collection/chunklist" + }, + { + "title": "coalesce", + "path": "templates/hcl_templates/functions/collection/coalesce" + }, + { + "title": "coalescelist", + "path": "templates/hcl_templates/functions/collection/coalescelist" + }, + { + "title": "compact", + "path": "templates/hcl_templates/functions/collection/compact" + }, + { + "title": "concat", + "path": "templates/hcl_templates/functions/collection/concat" + }, + { + "title": "contains", + "path": "templates/hcl_templates/functions/collection/contains" + }, + { + "title": "distinct", + "path": "templates/hcl_templates/functions/collection/distinct" + }, + { + "title": "element", + "path": "templates/hcl_templates/functions/collection/element" + }, + { + "title": "flatten", + "path": "templates/hcl_templates/functions/collection/flatten" + }, + { + "title": "keys", + "path": "templates/hcl_templates/functions/collection/keys" + }, + { + "title": "length", + "path": "templates/hcl_templates/functions/collection/length" + }, + { + "title": "lookup", + "path": "templates/hcl_templates/functions/collection/lookup" + }, + { + "title": "merge", + "path": "templates/hcl_templates/functions/collection/merge" + }, + { + "title": "range", + "path": "templates/hcl_templates/functions/collection/range" + }, + { + "title": "reverse", + "path": "templates/hcl_templates/functions/collection/reverse" + }, + { + "title": "setintersection", + "path": "templates/hcl_templates/functions/collection/setintersection" + }, + { + "title": "setproduct", + "path": "templates/hcl_templates/functions/collection/setproduct" + }, + { + "title": "setunion", + "path": "templates/hcl_templates/functions/collection/setunion" + }, + { + "title": "slice", + "path": "templates/hcl_templates/functions/collection/slice" + }, + { + "title": "sort", + "path": "templates/hcl_templates/functions/collection/sort" + }, + { + "title": "values", + "path": "templates/hcl_templates/functions/collection/values" + }, + { + "title": "zipmap", + "path": "templates/hcl_templates/functions/collection/zipmap" + } + ] + }, + { + "title": "Encoding Functions", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/functions/encoding" + }, + { + "title": "base64decode", + "path": "templates/hcl_templates/functions/encoding/base64decode" + }, + { + "title": "base64encode", + "path": "templates/hcl_templates/functions/encoding/base64encode" + }, + { + "title": "csvdecode", + "path": "templates/hcl_templates/functions/encoding/csvdecode" + }, + { + "title": "jsondecode", + "path": "templates/hcl_templates/functions/encoding/jsondecode" + }, + { + "title": "jsonencode", + "path": "templates/hcl_templates/functions/encoding/jsonencode" + }, + { + "title": "urlencode", + "path": "templates/hcl_templates/functions/encoding/urlencode" + }, + { + "title": "yamldecode", + "path": "templates/hcl_templates/functions/encoding/yamldecode" + }, + { + "title": "yamlencode", + "path": "templates/hcl_templates/functions/encoding/yamlencode" + } + ] + }, + { + "title": "Filesystem Functions", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/functions/file" + }, + { + "title": "abspath", + "path": "templates/hcl_templates/functions/file/abspath" + }, + { + "title": "basename", + "path": "templates/hcl_templates/functions/file/basename" + }, + { + "title": "dirname", + "path": "templates/hcl_templates/functions/file/dirname" + }, + { + "title": "file", + "path": "templates/hcl_templates/functions/file/file" + }, + { + "title": "fileexists", + "path": "templates/hcl_templates/functions/file/fileexists" + }, + { + "title": "fileset", + "path": "templates/hcl_templates/functions/file/fileset" + }, + { + "title": "pathexpand", + "path": "templates/hcl_templates/functions/file/pathexpand" + } + ] + }, + { + "title": "Date and Time Functions", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/functions/datetime" + }, + { + "title": "formatdate", + "path": "templates/hcl_templates/functions/datetime/formatdate" + }, + { + "title": "timeadd", + "path": "templates/hcl_templates/functions/datetime/timeadd" + }, + { + "title": "timestamp", + "path": "templates/hcl_templates/functions/datetime/timestamp" + } + ] + }, + { + "title": "Hash and Crypto Functions", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/functions/crypto" + }, + { + "title": "bcrypt", + "path": "templates/hcl_templates/functions/crypto/bcrypt" + }, + { + "title": "md5", + "path": "templates/hcl_templates/functions/crypto/md5" + }, + { + "title": "rsadecrypt", + "path": "templates/hcl_templates/functions/crypto/rsadecrypt" + }, + { + "title": "sha1", + "path": "templates/hcl_templates/functions/crypto/sha1" + }, + { + "title": "sha256", + "path": "templates/hcl_templates/functions/crypto/sha256" + }, + { + "title": "sha512", + "path": "templates/hcl_templates/functions/crypto/sha512" + } + ] + }, + { + "title": "UUID Functions", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/functions/uuid" + }, + { + "title": "uuidv4", + "path": "templates/hcl_templates/functions/uuid/uuidv4" + }, + { + "title": "uuidv5", + "path": "templates/hcl_templates/functions/uuid/uuidv5" + } + ] + }, + { + "title": "IP Network Functions", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/functions/ipnet" + }, + { + "title": "cidrhost", + "path": "templates/hcl_templates/functions/ipnet/cidrhost" + }, + { + "title": "cidrnetmask", + "path": "templates/hcl_templates/functions/ipnet/cidrnetmask" + }, + { + "title": "cidrsubnet", + "path": "templates/hcl_templates/functions/ipnet/cidrsubnet" + } + ] + }, + { + "title": "Type Conversion Functions", + "routes": [ + { + "title": "Overview", + "path": "templates/hcl_templates/functions/conversion" + }, + { + "title": "can", + "path": "templates/hcl_templates/functions/conversion/can" + }, + { + "title": "convert", + "path": "templates/hcl_templates/functions/conversion/convert" + }, + { + "title": "try", + "path": "templates/hcl_templates/functions/conversion/try" + } + ] + } + ] + }, + { + "title": "Variables", + "path": "templates/hcl_templates/variables" + }, + { + "title": "Locals", + "path": "templates/hcl_templates/locals" + }, + { + "title": "Contextual Variables", + "path": "templates/hcl_templates/contextual-variables" + }, + { + "title": "Data Sources", + "path": "templates/hcl_templates/datasources" + }, + { + "title": "Path Variables", + "path": "templates/hcl_templates/path-variables" + }, + { + "title": "Syntax", + "path": "templates/hcl_templates/syntax" + }, + { + "title": "Only Except", + "path": "templates/hcl_templates/onlyexcept" + }, + { + "title": "Expressions", + "path": "templates/hcl_templates/expressions" + }, + { + "title": "JSON Syntax", + "path": "templates/hcl_templates/syntax-json" + } + ] + }, + { + "title": "JSON Templates", + "routes": [ + { + "title": "Overview", + "path": "templates/legacy_json_templates" + }, + { + "title": "Builders", + "path": "templates/legacy_json_templates/builders" + }, + { + "title": "Communicators", + "path": "templates/legacy_json_templates/communicator" + }, + { + "title": "Engine", + "path": "templates/legacy_json_templates/engine" + }, + { + "title": "Post-Processors", + "path": "templates/legacy_json_templates/post-processors" + }, + { + "title": "Provisioners", + "path": "templates/legacy_json_templates/provisioners" + }, + { + "title": "User Variables", + "path": "templates/legacy_json_templates/user-variables" + } + ] + } + ] + }, + { + "divider": true + }, + { + "title": "Communicators", + "routes": [ + { + "title": "Overview", + "path": "communicators" + }, + { + "title": "SSH", + "path": "communicators/ssh" + }, + { + "title": "WINRM", + "path": "communicators/winrm" + } + ] + }, + { + "title": "Builders", + "routes": [ + { + "title": "Overview", + "path": "builders" + }, + { + "title": "Alicloud ECS", + "path": "builders/alicloud-ecs" + }, + { + "title": "Amazon EC2", + "routes": [ + { + "title": "Overview", + "path": "builders/amazon" + }, + { + "title": "chroot", + "path": "builders/amazon/chroot" + }, + { + "title": "EBS", + "path": "builders/amazon/ebs" + }, + { + "title": "EBS Surrogate", + "path": "builders/amazon/ebssurrogate" + }, + { + "title": "EBS Volume", + "path": "builders/amazon/ebsvolume" + }, + { + "title": "Instance", + "path": "builders/amazon/instance" + } + ] + }, + { + "title": "Azure", + "routes": [ + { + "title": "Overview", + "path": "builders/azure" + }, + { + "title": "ARM", + "path": "builders/azure/arm" + }, + { + "title": "chroot", + "path": "builders/azure/chroot" + } + ] + }, + { + "title": "CloudStack", + "path": "builders/cloudstack" + }, + { + "title": "DigitalOcean", + "path": "builders/digitalocean" + }, + { + "title": "Docker", + "path": "builders/docker" + }, + { + "title": "File", + "path": "builders/file" + }, + { + "title": "Google Cloud", + "path": "builders/googlecompute" + }, + { + "title": "Hetzner Cloud", + "path": "builders/hetzner-cloud" + }, + { + "title": "HyperOne", + "path": "builders/hyperone" + }, + { + "title": "Hyper-V", + "routes": [ + { + "title": "Overview", + "path": "builders/hyperv" + }, + { + "title": "ISO", + "path": "builders/hyperv/iso" + }, + { + "title": "VMCX", + "path": "builders/hyperv/vmcx" + } + ] + }, + { + "title": "Linode", + "path": "builders/linode" + }, + { + "title": "LXC", + "path": "builders/lxc" + }, + { + "title": "LXD", + "path": "builders/lxd" + }, + { + "title": "NAVER Cloud", + "path": "builders/ncloud" + }, + { + "title": "Null", + "path": "builders/null" + }, + { + "title": "1&1", + "path": "builders/oneandone" + }, + { + "title": "OpenStack", + "path": "builders/openstack" + }, + { + "title": "Oracle", + "routes": [ + { + "title": "Overview", + "path": "builders/oracle" + }, + { + "title": "Oracle Classic", + "path": "builders/oracle/classic" + }, + { + "title": "Oracle OCI", + "path": "builders/oracle/oci" + } + ] + }, + { + "title": "Outscale", + "routes": [ + { + "title": "Overview", + "path": "builders/outscale" + }, + { + "title": "chroot", + "path": "builders/outscale/chroot" + }, + { + "title": "BSU", + "path": "builders/outscale/bsu" + }, + { + "title": "BSU Surrogate", + "path": "builders/outscale/bsusurrogate" + }, + { + "title": "BSU Volume", + "path": "builders/outscale/bsuvolume" + } + ] + }, + { + "title": "Parallels", + "routes": [ + { + "title": "Overview", + "path": "builders/parallels" + }, + { + "title": "ISO", + "path": "builders/parallels/iso" + }, + { + "title": "PVM", + "path": "builders/parallels/pvm" + } + ] + }, + { + "title": "ProfitBricks", + "path": "builders/profitbricks" + }, + { + "title": "Proxmox", + "routes": [ + { + "title": "Overview", + "path": "builders/proxmox" + }, + { + "title": "ISO", + "path": "builders/proxmox/iso" + }, + { + "title": "Clone", + "path": "builders/proxmox/clone" + } + ] + }, + { + "title": "QEMU", + "path": "builders/qemu" + }, + { + "title": "Scaleway", + "path": "builders/scaleway" + }, + { + "title": "Tencent Cloud", + "path": "builders/tencentcloud-cvm" + }, + { + "title": "JDCloud", + "path": "builders/jdcloud" + }, + { + "title": "Triton", + "path": "builders/triton" + }, + { + "title": "UCloud", + "path": "builders/ucloud-uhost" + }, + { + "title": "Vagrant", + "path": "builders/vagrant" + }, + { + "title": "VirtualBox", + "routes": [ + { + "title": "Overview", + "path": "builders/virtualbox" + }, + { + "title": "ISO", + "path": "builders/virtualbox/iso" + }, + { + "title": "OVF", + "path": "builders/virtualbox/ovf" + }, + { + "title": "VM", + "path": "builders/virtualbox/vm" + } + ] + }, + { + "title": "VMware", + "routes": [ + { + "title": "Overview", + "path": "builders/vmware" + }, + { + "title": "VMWare ISO", + "path": "builders/vmware/iso" + }, + { + "title": "VMWare VMX", + "path": "builders/vmware/vmx" + }, + { + "title": "VSphere ISO", + "path": "builders/vmware/vsphere-iso" + }, + { + "title": "VSphere Clone", + "path": "builders/vmware/vsphere-clone" + } + ] + }, + { + "title": "Yandex.Cloud", + "path": "builders/yandex" + }, + { + "title": "Custom", + "path": "builders/custom" + }, + { + "title": "Community-Supported", + "path": "builders/community-supported" + } + ] + }, + { + "title": "Data Sources", + "routes": [ + { + "title": "Overview", + "path": "datasources" + }, + { + "title": "Amazon", + "routes": [ + { + "title": "Overview", + "path": "datasources/amazon" + }, + { + "title": "Amazon AMI", + "path": "datasources/amazon/ami" + }, + { + "title": "Secrets Manager", + "path": "datasources/amazon/secretsmanager" + } + ] + } + ] + }, + { + "title": "Provisioners", + "routes": [ + { + "title": "Overview", + "path": "provisioners" + }, + { + "title": "Ansible Local", + "path": "provisioners/ansible-local" + }, + { + "title": "Ansible (Remote)", + "path": "provisioners/ansible" + }, + { + "title": "Breakpoint", + "path": "provisioners/breakpoint" + }, + { + "title": "Chef Client", + "path": "provisioners/chef-client" + }, + { + "title": "Chef Solo", + "path": "provisioners/chef-solo" + }, + { + "title": "Converge", + "path": "provisioners/converge" + }, + { + "title": "File", + "path": "provisioners/file" + }, + { + "title": "InSpec", + "path": "provisioners/inspec" + }, + { + "title": "PowerShell", + "path": "provisioners/powershell" + }, + { + "title": "Puppet Masterless", + "path": "provisioners/puppet-masterless" + }, + { + "title": "Puppet Server", + "path": "provisioners/puppet-server" + }, + { + "title": "Salt Masterless", + "path": "provisioners/salt-masterless" + }, + { + "title": "Shell", + "path": "provisioners/shell" + }, + { + "title": "Shell (Local)", + "path": "provisioners/shell-local" + }, + { + "title": "Windows Shell", + "path": "provisioners/windows-shell" + }, + { + "title": "Windows Restart", + "path": "provisioners/windows-restart" + }, + { + "title": "Custom", + "path": "provisioners/custom" + }, + { + "title": "Community-Supported", + "path": "provisioners/community-supported" + } + ] + }, + { + "title": "Post-Processors", + "routes": [ + { + "title": "Overview", + "path": "post-processors" + }, + { + "title": "Alicloud Import", + "path": "post-processors/alicloud-import" + }, + { + "title": "Amazon Import", + "path": "post-processors/amazon-import" + }, + { + "title": "Artifice", + "path": "post-processors/artifice" + }, + { + "title": "Compress", + "path": "post-processors/compress" + }, + { + "title": "Checksum", + "path": "post-processors/checksum" + }, + { + "title": "DigitalOcean Import", + "path": "post-processors/digitalocean-import" + }, + { + "title": "Docker Import", + "path": "post-processors/docker-import" + }, + { + "title": "Docker Push", + "path": "post-processors/docker-push" + }, + { + "title": "Docker Save", + "path": "post-processors/docker-save" + }, + { + "title": "Docker Tag", + "path": "post-processors/docker-tag" + }, + { + "title": "Exoscale Import", + "path": "post-processors/exoscale-import" + }, + { + "title": "Google Compute Export", + "path": "post-processors/googlecompute-export" + }, + { + "title": "Google Compute Import", + "path": "post-processors/googlecompute-import" + }, + { + "title": "Manifest", + "path": "post-processors/manifest" + }, + { + "title": "Shell (Local)", + "path": "post-processors/shell-local" + }, + { + "title": "UCloud Import", + "path": "post-processors/ucloud-import" + }, + { + "title": "Vagrant", + "path": "post-processors/vagrant" + }, + { + "title": "Vagrant Cloud", + "path": "post-processors/vagrant-cloud" + }, + { + "title": "vSphere", + "path": "post-processors/vsphere" + }, + { + "title": "vSphere Template", + "path": "post-processors/vsphere-template" + }, + { + "title": "Yandex.Cloud Compute Export", + "path": "post-processors/yandex-export" + }, + { + "title": "Yandex.Cloud Compute Import", + "path": "post-processors/yandex-import" + }, + { + "title": "Community-Supported", + "path": "post-processors/community-supported" + } + ] + }, + { + "divider": true + }, + { + "title": "Installing Packer", + "path": "install" + }, + { + "title": "Configuring Packer", + "path": "configure" + }, + { + "divider": true + }, + { + "title": "Packer Plugins", + "routes": [ + { + "title": "Overview", + "path": "plugins" + }, + { + "title": "Extending Packer", + "routes": [ + { + "title": "Overview", + "path": "plugins/creation" + }, + { + "title": "Custom Builders", + "path": "plugins/creation/custom-builders" + }, + { + "title": "Custom Post-Processors", + "path": "plugins/creation/custom-post-processors" + }, + { + "title": "Custom Provisioners", + "path": "plugins/creation/custom-provisioners" + }, + { + "title": "Custom Data Sources", + "path": "plugins/creation/custom-datasources" + } + ] + } + ] + }, + { + "divider": true + }, + { + "title": "Debugging", + "path": "debugging" + } +] diff --git a/website/data/docs-navigation.js b/website/data/docs-navigation.js deleted file mode 100644 index f97685c4c..000000000 --- a/website/data/docs-navigation.js +++ /dev/null @@ -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', -] diff --git a/website/data/docs-remote-plugins.json b/website/data/docs-remote-plugins.json new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/website/data/docs-remote-plugins.json @@ -0,0 +1 @@ +[] diff --git a/website/data/guides-nav-data.json b/website/data/guides-nav-data.json new file mode 100644 index 000000000..0fb10491a --- /dev/null +++ b/website/data/guides-nav-data.json @@ -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" + } + ] + } +] diff --git a/website/data/guides-navigation.js b/website/data/guides-navigation.js deleted file mode 100644 index 1afc29a32..000000000 --- a/website/data/guides-navigation.js +++ /dev/null @@ -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', - ], - }, -] diff --git a/website/data/intro-nav-data.json b/website/data/intro-nav-data.json new file mode 100644 index 000000000..c9bed76a7 --- /dev/null +++ b/website/data/intro-nav-data.json @@ -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" + } + ] + } +] diff --git a/website/data/intro-navigation.js b/website/data/intro-navigation.js deleted file mode 100644 index cf39f135d..000000000 --- a/website/data/intro-navigation.js +++ /dev/null @@ -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', - }, - ], - }, -] diff --git a/website/package-lock.json b/website/package-lock.json index 008fe7daf..1a542e882 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -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", diff --git a/website/package.json b/website/package.json index b006a289e..572621182 100644 --- a/website/package.json +++ b/website/package.json @@ -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", diff --git a/website/pages/docs/[[...page]].jsx b/website/pages/docs/[[...page]].jsx index ec5008ce8..fe7d637f4 100644 --- a/website/pages/docs/[[...page]].jsx +++ b/website/pages/docs/[[...page]].jsx @@ -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 ( - + <> + {isDevMissingRemotePlugins ? ( + + + Note for local development + +

+ + 🚨 + {' '} + This preview is missing plugin docs pulled from + remote repos. +

+ +

+ + 🛠 + {' '} + To preview docs pulled from plugin repos, please + include a GITHUB_API_TOKEN in{' '} + website/.env.local. +

+
+ ) : null} + + ) } 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 diff --git a/website/pages/guides/[[...page]].jsx b/website/pages/guides/[[...page]].jsx index cc5222ddd..3eef1397e 100644 --- a/website/pages/guides/[[...page]].jsx +++ b/website/pages/guides/[[...page]].jsx @@ -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 ( ) } 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 } } diff --git a/website/pages/intro/[[...page]].jsx b/website/pages/intro/[[...page]].jsx index 87b6efa99..7d45b949a 100644 --- a/website/pages/intro/[[...page]].jsx +++ b/website/pages/intro/[[...page]].jsx @@ -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 ( ) } 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 } } diff --git a/website/pages/style.css b/website/pages/style.css index eb1e05b89..5cc72072b 100644 --- a/website/pages/style.css +++ b/website/pages/style.css @@ -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';