diff --git a/.env b/.env index c9ae81a6..1ee57ee9 100644 --- a/.env +++ b/.env @@ -1,2 +1,2 @@ -BLOG_INDEX_ID= -NOTION_TOKEN= \ No newline at end of file +BLOG_INDEX_ID='200db82dcf57803e9070f02f6f083452' +NOTION_TOKEN='v03%3AeyJhbGciOiJkaXIiLCJraWQiOiJwcm9kdWN0aW9uOnRva2VuLXYzOjIwMjQtMTEtMDciLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIn0..W_5-HH8B5ts3X2NFB7CcPg.Z-SO64g0qT5UmTZ0xEgyOCRGov6eYrx_gZemw3E1pgPQua7Jm4WGXivH1u6sQOIoE8_s7lwEY4PMWvDB38o0ih83FXw09WriXix2pRhsJRqAEDw7Rhsi9LgT8jlKJ1dfEbHXjy4AxBAynw2UVTNtTVGxCASnI_SSYTz9hkWR1r9jsvDXTuFwn10FwLw9jLj4AhyIcc2Mbix_VDAi0LZpFwKNE643FPEUQuy9pDHaycUAgILozjX3Lz0YA8XjkMqVu3nhGVaAi_juBhSKSwD5buh9t-L-Ya6R-449hnLla4zjTcLLxwcQQS4LtSFshcNvba9un7r4Q_q1qzR3pf3WxXWrB86F0STsJxIyY3sKZFs.fm2uuw2PcIhsV5h-bRS6JBCWHOvxHS1l_fl9Sszt4n8' \ No newline at end of file diff --git a/.gitignore b/.gitignore index b0aa4f94..9ccd84d7 100644 --- a/.gitignore +++ b/.gitignore @@ -27,5 +27,9 @@ yarn-error.log* .blog_index_data .blog_index_data_previews +# local env files .now -.vercel \ No newline at end of file +.vercel +.env +.idea +.vscode \ No newline at end of file diff --git a/package.json b/package.json index 8634d680..4c34504f 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "start": "next start", "build": "next build && node .next/server/build-rss.js", "format": "prettier --write \"**/*.{js,jsx,json,ts,tsx,md,mdx,css,html,yml,yaml,scss,sass}\" --ignore-path .gitignore", - "lint-staged": "lint-staged" + "lint-staged": "lint-staged", + "vercel-build": "ts-node src/lib/build-rss.ts && next build" }, "pre-commit": "lint-staged", "dependencies": { @@ -22,11 +23,12 @@ }, "devDependencies": { "@types/katex": "0.11.0", - "@types/node": "14.14.31", + "@types/node": "^22.15.26", "@types/react": "17.0.2", "lint-staged": "10.5.4", "pre-commit": "1.2.2", "prettier": "2.2.1", - "typescript": "^4.4.4" + "ts-node": "^10.9.2", + "typescript": "^5.8.3" } } diff --git a/public/atom b/public/atom new file mode 100644 index 00000000..7623e8e4 --- /dev/null +++ b/public/atom @@ -0,0 +1,25 @@ + + + My Blog + Blog + + + 2025-05-30T03:16:49.770Z + My Notion Blog + + /blog/meu-primeiro-post + Teste - Sempre um teste + + 2025-05-27T03:00:00.625Z + +
+

📝 Um parágrafo curto como introdução.

+📝 Segundo parágrafo como resumo.

+

+ Read more +

+
+
+ Kellen Xavier +
+
\ No newline at end of file diff --git a/readme.md b/readme.md index 2fe537bd..dea68930 100644 --- a/readme.md +++ b/readme.md @@ -1,85 +1,53 @@ -# Notion Blog +# Meu Notion Blog -This is an example Next.js project that shows Next.js' upcoming SSG (static-site generation) support using Notion's **private** API for a backend. +## Sobre esse template -**Note**: This example uses the experimental SSG hooks only available in the Next.js canary branch! The APIs used within this example will change over time. Since it is using a private API and experimental features, use at your own risk as these things could change at any moment. +Esse template foi feito um fork a partir deste aqui [template original](https://github.com/ijjk/notion-blog). +Estou realizando os ajustes, e como tenho alguns textos e documentações, algumas estão no Notion +então esse template é perfeito! -**Live Example hosted on Vercel**: https://notion-blog.vercel.app/ +> Este é um projeto de exemplo em Next.js que demonstra o suporte à geração de site estático (SSG - static-site generation) usando a API privada do Notion como backend. -## Getting Started +## Rodar Localmente -To view the steps to setup Notion to work with this example view the post at https://notion-blog.vercel.app/blog/my-first-post or follow the steps below. +## Instale dependências -## Deploy Your Own +yarn install -Deploy your own Notion blog with Vercel. +## Compile e gere o RSS -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https://github.com/ijjk/notion-blog/tree/main&project-name=notion-blog&repository-name=notion-blog) +yarn build -or +## Inicie o servidor (porta 3000) -1. Clone this repo `git clone https://github.com/ijjk/notion-blog.git` -2. Configure project with [`vc`](https://vercel.com/download) -3. Add your `NOTION_TOKEN` and `BLOG_INDEX_ID` as environment variables in [your project](https://vercel.com/docs/integrations?query=envir#project-level-apis/project-based-environment-variables). See [here](#getting-blog-index-and-token) for how to find these values -4. Do final deployment with `vc` +yarn start -Note: if redeploying with `vc` locally and you haven't made any changes to the application's source and only edited in Notion you will need use `vc -f` to bypass build de-duping +## 📦 Requisitos -## Creating Your Pages Table +- Node.js `>=18.x` (recomendado) +- Yarn `>=1.22` +- Conta no Notion com acesso à API +- Conta na Vercel (conectada ao GitHub) -**Note**: this is auto run if a table isn't detected the first time visiting `/blog` +## ⚙️ Variáveis de ambiente -### Using the Pre-Configured Script +Crie um arquivo `.env.local` com: -1. Create a blank page in Notion -2. Clone this repo `git clone https://github.com/ijjk/notion-blog.git` -3. Install dependencies `cd notion-blog && yarn` -4. Run script to create table `NOTION_TOKEN='token' BLOG_INDEX_ID='new-page-id' node scripts/create-table.js` See [here](#getting-blog-index-and-token) for finding the id for the new page +```env +NOTION_TOKEN=seu_token_do_notion +BLOG_INDEX_ID=id_da_tabela_do_blog -### Manually Creating the Table +``` -1. Create a blank page in Notion -2. Create a **inline** table on that page, don't use a full page table as it requires querying differently -3. Add the below fields to the table +### Deploy esta configurado na Vercel -The table should have the following properties: +[Link do deploy](https://notion-blog-lake-two.vercel.app/) -- `Page`: this the blog post's page -- `Slug`: this is the blog post's slug relative to `/blog`, it should be a text property -- `Published`: this filters blog posts in **production**, it should be a checkbox property -- `Date`: this is when the blog post appears as posted, it should be a date property -- `Authors`: this is a list of Notion users that wrote the post, it should be a person property +🌐 Deploy automático (Vercel) -![Example Blog Posts Table](./assets/table-view.png) +´´´ +yarn vercel-build -## Getting Blog Index and Token +´´´ -To get your blog index value, open Notion and Navigate to the Notion page with the table you created above. While on this page you should be able to get the page id from either: - -- the URL, if the URL of your page is https://www.notion.so/Blog-S5qv1QbUzM1wxm3H3SZRQkupi7XjXTul then your `BLOG_INDEX_ID` is `S5qv1QbU-zM1w-xm3H-3SZR-Qkupi7XjXTul` -- the `loadPageChunk` request, if you open your developer console and go to the network tab then reload the page you should see a request for `loadPageChunk` and in the request payload you should see a `pageId` and that is your `BLOG_INDEX_ID` - -To get your Notion token, open Notion and look for the `token_v2` cookie. - -## Creating Blog Posts - -1. In Notion click new on the table to add a new row -2. Fill in the Page name, slug, Date, and Authors -3. At the top of the content area add the content you want to show as a preview (keep this under 2 paragraphs) -4. Add a divider block under your preview content -5. Add the rest of your content under the divider block - -## Running Locally - -To run the project locally you need to follow steps 1 and 2 of [deploying](#deploy-your-own) and then follow the below steps - -1. Install dependencies `yarn` -2. Expose `NOTION_TOKEN` and `BLOG_INDEX_ID` in your environment `export NOTION_TOKEN=''`and `export BLOG_INDEX_ID=''` or `set NOTION_TOKEN="" && set BLOG_INDEX_ID=""` for Windows -3. Run next in development mode `yarn dev` -4. Build and run in production mode `yarn build && yarn start` - -## Credits - -- Guillermo Rauch [@rauchg](https://twitter.com/rauchg) for the initial idea -- Shu Ding [@shuding\_](https://twitter.com/shuding_) for the design help -- Luis Alvarez [@luis_fades](https://twitter.com/luis_fades) for design help and bug catching +## Feito com 💻 por Kellen Xavier diff --git a/src/components/ext-link.tsx b/src/components/ext-link.tsx index 745956a0..7e5ae179 100644 --- a/src/components/ext-link.tsx +++ b/src/components/ext-link.tsx @@ -1,4 +1,6 @@ const ExtLink = (props) => ( - + + {props.children} + ) export default ExtLink diff --git a/src/components/features.tsx b/src/components/features.tsx index 2f3957cb..abfc0017 100644 --- a/src/components/features.tsx +++ b/src/components/features.tsx @@ -1,45 +1,7 @@ -import Lightning from './svgs/lightning' -import Jamstack from './svgs/jamstack' -import Wifi from './svgs/wifi' -import Lighthouse from './svgs/lighthouse' -import Plus from './svgs/plus' -import Notion from './svgs/notion' -import Edit from './svgs/edit' -import Scroll from './svgs/scroll' - const features = [ - { - text: 'Blazing fast', - icon: Lightning, - }, - { - text: 'JAMstack based', - icon: Jamstack, - }, - { - text: 'Always available', - icon: Wifi, - }, - { - text: 'Customizable', - icon: Edit, - }, - { - text: 'Incremental SSG', - icon: Plus, - }, - { - text: 'MIT Licensed', - icon: Scroll, - }, - { - text: 'Edit via Notion', - icon: Notion, - }, - { - text: 'Great scores', - icon: Lighthouse, - }, + // Add your features here + { text: 'Feature 1', icon: null }, + { text: 'Feature 2', icon: null }, ] const Features = () => ( diff --git a/src/components/footer.tsx b/src/components/footer.tsx index 54a3f5d6..752ced55 100644 --- a/src/components/footer.tsx +++ b/src/components/footer.tsx @@ -2,24 +2,14 @@ import ExtLink from './ext-link' export default function Footer() { return ( - <> -
- Deploy your own! - - deploy to Vercel button +
+ Kellen Xavier + + {' '} + + | Esse template encontra-se no GitHub - - or{' '} - - view source - - -
- + +
) } diff --git a/src/components/header.tsx b/src/components/header.tsx index 122d87b3..a5a5ff84 100644 --- a/src/components/header.tsx +++ b/src/components/header.tsx @@ -7,7 +7,7 @@ import styles from '../styles/header.module.css' const navItems: { label: string; page?: string; link?: string }[] = [ { label: 'Home', page: '/' }, { label: 'Blog', page: '/blog' }, - { label: 'Contact', page: '/contact' }, + { label: 'Contato', page: '/contact' }, { label: 'Source Code', link: 'https://github.com/ijjk/notion-blog' }, ] @@ -35,7 +35,10 @@ const Header = ({ titlePre = '' }) => {
  • {page ? ( - + {label} diff --git a/src/components/heading.tsx b/src/components/heading.tsx index 674a5383..135e5f3c 100644 --- a/src/components/heading.tsx +++ b/src/components/heading.tsx @@ -1,8 +1,8 @@ const collectText = (el, acc = []) => { if (el) { if (typeof el === 'string') acc.push(el) - if (Array.isArray(el)) el.map((item) => collectText(item, acc)) - if (typeof el === 'object') collectText(el.props && el.props.children, acc) + if (Array.isArray(el)) el.forEach((item) => collectText(item, acc)) + if (typeof el === 'object') collectText(el.props?.children, acc) } return acc.join('').trim() } @@ -11,12 +11,10 @@ const Heading = ({ children: component, id }: { children: any; id?: any }) => { const children = component.props.children || '' let text = children - if (null == id) { - id = collectText(text) - .toLowerCase() - .replace(/\s/g, '-') - .replace(/[?!:]/g, '') - } + id ??= collectText(text) + .toLowerCase() + .replace(/\s/g, '-') + .replace(/[?!:]/g, '') return ( diff --git a/src/components/spotifyPlayer.tsx b/src/components/spotifyPlayer.tsx new file mode 100644 index 00000000..ebc6369e --- /dev/null +++ b/src/components/spotifyPlayer.tsx @@ -0,0 +1,20 @@ +// components/SpotifyPlayer.tsx +const SpotifyPlayer = () => { + return ( +
    + +
    + ) +} + +export default SpotifyPlayer diff --git a/src/lib/build-rss.ts b/src/lib/build-rss.ts index 742a5ce9..92d6651f 100644 --- a/src/lib/build-rss.ts +++ b/src/lib/build-rss.ts @@ -1,3 +1,5 @@ +// src/lib/build-rss.ts + import { resolve } from 'path' import { writeFile } from './fs-helpers' import { renderToStaticMarkup } from 'react-dom/server' @@ -9,19 +11,18 @@ import { postIsPublished, getBlogLink } from './blog-helpers' import { loadEnvConfig } from '@next/env' import serverConstants from './notion/server-constants' -// must use weird syntax to bypass auto replacing of NODE_ENV +// Evita substituição de NODE_ENV na Vercel process.env['NODE' + '_ENV'] = 'production' process.env.USE_CACHE = 'true' -// constants const NOW = new Date().toJSON() -function mapToAuthor(author) { +function mapToAuthor(author: any) { return `${author.full_name}` } -function decode(string) { - return string +function decode(str: string) { + return str .replace(/&/g, '&') .replace(//g, '>') @@ -29,7 +30,7 @@ function decode(string) { .replace(/'/g, ''') } -function mapToEntry(post) { +function mapToEntry(post: any) { return ` ${post.link} @@ -40,7 +41,7 @@ function mapToEntry(post) {
    ${renderToStaticMarkup( post.preview - ? (post.preview || []).map((block, idx) => + ? (post.preview || []).map((block: any, idx: number) => textBlock(block, false, post.title + idx) ) : post.content @@ -54,13 +55,8 @@ function mapToEntry(post) { ` } -function concat(total, item) { - return total + item -} - -function createRSS(blogPosts = []) { - const postsString = blogPosts.map(mapToEntry).reduce(concat, '') - +function createRSS(blogPosts: any[] = []) { + const postsString = blogPosts.map(mapToEntry).join('') return ` My Blog @@ -73,25 +69,33 @@ function createRSS(blogPosts = []) { } async function main() { - await loadEnvConfig(process.cwd()) - serverConstants.NOTION_TOKEN = process.env.NOTION_TOKEN - serverConstants.BLOG_INDEX_ID = serverConstants.normalizeId( - process.env.BLOG_INDEX_ID - ) + loadEnvConfig(process.cwd()) + + const token = process.env.NOTION_TOKEN + const blogIndex = process.env.BLOG_INDEX_ID + + if (!token || !blogIndex) { + throw new Error(`❌ NOTION_TOKEN ou BLOG_INDEX_ID não estão definidos.`) + } + + serverConstants.NOTION_TOKEN = token + serverConstants.BLOG_INDEX_ID = serverConstants.normalizeId(blogIndex) const postsTable = await getBlogIndex(true) - const neededAuthors = new Set() + if (!postsTable || Object.keys(postsTable).length === 0) { + throw new Error( + `❌ Nenhum post carregado. Verifique o ID do blog ou a API.` + ) + } + + const neededAuthors = new Set() const blogPosts = Object.keys(postsTable) .map((slug) => { const post = postsTable[slug] - if (!postIsPublished(post)) return - - post.authors = post.Authors || [] - - for (const author of post.authors) { - neededAuthors.add(author) - } + if (!postIsPublished(post)) return null + post.authors = post.Authors ?? [] + post.authors.forEach((a: string) => neededAuthors.add(a)) return post }) .filter(Boolean) @@ -99,7 +103,7 @@ async function main() { const { users } = await getNotionUsers([...neededAuthors]) blogPosts.forEach((post) => { - post.authors = post.authors.map((id) => users[id]) + post.authors = post.authors.map((id: string) => users[id]) post.link = getBlogLink(post.Slug) post.title = post.Page post.date = post.Date @@ -107,7 +111,10 @@ async function main() { const outputPath = './public/atom' await writeFile(resolve(outputPath), createRSS(blogPosts)) - console.log(`Atom feed file generated at \`${outputPath}\``) + console.log(`✅ Atom feed gerado com sucesso: \`${outputPath}\``) } -main().catch((error) => console.error(error)) +main().catch((err) => { + console.error('❌ Erro ao gerar RSS:', err) + process.exit(1) +}) diff --git a/src/lib/notion/getBlogIndex.ts b/src/lib/notion/getBlogIndex.ts index 2c02622a..4e52563c 100644 --- a/src/lib/notion/getBlogIndex.ts +++ b/src/lib/notion/getBlogIndex.ts @@ -13,8 +13,11 @@ export default async function getBlogIndex(previews = true) { if (useCache) { try { postsTable = JSON.parse(await readFile(cacheFile, 'utf8')) - } catch (_) { - /* not fatal */ + } catch (err) { + console.warn( + 'Failed to load blog index cache, will generate new one:', + err + ) } } @@ -22,7 +25,7 @@ export default async function getBlogIndex(previews = true) { try { const data = await rpc('loadPageChunk', { pageId: BLOG_INDEX_ID, - limit: 100, // TODO: figure out Notion's way of handling pagination + limit: 100, cursor: { stack: [] }, chunkNumber: 0, verticalColumns: false, @@ -36,9 +39,10 @@ export default async function getBlogIndex(previews = true) { postsTable = await getTableData(tableBlock, true) } catch (err) { console.warn( - `Failed to load Notion posts, have you run the create-table script?` + `Failed to load Notion posts, have you run the create-table script?`, + err ) - return {} + throw new Error('Failed to load Notion posts: ' + (err as Error).message) } // only get 10 most recent post's previews @@ -49,7 +53,7 @@ export default async function getBlogIndex(previews = true) { if (previews) { await Promise.all( postsKeys - .sort((a, b) => { + .toSorted((a, b) => { const postA = postsTable[a] const postB = postsTable[b] const timeA = postA.Date diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index e27ab7f9..4c80453d 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,11 +1,13 @@ import '../styles/global.css' import 'katex/dist/katex.css' import Footer from '../components/footer' +import Features from '../components/spotifyPlayer' export default function MyApp({ Component, pageProps }) { return ( <> +
    ) diff --git a/src/pages/contact.tsx b/src/pages/contact.tsx index 8ff37219..cbad3c5a 100644 --- a/src/pages/contact.tsx +++ b/src/pages/contact.tsx @@ -5,30 +5,18 @@ import sharedStyles from '../styles/shared.module.css' import contactStyles from '../styles/contact.module.css' import GitHub from '../components/svgs/github' -import Twitter from '../components/svgs/twitter' -import Envelope from '../components/svgs/envelope' import LinkedIn from '../components/svgs/linkedin' const contacts = [ - { - Comp: Twitter, - alt: 'twitter icon', - link: 'https://twitter.com/_ijjk', - }, { Comp: GitHub, alt: 'github icon', - link: 'https://github.com/ijjk', + link: 'https://github.com/kellen-xavier', }, { Comp: LinkedIn, alt: 'linkedin icon', - link: 'https://www.linkedin.com/in/jj-kasper-0b5392166/', - }, - { - Comp: Envelope, - alt: 'envelope icon', - link: 'mailto:jj@jjsweb.site?subject=Notion Blog', + link: 'https://www.linkedin.com/in/kellen-xavier/', }, ] @@ -41,12 +29,7 @@ export default function Contact() { avatar with letters JJ
    -

    Contact

    - -
    - JJ Kasper - Next.js Engineer @{' '} - Vercel -
    +

    Contato

    {contacts.map(({ Comp, link, alt }) => { diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6426ae61..f8abb1cf 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,6 +1,5 @@ import Header from '../components/header' import ExtLink from '../components/ext-link' -import Features from '../components/features' import sharedStyles from '../styles/shared.module.css' export default function Index() { @@ -14,51 +13,15 @@ export default function Index() { width="250" alt="Vercel + Notion" /> -

    My Notion Blog

    -

    - Blazing Fast Notion Blog with Next.js'{' '} - - SSG - -

    - - +

    Meu Blog

    +

    It's not possible. No, it's necessary.

    - This is a statically generated{' '} - Next.js site with a{' '} - Notion powered blog that - is deployed with Vercel - . It leverages some upcoming features in Next.js like{' '} - - SSG support - {' '} - and{' '} - - built-in CSS support - {' '} - which allow us to achieve all of the benefits listed above including - blazing fast speeds, great local editing experience, and always - being available! -

    - -

    - Get started by creating a new page in Notion and clicking the deploy - button below. After you supply your token and the blog index id (the - page's id in Notion) we will automatically create the table for you! - See{' '} - - here in the readme + Descrição breve ... mas é backup das minhas docs. Dica? Escreva!{' '} + + Readme do projeto {' '} - for finding the new page's id. To get your token from Notion, login - and look for a cookie under www.notion.so with the name `token_v2`. - After finding your token and your blog's page id you should be good - to go!

    diff --git a/tsconfig.json b/tsconfig.json index 40f10257..8d40ced1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,14 @@ { "compilerOptions": { - "target": "es6", - "lib": ["dom", "dom.iterable", "esnext"], + "target": "ES2022", + "lib": ["DOM", "ES2023"], "allowJs": true, "skipLibCheck": true, "strict": false, "forceConsistentCasingInFileNames": true, "noEmit": true, "esModuleInterop": true, - "module": "esnext", + "module": "ESNext", "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, diff --git a/vercel.json b/vercel.json new file mode 100644 index 00000000..d272b3d7 --- /dev/null +++ b/vercel.json @@ -0,0 +1,7 @@ +{ + "build": { + "env": { + "NODE_OPTIONS": "--openssl-legacy-provider" + } + } +} diff --git a/yarn.lock b/yarn.lock index 5fa0c2c2..c42fea9a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -76,6 +76,13 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@hapi/accept@5.0.2": version "5.0.2" resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.2.tgz#ab7043b037e68b722f93f376afb05e85c0699523" @@ -96,6 +103,24 @@ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa" integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw== +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@napi-rs/triples@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@napi-rs/triples/-/triples-1.0.3.tgz#76d6d0c3f4d16013c61e45dfca5ff1e6c31ae53c" @@ -160,6 +185,26 @@ dependencies: "@napi-rs/triples" "^1.0.3" +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" @@ -175,10 +220,12 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.41.tgz#d0b939d94c1d7bd53d04824af45f1139b8c45615" integrity sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g== -"@types/node@14.14.31": - version "14.14.31" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055" - integrity sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g== +"@types/node@^22.15.26": + version "22.15.26" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.26.tgz#01ea4427edeaf205cd18ebdb93db2708d5301f05" + integrity sha512-lgISkNrqdQ5DAzjBhnDNGKDuXDNo7/1V4FhNzsKREhWLZTOELQAptuAnJMzHtUl1qyEBBy9lNBKQ9WjyiSloTw== + dependencies: + undici-types "~6.21.0" "@types/parse-json@^4.0.0": version "4.0.0" @@ -212,11 +259,23 @@ acorn-jsx@^4.1.1: dependencies: acorn "^5.0.3" +acorn-walk@^8.1.1: + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" + acorn@^5.0.3: version "5.7.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== +acorn@^8.11.0, acorn@^8.4.1: + version "8.14.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== + aggregate-error@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" @@ -277,6 +336,11 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + array-filter@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" @@ -700,6 +764,11 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -808,6 +877,11 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -1481,6 +1555,11 @@ make-dir@^3.0.2: dependencies: semver "^6.0.0" +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -2431,6 +2510,25 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +ts-node@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + ts-pnp@^1.1.6: version "1.2.0" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" @@ -2466,10 +2564,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^4.4.4: - version "4.4.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" - integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== +typescript@^5.8.3: + version "5.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== unbox-primitive@^1.0.0: version "1.0.1" @@ -2481,6 +2579,11 @@ unbox-primitive@^1.0.0: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -2549,6 +2652,11 @@ uuid@8.1.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.1.0.tgz#6f1536eb43249f473abc6bd58ff983da1ca30d8d" integrity sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + vm-browserify@1.1.2, vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -2659,6 +2767,11 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"