website: remove source code (#12733)

This commit is contained in:
Bryce Kalow 2022-04-19 15:09:05 -05:00 committed by GitHub
parent 3d68e16f1b
commit 685f9d527b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
47 changed files with 9296 additions and 17016 deletions

View File

@ -1,55 +0,0 @@
version: 2
jobs:
build-website-docker-image:
docker:
- image: docker.mirror.hashicorp.services/circleci/buildpack-deps
shell: /usr/bin/env bash -euo pipefail -c
steps:
- checkout
- setup_remote_docker
- run:
name: Build Docker Image if Necessary
command: |
IMAGE_TAG=$(cat website/Dockerfile website/package-lock.json | sha256sum | awk '{print $1;}')
echo "Using $IMAGE_TAG"
if curl https://hub.docker.com/v2/repositories/hashicorp/vagrant-website/tags/$IMAGE_TAG -fsL > /dev/null; then
echo "Dependencies have not changed, not building a new website docker image."
else
cd website/
docker build -t hashicorp/vagrant-website:$IMAGE_TAG .
docker tag hashicorp/vagrant-website:$IMAGE_TAG hashicorp/vagrant-website:latest
docker login -u $WEBSITE_DOCKER_USER -p $WEBSITE_DOCKER_PASS
docker push hashicorp/vagrant-website
fi
algolia-index:
docker:
- image: node:14
steps:
- checkout
- run:
name: Push content to Algolia Index
command: |
if [ "$CIRCLE_REPOSITORY_URL" != "git@github.com:hashicorp/vagrant.git" ]; then
echo "Not Vagrant OSS Repo, not indexing Algolia"
exit 0
fi
cd website/
npm install
node scripts/index_search_content.js
workflows:
version: 2
build_website_docker_image:
jobs:
- build-website-docker-image:
filters:
branches:
only:
- main
algolia_index:
jobs:
- algolia-index:
filters:
branches:
only:
- stable-website

2
website/.gitignore vendored
View File

@ -7,3 +7,5 @@ out
# As per Next.js conventions (https://nextjs.org/docs/basic-features/environment-variables#default-environment-variables)
!.env
.env*.local
website-preview

View File

@ -1,8 +0,0 @@
FROM docker.mirror.hashicorp.services/node:14.17.0-alpine
RUN apk add --update --no-cache git make g++ automake autoconf libtool nasm libpng-dev
COPY ./package.json /website/package.json
COPY ./package-lock.json /website/package-lock.json
WORKDIR /website
RUN npm install -g npm@latest
RUN npm install

View File

@ -1,54 +1,34 @@
# Default: run this if working on the website locally to run in watch mode.
.DEFAULT_GOAL := website
PWD=$$(pwd)
DOCKER_IMAGE="hashicorp/dev-portal"
DOCKER_IMAGE_LOCAL="dev-portal-local"
DOCKER_RUN_FLAGS=-it \
--publish "3000:3000" \
--rm \
--tty \
--volume "$(PWD)/content:/app/content" \
--volume "$(PWD)/public:/app/public" \
--volume "$(PWD)/data:/app/data" \
--volume "$(PWD)/redirects.js:/app/redirects.js" \
--volume "next-dir:/app/website-preview/.next" \
--volume "$(PWD)/.env:/app/.env" \
-e "REPO=vagrant"
.PHONY: website
website:
@echo "==> Downloading latest Docker image..."
@docker pull docker.mirror.hashicorp.services/hashicorp/vagrant-website
@echo "==> Starting website in Docker..."
@docker run \
--interactive \
--rm \
--tty \
--workdir "/website" \
--volume "$(shell pwd):/website" \
--volume "/website/node_modules" \
--publish "3000:3000" \
docker.mirror.hashicorp.services/hashicorp/vagrant-website \
npm start
@docker pull $(DOCKER_IMAGE)
@echo "==> Starting website..."
@docker run $(DOCKER_RUN_FLAGS) $(DOCKER_IMAGE)
# This command will generate a static version of the website to the "out" folder.
build:
@echo "==> Downloading latest Docker image..."
@docker pull docker.mirror.hashicorp.services/hashicorp/vagrant-website
@echo "==> Starting build in Docker..."
@docker run \
--interactive \
--rm \
--tty \
--workdir "/website" \
--volume "$(shell pwd):/website" \
--volume "/website/node_modules" \
docker.mirror.hashicorp.services/hashicorp/vagrant-website \
npm run static
.PHONY: website/local
website/local:
@echo "==> Starting website from local image..."
@docker run $(DOCKER_RUN_FLAGS) $(DOCKER_IMAGE_LOCAL)
# If you are changing node dependencies locally, run this to generate a new
# local Docker image with the dependency changes included.
build-image:
@echo "==> Building Docker image..."
@docker build -t hashicorp-vagrant-website-local .
# Use this if you have run `build-image` to use the locally built image
# rather than our CI-generated image to test dependency changes.
website-local:
@echo "==> Starting website in Docker..."
@docker run \
--interactive \
--rm \
--tty \
--workdir "/website" \
--volume "$(shell pwd):/website" \
--volume "/website/node_modules" \
--publish "3000:3000" \
hashicorp-vagrant-website-local \
npm start
.DEFAULT_GOAL := website
.PHONY: build build-image website website-local
.PHONY: website/build-local
website/build-local:
@echo "==> Building local Docker image"
@docker build https://github.com/hashicorp/dev-portal.git\#main \
-t $(DOCKER_IMAGE_LOCAL)

View File

@ -1,6 +1,6 @@
# Vagrant Website
This subdirectory contains the entire source for the [Vagrant Website](https://vagrantup.com/). This is a [NextJS](https://nextjs.org/) project, which builds a static site from these source files.
This subdirectory contains the content for the [Vagrant Website](https://vagrantup.com/).
<!--
This readme file contains several blocks of generated text, to make it easier to share common information

View File

@ -1,31 +0,0 @@
import s from './style.module.css'
import Link from 'next/link'
export default function Footer({ openConsentManager }) {
return (
<footer className={s.root}>
<div className="g-grid-container">
<Link href="/intro">
<a>Intro</a>
</Link>
<Link href="/docs">
<a>Docs</a>
</Link>
<a href="https://www.amazon.com/gp/product/1449335837/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1449335837&linkCode=as2&tag=vagrant-20">
Book
</a>
<Link href="/vmware">
<a>VMware</a>
</Link>
<a href="https://hashicorp.com/privacy">Privacy</a>
<Link href="/security">
<a>Security</a>
</Link>
<Link href="/files/press-kit.zip">
<a>Press Kit</a>
</Link>
<a onClick={openConsentManager}>Consent Manager</a>
</div>
</footer>
)
}

View File

@ -1,28 +0,0 @@
.root {
padding: 25px 0 17px 0;
flex-shrink: 0;
display: flex;
& :global(.g-grid-container) {
display: flex;
flex-wrap: wrap;
}
& a {
color: black;
opacity: 0.5;
transition: opacity 0.25s ease;
cursor: pointer;
display: inline-block;
margin-right: 20px;
margin-bottom: 8px;
&:last-child {
margin-right: 0;
}
&:hover {
opacity: 1;
}
}
}

View File

@ -1,24 +0,0 @@
import Subnav from '@hashicorp/react-subnav'
import subnavItems from '../../data/subnav'
import { useRouter } from 'next/router'
export default function VagrantSubnav() {
const router = useRouter()
return (
<Subnav
titleLink={{
text: 'vagrant',
url: '/',
}}
ctaLinks={[
{ text: 'GitHub', url: 'https://www.github.com/hashicorp/vagrant' },
{ text: 'Download', url: '/downloads' },
]}
currentPath={router.pathname}
menuItemsAlign="right"
menuItems={subnavItems}
constrainWidth
matchOnBasePath
/>
)
}

View File

@ -1,14 +0,0 @@
import styles from './style.module.css'
export default function TextSplit({ text, reverse, children }) {
return (
<div className={`${styles.root} ${reverse ? styles.reverse : ''}`}>
<div className={styles.text}>
<div className={styles.tag}>{text.tag}</div>
<h2 className={styles.headline}>{text.headline}</h2>
<p className="g-type-body">{text.text}</p>
</div>
<div className={styles.content}>{children}</div>
</div>
)
}

View File

@ -1,50 +0,0 @@
.root {
display: flex;
flex-direction: row;
justify-content: space-between;
@media (max-width: 1000px) {
flex-direction: column;
}
}
.reverse {
flex-direction: row-reverse;
@media (max-width: 1000px) {
flex-direction: column;
}
}
.tag {
composes: g-type-label from global;
display: inline-block;
background: black;
color: white;
padding: 6px 8px;
}
.headline {
composes: g-type-display-2 from global;
margin: 20px 0 10px 0;
}
.text {
width: 50%;
@media (max-width: 1000px) {
width: 100%;
margin-bottom: 50px;
}
}
.content {
width: 46%;
display: flex;
align-items: center;
justify-content: center;
@media (max-width: 1000px) {
width: 100%;
}
}

View File

@ -1,30 +0,0 @@
import s from './style.module.css'
import { useState } from 'react'
export default function VMWarePurchaseForm({ productId }) {
const [seats, setSeats] = useState(1)
const submit = (e) => {
e.preventDefault()
const seatsInt = parseInt(seats, 10)
if (isNaN(seatsInt)) {
return alert('The number of seats you want to purchase must be a number.')
}
if (seatsInt <= 0) {
return alert('The number of seats you want must be greater than zero.')
}
window.location.href = `http://shopify.hashicorp.com/cart/${productId}:${seats}`
}
return (
<form className={s.root} onSubmit={submit}>
<input
type="number"
value={seats}
onChange={(e) => setSeats(e.target.value)}
></input>
<button>Buy Now</button>
</form>
)
}

View File

@ -1,32 +0,0 @@
.root {
& input {
border: none;
box-shadow: 3px 4px 0 rgba(0, 0, 0, 0.1);
font-size: 18px;
height: 50px;
line-height: 50px;
padding: 0 15px;
text-align: center;
width: 60px;
}
& button {
background: var(--brand, #2e71e5);
border: none;
border-radius: 0;
box-shadow: 3px 4px 0 rgba(0, 0, 0, 0.1);
color: #fff;
font-family: 'gilmer-web', 'Gilmer', Geneva, Tahoma, Helvetica, Verdana,
sans-serif;
font-size: 18px;
height: 50px;
line-height: 50px;
padding: 0 15px;
cursor: pointer;
transition: background-color 0.25s ease;
&:hover {
background: #3176ff;
}
}
}

1
website/global.d.ts vendored
View File

@ -1 +0,0 @@
/// <reference types="@hashicorp/platform-types" />

View File

@ -1,15 +0,0 @@
import { ConsentManagerService } from '@hashicorp/react-consent-manager/types'
const localConsentManagerServices: ConsentManagerService[] = [
{
name: 'Demandbase Tag',
description:
'The Demandbase tag is a tracking service to identify website visitors and measure interest on our website.',
category: 'Analytics',
url: 'https://tag.demandbase.com/960ab0a0f20fb102.min.js',
async: true,
},
]
export default localConsentManagerServices

View File

@ -1,5 +0,0 @@
/// <reference types="next" />
/// <reference types="next/types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

View File

@ -1,24 +0,0 @@
const withHashicorp = require('@hashicorp/platform-nextjs-plugin')
const redirects = require('./redirects.next')
// log out our primary environment variables for clarity in build logs
console.log(`HASHI_ENV: ${process.env.HASHI_ENV}`)
console.log(`NODE_ENV: ${process.env.NODE_ENV}`)
console.log(`VERCEL_ENV: ${process.env.VERCEL_ENV}`)
console.log(`MKTG_CONTENT_API: ${process.env.MKTG_CONTENT_API}`)
console.log(`ENABLE_VERSIONED_DOCS: ${process.env.ENABLE_VERSIONED_DOCS}`)
module.exports = withHashicorp({
defaultLayout: true,
nextOptimizedImages: true,
})({
svgo: { plugins: [{ removeViewBox: false }] },
redirects: () => redirects,
env: {
HASHI_ENV: process.env.HASHI_ENV || 'development',
SEGMENT_WRITE_KEY: 'wFMyBE4PJCZttWfu0pNhYdWr7ygW0io4',
BUGSNAG_CLIENT_KEY: '87a42e709789c35676b06b0d29a9075d',
BUGSNAG_SERVER_KEY: '4acc6140aaebfab35f535a3666674a07',
ENABLE_VERSIONED_DOCS: process.env.ENABLE_VERSIONED_DOCS || false,
},
})

24598
website/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -3,43 +3,11 @@
"description": "Documentation website for HashiCorp Vagrant",
"version": "1.0.0",
"author": "HashiCorp",
"dependencies": {
"@hashicorp/mktg-global-styles": "^4.0.0",
"@hashicorp/platform-analytics": "^0.2.0",
"@hashicorp/platform-code-highlighting": "^0.1.2",
"@hashicorp/platform-runtime-error-monitoring": "^0.1.0",
"@hashicorp/platform-util": "^0.1.0",
"@hashicorp/react-alert-banner": "^7.0.1",
"@hashicorp/react-button": "^6.0.1",
"@hashicorp/react-code-block": "^4.1.5",
"@hashicorp/react-consent-manager": "^7.1.0",
"@hashicorp/react-docs-page": "^14.12.0",
"@hashicorp/react-hashi-stack-menu": "^2.1.2",
"@hashicorp/react-head": "^3.1.2",
"@hashicorp/react-inline-svg": "^6.0.3",
"@hashicorp/react-min-100-layout": "^2.0.1",
"@hashicorp/react-product-downloader": "^8.0.0",
"@hashicorp/react-product-downloads-page": "^2.5.3",
"@hashicorp/react-search": "^6.1.1",
"@hashicorp/react-section-header": "^5.0.4",
"@hashicorp/react-subnav": "^9.3.2",
"@hashicorp/react-tabs": "^7.0.1",
"@hashicorp/react-vertical-text-block-list": "^7.0.0",
"next": "^11.1.2",
"next-mdx-remote": "3.0.1",
"next-remote-watch": "^1.0.0",
"react": "^17.0.2",
"react-dom": "^17.0.2"
},
"dependencies": {},
"devDependencies": {
"@hashicorp/platform-cli": "^1.2.0",
"@hashicorp/platform-nextjs-plugin": "^1.0.1",
"@hashicorp/platform-types": "^0.1.1",
"@types/react": "^17.0.3",
"dart-linkcheck": "2.0.15",
"husky": "4.3.6",
"prettier": "2.2.1",
"typescript": "^4.3.5"
"husky": "4.3.8",
"prettier": "2.2.1"
},
"husky": {
"hooks": {
@ -47,15 +15,12 @@
}
},
"scripts": {
"build": "node --max-old-space-size=2048 ./node_modules/.bin/next build",
"export": "node --max-old-space-size=2048 ./node_modules/.bin/next export",
"build": "./scripts/website-build.sh",
"format": "next-hashicorp format",
"generate:component": "next-hashicorp generate component",
"generate:readme": "next-hashicorp markdown-blocks README.md",
"lint": "next-hashicorp lint",
"start": "next-remote-watch './content/**/*.mdx'",
"static": "npm run build && npm run export && cp _redirects out/.",
"linkcheck": "linkcheck https://vagrantup.com"
"linkcheck": "linkcheck https://vagrantup.com",
"start": "./scripts/website-start.sh"
},
"engines": {
"npm": ">=7.0.0"

View File

@ -1,33 +0,0 @@
import s from './404.module.css'
import Link from 'next/link'
import { useEffect } from 'react'
export default function NotFound() {
useEffect(() => {
if (
typeof window !== 'undefined' &&
typeof window?.analytics?.track === 'function' &&
typeof window?.document?.referrer === 'string' &&
typeof window?.location?.href === 'string'
)
window.analytics.track(window.location.href, {
category: '404 Response',
label: window.document.referrer || 'No Referrer',
})
}, [])
return (
<div className={s.root}>
<h1 className={s.heading}>Page Not Found</h1>
<p>
We&lsquo;re sorry but we can&lsquo;t find the page you&lsquo;re looking
for.
</p>
<p>
<Link href="/">
<a>Back to Home</a>
</Link>
</p>
</div>
)
}

View File

@ -1,23 +0,0 @@
.root {
composes: .g-grid-container from global;
display: flex;
flex-direction: column;
justify-content: center;
margin: 64px auto; /* this is being overridden at the request of the learn team */
max-width: 784px;
min-height: 50vh;
padding-inline: 32px;
text-align: center;
@media (--large) {
padding-inline: 24px;
}
& a {
color: var(--highlight-color);
}
}
.heading {
composes: g-type-display-3 from global;
}

View File

@ -1,55 +0,0 @@
import './style.css'
import '@hashicorp/platform-util/nprogress/style.css'
import Min100Layout from '@hashicorp/react-min-100-layout'
import NProgress from '@hashicorp/platform-util/nprogress'
import usePageviewAnalytics from '@hashicorp/platform-analytics'
import createConsentManager from '@hashicorp/react-consent-manager/loader'
import localConsentManagerServices from 'lib/consent-manager-services'
import useAnchorLinkAnalytics from '@hashicorp/platform-util/anchor-link-analytics'
import Router from 'next/router'
import HashiHead from '@hashicorp/react-head'
import Head from 'next/head'
import { ErrorBoundary } from '@hashicorp/platform-runtime-error-monitoring'
import HashiStackMenu from '@hashicorp/react-hashi-stack-menu'
import ProductSubnav from '../components/subnav'
import Footer from '../components/footer'
import Error from './_error'
import AlertBanner from '@hashicorp/react-alert-banner'
import alertBannerData, { ALERT_BANNER_ACTIVE } from 'data/alert-banner'
NProgress({ Router })
const { ConsentManager, openConsentManager } = createConsentManager({
preset: 'oss',
otherServices: [...localConsentManagerServices],
})
export default function App({ Component, pageProps }) {
useAnchorLinkAnalytics()
usePageviewAnalytics()
return (
<ErrorBoundary FallbackComponent={Error}>
<HashiHead
is={Head}
title="Vagrant by HashiCorp"
siteName="Vagrant by HashiCorp"
description="Vagrant enables users to create and configure lightweight, reproducible, and
portable development environments."
image="https://www.vagrantup.com/img/og-image.png"
icon={[{ href: '/favicon.ico' }]}
/>
<Min100Layout footer={<Footer openConsentManager={openConsentManager} />}>
{ALERT_BANNER_ACTIVE && (
<AlertBanner {...alertBannerData} product="vagrant" hideOnMobile />
)}
<HashiStackMenu />
<ProductSubnav />
<div className="content">
<Component {...pageProps} />
</div>
</Min100Layout>
<ConsentManager />
</ErrorBoundary>
)
}

View File

@ -1,29 +0,0 @@
import Document, { Html, Head, Main, NextScript } from 'next/document'
import HashiHead from '@hashicorp/react-head'
export default class MyDocument extends Document {
static async getInitialProps(ctx) {
const initialProps = await Document.getInitialProps(ctx)
return { ...initialProps }
}
render() {
return (
<Html>
<Head>
<HashiHead />
</Head>
<body>
<Main />
<NextScript />
<script
noModule
dangerouslySetInnerHTML={{
__html: `window.MSInputMethodContext && document.documentMode && document.write('<script src="/ie-warning.js"><\\x2fscript>');`,
}}
/>
</body>
</Html>
)
}
}

View File

@ -1,14 +0,0 @@
import NotFound from './404'
import Bugsnag from '@hashicorp/platform-runtime-error-monitoring'
function Error({ statusCode }) {
return <NotFound statusCode={statusCode} />
}
Error.getInitialProps = ({ res, err }) => {
if (err) Bugsnag.notify(err)
const statusCode = res ? res.statusCode : err ? err.statusCode : 404
return { statusCode }
}
export default Error

View File

@ -1,48 +0,0 @@
import s from './style.module.css'
import VerticalTextBlockList from '@hashicorp/react-vertical-text-block-list'
import SectionHeader from '@hashicorp/react-section-header'
import Head from 'next/head'
export default function CommunityPage() {
return (
<div className={s.root}>
<Head>
<title key="title">Community | Vagrant by HashiCorp</title>
</Head>
<SectionHeader
headline="Community"
description="Vagrant is an open source project with a growing community. There are active, dedicated users willing to help you through various mediums."
use_h1={true}
/>
<VerticalTextBlockList
data={[
{
header: 'Community Forum',
body:
'<a href="https://discuss.hashicorp.com/c/vagrant/24">Vagrant Community Forum</a>',
},
{
header: 'Announcement List',
body:
'<a href="https://groups.google.com/group/hashicorp-announce">HashiCorp Announcement Google Group</a>',
},
{
header: 'Discussion List',
body:
'<a href="https://groups.google.com/forum/#!forum/vagrant-up">Vagrant Google Group</a>',
},
{
header: 'Bug Tracker',
body:
'<a href="https://github.com/hashicorp/vagrant/issues">Issue tracker on GitHub</a>. Please only use this for reporting bugs. Do not ask for general help here. Use IRC or the mailing list for that.',
},
{
header: 'Training',
body:
'Paid <a href="https://www.hashicorp.com/training">HashiCorp training courses</a> are also available in a city near you. Private training courses are also available.',
},
]}
/>
</div>
)
}

View File

@ -1,9 +0,0 @@
.root {
composes: g-grid-container from global;
margin-top: 72px;
margin-bottom: 72px;
& :global(.g-section-header) {
margin-bottom: 100px;
}
}

View File

@ -1,42 +0,0 @@
import { productName, productSlug } from 'data/metadata'
import DocsPage from '@hashicorp/react-docs-page'
import { getStaticGenerationFunctions } from '@hashicorp/react-docs-page/server'
import versions from 'data/version.json'
import Button from '@hashicorp/react-button'
const NAV_DATA_FILE = 'data/docs-nav-data.json'
const CONTENT_DIR = 'content/docs'
const basePath = 'docs'
const additionalComponents = { Button }
export default function DocsLayout(props) {
return (
<DocsPage
product={{ name: productName, slug: productSlug }}
baseRoute={basePath}
staticProps={props}
additionalComponents={additionalComponents}
/>
)
}
const { getStaticPaths, getStaticProps } = getStaticGenerationFunctions(
process.env.ENABLE_VERSIONED_DOCS === 'true'
? {
strategy: 'remote',
basePath: basePath,
fallback: 'blocking',
revalidate: 360, // 1 hour
product: productSlug,
scope: { VMWARE_UTILITY_VERSION: versions.VMWARE_UTILITY_VERSION },
}
: {
strategy: 'fs',
localContentDir: CONTENT_DIR,
navDataFile: NAV_DATA_FILE,
product: productSlug,
scope: { VMWARE_UTILITY_VERSION: versions.VMWARE_UTILITY_VERSION },
}
)
export { getStaticPaths, getStaticProps }

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="178" height="48" viewBox="0 0 178 48" fill="none" role="img"><path d="M79.91 11.272h5.024l-7.637 25.6h-7.134l-7.637-25.6h5.025L73.726 32.6l6.183-21.328zM98.906 36.872h-3.835l-.343-1.272a10.213 10.213 0 01-5.592 1.656c-3.419 0-4.873-2.344-4.873-5.6 0-3.808 1.654-5.264 5.448-5.264h4.49v-1.936c0-2.072-.575-2.808-3.571-2.808-1.743.018-3.48.211-5.184.576l-.576-3.576a24.358 24.358 0 016.391-.888c5.871 0 7.597 2.072 7.597 6.768l.048 12.344zM94.225 29.8h-3.451c-1.534 0-1.957.424-1.957 1.848 0 1.424.423 1.88 1.877 1.88a7.364 7.364 0 003.53-.96V29.8zM107.845 31.832a2.02 2.02 0 00-1.111 1.496c0 .496.304.728 1.039.8 2.069.232 3.195.344 5.408.576 3.036.344 3.994 1.848 3.994 4.536 0 4-1.462 5.6-8.443 5.6a27.17 27.17 0 01-7.19-.96l.575-3.496a25.92 25.92 0 006.295.8c3.723 0 4.45-.272 4.45-1.496s-.344-1.344-1.766-1.496c-2.149-.232-3.035-.344-5.408-.616-2.644-.304-3.683-1.192-3.683-3.576a4.007 4.007 0 011.958-3.2c-1.726-1.04-2.533-2.768-2.533-5.032v-1.776c.08-3.88 2.109-6.224 7.525-6.224 1.077-.008 2.151.12 3.196.384h5.759v2.344c-.655.192-1.422.384-2.069.576.446.908.67 1.908.655 2.92v1.768c0 3.808-2.3 6.112-7.525 6.112a9.682 9.682 0 01-1.126-.04zm1.07-10.304c-2.3 0-3.107.848-3.107 2.616v1.448c0 1.848.918 2.536 3.107 2.536s3.148-.728 3.148-2.536v-1.448c.008-1.752-.799-2.608-3.14-2.608l-.008-.008zM129.605 22.072a36.678 36.678 0 00-4.945 2.72v12.08h-4.713v-18.72h3.994l.304 2.072a20.943 20.943 0 014.913-2.456l.447 4.304zM145.262 36.872h-3.834l-.344-1.272a10.208 10.208 0 01-5.591 1.656c-3.419 0-4.873-2.344-4.873-5.6 0-3.808 1.653-5.264 5.448-5.264h4.489v-1.936c0-2.072-.575-2.808-3.571-2.808a26.081 26.081 0 00-5.184.576l-.575-3.576a24.35 24.35 0 016.39-.888c5.872 0 7.597 2.072 7.597 6.768l.048 12.344zm-4.681-7.072h-3.451c-1.534 0-1.957.424-1.957 1.848 0 1.424.423 1.88 1.877 1.88a7.365 7.365 0 003.531-.96V29.8zM159.194 36.872V23.8c0-1-.423-1.496-1.493-1.496a12.895 12.895 0 00-4.873 1.6v12.968h-4.682v-18.72h3.571l.464 1.6a18.692 18.692 0 017.485-1.96c3.107 0 4.218 2.192 4.218 5.536v13.6l-4.69-.056zM177.656 36.52a12.97 12.97 0 01-4.106.728c-3.419 0-5.145-1.6-5.145-4.96v-10.4h-2.804v-3.736h2.804v-4.648l4.681-.656v5.304h4.793l-.303 3.728h-4.49v9.8a1.488 1.488 0 00.431 1.249 1.47 1.47 0 001.255.407 8.983 8.983 0 002.34-.384l.544 3.568z" fill="#000"></path><path d="M46.478 8.088V3.696L35.94 9.832v3.712l-8.428 18.208-4.218 2.912V48l9.035-5.216L46.478 8.088zM23.295 25.168l-6.318-14.776V6.216l-.04-.016-6.28 3.632v3.712l8.428 19.008 4.21-2.088v-5.296z" fill="#1159CC"></path><path d="M40.159 0L29.63 6.176h-.008v4.216l-6.326 14.776v4.936l-4.21 2.448-8.428-19.008v-3.72l6.327-3.64L6.44 0 .12 3.696v4.528l14.227 34.6L23.295 48V35l4.218-2.448-.056-.032 8.484-18.976v-3.72l10.537-6.128L40.159 0z" fill="#127EFF"></path></svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -1,71 +0,0 @@
import { VERSION } from 'data/version'
import { productSlug } from 'data/metadata'
import ProductDownloadsPage from '@hashicorp/react-product-downloads-page'
import { generateStaticProps } from '@hashicorp/react-product-downloads-page/server'
import Link from 'next/link'
import s from './style.module.css'
export default function DownloadsPage(staticProps) {
return (
<ProductDownloadsPage
getStartedDescription="Follow step-by-step tutorials on the essentials of Vagrant."
getStartedLinks={[
{
label: 'Quick Start',
href:
'https://learn.hashicorp.com/tutorials/vagrant/getting-started-index',
},
{
label: 'Install and Specify a Box',
href:
'https://learn.hashicorp.com/tutorials/vagrant/getting-started-boxes',
},
{
label: 'Configure the Network',
href:
'https://learn.hashicorp.com/tutorials/vagrant/getting-started-networking',
},
{
label: 'View all Vagrant tutorials',
href: 'https://learn.hashicorp.com/vagrant',
},
]}
logo={
<img
className={s.logo}
alt="Vagrant"
src={require('./img/vagrant-logo.svg')}
/>
}
tutorialLink={{
href: 'https://learn.hashicorp.com/vagrant',
label: 'View Tutorials at HashiCorp Learn',
}}
merchandisingSlot={
<Link href="/vmware/downloads">
<a>&raquo; Download VMware Utility</a>
</Link>
}
packageManagerOverrides={[
{
label: 'Homebrew',
commands: [`brew install ${productSlug}`],
os: 'darwin',
},
{
label: 'Homebrew',
commands: [`brew install ${productSlug}`],
os: 'linux',
},
]}
{...staticProps}
/>
)
}
export async function getStaticProps() {
return generateStaticProps({
product: productSlug,
latestVersion: VERSION,
})
}

View File

@ -1,3 +0,0 @@
.logo {
width: 105px;
}

View File

@ -1,115 +0,0 @@
import s from './style.module.css'
import Button from '@hashicorp/react-button'
import TextSplit from 'components/temporary_text-split'
import CodeBlock from '@hashicorp/react-code-block'
import versions from 'data/version.json'
export default function HomePage() {
return (
<div>
<section className={s.hero}>
<div className="g-grid-container">
<img src="/img/logo-hashicorp.svg" alt="Vagrant Logo" />
<h1 className="g-type-display-3">
Development Environments Made Easy
</h1>
<div className={s.buttons}>
<Button title="Get Started" url="/intro/index" />
<Button
title={`Download ${versions.VERSION}`}
theme={{ variant: 'secondary' }}
url="/downloads"
/>
<Button
title="Find Boxes"
theme={{ variant: 'secondary' }}
url="https://app.vagrantup.com/boxes/search"
/>
</div>
</div>
</section>
<section className={s.unifiedWorkflow}>
<div className="g-grid-container">
<TextSplit
text={{
tag: 'Unified Workflow',
headline: 'Simple and Powerful',
text:
'HashiCorp Vagrant provides the same, easy workflow regardless of your role as a developer, operator, or designer. It leverages a declarative configuration file which describes all your software requirements, packages, operating system configuration, users, and more.',
}}
>
<CodeBlock
code={`$ vagrant init hashicorp/bionic64
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'hashicorp/bionic64'...
==> default: Forwarding ports...
default: 22 (guest)
=> 2222 (host) (adapter 1)
==> default: Waiting for machine to boot...
$ vagrant ssh
vagrant@bionic64:~$ _`}
/>
</TextSplit>
</div>
</section>
<section className={s.enforceConsistency}>
<div className="g-grid-container">
<TextSplit
text={{
tag: 'Enforce Consistency',
headline: 'Production Parity',
text:
'The cost of fixing a bug exponentially increases the closer it gets to production. Vagrant aims to mirror production environments by providing the same operating system, packages, users, and configurations, all while giving users the flexibility to use their favorite editor, IDE, and browser. Vagrant also integrates with your existing configuration management tooling like Ansible, Chef, Docker, Puppet or Salt, so you can use the same scripts to configure Vagrant as production.',
}}
reverse={true}
>
<img src="/img/vagrant_parity.svg" alt="Server Parity Diagram" />
</TextSplit>
</div>
</section>
<section className={s.crossPlatform}>
<div className="g-grid-container">
<TextSplit
text={{
tag: 'Cross-Platform',
headline: 'Works where you work',
text:
"Vagrant works on Mac, Linux, Windows, and more. Remote development environments force users to give up their favorite editors and programs. Vagrant works on your local system with the tools you're already familiar with. Easily code in your favorite text editor, edit images in your favorite manipulation program, and debug using your favorite tools, all from the comfort of your local laptop.",
}}
>
{['apple', 'linux', 'windows'].map((platform) => (
<img
key={platform}
src={`/img/systems/${platform}.svg`}
alt={`${platform} logo`}
/>
))}
</TextSplit>
</div>
</section>
<section className={s.trustedAtScale}>
<div className="g-grid-container">
<div className={s.tag}>Trusted at Scale</div>
<h2 className={s.h2}>Trusted By</h2>
<p className="g-type-body">
Vagrant is trusted by thousands of developers, operators, and
designers everyday. Here are just a few of the organizations that
choose Vagrant to automate their development environments, in
lightweight and reproducible ways.
</p>
<img
className={s.customerImg}
src="/img/vagrant-trusted-by-logos.png"
alt="Logos of Vagrant customers"
/>
</div>
</section>
</div>
)
}

View File

@ -1,91 +0,0 @@
.block {
padding: 100px 0;
/** DEBT: remove when text split body copy color is updated */
& :global(.g-type-body) {
color: var(--gray-2);
}
}
.hero {
display: flex;
align-items: center;
text-align: center;
margin: 150px 0;
& img {
max-width: 445px;
}
& .buttons > * {
margin-right: 15px;
margin-top: 25px;
& > *:last-child {
margin-right: 0;
}
@media (max-width: 500px) {
width: 100%;
margin-top: 20px;
}
}
}
.unifiedWorkflow {
composes: block;
}
/* enforce consistency section */
.enforceConsistency {
composes: block;
& img {
max-width: 70%;
}
}
/* cross-platform section */
.crossPlatform {
composes: block;
& img {
max-width: 130px;
min-width: 20px;
height: auto;
fill: black;
padding: 0 20px;
}
}
/* trusted at scale section */
.trustedAtScale {
composes: block;
background: var(--vagrant-secondary);
& .customerImg {
max-width: 80%;
margin: 50px auto 0 auto;
display: block;
@media (max-width: 800px) {
max-width: 100%;
}
}
}
.tag {
composes: g-type-label from global;
display: inline-block;
background: black;
color: white;
padding: 6px 8px;
}
.h2 {
composes: g-type-display-2 from global;
margin: 20px 0 10px 0;
}

View File

@ -1,2 +0,0 @@
import Homepage from './home'
export default Homepage

View File

@ -1,36 +0,0 @@
import { productName, productSlug } from 'data/metadata'
import DocsPage from '@hashicorp/react-docs-page'
import { getStaticGenerationFunctions } from '@hashicorp/react-docs-page/server'
const NAV_DATA_FILE = 'data/intro-nav-data.json'
const CONTENT_DIR = 'content/intro'
const basePath = 'intro'
export default function DocsLayout(props) {
return (
<DocsPage
product={{ name: productName, slug: productSlug }}
baseRoute={basePath}
staticProps={props}
/>
)
}
const { getStaticPaths, getStaticProps } = getStaticGenerationFunctions(
process.env.ENABLE_VERSIONED_DOCS === 'true'
? {
strategy: 'remote',
basePath: basePath,
fallback: 'blocking',
revalidate: 360, // 1 hour
product: productSlug,
}
: {
strategy: 'fs',
localContentDir: CONTENT_DIR,
navDataFile: NAV_DATA_FILE,
product: productSlug,
}
)
export { getStaticPaths, getStaticProps }

View File

@ -1,229 +0,0 @@
/* Print Styles - Hide Elements */
@media print {
iframe,
.g-footer,
[class*='hashi-stack-menu'],
[aria-hidden='true'],
[id='__next-build-watcher'],
[id='edit-this-page'],
[id='jump-to-section'],
[id='sidebar'] {
display: none !important;
}
}
/* Print Styles - Page Spacing */
@media print {
@page {
margin: 2cm 0.5cm;
}
@page :first {
margin-top: 0;
}
@page :last {
margin-top: 0;
}
blockquote {
break-inside: avoid;
}
body {
margin-bottom: 2cm;
margin-top: 2cm;
}
dl,
ol,
ul {
break-before: avoid;
}
h1,
h2,
h3,
h4,
h5,
h6 {
break-after: avoid;
break-inside: avoid;
}
img {
break-inside: avoid;
break-after: avoid;
}
pre,
table {
break-inside: avoid;
}
pre {
white-space: pre-wrap;
}
}
@media print {
/* @todo: remove alongside @hashicorp/react-global-styles/_temporary-to-remove/layout.css */
.g-grid-container {
/*
* A measure is the number of characters in a line of text.
* Long lines fatique readers as they find the start of a new line of text.
* It seems widely accepted that an ideal measure is 66 characters per line.
* An average character takes up .5em, and so we define a measure of 33em.
* See: https://webtypography.net/2.1.2
*/
max-width: 33em;
padding-left: 0;
padding-right: 0;
word-break: break-word;
}
/* @todo: remove alongside @hashicorp/react-global-styles/_temporary-to-remove/tables.css */
table {
margin-bottom: 0;
margin-top: 20px;
}
}
/* @todo: move print styles to @hashicorp/react-global-styles/global.css */
@media print {
pre code,
code,
pre {
font-weight: inherit;
}
pre {
background: transparent;
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.15);
color: inherit;
padding: 0.5em;
& > code {
white-space: inherit;
}
}
}
/* @todo: move print styles to @hashicorp/react-content/dist/style.css */
@media print {
.g-content {
& a {
color: inherit;
font-weight: 700;
&:not(.anchor) {
&::after {
background-color: transparent;
position: static;
opacity: 1;
}
}
&[href^='http'] {
&::after {
content: ' <' attr(href) '>';
font-size: 0.8em;
font-style: italic;
letter-spacing: -0.01875em;
vertical-align: top;
}
}
&:not([href^='http']) {
text-decoration: underline;
}
& > code {
color: inherit;
font-weight: 700;
&::before,
&::after {
content: none;
}
}
}
& h1,
& h2,
& h3,
& h4,
& h5,
& h6 {
& code {
background: none;
font-size: 1em;
padding: 0;
}
}
& h2 {
margin: 1em 0 0;
}
& h3 {
margin: 1em 0 0;
padding-bottom: 0.25em;
}
& img {
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15);
margin: 1em 0 0;
}
& ol,
& ul {
margin: 1em 0 0;
& li {
margin-bottom: 0;
margin-top: 0.5em;
& p:first-child {
margin-top: 0;
}
}
}
& p {
margin: 1em 0 0;
}
& pre {
background-color: transparent;
border-radius: 0;
margin: 1.5em 0 0;
& code {
background: transparent;
color: inherit;
}
}
& dd,
& dt,
& li,
& p,
& td,
& th {
& > :not(pre) code,
& > code {
background: transparent;
font-weight: 700;
padding: 0;
}
}
& .alert.alert-danger,
& .alert.alert-info,
& .alert.alert-success,
& .alert.alert-warning {
background-color: transparent;
}
}
}

View File

@ -1,46 +0,0 @@
import Head from 'next/head'
import s from './style.module.css'
export default function SecurityPage() {
return (
<>
<Head>
<title>Security</title>
<meta
name="description"
key="description"
content="Vagrant takes security very seriously. Please responsibly disclose any
security vulnerabilities found and we'll handle it quickly."
/>
</Head>
<main className={s.root}>
<h1 className="g-type-display-1">Security</h1>
<p>
We understand that many users place a high level of trust in HashiCorp
and the tools we build. We apply best practices and focus on security
to make sure we can maintain the trust of the community.
</p>
<p>
We deeply appreciate any effort to disclose vulnerabilities
responsibly.
</p>
<p>
If you would like to report a vulnerability, please see the{' '}
<a href="https://www.hashicorp.com/security">
HashiCorp security page
</a>
, which has the proper email to communicate with as well as our PGP
key.
</p>
<p>
If you aren&apos;t reporting a security sensitive vulnerability,
please open an issue on the standard{' '}
<a href="https://github.com/hashicorp/vagrant">GitHub</a> repository.
</p>
</main>
</>
)
}

View File

@ -1,5 +0,0 @@
.root {
composes: g-grid-container from global;
max-width: 950px;
margin-top: 90px;
}

View File

@ -1,26 +0,0 @@
/* Global Component Styles */
@import '~@hashicorp/mktg-global-styles/style.css';
:root {
--highlight-color: var(--vagrant);
}
/* Print Styles */
@import './print.css';
/*
* About this selector:
* `.g-subnav ~ *` finds all elements after the navigation.
* `:target` finds the active permalink on the page.
*
* About this style:
* `scroll-margin-top` adjusts the vertical scroll of a permalink.
* `64px` adjusts the scroll to account for the navigation.
* `0.5em` further adjusts the scroll to give the permalink breathing room.
*
* See: https://developer.mozilla.org/en-US/docs/Web/CSS/:target
* See: https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-margin-top
*/
.g-subnav ~ * :target {
scroll-margin-top: calc(64px + 0.5em);
}

View File

@ -1,36 +0,0 @@
import { productName, productSlug } from 'data/metadata'
import DocsPage from '@hashicorp/react-docs-page'
import { getStaticGenerationFunctions } from '@hashicorp/react-docs-page/server'
const NAV_DATA_FILE = 'data/vagrant-cloud-nav-data.json'
const CONTENT_DIR = 'content/vagrant-cloud'
const basePath = 'vagrant-cloud'
export default function DocsLayout(props) {
return (
<DocsPage
product={{ name: productName, slug: productSlug }}
baseRoute={basePath}
staticProps={props}
/>
)
}
const { getStaticPaths, getStaticProps } = getStaticGenerationFunctions(
process.env.ENABLE_VERSIONED_DOCS === 'true'
? {
strategy: 'remote',
basePath: basePath,
fallback: 'blocking',
revalidate: 360, // 1 hour
product: productSlug,
}
: {
strategy: 'fs',
localContentDir: CONTENT_DIR,
navDataFile: NAV_DATA_FILE,
product: productSlug,
}
)
export { getStaticPaths, getStaticProps }

View File

@ -1,36 +0,0 @@
import { productName, productSlug } from 'data/metadata'
import DocsPage from '@hashicorp/react-docs-page'
import { getStaticGenerationFunctions } from '@hashicorp/react-docs-page/server'
const NAV_DATA_FILE = 'data/vmware-nav-data.json'
const CONTENT_DIR = 'content/vmware'
const basePath = 'vmware'
export default function DocsLayout(props) {
return (
<DocsPage
product={{ name: productName, slug: productSlug }}
baseRoute={basePath}
staticProps={props}
/>
)
}
const { getStaticPaths, getStaticProps } = getStaticGenerationFunctions(
process.env.ENABLE_VERSIONED_DOCS === 'true'
? {
strategy: 'remote',
basePath: basePath,
fallback: 'blocking',
revalidate: 360, // 1 hour
product: productSlug,
}
: {
strategy: 'fs',
localContentDir: CONTENT_DIR,
navDataFile: NAV_DATA_FILE,
product: productSlug,
}
)
export { getStaticPaths, getStaticProps }

View File

@ -1,51 +0,0 @@
import s from './style.module.css'
import { VMWARE_UTILITY_VERSION } from 'data/version'
import ProductDownloadsPage from '@hashicorp/react-product-downloads-page'
import { generateStaticProps } from '@hashicorp/react-product-downloads-page/server'
import Head from 'next/head'
import HashiHead from '@hashicorp/react-head'
export default function DownloadsPage(staticProps) {
return (
<>
<ProductDownloadsPage
pageTitle="Download Vagrant vmware Utility"
getStartedDescription="Follow step-by-step tutorials on the essentials of Vagrant VMWare Utility."
getStartedLinks={[
{
label: 'Installation Instructions',
href:
'https://www.vagrantup.com/docs/providers/vmware/installation',
},
{
label: 'Community Resources',
href: 'https://www.vagrantup.com/community',
},
{
label: 'View all Vagrant tutorials',
href: 'https://learn.hashicorp.com/vagrant',
},
]}
logo={<p className={s.notALogo}>Vagrant vmware Utility</p>}
tutorialLink={{
href: 'https://learn.hashicorp.com/vagrant',
label: 'View Tutorials at HashiCorp Learn',
}}
showPackageManagers={false}
{...staticProps}
/>
{/* Override default ProductDownloader title */}
<HashiHead
is={Head}
title="VMware Utility Downloads | Vagrant by HashiCorp"
/>
</>
)
}
export async function getStaticProps() {
return await generateStaticProps({
product: 'vagrant-vmware-utility',
latestVersion: VMWARE_UTILITY_VERSION,
})
}

View File

@ -1,4 +0,0 @@
.notALogo {
composes: g-type-body-x-strong from global;
font-size: 1rem;
}

View File

@ -1,170 +0,0 @@
/* page level */
.block {
padding: 100px 0;
}
.tag {
composes: g-type-label from global;
display: inline-block;
background: black;
color: white;
padding: 6px 8px;
}
.h2 {
composes: g-type-display-2 from global;
margin: 20px 0 20px 0;
}
/* header section */
.header {
text-align: center;
margin: 140px 0 160px 0;
}
.logos {
display: inline-flex;
align-items: center;
margin: 0 auto;
& span {
font-size: 2.5em;
font-weight: bold;
margin-left: 30px;
margin-right: 30px;
padding-bottom: 8px;
@media (max-width: 550px) {
margin-left: 15px;
margin-right: 15px;
}
@media (max-width: 350px) {
margin-left: 5px;
margin-right: 5px;
font-size: 1.8em;
}
}
& img:first-child {
height: 60px;
@media (max-width: 550px) {
height: 45px;
}
@media (max-width: 420px) {
height: 35px;
}
}
& img:last-child {
height: 30px;
@media (max-width: 550px) {
height: 25px;
}
@media (max-width: 420px) {
height: 20px;
}
}
}
.buttons > *:not(:last-child) {
margin-right: 15px;
}
.mainHeadline {
composes: g-type-display-3 from global;
}
.mainSubhead {
composes: g-type-body-large from global;
}
/* benefits section */
.benefits {
composes: block;
background: var(--vagrant-secondary);
color: var(--black);
& h4 {
margin-top: 20px;
margin-bottom: 10px;
}
& ul {
list-style: none;
margin: 0;
padding: 0;
columns: 2;
@media (max-width: 900px) {
columns: 1;
}
& li {
overflow: hidden;
}
& p {
margin: 0 0 10px;
}
}
& small {
margin-top: 50px;
display: block;
& a {
color: var(--black);
text-decoration: underline;
}
}
}
.buyNow {
background: var(--vagrant-secondary);
color: var(--black);
composes: block;
& small a {
color: var(--black);
text-decoration: underline;
}
& .purchaseForm {
margin: 50px 0;
}
}
.faq {
composes: block;
& h4 {
margin-top: 20px;
margin-bottom: 10px;
}
& > div > ul {
list-style: none;
margin: 0;
padding: 0;
& > li:not(:last-child) {
margin-bottom: 30px;
& > p > ul {
margin: 20px 0;
& li {
margin: 8px 0;
}
}
}
}
}

View File

@ -1,3 +0,0 @@
const { indexDocsContent } = require('@hashicorp/react-search/tools')
indexDocsContent()

View File

@ -0,0 +1,31 @@
# Repo which we are cloning and executing npm run build:deploy-preview within
REPO_TO_CLONE=dev-portal
# Set the subdirectory name for the base project
PREVIEW_DIR=website-preview
# The directory we want to clone the project into
CLONE_DIR=website-preview
# The product for which we are building the deploy preview
PRODUCT=vagrant
from_cache=false
if [ -d "$PREVIEW_DIR" ]; then
echo "$PREVIEW_DIR found"
CLONE_DIR="$PREVIEW_DIR-tmp"
from_cache=true
fi
# Clone the base project, if needed
echo "⏳ Cloning the $REPO_TO_CLONE repo, this might take a while..."
git clone --depth=1 "https://github.com/hashicorp/$REPO_TO_CLONE.git" "$CLONE_DIR"
if [ "$from_cache" = true ]; then
echo "Setting up $PREVIEW_DIR"
cp -R "./$CLONE_DIR/." "./$PREVIEW_DIR"
fi
# cd into the preview directory project
cd "$PREVIEW_DIR"
# Run the build:deploy-preview start script
REPO=$PRODUCT DEV_IO=$PRODUCT IS_CONTENT_PREVIEW=true HASHI_ENV=project-preview npm run build:deploy-preview

View File

@ -0,0 +1,25 @@
# Repo which we are cloning and executing npm run build:deploy-preview within
REPO_TO_CLONE=dev-portal
# Set the subdirectory name for the dev-portal app
PREVIEW_DIR=website-preview
# The product for which we are building the deploy preview
PRODUCT=vagrant
should_pull=true
# Clone the dev-portal project, if needed
if [ ! -d "$PREVIEW_DIR" ]; then
echo "⏳ Cloning the $REPO_TO_CLONE repo, this might take a while..."
git clone --depth=1 https://github.com/hashicorp/$REPO_TO_CLONE.git "$PREVIEW_DIR"
should_pull=false
fi
cd "$PREVIEW_DIR"
# If the directory already existed, pull to ensure the clone is fresh
if [ "$should_pull" = true ]; then
git pull origin main
fi
# Run the dev-portal content-repo start script
REPO=$PRODUCT PREVIEW_DIR="$PREVIEW_DIR" npm run start:local-preview

View File

@ -1,20 +0,0 @@
{
"compilerOptions": {
"allowJs": true,
"baseUrl": ".",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"isolatedModules": true,
"jsx": "preserve",
"lib": ["dom", "dom.iterable", "esnext"],
"module": "esnext",
"moduleResolution": "node",
"noEmit": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"strict": false,
"target": "es5"
},
"exclude": ["node_modules"],
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"]
}