├── .prettierrc ├── .eslintignore ├── .npmignore ├── .gitignore ├── .github ├── dependabot.yml └── workflows │ └── ci.yml ├── src ├── utils │ ├── format-frontmatter-value.ts │ └── image-types.ts ├── types │ ├── global-options.ts │ ├── clients │ │ ├── notion.ts │ │ ├── devto.ts │ │ ├── hashnode.ts │ │ ├── medium.ts │ │ └── github.ts │ └── config.ts ├── commands │ └── post.ts ├── index.ts └── clients │ ├── devto-client.ts │ ├── medium-client.ts │ ├── notion-client.ts │ ├── hashnode-client.ts │ └── github-client.ts ├── .eslintrc.cjs ├── .env.template ├── config ├── custom-environment-variables.json └── default.json ├── package.json ├── tsconfig.json ├── README.md └── yarn.lock /.prettierrc: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | .eslintrc.cjs 2 | node_modules -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | config/* 2 | src 3 | node_modules 4 | .env.* -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .env 4 | config/local.json 5 | config/local**.json -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "npm" 4 | directory: "/" # Location of package manifests 5 | schedule: 6 | interval: "weekly" 7 | -------------------------------------------------------------------------------- /src/utils/format-frontmatter-value.ts: -------------------------------------------------------------------------------- 1 | export default function formatFrontmatterValue (value: any) { 2 | switch (typeof value) { 3 | case 'string': 4 | return `'${value.replaceAll(/'/g, '')}'` 5 | default: 6 | return value 7 | } 8 | } -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'], 3 | parser: '@typescript-eslint/parser', 4 | plugins: ['@typescript-eslint'], 5 | root: true, 6 | rules: { 7 | semi: 'off' 8 | } 9 | }; -------------------------------------------------------------------------------- /src/utils/image-types.ts: -------------------------------------------------------------------------------- 1 | const types: Record = { 2 | 'image/gif': 'gif', 3 | 'image/jpeg': 'jpg', 4 | 'image/png': 'png', 5 | 'image/svg+xml': 'svg', 6 | 'image/svg': 'svg', 7 | 'image/webp': 'webp' 8 | } 9 | 10 | export default types -------------------------------------------------------------------------------- /src/types/global-options.ts: -------------------------------------------------------------------------------- 1 | import Config from "./config" 2 | 3 | type GlobalOptions = { 4 | config: Config 5 | } 6 | 7 | export enum Platforms { 8 | DEVTO = 'devto', 9 | HASHNODE = 'hashnode', 10 | MEDIUM = 'medium', 11 | GITHUB = 'github' 12 | } 13 | 14 | export default GlobalOptions -------------------------------------------------------------------------------- /.env.template: -------------------------------------------------------------------------------- 1 | NOTION_TOKEN= 2 | 3 | ## GH tokens 4 | GH_TOKEN= 5 | GH_OWNER= 6 | GH_REPO= 7 | GH_BRANCH= 8 | 9 | ## DEVTO tokens 10 | DEVTO_API_KEY= 11 | DEVTO_ORG_ID= 12 | 13 | # Hashnode tokens 14 | HASHNODE_TOKEN= 15 | HASHNODE_PUB_ID= 16 | 17 | # Medium tokens 18 | MEDIUM_TOKEN= 19 | MEDIUM_PUB_NAME= -------------------------------------------------------------------------------- /src/types/clients/notion.ts: -------------------------------------------------------------------------------- 1 | export const NotionProperties = { 2 | TITLE: 'title', 3 | DATE: 'date' 4 | } as const 5 | 6 | export type NotionPropertiesType = typeof NotionProperties[keyof typeof NotionProperties] 7 | 8 | export type NotionOptions = { 9 | skip_block_types?: string[] 10 | } 11 | 12 | export type NotionConnectionSettings = { 13 | token: string 14 | } -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | 9 | env: 10 | NODE_VERSION: 16.x 11 | 12 | jobs: 13 | typecheck: 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - uses: actions/setup-node@v3 18 | with: 19 | node-version: ${{ env.NODE_VERSION }} 20 | - uses: actions/checkout@v3 21 | - run: | 22 | npm install 23 | npm run typecheck 24 | -------------------------------------------------------------------------------- /src/types/clients/devto.ts: -------------------------------------------------------------------------------- 1 | import { NotionProperties } from "./notion" 2 | 3 | export const DevToProperties = { 4 | ...NotionProperties, 5 | TAGS: 'tags', 6 | SERIES: 'series', 7 | CANONICAL_URL: 'canonical_url', 8 | DESCRIPTION: 'description' 9 | } as const 10 | 11 | export type DevToPropertiesType = typeof DevToProperties[keyof typeof DevToProperties] 12 | 13 | export type DevToConnectionSettings = { 14 | api_key: string 15 | organization_id?: string 16 | } 17 | 18 | export type DevToOptions = { 19 | should_publish: boolean 20 | properties?: Record 21 | } -------------------------------------------------------------------------------- /src/types/clients/hashnode.ts: -------------------------------------------------------------------------------- 1 | import { NotionProperties } from "./notion" 2 | 3 | export const HashnodeProperties = { 4 | ...NotionProperties, 5 | ORIGINAL_ARTICLE_URL: 'original_article_url', 6 | SUBTITLE: 'subtitle', 7 | TAGS: 'tags' 8 | } as const 9 | 10 | export type HashnodePropertiesType = typeof HashnodeProperties[keyof typeof HashnodeProperties] 11 | 12 | export type HashnodeConnectionSettings = { 13 | token: string 14 | publication_id?: string 15 | } 16 | 17 | export type HashnodeOptions = { 18 | should_hide: boolean 19 | properties?: Record 20 | } -------------------------------------------------------------------------------- /src/types/clients/medium.ts: -------------------------------------------------------------------------------- 1 | import { NotionProperties } from "./notion" 2 | 3 | export const MediumProperties = { 4 | ...NotionProperties, 5 | TAGS: 'tags', 6 | CANONICAL_URL: 'canonical_url', 7 | SUBTITLE: 'subtitle' 8 | } as const 9 | 10 | export type MediumPropertiesType = typeof MediumProperties[keyof typeof MediumProperties] 11 | 12 | export type MediumConnectionSettings = { 13 | token: string 14 | publication_name?: string 15 | } 16 | 17 | export type MediumOptions = { 18 | should_publish: boolean 19 | should_notify_followers: boolean 20 | properties?: Record 21 | } -------------------------------------------------------------------------------- /config/custom-environment-variables.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "notion": { 4 | "connection_settings": { 5 | "token": "NOTION_TOKEN" 6 | } 7 | }, 8 | "github": { 9 | "connection_settings": { 10 | "token": "GH_TOKEN", 11 | "owner": "GH_OWNER", 12 | "repo": "GH_REPO", 13 | "branch": "GH_BRANCH" 14 | } 15 | }, 16 | "devto": { 17 | "connection_settings": { 18 | "api_key": "DEVTO_API_KEY", 19 | "organization_id": "DEVTO_ORG_ID" 20 | } 21 | }, 22 | "hashnode": { 23 | "connection_settings": { 24 | "token": "HASHNODE_TOKEN", 25 | "publication_id": "HASHNODE_PUB_ID" 26 | } 27 | }, 28 | "medium": { 29 | "connection_settings": { 30 | "token": "MEDIUM_TOKEN", 31 | "publication_name": "MEDIUM_PUB_NAME" 32 | } 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/types/clients/github.ts: -------------------------------------------------------------------------------- 1 | import { NotionProperties } from "./notion" 2 | 3 | export const GitHubProperties = { 4 | ...NotionProperties, 5 | SLUG: 'slug' 6 | } as const 7 | 8 | export type GitHubPropertiesType = typeof GitHubProperties[keyof typeof GitHubProperties] 9 | 10 | export enum DefaultFrontmatter { 11 | TITLE = 'title', 12 | DATE = 'date' 13 | } 14 | 15 | export type File = { 16 | path: string 17 | content: string 18 | } 19 | 20 | export type ImageDataUrl = { 21 | url: string 22 | ext: string 23 | } 24 | 25 | export type GitHubConnectionSettings = { 26 | token: string 27 | owner: string 28 | repo: string 29 | branch?: string 30 | } 31 | 32 | export type GitHubOptions = { 33 | image_path: '' 34 | image_prefix: '/' 35 | article_path: '' 36 | properties?: Record 37 | add_default_frontmatter?: boolean 38 | frontmatter_labels?: Record 39 | extra_frontmatter?: Record 40 | extra_frontmatter_mapper?: Record 41 | } -------------------------------------------------------------------------------- /src/types/config.ts: -------------------------------------------------------------------------------- 1 | import { MediumConnectionSettings, MediumOptions } from './clients/medium'; 2 | import { HashnodeConnectionSettings, HashnodeOptions } from './clients/hashnode'; 3 | import { NotionConnectionSettings, NotionOptions } from './clients/notion'; 4 | import { GitHubConnectionSettings, GitHubOptions } from "./clients/github" 5 | import { DevToConnectionSettings, DevToOptions } from './clients/devto'; 6 | 7 | export type ConfigGitHub = { 8 | options: GitHubOptions, 9 | connection_settings: GitHubConnectionSettings 10 | } 11 | 12 | export type ConfigNotion = { 13 | options: NotionOptions, 14 | connection_settings: NotionConnectionSettings 15 | } 16 | 17 | export type ConfigDevTo = { 18 | connection_settings: DevToConnectionSettings, 19 | options: DevToOptions 20 | } 21 | 22 | export type ConfigHashnode = { 23 | connection_settings: HashnodeConnectionSettings, 24 | options: HashnodeOptions 25 | } 26 | 27 | export type ConfigMedium = { 28 | connection_settings: MediumConnectionSettings, 29 | options: MediumOptions 30 | } 31 | 32 | type Config = { 33 | github: ConfigGitHub, 34 | notion: ConfigNotion, 35 | devto: ConfigDevTo, 36 | hashnode: ConfigHashnode, 37 | medium: ConfigMedium 38 | } 39 | 40 | export default Config -------------------------------------------------------------------------------- /src/commands/post.ts: -------------------------------------------------------------------------------- 1 | import DevToClient from "../clients/devto-client"; 2 | import GitHubClient from "../clients/github-client" 3 | import HashnodeClient from "../clients/hashnode-client"; 4 | import MediumClient from "../clients/medium-client"; 5 | import GlobalOptions, { Platforms } from "../types/global-options"; 6 | 7 | type PostOptions = GlobalOptions & { 8 | platforms: Platforms[], 9 | dryRun: boolean 10 | } 11 | 12 | export default async function post (url: string, { config, platforms, dryRun }: PostOptions) { 13 | const promises = [] 14 | 15 | if (platforms.includes(Platforms.GITHUB)) { 16 | const github = new GitHubClient(config.github, config.notion) 17 | promises.push(github.post(url, dryRun)) 18 | } 19 | 20 | if (platforms.includes(Platforms.DEVTO)) { 21 | const devto = new DevToClient(config.devto, config.notion) 22 | promises.push(devto.post(url, dryRun)) 23 | } 24 | 25 | if (platforms.includes(Platforms.HASHNODE)) { 26 | const hashnode = new HashnodeClient(config.hashnode, config.notion) 27 | promises.push(hashnode.post(url, dryRun)) 28 | } 29 | 30 | if (platforms.includes(Platforms.MEDIUM)) { 31 | const medium = new MediumClient(config.medium, config.notion) 32 | promises.push(medium.post(url, dryRun)) 33 | } 34 | 35 | await Promise.all(promises) 36 | .then(() => console.log('Finished posting the article')) 37 | } -------------------------------------------------------------------------------- /config/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "notion": { 4 | "options": { 5 | "skip_block_types": [ 6 | 7 | ] 8 | } 9 | }, 10 | "github": { 11 | "options": { 12 | "image_path": "public", 13 | "image_prefix": "/", 14 | "article_path": "content", 15 | "properties": { 16 | "title": "Title for Blog", 17 | "date": "Publishing Date", 18 | "slug": "Slug" 19 | }, 20 | "add_default_frontmatter": true, 21 | "frontmatter_labels": { 22 | "title": "title", 23 | "date": "date" 24 | }, 25 | "extra_frontmatter": { 26 | "excerpt": "this is description" 27 | }, 28 | "extra_frontmatter_mapper": { 29 | "excerpt": "Description" 30 | } 31 | } 32 | }, 33 | "devto": { 34 | "options": { 35 | "should_publish": false, 36 | "properties": { 37 | "title": "Title for Dev.to" 38 | } 39 | } 40 | }, 41 | "hashnode": { 42 | "options": { 43 | "should_publish": true, 44 | "should_notify_followers": false, 45 | "properties": { 46 | "title": "Title for Hashnode" 47 | } 48 | } 49 | }, 50 | "medium": { 51 | "options": { 52 | "should_publish": false, 53 | "should_notify_followers": false, 54 | "properties": { 55 | "title": "Title for Medium" 56 | } 57 | } 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cross-post-notion", 3 | "version": "0.1.8", 4 | "description": "", 5 | "main": "dist/index.js", 6 | "bin": "dist/index.js", 7 | "private": false, 8 | "scripts": { 9 | "start": "ts-node src/index.ts", 10 | "typecheck": "tsc --noEmit", 11 | "build": "rm -rf dist && tsc && mkdir dist/config && cp config/default.json dist/config/default.json && cp config/custom-environment-variables.json dist/config/custom-environment-variables.json", 12 | "format": "prettier --write src/**/*.ts", 13 | "lint": "eslint src", 14 | "production:start": "NODE_APP_INSTANCE=2 npm run start", 15 | "prepublish": "npm run build" 16 | }, 17 | "keywords": [], 18 | "author": "", 19 | "dependencies": { 20 | "@notionhq/client": "^2.2.2", 21 | "axios": "^1.3.2", 22 | "commander": "^11.0.0", 23 | "config": "^3.3.9", 24 | "dotenv": "^16.0.1", 25 | "graphql": "^16.6.0", 26 | "graphql-request": "^5.1.0", 27 | "gray-matter": "^4.0.3", 28 | "inquirer": "^9.1.4", 29 | "nanoid": "3.3.4", 30 | "notion-to-md": "^2.5.5", 31 | "octokit": "^2.0.11", 32 | "slugify": "^1.6.5" 33 | }, 34 | "devDependencies": { 35 | "@types/config": "^3.3.0", 36 | "@types/dotenv": "^8.2.0", 37 | "@types/node": "^20.1.0", 38 | "@typescript-eslint/eslint-plugin": "^5.49.0", 39 | "@typescript-eslint/parser": "^5.51.0", 40 | "eslint": "^8.33.0", 41 | "prettier": "^2.8.3", 42 | "ts-node": "^10.8.2", 43 | "typescript": "^4.9.5" 44 | }, 45 | "license": "MIT" 46 | } 47 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import dotenv from "dotenv" 3 | import fs from "fs" 4 | import path from "path"; 5 | 6 | //config must be loaded before importing 7 | //any file that imports `config` 8 | dotenv.config() 9 | 10 | process.env.SUPPRESS_NO_CONFIG_WARNING = 'y'; 11 | process.env["NODE_CONFIG_DIR"] = __dirname + "/config/" + path.delimiter + './config/' 12 | import config from 'config'; 13 | import post from "./commands/post" 14 | import { program } from 'commander' 15 | import { Platforms } from "./types/global-options"; 16 | 17 | program.usage('[command] [options]') 18 | .version('0.1.4', '-v, --version') 19 | .option('-c, --config ', 'Path to a JSON config file. By default, config files are loaded from config/default.json') 20 | .hook('preAction', (thisCommand, actionCommand) => { 21 | const configOption = thisCommand.opts().config 22 | let fullConfig 23 | if (configOption) { 24 | fullConfig = JSON.parse(fs.readFileSync(configOption).toString()).config 25 | } else { 26 | fullConfig = config.get('config') 27 | } 28 | 29 | actionCommand.setOptionValue('config', fullConfig) 30 | }); 31 | 32 | program 33 | .command('post ') 34 | .description('Cross post article') 35 | .action(post) 36 | .option( 37 | '-p, --platforms [platforms...]', 38 | 'Platforms to publish the article on.', Object.values(Platforms)) 39 | .option( 40 | '-d, --dryRun', 41 | 'If this option is passed, the entire process runs without actually posting the article. Useful for testing.', 42 | false 43 | ) 44 | 45 | program.parse() -------------------------------------------------------------------------------- /src/clients/devto-client.ts: -------------------------------------------------------------------------------- 1 | import { ConfigDevTo, ConfigNotion } from './../types/config'; 2 | import { DevToConnectionSettings, DevToOptions, DevToProperties } from "../types/clients/devto"; 3 | import Notion from "./notion-client"; 4 | import axios, { AxiosInstance } from 'axios'; 5 | 6 | type ArticleData = { 7 | body_markdown: string, 8 | organization_id?: string, 9 | published: boolean, 10 | title: string, 11 | series?: string, 12 | description?: string, 13 | canonical_url?: string, 14 | tags?: string[], 15 | date?: string 16 | } 17 | 18 | class DevToClient { 19 | connection_settings: DevToConnectionSettings 20 | options: DevToOptions 21 | notion: Notion 22 | client: AxiosInstance 23 | 24 | constructor ( 25 | config: ConfigDevTo, 26 | notion_config: ConfigNotion 27 | ) { 28 | this.connection_settings = config.connection_settings 29 | this.options = config.options || {} 30 | this.notion = new Notion(notion_config) 31 | 32 | this.client = axios.create({ 33 | baseURL: 'https://dev.to/api/', 34 | headers: { 35 | 'api-key': this.connection_settings.api_key 36 | } 37 | }) 38 | } 39 | 40 | async post (url: string, dryRun?: boolean) { 41 | //get page id 42 | const pageId = this.notion.getPageIdFromURL(url) 43 | //get blocks 44 | const blocks = await this.notion.getBlocks(url) 45 | 46 | //transform blocks to markdown 47 | const markdown = await this.notion.getMarkdown(blocks) 48 | const properties = await this.notion.getArticleProperties(pageId) 49 | 50 | //format data 51 | const article: ArticleData = { 52 | body_markdown: markdown, 53 | organization_id: this.connection_settings.organization_id, 54 | published: this.options.should_publish, 55 | title: '' 56 | } 57 | Object.entries(DevToProperties).forEach(([, value]) => { 58 | const propertyName = this.options.properties && this.options.properties[value] ? 59 | this.options.properties[value] : 60 | value 61 | const attributeValue = this.notion.getAttributeValue(properties[propertyName]) 62 | if (!attributeValue.length) { 63 | return 64 | } 65 | article[value] = this.formatValue(value, attributeValue) 66 | }) 67 | 68 | if (dryRun) { 69 | console.log('No error occurred while preparing article for dev.to.') 70 | return 71 | } 72 | 73 | //push to dev.to 74 | await this.client.post('articles', { 75 | article 76 | }) 77 | 78 | console.log('Article pushed to Dev.to') 79 | } 80 | 81 | formatValue (name: string, value: string): any { 82 | switch (name) { 83 | case 'tags': 84 | return value.split(',') 85 | default: 86 | return value 87 | } 88 | } 89 | } 90 | 91 | export default DevToClient -------------------------------------------------------------------------------- /src/clients/medium-client.ts: -------------------------------------------------------------------------------- 1 | import axios, { AxiosInstance } from "axios" 2 | import { MediumConnectionSettings, MediumOptions, MediumProperties } from "../types/clients/medium" 3 | import { ConfigMedium, ConfigNotion } from "../types/config" 4 | import Notion from "./notion-client" 5 | 6 | class MediumClient { 7 | connection_settings: MediumConnectionSettings 8 | options: MediumOptions 9 | notion: Notion 10 | client: AxiosInstance 11 | 12 | constructor ( 13 | config: ConfigMedium, 14 | notion_config: ConfigNotion 15 | ) { 16 | this.connection_settings = config.connection_settings 17 | this.options = config.options || {} 18 | this.notion = new Notion(notion_config) 19 | 20 | this.client = axios.create({ 21 | baseURL: 'https://api.medium.com/v1/', 22 | headers: { 23 | Authorization: `Bearer ${this.connection_settings.token}` 24 | } 25 | }) 26 | } 27 | 28 | async post (url: string, dryRun?: boolean) { 29 | //get page id 30 | const pageId = this.notion.getPageIdFromURL(url) 31 | //get blocks 32 | const blocks = await this.notion.getBlocks(url) 33 | 34 | //transform blocks to markdown 35 | let markdown = await this.notion.getMarkdown(blocks) 36 | const properties = await this.notion.getArticleProperties(pageId) 37 | 38 | //get user ID 39 | const { data: { data: { id } } } = await this.client.get('me') 40 | 41 | let requestPath = `users/${id}/posts` 42 | if (this.connection_settings.publication_name) { 43 | //get publication id 44 | const { data: { data } } = await this.client.get(`users/${id}/publications`) 45 | 46 | const publication = data.find((pub: Record) => pub.name === this.connection_settings.publication_name) 47 | 48 | if (publication) { 49 | requestPath = `publications/${publication.id}/posts` 50 | } 51 | } 52 | 53 | //get post title and add it to the top of the markdown content 54 | const title = this.notion.getAttributeValue(properties[this.options.properties?.title || MediumProperties.TITLE]) 55 | const subtitle = this.notion.getAttributeValue(properties[this.options.properties?.subtitle || MediumProperties.SUBTITLE]) 56 | markdown = `# ${title}\r\n\r\n${subtitle ? `${subtitle}\r\n\r\n` : ''}${markdown}` 57 | 58 | if (dryRun) { 59 | console.log('No error occurred while preparing article for Medium.') 60 | return 61 | } 62 | 63 | await this.client.post(requestPath, { 64 | title, 65 | contentFormat: 'markdown', 66 | content: markdown, 67 | tags: this.notion.getAttributeValue(properties[this.options.properties?.tags || MediumProperties.TAGS]).split(",").map((tag) => tag.trim()), 68 | canonicalUrl: this.notion.getAttributeValue(properties[this.options.properties?.canonical_url || MediumProperties.CANONICAL_URL]), 69 | publishStatus: this.options.should_publish ? 'public' : 'draft', 70 | notifyFollowers: this.options.should_notify_followers 71 | }) 72 | 73 | console.log('Article pushed to Medium') 74 | } 75 | } 76 | 77 | export default MediumClient -------------------------------------------------------------------------------- /src/clients/notion-client.ts: -------------------------------------------------------------------------------- 1 | import { NotionOptions } from './../types/clients/notion'; 2 | import { Client } from "@notionhq/client"; 3 | import { MdBlock } from "notion-to-md/build/types"; 4 | import { NotionToMarkdown } from "notion-to-md"; 5 | import slugify from "slugify"; 6 | import { ConfigNotion } from "../types/config"; 7 | 8 | class Notion { 9 | notion: Client; 10 | n2m: NotionToMarkdown; 11 | options: NotionOptions; 12 | 13 | constructor (config: ConfigNotion) { 14 | this.notion = new Client({ 15 | auth: config.connection_settings.token, 16 | }); 17 | this.n2m = new NotionToMarkdown({ 18 | notionClient: this.notion 19 | }) 20 | this.options = config.options 21 | } 22 | 23 | async getBlocks (url: string): Promise { 24 | const pageId = this.getPageIdFromURL(url) 25 | const blocks = await this.n2m.pageToMarkdown(pageId); 26 | 27 | return blocks.filter((block) => !this.shouldSkipBlock(block.type)) 28 | } 29 | 30 | async getMarkdown (source: string | MdBlock[]): Promise { 31 | let mdblocks: MdBlock[] = [] 32 | if (typeof source === 'string') { 33 | const pageId = this.getPageIdFromURL(source) 34 | mdblocks = await this.n2m.pageToMarkdown(pageId); 35 | } else { 36 | mdblocks = source 37 | } 38 | 39 | return this.n2m.toMarkdownString(mdblocks); 40 | } 41 | 42 | async getArticleProperties(page_id: string): Promise> { 43 | const response = await this.notion.pages.retrieve({ 44 | page_id 45 | }) 46 | 47 | //due to an issue in Notion's types we disable ts for this line 48 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 49 | // @ts-ignore 50 | return response.properties 51 | } 52 | 53 | getArticleSlug(title: string): string { 54 | return `${encodeURI(slugify(title.toLowerCase()))}` 55 | return `${slugify(title.toLowerCase())}` 56 | } 57 | 58 | getAttributeValue (attribute: Record): string { 59 | switch (attribute?.type) { 60 | case 'title': 61 | return attribute.title?.plain_text 62 | case 'rich_text': 63 | return attribute.rich_text[0]?.plain_text || "" 64 | case 'date': 65 | return attribute.date?.start || "" 66 | default: 67 | return "" 68 | } 69 | } 70 | 71 | // Read more details in Notion's documentation: 72 | // https://developers.notion.com/docs/working-with-page-content#creating-a-page-with-content 73 | getPageIdFromURL(url: string): string { 74 | const urlArr = url.split('-'), 75 | unformattedId = urlArr[urlArr.length - 1] 76 | 77 | if (unformattedId.length !== 32) { 78 | throw Error('Invalid ID. Length of ID should be 32 characters') 79 | } 80 | 81 | return `${unformattedId.substring(0, 8)}-${unformattedId.substring(8, 12)}-` + 82 | `${unformattedId.substring(12, 16)}-${unformattedId.substring(16, 20)}-` + 83 | `${unformattedId.substring(20)}` 84 | } 85 | 86 | shouldSkipBlock (type?: string): boolean { 87 | return (type && this.options.skip_block_types?.includes(type)) || false 88 | } 89 | } 90 | 91 | export default Notion -------------------------------------------------------------------------------- /src/clients/hashnode-client.ts: -------------------------------------------------------------------------------- 1 | import { GraphQLClient, gql } from 'graphql-request' 2 | import { HashnodeConnectionSettings, HashnodeOptions, HashnodeProperties } from "../types/clients/hashnode"; 3 | import { ConfigHashnode, ConfigNotion } from "../types/config"; 4 | import Notion from './notion-client'; 5 | 6 | type HashnodeTag = { 7 | _id: string, 8 | slug: string, 9 | name: string 10 | } 11 | 12 | class HashnodeClient { 13 | connection_settings: HashnodeConnectionSettings 14 | options: HashnodeOptions 15 | notion: Notion 16 | client: GraphQLClient 17 | 18 | constructor ( 19 | config: ConfigHashnode, 20 | notion_config: ConfigNotion 21 | ) { 22 | this.connection_settings = config.connection_settings 23 | this.options = config.options || {} 24 | this.notion = new Notion(notion_config) 25 | 26 | this.client = new GraphQLClient('https://api.hashnode.com', { 27 | headers: { 28 | authorization: this.connection_settings.token 29 | } 30 | }) 31 | } 32 | 33 | async post (url: string, dryRun?: boolean) { 34 | //get page id 35 | const pageId = this.notion.getPageIdFromURL(url) 36 | //get blocks 37 | const blocks = await this.notion.getBlocks(url) 38 | 39 | //transform blocks to markdown 40 | const markdown = await this.notion.getMarkdown(blocks) 41 | const properties = await this.notion.getArticleProperties(pageId) 42 | 43 | const canonical_url = this.notion.getAttributeValue(properties[this.options.properties?.original_article_url || HashnodeProperties.ORIGINAL_ARTICLE_URL]) 44 | 45 | //get tags 46 | let tags: HashnodeTag[] = [] 47 | const notionTags = this.notion.getAttributeValue(properties[this.options.properties?.tags || HashnodeProperties.TAGS]) 48 | if (notionTags) { 49 | tags = await this.getTagsFromHashnode(notionTags.split(",").map((tag) => tag.trim())) 50 | } 51 | 52 | const createStoryInput = { 53 | title: this.notion.getAttributeValue(properties[this.options.properties?.title || HashnodeProperties.TITLE]), 54 | contentMarkdown: markdown, 55 | subtitle: this.notion.getAttributeValue(properties[this.options.properties?.subtitle || HashnodeProperties.SUBTITLE]), 56 | ...(canonical_url && { 57 | isRepublished: { 58 | originalArticleUrl: canonical_url 59 | } 60 | }), 61 | tags, 62 | isPartOfPublication: { 63 | publicationId: this.connection_settings.publication_id 64 | } 65 | } 66 | 67 | 68 | //post to personal 69 | const mutation = gql` 70 | mutation createPublicationStory($input: CreateStoryInput!, $publicationId: String!, $hideFromHashnodeFeed: Boolean!) { 71 | createPublicationStory(input: $input, publicationId: $publicationId, hideFromHashnodeFeed: $hideFromHashnodeFeed) { 72 | success, 73 | message 74 | } 75 | } 76 | ` 77 | 78 | const data = { 79 | input: createStoryInput, 80 | publicationId: this.connection_settings.publication_id, 81 | hideFromHashnodeFeed: this.options.should_hide 82 | } 83 | 84 | if (dryRun) { 85 | console.log('No error occurred while preparing article for Hashnode.') 86 | return 87 | } 88 | 89 | await this.client.request(mutation, data) 90 | 91 | console.log('Article pushed to Hashnode') 92 | } 93 | 94 | async getTagsFromHashnode (tags: string[]): Promise { 95 | const hashnodeTags: HashnodeTag[] = [] 96 | //retrieve all tags from hashnode 97 | const query = gql` 98 | { 99 | tagCategories { 100 | _id, 101 | name, 102 | slug 103 | } 104 | } 105 | ` 106 | 107 | const response = await this.client.request(query) 108 | 109 | tags.forEach((tag) => { 110 | //find tag in the response 111 | const hashnodeTag = response.tagCategories?.find((t: HashnodeTag) => t.name === tag || t.slug === tag) 112 | 113 | if (hashnodeTag) { 114 | hashnodeTags.push(hashnodeTag) 115 | } 116 | }) 117 | 118 | return hashnodeTags 119 | } 120 | } 121 | 122 | export default HashnodeClient -------------------------------------------------------------------------------- /src/clients/github-client.ts: -------------------------------------------------------------------------------- 1 | import { DefaultFrontmatter, File, GitHubConnectionSettings, GitHubOptions, ImageDataUrl, GitHubProperties } from "../types/clients/github" 2 | 3 | import Notion from "./notion-client" 4 | import { Octokit } from "octokit" 5 | import axios from "axios" 6 | import imageTypes from "../utils/image-types" 7 | import { nanoid } from 'nanoid' 8 | import { ConfigGitHub, ConfigNotion } from '../types/config'; 9 | import matter from 'gray-matter' 10 | 11 | const MARKDOWN_IMG_REGEX = /!\[[^\]]*\]\((.*?)\s*("(?:.*[^"])")?\s*\)/ 12 | 13 | class GitHubClient { 14 | octokit: Octokit 15 | connection_settings: GitHubConnectionSettings 16 | options: GitHubOptions 17 | notion: Notion 18 | 19 | constructor ( 20 | config: ConfigGitHub, 21 | notion_config: ConfigNotion 22 | ) { 23 | this.octokit = new Octokit({ 24 | auth: config.connection_settings.token 25 | }) 26 | this.connection_settings = { 27 | ...config.connection_settings, 28 | branch: config.connection_settings.branch ?? "master" 29 | } 30 | this.options = config.options 31 | this.notion = new Notion(notion_config) 32 | } 33 | 34 | async post(url: string, dryRun?: boolean) { 35 | //get page id 36 | const pageId = this.notion.getPageIdFromURL(url) 37 | //get blocks 38 | let blocks = await this.notion.getBlocks(url) 39 | 40 | const files: File[] = [] 41 | 42 | blocks = await Promise.all(blocks.map(async (block) => { 43 | if (block.type === 'image') { 44 | //load content of image as base64 45 | const imageUrl = block.parent.match(MARKDOWN_IMG_REGEX) 46 | if (imageUrl?.length && imageUrl.length > 1) { 47 | const imageDataUrl = await this.imageToDataUrl(imageUrl[1]) 48 | if (imageDataUrl) { 49 | const filename = `${nanoid(10)}.${imageDataUrl.ext}` 50 | files.push({ 51 | path: `${this.options.image_path ? `${this.options.image_path}/` : ''}${filename}`, 52 | content: imageDataUrl.url 53 | }) 54 | 55 | block.parent = block.parent.replace(imageUrl[1], `${this.options.image_prefix}/${filename}`) 56 | } 57 | } 58 | } 59 | 60 | return block 61 | })) 62 | 63 | //transform blocks to markdown 64 | let markdown = await this.notion.getMarkdown(blocks) 65 | const properties = await this.notion.getArticleProperties(pageId) 66 | const title = this.notion.getAttributeValue(properties[this.options.properties?.title || GitHubProperties.TITLE]) 67 | 68 | //add frontmatter 69 | const frontmatterObject: Record = {} 70 | 71 | if (this.options.add_default_frontmatter) { 72 | //add title 73 | frontmatterObject[this.options.frontmatter_labels?.title || DefaultFrontmatter.TITLE] = title 74 | //add date 75 | if (this.options.properties?.date) { 76 | frontmatterObject[this.options.frontmatter_labels?.date || DefaultFrontmatter.DATE] = this.notion.getAttributeValue(properties[this.options.properties?.date]) 77 | } else { 78 | //use current date 79 | const today = new Date() 80 | frontmatterObject[this.options.frontmatter_labels?.date || DefaultFrontmatter.DATE] = `${today.getFullYear()}-${today.getMonth()}-${today.getDate()}` 81 | } 82 | } 83 | 84 | if (this.options.extra_frontmatter) { 85 | for (const [key, value] of Object.entries(this.options.extra_frontmatter)) { 86 | const frontmatterValue = (this.options.extra_frontmatter_mapper && this.options.extra_frontmatter_mapper[key] 87 | && properties[this.options.extra_frontmatter_mapper[key]]) ? 88 | this.notion.getAttributeValue(properties[this.options.extra_frontmatter_mapper[key]]) || value : 89 | value 90 | frontmatterObject[key] = frontmatterValue 91 | } 92 | } 93 | 94 | markdown = matter.stringify(markdown, frontmatterObject) 95 | 96 | // get slug of file 97 | let slug 98 | if (properties[this.options.properties?.slug || GitHubProperties.SLUG]) { 99 | slug = this.notion.getAttributeValue(properties[this.options.properties?.slug || GitHubProperties.SLUG]) 100 | 101 | if (!slug) { 102 | slug = this.notion.getArticleSlug(title) 103 | } 104 | } else { 105 | slug = this.notion.getArticleSlug(title) 106 | } 107 | 108 | while (slug.startsWith('/')) { 109 | slug = slug.substring(1) 110 | } 111 | 112 | //add markdown file to files 113 | files.push({ 114 | path: `${this.options.article_path ? `${this.options.article_path}/` : ''}${slug}.md`, 115 | content: this.toBase64(markdown) 116 | }) 117 | 118 | if (dryRun) { 119 | console.log('No error occurred while preparing article for GitHub.') 120 | return 121 | } 122 | 123 | //commit files to GitHub 124 | for (const file of files) { 125 | await this.octokit.request('PUT /repos/{owner}/{repo}/contents/{path}', { 126 | owner: this.connection_settings.owner, 127 | repo: this.connection_settings.repo, 128 | path: file.path, 129 | content: file.content, 130 | message: `Added ${file.path}`, 131 | branch: this.connection_settings.branch 132 | }) 133 | } 134 | 135 | console.log('Article pushed to GitHub') 136 | } 137 | 138 | async imageToDataUrl (url: string): Promise { 139 | const imageDataUrl = await axios.get(url, { 140 | responseType: 'arraybuffer' 141 | }) 142 | const stringifiedBuffer = this.toBase64(imageDataUrl.data) 143 | const contentType = imageDataUrl.headers['content-type'] 144 | 145 | if (!contentType) { 146 | console.error('Could not retrieve image. Skipping...') 147 | return null 148 | } 149 | 150 | return { 151 | url: stringifiedBuffer, 152 | ext: contentType ? imageTypes[contentType] || "" : "" 153 | } 154 | } 155 | 156 | toBase64(source: string): string { 157 | return Buffer.from(source).toString('base64') 158 | } 159 | } 160 | 161 | export default GitHubClient -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2021", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs", /* Specify what module code is generated. */ 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "resolveJsonModule": true, /* Enable importing .json files. */ 39 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 40 | 41 | /* JavaScript Support */ 42 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 43 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 44 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 45 | 46 | /* Emit */ 47 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 48 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 49 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 50 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 51 | // "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. */ 52 | "outDir": "./dist", /* Specify an output folder for all emitted files. */ 53 | // "removeComments": true, /* Disable emitting comments. */ 54 | // "noEmit": true, /* Disable emitting files from a compilation. */ 55 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 56 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 57 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 58 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 59 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 60 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 61 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 62 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 63 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 64 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 65 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 66 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 67 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 68 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 69 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 70 | 71 | /* Interop Constraints */ 72 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 73 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 74 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 75 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 76 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 77 | 78 | /* Type Checking */ 79 | "strict": true, /* Enable all strict type-checking options. */ 80 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 81 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 82 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 83 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 84 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 85 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 86 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 87 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 88 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 89 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 90 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 91 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 92 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 93 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 94 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 95 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 96 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 97 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 98 | 99 | /* Completeness */ 100 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 101 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 102 | }, 103 | "include": [ 104 | "src/**/*" 105 | ] 106 | } 107 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Cross Post Tool for Notion 2 | 3 | This tool allows posting from Notion to different platforms. 4 | 5 | - [Cross Post Tool for Notion](#cross-post-tool-for-notion) 6 | - [Supported Platforms](#supported-platforms) 7 | - [Environment Variables](#environment-variables) 8 | - [Notion](#notion) 9 | - [GitHub](#github) 10 | - [Dev.to](#devto) 11 | - [Hashnode](#hashnode) 12 | - [Medium](#medium) 13 | - [Installation](#installation) 14 | - [NPX Command](#npx-command) 15 | - [CLI Tool](#cli-tool) 16 | - [GitHub Repository](#github-repository) 17 | - [Usage](#usage) 18 | - [Post Command](#post-command) 19 | - [Options](#options) 20 | - [Platforms](#platforms) 21 | - [Config](#config) 22 | - [Available Configurations](#available-configurations) 23 | - [Environment Variables when Loading Configurations from a Custom File](#environment-variables-when-loading-configurations-from-a-custom-file) 24 | - [Limitations](#limitations) 25 | - [GitHub Limitations](#github-limitations) 26 | - [Dev.to Limitations](#devto-limitations) 27 | - [Hashnode Limitations](#hashnode-limitations) 28 | - [FAQ \& Troubleshooting](#faq--troubleshooting) 29 | - [How do I obtain the URL of the Notion document?](#how-do-i-obtain-the-url-of-the-notion-document) 30 | - [I get the error "No matches found: URL"](#i-get-the-error-no-matches-found-url) 31 | - [NPX doesn't use latest version by default](#npx-doesnt-use-latest-version-by-default) 32 | 33 | ## Supported Platforms 34 | 35 | - [x] GitHub (Markdown) 36 | - [x] frontmatter customization 37 | - [x] Dev.to 38 | - [x] Hashnode 39 | - [x] Medium 40 | 41 | ## Environment Variables 42 | 43 | ### Notion 44 | 45 | - `NOTION_TOKEN`: Token on a Notion internal integration 46 | 47 | ### GitHub 48 | 49 | - `GH_TOKEN`: (required) GitHub personal token 50 | - `GH_OWNER`: (required) GitHub username 51 | - `GH_REPO`: (required) Repository name 52 | - `GH_BRANCH`: Branch name. default is `master`. 53 | 54 | ### Dev.to 55 | 56 | - `DEVTO_API_KEY`: (required) Your personal dev.to API key. Learn how to retrieve it [here](https://developers.forem.com/api/v0). 57 | - `DEVTO_ORG_ID`: The ID of the organization to publish the article under. You can retrieve it either from the organization dashboard page, where the ID is the last part of the URL (`https://dev.to/dashboard/organization/ORG_ID`). Alternatively, you can use Dev.to's [List Organizations](https://developers.forem.com/api/v0#tag/organizations/operation/getOrgUsers) endpoint to find the ID. 58 | 59 | ### Hashnode 60 | 61 | - `HASHNODE_TOKEN`: (required) Hashnode personal token 62 | - `HASHNODE_PUB_ID`: (required) The ID of the publication to publish the article under. You can retrieve it either from the publication's dashboard page, where the ID is the second part of the URL (`https://hashnode.com/PUB_ID/dashboard`). 63 | 64 | ### Medium 65 | 66 | - `MEDIUM_TOKEN`: (required) Medium Integration Token. Can be retrieved from [here](https://medium.com/me/settings/security). 67 | - `MEDIUM_PUB_NAME`: The name of the Medium publication. Must be the exact name as it is on Medium. 68 | 69 | ## Installation 70 | 71 | ### NPX Command 72 | 73 | You can use this command as an NPX command: 74 | 75 | ```bash 76 | npx cross-post-notion 77 | ``` 78 | 79 | ### CLI Tool 80 | 81 | You can install this as a global CLI tool: 82 | 83 | ```bash 84 | # using npm 85 | npm install -g cross-post-notion 86 | 87 | # using yarn 88 | yarn add cross-post-notion global 89 | ``` 90 | 91 | ### GitHub Repository 92 | 93 | You can clone this repository, then run the following command after installing the dependencies: 94 | 95 | ```bash 96 | # using npm 97 | npm start 98 | 99 | # using yarn 100 | yarn start 101 | ``` 102 | 103 | ## Usage 104 | 105 | ### Post Command 106 | 107 | To cross-post an article from Notion to other platforms, use the `post` command: 108 | 109 | ```bash 110 | # using npx 111 | npx cross-post-notion 112 | 113 | # using CLI tool 114 | cross-post-notion 115 | 116 | # using cloned repository 117 | npm start post 118 | ``` 119 | 120 | Where `` is the URL of the Notion document. 121 | 122 | #### Options 123 | 124 | ##### Platforms 125 | 126 | By default, the article will be published to github, devto, hashnode, and medium. 127 | 128 | You can specify which platforms to publish the article on using the `-p, --platforms` option. For example: 129 | 130 | ```bash 131 | yarn start example.com -p devto hashnode 132 | ``` 133 | 134 | This will publish the article only on dev.to and hashnode. 135 | 136 | Allowed values are: 137 | 138 | - `github` 139 | - `devto` 140 | - `hashnode` 141 | - `medium` 142 | 143 | ##### Dry Run 144 | 145 | If you want to test out the entire flow without actually posting the article, you can pass the `-d, --dryRun` option: 146 | 147 | ```bash 148 | yarn start example.com --dryRun 149 | ``` 150 | 151 | ## Config 152 | 153 | By default, this tool will look for configurations under `config/default.json` or `config/local.json`. You can also pass the `-c, --config` option to load configurations from a different JSON file. 154 | 155 | For example: 156 | 157 | ```bash 158 | yarn start -c path/to/file.json 159 | ``` 160 | 161 | ### Available Configurations 162 | 163 | The JSON configuration file can have the following fields: 164 | 165 | ```json 166 | { 167 | "config": { 168 | "notion": { 169 | "options": { 170 | "skip_block_types": [ 171 | 172 | ] 173 | } 174 | }, 175 | "github": { 176 | "options": { 177 | "image_path": "public", 178 | "image_prefix": "/", 179 | "article_path": "content", 180 | "properties": { 181 | "title": "Title for Blog", 182 | "date": "Publishing Date", 183 | "slug": "Slug" 184 | }, 185 | "add_default_frontmatter": true, 186 | "frontmatter_labels": { 187 | "title": "title", 188 | "date": "date" 189 | }, 190 | "extra_frontmatter": { 191 | "excerpt": "this is description", 192 | "nested": { 193 | "field1": "value1" 194 | } 195 | }, 196 | "extra_frontmatter_mapper": { 197 | "excerpt": "Description" 198 | } 199 | } 200 | }, 201 | "devto": { 202 | "options": { 203 | "should_publish": false, 204 | "properties": { 205 | "title": "Title for Dev.to" 206 | } 207 | } 208 | }, 209 | "hashnode": { 210 | "options": { 211 | "should_publish": true, 212 | "should_notify_followers": false, 213 | "properties": { 214 | "title": "Title for Hashnode" 215 | } 216 | } 217 | }, 218 | "medium": { 219 | "options": { 220 | "should_publish": false, 221 | "should_notify_followers": false, 222 | "properties": { 223 | "title": "Title for Medium" 224 | } 225 | } 226 | } 227 | } 228 | } 229 | ``` 230 | 231 | Where: 232 | 233 | - `config`: wraps all configurations. 234 | - `notion`: A JSON object with all configurations related to Notion. These are: 235 | - `options`: Include all options related to cross posting: 236 | - `skip_block_types`: An array of block types that should be skipped from the Notion document. For example, `toggle` would skip all toggle list blocks in the Notion document. 237 | - `github`: A JSON object with all configurations related to GitHub. These are: 238 | - `options`: Include all options related to cross posting: 239 | - `image_path`: The path in the repository to upload images to. 240 | - `image_prefix`: The prefix to add to images in the markdown output. 241 | - `article_path`: The path in the repository to upload the markdown article to. 242 | - `add_default_frontmatter`: Whether to add default frontmatter to the markdown file. The default frontmatter are: 243 | - `title` 244 | - `date` 245 | - `slug` 246 | - `properties`: A JSON object that allows you to override the name of the properties in Notion to pull the values of frontmatter fields. 247 | - `frontmatter_labels`: A JSON object that allows you to override the labels of the frontmatter fields. 248 | - `extra_frontmatter`: Allows you to add extra frontmatter to the output markdown. 249 | - `extra_frontmatter_mapper`: If you want the values of the frontmatter keys in `extra_frontmatter` to be pulled out of Notion, you can map each key to a property name in the Notion document. 250 | - `devto`: A JSON object with all configurations related to Dev.to. These are: 251 | - `should_publish`: A boolean value indicating whether the article should be created in dev.to as a draft or it should be published. 252 | - `properties`: A JSON object that allows you to override the name of the properties in Notion to pull the values of frontmatter fields. You can set the following properties: 253 | - `title` 254 | - `date` 255 | - `description` 256 | - `tags` (the property's value in Notion should be a comma separated list.) 257 | - `series` (the property's value in Notion should be the name of the series) 258 | - `canonical_url` 259 | - `description` 260 | - `hashnode`: A JSON object with all the configurations related to Hashnode. These are: 261 | - `should_hide`: A boolean value indicating whether the post should be shown on Hashnode's public feed or not. Learn more in the [limitations section](#hashnode-limitations). 262 | - `properties`: A JSON object that allows you to override the name of the properties in Notion to pull the values of frontmatter fields. You can set the following properties: 263 | - `title` 264 | - `original_article_url` (refers to the property holding the canonical url of the article) 265 | - `tags` (the property's value in Notion should be a list of tag names separated by a comma. The tag name can either be tag slug or display name) 266 | - `subtitle` 267 | - `medium`: A JSON object with all the configurations related to Medium. These are: 268 | - `should_publish`: A boolean value indicating whether the article should be created in dev.to as a draft or it should be published. 269 | - `should_notify_followers`: A boolean value indicating whether your followers should be notified about the article. 270 | - `properties`: A JSON object that allows you to override the name of the properties in Notion to pull the values of frontmatter fields. You can set the following properties: 271 | - `title` 272 | - `subtitle` 273 | - `tags` (the property's value in Notion should be a list of tag names separated by a comma.) 274 | - `canonical_url` 275 | 276 | ### Environment Variables when Loading Configurations from a Custom File 277 | 278 | When you're loading configurations from a custom file using the `-c, --config` option, you can't use the environment variables anymore. You'll have to pass them in the same config file as follows: 279 | 280 | ```json 281 | { 282 | "config": { 283 | "notion": { 284 | "connection_settings": { 285 | "token": "..." 286 | } 287 | }, 288 | "github": { 289 | //... 290 | "connection_settings": { 291 | "token": "...", 292 | "owner": "...", 293 | "repo": "...", 294 | "branch": "..." 295 | } 296 | }, 297 | "devto": { 298 | //... 299 | "connection_settings": { 300 | "api_key": "...", 301 | "organization_id": "..." 302 | } 303 | }, 304 | "hashnode": { 305 | "connection_settings": { 306 | "token": "...", 307 | "publication_id": "..." 308 | } 309 | }, 310 | "medium": { 311 | "connection_settings": { 312 | "token": "...", 313 | "publication_name": "..." 314 | } 315 | } 316 | } 317 | } 318 | ``` 319 | 320 | ## Limitations 321 | 322 | ### GitHub Limitations 323 | 324 | - If a file with the same name and path exists in the repository, an error is thrown. There's no support for updating files. 325 | 326 | ### Dev.to Limitations 327 | 328 | - As Dev.to does not expose an endpoint to upload images, it's not possible to upload images in the article. Images are added as they are in Notion, which may or may not work as expected. You'll have to upload them manually from Dev.to's interface. 329 | 330 | ### Hashnode Limitations 331 | 332 | - Hashnode's API does not provide the option to post an article as a draft. As an alternative, the `should_hide` will allow you to hide the article from Hashnode's public feed. It will still, however, show up on your blog. 333 | - Due to a limitation in Hashnode's APIs, it's not possible to map all available categories. So, some categories you use in Notion will not show up when you cross-post to Hashnode. 334 | 335 | ## FAQ & Troubleshooting 336 | 337 | ### How do I obtain the URL of the Notion document? 338 | 339 | To retrieve the URL of a Notion document: 340 | 341 | 1. In the document, click on Share at the top right. 342 | 2. Click on Copy Link at the bottom right of the pop up. 343 | 344 | The URL should be of the format `https://www.notion.so/{workspace}/{path}`. 345 | 346 | ### I get the error "No matches found: URL" 347 | 348 | When you copy the URL from Notion, sometimes it has a query parameter at the end of it such as `?psv=4`. Some terminals can't read that. 349 | 350 | Make sure to remove any query parameters and try again. 351 | 352 | ### NPX doesn't use latest version by default 353 | 354 | After the first time you use the command with NPX, it might not use updated versions moving forward. 355 | 356 | So, it's recommended to use `@latest` with your commands: 357 | 358 | ```bash 359 | npx cross-post-notion@latest 360 | ``` 361 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@aashutoshrathi/word-wrap@^1.2.3": 6 | version "1.2.6" 7 | resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" 8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== 9 | 10 | "@cspotcode/source-map-support@^0.8.0": 11 | version "0.8.1" 12 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 13 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 14 | dependencies: 15 | "@jridgewell/trace-mapping" "0.3.9" 16 | 17 | "@eslint-community/eslint-utils@^4.2.0": 18 | version "4.4.0" 19 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 20 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 21 | dependencies: 22 | eslint-visitor-keys "^3.3.0" 23 | 24 | "@eslint-community/regexpp@^4.4.0": 25 | version "4.5.1" 26 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" 27 | integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== 28 | 29 | "@eslint/eslintrc@^2.1.0": 30 | version "2.1.0" 31 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" 32 | integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== 33 | dependencies: 34 | ajv "^6.12.4" 35 | debug "^4.3.2" 36 | espree "^9.6.0" 37 | globals "^13.19.0" 38 | ignore "^5.2.0" 39 | import-fresh "^3.2.1" 40 | js-yaml "^4.1.0" 41 | minimatch "^3.1.2" 42 | strip-json-comments "^3.1.1" 43 | 44 | "@eslint/js@8.44.0": 45 | version "8.44.0" 46 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" 47 | integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== 48 | 49 | "@graphql-typed-document-node/core@^3.1.1": 50 | version "3.1.1" 51 | resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052" 52 | integrity sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg== 53 | 54 | "@humanwhocodes/config-array@^0.11.10": 55 | version "0.11.10" 56 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" 57 | integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== 58 | dependencies: 59 | "@humanwhocodes/object-schema" "^1.2.1" 60 | debug "^4.1.1" 61 | minimatch "^3.0.5" 62 | 63 | "@humanwhocodes/module-importer@^1.0.1": 64 | version "1.0.1" 65 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 66 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 67 | 68 | "@humanwhocodes/object-schema@^1.2.1": 69 | version "1.2.1" 70 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 71 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 72 | 73 | "@jridgewell/resolve-uri@^3.0.3": 74 | version "3.1.0" 75 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 76 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 77 | 78 | "@jridgewell/sourcemap-codec@^1.4.10": 79 | version "1.4.14" 80 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 81 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 82 | 83 | "@jridgewell/trace-mapping@0.3.9": 84 | version "0.3.9" 85 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 86 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 87 | dependencies: 88 | "@jridgewell/resolve-uri" "^3.0.3" 89 | "@jridgewell/sourcemap-codec" "^1.4.10" 90 | 91 | "@nodelib/fs.scandir@2.1.5": 92 | version "2.1.5" 93 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 94 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 95 | dependencies: 96 | "@nodelib/fs.stat" "2.0.5" 97 | run-parallel "^1.1.9" 98 | 99 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 100 | version "2.0.5" 101 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 102 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 103 | 104 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 105 | version "1.2.8" 106 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 107 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 108 | dependencies: 109 | "@nodelib/fs.scandir" "2.1.5" 110 | fastq "^1.6.0" 111 | 112 | "@notionhq/client@^2.2.2": 113 | version "2.2.3" 114 | resolved "https://registry.yarnpkg.com/@notionhq/client/-/client-2.2.3.tgz#b8563994fd116123b0b2e39fca43a593faaf8360" 115 | integrity sha512-ZqUzY0iRg/LIrwS+wzz/6osSB2nxIpmqdAtdUwzpcimc9Jlu1j85FeYdaU26Shr193CFrl2TLFeKqpk/APRQ4g== 116 | dependencies: 117 | "@types/node-fetch" "^2.5.10" 118 | node-fetch "^2.6.1" 119 | 120 | "@octokit/app@^13.1.1": 121 | version "13.1.2" 122 | resolved "https://registry.yarnpkg.com/@octokit/app/-/app-13.1.2.tgz#81fdee338abddda9c016e5beccdb19ff5110bb66" 123 | integrity sha512-Kf+h5sa1SOI33hFsuHvTsWj1jUrjp1x4MuiJBq7U/NicfEGa6nArPUoDnyfP/YTmcQ5cQ5yvOgoIBkbwPg6kzQ== 124 | dependencies: 125 | "@octokit/auth-app" "^4.0.8" 126 | "@octokit/auth-unauthenticated" "^3.0.0" 127 | "@octokit/core" "^4.0.0" 128 | "@octokit/oauth-app" "^4.0.7" 129 | "@octokit/plugin-paginate-rest" "^6.0.0" 130 | "@octokit/types" "^9.0.0" 131 | "@octokit/webhooks" "^10.0.0" 132 | 133 | "@octokit/auth-app@^4.0.8": 134 | version "4.0.9" 135 | resolved "https://registry.yarnpkg.com/@octokit/auth-app/-/auth-app-4.0.9.tgz#66500c8f66545d970a19123b9b364c678c972d6b" 136 | integrity sha512-VFpKIXhHO+kVJtane5cEvdYPtjDKCOI0uKsRrsZfJP+uEu7rcPbQCLCcRKgyT+mUIzGr1IIOmwP/lFqSip1dXA== 137 | dependencies: 138 | "@octokit/auth-oauth-app" "^5.0.0" 139 | "@octokit/auth-oauth-user" "^2.0.0" 140 | "@octokit/request" "^6.0.0" 141 | "@octokit/request-error" "^3.0.0" 142 | "@octokit/types" "^9.0.0" 143 | "@types/lru-cache" "^5.1.0" 144 | deprecation "^2.3.1" 145 | lru-cache "^6.0.0" 146 | universal-github-app-jwt "^1.1.1" 147 | universal-user-agent "^6.0.0" 148 | 149 | "@octokit/auth-oauth-app@^5.0.0": 150 | version "5.0.5" 151 | resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.5.tgz#be2a93d72835133b4866ac4721aa628849475525" 152 | integrity sha512-UPX1su6XpseaeLVCi78s9droxpGtBWIgz9XhXAx9VXabksoF0MyI5vaa1zo1njyYt6VaAjFisC2A2Wchcu2WmQ== 153 | dependencies: 154 | "@octokit/auth-oauth-device" "^4.0.0" 155 | "@octokit/auth-oauth-user" "^2.0.0" 156 | "@octokit/request" "^6.0.0" 157 | "@octokit/types" "^9.0.0" 158 | "@types/btoa-lite" "^1.0.0" 159 | btoa-lite "^1.0.0" 160 | universal-user-agent "^6.0.0" 161 | 162 | "@octokit/auth-oauth-device@^4.0.0": 163 | version "4.0.4" 164 | resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.4.tgz#b8dde812a38bf5cb0696b6e7d0a74681d437c390" 165 | integrity sha512-Xl85BZYfqCMv+Uvz33nVVUjE7I/PVySNaK6dRRqlkvYcArSr9vRcZC9KVjXYObGRTCN6mISeYdakAZvWEN4+Jw== 166 | dependencies: 167 | "@octokit/oauth-methods" "^2.0.0" 168 | "@octokit/request" "^6.0.0" 169 | "@octokit/types" "^9.0.0" 170 | universal-user-agent "^6.0.0" 171 | 172 | "@octokit/auth-oauth-user@^2.0.0": 173 | version "2.1.1" 174 | resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.1.tgz#d900972f3d9247924637ab3343a8305746feadb2" 175 | integrity sha512-JgqnNNPf9CaWLxWm9uh2WgxcaVYhxBR09NVIPTiMU2dVZ3FObOHs3njBiLNw+zq84k+rEdm5Y7AsiASrZ84Apg== 176 | dependencies: 177 | "@octokit/auth-oauth-device" "^4.0.0" 178 | "@octokit/oauth-methods" "^2.0.0" 179 | "@octokit/request" "^6.0.0" 180 | "@octokit/types" "^9.0.0" 181 | btoa-lite "^1.0.0" 182 | universal-user-agent "^6.0.0" 183 | 184 | "@octokit/auth-token@^3.0.0": 185 | version "3.0.3" 186 | resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.3.tgz#ce7e48a3166731f26068d7a7a7996b5da58cbe0c" 187 | integrity sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA== 188 | dependencies: 189 | "@octokit/types" "^9.0.0" 190 | 191 | "@octokit/auth-unauthenticated@^3.0.0": 192 | version "3.0.4" 193 | resolved "https://registry.yarnpkg.com/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.4.tgz#347d3f3a6fefb22d399a941b986bac5361fc95df" 194 | integrity sha512-AT74XGBylcLr4lmUp1s6mjSUgphGdlse21Qjtv5DzpX1YOl5FXKwvNcZWESdhyBbpDT8VkVyLFqa/7a7eqpPNw== 195 | dependencies: 196 | "@octokit/request-error" "^3.0.0" 197 | "@octokit/types" "^9.0.0" 198 | 199 | "@octokit/core@^4.0.0", "@octokit/core@^4.0.4": 200 | version "4.2.0" 201 | resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.0.tgz#8c253ba9605aca605bc46187c34fcccae6a96648" 202 | integrity sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg== 203 | dependencies: 204 | "@octokit/auth-token" "^3.0.0" 205 | "@octokit/graphql" "^5.0.0" 206 | "@octokit/request" "^6.0.0" 207 | "@octokit/request-error" "^3.0.0" 208 | "@octokit/types" "^9.0.0" 209 | before-after-hook "^2.2.0" 210 | universal-user-agent "^6.0.0" 211 | 212 | "@octokit/endpoint@^7.0.0": 213 | version "7.0.5" 214 | resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.5.tgz#2bb2a911c12c50f10014183f5d596ce30ac67dd1" 215 | integrity sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA== 216 | dependencies: 217 | "@octokit/types" "^9.0.0" 218 | is-plain-object "^5.0.0" 219 | universal-user-agent "^6.0.0" 220 | 221 | "@octokit/graphql@^5.0.0": 222 | version "5.0.5" 223 | resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.5.tgz#a4cb3ea73f83b861893a6370ee82abb36e81afd2" 224 | integrity sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ== 225 | dependencies: 226 | "@octokit/request" "^6.0.0" 227 | "@octokit/types" "^9.0.0" 228 | universal-user-agent "^6.0.0" 229 | 230 | "@octokit/oauth-app@^4.0.6", "@octokit/oauth-app@^4.0.7": 231 | version "4.2.0" 232 | resolved "https://registry.yarnpkg.com/@octokit/oauth-app/-/oauth-app-4.2.0.tgz#f965496b1d957c3ff0275a5d5233b380181ce72b" 233 | integrity sha512-gyGclT77RQMkVUEW3YBeAKY+LBSc5u3eC9Wn/Uwt3WhuKuu9mrV18EnNpDqmeNll+mdV02yyBROU29Tlili6gg== 234 | dependencies: 235 | "@octokit/auth-oauth-app" "^5.0.0" 236 | "@octokit/auth-oauth-user" "^2.0.0" 237 | "@octokit/auth-unauthenticated" "^3.0.0" 238 | "@octokit/core" "^4.0.0" 239 | "@octokit/oauth-authorization-url" "^5.0.0" 240 | "@octokit/oauth-methods" "^2.0.0" 241 | "@types/aws-lambda" "^8.10.83" 242 | fromentries "^1.3.1" 243 | universal-user-agent "^6.0.0" 244 | 245 | "@octokit/oauth-authorization-url@^5.0.0": 246 | version "5.0.0" 247 | resolved "https://registry.yarnpkg.com/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz#029626ce87f3b31addb98cd0d2355c2381a1c5a1" 248 | integrity sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg== 249 | 250 | "@octokit/oauth-methods@^2.0.0": 251 | version "2.0.5" 252 | resolved "https://registry.yarnpkg.com/@octokit/oauth-methods/-/oauth-methods-2.0.5.tgz#b11ce2205c46ffcd731c7332b21bb62dad10ce24" 253 | integrity sha512-yQP6B5gE3axNxuM3U9KqWs/ErAQ+WLPaPgC/7EjsZsQibkf8sjdAfF8/y/EJW+Dd05XQvadX4WhQZPMnO1SE1A== 254 | dependencies: 255 | "@octokit/oauth-authorization-url" "^5.0.0" 256 | "@octokit/request" "^6.2.3" 257 | "@octokit/request-error" "^3.0.3" 258 | "@octokit/types" "^9.0.0" 259 | btoa-lite "^1.0.0" 260 | 261 | "@octokit/openapi-types@^16.0.0": 262 | version "16.0.0" 263 | resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-16.0.0.tgz#d92838a6cd9fb4639ca875ddb3437f1045cc625e" 264 | integrity sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA== 265 | 266 | "@octokit/plugin-paginate-rest@^6.0.0": 267 | version "6.0.0" 268 | resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz#f34b5a7d9416019126042cd7d7b811e006c0d561" 269 | integrity sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw== 270 | dependencies: 271 | "@octokit/types" "^9.0.0" 272 | 273 | "@octokit/plugin-rest-endpoint-methods@^7.0.0": 274 | version "7.0.1" 275 | resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz#f7ebe18144fd89460f98f35a587b056646e84502" 276 | integrity sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA== 277 | dependencies: 278 | "@octokit/types" "^9.0.0" 279 | deprecation "^2.3.1" 280 | 281 | "@octokit/plugin-retry@^4.0.3": 282 | version "4.1.1" 283 | resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-4.1.1.tgz#2a96e97219f6506d636b4de696cf368da44a8e20" 284 | integrity sha512-iR7rg5KRSl6L6RELTQQ3CYeNgeBJyuAmP95odzcQ/zyefnRT/Peo8rWeky4z7V/+/oPWqOL4I5Z+V8KtjpHCJw== 285 | dependencies: 286 | "@octokit/types" "^9.0.0" 287 | bottleneck "^2.15.3" 288 | 289 | "@octokit/plugin-throttling@^5.0.0": 290 | version "5.0.1" 291 | resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-5.0.1.tgz#e3ba0a49830a777097b6d49615782a0a5e51e743" 292 | integrity sha512-I4qxs7wYvYlFuY3PAUGWAVPhFXG3RwnvTiSr5Fu/Auz7bYhDLnzS2MjwV8nGLq/FPrWwYiweeZrI5yjs1YG4tQ== 293 | dependencies: 294 | "@octokit/types" "^9.0.0" 295 | bottleneck "^2.15.3" 296 | 297 | "@octokit/request-error@^3.0.0", "@octokit/request-error@^3.0.3": 298 | version "3.0.3" 299 | resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" 300 | integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== 301 | dependencies: 302 | "@octokit/types" "^9.0.0" 303 | deprecation "^2.0.0" 304 | once "^1.4.0" 305 | 306 | "@octokit/request@^6.0.0", "@octokit/request@^6.2.3": 307 | version "6.2.3" 308 | resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.3.tgz#76d5d6d44da5c8d406620a4c285d280ae310bdb4" 309 | integrity sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA== 310 | dependencies: 311 | "@octokit/endpoint" "^7.0.0" 312 | "@octokit/request-error" "^3.0.0" 313 | "@octokit/types" "^9.0.0" 314 | is-plain-object "^5.0.0" 315 | node-fetch "^2.6.7" 316 | universal-user-agent "^6.0.0" 317 | 318 | "@octokit/types@^9.0.0": 319 | version "9.0.0" 320 | resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.0.0.tgz#6050db04ddf4188ec92d60e4da1a2ce0633ff635" 321 | integrity sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw== 322 | dependencies: 323 | "@octokit/openapi-types" "^16.0.0" 324 | 325 | "@octokit/webhooks-methods@^3.0.0": 326 | version "3.0.2" 327 | resolved "https://registry.yarnpkg.com/@octokit/webhooks-methods/-/webhooks-methods-3.0.2.tgz#cece91cc72714a1c83b35d121e04334f051e509c" 328 | integrity sha512-Vlnv5WBscf07tyAvfDbp7pTkMZUwk7z7VwEF32x6HqI+55QRwBTcT+D7DDjZXtad/1dU9E32x0HmtDlF9VIRaQ== 329 | 330 | "@octokit/webhooks-types@6.10.0": 331 | version "6.10.0" 332 | resolved "https://registry.yarnpkg.com/@octokit/webhooks-types/-/webhooks-types-6.10.0.tgz#b441780d26370c7682f4f964d4b36b5cb0c757f8" 333 | integrity sha512-lDNv83BeEyxxukdQ0UttiUXawk9+6DkdjjFtm2GFED+24IQhTVaoSbwV9vWWKONyGLzRmCQqZmoEWkDhkEmPlw== 334 | 335 | "@octokit/webhooks@^10.0.0": 336 | version "10.7.0" 337 | resolved "https://registry.yarnpkg.com/@octokit/webhooks/-/webhooks-10.7.0.tgz#ec05e655d309383e2cd08dafe51abd1705df6d4a" 338 | integrity sha512-zZBbQMpXXnK/ki/utrFG/TuWv9545XCSLibfDTxrYqR1PmU6zel02ebTOrA7t5XIGHzlEOc/NgISUIBUe7pMFA== 339 | dependencies: 340 | "@octokit/request-error" "^3.0.0" 341 | "@octokit/webhooks-methods" "^3.0.0" 342 | "@octokit/webhooks-types" "6.10.0" 343 | aggregate-error "^3.1.0" 344 | 345 | "@tsconfig/node10@^1.0.7": 346 | version "1.0.9" 347 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" 348 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== 349 | 350 | "@tsconfig/node12@^1.0.7": 351 | version "1.0.11" 352 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" 353 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 354 | 355 | "@tsconfig/node14@^1.0.0": 356 | version "1.0.3" 357 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" 358 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 359 | 360 | "@tsconfig/node16@^1.0.2": 361 | version "1.0.3" 362 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" 363 | integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== 364 | 365 | "@types/aws-lambda@^8.10.83": 366 | version "8.10.110" 367 | resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.110.tgz#32a1f9d40b855d69830243492bbb6408098f4c88" 368 | integrity sha512-r6egf2Cwv/JaFTTrF9OXFVUB3j/SXTgM9BwrlbBRjWAa2Tu6GWoDoLflppAZ8uSfbUJdXvC7Br3DjuN9pQ2NUQ== 369 | 370 | "@types/btoa-lite@^1.0.0": 371 | version "1.0.0" 372 | resolved "https://registry.yarnpkg.com/@types/btoa-lite/-/btoa-lite-1.0.0.tgz#e190a5a548e0b348adb0df9ac7fa5f1151c7cca4" 373 | integrity sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg== 374 | 375 | "@types/config@^3.3.0": 376 | version "3.3.0" 377 | resolved "https://registry.yarnpkg.com/@types/config/-/config-3.3.0.tgz#2b632cb37c639bf8d57054561f5a77d31dcebc1e" 378 | integrity sha512-9kZSbl3/X3TVNowLCu5HFQdQmD+4287Om55avknEYkuo6R2dDrsp/EXEHUFvfYeG7m1eJ0WYGj+cbcUIhARJAQ== 379 | 380 | "@types/dotenv@^8.2.0": 381 | version "8.2.0" 382 | resolved "https://registry.yarnpkg.com/@types/dotenv/-/dotenv-8.2.0.tgz#5cd64710c3c98e82d9d15844375a33bf1b45d053" 383 | integrity sha512-ylSC9GhfRH7m1EUXBXofhgx4lUWmFeQDINW5oLuS+gxWdfUeW4zJdeVTYVkexEW+e2VUvlZR2kGnGGipAWR7kw== 384 | dependencies: 385 | dotenv "*" 386 | 387 | "@types/json-schema@^7.0.9": 388 | version "7.0.11" 389 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 390 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 391 | 392 | "@types/jsonwebtoken@^9.0.0": 393 | version "9.0.1" 394 | resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz#29b1369c4774200d6d6f63135bf3d1ba3ef997a4" 395 | integrity sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw== 396 | dependencies: 397 | "@types/node" "*" 398 | 399 | "@types/lru-cache@^5.1.0": 400 | version "5.1.1" 401 | resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" 402 | integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== 403 | 404 | "@types/node-fetch@^2.5.10": 405 | version "2.6.2" 406 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" 407 | integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== 408 | dependencies: 409 | "@types/node" "*" 410 | form-data "^3.0.0" 411 | 412 | "@types/node@*", "@types/node@^20.1.0": 413 | version "20.4.2" 414 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9" 415 | integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw== 416 | 417 | "@types/semver@^7.3.12": 418 | version "7.3.13" 419 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" 420 | integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== 421 | 422 | "@typescript-eslint/eslint-plugin@^5.49.0": 423 | version "5.62.0" 424 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" 425 | integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== 426 | dependencies: 427 | "@eslint-community/regexpp" "^4.4.0" 428 | "@typescript-eslint/scope-manager" "5.62.0" 429 | "@typescript-eslint/type-utils" "5.62.0" 430 | "@typescript-eslint/utils" "5.62.0" 431 | debug "^4.3.4" 432 | graphemer "^1.4.0" 433 | ignore "^5.2.0" 434 | natural-compare-lite "^1.4.0" 435 | semver "^7.3.7" 436 | tsutils "^3.21.0" 437 | 438 | "@typescript-eslint/parser@^5.51.0": 439 | version "5.59.5" 440 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.5.tgz#63064f5eafbdbfb5f9dfbf5c4503cdf949852981" 441 | integrity sha512-NJXQC4MRnF9N9yWqQE2/KLRSOLvrrlZb48NGVfBa+RuPMN6B7ZcK5jZOvhuygv4D64fRKnZI4L4p8+M+rfeQuw== 442 | dependencies: 443 | "@typescript-eslint/scope-manager" "5.59.5" 444 | "@typescript-eslint/types" "5.59.5" 445 | "@typescript-eslint/typescript-estree" "5.59.5" 446 | debug "^4.3.4" 447 | 448 | "@typescript-eslint/scope-manager@5.59.5": 449 | version "5.59.5" 450 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.5.tgz#33ffc7e8663f42cfaac873de65ebf65d2bce674d" 451 | integrity sha512-jVecWwnkX6ZgutF+DovbBJirZcAxgxC0EOHYt/niMROf8p4PwxxG32Qdhj/iIQQIuOflLjNkxoXyArkcIP7C3A== 452 | dependencies: 453 | "@typescript-eslint/types" "5.59.5" 454 | "@typescript-eslint/visitor-keys" "5.59.5" 455 | 456 | "@typescript-eslint/scope-manager@5.62.0": 457 | version "5.62.0" 458 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" 459 | integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== 460 | dependencies: 461 | "@typescript-eslint/types" "5.62.0" 462 | "@typescript-eslint/visitor-keys" "5.62.0" 463 | 464 | "@typescript-eslint/type-utils@5.62.0": 465 | version "5.62.0" 466 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" 467 | integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== 468 | dependencies: 469 | "@typescript-eslint/typescript-estree" "5.62.0" 470 | "@typescript-eslint/utils" "5.62.0" 471 | debug "^4.3.4" 472 | tsutils "^3.21.0" 473 | 474 | "@typescript-eslint/types@5.59.5": 475 | version "5.59.5" 476 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.5.tgz#e63c5952532306d97c6ea432cee0981f6d2258c7" 477 | integrity sha512-xkfRPHbqSH4Ggx4eHRIO/eGL8XL4Ysb4woL8c87YuAo8Md7AUjyWKa9YMwTL519SyDPrfEgKdewjkxNCVeJW7w== 478 | 479 | "@typescript-eslint/types@5.62.0": 480 | version "5.62.0" 481 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" 482 | integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== 483 | 484 | "@typescript-eslint/typescript-estree@5.59.5": 485 | version "5.59.5" 486 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.5.tgz#9b252ce55dd765e972a7a2f99233c439c5101e42" 487 | integrity sha512-+XXdLN2CZLZcD/mO7mQtJMvCkzRfmODbeSKuMY/yXbGkzvA9rJyDY5qDYNoiz2kP/dmyAxXquL2BvLQLJFPQIg== 488 | dependencies: 489 | "@typescript-eslint/types" "5.59.5" 490 | "@typescript-eslint/visitor-keys" "5.59.5" 491 | debug "^4.3.4" 492 | globby "^11.1.0" 493 | is-glob "^4.0.3" 494 | semver "^7.3.7" 495 | tsutils "^3.21.0" 496 | 497 | "@typescript-eslint/typescript-estree@5.62.0": 498 | version "5.62.0" 499 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" 500 | integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== 501 | dependencies: 502 | "@typescript-eslint/types" "5.62.0" 503 | "@typescript-eslint/visitor-keys" "5.62.0" 504 | debug "^4.3.4" 505 | globby "^11.1.0" 506 | is-glob "^4.0.3" 507 | semver "^7.3.7" 508 | tsutils "^3.21.0" 509 | 510 | "@typescript-eslint/utils@5.62.0": 511 | version "5.62.0" 512 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" 513 | integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== 514 | dependencies: 515 | "@eslint-community/eslint-utils" "^4.2.0" 516 | "@types/json-schema" "^7.0.9" 517 | "@types/semver" "^7.3.12" 518 | "@typescript-eslint/scope-manager" "5.62.0" 519 | "@typescript-eslint/types" "5.62.0" 520 | "@typescript-eslint/typescript-estree" "5.62.0" 521 | eslint-scope "^5.1.1" 522 | semver "^7.3.7" 523 | 524 | "@typescript-eslint/visitor-keys@5.59.5": 525 | version "5.59.5" 526 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.5.tgz#ba5b8d6791a13cf9fea6716af1e7626434b29b9b" 527 | integrity sha512-qL+Oz+dbeBRTeyJTIy0eniD3uvqU7x+y1QceBismZ41hd4aBSRh8UAw4pZP0+XzLuPZmx4raNMq/I+59W2lXKA== 528 | dependencies: 529 | "@typescript-eslint/types" "5.59.5" 530 | eslint-visitor-keys "^3.3.0" 531 | 532 | "@typescript-eslint/visitor-keys@5.62.0": 533 | version "5.62.0" 534 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" 535 | integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== 536 | dependencies: 537 | "@typescript-eslint/types" "5.62.0" 538 | eslint-visitor-keys "^3.3.0" 539 | 540 | acorn-jsx@^5.3.2: 541 | version "5.3.2" 542 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 543 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 544 | 545 | acorn-walk@^8.1.1: 546 | version "8.2.0" 547 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 548 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 549 | 550 | acorn@^8.4.1: 551 | version "8.8.2" 552 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" 553 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== 554 | 555 | acorn@^8.9.0: 556 | version "8.10.0" 557 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" 558 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== 559 | 560 | aggregate-error@^3.1.0: 561 | version "3.1.0" 562 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" 563 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== 564 | dependencies: 565 | clean-stack "^2.0.0" 566 | indent-string "^4.0.0" 567 | 568 | ajv@^6.10.0, ajv@^6.12.4: 569 | version "6.12.6" 570 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 571 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 572 | dependencies: 573 | fast-deep-equal "^3.1.1" 574 | fast-json-stable-stringify "^2.0.0" 575 | json-schema-traverse "^0.4.1" 576 | uri-js "^4.2.2" 577 | 578 | ansi-escapes@^6.0.0: 579 | version "6.0.0" 580 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.0.0.tgz#68c580e87a489f6df3d761028bb93093fde6bd8a" 581 | integrity sha512-IG23inYII3dWlU2EyiAiGj6Bwal5GzsgPMwjYGvc1HPE2dgbj4ZB5ToWBKSquKw74nB3TIuOwaI6/jSULzfgrw== 582 | dependencies: 583 | type-fest "^3.0.0" 584 | 585 | ansi-regex@^5.0.1: 586 | version "5.0.1" 587 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 588 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 589 | 590 | ansi-regex@^6.0.1: 591 | version "6.0.1" 592 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" 593 | integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== 594 | 595 | ansi-styles@^4.1.0: 596 | version "4.3.0" 597 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 598 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 599 | dependencies: 600 | color-convert "^2.0.1" 601 | 602 | ansi-styles@^6.1.0: 603 | version "6.2.1" 604 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" 605 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== 606 | 607 | arg@^4.1.0: 608 | version "4.1.3" 609 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 610 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 611 | 612 | argparse@^1.0.7: 613 | version "1.0.10" 614 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 615 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 616 | dependencies: 617 | sprintf-js "~1.0.2" 618 | 619 | argparse@^2.0.1: 620 | version "2.0.1" 621 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 622 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 623 | 624 | array-union@^2.1.0: 625 | version "2.1.0" 626 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 627 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 628 | 629 | asynckit@^0.4.0: 630 | version "0.4.0" 631 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 632 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 633 | 634 | axios@^1.3.2: 635 | version "1.4.0" 636 | resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" 637 | integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== 638 | dependencies: 639 | follow-redirects "^1.15.0" 640 | form-data "^4.0.0" 641 | proxy-from-env "^1.1.0" 642 | 643 | balanced-match@^1.0.0: 644 | version "1.0.2" 645 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 646 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 647 | 648 | base64-js@^1.3.1: 649 | version "1.5.1" 650 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 651 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 652 | 653 | before-after-hook@^2.2.0: 654 | version "2.2.3" 655 | resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" 656 | integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== 657 | 658 | bl@^5.0.0: 659 | version "5.1.0" 660 | resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" 661 | integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== 662 | dependencies: 663 | buffer "^6.0.3" 664 | inherits "^2.0.4" 665 | readable-stream "^3.4.0" 666 | 667 | bottleneck@^2.15.3: 668 | version "2.19.5" 669 | resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" 670 | integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== 671 | 672 | brace-expansion@^1.1.7: 673 | version "1.1.11" 674 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 675 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 676 | dependencies: 677 | balanced-match "^1.0.0" 678 | concat-map "0.0.1" 679 | 680 | braces@^3.0.2: 681 | version "3.0.2" 682 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 683 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 684 | dependencies: 685 | fill-range "^7.0.1" 686 | 687 | btoa-lite@^1.0.0: 688 | version "1.0.0" 689 | resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" 690 | integrity sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA== 691 | 692 | buffer-equal-constant-time@1.0.1: 693 | version "1.0.1" 694 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" 695 | integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== 696 | 697 | buffer@^6.0.3: 698 | version "6.0.3" 699 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" 700 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 701 | dependencies: 702 | base64-js "^1.3.1" 703 | ieee754 "^1.2.1" 704 | 705 | callsites@^3.0.0: 706 | version "3.1.0" 707 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 708 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 709 | 710 | chalk@^4.0.0: 711 | version "4.1.2" 712 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 713 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 714 | dependencies: 715 | ansi-styles "^4.1.0" 716 | supports-color "^7.1.0" 717 | 718 | chalk@^5.0.0, chalk@^5.1.2: 719 | version "5.2.0" 720 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" 721 | integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== 722 | 723 | chardet@^0.7.0: 724 | version "0.7.0" 725 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 726 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 727 | 728 | clean-stack@^2.0.0: 729 | version "2.2.0" 730 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" 731 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== 732 | 733 | cli-cursor@^4.0.0: 734 | version "4.0.0" 735 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" 736 | integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== 737 | dependencies: 738 | restore-cursor "^4.0.0" 739 | 740 | cli-spinners@^2.6.1: 741 | version "2.7.0" 742 | resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" 743 | integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== 744 | 745 | cli-width@^4.0.0: 746 | version "4.0.0" 747 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.0.0.tgz#a5622f6a3b0a9e3e711a25f099bf2399f608caf6" 748 | integrity sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw== 749 | 750 | clone@^1.0.2: 751 | version "1.0.4" 752 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" 753 | integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== 754 | 755 | color-convert@^2.0.1: 756 | version "2.0.1" 757 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 758 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 759 | dependencies: 760 | color-name "~1.1.4" 761 | 762 | color-name@~1.1.4: 763 | version "1.1.4" 764 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 765 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 766 | 767 | combined-stream@^1.0.8: 768 | version "1.0.8" 769 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 770 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 771 | dependencies: 772 | delayed-stream "~1.0.0" 773 | 774 | commander@^11.0.0: 775 | version "11.0.0" 776 | resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" 777 | integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== 778 | 779 | concat-map@0.0.1: 780 | version "0.0.1" 781 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 782 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 783 | 784 | config@^3.3.9: 785 | version "3.3.9" 786 | resolved "https://registry.yarnpkg.com/config/-/config-3.3.9.tgz#27fae95b43e0e1d5723e54143c090954d8e49572" 787 | integrity sha512-G17nfe+cY7kR0wVpc49NCYvNtelm/pPy8czHoFkAgtV1lkmcp7DHtWCdDu+C9Z7gb2WVqa9Tm3uF9aKaPbCfhg== 788 | dependencies: 789 | json5 "^2.2.3" 790 | 791 | create-require@^1.1.0: 792 | version "1.1.1" 793 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 794 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 795 | 796 | cross-fetch@^3.1.5: 797 | version "3.1.5" 798 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" 799 | integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== 800 | dependencies: 801 | node-fetch "2.6.7" 802 | 803 | cross-spawn@^7.0.2: 804 | version "7.0.3" 805 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 806 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 807 | dependencies: 808 | path-key "^3.1.0" 809 | shebang-command "^2.0.0" 810 | which "^2.0.1" 811 | 812 | debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: 813 | version "4.3.4" 814 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 815 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 816 | dependencies: 817 | ms "2.1.2" 818 | 819 | deep-is@^0.1.3: 820 | version "0.1.4" 821 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 822 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 823 | 824 | defaults@^1.0.3: 825 | version "1.0.4" 826 | resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" 827 | integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== 828 | dependencies: 829 | clone "^1.0.2" 830 | 831 | delayed-stream@~1.0.0: 832 | version "1.0.0" 833 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 834 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 835 | 836 | deprecation@^2.0.0, deprecation@^2.3.1: 837 | version "2.3.1" 838 | resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" 839 | integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== 840 | 841 | diff@^4.0.1: 842 | version "4.0.2" 843 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 844 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 845 | 846 | dir-glob@^3.0.1: 847 | version "3.0.1" 848 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 849 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 850 | dependencies: 851 | path-type "^4.0.0" 852 | 853 | doctrine@^3.0.0: 854 | version "3.0.0" 855 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 856 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 857 | dependencies: 858 | esutils "^2.0.2" 859 | 860 | dotenv@*, dotenv@^16.0.1: 861 | version "16.0.3" 862 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" 863 | integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== 864 | 865 | eastasianwidth@^0.2.0: 866 | version "0.2.0" 867 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" 868 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== 869 | 870 | ecdsa-sig-formatter@1.0.11: 871 | version "1.0.11" 872 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" 873 | integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== 874 | dependencies: 875 | safe-buffer "^5.0.1" 876 | 877 | emoji-regex@^9.2.2: 878 | version "9.2.2" 879 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" 880 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 881 | 882 | escape-string-regexp@^4.0.0: 883 | version "4.0.0" 884 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 885 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 886 | 887 | escape-string-regexp@^5.0.0: 888 | version "5.0.0" 889 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" 890 | integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== 891 | 892 | eslint-scope@^5.1.1: 893 | version "5.1.1" 894 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 895 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 896 | dependencies: 897 | esrecurse "^4.3.0" 898 | estraverse "^4.1.1" 899 | 900 | eslint-scope@^7.2.0: 901 | version "7.2.0" 902 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" 903 | integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== 904 | dependencies: 905 | esrecurse "^4.3.0" 906 | estraverse "^5.2.0" 907 | 908 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: 909 | version "3.4.1" 910 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" 911 | integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== 912 | 913 | eslint@^8.33.0: 914 | version "8.44.0" 915 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500" 916 | integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== 917 | dependencies: 918 | "@eslint-community/eslint-utils" "^4.2.0" 919 | "@eslint-community/regexpp" "^4.4.0" 920 | "@eslint/eslintrc" "^2.1.0" 921 | "@eslint/js" "8.44.0" 922 | "@humanwhocodes/config-array" "^0.11.10" 923 | "@humanwhocodes/module-importer" "^1.0.1" 924 | "@nodelib/fs.walk" "^1.2.8" 925 | ajv "^6.10.0" 926 | chalk "^4.0.0" 927 | cross-spawn "^7.0.2" 928 | debug "^4.3.2" 929 | doctrine "^3.0.0" 930 | escape-string-regexp "^4.0.0" 931 | eslint-scope "^7.2.0" 932 | eslint-visitor-keys "^3.4.1" 933 | espree "^9.6.0" 934 | esquery "^1.4.2" 935 | esutils "^2.0.2" 936 | fast-deep-equal "^3.1.3" 937 | file-entry-cache "^6.0.1" 938 | find-up "^5.0.0" 939 | glob-parent "^6.0.2" 940 | globals "^13.19.0" 941 | graphemer "^1.4.0" 942 | ignore "^5.2.0" 943 | import-fresh "^3.0.0" 944 | imurmurhash "^0.1.4" 945 | is-glob "^4.0.0" 946 | is-path-inside "^3.0.3" 947 | js-yaml "^4.1.0" 948 | json-stable-stringify-without-jsonify "^1.0.1" 949 | levn "^0.4.1" 950 | lodash.merge "^4.6.2" 951 | minimatch "^3.1.2" 952 | natural-compare "^1.4.0" 953 | optionator "^0.9.3" 954 | strip-ansi "^6.0.1" 955 | strip-json-comments "^3.1.0" 956 | text-table "^0.2.0" 957 | 958 | espree@^9.6.0: 959 | version "9.6.0" 960 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f" 961 | integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A== 962 | dependencies: 963 | acorn "^8.9.0" 964 | acorn-jsx "^5.3.2" 965 | eslint-visitor-keys "^3.4.1" 966 | 967 | esprima@^4.0.0: 968 | version "4.0.1" 969 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 970 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 971 | 972 | esquery@^1.4.2: 973 | version "1.5.0" 974 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 975 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 976 | dependencies: 977 | estraverse "^5.1.0" 978 | 979 | esrecurse@^4.3.0: 980 | version "4.3.0" 981 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 982 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 983 | dependencies: 984 | estraverse "^5.2.0" 985 | 986 | estraverse@^4.1.1: 987 | version "4.3.0" 988 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 989 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 990 | 991 | estraverse@^5.1.0, estraverse@^5.2.0: 992 | version "5.3.0" 993 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 994 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 995 | 996 | esutils@^2.0.2: 997 | version "2.0.3" 998 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 999 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1000 | 1001 | extend-shallow@^2.0.1: 1002 | version "2.0.1" 1003 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 1004 | integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== 1005 | dependencies: 1006 | is-extendable "^0.1.0" 1007 | 1008 | external-editor@^3.0.3: 1009 | version "3.1.0" 1010 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" 1011 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== 1012 | dependencies: 1013 | chardet "^0.7.0" 1014 | iconv-lite "^0.4.24" 1015 | tmp "^0.0.33" 1016 | 1017 | extract-files@^9.0.0: 1018 | version "9.0.0" 1019 | resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" 1020 | integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== 1021 | 1022 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 1023 | version "3.1.3" 1024 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1025 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1026 | 1027 | fast-glob@^3.2.9: 1028 | version "3.2.12" 1029 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" 1030 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 1031 | dependencies: 1032 | "@nodelib/fs.stat" "^2.0.2" 1033 | "@nodelib/fs.walk" "^1.2.3" 1034 | glob-parent "^5.1.2" 1035 | merge2 "^1.3.0" 1036 | micromatch "^4.0.4" 1037 | 1038 | fast-json-stable-stringify@^2.0.0: 1039 | version "2.1.0" 1040 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1041 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1042 | 1043 | fast-levenshtein@^2.0.6: 1044 | version "2.0.6" 1045 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1046 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 1047 | 1048 | fastq@^1.6.0: 1049 | version "1.15.0" 1050 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 1051 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 1052 | dependencies: 1053 | reusify "^1.0.4" 1054 | 1055 | figures@^5.0.0: 1056 | version "5.0.0" 1057 | resolved "https://registry.yarnpkg.com/figures/-/figures-5.0.0.tgz#126cd055052dea699f8a54e8c9450e6ecfc44d5f" 1058 | integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== 1059 | dependencies: 1060 | escape-string-regexp "^5.0.0" 1061 | is-unicode-supported "^1.2.0" 1062 | 1063 | file-entry-cache@^6.0.1: 1064 | version "6.0.1" 1065 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 1066 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 1067 | dependencies: 1068 | flat-cache "^3.0.4" 1069 | 1070 | fill-range@^7.0.1: 1071 | version "7.0.1" 1072 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1073 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1074 | dependencies: 1075 | to-regex-range "^5.0.1" 1076 | 1077 | find-up@^5.0.0: 1078 | version "5.0.0" 1079 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 1080 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 1081 | dependencies: 1082 | locate-path "^6.0.0" 1083 | path-exists "^4.0.0" 1084 | 1085 | flat-cache@^3.0.4: 1086 | version "3.0.4" 1087 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 1088 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 1089 | dependencies: 1090 | flatted "^3.1.0" 1091 | rimraf "^3.0.2" 1092 | 1093 | flatted@^3.1.0: 1094 | version "3.2.7" 1095 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" 1096 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 1097 | 1098 | follow-redirects@^1.15.0: 1099 | version "1.15.2" 1100 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" 1101 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== 1102 | 1103 | form-data@^3.0.0: 1104 | version "3.0.1" 1105 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" 1106 | integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== 1107 | dependencies: 1108 | asynckit "^0.4.0" 1109 | combined-stream "^1.0.8" 1110 | mime-types "^2.1.12" 1111 | 1112 | form-data@^4.0.0: 1113 | version "4.0.0" 1114 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 1115 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 1116 | dependencies: 1117 | asynckit "^0.4.0" 1118 | combined-stream "^1.0.8" 1119 | mime-types "^2.1.12" 1120 | 1121 | fromentries@^1.3.1: 1122 | version "1.3.2" 1123 | resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" 1124 | integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== 1125 | 1126 | fs.realpath@^1.0.0: 1127 | version "1.0.0" 1128 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1129 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1130 | 1131 | glob-parent@^5.1.2: 1132 | version "5.1.2" 1133 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1134 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1135 | dependencies: 1136 | is-glob "^4.0.1" 1137 | 1138 | glob-parent@^6.0.2: 1139 | version "6.0.2" 1140 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 1141 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1142 | dependencies: 1143 | is-glob "^4.0.3" 1144 | 1145 | glob@^7.1.3: 1146 | version "7.2.3" 1147 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1148 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1149 | dependencies: 1150 | fs.realpath "^1.0.0" 1151 | inflight "^1.0.4" 1152 | inherits "2" 1153 | minimatch "^3.1.1" 1154 | once "^1.3.0" 1155 | path-is-absolute "^1.0.0" 1156 | 1157 | globals@^13.19.0: 1158 | version "13.19.0" 1159 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" 1160 | integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== 1161 | dependencies: 1162 | type-fest "^0.20.2" 1163 | 1164 | globby@^11.1.0: 1165 | version "11.1.0" 1166 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 1167 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1168 | dependencies: 1169 | array-union "^2.1.0" 1170 | dir-glob "^3.0.1" 1171 | fast-glob "^3.2.9" 1172 | ignore "^5.2.0" 1173 | merge2 "^1.4.1" 1174 | slash "^3.0.0" 1175 | 1176 | graphemer@^1.4.0: 1177 | version "1.4.0" 1178 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 1179 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 1180 | 1181 | graphql-request@^5.1.0: 1182 | version "5.1.0" 1183 | resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-5.1.0.tgz#dbc8feee27d21b993cd5da2d3af67821827b240a" 1184 | integrity sha512-0OeRVYigVwIiXhNmqnPDt+JhMzsjinxHE7TVy3Lm6jUzav0guVcL0lfSbi6jVTRAxcbwgyr6yrZioSHxf9gHzw== 1185 | dependencies: 1186 | "@graphql-typed-document-node/core" "^3.1.1" 1187 | cross-fetch "^3.1.5" 1188 | extract-files "^9.0.0" 1189 | form-data "^3.0.0" 1190 | 1191 | graphql@^16.6.0: 1192 | version "16.6.0" 1193 | resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" 1194 | integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== 1195 | 1196 | gray-matter@^4.0.3: 1197 | version "4.0.3" 1198 | resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" 1199 | integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== 1200 | dependencies: 1201 | js-yaml "^3.13.1" 1202 | kind-of "^6.0.2" 1203 | section-matter "^1.0.0" 1204 | strip-bom-string "^1.0.0" 1205 | 1206 | has-flag@^4.0.0: 1207 | version "4.0.0" 1208 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1209 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1210 | 1211 | iconv-lite@^0.4.24: 1212 | version "0.4.24" 1213 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1214 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1215 | dependencies: 1216 | safer-buffer ">= 2.1.2 < 3" 1217 | 1218 | ieee754@^1.2.1: 1219 | version "1.2.1" 1220 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 1221 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 1222 | 1223 | ignore@^5.2.0: 1224 | version "5.2.4" 1225 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 1226 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 1227 | 1228 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1229 | version "3.3.0" 1230 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1231 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1232 | dependencies: 1233 | parent-module "^1.0.0" 1234 | resolve-from "^4.0.0" 1235 | 1236 | imurmurhash@^0.1.4: 1237 | version "0.1.4" 1238 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1239 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1240 | 1241 | indent-string@^4.0.0: 1242 | version "4.0.0" 1243 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" 1244 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 1245 | 1246 | inflight@^1.0.4: 1247 | version "1.0.6" 1248 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1249 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1250 | dependencies: 1251 | once "^1.3.0" 1252 | wrappy "1" 1253 | 1254 | inherits@2, inherits@^2.0.3, inherits@^2.0.4: 1255 | version "2.0.4" 1256 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1257 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1258 | 1259 | inquirer@^9.1.4: 1260 | version "9.1.4" 1261 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-9.1.4.tgz#482da8803670a64bd942bc5166a9547a19d41474" 1262 | integrity sha512-9hiJxE5gkK/cM2d1mTEnuurGTAoHebbkX0BYl3h7iEg7FYfuNIom+nDfBCSWtvSnoSrWCeBxqqBZu26xdlJlXA== 1263 | dependencies: 1264 | ansi-escapes "^6.0.0" 1265 | chalk "^5.1.2" 1266 | cli-cursor "^4.0.0" 1267 | cli-width "^4.0.0" 1268 | external-editor "^3.0.3" 1269 | figures "^5.0.0" 1270 | lodash "^4.17.21" 1271 | mute-stream "0.0.8" 1272 | ora "^6.1.2" 1273 | run-async "^2.4.0" 1274 | rxjs "^7.5.7" 1275 | string-width "^5.1.2" 1276 | strip-ansi "^7.0.1" 1277 | through "^2.3.6" 1278 | wrap-ansi "^8.0.1" 1279 | 1280 | is-extendable@^0.1.0: 1281 | version "0.1.1" 1282 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1283 | integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== 1284 | 1285 | is-extglob@^2.1.1: 1286 | version "2.1.1" 1287 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1288 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1289 | 1290 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 1291 | version "4.0.3" 1292 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1293 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1294 | dependencies: 1295 | is-extglob "^2.1.1" 1296 | 1297 | is-interactive@^2.0.0: 1298 | version "2.0.0" 1299 | resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" 1300 | integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== 1301 | 1302 | is-number@^7.0.0: 1303 | version "7.0.0" 1304 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1305 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1306 | 1307 | is-path-inside@^3.0.3: 1308 | version "3.0.3" 1309 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1310 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1311 | 1312 | is-plain-object@^5.0.0: 1313 | version "5.0.0" 1314 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" 1315 | integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== 1316 | 1317 | is-unicode-supported@^1.1.0, is-unicode-supported@^1.2.0: 1318 | version "1.3.0" 1319 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" 1320 | integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== 1321 | 1322 | isexe@^2.0.0: 1323 | version "2.0.0" 1324 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1325 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1326 | 1327 | js-yaml@^3.13.1: 1328 | version "3.14.1" 1329 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 1330 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1331 | dependencies: 1332 | argparse "^1.0.7" 1333 | esprima "^4.0.0" 1334 | 1335 | js-yaml@^4.1.0: 1336 | version "4.1.0" 1337 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1338 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1339 | dependencies: 1340 | argparse "^2.0.1" 1341 | 1342 | json-schema-traverse@^0.4.1: 1343 | version "0.4.1" 1344 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1345 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1346 | 1347 | json-stable-stringify-without-jsonify@^1.0.1: 1348 | version "1.0.1" 1349 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1350 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1351 | 1352 | json5@^2.2.3: 1353 | version "2.2.3" 1354 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 1355 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== 1356 | 1357 | jsonwebtoken@^9.0.0: 1358 | version "9.0.0" 1359 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d" 1360 | integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw== 1361 | dependencies: 1362 | jws "^3.2.2" 1363 | lodash "^4.17.21" 1364 | ms "^2.1.1" 1365 | semver "^7.3.8" 1366 | 1367 | jwa@^1.4.1: 1368 | version "1.4.1" 1369 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" 1370 | integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== 1371 | dependencies: 1372 | buffer-equal-constant-time "1.0.1" 1373 | ecdsa-sig-formatter "1.0.11" 1374 | safe-buffer "^5.0.1" 1375 | 1376 | jws@^3.2.2: 1377 | version "3.2.2" 1378 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" 1379 | integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== 1380 | dependencies: 1381 | jwa "^1.4.1" 1382 | safe-buffer "^5.0.1" 1383 | 1384 | kind-of@^6.0.0, kind-of@^6.0.2: 1385 | version "6.0.3" 1386 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" 1387 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 1388 | 1389 | levn@^0.4.1: 1390 | version "0.4.1" 1391 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1392 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1393 | dependencies: 1394 | prelude-ls "^1.2.1" 1395 | type-check "~0.4.0" 1396 | 1397 | locate-path@^6.0.0: 1398 | version "6.0.0" 1399 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1400 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1401 | dependencies: 1402 | p-locate "^5.0.0" 1403 | 1404 | lodash.merge@^4.6.2: 1405 | version "4.6.2" 1406 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1407 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1408 | 1409 | lodash@^4.17.21: 1410 | version "4.17.21" 1411 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1412 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1413 | 1414 | log-symbols@^5.1.0: 1415 | version "5.1.0" 1416 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" 1417 | integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== 1418 | dependencies: 1419 | chalk "^5.0.0" 1420 | is-unicode-supported "^1.1.0" 1421 | 1422 | lru-cache@^6.0.0: 1423 | version "6.0.0" 1424 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1425 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1426 | dependencies: 1427 | yallist "^4.0.0" 1428 | 1429 | make-error@^1.1.1: 1430 | version "1.3.6" 1431 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 1432 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 1433 | 1434 | markdown-table@^2.0.0: 1435 | version "2.0.0" 1436 | resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" 1437 | integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== 1438 | dependencies: 1439 | repeat-string "^1.0.0" 1440 | 1441 | merge2@^1.3.0, merge2@^1.4.1: 1442 | version "1.4.1" 1443 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1444 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1445 | 1446 | micromatch@^4.0.4: 1447 | version "4.0.5" 1448 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1449 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1450 | dependencies: 1451 | braces "^3.0.2" 1452 | picomatch "^2.3.1" 1453 | 1454 | mime-db@1.52.0: 1455 | version "1.52.0" 1456 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 1457 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1458 | 1459 | mime-types@^2.1.12: 1460 | version "2.1.35" 1461 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 1462 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1463 | dependencies: 1464 | mime-db "1.52.0" 1465 | 1466 | mimic-fn@^2.1.0: 1467 | version "2.1.0" 1468 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1469 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1470 | 1471 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 1472 | version "3.1.2" 1473 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1474 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1475 | dependencies: 1476 | brace-expansion "^1.1.7" 1477 | 1478 | ms@2.1.2: 1479 | version "2.1.2" 1480 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1481 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1482 | 1483 | ms@^2.1.1: 1484 | version "2.1.3" 1485 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1486 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1487 | 1488 | mute-stream@0.0.8: 1489 | version "0.0.8" 1490 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" 1491 | integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== 1492 | 1493 | nanoid@3.3.4: 1494 | version "3.3.4" 1495 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" 1496 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== 1497 | 1498 | natural-compare-lite@^1.4.0: 1499 | version "1.4.0" 1500 | resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" 1501 | integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== 1502 | 1503 | natural-compare@^1.4.0: 1504 | version "1.4.0" 1505 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1506 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1507 | 1508 | node-fetch@2.6.7: 1509 | version "2.6.7" 1510 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 1511 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 1512 | dependencies: 1513 | whatwg-url "^5.0.0" 1514 | 1515 | node-fetch@^2.6.1, node-fetch@^2.6.7: 1516 | version "2.6.8" 1517 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.8.tgz#a68d30b162bc1d8fd71a367e81b997e1f4d4937e" 1518 | integrity sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg== 1519 | dependencies: 1520 | whatwg-url "^5.0.0" 1521 | 1522 | notion-to-md@^2.5.5: 1523 | version "2.5.5" 1524 | resolved "https://registry.yarnpkg.com/notion-to-md/-/notion-to-md-2.5.5.tgz#b022cd9d6f01125762b85e26e0a41ae15410bd12" 1525 | integrity sha512-EdzuNZpJyc+287ItRALOld90RkshWBDiSA0WThf75z98Y8cyynhu6Hg+h377eD5K4UOSQHy5K0SUV4vGdCxCiA== 1526 | dependencies: 1527 | markdown-table "^2.0.0" 1528 | 1529 | octokit@^2.0.11: 1530 | version "2.0.14" 1531 | resolved "https://registry.yarnpkg.com/octokit/-/octokit-2.0.14.tgz#e2057097a6c9cac3e7724a4365b450b7c694a6a4" 1532 | integrity sha512-z6cgZBFxirpFEQ1La8Lg83GCs5hOV2EPpkYYdjsGNbfQMv8qUGjq294MiRBCbZqLufviakGsPUxaNKe3JrPmsA== 1533 | dependencies: 1534 | "@octokit/app" "^13.1.1" 1535 | "@octokit/core" "^4.0.4" 1536 | "@octokit/oauth-app" "^4.0.6" 1537 | "@octokit/plugin-paginate-rest" "^6.0.0" 1538 | "@octokit/plugin-rest-endpoint-methods" "^7.0.0" 1539 | "@octokit/plugin-retry" "^4.0.3" 1540 | "@octokit/plugin-throttling" "^5.0.0" 1541 | "@octokit/types" "^9.0.0" 1542 | 1543 | once@^1.3.0, once@^1.4.0: 1544 | version "1.4.0" 1545 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1546 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1547 | dependencies: 1548 | wrappy "1" 1549 | 1550 | onetime@^5.1.0: 1551 | version "5.1.2" 1552 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 1553 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1554 | dependencies: 1555 | mimic-fn "^2.1.0" 1556 | 1557 | optionator@^0.9.3: 1558 | version "0.9.3" 1559 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" 1560 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== 1561 | dependencies: 1562 | "@aashutoshrathi/word-wrap" "^1.2.3" 1563 | deep-is "^0.1.3" 1564 | fast-levenshtein "^2.0.6" 1565 | levn "^0.4.1" 1566 | prelude-ls "^1.2.1" 1567 | type-check "^0.4.0" 1568 | 1569 | ora@^6.1.2: 1570 | version "6.1.2" 1571 | resolved "https://registry.yarnpkg.com/ora/-/ora-6.1.2.tgz#7b3c1356b42fd90fb1dad043d5dbe649388a0bf5" 1572 | integrity sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw== 1573 | dependencies: 1574 | bl "^5.0.0" 1575 | chalk "^5.0.0" 1576 | cli-cursor "^4.0.0" 1577 | cli-spinners "^2.6.1" 1578 | is-interactive "^2.0.0" 1579 | is-unicode-supported "^1.1.0" 1580 | log-symbols "^5.1.0" 1581 | strip-ansi "^7.0.1" 1582 | wcwidth "^1.0.1" 1583 | 1584 | os-tmpdir@~1.0.2: 1585 | version "1.0.2" 1586 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1587 | integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== 1588 | 1589 | p-limit@^3.0.2: 1590 | version "3.1.0" 1591 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1592 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1593 | dependencies: 1594 | yocto-queue "^0.1.0" 1595 | 1596 | p-locate@^5.0.0: 1597 | version "5.0.0" 1598 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1599 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1600 | dependencies: 1601 | p-limit "^3.0.2" 1602 | 1603 | parent-module@^1.0.0: 1604 | version "1.0.1" 1605 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1606 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1607 | dependencies: 1608 | callsites "^3.0.0" 1609 | 1610 | path-exists@^4.0.0: 1611 | version "4.0.0" 1612 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1613 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1614 | 1615 | path-is-absolute@^1.0.0: 1616 | version "1.0.1" 1617 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1618 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1619 | 1620 | path-key@^3.1.0: 1621 | version "3.1.1" 1622 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1623 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1624 | 1625 | path-type@^4.0.0: 1626 | version "4.0.0" 1627 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1628 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1629 | 1630 | picomatch@^2.3.1: 1631 | version "2.3.1" 1632 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1633 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1634 | 1635 | prelude-ls@^1.2.1: 1636 | version "1.2.1" 1637 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1638 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1639 | 1640 | prettier@^2.8.3: 1641 | version "2.8.4" 1642 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" 1643 | integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== 1644 | 1645 | proxy-from-env@^1.1.0: 1646 | version "1.1.0" 1647 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" 1648 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== 1649 | 1650 | punycode@^2.1.0: 1651 | version "2.3.0" 1652 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" 1653 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== 1654 | 1655 | queue-microtask@^1.2.2: 1656 | version "1.2.3" 1657 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1658 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1659 | 1660 | readable-stream@^3.4.0: 1661 | version "3.6.0" 1662 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 1663 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 1664 | dependencies: 1665 | inherits "^2.0.3" 1666 | string_decoder "^1.1.1" 1667 | util-deprecate "^1.0.1" 1668 | 1669 | repeat-string@^1.0.0: 1670 | version "1.6.1" 1671 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1672 | integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== 1673 | 1674 | resolve-from@^4.0.0: 1675 | version "4.0.0" 1676 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1677 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1678 | 1679 | restore-cursor@^4.0.0: 1680 | version "4.0.0" 1681 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" 1682 | integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== 1683 | dependencies: 1684 | onetime "^5.1.0" 1685 | signal-exit "^3.0.2" 1686 | 1687 | reusify@^1.0.4: 1688 | version "1.0.4" 1689 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1690 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1691 | 1692 | rimraf@^3.0.2: 1693 | version "3.0.2" 1694 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1695 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1696 | dependencies: 1697 | glob "^7.1.3" 1698 | 1699 | run-async@^2.4.0: 1700 | version "2.4.1" 1701 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" 1702 | integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== 1703 | 1704 | run-parallel@^1.1.9: 1705 | version "1.2.0" 1706 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1707 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1708 | dependencies: 1709 | queue-microtask "^1.2.2" 1710 | 1711 | rxjs@^7.5.7: 1712 | version "7.8.0" 1713 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" 1714 | integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== 1715 | dependencies: 1716 | tslib "^2.1.0" 1717 | 1718 | safe-buffer@^5.0.1, safe-buffer@~5.2.0: 1719 | version "5.2.1" 1720 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1721 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1722 | 1723 | "safer-buffer@>= 2.1.2 < 3": 1724 | version "2.1.2" 1725 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1726 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1727 | 1728 | section-matter@^1.0.0: 1729 | version "1.0.0" 1730 | resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" 1731 | integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== 1732 | dependencies: 1733 | extend-shallow "^2.0.1" 1734 | kind-of "^6.0.0" 1735 | 1736 | semver@^7.3.7, semver@^7.3.8: 1737 | version "7.5.4" 1738 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" 1739 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 1740 | dependencies: 1741 | lru-cache "^6.0.0" 1742 | 1743 | shebang-command@^2.0.0: 1744 | version "2.0.0" 1745 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1746 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1747 | dependencies: 1748 | shebang-regex "^3.0.0" 1749 | 1750 | shebang-regex@^3.0.0: 1751 | version "3.0.0" 1752 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1753 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1754 | 1755 | signal-exit@^3.0.2: 1756 | version "3.0.7" 1757 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 1758 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 1759 | 1760 | slash@^3.0.0: 1761 | version "3.0.0" 1762 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1763 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1764 | 1765 | slugify@^1.6.5: 1766 | version "1.6.6" 1767 | resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b" 1768 | integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw== 1769 | 1770 | sprintf-js@~1.0.2: 1771 | version "1.0.3" 1772 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1773 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== 1774 | 1775 | string-width@^5.0.1, string-width@^5.1.2: 1776 | version "5.1.2" 1777 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" 1778 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== 1779 | dependencies: 1780 | eastasianwidth "^0.2.0" 1781 | emoji-regex "^9.2.2" 1782 | strip-ansi "^7.0.1" 1783 | 1784 | string_decoder@^1.1.1: 1785 | version "1.3.0" 1786 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 1787 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 1788 | dependencies: 1789 | safe-buffer "~5.2.0" 1790 | 1791 | strip-ansi@^6.0.1: 1792 | version "6.0.1" 1793 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1794 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1795 | dependencies: 1796 | ansi-regex "^5.0.1" 1797 | 1798 | strip-ansi@^7.0.1: 1799 | version "7.0.1" 1800 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" 1801 | integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== 1802 | dependencies: 1803 | ansi-regex "^6.0.1" 1804 | 1805 | strip-bom-string@^1.0.0: 1806 | version "1.0.0" 1807 | resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" 1808 | integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== 1809 | 1810 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1811 | version "3.1.1" 1812 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1813 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1814 | 1815 | supports-color@^7.1.0: 1816 | version "7.2.0" 1817 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1818 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1819 | dependencies: 1820 | has-flag "^4.0.0" 1821 | 1822 | text-table@^0.2.0: 1823 | version "0.2.0" 1824 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1825 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1826 | 1827 | through@^2.3.6: 1828 | version "2.3.8" 1829 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1830 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== 1831 | 1832 | tmp@^0.0.33: 1833 | version "0.0.33" 1834 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 1835 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 1836 | dependencies: 1837 | os-tmpdir "~1.0.2" 1838 | 1839 | to-regex-range@^5.0.1: 1840 | version "5.0.1" 1841 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1842 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1843 | dependencies: 1844 | is-number "^7.0.0" 1845 | 1846 | tr46@~0.0.3: 1847 | version "0.0.3" 1848 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1849 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1850 | 1851 | ts-node@^10.8.2: 1852 | version "10.9.1" 1853 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" 1854 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== 1855 | dependencies: 1856 | "@cspotcode/source-map-support" "^0.8.0" 1857 | "@tsconfig/node10" "^1.0.7" 1858 | "@tsconfig/node12" "^1.0.7" 1859 | "@tsconfig/node14" "^1.0.0" 1860 | "@tsconfig/node16" "^1.0.2" 1861 | acorn "^8.4.1" 1862 | acorn-walk "^8.1.1" 1863 | arg "^4.1.0" 1864 | create-require "^1.1.0" 1865 | diff "^4.0.1" 1866 | make-error "^1.1.1" 1867 | v8-compile-cache-lib "^3.0.1" 1868 | yn "3.1.1" 1869 | 1870 | tslib@^1.8.1: 1871 | version "1.14.1" 1872 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1873 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1874 | 1875 | tslib@^2.1.0: 1876 | version "2.5.0" 1877 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" 1878 | integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== 1879 | 1880 | tsutils@^3.21.0: 1881 | version "3.21.0" 1882 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 1883 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1884 | dependencies: 1885 | tslib "^1.8.1" 1886 | 1887 | type-check@^0.4.0, type-check@~0.4.0: 1888 | version "0.4.0" 1889 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1890 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1891 | dependencies: 1892 | prelude-ls "^1.2.1" 1893 | 1894 | type-fest@^0.20.2: 1895 | version "0.20.2" 1896 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1897 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1898 | 1899 | type-fest@^3.0.0: 1900 | version "3.5.3" 1901 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.5.3.tgz#9f8cc2725aa8978ca65a4e6853e74748b0f2d27b" 1902 | integrity sha512-V2+og4j/rWReWvaFrse3s9g2xvUv/K9Azm/xo6CjIuq7oeGqsoimC7+9/A3tfvNcbQf8RPSVj/HV81fB4DJrjA== 1903 | 1904 | typescript@^4.9.5: 1905 | version "4.9.5" 1906 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" 1907 | integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== 1908 | 1909 | universal-github-app-jwt@^1.1.1: 1910 | version "1.1.1" 1911 | resolved "https://registry.yarnpkg.com/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz#d57cee49020662a95ca750a057e758a1a7190e6e" 1912 | integrity sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w== 1913 | dependencies: 1914 | "@types/jsonwebtoken" "^9.0.0" 1915 | jsonwebtoken "^9.0.0" 1916 | 1917 | universal-user-agent@^6.0.0: 1918 | version "6.0.0" 1919 | resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" 1920 | integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== 1921 | 1922 | uri-js@^4.2.2: 1923 | version "4.4.1" 1924 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1925 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1926 | dependencies: 1927 | punycode "^2.1.0" 1928 | 1929 | util-deprecate@^1.0.1: 1930 | version "1.0.2" 1931 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1932 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 1933 | 1934 | v8-compile-cache-lib@^3.0.1: 1935 | version "3.0.1" 1936 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 1937 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 1938 | 1939 | wcwidth@^1.0.1: 1940 | version "1.0.1" 1941 | resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" 1942 | integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== 1943 | dependencies: 1944 | defaults "^1.0.3" 1945 | 1946 | webidl-conversions@^3.0.0: 1947 | version "3.0.1" 1948 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 1949 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1950 | 1951 | whatwg-url@^5.0.0: 1952 | version "5.0.0" 1953 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 1954 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1955 | dependencies: 1956 | tr46 "~0.0.3" 1957 | webidl-conversions "^3.0.0" 1958 | 1959 | which@^2.0.1: 1960 | version "2.0.2" 1961 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1962 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1963 | dependencies: 1964 | isexe "^2.0.0" 1965 | 1966 | wrap-ansi@^8.0.1: 1967 | version "8.1.0" 1968 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" 1969 | integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== 1970 | dependencies: 1971 | ansi-styles "^6.1.0" 1972 | string-width "^5.0.1" 1973 | strip-ansi "^7.0.1" 1974 | 1975 | wrappy@1: 1976 | version "1.0.2" 1977 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1978 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1979 | 1980 | yallist@^4.0.0: 1981 | version "4.0.0" 1982 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1983 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1984 | 1985 | yn@3.1.1: 1986 | version "3.1.1" 1987 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 1988 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 1989 | 1990 | yocto-queue@^0.1.0: 1991 | version "0.1.0" 1992 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1993 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1994 | --------------------------------------------------------------------------------