├── .gitignore ├── README.md ├── packages ├── core │ ├── package.json │ ├── src │ │ ├── index.tsx │ │ └── queries.ts │ └── tsconfig.json ├── example │ ├── next-env.d.ts │ ├── next.config.js │ ├── package.json │ ├── pages │ │ ├── [...path].tsx │ │ ├── _app.tsx │ │ ├── _document.tsx │ │ ├── api │ │ │ └── rss.ts │ │ └── index.tsx │ ├── sairin.config.ts │ └── tsconfig.json └── sairin-theme-minimal │ ├── package.json │ ├── src │ ├── Footer.tsx │ ├── Head.tsx │ ├── Home.tsx │ ├── OpenGraph.tsx │ ├── Post.tsx │ ├── index.ts │ └── style.css │ ├── tailwind.config.js │ └── tsconfig.json ├── pnpm-lock.yaml └── pnpm-workspace.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | # File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig 2 | 3 | # Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,macos,node 4 | # Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,macos,node 5 | 6 | ### macOS ### 7 | # General 8 | .DS_Store 9 | .AppleDouble 10 | .LSOverride 11 | 12 | # Icon must end with two \r 13 | Icon 14 | 15 | 16 | # Thumbnails 17 | ._* 18 | 19 | # Files that might appear in the root of a volume 20 | .DocumentRevisions-V100 21 | .fseventsd 22 | .Spotlight-V100 23 | .TemporaryItems 24 | .Trashes 25 | .VolumeIcon.icns 26 | .com.apple.timemachine.donotpresent 27 | 28 | # Directories potentially created on remote AFP share 29 | .AppleDB 30 | .AppleDesktop 31 | Network Trash Folder 32 | Temporary Items 33 | .apdisk 34 | 35 | ### Node ### 36 | # Logs 37 | logs 38 | *.log 39 | npm-debug.log* 40 | yarn-debug.log* 41 | yarn-error.log* 42 | lerna-debug.log* 43 | .pnpm-debug.log* 44 | 45 | # Diagnostic reports (https://nodejs.org/api/report.html) 46 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 47 | 48 | # Runtime data 49 | pids 50 | *.pid 51 | *.seed 52 | *.pid.lock 53 | 54 | # Directory for instrumented libs generated by jscoverage/JSCover 55 | lib-cov 56 | 57 | # Coverage directory used by tools like istanbul 58 | coverage 59 | *.lcov 60 | 61 | # nyc test coverage 62 | .nyc_output 63 | 64 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 65 | .grunt 66 | 67 | # Bower dependency directory (https://bower.io/) 68 | bower_components 69 | 70 | # node-waf configuration 71 | .lock-wscript 72 | 73 | # Compiled binary addons (https://nodejs.org/api/addons.html) 74 | build/Release 75 | 76 | # Dependency directories 77 | node_modules/ 78 | jspm_packages/ 79 | 80 | # Snowpack dependency directory (https://snowpack.dev/) 81 | web_modules/ 82 | 83 | # TypeScript cache 84 | *.tsbuildinfo 85 | 86 | # Optional npm cache directory 87 | .npm 88 | 89 | # Optional eslint cache 90 | .eslintcache 91 | 92 | # Optional stylelint cache 93 | .stylelintcache 94 | 95 | # Microbundle cache 96 | .rpt2_cache/ 97 | .rts2_cache_cjs/ 98 | .rts2_cache_es/ 99 | .rts2_cache_umd/ 100 | 101 | # Optional REPL history 102 | .node_repl_history 103 | 104 | # Output of 'npm pack' 105 | *.tgz 106 | 107 | # Yarn Integrity file 108 | .yarn-integrity 109 | 110 | # dotenv environment variable files 111 | .env 112 | .env.development.local 113 | .env.test.local 114 | .env.production.local 115 | .env.local 116 | 117 | # parcel-bundler cache (https://parceljs.org/) 118 | .cache 119 | .parcel-cache 120 | 121 | # Next.js build output 122 | .next 123 | out 124 | 125 | # Nuxt.js build / generate output 126 | .nuxt 127 | dist 128 | 129 | # Gatsby files 130 | .cache/ 131 | # Comment in the public line in if your project uses Gatsby and not Next.js 132 | # https://nextjs.org/blog/next-9-1#public-directory-support 133 | # public 134 | 135 | # vuepress build output 136 | .vuepress/dist 137 | 138 | # vuepress v2.x temp and cache directory 139 | .temp 140 | 141 | # Docusaurus cache and generated files 142 | .docusaurus 143 | 144 | # Serverless directories 145 | .serverless/ 146 | 147 | # FuseBox cache 148 | .fusebox/ 149 | 150 | # DynamoDB Local files 151 | .dynamodb/ 152 | 153 | # TernJS port file 154 | .tern-port 155 | 156 | # Stores VSCode versions used for testing VSCode extensions 157 | .vscode-test 158 | 159 | # yarn v2 160 | .yarn/cache 161 | .yarn/unplugged 162 | .yarn/build-state.yml 163 | .yarn/install-state.gz 164 | .pnp.* 165 | 166 | ### Node Patch ### 167 | # Serverless Webpack directories 168 | .webpack/ 169 | 170 | # Optional stylelint cache 171 | 172 | # SvelteKit build / generate output 173 | .svelte-kit 174 | 175 | ### VisualStudioCode ### 176 | .vscode/* 177 | !.vscode/settings.json 178 | !.vscode/tasks.json 179 | !.vscode/launch.json 180 | !.vscode/extensions.json 181 | !.vscode/*.code-snippets 182 | 183 | # Local History for Visual Studio Code 184 | .history/ 185 | 186 | # Built Visual Studio Code Extensions 187 | *.vsix 188 | 189 | ### VisualStudioCode Patch ### 190 | # Ignore all local history of files 191 | .history 192 | .ionide 193 | 194 | # Support for Project snippet scope 195 | 196 | # End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,macos,node 197 | 198 | # Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) 199 | 200 | packages/**/lib 201 | 202 | packages/**/style.css -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 |

3 | showcase 4 |

5 | 6 | 7 | # Sairin 8 | 9 | Generate a blog from GitHub issue. 10 | 11 | ## One Click Deploy 12 | 13 | Deploy with Vercel 14 | 15 | ## Get started 16 | 17 | 1. Clone the [starter template](https://github.com/djyde/sairin-starter) 18 | 19 | ```bash 20 | $ git clone https://github.com/djyde/sairin-starter.git your_blog 21 | 22 | $ cd your_blog && rm .git 23 | 24 | # install dependencies 25 | 26 | $ npm i 27 | ``` 28 | 29 | 2. Run the blog 30 | 31 | Before running, you need to set these environment variable by creating a `.env`: 32 | 33 | - `REPO`: The GitHub repo name. Like `user/repo` 34 | - `GITHUB_TOKEN`: The [personal access token](https://github.com/settings/tokens) 35 | 36 | ```bash 37 | # run the blog 38 | 39 | $ npm run dev 40 | ``` 41 | 42 | 3. Export the blog as a static site 43 | 44 | ```bash 45 | $ npm run export 46 | ``` 47 | 48 | The static site will be ouput to `/out` 49 | 50 | ## Documentation 51 | 52 | ### sairin.config.ts 53 | 54 | - `siteConfig` 55 | - `title` (required) Your blog title 56 | - `author` The author name of your blog. The repo owner login id will be set by default 57 | - `url` The URL of your blog. Start with `http://` or `https://`. This field is required if you want to enable RSS. 58 | - `theme` (required) 59 | - `themeConfig` A config object passed to the theme 60 | - `allowUsers` string[] An array of GitHub user login id that allowed to publish blog post. By default, only issues created by the repo owner will be published on the blog. 61 | 62 | ### Environment Variables 63 | 64 | - `GITHUB_TOKEN` (required) [Personal Access Token](https://github.com/settings/tokens) to call GitHub API 65 | - `REPO` The repository which will be fetch blog posts from (e.g `owner/repo`). By default it will use the repo that created by Vercel. 66 | 67 | ## RSS Support 68 | 69 | Sairin support RSS out of the box. You need to set `url` on the `sairin.config.ts` to enable it: 70 | 71 | ```diff 72 | // sairin.config.ts 73 | 74 | export default { 75 | siteConfig: { 76 | title: 'Sairin', 77 | + url: 'http://your-site.com' 78 | }, 79 | } as SairinConfig; 80 | ``` 81 | 82 | The RSS feed is on `http://your-site.com/rss.xml`. 83 | 84 | ## FAQ 85 | 86 | ### Need I redeploy the Vercel project after the issue updated? 87 | 88 | No. 89 | 90 | ### How long will take to update the latest content after the issue content update? 91 | 92 | Blog will be updated every 1 minute. 93 | 94 | ## Theme Development 95 | 96 | Sairin supports custom theme. But the API is not stable now. If you still want to try to develope a theme, you could see the source code of the built-in theme [sairin-theme-minimal](https://github.com/djyde/sairin/tree/master/packages/sairin-theme-minimal). 97 | 98 | # Build 99 | 100 | ## Development 101 | 102 | > Sairin use [pnpm](https://pnpm.io) to organize the packages, you need to install pnpm first. 103 | 104 | Install the dependencies: 105 | 106 | ```bash 107 | $ pnpm i 108 | ``` 109 | 110 | Create a `.env` file on `example/`: 111 | 112 | ```bash 113 | GITHUB_TOKEN= # need to provide a GitHub access token when developing, or it will reach the API request rate limit. 114 | REPO=djyde/sairin # you can change to any repo for debugging 115 | ``` 116 | 117 | Run dev command: 118 | 119 | ```bash 120 | $ pnpm run dev --filter "*" --parallel 121 | ``` 122 | 123 | This command will run a blog on localhost. 124 | -------------------------------------------------------------------------------- /packages/core/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@sairinjs/core", 3 | "version": "1.1.1", 4 | "main": "lib/index.js", 5 | "scripts": { 6 | "dev": "tsc --watch", 7 | "build": "tsc", 8 | "prepublish": "npm run build" 9 | }, 10 | "devDependencies": { 11 | "@types/lodash": "^4.14.178", 12 | "typescript": "^4.5.5" 13 | }, 14 | "dependencies": { 15 | "@types/react": "^17.0.39", 16 | "axios": "^0.26.0", 17 | "debug": "^4.3.3", 18 | "feed": "^4.2.2", 19 | "front-matter": "^4.0.2", 20 | "lodash": "^4.17.21", 21 | "marked": "^4.0.12", 22 | "prismjs": "^1.27.0" 23 | } 24 | } -------------------------------------------------------------------------------- /packages/core/src/index.tsx: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import { marked } from "marked"; 3 | import fm from "front-matter"; 4 | import { omit, pick } from 'lodash' 5 | import { Feed } from 'feed' 6 | 7 | import * as prism from 'prismjs' 8 | import { GetPostQueryProps, GetPostsQuery } from "./queries"; 9 | 10 | export type FrontMatter = { 11 | path: string 12 | } 13 | 14 | export type SairinConfig = { 15 | siteConfig: { 16 | title: string, 17 | author?: string, 18 | url?: string, 19 | }, 20 | theme: any; 21 | themeConfig: Record; 22 | allowUsers?: string[] 23 | }; 24 | 25 | export class Sairin { 26 | 27 | resolvedConfig = (() => { 28 | const ghToken = (process.env.GITHUB_TOKEN as string) || undefined; 29 | const repo = 30 | process.env.REPO || 31 | (`${process.env.VERCEL_GIT_REPO_OWNER}/${process.env.VERCEL_GIT_REPO_SLUG}` as string); 32 | 33 | const [ghUserName, repoSlug] = repo.split("/") 34 | 35 | return { 36 | ghToken, 37 | repo, 38 | ghUserName, 39 | repoSlug 40 | }; 41 | })(); 42 | 43 | private PAGE_PATH_PLACEHOLDER = 'path' 44 | 45 | private REVALIDATE = 60 46 | 47 | private allowUsers: string[] = [this.resolvedConfig.ghUserName].concat(this.config?.allowUsers || []) 48 | 49 | private authHeaders = this.resolvedConfig.ghToken 50 | ? { 51 | Authorization: `bearer ${this.resolvedConfig.ghToken}`, 52 | } 53 | : ({} as any); 54 | 55 | private async request(query: { 56 | query: string, 57 | variables: any 58 | }) { 59 | const res = await axios.post('https://api.github.com/graphql', query, { 60 | headers: this.authHeaders 61 | }) 62 | return res.data.data as T 63 | } 64 | 65 | constructor(public config: SairinConfig) { 66 | } 67 | 68 | getPostList = async () => { 69 | 70 | const result = await this.request(GetPostsQuery({ 71 | owner: this.resolvedConfig.ghUserName, 72 | repo: this.resolvedConfig.repoSlug, 73 | })) 74 | 75 | const posts = result.repository.issues.nodes.filter(post => { 76 | return this.allowUsers.indexOf(post.author.login) !== -1 77 | }).map((post) => { 78 | const { html, attributes } = this.processBody(post.body); 79 | post.comments.nodes = post.comments.nodes.map(comment => { 80 | const { html } = this.processBody(comment.body) 81 | return { 82 | ...comment, 83 | html 84 | } 85 | }) 86 | 87 | return { 88 | ...post, 89 | html, 90 | attributes, 91 | }; 92 | }); 93 | 94 | return posts; 95 | } 96 | 97 | private processBody(body: string) { 98 | const { body: rawBody, attributes } = fm(body); 99 | marked.use({ 100 | renderer: { 101 | code(code, lang, escaped) { 102 | code = this.options.highlight(code, lang); 103 | if (!lang) { 104 | return `
${code}
`; 105 | } 106 | 107 | var langClass = "language-" + lang; 108 | return `
${code}
`; 109 | } 110 | } 111 | }) 112 | const parsed = marked.parse(rawBody, { 113 | highlight: (code, lang) => { 114 | if (prism.languages[lang]) { 115 | return prism.highlight(code, prism.languages[lang], lang); 116 | } else { 117 | return code; 118 | } 119 | }, 120 | }) 121 | return { 122 | html: parsed, 123 | attributes, 124 | }; 125 | } 126 | 127 | private async getUser(username: string) { 128 | const res = await axios.get(`https://api.github.com/users/${username}`); 129 | return res.data; 130 | } 131 | 132 | getStaticPaths = async () => { 133 | const posts = await this.getPostList() 134 | return { 135 | paths: posts.map(p => { 136 | // TODO: the fallback path should be issue id 137 | return `/${p.attributes.path || ''}` 138 | }), 139 | fallback: true 140 | } 141 | } 142 | 143 | getHomePageStaticProps = async () => { 144 | const posts = (await this.getPostList()).map(post => { 145 | return omit(post, ['body', 'html']) 146 | }) 147 | 148 | return { 149 | props: { 150 | // TODO: reduce post body size 151 | posts, 152 | themeConfig: this.config.themeConfig || {} 153 | }, 154 | revalidate: this.REVALIDATE 155 | } 156 | } 157 | 158 | getPostPageStaticProps = async (ctx) => { 159 | const posts = await this.getPostList() 160 | const post = posts.find(p => p.attributes.path === ctx.params[this.PAGE_PATH_PLACEHOLDER].join('/')) || null 161 | return { 162 | props: { 163 | post, 164 | themeConfig: this.config?.themeConfig || {}, 165 | }, 166 | revalidate: this.REVALIDATE, 167 | }; 168 | } 169 | 170 | private generateFeed = async () => { 171 | 172 | const feed = new Feed({ 173 | title: this.config.siteConfig.title, 174 | copyright: this.config.siteConfig.title, 175 | id: this.config.siteConfig.title, 176 | author: { 177 | name: this.config.siteConfig.author || this.resolvedConfig.ghUserName, 178 | } 179 | }) 180 | 181 | if (!this.config.siteConfig.url) { 182 | return feed.atom1() 183 | } 184 | 185 | const posts = await this.getPostList() 186 | 187 | posts.forEach(post => { 188 | feed.addItem({ 189 | date: new Date(post.updatedAt), 190 | link: `${this.config.siteConfig.url}/${post.attributes.path}`, 191 | title: post.title, 192 | content: post.html, 193 | }) 194 | }) 195 | 196 | return feed.atom1() 197 | } 198 | 199 | rssHandler = async (req, res) => { 200 | res.setHeader("Content-Type", "application/xml"); 201 | // https://vercel.com/docs/concepts/edge-network/caching#stale-while-revalidate 202 | res.setHeader('Cache-Control', `s-maxage=1 stale-while-revalidate=${10 * 60}`) 203 | res.send(await this.generateFeed()) 204 | } 205 | 206 | DocumentHead = () => <> 207 | {this.config?.theme.Head && } 208 | 209 | } 210 | 211 | 212 | export type HomePageThemeProps = Awaited>['props'] 213 | export type PostPageThemeProps = Awaited>['props'] 214 | -------------------------------------------------------------------------------- /packages/core/src/queries.ts: -------------------------------------------------------------------------------- 1 | 2 | export type GetPostQueryVar = { 3 | owner: string, 4 | repo: string 5 | } 6 | export type GetPostQueryProps = { 7 | repository: { 8 | issues: { 9 | nodes: { 10 | id: string; 11 | title: string; 12 | url: string; 13 | createdAt: string; 14 | updatedAt: string; 15 | body: string; 16 | comments: { 17 | nodes: { 18 | url: string, 19 | createdAt: string, 20 | author: { 21 | login: string; 22 | url: string; 23 | avatarUrl: string; 24 | }; 25 | body: string; 26 | }[]; 27 | }; 28 | reactionGroups: { 29 | content: string; 30 | reactors: { 31 | totalCount: number; 32 | }; 33 | }[]; 34 | author: { 35 | login: string; 36 | url: string; 37 | avatarUrl; 38 | }; 39 | }[]; 40 | }; 41 | }; 42 | }; 43 | export const GetPostsQuery = (variables: GetPostQueryVar) => ({ 44 | query: ` 45 | query GetPosts($owner: String!, $repo: String!) { 46 | repository(owner: $owner, name: $repo) { 47 | issues(first: 100, orderBy: { 48 | field: CREATED_AT, direction: DESC 49 | }, labels: ["published"]) { 50 | nodes { 51 | id, 52 | url, 53 | title, 54 | updatedAt, 55 | createdAt, 56 | body, 57 | comments (first: 100) { 58 | nodes { 59 | createdAt, 60 | url, 61 | author { 62 | login, 63 | url, 64 | avatarUrl, 65 | }, 66 | body 67 | } 68 | }, 69 | reactionGroups { 70 | content, 71 | reactors { 72 | totalCount, 73 | } 74 | }, 75 | author { 76 | login, 77 | url, 78 | avatarUrl 79 | } 80 | } 81 | } 82 | } 83 | } 84 | `, 85 | variables, 86 | }); -------------------------------------------------------------------------------- /packages/core/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | "rootDir": "src", 6 | "outDir": "lib", 7 | 8 | /* Projects */ 9 | // "incremental": true, /* Enable incremental compilation */ 10 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 11 | // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ 12 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ 13 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 14 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 15 | 16 | /* Language and Environment */ 17 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 18 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 19 | "jsx": "react-jsx", 20 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 21 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 22 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 23 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ 24 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 25 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ 26 | // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ 27 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 28 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 29 | 30 | /* Modules */ 31 | "module": "commonjs", /* Specify what module code is generated. */ 32 | // "rootDir": "./", /* Specify the root folder within your source files. */ 33 | // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ 34 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 35 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 36 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 37 | // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ 38 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 39 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 40 | // "resolveJsonModule": true, /* Enable importing .json files */ 41 | // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ 42 | 43 | /* JavaScript Support */ 44 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ 45 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 46 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ 47 | 48 | /* Emit */ 49 | "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 50 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 51 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 52 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 53 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ 54 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 55 | // "removeComments": true, /* Disable emitting comments. */ 56 | // "noEmit": true, /* Disable emitting files from a compilation. */ 57 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 58 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ 59 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 60 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 61 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 62 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 63 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 64 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 65 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 66 | // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ 67 | // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ 68 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 69 | // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ 70 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 71 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 72 | 73 | /* Interop Constraints */ 74 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 75 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 76 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ 77 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 78 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 79 | 80 | /* Type Checking */ 81 | // "strict": true, /* Enable all strict type-checking options. */ 82 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ 83 | "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ 84 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 85 | // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ 86 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 87 | // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ 88 | // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ 89 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 90 | // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ 91 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ 92 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 93 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 94 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 95 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ 96 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 97 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ 98 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 99 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 100 | 101 | /* Completeness */ 102 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 103 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /packages/example/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /packages/example/next.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | async rewrites() { 3 | return [ 4 | { 5 | source: "/rss.xml", 6 | destination: "/api/rss", 7 | }, 8 | ]; 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /packages/example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@sairinjs/example", 3 | "version": "0.1.0", 4 | "scripts": { 5 | "dev": "next dev", 6 | "build": "next build", 7 | "export": "npm run build && next export" 8 | }, 9 | "dependencies": { 10 | "@sairinjs/core": "workspace:*", 11 | "@sairinjs/sairin-theme-minimal": "workspace:*", 12 | "next": "^12.1.0", 13 | "react": "^17.0.2", 14 | "react-dom": "^17.0.2" 15 | }, 16 | "devDependencies": { 17 | "@types/node": "^17.0.19", 18 | "@types/react": "^17.0.39", 19 | "typescript": "^4.5.5" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/example/pages/[...path].tsx: -------------------------------------------------------------------------------- 1 | import { sairin } from "./_app" 2 | 3 | export default sairin.config.theme.Post 4 | export const getStaticProps = sairin.getPostPageStaticProps 5 | export const getStaticPaths = sairin.getStaticPaths 6 | -------------------------------------------------------------------------------- /packages/example/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import { Sairin } from '@sairinjs/core' 2 | 3 | import sairinConfig from '../sairin.config' 4 | 5 | // import theme style 6 | import "@sairinjs/sairin-theme-minimal/style.css"; 7 | 8 | export const sairin = new Sairin(sairinConfig) 9 | 10 | function MyApp({ Component, pageProps }) { 11 | return 12 | } 13 | 14 | export default MyApp -------------------------------------------------------------------------------- /packages/example/pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import { Html, Head, Main, NextScript } from 'next/document' 2 | import { sairin } from './_app' 3 | 4 | export default function Document() { 5 | return ( 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | ) 16 | } -------------------------------------------------------------------------------- /packages/example/pages/api/rss.ts: -------------------------------------------------------------------------------- 1 | import { sairin } from "../_app"; 2 | 3 | export default sairin.rssHandler -------------------------------------------------------------------------------- /packages/example/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { sairin } from "./_app" 2 | 3 | export default sairin.config.theme.Home 4 | 5 | export const getStaticProps = sairin.getHomePageStaticProps -------------------------------------------------------------------------------- /packages/example/sairin.config.ts: -------------------------------------------------------------------------------- 1 | // theme 2 | import { SairinConfig } from "@sairinjs/core"; 3 | import BlogTheme from "@sairinjs/sairin-theme-minimal"; 4 | 5 | export default { 6 | siteConfig: { 7 | title: "Sairin", 8 | url: "https://blog.sairinjs.com", 9 | }, 10 | theme: BlogTheme, 11 | themeConfig: { 12 | title: `Sairin`, 13 | umami: { 14 | id: "75f22837-2714-4cec-b17f-5813a7950fcc", 15 | src: "https://a.taonan.lu/umami.js", 16 | }, 17 | links: [ 18 | { 19 | title: "GitHub", 20 | url: "https://github.com/djyde/sairin", 21 | }, 22 | { 23 | title: "Twitter", 24 | url: "https://twitter.com/randyloop", 25 | }, 26 | ], 27 | }, 28 | } as SairinConfig; 29 | -------------------------------------------------------------------------------- /packages/example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "strict": false, 12 | "forceConsistentCasingInFileNames": true, 13 | "noEmit": true, 14 | "incremental": true, 15 | "esModuleInterop": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "jsx": "preserve" 21 | }, 22 | "include": [ 23 | "next-env.d.ts", 24 | "**/*.ts", 25 | "**/*.tsx" 26 | ], 27 | "exclude": [ 28 | "node_modules" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /packages/sairin-theme-minimal/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@sairinjs/sairin-theme-minimal", 3 | "version": "1.1.1", 4 | "main": "lib/index.js", 5 | "scripts": { 6 | "dev": "concurrently npm:dev-theme npm:dev-style", 7 | "dev-theme": "tsc --watch", 8 | "dev-style": "tailwind -i ./src/style.css -o ./style.css --watch", 9 | "build-theme": "tsc", 10 | "build-style": "tailwind -i ./src/style.css -o ./style.css", 11 | "build": "concurrently npm:build-theme npm:build-style", 12 | "prepublish": "npm run build" 13 | }, 14 | "devDependencies": { 15 | "@sairinjs/core": "workspace:*", 16 | "autoprefixer": "^10.4.2", 17 | "concurrently": "^7.0.0", 18 | "next": "^12.1.0", 19 | "postcss": "^8.4.6", 20 | "tailwindcss": "^3.0.23", 21 | "typescript": "^4.5.5" 22 | }, 23 | "peerDependencies": { 24 | "next": "^12.1.0" 25 | }, 26 | "dependencies": { 27 | "dayjs": "^1.10.7" 28 | } 29 | } -------------------------------------------------------------------------------- /packages/sairin-theme-minimal/src/Footer.tsx: -------------------------------------------------------------------------------- 1 | export function Footer () { 2 | return ( 3 |
4 | Powered by Sairin 5 |
6 | ) 7 | } -------------------------------------------------------------------------------- /packages/sairin-theme-minimal/src/Head.tsx: -------------------------------------------------------------------------------- 1 | export default function Head (props: { 2 | sairinConfig: any 3 | }) { 4 | return ( 5 | <> 6 | 7 | 8 | 9 | 10 | {props.sairinConfig.themeConfig.umami && } 11 | 12 | 13 | ) 14 | } -------------------------------------------------------------------------------- /packages/sairin-theme-minimal/src/Home.tsx: -------------------------------------------------------------------------------- 1 | import Head from "next/head" 2 | import Link from "next/link" 3 | import dayjs from 'dayjs' 4 | import { Footer } from "./Footer" 5 | 6 | import { HomePageThemeProps } from '@sairinjs/core' 7 | 8 | export default function Home(props: HomePageThemeProps) { 9 | return ( 10 | <> 11 | 12 | {props.themeConfig.title} 13 | 14 |
15 |
16 | {props.themeConfig.title} 17 |
18 | 19 | 20 |
21 |
22 | {props.themeConfig.links?.map((link, index) => { 23 | return ( 24 | <> 25 | 26 | {link.title} 27 | 28 | {index !== props.themeConfig.links.length - 1 && '•'} 29 | 30 | ) 31 | })} 32 |
33 | 34 |
35 | 36 |
37 | {props.posts.map(post => { 38 | return ( 39 |
40 | 41 | 42 | {post.title} 43 | 44 | 45 | 46 |
47 | {dayjs(post.createdAt).format('DD/MM/YYYY')} 48 |
49 |
50 | ) 51 | })} 52 |
53 | 54 | 55 |
56 |
57 |
58 |
59 | 60 | 61 | ) 62 | } -------------------------------------------------------------------------------- /packages/sairin-theme-minimal/src/OpenGraph.tsx: -------------------------------------------------------------------------------- 1 | import { PostPageThemeProps } from "@sairinjs/core" 2 | 3 | export function OpenGraph(props: { 4 | post: PostPageThemeProps['post'] 5 | }) { 6 | 7 | if (!props.post) { 8 | return null 9 | } 10 | 11 | const ogImage = ` 12 | https://og-image.vercel.app/${props.post.title}.png?theme=light&md=1&fontSize=100px&images=https%3A%2F%2Fassets.vercel.com%2Fimage%2Fupload%2Ffront%2Fassets%2Fdesign%2Fvercel-triangle-black.svg 13 | ` 14 | return ( 15 | <> 16 | 17 | {/* */} 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | ) 31 | } -------------------------------------------------------------------------------- /packages/sairin-theme-minimal/src/Post.tsx: -------------------------------------------------------------------------------- 1 | import { PostPageThemeProps } from '@sairinjs/core' 2 | import dayjs from 'dayjs' 3 | import Head from 'next/head' 4 | import Link from 'next/link' 5 | import { Footer } from './Footer' 6 | import { OpenGraph } from './OpenGraph' 7 | 8 | export default function Post(props: PostPageThemeProps) { 9 | 10 | if (!props.post) { 11 | return null 12 | } 13 | 14 | return ( 15 |
16 | 17 | 18 | {props.post.title} - {props.themeConfig.title} 19 | 20 | 21 | 22 |
23 | 24 |
25 |
26 | {props.themeConfig.title} 27 |
28 |
29 | 30 |
31 |
32 | {props.post.title} 33 |
34 | 35 |
36 | 37 | 38 | {props.post.author.login} 39 | 40 | View on GitHub 41 | 42 |
43 | 44 | 69 |
70 | 71 |
72 | 73 |
74 | 75 |
76 | 77 |
78 | {/*

🗣 Comments

*/} 79 | 80 |
81 | Add comment 82 |
83 | 84 | {props.post.comments.nodes.map(comment => { 85 | return ( 86 |
87 |
88 | 89 | 90 | {comment.author.login} 91 | 92 |
93 | 94 |
95 |
96 | 97 |
98 | Reply 99 | 100 | {dayjs(comment.createdAt).format('YYYY-MM-DD')} 101 | 102 |
103 |
104 | ) 105 | })} 106 | 107 |
108 | 109 |
110 |
111 |
112 | 113 | 114 |
115 | 116 |
117 | ) 118 | } -------------------------------------------------------------------------------- /packages/sairin-theme-minimal/src/index.ts: -------------------------------------------------------------------------------- 1 | import Home from './Home' 2 | import Post from './Post' 3 | import Head from './Head' 4 | 5 | export default { 6 | Home, 7 | Post, 8 | Head 9 | } -------------------------------------------------------------------------------- /packages/sairin-theme-minimal/src/style.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | /* prism begin*/ 6 | 7 | 8 | code[class*="language-"], 9 | pre[class*="language-"] { 10 | font-family: Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace; 11 | font-size: 14px; 12 | line-height: 1.375; 13 | direction: ltr; 14 | text-align: left; 15 | white-space: pre; 16 | word-spacing: normal; 17 | word-break: normal; 18 | 19 | -moz-tab-size: 4; 20 | -o-tab-size: 4; 21 | tab-size: 4; 22 | 23 | -webkit-hyphens: none; 24 | -moz-hyphens: none; 25 | -ms-hyphens: none; 26 | hyphens: none; 27 | background: #faf8f5; 28 | color: #728fcb; 29 | } 30 | 31 | pre > code[class*="language-"] { 32 | font-size: 1em; 33 | } 34 | /* 35 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, 36 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { 37 | text-shadow: none; 38 | background: #faf8f5; 39 | } 40 | 41 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection, 42 | code[class*="language-"]::selection, code[class*="language-"] ::selection { 43 | text-shadow: none; 44 | background: #faf8f5; 45 | } */ 46 | 47 | /* Code blocks */ 48 | pre[class*="language-"] { 49 | padding: 1em; 50 | margin: .5em 0; 51 | overflow: auto; 52 | } 53 | 54 | /* Inline code */ 55 | :not(pre) > code[class*="language-"] { 56 | padding: .1em; 57 | border-radius: .3em; 58 | } 59 | 60 | .token.comment, 61 | .token.prolog, 62 | .token.doctype, 63 | .token.cdata { 64 | color: #b6ad9a; 65 | } 66 | 67 | .token.punctuation { 68 | color: #b6ad9a; 69 | } 70 | 71 | .token.namespace { 72 | opacity: .7; 73 | } 74 | 75 | .token.tag, 76 | .token.operator, 77 | .token.number { 78 | color: #063289; 79 | } 80 | 81 | .token.property, 82 | .token.function { 83 | color: #b29762; 84 | } 85 | 86 | .token.tag-id, 87 | .token.selector, 88 | .token.atrule-id { 89 | color: #2d2006; 90 | } 91 | 92 | code.language-javascript, 93 | .token.attr-name { 94 | color: #896724; 95 | } 96 | 97 | code.language-css, 98 | code.language-scss, 99 | .token.boolean, 100 | .token.string, 101 | .token.entity, 102 | .token.url, 103 | .language-css .token.string, 104 | .language-scss .token.string, 105 | .style .token.string, 106 | .token.attr-value, 107 | .token.keyword, 108 | .token.control, 109 | .token.directive, 110 | .token.unit, 111 | .token.statement, 112 | .token.regex, 113 | .token.atrule { 114 | color: #728fcb; 115 | } 116 | 117 | .token.placeholder, 118 | .token.variable { 119 | color: #93abdc; 120 | } 121 | 122 | .token.deleted { 123 | text-decoration: line-through; 124 | } 125 | 126 | .token.inserted { 127 | border-bottom: 1px dotted #2d2006; 128 | text-decoration: none; 129 | } 130 | 131 | .token.italic { 132 | font-style: italic; 133 | } 134 | 135 | .token.important, 136 | .token.bold { 137 | font-weight: bold; 138 | } 139 | 140 | .token.important { 141 | color: #896724; 142 | } 143 | 144 | .token.entity { 145 | cursor: help; 146 | } 147 | 148 | pre > code.highlight { 149 | outline: .4em solid #896724; 150 | outline-offset: .4em; 151 | } 152 | 153 | /* overrides color-values for the Line Numbers plugin 154 | * http://prismjs.com/plugins/line-numbers/ 155 | */ 156 | .line-numbers.line-numbers .line-numbers-rows { 157 | border-right-color: #ece8de; 158 | } 159 | 160 | .line-numbers .line-numbers-rows > span:before { 161 | color: #cdc4b1; 162 | } 163 | 164 | /* overrides color-values for the Line Highlight plugin 165 | * http://prismjs.com/plugins/line-highlight/ 166 | */ 167 | .line-highlight.line-highlight { 168 | background: rgba(45, 32, 6, 0.2); 169 | background: -webkit-linear-gradient(left, rgba(45, 32, 6, 0.2) 70%, rgba(45, 32, 6, 0)); 170 | background: linear-gradient(to right, rgba(45, 32, 6, 0.2) 70%, rgba(45, 32, 6, 0)); 171 | } 172 | /* prism end */ 173 | 174 | body { 175 | font-family: 'IBM Plex Serif', serif; 176 | } 177 | 178 | .post-body p, pre { 179 | @apply mb-4 leading-loose; 180 | } 181 | 182 | .post-body p > code { 183 | @apply bg-gray-100 text-gray-900 text-sm p-1 rounded; 184 | } 185 | 186 | .post-body a { 187 | @apply underline; 188 | } 189 | 190 | .post-body h1, h2, h3, h4, h5, h6 { 191 | @apply mt-12 mb-6 font-medium; 192 | } 193 | 194 | .post-body h2 { 195 | @apply text-3xl; 196 | } 197 | 198 | .post-body h3 { 199 | @apply text-2xl; 200 | } 201 | 202 | .post-body h4 { 203 | @apply text-xl; 204 | } 205 | 206 | .post-body a img { 207 | display: inline-block; 208 | } 209 | 210 | .post-body img { 211 | @apply max-w-full inline-block my-8 ; 212 | } 213 | 214 | .post-body blockquote { 215 | @apply border-l-8 border-gray-300 pl-4 my-12; 216 | } 217 | -------------------------------------------------------------------------------- /packages/sairin-theme-minimal/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: ["./src/**/*.{html,js,tsx,css}"], 3 | theme: { 4 | extend: {}, 5 | }, 6 | plugins: [], 7 | }; -------------------------------------------------------------------------------- /packages/sairin-theme-minimal/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | "rootDir": "src", 6 | "outDir": "lib", 7 | 8 | /* Projects */ 9 | // "incremental": true, /* Enable incremental compilation */ 10 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 11 | // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ 12 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ 13 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 14 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 15 | 16 | /* Language and Environment */ 17 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 18 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 19 | "jsx": "react-jsx", /* Specify what JSX code is generated. */ 20 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 21 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 22 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ 23 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 24 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ 25 | // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ 26 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 27 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 28 | 29 | /* Modules */ 30 | "module": "commonjs", /* Specify what module code is generated. */ 31 | // "rootDir": "./", /* Specify the root folder within your source files. */ 32 | // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ 33 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 34 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 35 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 36 | // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ 37 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 38 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 39 | // "resolveJsonModule": true, /* Enable importing .json files */ 40 | // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ 41 | 42 | /* JavaScript Support */ 43 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ 44 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 45 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ 46 | 47 | /* Emit */ 48 | "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 49 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 50 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 51 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 52 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ 53 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 54 | // "removeComments": true, /* Disable emitting comments. */ 55 | // "noEmit": true, /* Disable emitting files from a compilation. */ 56 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 57 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ 58 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 59 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 60 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 61 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 62 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 63 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 64 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 65 | // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ 66 | // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ 67 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 68 | // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ 69 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 70 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 71 | 72 | /* Interop Constraints */ 73 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 74 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 75 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ 76 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 77 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 78 | 79 | /* Type Checking */ 80 | // "strict": true, /* Enable all strict type-checking options. */ 81 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ 82 | "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ 83 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 84 | // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ 85 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 86 | // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ 87 | // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ 88 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 89 | // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ 90 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ 91 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 92 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 93 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 94 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ 95 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 96 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ 97 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 98 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 99 | 100 | /* Completeness */ 101 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 102 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | importers: 4 | 5 | packages/core: 6 | specifiers: 7 | '@types/lodash': ^4.14.178 8 | '@types/react': ^17.0.39 9 | axios: ^0.26.0 10 | debug: ^4.3.3 11 | feed: ^4.2.2 12 | front-matter: ^4.0.2 13 | lodash: ^4.17.21 14 | marked: ^4.0.12 15 | prismjs: ^1.27.0 16 | typescript: ^4.5.5 17 | dependencies: 18 | '@types/react': 17.0.39 19 | axios: 0.26.0_debug@4.3.3 20 | debug: 4.3.3 21 | feed: 4.2.2 22 | front-matter: 4.0.2 23 | lodash: 4.17.21 24 | marked: 4.0.12 25 | prismjs: 1.27.0 26 | devDependencies: 27 | '@types/lodash': 4.14.178 28 | typescript: 4.5.5 29 | 30 | packages/example: 31 | specifiers: 32 | '@sairinjs/core': workspace:* 33 | '@sairinjs/sairin-theme-minimal': workspace:* 34 | '@types/node': ^17.0.19 35 | '@types/react': ^17.0.39 36 | next: ^12.1.0 37 | react: ^17.0.2 38 | react-dom: ^17.0.2 39 | typescript: ^4.5.5 40 | dependencies: 41 | '@sairinjs/core': link:../core 42 | '@sairinjs/sairin-theme-minimal': link:../sairin-theme-minimal 43 | next: 12.1.0_react-dom@17.0.2+react@17.0.2 44 | react: 17.0.2 45 | react-dom: 17.0.2_react@17.0.2 46 | devDependencies: 47 | '@types/node': 17.0.19 48 | '@types/react': 17.0.39 49 | typescript: 4.5.5 50 | 51 | packages/sairin-theme-minimal: 52 | specifiers: 53 | '@sairinjs/core': workspace:* 54 | autoprefixer: ^10.4.2 55 | concurrently: ^7.0.0 56 | dayjs: ^1.10.7 57 | next: ^12.1.0 58 | postcss: ^8.4.6 59 | tailwindcss: ^3.0.23 60 | typescript: ^4.5.5 61 | dependencies: 62 | dayjs: 1.10.7 63 | devDependencies: 64 | '@sairinjs/core': link:../core 65 | autoprefixer: 10.4.2_postcss@8.4.6 66 | concurrently: 7.0.0 67 | next: 12.1.0 68 | postcss: 8.4.6 69 | tailwindcss: 3.0.23_autoprefixer@10.4.2 70 | typescript: 4.5.5 71 | 72 | packages: 73 | 74 | /@babel/code-frame/7.16.7: 75 | resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} 76 | engines: {node: '>=6.9.0'} 77 | dependencies: 78 | '@babel/highlight': 7.16.10 79 | dev: true 80 | 81 | /@babel/helper-validator-identifier/7.16.7: 82 | resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} 83 | engines: {node: '>=6.9.0'} 84 | dev: true 85 | 86 | /@babel/highlight/7.16.10: 87 | resolution: {integrity: sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==} 88 | engines: {node: '>=6.9.0'} 89 | dependencies: 90 | '@babel/helper-validator-identifier': 7.16.7 91 | chalk: 2.4.2 92 | js-tokens: 4.0.0 93 | dev: true 94 | 95 | /@next/env/12.1.0: 96 | resolution: {integrity: sha512-nrIgY6t17FQ9xxwH3jj0a6EOiQ/WDHUos35Hghtr+SWN/ntHIQ7UpuvSi0vaLzZVHQWaDupKI+liO5vANcDeTQ==} 97 | 98 | /@next/swc-android-arm64/12.1.0: 99 | resolution: {integrity: sha512-/280MLdZe0W03stA69iL+v6I+J1ascrQ6FrXBlXGCsGzrfMaGr7fskMa0T5AhQIVQD4nA/46QQWxG//DYuFBcA==} 100 | engines: {node: '>= 10'} 101 | cpu: [arm64] 102 | os: [android] 103 | requiresBuild: true 104 | optional: true 105 | 106 | /@next/swc-darwin-arm64/12.1.0: 107 | resolution: {integrity: sha512-R8vcXE2/iONJ1Unf5Ptqjk6LRW3bggH+8drNkkzH4FLEQkHtELhvcmJwkXcuipyQCsIakldAXhRbZmm3YN1vXg==} 108 | engines: {node: '>= 10'} 109 | cpu: [arm64] 110 | os: [darwin] 111 | requiresBuild: true 112 | optional: true 113 | 114 | /@next/swc-darwin-x64/12.1.0: 115 | resolution: {integrity: sha512-ieAz0/J0PhmbZBB8+EA/JGdhRHBogF8BWaeqR7hwveb6SYEIJaDNQy0I+ZN8gF8hLj63bEDxJAs/cEhdnTq+ug==} 116 | engines: {node: '>= 10'} 117 | cpu: [x64] 118 | os: [darwin] 119 | requiresBuild: true 120 | optional: true 121 | 122 | /@next/swc-linux-arm-gnueabihf/12.1.0: 123 | resolution: {integrity: sha512-njUd9hpl6o6A5d08dC0cKAgXKCzm5fFtgGe6i0eko8IAdtAPbtHxtpre3VeSxdZvuGFh+hb0REySQP9T1ttkog==} 124 | engines: {node: '>= 10'} 125 | cpu: [arm] 126 | os: [linux] 127 | requiresBuild: true 128 | optional: true 129 | 130 | /@next/swc-linux-arm64-gnu/12.1.0: 131 | resolution: {integrity: sha512-OqangJLkRxVxMhDtcb7Qn1xjzFA3s50EIxY7mljbSCLybU+sByPaWAHY4px97ieOlr2y4S0xdPKkQ3BCAwyo6Q==} 132 | engines: {node: '>= 10'} 133 | cpu: [arm64] 134 | os: [linux] 135 | requiresBuild: true 136 | optional: true 137 | 138 | /@next/swc-linux-arm64-musl/12.1.0: 139 | resolution: {integrity: sha512-hB8cLSt4GdmOpcwRe2UzI5UWn6HHO/vLkr5OTuNvCJ5xGDwpPXelVkYW/0+C3g5axbDW2Tym4S+MQCkkH9QfWA==} 140 | engines: {node: '>= 10'} 141 | cpu: [arm64] 142 | os: [linux] 143 | requiresBuild: true 144 | optional: true 145 | 146 | /@next/swc-linux-x64-gnu/12.1.0: 147 | resolution: {integrity: sha512-OKO4R/digvrVuweSw/uBM4nSdyzsBV5EwkUeeG4KVpkIZEe64ZwRpnFB65bC6hGwxIBnTv5NMSnJ+0K/WmG78A==} 148 | engines: {node: '>= 10'} 149 | cpu: [x64] 150 | os: [linux] 151 | requiresBuild: true 152 | optional: true 153 | 154 | /@next/swc-linux-x64-musl/12.1.0: 155 | resolution: {integrity: sha512-JohhgAHZvOD3rQY7tlp7NlmvtvYHBYgY0x5ZCecUT6eCCcl9lv6iV3nfu82ErkxNk1H893fqH0FUpznZ/H3pSw==} 156 | engines: {node: '>= 10'} 157 | cpu: [x64] 158 | os: [linux] 159 | requiresBuild: true 160 | optional: true 161 | 162 | /@next/swc-win32-arm64-msvc/12.1.0: 163 | resolution: {integrity: sha512-T/3gIE6QEfKIJ4dmJk75v9hhNiYZhQYAoYm4iVo1TgcsuaKLFa+zMPh4056AHiG6n9tn2UQ1CFE8EoybEsqsSw==} 164 | engines: {node: '>= 10'} 165 | cpu: [arm64] 166 | os: [win32] 167 | requiresBuild: true 168 | optional: true 169 | 170 | /@next/swc-win32-ia32-msvc/12.1.0: 171 | resolution: {integrity: sha512-iwnKgHJdqhIW19H9PRPM9j55V6RdcOo6rX+5imx832BCWzkDbyomWnlzBfr6ByUYfhohb8QuH4hSGEikpPqI0Q==} 172 | engines: {node: '>= 10'} 173 | cpu: [ia32] 174 | os: [win32] 175 | requiresBuild: true 176 | optional: true 177 | 178 | /@next/swc-win32-x64-msvc/12.1.0: 179 | resolution: {integrity: sha512-aBvcbMwuanDH4EMrL2TthNJy+4nP59Bimn8egqv6GHMVj0a44cU6Au4PjOhLNqEh9l+IpRGBqMTzec94UdC5xg==} 180 | engines: {node: '>= 10'} 181 | cpu: [x64] 182 | os: [win32] 183 | requiresBuild: true 184 | optional: true 185 | 186 | /@nodelib/fs.scandir/2.1.5: 187 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 188 | engines: {node: '>= 8'} 189 | dependencies: 190 | '@nodelib/fs.stat': 2.0.5 191 | run-parallel: 1.2.0 192 | dev: true 193 | 194 | /@nodelib/fs.stat/2.0.5: 195 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 196 | engines: {node: '>= 8'} 197 | dev: true 198 | 199 | /@nodelib/fs.walk/1.2.8: 200 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 201 | engines: {node: '>= 8'} 202 | dependencies: 203 | '@nodelib/fs.scandir': 2.1.5 204 | fastq: 1.13.0 205 | dev: true 206 | 207 | /@types/lodash/4.14.178: 208 | resolution: {integrity: sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==} 209 | dev: true 210 | 211 | /@types/node/17.0.19: 212 | resolution: {integrity: sha512-PfeQhvcMR4cPFVuYfBN4ifG7p9c+Dlh3yUZR6k+5yQK7wX3gDgVxBly4/WkBRs9x4dmcy1TVl08SY67wwtEvmA==} 213 | dev: true 214 | 215 | /@types/parse-json/4.0.0: 216 | resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} 217 | dev: true 218 | 219 | /@types/prop-types/15.7.4: 220 | resolution: {integrity: sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==} 221 | 222 | /@types/react/17.0.39: 223 | resolution: {integrity: sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug==} 224 | dependencies: 225 | '@types/prop-types': 15.7.4 226 | '@types/scheduler': 0.16.2 227 | csstype: 3.0.10 228 | 229 | /@types/scheduler/0.16.2: 230 | resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} 231 | 232 | /acorn-node/1.8.2: 233 | resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} 234 | dependencies: 235 | acorn: 7.4.1 236 | acorn-walk: 7.2.0 237 | xtend: 4.0.2 238 | dev: true 239 | 240 | /acorn-walk/7.2.0: 241 | resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} 242 | engines: {node: '>=0.4.0'} 243 | dev: true 244 | 245 | /acorn/7.4.1: 246 | resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} 247 | engines: {node: '>=0.4.0'} 248 | hasBin: true 249 | dev: true 250 | 251 | /ansi-regex/5.0.1: 252 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 253 | engines: {node: '>=8'} 254 | dev: true 255 | 256 | /ansi-styles/3.2.1: 257 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 258 | engines: {node: '>=4'} 259 | dependencies: 260 | color-convert: 1.9.3 261 | dev: true 262 | 263 | /ansi-styles/4.3.0: 264 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 265 | engines: {node: '>=8'} 266 | dependencies: 267 | color-convert: 2.0.1 268 | dev: true 269 | 270 | /anymatch/3.1.2: 271 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 272 | engines: {node: '>= 8'} 273 | dependencies: 274 | normalize-path: 3.0.0 275 | picomatch: 2.3.1 276 | dev: true 277 | 278 | /arg/5.0.1: 279 | resolution: {integrity: sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==} 280 | dev: true 281 | 282 | /argparse/1.0.10: 283 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 284 | dependencies: 285 | sprintf-js: 1.0.3 286 | dev: false 287 | 288 | /autoprefixer/10.4.2_postcss@8.4.6: 289 | resolution: {integrity: sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==} 290 | engines: {node: ^10 || ^12 || >=14} 291 | hasBin: true 292 | peerDependencies: 293 | postcss: ^8.1.0 294 | dependencies: 295 | browserslist: 4.19.3 296 | caniuse-lite: 1.0.30001312 297 | fraction.js: 4.1.3 298 | normalize-range: 0.1.2 299 | picocolors: 1.0.0 300 | postcss: 8.4.6 301 | postcss-value-parser: 4.2.0 302 | dev: true 303 | 304 | /axios/0.26.0_debug@4.3.3: 305 | resolution: {integrity: sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==} 306 | dependencies: 307 | follow-redirects: 1.14.9_debug@4.3.3 308 | transitivePeerDependencies: 309 | - debug 310 | dev: false 311 | 312 | /binary-extensions/2.2.0: 313 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 314 | engines: {node: '>=8'} 315 | dev: true 316 | 317 | /braces/3.0.2: 318 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 319 | engines: {node: '>=8'} 320 | dependencies: 321 | fill-range: 7.0.1 322 | dev: true 323 | 324 | /browserslist/4.19.3: 325 | resolution: {integrity: sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==} 326 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 327 | hasBin: true 328 | dependencies: 329 | caniuse-lite: 1.0.30001312 330 | electron-to-chromium: 1.4.71 331 | escalade: 3.1.1 332 | node-releases: 2.0.2 333 | picocolors: 1.0.0 334 | dev: true 335 | 336 | /callsites/3.1.0: 337 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 338 | engines: {node: '>=6'} 339 | dev: true 340 | 341 | /camelcase-css/2.0.1: 342 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 343 | engines: {node: '>= 6'} 344 | dev: true 345 | 346 | /caniuse-lite/1.0.30001312: 347 | resolution: {integrity: sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==} 348 | 349 | /chalk/2.4.2: 350 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 351 | engines: {node: '>=4'} 352 | dependencies: 353 | ansi-styles: 3.2.1 354 | escape-string-regexp: 1.0.5 355 | supports-color: 5.5.0 356 | dev: true 357 | 358 | /chalk/4.1.2: 359 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 360 | engines: {node: '>=10'} 361 | dependencies: 362 | ansi-styles: 4.3.0 363 | supports-color: 7.2.0 364 | dev: true 365 | 366 | /chokidar/3.5.3: 367 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 368 | engines: {node: '>= 8.10.0'} 369 | dependencies: 370 | anymatch: 3.1.2 371 | braces: 3.0.2 372 | glob-parent: 5.1.2 373 | is-binary-path: 2.1.0 374 | is-glob: 4.0.3 375 | normalize-path: 3.0.0 376 | readdirp: 3.6.0 377 | optionalDependencies: 378 | fsevents: 2.3.2 379 | dev: true 380 | 381 | /cliui/7.0.4: 382 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 383 | dependencies: 384 | string-width: 4.2.3 385 | strip-ansi: 6.0.1 386 | wrap-ansi: 7.0.0 387 | dev: true 388 | 389 | /color-convert/1.9.3: 390 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 391 | dependencies: 392 | color-name: 1.1.3 393 | dev: true 394 | 395 | /color-convert/2.0.1: 396 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 397 | engines: {node: '>=7.0.0'} 398 | dependencies: 399 | color-name: 1.1.4 400 | dev: true 401 | 402 | /color-name/1.1.3: 403 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} 404 | dev: true 405 | 406 | /color-name/1.1.4: 407 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 408 | dev: true 409 | 410 | /concurrently/7.0.0: 411 | resolution: {integrity: sha512-WKM7PUsI8wyXpF80H+zjHP32fsgsHNQfPLw/e70Z5dYkV7hF+rf8q3D+ScWJIEr57CpkO3OWBko6hwhQLPR8Pw==} 412 | engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} 413 | hasBin: true 414 | dependencies: 415 | chalk: 4.1.2 416 | date-fns: 2.28.0 417 | lodash: 4.17.21 418 | rxjs: 6.6.7 419 | spawn-command: 0.0.2-1 420 | supports-color: 8.1.1 421 | tree-kill: 1.2.2 422 | yargs: 16.2.0 423 | dev: true 424 | 425 | /cosmiconfig/7.0.1: 426 | resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} 427 | engines: {node: '>=10'} 428 | dependencies: 429 | '@types/parse-json': 4.0.0 430 | import-fresh: 3.3.0 431 | parse-json: 5.2.0 432 | path-type: 4.0.0 433 | yaml: 1.10.2 434 | dev: true 435 | 436 | /cssesc/3.0.0: 437 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 438 | engines: {node: '>=4'} 439 | hasBin: true 440 | dev: true 441 | 442 | /csstype/3.0.10: 443 | resolution: {integrity: sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==} 444 | 445 | /date-fns/2.28.0: 446 | resolution: {integrity: sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==} 447 | engines: {node: '>=0.11'} 448 | dev: true 449 | 450 | /dayjs/1.10.7: 451 | resolution: {integrity: sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==} 452 | dev: false 453 | 454 | /debug/4.3.3: 455 | resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} 456 | engines: {node: '>=6.0'} 457 | peerDependencies: 458 | supports-color: '*' 459 | peerDependenciesMeta: 460 | supports-color: 461 | optional: true 462 | dependencies: 463 | ms: 2.1.2 464 | dev: false 465 | 466 | /defined/1.0.0: 467 | resolution: {integrity: sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=} 468 | dev: true 469 | 470 | /detective/5.2.0: 471 | resolution: {integrity: sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==} 472 | engines: {node: '>=0.8.0'} 473 | hasBin: true 474 | dependencies: 475 | acorn-node: 1.8.2 476 | defined: 1.0.0 477 | minimist: 1.2.5 478 | dev: true 479 | 480 | /didyoumean/1.2.2: 481 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 482 | dev: true 483 | 484 | /dlv/1.1.3: 485 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 486 | dev: true 487 | 488 | /electron-to-chromium/1.4.71: 489 | resolution: {integrity: sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==} 490 | dev: true 491 | 492 | /emoji-regex/8.0.0: 493 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 494 | dev: true 495 | 496 | /error-ex/1.3.2: 497 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 498 | dependencies: 499 | is-arrayish: 0.2.1 500 | dev: true 501 | 502 | /escalade/3.1.1: 503 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 504 | engines: {node: '>=6'} 505 | dev: true 506 | 507 | /escape-string-regexp/1.0.5: 508 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} 509 | engines: {node: '>=0.8.0'} 510 | dev: true 511 | 512 | /esprima/4.0.1: 513 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 514 | engines: {node: '>=4'} 515 | hasBin: true 516 | dev: false 517 | 518 | /fast-glob/3.2.11: 519 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} 520 | engines: {node: '>=8.6.0'} 521 | dependencies: 522 | '@nodelib/fs.stat': 2.0.5 523 | '@nodelib/fs.walk': 1.2.8 524 | glob-parent: 5.1.2 525 | merge2: 1.4.1 526 | micromatch: 4.0.4 527 | dev: true 528 | 529 | /fastq/1.13.0: 530 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 531 | dependencies: 532 | reusify: 1.0.4 533 | dev: true 534 | 535 | /feed/4.2.2: 536 | resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} 537 | engines: {node: '>=0.4.0'} 538 | dependencies: 539 | xml-js: 1.6.11 540 | dev: false 541 | 542 | /fill-range/7.0.1: 543 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 544 | engines: {node: '>=8'} 545 | dependencies: 546 | to-regex-range: 5.0.1 547 | dev: true 548 | 549 | /follow-redirects/1.14.9_debug@4.3.3: 550 | resolution: {integrity: sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==} 551 | engines: {node: '>=4.0'} 552 | peerDependencies: 553 | debug: '*' 554 | peerDependenciesMeta: 555 | debug: 556 | optional: true 557 | dependencies: 558 | debug: 4.3.3 559 | dev: false 560 | 561 | /fraction.js/4.1.3: 562 | resolution: {integrity: sha512-pUHWWt6vHzZZiQJcM6S/0PXfS+g6FM4BF5rj9wZyreivhQPdsh5PpE25VtSNxq80wHS5RfY51Ii+8Z0Zl/pmzg==} 563 | dev: true 564 | 565 | /front-matter/4.0.2: 566 | resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} 567 | dependencies: 568 | js-yaml: 3.14.1 569 | dev: false 570 | 571 | /fsevents/2.3.2: 572 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 573 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 574 | os: [darwin] 575 | requiresBuild: true 576 | dev: true 577 | optional: true 578 | 579 | /function-bind/1.1.1: 580 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 581 | dev: true 582 | 583 | /get-caller-file/2.0.5: 584 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 585 | engines: {node: 6.* || 8.* || >= 10.*} 586 | dev: true 587 | 588 | /glob-parent/5.1.2: 589 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 590 | engines: {node: '>= 6'} 591 | dependencies: 592 | is-glob: 4.0.3 593 | dev: true 594 | 595 | /glob-parent/6.0.2: 596 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 597 | engines: {node: '>=10.13.0'} 598 | dependencies: 599 | is-glob: 4.0.3 600 | dev: true 601 | 602 | /has-flag/3.0.0: 603 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} 604 | engines: {node: '>=4'} 605 | dev: true 606 | 607 | /has-flag/4.0.0: 608 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 609 | engines: {node: '>=8'} 610 | dev: true 611 | 612 | /has/1.0.3: 613 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 614 | engines: {node: '>= 0.4.0'} 615 | dependencies: 616 | function-bind: 1.1.1 617 | dev: true 618 | 619 | /import-fresh/3.3.0: 620 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 621 | engines: {node: '>=6'} 622 | dependencies: 623 | parent-module: 1.0.1 624 | resolve-from: 4.0.0 625 | dev: true 626 | 627 | /is-arrayish/0.2.1: 628 | resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} 629 | dev: true 630 | 631 | /is-binary-path/2.1.0: 632 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 633 | engines: {node: '>=8'} 634 | dependencies: 635 | binary-extensions: 2.2.0 636 | dev: true 637 | 638 | /is-core-module/2.8.1: 639 | resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} 640 | dependencies: 641 | has: 1.0.3 642 | dev: true 643 | 644 | /is-extglob/2.1.1: 645 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 646 | engines: {node: '>=0.10.0'} 647 | dev: true 648 | 649 | /is-fullwidth-code-point/3.0.0: 650 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 651 | engines: {node: '>=8'} 652 | dev: true 653 | 654 | /is-glob/4.0.3: 655 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 656 | engines: {node: '>=0.10.0'} 657 | dependencies: 658 | is-extglob: 2.1.1 659 | dev: true 660 | 661 | /is-number/7.0.0: 662 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 663 | engines: {node: '>=0.12.0'} 664 | dev: true 665 | 666 | /js-tokens/4.0.0: 667 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 668 | 669 | /js-yaml/3.14.1: 670 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 671 | hasBin: true 672 | dependencies: 673 | argparse: 1.0.10 674 | esprima: 4.0.1 675 | dev: false 676 | 677 | /json-parse-even-better-errors/2.3.1: 678 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 679 | dev: true 680 | 681 | /lilconfig/2.0.4: 682 | resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==} 683 | engines: {node: '>=10'} 684 | dev: true 685 | 686 | /lines-and-columns/1.2.4: 687 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 688 | dev: true 689 | 690 | /lodash/4.17.21: 691 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 692 | 693 | /loose-envify/1.4.0: 694 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 695 | hasBin: true 696 | dependencies: 697 | js-tokens: 4.0.0 698 | dev: false 699 | 700 | /marked/4.0.12: 701 | resolution: {integrity: sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==} 702 | engines: {node: '>= 12'} 703 | hasBin: true 704 | dev: false 705 | 706 | /merge2/1.4.1: 707 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 708 | engines: {node: '>= 8'} 709 | dev: true 710 | 711 | /micromatch/4.0.4: 712 | resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} 713 | engines: {node: '>=8.6'} 714 | dependencies: 715 | braces: 3.0.2 716 | picomatch: 2.3.1 717 | dev: true 718 | 719 | /minimist/1.2.5: 720 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} 721 | dev: true 722 | 723 | /ms/2.1.2: 724 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 725 | dev: false 726 | 727 | /nanoid/3.3.1: 728 | resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} 729 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 730 | hasBin: true 731 | 732 | /next/12.1.0: 733 | resolution: {integrity: sha512-s885kWvnIlxsUFHq9UGyIyLiuD0G3BUC/xrH0CEnH5lHEWkwQcHOORgbDF0hbrW9vr/7am4ETfX4A7M6DjrE7Q==} 734 | engines: {node: '>=12.22.0'} 735 | hasBin: true 736 | peerDependencies: 737 | fibers: '>= 3.1.0' 738 | node-sass: ^6.0.0 || ^7.0.0 739 | react: ^17.0.2 || ^18.0.0-0 740 | react-dom: ^17.0.2 || ^18.0.0-0 741 | sass: ^1.3.0 742 | peerDependenciesMeta: 743 | fibers: 744 | optional: true 745 | node-sass: 746 | optional: true 747 | sass: 748 | optional: true 749 | dependencies: 750 | '@next/env': 12.1.0 751 | caniuse-lite: 1.0.30001312 752 | postcss: 8.4.5 753 | styled-jsx: 5.0.0 754 | use-subscription: 1.5.1 755 | optionalDependencies: 756 | '@next/swc-android-arm64': 12.1.0 757 | '@next/swc-darwin-arm64': 12.1.0 758 | '@next/swc-darwin-x64': 12.1.0 759 | '@next/swc-linux-arm-gnueabihf': 12.1.0 760 | '@next/swc-linux-arm64-gnu': 12.1.0 761 | '@next/swc-linux-arm64-musl': 12.1.0 762 | '@next/swc-linux-x64-gnu': 12.1.0 763 | '@next/swc-linux-x64-musl': 12.1.0 764 | '@next/swc-win32-arm64-msvc': 12.1.0 765 | '@next/swc-win32-ia32-msvc': 12.1.0 766 | '@next/swc-win32-x64-msvc': 12.1.0 767 | transitivePeerDependencies: 768 | - '@babel/core' 769 | - babel-plugin-macros 770 | dev: true 771 | 772 | /next/12.1.0_react-dom@17.0.2+react@17.0.2: 773 | resolution: {integrity: sha512-s885kWvnIlxsUFHq9UGyIyLiuD0G3BUC/xrH0CEnH5lHEWkwQcHOORgbDF0hbrW9vr/7am4ETfX4A7M6DjrE7Q==} 774 | engines: {node: '>=12.22.0'} 775 | hasBin: true 776 | peerDependencies: 777 | fibers: '>= 3.1.0' 778 | node-sass: ^6.0.0 || ^7.0.0 779 | react: ^17.0.2 || ^18.0.0-0 780 | react-dom: ^17.0.2 || ^18.0.0-0 781 | sass: ^1.3.0 782 | peerDependenciesMeta: 783 | fibers: 784 | optional: true 785 | node-sass: 786 | optional: true 787 | sass: 788 | optional: true 789 | dependencies: 790 | '@next/env': 12.1.0 791 | caniuse-lite: 1.0.30001312 792 | postcss: 8.4.5 793 | react: 17.0.2 794 | react-dom: 17.0.2_react@17.0.2 795 | styled-jsx: 5.0.0_react@17.0.2 796 | use-subscription: 1.5.1_react@17.0.2 797 | optionalDependencies: 798 | '@next/swc-android-arm64': 12.1.0 799 | '@next/swc-darwin-arm64': 12.1.0 800 | '@next/swc-darwin-x64': 12.1.0 801 | '@next/swc-linux-arm-gnueabihf': 12.1.0 802 | '@next/swc-linux-arm64-gnu': 12.1.0 803 | '@next/swc-linux-arm64-musl': 12.1.0 804 | '@next/swc-linux-x64-gnu': 12.1.0 805 | '@next/swc-linux-x64-musl': 12.1.0 806 | '@next/swc-win32-arm64-msvc': 12.1.0 807 | '@next/swc-win32-ia32-msvc': 12.1.0 808 | '@next/swc-win32-x64-msvc': 12.1.0 809 | transitivePeerDependencies: 810 | - '@babel/core' 811 | - babel-plugin-macros 812 | dev: false 813 | 814 | /node-releases/2.0.2: 815 | resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==} 816 | dev: true 817 | 818 | /normalize-path/3.0.0: 819 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 820 | engines: {node: '>=0.10.0'} 821 | dev: true 822 | 823 | /normalize-range/0.1.2: 824 | resolution: {integrity: sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=} 825 | engines: {node: '>=0.10.0'} 826 | dev: true 827 | 828 | /object-assign/4.1.1: 829 | resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} 830 | engines: {node: '>=0.10.0'} 831 | 832 | /object-hash/2.2.0: 833 | resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} 834 | engines: {node: '>= 6'} 835 | dev: true 836 | 837 | /parent-module/1.0.1: 838 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 839 | engines: {node: '>=6'} 840 | dependencies: 841 | callsites: 3.1.0 842 | dev: true 843 | 844 | /parse-json/5.2.0: 845 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 846 | engines: {node: '>=8'} 847 | dependencies: 848 | '@babel/code-frame': 7.16.7 849 | error-ex: 1.3.2 850 | json-parse-even-better-errors: 2.3.1 851 | lines-and-columns: 1.2.4 852 | dev: true 853 | 854 | /path-parse/1.0.7: 855 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 856 | dev: true 857 | 858 | /path-type/4.0.0: 859 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 860 | engines: {node: '>=8'} 861 | dev: true 862 | 863 | /picocolors/1.0.0: 864 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 865 | 866 | /picomatch/2.3.1: 867 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 868 | engines: {node: '>=8.6'} 869 | dev: true 870 | 871 | /postcss-js/4.0.0_postcss@8.4.6: 872 | resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} 873 | engines: {node: ^12 || ^14 || >= 16} 874 | peerDependencies: 875 | postcss: ^8.3.3 876 | dependencies: 877 | camelcase-css: 2.0.1 878 | postcss: 8.4.6 879 | dev: true 880 | 881 | /postcss-load-config/3.1.3: 882 | resolution: {integrity: sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw==} 883 | engines: {node: '>= 10'} 884 | peerDependencies: 885 | ts-node: '>=9.0.0' 886 | peerDependenciesMeta: 887 | ts-node: 888 | optional: true 889 | dependencies: 890 | lilconfig: 2.0.4 891 | yaml: 1.10.2 892 | dev: true 893 | 894 | /postcss-nested/5.0.6_postcss@8.4.6: 895 | resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} 896 | engines: {node: '>=12.0'} 897 | peerDependencies: 898 | postcss: ^8.2.14 899 | dependencies: 900 | postcss: 8.4.6 901 | postcss-selector-parser: 6.0.9 902 | dev: true 903 | 904 | /postcss-selector-parser/6.0.9: 905 | resolution: {integrity: sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==} 906 | engines: {node: '>=4'} 907 | dependencies: 908 | cssesc: 3.0.0 909 | util-deprecate: 1.0.2 910 | dev: true 911 | 912 | /postcss-value-parser/4.2.0: 913 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 914 | dev: true 915 | 916 | /postcss/8.4.5: 917 | resolution: {integrity: sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==} 918 | engines: {node: ^10 || ^12 || >=14} 919 | dependencies: 920 | nanoid: 3.3.1 921 | picocolors: 1.0.0 922 | source-map-js: 1.0.2 923 | 924 | /postcss/8.4.6: 925 | resolution: {integrity: sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==} 926 | engines: {node: ^10 || ^12 || >=14} 927 | dependencies: 928 | nanoid: 3.3.1 929 | picocolors: 1.0.0 930 | source-map-js: 1.0.2 931 | dev: true 932 | 933 | /prismjs/1.27.0: 934 | resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} 935 | engines: {node: '>=6'} 936 | dev: false 937 | 938 | /queue-microtask/1.2.3: 939 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 940 | dev: true 941 | 942 | /quick-lru/5.1.1: 943 | resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} 944 | engines: {node: '>=10'} 945 | dev: true 946 | 947 | /react-dom/17.0.2_react@17.0.2: 948 | resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} 949 | peerDependencies: 950 | react: 17.0.2 951 | dependencies: 952 | loose-envify: 1.4.0 953 | object-assign: 4.1.1 954 | react: 17.0.2 955 | scheduler: 0.20.2 956 | dev: false 957 | 958 | /react/17.0.2: 959 | resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} 960 | engines: {node: '>=0.10.0'} 961 | dependencies: 962 | loose-envify: 1.4.0 963 | object-assign: 4.1.1 964 | dev: false 965 | 966 | /readdirp/3.6.0: 967 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 968 | engines: {node: '>=8.10.0'} 969 | dependencies: 970 | picomatch: 2.3.1 971 | dev: true 972 | 973 | /require-directory/2.1.1: 974 | resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} 975 | engines: {node: '>=0.10.0'} 976 | dev: true 977 | 978 | /resolve-from/4.0.0: 979 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 980 | engines: {node: '>=4'} 981 | dev: true 982 | 983 | /resolve/1.22.0: 984 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} 985 | hasBin: true 986 | dependencies: 987 | is-core-module: 2.8.1 988 | path-parse: 1.0.7 989 | supports-preserve-symlinks-flag: 1.0.0 990 | dev: true 991 | 992 | /reusify/1.0.4: 993 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 994 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 995 | dev: true 996 | 997 | /run-parallel/1.2.0: 998 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 999 | dependencies: 1000 | queue-microtask: 1.2.3 1001 | dev: true 1002 | 1003 | /rxjs/6.6.7: 1004 | resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} 1005 | engines: {npm: '>=2.0.0'} 1006 | dependencies: 1007 | tslib: 1.14.1 1008 | dev: true 1009 | 1010 | /sax/1.2.4: 1011 | resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} 1012 | dev: false 1013 | 1014 | /scheduler/0.20.2: 1015 | resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} 1016 | dependencies: 1017 | loose-envify: 1.4.0 1018 | object-assign: 4.1.1 1019 | dev: false 1020 | 1021 | /source-map-js/1.0.2: 1022 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1023 | engines: {node: '>=0.10.0'} 1024 | 1025 | /spawn-command/0.0.2-1: 1026 | resolution: {integrity: sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=} 1027 | dev: true 1028 | 1029 | /sprintf-js/1.0.3: 1030 | resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} 1031 | dev: false 1032 | 1033 | /string-width/4.2.3: 1034 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1035 | engines: {node: '>=8'} 1036 | dependencies: 1037 | emoji-regex: 8.0.0 1038 | is-fullwidth-code-point: 3.0.0 1039 | strip-ansi: 6.0.1 1040 | dev: true 1041 | 1042 | /strip-ansi/6.0.1: 1043 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1044 | engines: {node: '>=8'} 1045 | dependencies: 1046 | ansi-regex: 5.0.1 1047 | dev: true 1048 | 1049 | /styled-jsx/5.0.0: 1050 | resolution: {integrity: sha512-qUqsWoBquEdERe10EW8vLp3jT25s/ssG1/qX5gZ4wu15OZpmSMFI2v+fWlRhLfykA5rFtlJ1ME8A8pm/peV4WA==} 1051 | engines: {node: '>= 12.0.0'} 1052 | peerDependencies: 1053 | '@babel/core': '*' 1054 | babel-plugin-macros: '*' 1055 | react: '>= 16.8.0 || 17.x.x || 18.x.x' 1056 | peerDependenciesMeta: 1057 | '@babel/core': 1058 | optional: true 1059 | babel-plugin-macros: 1060 | optional: true 1061 | dev: true 1062 | 1063 | /styled-jsx/5.0.0_react@17.0.2: 1064 | resolution: {integrity: sha512-qUqsWoBquEdERe10EW8vLp3jT25s/ssG1/qX5gZ4wu15OZpmSMFI2v+fWlRhLfykA5rFtlJ1ME8A8pm/peV4WA==} 1065 | engines: {node: '>= 12.0.0'} 1066 | peerDependencies: 1067 | '@babel/core': '*' 1068 | babel-plugin-macros: '*' 1069 | react: '>= 16.8.0 || 17.x.x || 18.x.x' 1070 | peerDependenciesMeta: 1071 | '@babel/core': 1072 | optional: true 1073 | babel-plugin-macros: 1074 | optional: true 1075 | dependencies: 1076 | react: 17.0.2 1077 | dev: false 1078 | 1079 | /supports-color/5.5.0: 1080 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1081 | engines: {node: '>=4'} 1082 | dependencies: 1083 | has-flag: 3.0.0 1084 | dev: true 1085 | 1086 | /supports-color/7.2.0: 1087 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1088 | engines: {node: '>=8'} 1089 | dependencies: 1090 | has-flag: 4.0.0 1091 | dev: true 1092 | 1093 | /supports-color/8.1.1: 1094 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 1095 | engines: {node: '>=10'} 1096 | dependencies: 1097 | has-flag: 4.0.0 1098 | dev: true 1099 | 1100 | /supports-preserve-symlinks-flag/1.0.0: 1101 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1102 | engines: {node: '>= 0.4'} 1103 | dev: true 1104 | 1105 | /tailwindcss/3.0.23_autoprefixer@10.4.2: 1106 | resolution: {integrity: sha512-+OZOV9ubyQ6oI2BXEhzw4HrqvgcARY38xv3zKcjnWtMIZstEsXdI9xftd1iB7+RbOnj2HOEzkA0OyB5BaSxPQA==} 1107 | engines: {node: '>=12.13.0'} 1108 | hasBin: true 1109 | peerDependencies: 1110 | autoprefixer: ^10.0.2 1111 | dependencies: 1112 | arg: 5.0.1 1113 | autoprefixer: 10.4.2_postcss@8.4.6 1114 | chalk: 4.1.2 1115 | chokidar: 3.5.3 1116 | color-name: 1.1.4 1117 | cosmiconfig: 7.0.1 1118 | detective: 5.2.0 1119 | didyoumean: 1.2.2 1120 | dlv: 1.1.3 1121 | fast-glob: 3.2.11 1122 | glob-parent: 6.0.2 1123 | is-glob: 4.0.3 1124 | normalize-path: 3.0.0 1125 | object-hash: 2.2.0 1126 | postcss: 8.4.6 1127 | postcss-js: 4.0.0_postcss@8.4.6 1128 | postcss-load-config: 3.1.3 1129 | postcss-nested: 5.0.6_postcss@8.4.6 1130 | postcss-selector-parser: 6.0.9 1131 | postcss-value-parser: 4.2.0 1132 | quick-lru: 5.1.1 1133 | resolve: 1.22.0 1134 | transitivePeerDependencies: 1135 | - ts-node 1136 | dev: true 1137 | 1138 | /to-regex-range/5.0.1: 1139 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1140 | engines: {node: '>=8.0'} 1141 | dependencies: 1142 | is-number: 7.0.0 1143 | dev: true 1144 | 1145 | /tree-kill/1.2.2: 1146 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1147 | hasBin: true 1148 | dev: true 1149 | 1150 | /tslib/1.14.1: 1151 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 1152 | dev: true 1153 | 1154 | /typescript/4.5.5: 1155 | resolution: {integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==} 1156 | engines: {node: '>=4.2.0'} 1157 | hasBin: true 1158 | dev: true 1159 | 1160 | /use-subscription/1.5.1: 1161 | resolution: {integrity: sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==} 1162 | peerDependencies: 1163 | react: ^16.8.0 || ^17.0.0 1164 | dependencies: 1165 | object-assign: 4.1.1 1166 | dev: true 1167 | 1168 | /use-subscription/1.5.1_react@17.0.2: 1169 | resolution: {integrity: sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==} 1170 | peerDependencies: 1171 | react: ^16.8.0 || ^17.0.0 1172 | dependencies: 1173 | object-assign: 4.1.1 1174 | react: 17.0.2 1175 | dev: false 1176 | 1177 | /util-deprecate/1.0.2: 1178 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} 1179 | dev: true 1180 | 1181 | /wrap-ansi/7.0.0: 1182 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1183 | engines: {node: '>=10'} 1184 | dependencies: 1185 | ansi-styles: 4.3.0 1186 | string-width: 4.2.3 1187 | strip-ansi: 6.0.1 1188 | dev: true 1189 | 1190 | /xml-js/1.6.11: 1191 | resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} 1192 | hasBin: true 1193 | dependencies: 1194 | sax: 1.2.4 1195 | dev: false 1196 | 1197 | /xtend/4.0.2: 1198 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 1199 | engines: {node: '>=0.4'} 1200 | dev: true 1201 | 1202 | /y18n/5.0.8: 1203 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1204 | engines: {node: '>=10'} 1205 | dev: true 1206 | 1207 | /yaml/1.10.2: 1208 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 1209 | engines: {node: '>= 6'} 1210 | dev: true 1211 | 1212 | /yargs-parser/20.2.9: 1213 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 1214 | engines: {node: '>=10'} 1215 | dev: true 1216 | 1217 | /yargs/16.2.0: 1218 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 1219 | engines: {node: '>=10'} 1220 | dependencies: 1221 | cliui: 7.0.4 1222 | escalade: 3.1.1 1223 | get-caller-file: 2.0.5 1224 | require-directory: 2.1.1 1225 | string-width: 4.2.3 1226 | y18n: 5.0.8 1227 | yargs-parser: 20.2.9 1228 | dev: true 1229 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'packages/**' --------------------------------------------------------------------------------