├── templates └── default │ ├── eslintrc │ ├── next.config.js │ ├── next-env.d.ts │ ├── public │ ├── favicon.ico │ └── vercel.svg │ ├── postcss.config.js │ ├── editorconfig │ ├── lib │ └── graphql.ts │ ├── tailwind.config.js │ ├── graphql │ └── queries │ │ └── LatestProductCollection.graphql │ ├── styles │ ├── globals.css │ └── Home.module.css │ ├── pages │ ├── api │ │ └── hello.ts │ ├── _app.tsx │ └── index.tsx │ ├── gitignore │ ├── codegen.yml │ ├── tsconfig.json │ ├── components │ └── ProductCollection.tsx │ └── README-template.md ├── .editorconfig ├── helpers ├── codegen.ts ├── is-writeable.ts ├── should-use-yarn.ts ├── validate-pkg.ts ├── is-online.ts ├── git.ts ├── is-folder-empty.ts ├── install.ts └── examples.ts ├── tsconfig.json ├── .gitignore ├── README.md ├── package.json ├── index.ts ├── create-app.ts └── pnpm-lock.yaml /templates/default/eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next", "next/core-web-vitals"] 3 | } 4 | -------------------------------------------------------------------------------- /templates/default/next.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | reactStrictMode: true, 3 | } 4 | -------------------------------------------------------------------------------- /templates/default/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /templates/default/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saleor/create-saleor-app/HEAD/templates/default/public/favicon.ico -------------------------------------------------------------------------------- /templates/default/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true -------------------------------------------------------------------------------- /templates/default/editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /templates/default/lib/graphql.ts: -------------------------------------------------------------------------------- 1 | import { ApolloClient, InMemoryCache } from "@apollo/client"; 2 | 3 | const client = new ApolloClient({ 4 | uri: "https://vercel.saleor.cloud/graphql/", 5 | cache: new InMemoryCache(), 6 | }); 7 | 8 | export default client; 9 | -------------------------------------------------------------------------------- /helpers/codegen.ts: -------------------------------------------------------------------------------- 1 | import { execSync } from "child_process"; 2 | 3 | export function tryCodegen(root: string): boolean { 4 | try { 5 | execSync("npm run generate", { stdio: "ignore" }); 6 | return true; 7 | } catch (e) { 8 | return false; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /helpers/is-writeable.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs-extra"; 2 | 3 | export async function isWriteable(directory: string): Promise { 4 | try { 5 | await fs.access(directory, (fs.constants || fs).W_OK); 6 | return true; 7 | } catch (err) { 8 | return false; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2019", 4 | "moduleResolution": "node", 5 | "strict": true, 6 | "resolveJsonModule": true, 7 | "esModuleInterop": true, 8 | "skipLibCheck": false, 9 | }, 10 | "exclude": ["templates", "dist"] 11 | } 12 | -------------------------------------------------------------------------------- /templates/default/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | purge: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'], 3 | darkMode: false, // or 'media' or 'class' 4 | theme: { 5 | extend: {}, 6 | }, 7 | variants: { 8 | extend: {}, 9 | }, 10 | plugins: [], 11 | } 12 | -------------------------------------------------------------------------------- /templates/default/graphql/queries/LatestProductCollection.graphql: -------------------------------------------------------------------------------- 1 | query LatestProducts { 2 | products(first: 12, channel: "default-channel") { 3 | edges { 4 | node { 5 | id 6 | name 7 | thumbnail { 8 | url 9 | } 10 | category { 11 | name 12 | } 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /templates/default/styles/globals.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | padding: 0; 4 | margin: 0; 5 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, 6 | Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; 7 | } 8 | 9 | a { 10 | color: inherit; 11 | text-decoration: none; 12 | } 13 | 14 | * { 15 | box-sizing: border-box; 16 | } 17 | -------------------------------------------------------------------------------- /templates/default/pages/api/hello.ts: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | import type { NextApiRequest, NextApiResponse } from 'next' 3 | 4 | type Data = { 5 | name: string 6 | } 7 | 8 | export default function handler( 9 | req: NextApiRequest, 10 | res: NextApiResponse 11 | ) { 12 | res.status(200).json({ name: 'John Doe' }) 13 | } 14 | -------------------------------------------------------------------------------- /helpers/should-use-yarn.ts: -------------------------------------------------------------------------------- 1 | import { execSync } from 'child_process' 2 | 3 | export function shouldUseYarn(): boolean { 4 | try { 5 | const userAgent = process.env.npm_config_user_agent 6 | if (userAgent) { 7 | return Boolean(userAgent && userAgent.startsWith('yarn')) 8 | } 9 | execSync('yarnpkg --version', { stdio: 'ignore' }) 10 | return true 11 | } catch (e) { 12 | return false 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /templates/default/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import type { AppProps } from 'next/app' 2 | import { ApolloProvider } from '@apollo/client'; 3 | import client from "../lib/graphql"; 4 | 5 | import 'tailwindcss/tailwind.css' 6 | 7 | function MyApp({ Component, pageProps }: AppProps) { 8 | return ( 9 | 10 | 11 | 12 | ) 13 | } 14 | 15 | export default MyApp 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | dist 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env.local 30 | .env.development.local 31 | .env.test.local 32 | .env.production.local 33 | 34 | # vercel 35 | .vercel 36 | -------------------------------------------------------------------------------- /templates/default/gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # vercel 34 | .vercel 35 | -------------------------------------------------------------------------------- /helpers/validate-pkg.ts: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line import/no-extraneous-dependencies 2 | import validateProjectName from 'validate-npm-package-name' 3 | 4 | export function validateNpmName( 5 | name: string 6 | ): { valid: boolean; problems?: string[] } { 7 | const nameValidation = validateProjectName(name) 8 | if (nameValidation.validForNewPackages) { 9 | return { valid: true } 10 | } 11 | 12 | return { 13 | valid: false, 14 | problems: [ 15 | ...(nameValidation.errors || []), 16 | ...(nameValidation.warnings || []), 17 | ], 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /templates/default/codegen.yml: -------------------------------------------------------------------------------- 1 | overwrite: true 2 | schema: "https://vercel.saleor.cloud/graphql/" 3 | documents: "graphql/**/*.graphql" 4 | generates: 5 | generated/saleor.tsx: 6 | plugins: 7 | - add: 8 | content: 9 | - "// THIS FILE IS GENERATED WITH `npm run generate`" 10 | - "typescript" 11 | - "typescript-operations" 12 | - "typescript-react-apollo" 13 | - "typescript-apollo-client-helpers" 14 | config: 15 | dedupeOperationSuffix: true # Prevent suffix duplication in generated names 16 | ./graphql.schema.json: 17 | plugins: 18 | - "introspection" 19 | -------------------------------------------------------------------------------- /templates/default/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "baseUrl": ".", 17 | "paths": { 18 | "~/*": ["./*"] 19 | }, 20 | "incremental": true 21 | }, 22 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 23 | "exclude": ["node_modules"] 24 | } 25 | -------------------------------------------------------------------------------- /templates/default/components/ProductCollection.tsx: -------------------------------------------------------------------------------- 1 | import { useLatestProductsQuery } from '~/generated/saleor'; 2 | 3 | function Products() { 4 | const { loading, error, data } = useLatestProductsQuery(); 5 | 6 | if (loading) return Loading...; 7 | if (error) return Error; 8 | 9 | if (data) { 10 | const latestProducts = data.products?.edges || []; 11 | 12 | return ( 13 | 14 | {latestProducts?.length > 0 && 15 | latestProducts.map( 16 | ({ node: { id, name, thumbnail, category } }) => ( 17 | 18 | 19 | 20 | {name} 21 | {category?.name} 22 | 23 | 24 | ), 25 | )} 26 | 27 | ); 28 | } 29 | 30 | return null; 31 | } 32 | 33 | export default Products; 34 | -------------------------------------------------------------------------------- /helpers/is-online.ts: -------------------------------------------------------------------------------- 1 | import { execSync } from 'child_process' 2 | import dns from 'dns' 3 | import url from 'url' 4 | 5 | function getProxy(): string | undefined { 6 | if (process.env.https_proxy) { 7 | return process.env.https_proxy 8 | } 9 | 10 | try { 11 | const httpsProxy = execSync('npm config get https-proxy').toString().trim() 12 | return httpsProxy !== 'null' ? httpsProxy : undefined 13 | } catch (e) { 14 | return 15 | } 16 | } 17 | 18 | export function getOnline(): Promise { 19 | return new Promise((resolve) => { 20 | dns.lookup('registry.yarnpkg.com', (registryErr) => { 21 | if (!registryErr) { 22 | return resolve(true) 23 | } 24 | 25 | const proxy = getProxy() 26 | if (!proxy) { 27 | return resolve(false) 28 | } 29 | 30 | const { hostname } = url.parse(proxy) 31 | if (!hostname) { 32 | return resolve(false) 33 | } 34 | 35 | dns.lookup(hostname, (proxyErr) => { 36 | resolve(proxyErr == null) 37 | }) 38 | }) 39 | }) 40 | } 41 | -------------------------------------------------------------------------------- /templates/default/public/vercel.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /helpers/git.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/no-extraneous-dependencies */ 2 | import { execSync } from 'child_process' 3 | import path from 'path' 4 | import rimraf from 'rimraf' 5 | 6 | function isInGitRepository(): boolean { 7 | try { 8 | execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore' }) 9 | return true 10 | } catch (_) {} 11 | return false 12 | } 13 | 14 | function isInMercurialRepository(): boolean { 15 | try { 16 | execSync('hg --cwd . root', { stdio: 'ignore' }) 17 | return true 18 | } catch (_) {} 19 | return false 20 | } 21 | 22 | export function tryGitInit(root: string): boolean { 23 | let didInit = false 24 | try { 25 | execSync('git --version', { stdio: 'ignore' }) 26 | if (isInGitRepository() || isInMercurialRepository()) { 27 | return false 28 | } 29 | 30 | execSync('git init', { stdio: 'ignore' }) 31 | didInit = true 32 | 33 | execSync('git checkout -b main', { stdio: 'ignore' }) 34 | 35 | execSync('git add -A', { stdio: 'ignore' }) 36 | execSync('git commit -m "Initial commit from Create Next App"', { 37 | stdio: 'ignore', 38 | }) 39 | return true 40 | } catch (e) { 41 | if (didInit) { 42 | try { 43 | rimraf.sync(path.join(root, '.git')) 44 | } catch (_) {} 45 | } 46 | return false 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Create Next.js Shop 2 | 3 | `create-next-shop` is the easiest way to get started creating the e-commerce applications with Next.js. This tool enables you to quickly start building a new Next.js application for shopping. It uses Saleor GraphQL API for the backend. It sets everything up for you. 4 | 5 | ```bash 6 | npx create-next-shop 7 | ``` 8 | 9 | To create a new app in a specific folder, you can provide a name as an argument. For example, the following command will create a new Next.js app called `my-shop` in a folder with the same name: 10 | 11 | ```bash 12 | npx create-next-shop my-shop 13 | ``` 14 | 15 | ## Options 16 | 17 | `create-next-shop` comes with the following options: 18 | 19 | - **--use-npm** - Explicitly tell the CLI to use `npm` instead of `yarn`. 20 | 21 | ## Why use **Create Next Shop**? 22 | 23 | `create-next-shop` allows you to create a new Next.js shopping app within seconds. It is officially maintained by the Saleor team, who have vast experience with creating production-grade shopping experiences. 24 | 25 | This tempalate creator comes with a number of benefits: 26 | 27 | - **Interactive Experience**: Running `npx create-next-shop` (with no arguments) launches an interactive experience that guides you through setting up a project. 28 | - **Offline Support**: Create Next Shop will automatically detect if you're offline and bootstrap your project using your local package cache. 29 | -------------------------------------------------------------------------------- /helpers/is-folder-empty.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/no-extraneous-dependencies */ 2 | import chalk from 'chalk' 3 | import fs from 'fs' 4 | import path from 'path' 5 | 6 | export function isFolderEmpty(root: string, name: string): boolean { 7 | const validFiles = [ 8 | '.DS_Store', 9 | '.git', 10 | '.gitattributes', 11 | '.gitignore', 12 | '.gitlab-ci.yml', 13 | '.hg', 14 | '.hgcheck', 15 | '.hgignore', 16 | '.idea', 17 | '.npmignore', 18 | '.travis.yml', 19 | 'LICENSE', 20 | 'Thumbs.db', 21 | 'docs', 22 | 'mkdocs.yml', 23 | 'npm-debug.log', 24 | 'yarn-debug.log', 25 | 'yarn-error.log', 26 | ] 27 | 28 | const conflicts = fs 29 | .readdirSync(root) 30 | .filter((file) => !validFiles.includes(file)) 31 | // Support IntelliJ IDEA-based editors 32 | .filter((file) => !/\.iml$/.test(file)) 33 | 34 | if (conflicts.length > 0) { 35 | console.log( 36 | `The directory ${chalk.green(name)} contains files that could conflict:` 37 | ) 38 | console.log() 39 | for (const file of conflicts) { 40 | try { 41 | const stats = fs.lstatSync(path.join(root, file)) 42 | if (stats.isDirectory()) { 43 | console.log(` ${chalk.blue(file)}/`) 44 | } else { 45 | console.log(` ${file}`) 46 | } 47 | } catch { 48 | console.log(` ${file}`) 49 | } 50 | } 51 | console.log() 52 | console.log( 53 | 'Either try using a new directory name, or remove the files listed above.' 54 | ) 55 | console.log() 56 | return false 57 | } 58 | 59 | return true 60 | } 61 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "create-storefront", 3 | "version": "0.0.8", 4 | "keywords": [ 5 | "saleor", 6 | "react", 7 | "next", 8 | "next.js", 9 | "e-commerce" 10 | ], 11 | "description": "Create Saleor & Next.js-powered React shopping apps with one command", 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/saleor/create-next-shop" 15 | }, 16 | "author": "Saleor Team ", 17 | "license": "MIT", 18 | "bin": { 19 | "create-storefront": "./dist/index.js" 20 | }, 21 | "files": [ 22 | "dist" 23 | ], 24 | "scripts": { 25 | "dev": "ncc build ./index.ts -w -o dist/", 26 | "prerelease": "rimraf ./dist/", 27 | "release": "ncc build ./index.ts -o ./dist/ --minify --no-cache --no-source-map-register -e templates", 28 | "prepublish": "yarn release" 29 | }, 30 | "devDependencies": { 31 | "@types/async-retry": "1.4.3", 32 | "@types/cross-spawn": "^6.0.2", 33 | "@types/fs-extra": "^9.0.13", 34 | "@types/node": "^16.11.7", 35 | "@types/prompts": "2.0.14", 36 | "@types/rimraf": "3.0.2", 37 | "@types/tar": "6.1.0", 38 | "@types/validate-npm-package-name": "3.0.3", 39 | "@vercel/ncc": "0.31.1", 40 | "async-retry": "1.3.3", 41 | "chalk": "4.1.2", 42 | "commander": "8.3.0", 43 | "cpy": "8.1.2", 44 | "cross-spawn": "7.0.3", 45 | "fs-extra": "^10.0.0", 46 | "got": "11.8.2", 47 | "prompts": "2.4.2", 48 | "rimraf": "3.0.2", 49 | "tar": "6.1.11", 50 | "typescript": "4.4.4", 51 | "update-check": "1.5.4", 52 | "validate-npm-package-name": "3.0.0" 53 | }, 54 | "engines": { 55 | "node": ">=12.0.0" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /templates/default/README-template.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-shop`](https://github.com/saleor/create-next-shop). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | ``` 12 | 13 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 14 | 15 | You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. 16 | 17 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.tsx`. 18 | 19 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. 20 | 21 | ## Learn More 22 | 23 | To learn more about Next.js, take a look at the following resources: 24 | 25 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 26 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 27 | 28 | To learn more about Saleor, take a look at the following resources: 29 | 30 | - [Saleor Documentation](https://docs.saleor.io/docs/) 31 | 32 | ## Deploy on Vercel 33 | 34 | The easiest way to deploy your Next.js shop is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-shop&utm_campaign=create-next-shop-readme) from the creators of Next.js. 35 | 36 | Check out the [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 37 | -------------------------------------------------------------------------------- /templates/default/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Products from '../components/ProductCollection'; 3 | import clsx from 'clsx'; 4 | 5 | const navigation = [ 6 | { name: 'Products', href: '#', current: true }, 7 | { name: 'Wishlist', href: '#', current: false }, 8 | ] 9 | 10 | const Home: React.VFC = () => { 11 | return ( 12 | 13 | 14 | 15 | 16 | 17 | 18 | {navigation.map((item) => ( 19 | 29 | {item.name} 30 | 31 | ))} 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | Dashboard 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | ) 53 | } 54 | 55 | export default Home; 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /helpers/install.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/no-extraneous-dependencies */ 2 | import chalk from "chalk"; 3 | import spawn from "cross-spawn"; 4 | 5 | interface InstallArgs { 6 | useYarn: boolean; 7 | isOnline: boolean; 8 | devDependencies?: boolean; 9 | } 10 | 11 | export function install( 12 | root: string, 13 | dependencies: string[] | null, 14 | { useYarn, isOnline, devDependencies }: InstallArgs 15 | ): Promise { 16 | const npmFlags: string[] = []; 17 | const yarnFlags: string[] = []; 18 | return new Promise((resolve, reject) => { 19 | let args: string[]; 20 | let command: string = useYarn ? "yarnpkg" : "npm"; 21 | 22 | if (dependencies && dependencies.length) { 23 | if (useYarn) { 24 | args = ["add", "--exact"]; 25 | if (!isOnline) args.push("--offline"); 26 | args.push("--cwd", root); 27 | if (devDependencies) args.push("--dev"); 28 | args.push(...dependencies); 29 | } else { 30 | args = ["install"]; 31 | args.push(devDependencies ? "--save-dev" : "--save"); 32 | args.push(...dependencies); 33 | } 34 | } else { 35 | args = ["install"]; 36 | if (useYarn) { 37 | if (!isOnline) { 38 | console.log(chalk.yellow("You appear to be offline.")); 39 | console.log(chalk.yellow("Falling back to the local Yarn cache.")); 40 | console.log(); 41 | args.push("--offline"); 42 | } 43 | } else { 44 | if (!isOnline) { 45 | console.log(chalk.yellow("You appear to be offline.")); 46 | console.log(); 47 | } 48 | } 49 | } 50 | if (useYarn) { 51 | args.push(...yarnFlags); 52 | } else { 53 | args.push(...npmFlags); 54 | } 55 | 56 | const child = spawn(command, args, { 57 | stdio: "inherit", 58 | env: { ...process.env, ADBLOCK: "1", DISABLE_OPENCOLLECTIVE: "1" }, 59 | }); 60 | child.on("close", (code) => { 61 | if (code !== 0) { 62 | reject({ command: `${command} ${args.join(" ")}` }); 63 | return; 64 | } 65 | resolve(); 66 | }); 67 | }); 68 | } 69 | -------------------------------------------------------------------------------- /templates/default/styles/Home.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | min-height: 100vh; 3 | padding: 0 0.5rem; 4 | display: flex; 5 | flex-direction: column; 6 | justify-content: center; 7 | align-items: center; 8 | height: 100vh; 9 | } 10 | 11 | .main { 12 | padding: 5rem 0; 13 | flex: 1; 14 | display: flex; 15 | flex-direction: column; 16 | justify-content: center; 17 | align-items: center; 18 | } 19 | 20 | .footer { 21 | width: 100%; 22 | height: 100px; 23 | border-top: 1px solid #eaeaea; 24 | display: flex; 25 | justify-content: center; 26 | align-items: center; 27 | } 28 | 29 | .footer a { 30 | display: flex; 31 | justify-content: center; 32 | align-items: center; 33 | flex-grow: 1; 34 | } 35 | 36 | .title a { 37 | color: #0070f3; 38 | text-decoration: none; 39 | } 40 | 41 | .title a:hover, 42 | .title a:focus, 43 | .title a:active { 44 | text-decoration: underline; 45 | } 46 | 47 | .title { 48 | margin: 0; 49 | line-height: 1.15; 50 | font-size: 4rem; 51 | } 52 | 53 | .title, 54 | .description { 55 | text-align: center; 56 | } 57 | 58 | .description { 59 | line-height: 1.5; 60 | font-size: 1.5rem; 61 | } 62 | 63 | .code { 64 | background: #fafafa; 65 | border-radius: 5px; 66 | padding: 0.75rem; 67 | font-size: 1.1rem; 68 | font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, 69 | Bitstream Vera Sans Mono, Courier New, monospace; 70 | } 71 | 72 | .grid { 73 | display: flex; 74 | align-items: center; 75 | justify-content: center; 76 | flex-wrap: wrap; 77 | max-width: 800px; 78 | margin-top: 3rem; 79 | } 80 | 81 | .card { 82 | margin: 1rem; 83 | padding: 1.5rem; 84 | text-align: left; 85 | color: inherit; 86 | text-decoration: none; 87 | border: 1px solid #eaeaea; 88 | border-radius: 10px; 89 | transition: color 0.15s ease, border-color 0.15s ease; 90 | width: 45%; 91 | } 92 | 93 | .card:hover, 94 | .card:focus, 95 | .card:active { 96 | color: #0070f3; 97 | border-color: #0070f3; 98 | } 99 | 100 | .card h2 { 101 | margin: 0 0 1rem 0; 102 | font-size: 1.5rem; 103 | } 104 | 105 | .card p { 106 | margin: 0; 107 | font-size: 1.25rem; 108 | line-height: 1.5; 109 | } 110 | 111 | .logo { 112 | height: 1em; 113 | margin-left: 0.5rem; 114 | } 115 | 116 | @media (max-width: 600px) { 117 | .grid { 118 | width: 100%; 119 | flex-direction: column; 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /helpers/examples.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/no-extraneous-dependencies */ 2 | import got from 'got' 3 | import tar from 'tar' 4 | import { Stream } from 'stream' 5 | import { promisify } from 'util' 6 | 7 | const pipeline = promisify(Stream.pipeline) 8 | 9 | export type RepoInfo = { 10 | username: string 11 | name: string 12 | branch: string 13 | filePath: string 14 | } 15 | 16 | export async function isUrlOk(url: string): Promise { 17 | const res = await got.head(url).catch((e) => e) 18 | return res.statusCode === 200 19 | } 20 | 21 | export async function getRepoInfo( 22 | url: URL, 23 | examplePath?: string 24 | ): Promise { 25 | const [, username, name, t, _branch, ...file] = url.pathname.split('/') 26 | const filePath = examplePath ? examplePath.replace(/^\//, '') : file.join('/') 27 | 28 | // Support repos whose entire purpose is to be a NextJS example, e.g. 29 | // https://github.com/:username/:my-cool-nextjs-example-repo-name. 30 | if (t === undefined) { 31 | const infoResponse = await got( 32 | `https://api.github.com/repos/${username}/${name}` 33 | ).catch((e) => e) 34 | if (infoResponse.statusCode !== 200) { 35 | return 36 | } 37 | const info = JSON.parse(infoResponse.body) 38 | return { username, name, branch: info['default_branch'], filePath } 39 | } 40 | 41 | // If examplePath is available, the branch name takes the entire path 42 | const branch = examplePath 43 | ? `${_branch}/${file.join('/')}`.replace(new RegExp(`/${filePath}|/$`), '') 44 | : _branch 45 | 46 | if (username && name && branch && t === 'tree') { 47 | return { username, name, branch, filePath } 48 | } 49 | } 50 | 51 | export function hasRepo({ 52 | username, 53 | name, 54 | branch, 55 | filePath, 56 | }: RepoInfo): Promise { 57 | const contentsUrl = `https://api.github.com/repos/${username}/${name}/contents` 58 | const packagePath = `${filePath ? `/${filePath}` : ''}/package.json` 59 | 60 | return isUrlOk(contentsUrl + packagePath + `?ref=${branch}`) 61 | } 62 | 63 | export function hasExample(name: string): Promise { 64 | return isUrlOk( 65 | `https://api.github.com/repos/vercel/next.js/contents/examples/${encodeURIComponent( 66 | name 67 | )}/package.json` 68 | ) 69 | } 70 | 71 | export function downloadAndExtractRepo( 72 | root: string, 73 | { username, name, branch, filePath }: RepoInfo 74 | ): Promise { 75 | return pipeline( 76 | got.stream( 77 | `https://codeload.github.com/${username}/${name}/tar.gz/${branch}` 78 | ), 79 | tar.extract( 80 | { cwd: root, strip: filePath ? filePath.split('/').length + 1 : 1 }, 81 | [`${name}-${branch}${filePath ? `/${filePath}` : ''}`] 82 | ) 83 | ) 84 | } 85 | 86 | export function downloadAndExtractExample( 87 | root: string, 88 | name: string 89 | ): Promise { 90 | if (name === '__internal-testing-retry') { 91 | throw new Error('This is an internal example for testing the CLI.') 92 | } 93 | 94 | return pipeline( 95 | got.stream('https://codeload.github.com/vercel/next.js/tar.gz/canary'), 96 | tar.extract({ cwd: root, strip: 3 }, [`next.js-canary/examples/${name}`]) 97 | ) 98 | } 99 | -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /* eslint-disable import/no-extraneous-dependencies */ 3 | import chalk from "chalk"; 4 | import Commander from "commander"; 5 | import path from "path"; 6 | import prompts from "prompts"; 7 | import checkForUpdate from "update-check"; 8 | import { createApp, DownloadError } from "./create-app"; 9 | import { shouldUseYarn } from "./helpers/should-use-yarn"; 10 | import { validateNpmName } from "./helpers/validate-pkg"; 11 | import packageJson from "./package.json"; 12 | 13 | let projectPath: string = ""; 14 | 15 | const program = new Commander.Command(packageJson.name) 16 | .version(packageJson.version) 17 | .arguments("[project-directory]") 18 | .usage(`${chalk.green("")} [options]`) 19 | .action((name) => { 20 | projectPath = name; 21 | }) 22 | .option( 23 | "--use-npm", 24 | ` 25 | 26 | Explicitly tell the CLI to bootstrap the app using npm 27 | ` 28 | ) 29 | .option( 30 | "-e, --example [name]|[github-url]", 31 | ` 32 | 33 | An example to bootstrap the app with. You can use an example name 34 | from the official Next.js repo or a GitHub URL. The URL can use 35 | any branch and/or subdirectory 36 | ` 37 | ) 38 | .option( 39 | "--example-path ", 40 | ` 41 | 42 | In a rare case, your GitHub URL might contain a branch name with 43 | a slash (e.g. bug/fix-1) and the path to the example (e.g. foo/bar). 44 | In this case, you must specify the path to the example separately: 45 | --example-path foo/bar 46 | ` 47 | ) 48 | .allowUnknownOption() 49 | .parse(process.argv); 50 | 51 | async function run(): Promise { 52 | if (typeof projectPath === "string") { 53 | projectPath = projectPath.trim(); 54 | } 55 | 56 | if (!projectPath) { 57 | const res = await prompts({ 58 | type: "text", 59 | name: "path", 60 | message: "What is your project named?", 61 | initial: "my-app", 62 | validate: (name) => { 63 | const validation = validateNpmName(path.basename(path.resolve(name))); 64 | if (validation.valid) { 65 | return true; 66 | } 67 | return "Invalid project name: " + validation.problems![0]; 68 | }, 69 | }); 70 | 71 | if (typeof res.path === "string") { 72 | projectPath = res.path.trim(); 73 | } 74 | } 75 | 76 | if (!projectPath) { 77 | console.log(); 78 | console.log("Please specify the project directory:"); 79 | console.log( 80 | ` ${chalk.cyan(program.name())} ${chalk.green("")}` 81 | ); 82 | console.log(); 83 | console.log("For example:"); 84 | console.log(` ${chalk.cyan(program.name())} ${chalk.green("my-shop")}`); 85 | console.log(); 86 | console.log( 87 | `Run ${chalk.cyan(`${program.name()} --help`)} to see all options.` 88 | ); 89 | process.exit(1); 90 | } 91 | 92 | const resolvedProjectPath = path.resolve(projectPath); 93 | const projectName = path.basename(resolvedProjectPath); 94 | 95 | const { valid, problems } = validateNpmName(projectName); 96 | if (!valid) { 97 | console.error( 98 | `Could not create a project called ${chalk.red( 99 | `"${projectName}"` 100 | )} because of npm naming restrictions:` 101 | ); 102 | 103 | problems!.forEach((p) => console.error(` ${chalk.red.bold("*")} ${p}`)); 104 | process.exit(1); 105 | } 106 | 107 | const options = program.opts(); 108 | 109 | if (options.example === true) { 110 | console.error( 111 | "Please provide an example name or url, otherwise remove the example option." 112 | ); 113 | process.exit(1); 114 | return; 115 | } 116 | 117 | const example = typeof options.example === "string" && options.example.trim(); 118 | try { 119 | await createApp({ 120 | appPath: resolvedProjectPath, 121 | useNpm: !!options.useNpm, 122 | example: example && example !== "default" ? example : undefined, 123 | examplePath: options.examplePath, 124 | }); 125 | } catch (reason) { 126 | if (!(reason instanceof DownloadError)) { 127 | throw reason; 128 | } 129 | 130 | const res = await prompts({ 131 | type: "confirm", 132 | name: "builtin", 133 | message: 134 | `Could not download "${example}" because of a connectivity issue between your machine and GitHub.\n` + 135 | `Do you want to use the default template instead?`, 136 | initial: true, 137 | }); 138 | if (!res.builtin) { 139 | throw reason; 140 | } 141 | 142 | await createApp({ 143 | appPath: resolvedProjectPath, 144 | useNpm: !!options.useNpm, 145 | }); 146 | } 147 | } 148 | 149 | const update = checkForUpdate(packageJson).catch(() => null); 150 | 151 | async function notifyUpdate(): Promise { 152 | try { 153 | const res = await update; 154 | if (res?.latest) { 155 | const isYarn = shouldUseYarn(); 156 | 157 | console.log(); 158 | console.log( 159 | chalk.yellow.bold("A new version of `create-next-shop` is available!") 160 | ); 161 | console.log( 162 | "You can update by running: " + 163 | chalk.cyan( 164 | isYarn 165 | ? "yarn global add create-next-shop" 166 | : "npm i -g create-next-shop" 167 | ) 168 | ); 169 | console.log(); 170 | } 171 | process.exit(); 172 | } catch { 173 | // ignore error 174 | } 175 | } 176 | 177 | run() 178 | .then(notifyUpdate) 179 | .catch(async (reason) => { 180 | console.log(); 181 | console.log("Aborting installation."); 182 | if (reason.command) { 183 | console.log(` ${chalk.cyan(reason.command)} has failed.`); 184 | } else { 185 | console.log(chalk.red("Unexpected error. Please report it as a bug:")); 186 | console.log(reason); 187 | } 188 | console.log(); 189 | 190 | await notifyUpdate(); 191 | 192 | process.exit(1); 193 | }); 194 | -------------------------------------------------------------------------------- /create-app.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/no-extraneous-dependencies */ 2 | import retry from "async-retry"; 3 | import chalk from "chalk"; 4 | import cpy from "cpy"; 5 | import os from "os"; 6 | import path from "path"; 7 | import fs from "fs-extra"; 8 | 9 | import { 10 | downloadAndExtractExample, 11 | downloadAndExtractRepo, 12 | getRepoInfo, 13 | hasExample, 14 | hasRepo, 15 | RepoInfo, 16 | } from "./helpers/examples"; 17 | import { tryGitInit } from "./helpers/git"; 18 | import { install } from "./helpers/install"; 19 | import { isFolderEmpty } from "./helpers/is-folder-empty"; 20 | import { getOnline } from "./helpers/is-online"; 21 | import { shouldUseYarn } from "./helpers/should-use-yarn"; 22 | import { isWriteable } from "./helpers/is-writeable"; 23 | import { tryCodegen } from "./helpers/codegen"; 24 | 25 | export class DownloadError extends Error {} 26 | 27 | export async function createApp({ 28 | appPath, 29 | useNpm, 30 | example, 31 | examplePath, 32 | }: { 33 | appPath: string; 34 | useNpm: boolean; 35 | example?: string; 36 | examplePath?: string; 37 | }): Promise { 38 | let repoInfo: RepoInfo | undefined; 39 | const template = "default"; 40 | 41 | if (example) { 42 | let repoUrl: URL | undefined; 43 | 44 | try { 45 | repoUrl = new URL(example); 46 | } catch (error: any) { 47 | if (error.code !== "ERR_INVALID_URL") { 48 | console.error(error); 49 | process.exit(1); 50 | } 51 | } 52 | 53 | if (repoUrl) { 54 | if (repoUrl.origin !== "https://github.com") { 55 | console.error( 56 | `Invalid URL: ${chalk.red( 57 | `"${example}"` 58 | )}. Only GitHub repositories are supported. Please use a GitHub URL and try again.` 59 | ); 60 | process.exit(1); 61 | } 62 | 63 | repoInfo = await getRepoInfo(repoUrl, examplePath); 64 | 65 | if (!repoInfo) { 66 | console.error( 67 | `Found invalid GitHub URL: ${chalk.red( 68 | `"${example}"` 69 | )}. Please fix the URL and try again.` 70 | ); 71 | process.exit(1); 72 | } 73 | 74 | const found = await hasRepo(repoInfo); 75 | 76 | if (!found) { 77 | console.error( 78 | `Could not locate the repository for ${chalk.red( 79 | `"${example}"` 80 | )}. Please check that the repository exists and try again.` 81 | ); 82 | process.exit(1); 83 | } 84 | } else if (example !== "__internal-testing-retry") { 85 | const found = await hasExample(example); 86 | 87 | if (!found) { 88 | console.error( 89 | `Could not locate an example named ${chalk.red( 90 | `"${example}"` 91 | )}. Please check your spelling and try again.` 92 | ); 93 | process.exit(1); 94 | } 95 | } 96 | } 97 | 98 | const root = path.resolve(appPath); 99 | 100 | if (!(await isWriteable(path.dirname(root)))) { 101 | console.error( 102 | "The application path is not writable, please check folder permissions and try again." 103 | ); 104 | console.error( 105 | "It is likely you do not have write permissions for this folder." 106 | ); 107 | process.exit(1); 108 | } 109 | 110 | const appName = path.basename(root); 111 | 112 | await fs.mkdirp(root); 113 | if (!isFolderEmpty(root, appName)) { 114 | process.exit(1); 115 | } 116 | 117 | const useYarn = useNpm ? false : shouldUseYarn(); 118 | const isOnline = !useYarn || (await getOnline()); 119 | const originalDirectory = process.cwd(); 120 | 121 | const displayedCommand = useYarn ? "yarn" : "npm"; 122 | console.log(`Creating a new Next.js app in ${chalk.green(root)}.`); 123 | console.log(); 124 | 125 | await fs.mkdirp(root); 126 | process.chdir(root); 127 | 128 | if (example) { 129 | /** 130 | * If an example repository is provided, clone it. 131 | */ 132 | try { 133 | if (repoInfo) { 134 | const repoInfo2 = repoInfo; 135 | console.log( 136 | `Downloading files from repo ${chalk.cyan( 137 | example 138 | )}. This might take a moment.` 139 | ); 140 | console.log(); 141 | await retry(() => downloadAndExtractRepo(root, repoInfo2), { 142 | retries: 3, 143 | }); 144 | } else { 145 | console.log( 146 | `Downloading files for example ${chalk.cyan( 147 | example 148 | )}. This might take a moment.` 149 | ); 150 | console.log(); 151 | await retry(() => downloadAndExtractExample(root, example), { 152 | retries: 3, 153 | }); 154 | } 155 | } catch (reason: any) { 156 | throw new DownloadError(reason); 157 | } 158 | // Copy our default `.gitignore` if the application did not provide one 159 | const ignorePath = path.join(root, ".gitignore"); 160 | if (!fs.existsSync(ignorePath)) { 161 | fs.copyFileSync( 162 | path.join(__dirname, "templates", template, "gitignore"), 163 | ignorePath 164 | ); 165 | } 166 | 167 | console.log("Installing packages. This might take a couple of minutes."); 168 | console.log(); 169 | 170 | await install(root, null, { useYarn, isOnline }); 171 | console.log(); 172 | } else { 173 | /** 174 | * Otherwise, if an example repository is not provided for cloning, proceed 175 | * by installing from a template. 176 | */ 177 | console.log(chalk.bold(`Using ${displayedCommand}.`)); 178 | /** 179 | * Create a package.json for the new project. 180 | */ 181 | const packageJson = { 182 | name: appName, 183 | version: "0.1.0", 184 | private: true, 185 | scripts: { 186 | dev: "next dev", 187 | build: "next build", 188 | start: "next start", 189 | lint: "next lint", 190 | generate: "graphql-codegen --config codegen.yml", 191 | }, 192 | }; 193 | /** 194 | * Write it to disk. 195 | */ 196 | fs.writeFileSync( 197 | path.join(root, "package.json"), 198 | JSON.stringify(packageJson, null, 2) + os.EOL 199 | ); 200 | /** 201 | * These flags will be passed to `install()`. 202 | */ 203 | const installFlags = { useYarn, isOnline }; 204 | const dependencies = [ 205 | "react", 206 | "react-dom", 207 | "next", 208 | "graphql", 209 | "clsx", 210 | "@apollo/client", 211 | "@headlessui/react", 212 | "@heroicons/react", 213 | ]; 214 | const devDependencies = [ 215 | "eslint", 216 | "eslint-config-next", 217 | "@graphql-codegen/add", 218 | "@graphql-codegen/cli", 219 | "@graphql-codegen/introspection", 220 | "@graphql-codegen/typescript", 221 | "@graphql-codegen/typescript-apollo-client-helpers", 222 | "@graphql-codegen/typescript-operations", 223 | "@graphql-codegen/typescript-react-apollo", 224 | "autoprefixer", 225 | "postcss", 226 | "tailwindcss", 227 | "typescript", 228 | "@types/react" 229 | ]; 230 | 231 | if (devDependencies.length) { 232 | console.log(); 233 | console.log("Installing devDependencies:"); 234 | for (const devDependency of devDependencies) { 235 | console.log(`- ${chalk.cyan(devDependency)}`); 236 | } 237 | console.log(); 238 | 239 | const devInstallFlags = { devDependencies: true, ...installFlags }; 240 | await install(root, devDependencies, devInstallFlags); 241 | } 242 | console.log(); 243 | 244 | if (dependencies.length) { 245 | console.log(); 246 | console.log("Installing dependencies:"); 247 | for (const dependency of dependencies) { 248 | console.log(`- ${chalk.cyan(dependency)}`); 249 | } 250 | console.log(); 251 | 252 | await install(root, dependencies, installFlags); 253 | } 254 | await cpy("**", root, { 255 | parents: true, 256 | cwd: path.join(__dirname, "templates", template), 257 | rename: (name) => { 258 | switch (name) { 259 | case "editorconfig": 260 | case "gitignore": 261 | case "eslintrc": { 262 | return ".".concat(name); 263 | } 264 | // README.md is ignored by webpack-asset-relocator-loader used by ncc: 265 | // https://github.com/vercel/webpack-asset-relocator-loader/blob/e9308683d47ff507253e37c9bcbb99474603192b/src/asset-relocator.js#L227 266 | case "README-template.md": { 267 | return "README.md"; 268 | } 269 | default: { 270 | return name; 271 | } 272 | } 273 | }, 274 | }); 275 | } 276 | 277 | if (tryGitInit(root)) { 278 | console.log("Initialized a git repository."); 279 | console.log(); 280 | } 281 | 282 | if (tryCodegen(root)) { 283 | console.log("Generated GraphQL entities."); 284 | console.log(); 285 | } 286 | 287 | let cdpath: string; 288 | if (path.join(originalDirectory, appName) === appPath) { 289 | cdpath = appName; 290 | } else { 291 | cdpath = appPath; 292 | } 293 | 294 | console.log(`${chalk.green("Success!")} Created ${appName} at ${appPath}`); 295 | console.log("Inside that directory, you can run several commands:"); 296 | console.log(); 297 | console.log(chalk.cyan(` ${displayedCommand} ${useYarn ? "" : "run "}dev`)); 298 | console.log(" Starts the development server."); 299 | console.log(); 300 | console.log( 301 | chalk.cyan(` ${displayedCommand} ${useYarn ? "" : "run "}build`) 302 | ); 303 | console.log(" Builds the app for production."); 304 | console.log(); 305 | console.log(chalk.cyan(` ${displayedCommand} start`)); 306 | console.log(" Runs the built app in production mode."); 307 | console.log(); 308 | console.log("We suggest that you begin by typing:"); 309 | console.log(); 310 | console.log(chalk.cyan(" cd"), cdpath); 311 | console.log( 312 | ` ${chalk.cyan(`${displayedCommand} ${useYarn ? "" : "run "}dev`)}` 313 | ); 314 | console.log(); 315 | } 316 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | '@types/async-retry': 1.4.3 5 | '@types/cross-spawn': ^6.0.2 6 | '@types/fs-extra': ^9.0.13 7 | '@types/node': ^16.11.7 8 | '@types/prompts': 2.0.14 9 | '@types/rimraf': 3.0.2 10 | '@types/tar': 6.1.0 11 | '@types/validate-npm-package-name': 3.0.3 12 | '@vercel/ncc': 0.31.1 13 | async-retry: 1.3.3 14 | chalk: 4.1.2 15 | commander: 8.3.0 16 | cpy: 8.1.2 17 | cross-spawn: 7.0.3 18 | fs-extra: ^10.0.0 19 | got: 11.8.2 20 | prompts: 2.4.2 21 | rimraf: 3.0.2 22 | tar: 6.1.11 23 | typescript: 4.4.4 24 | update-check: 1.5.4 25 | validate-npm-package-name: 3.0.0 26 | 27 | devDependencies: 28 | '@types/async-retry': 1.4.3 29 | '@types/cross-spawn': 6.0.2 30 | '@types/fs-extra': 9.0.13 31 | '@types/node': 16.11.7 32 | '@types/prompts': 2.0.14 33 | '@types/rimraf': 3.0.2 34 | '@types/tar': 6.1.0 35 | '@types/validate-npm-package-name': 3.0.3 36 | '@vercel/ncc': 0.31.1 37 | async-retry: 1.3.3 38 | chalk: 4.1.2 39 | commander: 8.3.0 40 | cpy: 8.1.2 41 | cross-spawn: 7.0.3 42 | fs-extra: 10.0.0 43 | got: 11.8.2 44 | prompts: 2.4.2 45 | rimraf: 3.0.2 46 | tar: 6.1.11 47 | typescript: 4.4.4 48 | update-check: 1.5.4 49 | validate-npm-package-name: 3.0.0 50 | 51 | packages: 52 | 53 | /@mrmlnc/readdir-enhanced/2.2.1: 54 | resolution: {integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==} 55 | engines: {node: '>=4'} 56 | dependencies: 57 | call-me-maybe: 1.0.1 58 | glob-to-regexp: 0.3.0 59 | dev: true 60 | 61 | /@nodelib/fs.stat/1.1.3: 62 | resolution: {integrity: sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==} 63 | engines: {node: '>= 6'} 64 | dev: true 65 | 66 | /@sindresorhus/is/4.2.0: 67 | resolution: {integrity: sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==} 68 | engines: {node: '>=10'} 69 | dev: true 70 | 71 | /@szmarczak/http-timer/4.0.6: 72 | resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} 73 | engines: {node: '>=10'} 74 | dependencies: 75 | defer-to-connect: 2.0.1 76 | dev: true 77 | 78 | /@types/async-retry/1.4.3: 79 | resolution: {integrity: sha512-B3C9QmmNULVPL2uSJQ088eGWTNPIeUk35hca6CV8rRDJ8GXuQJP5CCVWA1ZUCrb9xYP7Js/RkLqnNNwKhe+Zsw==} 80 | dependencies: 81 | '@types/retry': 0.12.1 82 | dev: true 83 | 84 | /@types/cacheable-request/6.0.2: 85 | resolution: {integrity: sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==} 86 | dependencies: 87 | '@types/http-cache-semantics': 4.0.1 88 | '@types/keyv': 3.1.3 89 | '@types/node': 16.11.7 90 | '@types/responselike': 1.0.0 91 | dev: true 92 | 93 | /@types/cross-spawn/6.0.2: 94 | resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==} 95 | dependencies: 96 | '@types/node': 16.11.7 97 | dev: true 98 | 99 | /@types/fs-extra/9.0.13: 100 | resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} 101 | dependencies: 102 | '@types/node': 16.11.7 103 | dev: true 104 | 105 | /@types/glob/7.2.0: 106 | resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} 107 | dependencies: 108 | '@types/minimatch': 3.0.5 109 | '@types/node': 16.11.7 110 | dev: true 111 | 112 | /@types/http-cache-semantics/4.0.1: 113 | resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} 114 | dev: true 115 | 116 | /@types/keyv/3.1.3: 117 | resolution: {integrity: sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==} 118 | dependencies: 119 | '@types/node': 16.11.7 120 | dev: true 121 | 122 | /@types/minimatch/3.0.5: 123 | resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} 124 | dev: true 125 | 126 | /@types/minipass/3.1.0: 127 | resolution: {integrity: sha512-b2yPKwCrB8x9SB65kcCistMoe3wrYnxxt5rJSZ1kprw0uOXvhuKi9kTQ746Y+Pbqoh+9C0N4zt0ztmTnG9yg7A==} 128 | dependencies: 129 | '@types/node': 16.11.7 130 | dev: true 131 | 132 | /@types/node/16.11.7: 133 | resolution: {integrity: sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==} 134 | dev: true 135 | 136 | /@types/prompts/2.0.14: 137 | resolution: {integrity: sha512-HZBd99fKxRWpYCErtm2/yxUZv6/PBI9J7N4TNFffl5JbrYMHBwF25DjQGTW3b3jmXq+9P6/8fCIb2ee57BFfYA==} 138 | dependencies: 139 | '@types/node': 16.11.7 140 | dev: true 141 | 142 | /@types/responselike/1.0.0: 143 | resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} 144 | dependencies: 145 | '@types/node': 16.11.7 146 | dev: true 147 | 148 | /@types/retry/0.12.1: 149 | resolution: {integrity: sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==} 150 | dev: true 151 | 152 | /@types/rimraf/3.0.2: 153 | resolution: {integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==} 154 | dependencies: 155 | '@types/glob': 7.2.0 156 | '@types/node': 16.11.7 157 | dev: true 158 | 159 | /@types/tar/6.1.0: 160 | resolution: {integrity: sha512-uTZKMW7ZkdTJXX4+Bsp0ko9N7B5/NJ5wJRW14XTb6KNN+9i2NPel6iPKp8rTQahMW46BM9tM52dTeMSldB55og==} 161 | dependencies: 162 | '@types/minipass': 3.1.0 163 | '@types/node': 16.11.7 164 | dev: true 165 | 166 | /@types/validate-npm-package-name/3.0.3: 167 | resolution: {integrity: sha512-dLhCHEIjf9++/vHaHCo/ngJzGqGGbPh/f7HKwznEk3WFL64t/VKuRiVpyQH4afX93YkCV94I9M0Cx+DBLk1Dsg==} 168 | dev: true 169 | 170 | /@vercel/ncc/0.31.1: 171 | resolution: {integrity: sha512-g0FAxwdViI6UzsiVz5HssIHqjcPa1EHL6h+2dcJD893SoCJaGdqqgUF09xnMW6goWnnhbLvgiKlgJWrJa+7qYA==} 172 | hasBin: true 173 | dev: true 174 | 175 | /aggregate-error/3.1.0: 176 | resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} 177 | engines: {node: '>=8'} 178 | dependencies: 179 | clean-stack: 2.2.0 180 | indent-string: 4.0.0 181 | dev: true 182 | 183 | /ansi-styles/4.3.0: 184 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 185 | engines: {node: '>=8'} 186 | dependencies: 187 | color-convert: 2.0.1 188 | dev: true 189 | 190 | /arr-diff/4.0.0: 191 | resolution: {integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=} 192 | engines: {node: '>=0.10.0'} 193 | dev: true 194 | 195 | /arr-flatten/1.1.0: 196 | resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} 197 | engines: {node: '>=0.10.0'} 198 | dev: true 199 | 200 | /arr-union/3.1.0: 201 | resolution: {integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=} 202 | engines: {node: '>=0.10.0'} 203 | dev: true 204 | 205 | /array-union/1.0.2: 206 | resolution: {integrity: sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=} 207 | engines: {node: '>=0.10.0'} 208 | dependencies: 209 | array-uniq: 1.0.3 210 | dev: true 211 | 212 | /array-uniq/1.0.3: 213 | resolution: {integrity: sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=} 214 | engines: {node: '>=0.10.0'} 215 | dev: true 216 | 217 | /array-unique/0.3.2: 218 | resolution: {integrity: sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=} 219 | engines: {node: '>=0.10.0'} 220 | dev: true 221 | 222 | /arrify/2.0.1: 223 | resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} 224 | engines: {node: '>=8'} 225 | dev: true 226 | 227 | /assign-symbols/1.0.0: 228 | resolution: {integrity: sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=} 229 | engines: {node: '>=0.10.0'} 230 | dev: true 231 | 232 | /async-retry/1.3.3: 233 | resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} 234 | dependencies: 235 | retry: 0.13.1 236 | dev: true 237 | 238 | /atob/2.1.2: 239 | resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} 240 | engines: {node: '>= 4.5.0'} 241 | hasBin: true 242 | dev: true 243 | 244 | /balanced-match/1.0.2: 245 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 246 | dev: true 247 | 248 | /base/0.11.2: 249 | resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} 250 | engines: {node: '>=0.10.0'} 251 | dependencies: 252 | cache-base: 1.0.1 253 | class-utils: 0.3.6 254 | component-emitter: 1.3.0 255 | define-property: 1.0.0 256 | isobject: 3.0.1 257 | mixin-deep: 1.3.2 258 | pascalcase: 0.1.1 259 | dev: true 260 | 261 | /brace-expansion/1.1.11: 262 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 263 | dependencies: 264 | balanced-match: 1.0.2 265 | concat-map: 0.0.1 266 | dev: true 267 | 268 | /braces/2.3.2: 269 | resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} 270 | engines: {node: '>=0.10.0'} 271 | dependencies: 272 | arr-flatten: 1.1.0 273 | array-unique: 0.3.2 274 | extend-shallow: 2.0.1 275 | fill-range: 4.0.0 276 | isobject: 3.0.1 277 | repeat-element: 1.1.4 278 | snapdragon: 0.8.2 279 | snapdragon-node: 2.1.1 280 | split-string: 3.1.0 281 | to-regex: 3.0.2 282 | dev: true 283 | 284 | /builtins/1.0.3: 285 | resolution: {integrity: sha1-y5T662HIaWRR2zZTThQi+U8K7og=} 286 | dev: true 287 | 288 | /cache-base/1.0.1: 289 | resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} 290 | engines: {node: '>=0.10.0'} 291 | dependencies: 292 | collection-visit: 1.0.0 293 | component-emitter: 1.3.0 294 | get-value: 2.0.6 295 | has-value: 1.0.0 296 | isobject: 3.0.1 297 | set-value: 2.0.1 298 | to-object-path: 0.3.0 299 | union-value: 1.0.1 300 | unset-value: 1.0.0 301 | dev: true 302 | 303 | /cacheable-lookup/5.0.4: 304 | resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} 305 | engines: {node: '>=10.6.0'} 306 | dev: true 307 | 308 | /cacheable-request/7.0.2: 309 | resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==} 310 | engines: {node: '>=8'} 311 | dependencies: 312 | clone-response: 1.0.2 313 | get-stream: 5.2.0 314 | http-cache-semantics: 4.1.0 315 | keyv: 4.0.4 316 | lowercase-keys: 2.0.0 317 | normalize-url: 6.1.0 318 | responselike: 2.0.0 319 | dev: true 320 | 321 | /call-me-maybe/1.0.1: 322 | resolution: {integrity: sha1-JtII6onje1y95gJQoV8DHBak1ms=} 323 | dev: true 324 | 325 | /chalk/4.1.2: 326 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 327 | engines: {node: '>=10'} 328 | dependencies: 329 | ansi-styles: 4.3.0 330 | supports-color: 7.2.0 331 | dev: true 332 | 333 | /chownr/2.0.0: 334 | resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} 335 | engines: {node: '>=10'} 336 | dev: true 337 | 338 | /class-utils/0.3.6: 339 | resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} 340 | engines: {node: '>=0.10.0'} 341 | dependencies: 342 | arr-union: 3.1.0 343 | define-property: 0.2.5 344 | isobject: 3.0.1 345 | static-extend: 0.1.2 346 | dev: true 347 | 348 | /clean-stack/2.2.0: 349 | resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} 350 | engines: {node: '>=6'} 351 | dev: true 352 | 353 | /clone-response/1.0.2: 354 | resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=} 355 | dependencies: 356 | mimic-response: 1.0.1 357 | dev: true 358 | 359 | /collection-visit/1.0.0: 360 | resolution: {integrity: sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=} 361 | engines: {node: '>=0.10.0'} 362 | dependencies: 363 | map-visit: 1.0.0 364 | object-visit: 1.0.1 365 | dev: true 366 | 367 | /color-convert/2.0.1: 368 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 369 | engines: {node: '>=7.0.0'} 370 | dependencies: 371 | color-name: 1.1.4 372 | dev: true 373 | 374 | /color-name/1.1.4: 375 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 376 | dev: true 377 | 378 | /commander/8.3.0: 379 | resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} 380 | engines: {node: '>= 12'} 381 | dev: true 382 | 383 | /component-emitter/1.3.0: 384 | resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} 385 | dev: true 386 | 387 | /concat-map/0.0.1: 388 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 389 | dev: true 390 | 391 | /copy-descriptor/0.1.1: 392 | resolution: {integrity: sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=} 393 | engines: {node: '>=0.10.0'} 394 | dev: true 395 | 396 | /cp-file/7.0.0: 397 | resolution: {integrity: sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==} 398 | engines: {node: '>=8'} 399 | dependencies: 400 | graceful-fs: 4.2.8 401 | make-dir: 3.1.0 402 | nested-error-stacks: 2.1.0 403 | p-event: 4.2.0 404 | dev: true 405 | 406 | /cpy/8.1.2: 407 | resolution: {integrity: sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==} 408 | engines: {node: '>=8'} 409 | dependencies: 410 | arrify: 2.0.1 411 | cp-file: 7.0.0 412 | globby: 9.2.0 413 | has-glob: 1.0.0 414 | junk: 3.1.0 415 | nested-error-stacks: 2.1.0 416 | p-all: 2.1.0 417 | p-filter: 2.1.0 418 | p-map: 3.0.0 419 | dev: true 420 | 421 | /cross-spawn/7.0.3: 422 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 423 | engines: {node: '>= 8'} 424 | dependencies: 425 | path-key: 3.1.1 426 | shebang-command: 2.0.0 427 | which: 2.0.2 428 | dev: true 429 | 430 | /debug/2.6.9: 431 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 432 | dependencies: 433 | ms: 2.0.0 434 | dev: true 435 | 436 | /decode-uri-component/0.2.0: 437 | resolution: {integrity: sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=} 438 | engines: {node: '>=0.10'} 439 | dev: true 440 | 441 | /decompress-response/6.0.0: 442 | resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} 443 | engines: {node: '>=10'} 444 | dependencies: 445 | mimic-response: 3.1.0 446 | dev: true 447 | 448 | /deep-extend/0.6.0: 449 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 450 | engines: {node: '>=4.0.0'} 451 | dev: true 452 | 453 | /defer-to-connect/2.0.1: 454 | resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} 455 | engines: {node: '>=10'} 456 | dev: true 457 | 458 | /define-property/0.2.5: 459 | resolution: {integrity: sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=} 460 | engines: {node: '>=0.10.0'} 461 | dependencies: 462 | is-descriptor: 0.1.6 463 | dev: true 464 | 465 | /define-property/1.0.0: 466 | resolution: {integrity: sha1-dp66rz9KY6rTr56NMEybvnm/sOY=} 467 | engines: {node: '>=0.10.0'} 468 | dependencies: 469 | is-descriptor: 1.0.2 470 | dev: true 471 | 472 | /define-property/2.0.2: 473 | resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} 474 | engines: {node: '>=0.10.0'} 475 | dependencies: 476 | is-descriptor: 1.0.2 477 | isobject: 3.0.1 478 | dev: true 479 | 480 | /dir-glob/2.2.2: 481 | resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==} 482 | engines: {node: '>=4'} 483 | dependencies: 484 | path-type: 3.0.0 485 | dev: true 486 | 487 | /end-of-stream/1.4.4: 488 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 489 | dependencies: 490 | once: 1.4.0 491 | dev: true 492 | 493 | /expand-brackets/2.1.4: 494 | resolution: {integrity: sha1-t3c14xXOMPa27/D4OwQVGiJEliI=} 495 | engines: {node: '>=0.10.0'} 496 | dependencies: 497 | debug: 2.6.9 498 | define-property: 0.2.5 499 | extend-shallow: 2.0.1 500 | posix-character-classes: 0.1.1 501 | regex-not: 1.0.2 502 | snapdragon: 0.8.2 503 | to-regex: 3.0.2 504 | dev: true 505 | 506 | /extend-shallow/2.0.1: 507 | resolution: {integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=} 508 | engines: {node: '>=0.10.0'} 509 | dependencies: 510 | is-extendable: 0.1.1 511 | dev: true 512 | 513 | /extend-shallow/3.0.2: 514 | resolution: {integrity: sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=} 515 | engines: {node: '>=0.10.0'} 516 | dependencies: 517 | assign-symbols: 1.0.0 518 | is-extendable: 1.0.1 519 | dev: true 520 | 521 | /extglob/2.0.4: 522 | resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} 523 | engines: {node: '>=0.10.0'} 524 | dependencies: 525 | array-unique: 0.3.2 526 | define-property: 1.0.0 527 | expand-brackets: 2.1.4 528 | extend-shallow: 2.0.1 529 | fragment-cache: 0.2.1 530 | regex-not: 1.0.2 531 | snapdragon: 0.8.2 532 | to-regex: 3.0.2 533 | dev: true 534 | 535 | /fast-glob/2.2.7: 536 | resolution: {integrity: sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==} 537 | engines: {node: '>=4.0.0'} 538 | dependencies: 539 | '@mrmlnc/readdir-enhanced': 2.2.1 540 | '@nodelib/fs.stat': 1.1.3 541 | glob-parent: 3.1.0 542 | is-glob: 4.0.3 543 | merge2: 1.4.1 544 | micromatch: 3.1.10 545 | dev: true 546 | 547 | /fill-range/4.0.0: 548 | resolution: {integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=} 549 | engines: {node: '>=0.10.0'} 550 | dependencies: 551 | extend-shallow: 2.0.1 552 | is-number: 3.0.0 553 | repeat-string: 1.6.1 554 | to-regex-range: 2.1.1 555 | dev: true 556 | 557 | /for-in/1.0.2: 558 | resolution: {integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=} 559 | engines: {node: '>=0.10.0'} 560 | dev: true 561 | 562 | /fragment-cache/0.2.1: 563 | resolution: {integrity: sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=} 564 | engines: {node: '>=0.10.0'} 565 | dependencies: 566 | map-cache: 0.2.2 567 | dev: true 568 | 569 | /fs-extra/10.0.0: 570 | resolution: {integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==} 571 | engines: {node: '>=12'} 572 | dependencies: 573 | graceful-fs: 4.2.8 574 | jsonfile: 6.1.0 575 | universalify: 2.0.0 576 | dev: true 577 | 578 | /fs-minipass/2.1.0: 579 | resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} 580 | engines: {node: '>= 8'} 581 | dependencies: 582 | minipass: 3.1.5 583 | dev: true 584 | 585 | /fs.realpath/1.0.0: 586 | resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} 587 | dev: true 588 | 589 | /get-stream/5.2.0: 590 | resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} 591 | engines: {node: '>=8'} 592 | dependencies: 593 | pump: 3.0.0 594 | dev: true 595 | 596 | /get-value/2.0.6: 597 | resolution: {integrity: sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=} 598 | engines: {node: '>=0.10.0'} 599 | dev: true 600 | 601 | /glob-parent/3.1.0: 602 | resolution: {integrity: sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=} 603 | dependencies: 604 | is-glob: 3.1.0 605 | path-dirname: 1.0.2 606 | dev: true 607 | 608 | /glob-to-regexp/0.3.0: 609 | resolution: {integrity: sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=} 610 | dev: true 611 | 612 | /glob/7.2.0: 613 | resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} 614 | dependencies: 615 | fs.realpath: 1.0.0 616 | inflight: 1.0.6 617 | inherits: 2.0.4 618 | minimatch: 3.0.4 619 | once: 1.4.0 620 | path-is-absolute: 1.0.1 621 | dev: true 622 | 623 | /globby/9.2.0: 624 | resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==} 625 | engines: {node: '>=6'} 626 | dependencies: 627 | '@types/glob': 7.2.0 628 | array-union: 1.0.2 629 | dir-glob: 2.2.2 630 | fast-glob: 2.2.7 631 | glob: 7.2.0 632 | ignore: 4.0.6 633 | pify: 4.0.1 634 | slash: 2.0.0 635 | dev: true 636 | 637 | /got/11.8.2: 638 | resolution: {integrity: sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==} 639 | engines: {node: '>=10.19.0'} 640 | dependencies: 641 | '@sindresorhus/is': 4.2.0 642 | '@szmarczak/http-timer': 4.0.6 643 | '@types/cacheable-request': 6.0.2 644 | '@types/responselike': 1.0.0 645 | cacheable-lookup: 5.0.4 646 | cacheable-request: 7.0.2 647 | decompress-response: 6.0.0 648 | http2-wrapper: 1.0.3 649 | lowercase-keys: 2.0.0 650 | p-cancelable: 2.1.1 651 | responselike: 2.0.0 652 | dev: true 653 | 654 | /graceful-fs/4.2.8: 655 | resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==} 656 | dev: true 657 | 658 | /has-flag/4.0.0: 659 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 660 | engines: {node: '>=8'} 661 | dev: true 662 | 663 | /has-glob/1.0.0: 664 | resolution: {integrity: sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=} 665 | engines: {node: '>=0.10.0'} 666 | dependencies: 667 | is-glob: 3.1.0 668 | dev: true 669 | 670 | /has-value/0.3.1: 671 | resolution: {integrity: sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=} 672 | engines: {node: '>=0.10.0'} 673 | dependencies: 674 | get-value: 2.0.6 675 | has-values: 0.1.4 676 | isobject: 2.1.0 677 | dev: true 678 | 679 | /has-value/1.0.0: 680 | resolution: {integrity: sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=} 681 | engines: {node: '>=0.10.0'} 682 | dependencies: 683 | get-value: 2.0.6 684 | has-values: 1.0.0 685 | isobject: 3.0.1 686 | dev: true 687 | 688 | /has-values/0.1.4: 689 | resolution: {integrity: sha1-bWHeldkd/Km5oCCJrThL/49it3E=} 690 | engines: {node: '>=0.10.0'} 691 | dev: true 692 | 693 | /has-values/1.0.0: 694 | resolution: {integrity: sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=} 695 | engines: {node: '>=0.10.0'} 696 | dependencies: 697 | is-number: 3.0.0 698 | kind-of: 4.0.0 699 | dev: true 700 | 701 | /http-cache-semantics/4.1.0: 702 | resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} 703 | dev: true 704 | 705 | /http2-wrapper/1.0.3: 706 | resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} 707 | engines: {node: '>=10.19.0'} 708 | dependencies: 709 | quick-lru: 5.1.1 710 | resolve-alpn: 1.2.1 711 | dev: true 712 | 713 | /ignore/4.0.6: 714 | resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} 715 | engines: {node: '>= 4'} 716 | dev: true 717 | 718 | /indent-string/4.0.0: 719 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 720 | engines: {node: '>=8'} 721 | dev: true 722 | 723 | /inflight/1.0.6: 724 | resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} 725 | dependencies: 726 | once: 1.4.0 727 | wrappy: 1.0.2 728 | dev: true 729 | 730 | /inherits/2.0.4: 731 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 732 | dev: true 733 | 734 | /ini/1.3.8: 735 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 736 | dev: true 737 | 738 | /is-accessor-descriptor/0.1.6: 739 | resolution: {integrity: sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=} 740 | engines: {node: '>=0.10.0'} 741 | dependencies: 742 | kind-of: 3.2.2 743 | dev: true 744 | 745 | /is-accessor-descriptor/1.0.0: 746 | resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} 747 | engines: {node: '>=0.10.0'} 748 | dependencies: 749 | kind-of: 6.0.3 750 | dev: true 751 | 752 | /is-buffer/1.1.6: 753 | resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} 754 | dev: true 755 | 756 | /is-data-descriptor/0.1.4: 757 | resolution: {integrity: sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=} 758 | engines: {node: '>=0.10.0'} 759 | dependencies: 760 | kind-of: 3.2.2 761 | dev: true 762 | 763 | /is-data-descriptor/1.0.0: 764 | resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} 765 | engines: {node: '>=0.10.0'} 766 | dependencies: 767 | kind-of: 6.0.3 768 | dev: true 769 | 770 | /is-descriptor/0.1.6: 771 | resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} 772 | engines: {node: '>=0.10.0'} 773 | dependencies: 774 | is-accessor-descriptor: 0.1.6 775 | is-data-descriptor: 0.1.4 776 | kind-of: 5.1.0 777 | dev: true 778 | 779 | /is-descriptor/1.0.2: 780 | resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} 781 | engines: {node: '>=0.10.0'} 782 | dependencies: 783 | is-accessor-descriptor: 1.0.0 784 | is-data-descriptor: 1.0.0 785 | kind-of: 6.0.3 786 | dev: true 787 | 788 | /is-extendable/0.1.1: 789 | resolution: {integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=} 790 | engines: {node: '>=0.10.0'} 791 | dev: true 792 | 793 | /is-extendable/1.0.1: 794 | resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} 795 | engines: {node: '>=0.10.0'} 796 | dependencies: 797 | is-plain-object: 2.0.4 798 | dev: true 799 | 800 | /is-extglob/2.1.1: 801 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 802 | engines: {node: '>=0.10.0'} 803 | dev: true 804 | 805 | /is-glob/3.1.0: 806 | resolution: {integrity: sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=} 807 | engines: {node: '>=0.10.0'} 808 | dependencies: 809 | is-extglob: 2.1.1 810 | dev: true 811 | 812 | /is-glob/4.0.3: 813 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 814 | engines: {node: '>=0.10.0'} 815 | dependencies: 816 | is-extglob: 2.1.1 817 | dev: true 818 | 819 | /is-number/3.0.0: 820 | resolution: {integrity: sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=} 821 | engines: {node: '>=0.10.0'} 822 | dependencies: 823 | kind-of: 3.2.2 824 | dev: true 825 | 826 | /is-plain-object/2.0.4: 827 | resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} 828 | engines: {node: '>=0.10.0'} 829 | dependencies: 830 | isobject: 3.0.1 831 | dev: true 832 | 833 | /is-windows/1.0.2: 834 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 835 | engines: {node: '>=0.10.0'} 836 | dev: true 837 | 838 | /isarray/1.0.0: 839 | resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} 840 | dev: true 841 | 842 | /isexe/2.0.0: 843 | resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} 844 | dev: true 845 | 846 | /isobject/2.1.0: 847 | resolution: {integrity: sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=} 848 | engines: {node: '>=0.10.0'} 849 | dependencies: 850 | isarray: 1.0.0 851 | dev: true 852 | 853 | /isobject/3.0.1: 854 | resolution: {integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=} 855 | engines: {node: '>=0.10.0'} 856 | dev: true 857 | 858 | /json-buffer/3.0.1: 859 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 860 | dev: true 861 | 862 | /jsonfile/6.1.0: 863 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 864 | dependencies: 865 | universalify: 2.0.0 866 | optionalDependencies: 867 | graceful-fs: 4.2.8 868 | dev: true 869 | 870 | /junk/3.1.0: 871 | resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} 872 | engines: {node: '>=8'} 873 | dev: true 874 | 875 | /keyv/4.0.4: 876 | resolution: {integrity: sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==} 877 | dependencies: 878 | json-buffer: 3.0.1 879 | dev: true 880 | 881 | /kind-of/3.2.2: 882 | resolution: {integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=} 883 | engines: {node: '>=0.10.0'} 884 | dependencies: 885 | is-buffer: 1.1.6 886 | dev: true 887 | 888 | /kind-of/4.0.0: 889 | resolution: {integrity: sha1-IIE989cSkosgc3hpGkUGb65y3Vc=} 890 | engines: {node: '>=0.10.0'} 891 | dependencies: 892 | is-buffer: 1.1.6 893 | dev: true 894 | 895 | /kind-of/5.1.0: 896 | resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} 897 | engines: {node: '>=0.10.0'} 898 | dev: true 899 | 900 | /kind-of/6.0.3: 901 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 902 | engines: {node: '>=0.10.0'} 903 | dev: true 904 | 905 | /kleur/3.0.3: 906 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 907 | engines: {node: '>=6'} 908 | dev: true 909 | 910 | /lowercase-keys/2.0.0: 911 | resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} 912 | engines: {node: '>=8'} 913 | dev: true 914 | 915 | /make-dir/3.1.0: 916 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 917 | engines: {node: '>=8'} 918 | dependencies: 919 | semver: 6.3.0 920 | dev: true 921 | 922 | /map-cache/0.2.2: 923 | resolution: {integrity: sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=} 924 | engines: {node: '>=0.10.0'} 925 | dev: true 926 | 927 | /map-visit/1.0.0: 928 | resolution: {integrity: sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=} 929 | engines: {node: '>=0.10.0'} 930 | dependencies: 931 | object-visit: 1.0.1 932 | dev: true 933 | 934 | /merge2/1.4.1: 935 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 936 | engines: {node: '>= 8'} 937 | dev: true 938 | 939 | /micromatch/3.1.10: 940 | resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} 941 | engines: {node: '>=0.10.0'} 942 | dependencies: 943 | arr-diff: 4.0.0 944 | array-unique: 0.3.2 945 | braces: 2.3.2 946 | define-property: 2.0.2 947 | extend-shallow: 3.0.2 948 | extglob: 2.0.4 949 | fragment-cache: 0.2.1 950 | kind-of: 6.0.3 951 | nanomatch: 1.2.13 952 | object.pick: 1.3.0 953 | regex-not: 1.0.2 954 | snapdragon: 0.8.2 955 | to-regex: 3.0.2 956 | dev: true 957 | 958 | /mimic-response/1.0.1: 959 | resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} 960 | engines: {node: '>=4'} 961 | dev: true 962 | 963 | /mimic-response/3.1.0: 964 | resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} 965 | engines: {node: '>=10'} 966 | dev: true 967 | 968 | /minimatch/3.0.4: 969 | resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} 970 | dependencies: 971 | brace-expansion: 1.1.11 972 | dev: true 973 | 974 | /minimist/1.2.5: 975 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} 976 | dev: true 977 | 978 | /minipass/3.1.5: 979 | resolution: {integrity: sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==} 980 | engines: {node: '>=8'} 981 | dependencies: 982 | yallist: 4.0.0 983 | dev: true 984 | 985 | /minizlib/2.1.2: 986 | resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} 987 | engines: {node: '>= 8'} 988 | dependencies: 989 | minipass: 3.1.5 990 | yallist: 4.0.0 991 | dev: true 992 | 993 | /mixin-deep/1.3.2: 994 | resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} 995 | engines: {node: '>=0.10.0'} 996 | dependencies: 997 | for-in: 1.0.2 998 | is-extendable: 1.0.1 999 | dev: true 1000 | 1001 | /mkdirp/1.0.4: 1002 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} 1003 | engines: {node: '>=10'} 1004 | hasBin: true 1005 | dev: true 1006 | 1007 | /ms/2.0.0: 1008 | resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} 1009 | dev: true 1010 | 1011 | /nanomatch/1.2.13: 1012 | resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} 1013 | engines: {node: '>=0.10.0'} 1014 | dependencies: 1015 | arr-diff: 4.0.0 1016 | array-unique: 0.3.2 1017 | define-property: 2.0.2 1018 | extend-shallow: 3.0.2 1019 | fragment-cache: 0.2.1 1020 | is-windows: 1.0.2 1021 | kind-of: 6.0.3 1022 | object.pick: 1.3.0 1023 | regex-not: 1.0.2 1024 | snapdragon: 0.8.2 1025 | to-regex: 3.0.2 1026 | dev: true 1027 | 1028 | /nested-error-stacks/2.1.0: 1029 | resolution: {integrity: sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==} 1030 | dev: true 1031 | 1032 | /normalize-url/6.1.0: 1033 | resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} 1034 | engines: {node: '>=10'} 1035 | dev: true 1036 | 1037 | /object-copy/0.1.0: 1038 | resolution: {integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw=} 1039 | engines: {node: '>=0.10.0'} 1040 | dependencies: 1041 | copy-descriptor: 0.1.1 1042 | define-property: 0.2.5 1043 | kind-of: 3.2.2 1044 | dev: true 1045 | 1046 | /object-visit/1.0.1: 1047 | resolution: {integrity: sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=} 1048 | engines: {node: '>=0.10.0'} 1049 | dependencies: 1050 | isobject: 3.0.1 1051 | dev: true 1052 | 1053 | /object.pick/1.3.0: 1054 | resolution: {integrity: sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=} 1055 | engines: {node: '>=0.10.0'} 1056 | dependencies: 1057 | isobject: 3.0.1 1058 | dev: true 1059 | 1060 | /once/1.4.0: 1061 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} 1062 | dependencies: 1063 | wrappy: 1.0.2 1064 | dev: true 1065 | 1066 | /p-all/2.1.0: 1067 | resolution: {integrity: sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==} 1068 | engines: {node: '>=6'} 1069 | dependencies: 1070 | p-map: 2.1.0 1071 | dev: true 1072 | 1073 | /p-cancelable/2.1.1: 1074 | resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} 1075 | engines: {node: '>=8'} 1076 | dev: true 1077 | 1078 | /p-event/4.2.0: 1079 | resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} 1080 | engines: {node: '>=8'} 1081 | dependencies: 1082 | p-timeout: 3.2.0 1083 | dev: true 1084 | 1085 | /p-filter/2.1.0: 1086 | resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} 1087 | engines: {node: '>=8'} 1088 | dependencies: 1089 | p-map: 2.1.0 1090 | dev: true 1091 | 1092 | /p-finally/1.0.0: 1093 | resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=} 1094 | engines: {node: '>=4'} 1095 | dev: true 1096 | 1097 | /p-map/2.1.0: 1098 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} 1099 | engines: {node: '>=6'} 1100 | dev: true 1101 | 1102 | /p-map/3.0.0: 1103 | resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} 1104 | engines: {node: '>=8'} 1105 | dependencies: 1106 | aggregate-error: 3.1.0 1107 | dev: true 1108 | 1109 | /p-timeout/3.2.0: 1110 | resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} 1111 | engines: {node: '>=8'} 1112 | dependencies: 1113 | p-finally: 1.0.0 1114 | dev: true 1115 | 1116 | /pascalcase/0.1.1: 1117 | resolution: {integrity: sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=} 1118 | engines: {node: '>=0.10.0'} 1119 | dev: true 1120 | 1121 | /path-dirname/1.0.2: 1122 | resolution: {integrity: sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=} 1123 | dev: true 1124 | 1125 | /path-is-absolute/1.0.1: 1126 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} 1127 | engines: {node: '>=0.10.0'} 1128 | dev: true 1129 | 1130 | /path-key/3.1.1: 1131 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1132 | engines: {node: '>=8'} 1133 | dev: true 1134 | 1135 | /path-type/3.0.0: 1136 | resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} 1137 | engines: {node: '>=4'} 1138 | dependencies: 1139 | pify: 3.0.0 1140 | dev: true 1141 | 1142 | /pify/3.0.0: 1143 | resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=} 1144 | engines: {node: '>=4'} 1145 | dev: true 1146 | 1147 | /pify/4.0.1: 1148 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 1149 | engines: {node: '>=6'} 1150 | dev: true 1151 | 1152 | /posix-character-classes/0.1.1: 1153 | resolution: {integrity: sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=} 1154 | engines: {node: '>=0.10.0'} 1155 | dev: true 1156 | 1157 | /prompts/2.4.2: 1158 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 1159 | engines: {node: '>= 6'} 1160 | dependencies: 1161 | kleur: 3.0.3 1162 | sisteransi: 1.0.5 1163 | dev: true 1164 | 1165 | /pump/3.0.0: 1166 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} 1167 | dependencies: 1168 | end-of-stream: 1.4.4 1169 | once: 1.4.0 1170 | dev: true 1171 | 1172 | /quick-lru/5.1.1: 1173 | resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} 1174 | engines: {node: '>=10'} 1175 | dev: true 1176 | 1177 | /rc/1.2.8: 1178 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 1179 | hasBin: true 1180 | dependencies: 1181 | deep-extend: 0.6.0 1182 | ini: 1.3.8 1183 | minimist: 1.2.5 1184 | strip-json-comments: 2.0.1 1185 | dev: true 1186 | 1187 | /regex-not/1.0.2: 1188 | resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} 1189 | engines: {node: '>=0.10.0'} 1190 | dependencies: 1191 | extend-shallow: 3.0.2 1192 | safe-regex: 1.1.0 1193 | dev: true 1194 | 1195 | /registry-auth-token/3.3.2: 1196 | resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} 1197 | dependencies: 1198 | rc: 1.2.8 1199 | safe-buffer: 5.2.1 1200 | dev: true 1201 | 1202 | /registry-url/3.1.0: 1203 | resolution: {integrity: sha1-PU74cPc93h138M+aOBQyRE4XSUI=} 1204 | engines: {node: '>=0.10.0'} 1205 | dependencies: 1206 | rc: 1.2.8 1207 | dev: true 1208 | 1209 | /repeat-element/1.1.4: 1210 | resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} 1211 | engines: {node: '>=0.10.0'} 1212 | dev: true 1213 | 1214 | /repeat-string/1.6.1: 1215 | resolution: {integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc=} 1216 | engines: {node: '>=0.10'} 1217 | dev: true 1218 | 1219 | /resolve-alpn/1.2.1: 1220 | resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} 1221 | dev: true 1222 | 1223 | /resolve-url/0.2.1: 1224 | resolution: {integrity: sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=} 1225 | deprecated: https://github.com/lydell/resolve-url#deprecated 1226 | dev: true 1227 | 1228 | /responselike/2.0.0: 1229 | resolution: {integrity: sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==} 1230 | dependencies: 1231 | lowercase-keys: 2.0.0 1232 | dev: true 1233 | 1234 | /ret/0.1.15: 1235 | resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} 1236 | engines: {node: '>=0.12'} 1237 | dev: true 1238 | 1239 | /retry/0.13.1: 1240 | resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} 1241 | engines: {node: '>= 4'} 1242 | dev: true 1243 | 1244 | /rimraf/3.0.2: 1245 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1246 | hasBin: true 1247 | dependencies: 1248 | glob: 7.2.0 1249 | dev: true 1250 | 1251 | /safe-buffer/5.2.1: 1252 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1253 | dev: true 1254 | 1255 | /safe-regex/1.1.0: 1256 | resolution: {integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4=} 1257 | dependencies: 1258 | ret: 0.1.15 1259 | dev: true 1260 | 1261 | /semver/6.3.0: 1262 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 1263 | hasBin: true 1264 | dev: true 1265 | 1266 | /set-value/2.0.1: 1267 | resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} 1268 | engines: {node: '>=0.10.0'} 1269 | dependencies: 1270 | extend-shallow: 2.0.1 1271 | is-extendable: 0.1.1 1272 | is-plain-object: 2.0.4 1273 | split-string: 3.1.0 1274 | dev: true 1275 | 1276 | /shebang-command/2.0.0: 1277 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1278 | engines: {node: '>=8'} 1279 | dependencies: 1280 | shebang-regex: 3.0.0 1281 | dev: true 1282 | 1283 | /shebang-regex/3.0.0: 1284 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1285 | engines: {node: '>=8'} 1286 | dev: true 1287 | 1288 | /sisteransi/1.0.5: 1289 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 1290 | dev: true 1291 | 1292 | /slash/2.0.0: 1293 | resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} 1294 | engines: {node: '>=6'} 1295 | dev: true 1296 | 1297 | /snapdragon-node/2.1.1: 1298 | resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} 1299 | engines: {node: '>=0.10.0'} 1300 | dependencies: 1301 | define-property: 1.0.0 1302 | isobject: 3.0.1 1303 | snapdragon-util: 3.0.1 1304 | dev: true 1305 | 1306 | /snapdragon-util/3.0.1: 1307 | resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} 1308 | engines: {node: '>=0.10.0'} 1309 | dependencies: 1310 | kind-of: 3.2.2 1311 | dev: true 1312 | 1313 | /snapdragon/0.8.2: 1314 | resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} 1315 | engines: {node: '>=0.10.0'} 1316 | dependencies: 1317 | base: 0.11.2 1318 | debug: 2.6.9 1319 | define-property: 0.2.5 1320 | extend-shallow: 2.0.1 1321 | map-cache: 0.2.2 1322 | source-map: 0.5.7 1323 | source-map-resolve: 0.5.3 1324 | use: 3.1.1 1325 | dev: true 1326 | 1327 | /source-map-resolve/0.5.3: 1328 | resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} 1329 | dependencies: 1330 | atob: 2.1.2 1331 | decode-uri-component: 0.2.0 1332 | resolve-url: 0.2.1 1333 | source-map-url: 0.4.1 1334 | urix: 0.1.0 1335 | dev: true 1336 | 1337 | /source-map-url/0.4.1: 1338 | resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} 1339 | dev: true 1340 | 1341 | /source-map/0.5.7: 1342 | resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} 1343 | engines: {node: '>=0.10.0'} 1344 | dev: true 1345 | 1346 | /split-string/3.1.0: 1347 | resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} 1348 | engines: {node: '>=0.10.0'} 1349 | dependencies: 1350 | extend-shallow: 3.0.2 1351 | dev: true 1352 | 1353 | /static-extend/0.1.2: 1354 | resolution: {integrity: sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=} 1355 | engines: {node: '>=0.10.0'} 1356 | dependencies: 1357 | define-property: 0.2.5 1358 | object-copy: 0.1.0 1359 | dev: true 1360 | 1361 | /strip-json-comments/2.0.1: 1362 | resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} 1363 | engines: {node: '>=0.10.0'} 1364 | dev: true 1365 | 1366 | /supports-color/7.2.0: 1367 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1368 | engines: {node: '>=8'} 1369 | dependencies: 1370 | has-flag: 4.0.0 1371 | dev: true 1372 | 1373 | /tar/6.1.11: 1374 | resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==} 1375 | engines: {node: '>= 10'} 1376 | dependencies: 1377 | chownr: 2.0.0 1378 | fs-minipass: 2.1.0 1379 | minipass: 3.1.5 1380 | minizlib: 2.1.2 1381 | mkdirp: 1.0.4 1382 | yallist: 4.0.0 1383 | dev: true 1384 | 1385 | /to-object-path/0.3.0: 1386 | resolution: {integrity: sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=} 1387 | engines: {node: '>=0.10.0'} 1388 | dependencies: 1389 | kind-of: 3.2.2 1390 | dev: true 1391 | 1392 | /to-regex-range/2.1.1: 1393 | resolution: {integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=} 1394 | engines: {node: '>=0.10.0'} 1395 | dependencies: 1396 | is-number: 3.0.0 1397 | repeat-string: 1.6.1 1398 | dev: true 1399 | 1400 | /to-regex/3.0.2: 1401 | resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} 1402 | engines: {node: '>=0.10.0'} 1403 | dependencies: 1404 | define-property: 2.0.2 1405 | extend-shallow: 3.0.2 1406 | regex-not: 1.0.2 1407 | safe-regex: 1.1.0 1408 | dev: true 1409 | 1410 | /typescript/4.4.4: 1411 | resolution: {integrity: sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==} 1412 | engines: {node: '>=4.2.0'} 1413 | hasBin: true 1414 | dev: true 1415 | 1416 | /union-value/1.0.1: 1417 | resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} 1418 | engines: {node: '>=0.10.0'} 1419 | dependencies: 1420 | arr-union: 3.1.0 1421 | get-value: 2.0.6 1422 | is-extendable: 0.1.1 1423 | set-value: 2.0.1 1424 | dev: true 1425 | 1426 | /universalify/2.0.0: 1427 | resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} 1428 | engines: {node: '>= 10.0.0'} 1429 | dev: true 1430 | 1431 | /unset-value/1.0.0: 1432 | resolution: {integrity: sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=} 1433 | engines: {node: '>=0.10.0'} 1434 | dependencies: 1435 | has-value: 0.3.1 1436 | isobject: 3.0.1 1437 | dev: true 1438 | 1439 | /update-check/1.5.4: 1440 | resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} 1441 | dependencies: 1442 | registry-auth-token: 3.3.2 1443 | registry-url: 3.1.0 1444 | dev: true 1445 | 1446 | /urix/0.1.0: 1447 | resolution: {integrity: sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=} 1448 | deprecated: Please see https://github.com/lydell/urix#deprecated 1449 | dev: true 1450 | 1451 | /use/3.1.1: 1452 | resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} 1453 | engines: {node: '>=0.10.0'} 1454 | dev: true 1455 | 1456 | /validate-npm-package-name/3.0.0: 1457 | resolution: {integrity: sha1-X6kS2B630MdK/BQN5zF/DKffQ34=} 1458 | dependencies: 1459 | builtins: 1.0.3 1460 | dev: true 1461 | 1462 | /which/2.0.2: 1463 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1464 | engines: {node: '>= 8'} 1465 | hasBin: true 1466 | dependencies: 1467 | isexe: 2.0.0 1468 | dev: true 1469 | 1470 | /wrappy/1.0.2: 1471 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} 1472 | dev: true 1473 | 1474 | /yallist/4.0.0: 1475 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1476 | dev: true 1477 | --------------------------------------------------------------------------------
Loading...
Error
{name}
{category?.name}