From 457a153dc9d39e4acc3f2f2f9fd8789bd6720157 Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Fri, 28 Jul 2023 08:24:03 +0200 Subject: [PATCH] chore(templates): add SSG template (#1) * ssg template * todos * fixes * use appType * ignore error --- .gitignore | 3 + src/index.js | 27 ++++-- templates/ssr/_gitignore | 24 +++++ templates/ssr/index.html | 13 +++ templates/ssr/jsconfig.json | 13 +++ templates/ssr/package.json | 19 ++++ templates/ssr/pages/assets/preact.svg | 1 + templates/ssr/pages/index.page.jsx | 28 ++++++ templates/ssr/public/vite.svg | 1 + templates/ssr/renderer/PageShell.jsx | 11 +++ .../ssr/renderer/_default.page.client.jsx | 23 +++++ .../ssr/renderer/_default.page.server.jsx | 44 +++++++++ templates/ssr/renderer/usePageContext.js | 19 ++++ templates/ssr/src/assets/preact.svg | 1 + templates/ssr/src/index.jsx | 32 +++++++ templates/ssr/src/style.css | 95 +++++++++++++++++++ templates/ssr/vite.config.js | 8 ++ yarn.lock | 80 ++++++++-------- 18 files changed, 395 insertions(+), 47 deletions(-) create mode 100644 templates/ssr/_gitignore create mode 100644 templates/ssr/index.html create mode 100644 templates/ssr/jsconfig.json create mode 100644 templates/ssr/package.json create mode 100644 templates/ssr/pages/assets/preact.svg create mode 100644 templates/ssr/pages/index.page.jsx create mode 100644 templates/ssr/public/vite.svg create mode 100644 templates/ssr/renderer/PageShell.jsx create mode 100644 templates/ssr/renderer/_default.page.client.jsx create mode 100644 templates/ssr/renderer/_default.page.server.jsx create mode 100644 templates/ssr/renderer/usePageContext.js create mode 100644 templates/ssr/src/assets/preact.svg create mode 100644 templates/ssr/src/index.jsx create mode 100644 templates/ssr/src/style.css create mode 100644 templates/ssr/vite.config.js diff --git a/.gitignore b/.gitignore index 13d0a24..0ed7860 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,6 @@ dist-ssr # Local Netlify folder .netlify + +./templates/**/package-lock.json +./templates/**/yarn.lock diff --git a/src/index.js b/src/index.js index 09a764d..3862447 100755 --- a/src/index.js +++ b/src/index.js @@ -22,7 +22,7 @@ const brandColor = /** @type {const} */ ([174, 128, 255]); kl.trueColor(...brandColor)('Preact - Fast 3kB alternative to React with the same modern API') ); - const { dir, language, useRouter, useESLint } = await prompts.group( + const { dir, language, useRouter, useESLint, appType } = await prompts.group( { dir: () => prompts.text({ @@ -36,6 +36,14 @@ const brandColor = /** @type {const} */ ([174, 128, 255]); } }, }), + appType : () => prompts.select({ + message: 'Project Type:', + initialValue: 'spa', + options: [ + { value: 'spa', label: 'Single Page Application (only client-side)' }, + { value: 'ssg', label: 'Static Site Generation (prerenders pages)' }, + ], + }), language: () => prompts.select({ message: 'Project language:', @@ -45,11 +53,11 @@ const brandColor = /** @type {const} */ ([174, 128, 255]); { value: 'ts', label: 'TypeScript' }, ], }), - useRouter: () => + useRouter: ({ results }) => results.appType === 'spa' ? prompts.confirm({ message: 'Use router?', initialValue: false, - }), + }) : Promise.resolve(false), useESLint: () => prompts.confirm({ message: 'Use ESLint?', @@ -68,13 +76,13 @@ const brandColor = /** @type {const} */ ([174, 128, 255]); await useSpinner( 'Setting up your project directory...', - () => scaffold(targetDir, { useTS, useRouter, useESLint }), + () => scaffold(targetDir, { useTS, useRouter, useESLint, appType }), 'Set up project directory' ); await useSpinner( 'Installing project dependencies...', - () => installDeps(targetDir, packageManager, { useTS, useRouter, useESLint }), + () => installDeps(targetDir, packageManager, { useTS, useRouter, useESLint, appType }), 'Installed project dependencies' ); @@ -103,8 +111,9 @@ async function useSpinner(startMessage, fn, finishMessage) { /** * @typedef {Object} ConfigOptions * @property {boolean} useTS - * @property {boolean} useRouter + * @property {unknown} useRouter * @property {boolean} useESLint + * @property {string} appType */ /** @@ -117,7 +126,11 @@ async function scaffold(to, opts) { await fs.mkdir(to, { recursive: true }); const __dirname = dirname(fileURLToPath(import.meta.url)); - await templateDir(resolve(__dirname, '../templates', 'base'), to, opts.useTS); + if (opts.appType === 'spa') { + await templateDir(resolve(__dirname, '../templates', 'base'), to, opts.useTS); + } else { + await templateDir(resolve(__dirname, '../templates', 'ssr'), to, opts.useTS); + } if (opts.useRouter) { await templateDir( diff --git a/templates/ssr/_gitignore b/templates/ssr/_gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/templates/ssr/_gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/templates/ssr/index.html b/templates/ssr/index.html new file mode 100644 index 0000000..6006178 --- /dev/null +++ b/templates/ssr/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + Preact + + +
+ + + diff --git a/templates/ssr/jsconfig.json b/templates/ssr/jsconfig.json new file mode 100644 index 0000000..dd7fcb6 --- /dev/null +++ b/templates/ssr/jsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "bundler", + "noEmit": true, + "allowJs": true, + "checkJs": true, + "jsx": "react-jsx", + "jsxImportSource": "preact" + }, + "include": ["node_modules/vite/client.d.ts", "**/*"] +} diff --git a/templates/ssr/package.json b/templates/ssr/package.json new file mode 100644 index 0000000..e2956d8 --- /dev/null +++ b/templates/ssr/package.json @@ -0,0 +1,19 @@ +{ + "name": "example", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite build && vite preview" + }, + "dependencies": { + "preact": "^10.16.0", + "preact-render-to-string": "^6.2.0" + }, + "devDependencies": { + "@preact/preset-vite": "^2.5.0", + "vite": "^4.3.2", + "vite-plugin-ssr": "^0.4.133" + } +} diff --git a/templates/ssr/pages/assets/preact.svg b/templates/ssr/pages/assets/preact.svg new file mode 100644 index 0000000..908f17d --- /dev/null +++ b/templates/ssr/pages/assets/preact.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/ssr/pages/index.page.jsx b/templates/ssr/pages/index.page.jsx new file mode 100644 index 0000000..1399820 --- /dev/null +++ b/templates/ssr/pages/index.page.jsx @@ -0,0 +1,28 @@ +import preactLogo from './assets/preact.svg'; +import { useState } from 'preact/hooks' +import viteLogo from '/vite.svg'; + +export function Page() { + const [count, setCount] = useState(0); + + return ( + <> +
+ + + + + + +
+

Vite + Preact

+
+ +

+ Edit src/app.jsx and save to test HMR +

+
+

Click on the Vite and Preact logos to learn more

+ + ); +} diff --git a/templates/ssr/public/vite.svg b/templates/ssr/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/templates/ssr/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/ssr/renderer/PageShell.jsx b/templates/ssr/renderer/PageShell.jsx new file mode 100644 index 0000000..bb453ba --- /dev/null +++ b/templates/ssr/renderer/PageShell.jsx @@ -0,0 +1,11 @@ +import { PageContextProvider } from './usePageContext' + +export { PageShell } + +function PageShell({ pageContext, children }) { + return ( + +
{children}
+
+ ) +} diff --git a/templates/ssr/renderer/_default.page.client.jsx b/templates/ssr/renderer/_default.page.client.jsx new file mode 100644 index 0000000..867f121 --- /dev/null +++ b/templates/ssr/renderer/_default.page.client.jsx @@ -0,0 +1,23 @@ +export { render } + +import { hydrate } from 'preact' +import { PageShell } from './PageShell' + +// This render() hook only supports SSR, see https://vite-plugin-ssr.com/render-modes for how to modify render() to support SPA +async function render(pageContext) { + const { Page, pageProps } = pageContext + if (!Page) throw new Error('Client-side render() hook expects pageContext.Page to be defined') + const root = document.getElementById('app') + if (!root) throw new Error('DOM element #app not found') + + hydrate( + + + , + root + ) +} + +/* To enable Client-side Routing: +export const clientRouting = true +// !! WARNING !! Before doing so, read https://vite-plugin-ssr.com/clientRouting */ diff --git a/templates/ssr/renderer/_default.page.server.jsx b/templates/ssr/renderer/_default.page.server.jsx new file mode 100644 index 0000000..8ae35cc --- /dev/null +++ b/templates/ssr/renderer/_default.page.server.jsx @@ -0,0 +1,44 @@ +export { render } +// See https://vite-plugin-ssr.com/data-fetching +export const passToClient = ['pageProps', 'urlPathname'] + +import { renderToString } from 'preact-render-to-string' +import { PageShell } from './PageShell' +import { escapeInject, dangerouslySkipEscape } from 'vite-plugin-ssr/server' + +async function render(pageContext) { + const { Page, pageProps } = pageContext + // This render() hook only supports SSR, see https://vite-plugin-ssr.com/render-modes for how to modify render() to support SPA + if (!Page) throw new Error('My render() hook expects pageContext.Page to be defined') + const pageHtml = renderToString( + + + + ) + + // See https://vite-plugin-ssr.com/head + const { documentProps } = pageContext.exports + const title = (documentProps && documentProps.title) || 'Vite SSR app' + const desc = (documentProps && documentProps.description) || 'App using Vite + vite-plugin-ssr' + + const documentHtml = escapeInject` + + + + + + + ${title} + + +
${dangerouslySkipEscape(pageHtml)}
+ + ` + + return { + documentHtml, + pageContext: { + // We can add some `pageContext` here, which is useful if we want to do page redirection https://vite-plugin-ssr.com/page-redirection + } + } +} diff --git a/templates/ssr/renderer/usePageContext.js b/templates/ssr/renderer/usePageContext.js new file mode 100644 index 0000000..2ffe182 --- /dev/null +++ b/templates/ssr/renderer/usePageContext.js @@ -0,0 +1,19 @@ +// `usePageContext` allows us to access `pageContext` in any Preact component. +// See https://vite-plugin-ssr.com/pageContext-anywhere + +import { createContext } from 'preact' +import { useContext } from 'preact/hooks' + +export { PageContextProvider } +export { usePageContext } + +const Context = createContext(undefined) + +function PageContextProvider({ pageContext, children }) { + return {children} +} + +function usePageContext() { + const pageContext = useContext(Context) + return pageContext +} diff --git a/templates/ssr/src/assets/preact.svg b/templates/ssr/src/assets/preact.svg new file mode 100644 index 0000000..908f17d --- /dev/null +++ b/templates/ssr/src/assets/preact.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/ssr/src/index.jsx b/templates/ssr/src/index.jsx new file mode 100644 index 0000000..6e676a9 --- /dev/null +++ b/templates/ssr/src/index.jsx @@ -0,0 +1,32 @@ +import { render } from 'preact'; +import { useState } from 'preact/hooks'; +import preactLogo from './assets/preact.svg'; +import viteLogo from '/vite.svg'; +import './style.css'; + +export function App() { + const [count, setCount] = useState(0); + + return ( + <> +
+ + + + + + +
+

Vite + Preact

+
+ +

+ Edit src/app.jsx and save to test HMR +

+
+

Click on the Vite and Preact logos to learn more

+ + ); +} + +render(, document.getElementById('app')); diff --git a/templates/ssr/src/style.css b/templates/ssr/src/style.css new file mode 100644 index 0000000..891e571 --- /dev/null +++ b/templates/ssr/src/style.css @@ -0,0 +1,95 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.preact:hover { + filter: drop-shadow(0 0 2em #673ab8aa); +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/templates/ssr/vite.config.js b/templates/ssr/vite.config.js new file mode 100644 index 0000000..dc1f14d --- /dev/null +++ b/templates/ssr/vite.config.js @@ -0,0 +1,8 @@ +import { defineConfig } from 'vite'; +import preact from '@preact/preset-vite'; +import ssr from 'vite-plugin-ssr/plugin' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [preact(), ssr({ prerender: true })], +}); diff --git a/yarn.lock b/yarn.lock index c0a9cad..a331f23 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@clack/core@^0.3.2": version "0.3.2" - resolved "https://registry.yarnpkg.com/@clack/core/-/core-0.3.2.tgz#23c6e440ed263c2f012b1cc0806386481e78420b" + resolved "https://registry.npmjs.org/@clack/core/-/core-0.3.2.tgz" integrity sha512-FZnsNynwGDIDktx6PEZK1EuCkFpY4ldEX6VYvfl0dqeoLPb9Jpw1xoUXaVcGR8ExmYNm1w2vdGdJkEUYD/2pqg== dependencies: picocolors "^1.0.0" @@ -12,7 +12,7 @@ "@clack/prompts@^0.6.3": version "0.6.3" - resolved "https://registry.yarnpkg.com/@clack/prompts/-/prompts-0.6.3.tgz#c6184bb3f8685dfc72207d2ff051f7a6a733fcb3" + resolved "https://registry.npmjs.org/@clack/prompts/-/prompts-0.6.3.tgz" integrity sha512-AM+kFmAHawpUQv2q9+mcB6jLKxXGjgu/r2EQjEwujgpCdzrST6BJqYw00GRn56/L/Izw5U7ImoLmy00X/r80Pw== dependencies: "@clack/core" "^0.3.2" @@ -21,29 +21,24 @@ "@types/execa@^0.9.0": version "0.9.0" - resolved "https://registry.yarnpkg.com/@types/execa/-/execa-0.9.0.tgz#9b025d2755f17e80beaf9368c3f4f319d8b0fb93" + resolved "https://registry.npmjs.org/@types/execa/-/execa-0.9.0.tgz" integrity sha512-mgfd93RhzjYBUHHV532turHC2j4l/qxsF/PbfDmprHDEUHmNZGlDn1CEsulGK3AfsPdhkWzZQT/S/k0UGhLGsA== dependencies: "@types/node" "*" -"@types/node@*": - version "20.2.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.4.tgz#e6c3345f7ed9c6df41fdc288a94e2633167bc15d" - integrity sha512-ni5f8Xlf4PwnT/Z3f0HURc3ZSw8UyrqMqmM3L5ysa7VjHu8c3FOmIo1nKCcLrV/OAmtf3N4kFna/aJqxsfEtnA== +"@types/node@*", "@types/node@^20.2.3": + version "20.2.3" + resolved "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz" + integrity sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw== "@types/node@^11.9.4": version "11.15.54" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.54.tgz#59ed60e7b0d56905a654292e8d73275034eb6283" + resolved "https://registry.npmjs.org/@types/node/-/node-11.15.54.tgz" integrity sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g== -"@types/node@^20.2.3": - version "20.2.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.3.tgz#b31eb300610c3835ac008d690de6f87e28f9b878" - integrity sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw== - cross-spawn@^6.0.0: version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" @@ -54,14 +49,14 @@ cross-spawn@^6.0.0: end-of-stream@^1.1.0: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" execa@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" @@ -74,63 +69,68 @@ execa@^1.0.0: get-stream@^4.0.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" is-stream@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== +is-unicode-supported@*: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== + isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== kolorist@^1.8.0: version "1.8.0" - resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c" + resolved "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz" integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== nice-try@^1.0.4: version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== npm-run-path@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== dependencies: path-key "^2.0.0" once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== pkg-install@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-install/-/pkg-install-1.0.0.tgz#a0c2e64e14d1733d670571489c303605527063fe" + resolved "https://registry.npmjs.org/pkg-install/-/pkg-install-1.0.0.tgz" integrity sha512-UGI8bfhrDb1KN01RZ7Bq08GRQc8rmVjxQ2up0g4mUHPCYDTK1FzQ0PMmLOBCHg3yaIijZ2U3Fn9ofLa4N392Ug== dependencies: "@types/execa" "^0.9.0" @@ -139,22 +139,22 @@ pkg-install@^1.0.0: preact@^10.15.0: version "10.15.0" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.15.0.tgz#14bae0afe3547ca9d45d22fda2a4266462d31cf3" + resolved "https://registry.npmjs.org/preact/-/preact-10.15.0.tgz" integrity sha512-nZSa8M2R2m1n7nJSBlzDpxRJaIsejrTO1vlFbdpFvyC8qM1iU+On2y0otfoUm6SRB5o0lF0CKDFxg6grEFU0iQ== prettier-config-rschristian@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/prettier-config-rschristian/-/prettier-config-rschristian-0.1.1.tgz#59efad3002a0a915c28019ed7ea2b2c8f875115e" + resolved "https://registry.npmjs.org/prettier-config-rschristian/-/prettier-config-rschristian-0.1.1.tgz" integrity sha512-PRs3vZn+1PTGTTtDfdDZdrhzLhQCu4Qe5HxWo1R3Ui2R8X2PX5rKEg7NOfZbvjla0686+nYocV3mDOhMz2D4WQ== prettier@^2.6.2: version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -162,49 +162,49 @@ pump@^3.0.0: semver@^5.5.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== shebang-command@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== signal-exit@^3.0.0: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== sisteransi@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== strip-eof@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== typescript@^5.0.0: version "5.0.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz" integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== which@^1.2.9: version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==