├── tsconfig.json ├── .npmignore ├── src ├── global.d.ts ├── vendor │ ├── utils.ts │ ├── pluginUtils.d.ts │ ├── tsWorker.d.ts │ ├── ds │ │ └── createDesignSystem.d.ts │ ├── typescript-vfs.d.ts │ ├── playground.d.ts │ └── sandbox.d.ts └── index.ts ├── README.md ├── .gitignore ├── package.json ├── rollup.config.js ├── CONTRIBUTING.md ├── scripts └── getDTS.js └── yarn.lock /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "noEmit": true, 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | .gitignore 3 | rollup.config.jss 4 | !dist 5 | scripts 6 | .vscode 7 | yarn* 8 | tsconfig.json 9 | rollup* 10 | -------------------------------------------------------------------------------- /src/global.d.ts: -------------------------------------------------------------------------------- 1 | import { Playground } from "./vendor/playground"; 2 | 3 | declare global { 4 | interface Window { 5 | playground: Playground; 6 | } 7 | } 8 | 9 | export {}; 10 | -------------------------------------------------------------------------------- /src/vendor/utils.ts: -------------------------------------------------------------------------------- 1 | /** Get a relative URL for something in your dist folder depending on if you're in dev mode or not */ 2 | export const requireURL = (path: string) => { 3 | // https://unpkg.com/browse/typescript-playground-presentation-mode@0.0.1/dist/x.js => unpkg/browse/typescript-playground-presentation-mode@0.0.1/dist/x 4 | const isDev = document.location.host.includes('localhost') 5 | const prefix = isDev ? 'local/' : 'unpkg/typescript-playground-presentation-mode/dist/' 6 | return prefix + path 7 | } 8 | 9 | /** Use this to make a few dumb element generation funcs */ 10 | export const el = (str: string, el: string, container: Element) => { 11 | const para = document.createElement(el) 12 | para.innerHTML = str 13 | container.appendChild(para) 14 | } 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## TypeScript Playground Plugin 2 | 3 | TypeScript Playground plugin to save on format 4 | 5 | ## Features 6 | 7 | - Format code with prettier with CTRL+S 8 | - Customizable prettier config 9 | - Prevents playground link to be copied into clipboard 10 | - Support for prettifying dts output (check the .D.TS panel) 11 | 12 | ## Running this plugin 13 | 14 | - [Click this link](https://www.typescriptlang.org/play?install-plugin=playground-format-on-save) to install 15 | 16 | or 17 | 18 | - Open up the TypeScript Playground 19 | - Go the "Plugins" in the sidebar 20 | - Look for "Plugins from npm" 21 | - Add "[name]" 22 | - Reload the browser 23 | 24 | Then it will show up as a tab in the sidebar. 25 | 26 | ## Contributing 27 | 28 | See [CONTRIBUTING.md](./CONTRIBUTING.md) for the full details, however, TLDR: 29 | 30 | ```sh 31 | git clone ... 32 | yarn install 33 | yarn start 34 | ``` 35 | 36 | Then tick the box for starting plugin development inside the TypeScript Playground. 37 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # dotenv environment variables file 55 | .env 56 | 57 | # gatsby files 58 | .cache/ 59 | public 60 | 61 | # Mac files 62 | .DS_Store 63 | 64 | # Yarn 65 | yarn-error.log 66 | .pnp/ 67 | .pnp.js 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | dist 71 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "playground-format-on-save", 3 | "version": "0.1.0", 4 | "main": "dist/index.js", 5 | "description": "TypeScript Playground plugin to save on format", 6 | "license": "MIT", 7 | "keywords": [ 8 | "playground-plugin" 9 | ], 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/anuraghazra/playground-format-on-save" 13 | }, 14 | "scripts": { 15 | "build": "rollup -c rollup.config.js", 16 | "compile": "tsc", 17 | "bootstrap": "node scripts/getDTS.js", 18 | "watch": "yarn rollup -c rollup.config.js --watch", 19 | "start": "concurrently -p \"[{name}]\" -n \"ROLLUP,SITE\" -c \"bgBlue.bold,bgMagenta.bold\" \"yarn rollup -c rollup.config.js --watch\" \"yarn serve dist -p 5000\"", 20 | "prepublish": "yarn build", 21 | "postinstall": "yarn bootstrap && yarn build" 22 | }, 23 | "devDependencies": { 24 | "@rollup/plugin-commonjs": "^21.0.1", 25 | "@rollup/plugin-json": "^4.1.0", 26 | "@rollup/plugin-node-resolve": "^13.1.3", 27 | "@rollup/plugin-typescript": "^8.3.0", 28 | "@types/react": "^16.9.23", 29 | "concurrently": "^7.0.0", 30 | "esbuild": "^0.14.21", 31 | "monaco-editor": "^0.29.1", 32 | "node-fetch": "^2.6.0", 33 | "rollup": "^2.67.2", 34 | "rollup-plugin-esbuild": "^4.8.2", 35 | "serve": "^13.0.2", 36 | "typescript": "latest" 37 | }, 38 | "dependencies": { 39 | "chokidar": "^3.5.3", 40 | "prettier": "^3.2.5", 41 | "tslib": "^1.10.0" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import esbuild from "rollup-plugin-esbuild"; 2 | // import typescript from "@rollup/plugin-typescript"; 3 | import node from "@rollup/plugin-node-resolve"; 4 | import commonjs from "@rollup/plugin-commonjs"; 5 | import json from "@rollup/plugin-json"; 6 | 7 | // You can have more root bundles by extending this array 8 | const rootFiles = ["index.ts"]; 9 | 10 | export default rootFiles.map((name) => { 11 | /** @type { import("rollup").RollupOptions } */ 12 | const options = { 13 | input: `src/${name}`, 14 | external: ["typescript"], 15 | output: { 16 | name, 17 | dir: "dist", 18 | format: "amd", 19 | }, 20 | plugins: [esbuild({ tsconfig: 'tsconfig.json' }), commonjs(), node(), json()], 21 | } 22 | 23 | return options; 24 | }); 25 | 26 | /** Note: 27 | * if you end up wanting to import a dependency which relies on typescript, you will need 28 | * settings which adds these extra options. It will re-use the window.ts for the typescript 29 | * dependency, and I've not figured a way to remove fs and path. 30 | * 31 | const options = { 32 | external: ['typescript', 'fs', 'path'], 33 | output: { 34 | paths: { 35 | "typescript":"typescript-sandbox/index", 36 | "fs":"typescript-sandbox/index", 37 | "path":"typescript-sandbox/index", 38 | }, 39 | }, 40 | plugins: [typescript({ tsconfig: "tsconfig.json" }), externalGlobals({ typescript: "window.ts" }), commonjs(), node(), json()] 41 | }; 42 | * 43 | */ 44 | -------------------------------------------------------------------------------- /src/vendor/pluginUtils.d.ts: -------------------------------------------------------------------------------- 1 | import type React from "react"; 2 | /** Creates a set of util functions which is exposed to Plugins to make it easier to build consistent UIs */ 3 | export declare const createUtils: (sb: any, react: typeof React) => { 4 | /** Use this to make a few dumb element generation funcs */ 5 | el: (str: string, elementType: string, container: Element) => HTMLElement; 6 | /** Get a relative URL for something in your dist folder depending on if you're in dev mode or not */ 7 | requireURL: (path: string) => string; 8 | /** The Gatsby copy of React */ 9 | react: typeof React; 10 | /** 11 | * The playground plugin design system. Calling any of the functions will append the 12 | * element to the container you pass into the first param, and return the HTMLElement 13 | */ 14 | createDesignSystem: (container: Element) => { 15 | container: Element; 16 | clear: () => void; 17 | code: (code: string) => HTMLElement; 18 | title: (title: string) => HTMLElement; 19 | subtitle: (subtitle: string) => HTMLElement; 20 | p: (subtitle: string) => HTMLElement; 21 | showEmptyScreen: (message: string) => HTMLDivElement; 22 | listDiags: (model: import("monaco-editor").editor.ITextModel, diags: import("typescript").DiagnosticRelatedInformation[]) => HTMLUListElement; 23 | clearDeltaDecorators: (force?: true | undefined) => void; 24 | localStorageOption: (setting: import("./ds/createDesignSystem").LocalStorageOption) => HTMLLIElement; 25 | showOptionList: (options: import("./ds/createDesignSystem").LocalStorageOption[], style: import("./ds/createDesignSystem").OptionsListConfig) => void; 26 | createTextInput: (config: { 27 | id: string; 28 | placeholder: string; 29 | onChanged?: ((text: string, input: HTMLInputElement) => void) | undefined; 30 | onEnter: (text: string, input: HTMLInputElement) => void; 31 | value?: string | undefined; 32 | keepValueAcrossReloads?: true | undefined; 33 | isEnabled?: ((input: HTMLInputElement) => boolean) | undefined; 34 | }) => HTMLFormElement; 35 | createASTTree: (node: import("typescript").Node, settings?: { 36 | closedByDefault?: true | undefined; 37 | } | undefined) => HTMLDivElement; 38 | button: (settings: { 39 | label: string; 40 | onclick?: ((ev: MouseEvent) => void) | undefined; 41 | }) => HTMLInputElement; 42 | createTabBar: () => HTMLDivElement; 43 | createTabButton: (text: string) => HTMLButtonElement; 44 | declareRestartRequired: (i?: ((key: string) => string) | undefined) => void; 45 | createSubDesignSystem: () => any; 46 | }; 47 | /** Flashes a HTML Element */ 48 | flashHTMLElement: (element: HTMLElement) => void; 49 | /** Add a little red button in the top corner of a plugin tab with a number */ 50 | setNotifications: (pluginID: string, amount: number) => void; 51 | }; 52 | export type PluginUtils = ReturnType; 53 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## Contributing to a TypeScript Playground Plugin 2 | 3 | ## Contributing 4 | 5 | You can use `yarn start` to set up both a copy of Rollup to generate the JS, and Serve to host it. 6 | 7 | ```sh 8 | yarn start 9 | ``` 10 | 11 | Then set up the TypeScript playground to connect to a dev plugin at `http://localhost:5000/`. 12 | 13 | #### Plugin API 14 | 15 | The plugin API is documented in the [interface PlaygroundPlugin in `./src/index.ts`](src/index.ts). 16 | 17 | Roughly: 18 | 19 | - There are a set of mounting and un-mounting functions which you can use to handle your UI in the sidebar 20 | - There are `modelChanged` methods, which are shortcuts to knowing when the code in monaco editor has changed 21 | 22 | ### Sandbox 23 | 24 | The plugins are passed copies of the TypeScript sandbox, which is a high level API wrapper to the [`monaco-editor`](https://microsoft.github.io/monaco-editor/). You can learn more about the sandbox on [the TypeScript website](http://www.typescriptlang.org/v2/dev/sandbox/). 25 | 26 | #### Rollup 27 | 28 | [Rollup](https://rollupjs.org) is a JavaScript bundler, that will take all of the TypeScript + JavaScript code you reference and then create an AMD bundle for it all. AMD bundles are used in Monaco, TypeScript Sandbox and the Playground - so, this is used for consistency with the rest of the ecosystem. 29 | 30 | ## Adding a dependency 31 | 32 | Because most node_modules expect to be running in node, you might have to do some work to get the dependency working on the web. 33 | 34 | The route to handle this is via rollup: 35 | 36 | - add a new dependency via `yarn add xyz` 37 | - import it into your `index.ts` 38 | - run `yarn build` - did it provide some error messages? 39 | - If it did, you may need to edit your `rollup.config.js`. 40 | - You could probably start by taking the [rollup config from `playground-plugin-tsquery`](https://github.com/orta/playground-plugin-tsquery/blob/master/rollup.config.js) and by adding any extra externals and globals. 41 | 42 | #### Serve 43 | 44 | [Serve](https://github.com/zeit/serve) is used to make a web-server for the dist folder. 45 | 46 | ## Deployment 47 | 48 | This module should be deployed to npm when you would like the world to see it, this may mean making your code handle a staging vs production environment (because the URLs will be different.) 49 | 50 | For example, this is how you can handle getting the URL for a CSS file which is included in your `dist` folder: 51 | 52 | ```ts 53 | const isDev = document.location.host.includes("localhost") 54 | const unpkgURL = "https://unpkg.com/typescript-playground-presentation-mode@latest/dist/slideshow.css" 55 | const cssHref = isDev ? "http://localhost:5000/slideshow.css" : unpkgURL 56 | ``` 57 | 58 | ### Post-Deploy 59 | 60 | Once this is deployed, you can test it on the TypeScript playground by passing in the name of your plugin on npm to the custom plugin box. This is effectively your staging environment. 61 | 62 | Once you're happy and it's polished, you can apply to have it in the default plugin list. 63 | 64 | ## Support 65 | 66 | Ask questions either on the TypeScript Website issues](https://github.com/microsoft/TypeScript-Website/issues), or in the [TypeScript Community Discord](https://discord.gg/typescript) - in the TypeScript Website channel. 67 | -------------------------------------------------------------------------------- /src/vendor/tsWorker.d.ts: -------------------------------------------------------------------------------- 1 | import ts from "typescript"; 2 | export declare class TypeScriptWorker implements ts.LanguageServiceHost { 3 | private _ctx; 4 | private _extraLibs; 5 | private _languageService; 6 | private _compilerOptions; 7 | constructor(ctx: any, createData: any); 8 | getCompilationSettings(): ts.CompilerOptions; 9 | getScriptFileNames(): string[]; 10 | private _getModel; 11 | getScriptVersion(fileName: string): string; 12 | getScriptSnapshot(fileName: string): ts.IScriptSnapshot | undefined; 13 | getScriptKind?(fileName: string): ts.ScriptKind; 14 | getCurrentDirectory(): string; 15 | getDefaultLibFileName(options: ts.CompilerOptions): string; 16 | isDefaultLibFileName(fileName: string): boolean; 17 | private static clearFiles; 18 | getSyntacticDiagnostics(fileName: string): Promise; 19 | getSemanticDiagnostics(fileName: string): Promise; 20 | getSuggestionDiagnostics(fileName: string): Promise; 21 | getCompilerOptionsDiagnostics(fileName: string): Promise; 22 | getCompletionsAtPosition(fileName: string, position: number): Promise; 23 | getCompletionEntryDetails(fileName: string, position: number, entry: string): Promise; 24 | getSignatureHelpItems(fileName: string, position: number): Promise; 25 | getQuickInfoAtPosition(fileName: string, position: number): Promise; 26 | getOccurrencesAtPosition(fileName: string, position: number): Promise | undefined>; 27 | getDefinitionAtPosition(fileName: string, position: number): Promise | undefined>; 28 | getReferencesAtPosition(fileName: string, position: number): Promise; 29 | getNavigationBarItems(fileName: string): Promise; 30 | getFormattingEditsForDocument(fileName: string, options: ts.FormatCodeOptions): Promise; 31 | getFormattingEditsForRange(fileName: string, start: number, end: number, options: ts.FormatCodeOptions): Promise; 32 | getFormattingEditsAfterKeystroke(fileName: string, position: number, ch: string, options: ts.FormatCodeOptions): Promise; 33 | findRenameLocations(fileName: string, position: number, findInStrings: boolean, findInComments: boolean, providePrefixAndSuffixTextForRename: boolean): Promise; 34 | getRenameInfo(fileName: string, position: number, options: ts.RenameInfoOptions): Promise; 35 | getEmitOutput(fileName: string): Promise; 36 | getCodeFixesAtPosition(fileName: string, start: number, end: number, errorCodes: number[], formatOptions: ts.FormatCodeOptions): Promise>; 37 | updateExtraLibs(extraLibs: IExtraLibs): void; 38 | readFile(path: string, encoding?: string | undefined): string | undefined; 39 | fileExists(path: string): boolean; 40 | } 41 | export interface IExtraLib { 42 | content: string; 43 | version: number; 44 | } 45 | export interface IExtraLibs { 46 | [path: string]: IExtraLib; 47 | } 48 | -------------------------------------------------------------------------------- /scripts/getDTS.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | // Grab the DTS files from the TypeScript website 4 | // then do a bit of string manipulation in order to make it 5 | // compile without _all_ of the dependencies 6 | 7 | const nodeFetch = require("node-fetch").default 8 | const { writeFileSync, existsSync, mkdirSync } = require("fs") 9 | const { join } = require("path") 10 | 11 | const getFileAndStoreLocally = async (url, path, editFunc) => { 12 | const editingFunc = editFunc ? editFunc : text => text 13 | const packageJSON = await nodeFetch(url) 14 | const contents = await packageJSON.text() 15 | writeFileSync(join(__dirname, "..", path), editingFunc(contents), "utf8") 16 | } 17 | 18 | const go = async () => { 19 | const vendor = join("src", "vendor") 20 | const ds = join("src", "vendor", "ds") 21 | 22 | if (!existsSync(vendor)) mkdirSync(vendor) 23 | if (!existsSync(ds)) mkdirSync(ds) 24 | 25 | const host = "https://www.staging-typescript.org" 26 | 27 | // For playground-dev purposes 28 | // const host = "http://localhost:8000"; 29 | 30 | // The API for the monaco typescript worker 31 | await getFileAndStoreLocally(host + "/js/sandbox/tsWorker.d.ts", join(vendor, "tsWorker.d.ts")) 32 | 33 | // The Design System DTS 34 | await getFileAndStoreLocally( 35 | host + "/js/playground/ds/createDesignSystem.d.ts", 36 | join(ds, "createDesignSystem.d.ts"), 37 | text => { 38 | const renameImport = text.replace("typescriptlang-org/static/js/sandbox", "../sandbox") 39 | return renameImport 40 | } 41 | ) 42 | 43 | // Util funcs 44 | await getFileAndStoreLocally(host + "/js/playground/pluginUtils.d.ts", join(vendor, "pluginUtils.d.ts"), text => { 45 | const renameImport = text.replace('from "@typescript/sandbox"', 'from "./sandbox"') 46 | return renameImport 47 | }) 48 | 49 | // TS-VFS 50 | await getFileAndStoreLocally( 51 | host + "/js/sandbox/vendor/typescript-vfs.d.ts", 52 | join(vendor, "typescript-vfs.d.ts"), 53 | text => { 54 | const removeImports = text.replace('/// ', "") 55 | const removedLZ = removeImports.replace('import("lz-string").LZStringStatic', "any") 56 | return removedLZ 57 | } 58 | ) 59 | 60 | // Sandbox 61 | await getFileAndStoreLocally(host + "/js/sandbox/index.d.ts", join(vendor, "sandbox.d.ts"), text => { 62 | const removeImports = text.replace(/^import/g, "// import").replace(/\nimport/g, "\n// import") 63 | const replaceTSVFS = removeImports.replace( 64 | '// import * as tsvfs from "./vendor/typescript-vfs"', 65 | "\nimport * as tsvfs from './typescript-vfs'" 66 | ) 67 | const removedLZ = replaceTSVFS.replace("lzstring: typeof lzstring", "// lzstring: typeof lzstring") 68 | const addedTsWorkerImport = 'import { TypeScriptWorker } from "./tsWorker";' + removedLZ 69 | return addedTsWorkerImport 70 | }) 71 | 72 | // Playground 73 | await getFileAndStoreLocally(host + "/js/playground/index.d.ts", join(vendor, "/playground.d.ts"), text => { 74 | const replaceSandbox = text.replace('"@typescript/sandbox"', '"./sandbox"') 75 | const replaceTSVFS = replaceSandbox.replace( 76 | /typescriptlang-org\/static\/js\/sandbox\/vendor\/typescript-vfs/g, 77 | "./typescript-vfs" 78 | ) 79 | const removedLZ = replaceTSVFS.replace("lzstring: typeof", "// lzstring: typeof") 80 | const removedWorker = removedLZ.replace("getWorkerProcess", "// getWorkerProcess") 81 | const removedUI = removedWorker.replace("ui:", "// ui:") 82 | return removedUI 83 | }) 84 | } 85 | 86 | go() 87 | -------------------------------------------------------------------------------- /src/vendor/ds/createDesignSystem.d.ts: -------------------------------------------------------------------------------- 1 | import type { Sandbox } from "@typescript/sandbox"; 2 | import type { DiagnosticRelatedInformation, Node } from "typescript"; 3 | export type LocalStorageOption = { 4 | blurb: string; 5 | flag: string; 6 | display: string; 7 | emptyImpliesEnabled?: true; 8 | oneline?: true; 9 | requireRestart?: true; 10 | onchange?: (newValue: boolean) => void; 11 | }; 12 | export type OptionsListConfig = { 13 | style: "separated" | "rows"; 14 | requireRestart?: true; 15 | }; 16 | export type DesignSystem = ReturnType>; 17 | export declare const createDesignSystem: (sandbox: Sandbox) => (container: Element) => { 18 | /** The element of the design system */ 19 | container: Element; 20 | /** Clear the sidebar */ 21 | clear: () => void; 22 | /** Present code in a pre > code */ 23 | code: (code: string) => HTMLElement; 24 | /** Ideally only use this once, and maybe even prefer using subtitles everywhere */ 25 | title: (title: string) => HTMLElement; 26 | /** Used to denote sections, give info etc */ 27 | subtitle: (subtitle: string) => HTMLElement; 28 | /** Used to show a paragraph */ 29 | p: (subtitle: string) => HTMLElement; 30 | /** When you can't do something, or have nothing to show */ 31 | showEmptyScreen: (message: string) => HTMLDivElement; 32 | /** 33 | * Shows a list of hoverable, and selectable items (errors, highlights etc) which have code representation. 34 | * The type is quite small, so it should be very feasible for you to massage other data to fit into this function 35 | */ 36 | listDiags: (model: import("monaco-editor").editor.ITextModel, diags: DiagnosticRelatedInformation[]) => HTMLUListElement; 37 | /** Lets you remove the hovers from listDiags etc */ 38 | clearDeltaDecorators: (force?: true) => void; 39 | /** Shows a single option in local storage (adds an li to the container BTW) */ 40 | localStorageOption: (setting: LocalStorageOption) => HTMLLIElement; 41 | /** Uses localStorageOption to create a list of options */ 42 | showOptionList: (options: LocalStorageOption[], style: OptionsListConfig) => void; 43 | /** Shows a full-width text input */ 44 | createTextInput: (config: { 45 | id: string; 46 | placeholder: string; 47 | onChanged?: ((text: string, input: HTMLInputElement) => void) | undefined; 48 | onEnter: (text: string, input: HTMLInputElement) => void; 49 | value?: string | undefined; 50 | keepValueAcrossReloads?: true | undefined; 51 | isEnabled?: ((input: HTMLInputElement) => boolean) | undefined; 52 | }) => HTMLFormElement; 53 | /** Renders an AST tree */ 54 | createASTTree: (node: Node, settings?: { 55 | closedByDefault?: true; 56 | }) => HTMLDivElement; 57 | /** Creates an input button */ 58 | button: (settings: { 59 | label: string; 60 | onclick?: ((ev: MouseEvent) => void) | undefined; 61 | }) => HTMLInputElement; 62 | /** Used to re-create a UI like the tab bar at the top of the plugins section */ 63 | createTabBar: () => HTMLDivElement; 64 | /** Used with createTabBar to add buttons */ 65 | createTabButton: (text: string) => HTMLButtonElement; 66 | /** A general "restart your browser" message */ 67 | declareRestartRequired: (i?: ((key: string) => string) | undefined) => void; 68 | /** Create a new Design System instance and add it to the container. You'll need to cast 69 | * this after usage, because otherwise the type-system circularly references itself 70 | */ 71 | createSubDesignSystem: () => any; 72 | }; 73 | -------------------------------------------------------------------------------- /src/vendor/typescript-vfs.d.ts: -------------------------------------------------------------------------------- 1 | type System = import("typescript").System; 2 | type CompilerOptions = import("typescript").CompilerOptions; 3 | type CustomTransformers = import("typescript").CustomTransformers; 4 | type LanguageServiceHost = import("typescript").LanguageServiceHost; 5 | type CompilerHost = import("typescript").CompilerHost; 6 | type SourceFile = import("typescript").SourceFile; 7 | type TS = typeof import("typescript"); 8 | export interface VirtualTypeScriptEnvironment { 9 | sys: System; 10 | languageService: import("typescript").LanguageService; 11 | getSourceFile: (fileName: string) => import("typescript").SourceFile | undefined; 12 | createFile: (fileName: string, content: string) => void; 13 | updateFile: (fileName: string, content: string, replaceTextSpan?: import("typescript").TextSpan) => void; 14 | } 15 | /** 16 | * Makes a virtual copy of the TypeScript environment. This is the main API you want to be using with 17 | * @typescript/vfs. A lot of the other exposed functions are used by this function to get set up. 18 | * 19 | * @param sys an object which conforms to the TS Sys (a shim over read/write access to the fs) 20 | * @param rootFiles a list of files which are considered inside the project 21 | * @param ts a copy pf the TypeScript module 22 | * @param compilerOptions the options for this compiler run 23 | * @param customTransformers custom transformers for this compiler run 24 | */ 25 | export declare function createVirtualTypeScriptEnvironment(sys: System, rootFiles: string[], ts: TS, compilerOptions?: CompilerOptions, customTransformers?: CustomTransformers): VirtualTypeScriptEnvironment; 26 | /** 27 | * Grab the list of lib files for a particular target, will return a bit more than necessary (by including 28 | * the dom) but that's OK, we're really working with the constraint that you can't get a list of files 29 | * when running in a browser. 30 | * 31 | * @param target The compiler settings target baseline 32 | * @param ts A copy of the TypeScript module 33 | */ 34 | export declare const knownLibFilesForCompilerOptions: (compilerOptions: CompilerOptions, ts: TS) => string[]; 35 | /** 36 | * Sets up a Map with lib contents by grabbing the necessary files from 37 | * the local copy of typescript via the file system. 38 | * 39 | * The first two args are un-used, but kept around so as to not cause a 40 | * semver major bump for no gain to module users. 41 | */ 42 | export declare const createDefaultMapFromNodeModules: (_compilerOptions: CompilerOptions, _ts?: typeof import("typescript"), tsLibDirectory?: string) => Map; 43 | /** 44 | * Adds recursively files from the FS into the map based on the folder 45 | */ 46 | export declare const addAllFilesFromFolder: (map: Map, workingDir: string) => void; 47 | /** Adds all files from node_modules/@types into the FS Map */ 48 | export declare const addFilesForTypesIntoFolder: (map: Map) => void; 49 | /** 50 | * Create a virtual FS Map with the lib files from a particular TypeScript 51 | * version based on the target, Always includes dom ATM. 52 | * 53 | * @param options The compiler target, which dictates the libs to set up 54 | * @param version the versions of TypeScript which are supported 55 | * @param cache should the values be stored in local storage 56 | * @param ts a copy of the typescript import 57 | * @param lzstring an optional copy of the lz-string import 58 | * @param fetcher an optional replacement for the global fetch function (tests mainly) 59 | * @param storer an optional replacement for the localStorage global (tests mainly) 60 | */ 61 | export declare const createDefaultMapFromCDN: (options: CompilerOptions, version: string, cache: boolean, ts: TS, lzstring?: typeof import("lz-string"), fetcher?: typeof fetch, storer?: typeof localStorage) => Promise>; 62 | /** 63 | * Creates an in-memory System object which can be used in a TypeScript program, this 64 | * is what provides read/write aspects of the virtual fs 65 | */ 66 | export declare function createSystem(files: Map): System; 67 | /** 68 | * Creates a file-system backed System object which can be used in a TypeScript program, you provide 69 | * a set of virtual files which are prioritised over the FS versions, then a path to the root of your 70 | * project (basically the folder your node_modules lives) 71 | */ 72 | export declare function createFSBackedSystem(files: Map, _projectRoot: string, ts: TS, tsLibDirectory?: string): System; 73 | /** 74 | * Creates an in-memory CompilerHost -which is essentially an extra wrapper to System 75 | * which works with TypeScript objects - returns both a compiler host, and a way to add new SourceFile 76 | * instances to the in-memory file system. 77 | */ 78 | export declare function createVirtualCompilerHost(sys: System, compilerOptions: CompilerOptions, ts: TS): { 79 | compilerHost: CompilerHost; 80 | updateFile: (sourceFile: SourceFile) => boolean; 81 | }; 82 | /** 83 | * Creates an object which can host a language service against the virtual file-system 84 | */ 85 | export declare function createVirtualLanguageServiceHost(sys: System, rootFiles: string[], compilerOptions: CompilerOptions, ts: TS, customTransformers?: CustomTransformers): { 86 | languageServiceHost: LanguageServiceHost; 87 | updateFile: (sourceFile: import("typescript").SourceFile) => void; 88 | }; 89 | export {}; 90 | -------------------------------------------------------------------------------- /src/vendor/playground.d.ts: -------------------------------------------------------------------------------- 1 | type Sandbox = import("./sandbox").Sandbox; 2 | type Monaco = typeof import("monaco-editor"); 3 | import { PluginUtils } from "./pluginUtils"; 4 | import type React from "react"; 5 | export { PluginUtils } from "./pluginUtils"; 6 | export type PluginFactory = { 7 | (i: (key: string, components?: any) => string, utils: PluginUtils): PlaygroundPlugin; 8 | }; 9 | /** The interface of all sidebar plugins */ 10 | export interface PlaygroundPlugin { 11 | /** Not public facing, but used by the playground to uniquely identify plugins */ 12 | id: string; 13 | /** To show in the tabs */ 14 | displayName: string; 15 | /** Should this plugin be selected when the plugin is first loaded? Lets you check for query vars etc to load a particular plugin */ 16 | shouldBeSelected?: () => boolean; 17 | /** Before we show the tab, use this to set up your HTML - it will all be removed by the playground when someone navigates off the tab */ 18 | willMount?: (sandbox: Sandbox, container: HTMLDivElement) => void; 19 | /** After we show the tab */ 20 | didMount?: (sandbox: Sandbox, container: HTMLDivElement) => void; 21 | /** Model changes while this plugin is actively selected */ 22 | modelChanged?: (sandbox: Sandbox, model: import("monaco-editor").editor.ITextModel, container: HTMLDivElement) => void; 23 | /** Delayed model changes while this plugin is actively selected, useful when you are working with the TS API because it won't run on every keypress */ 24 | modelChangedDebounce?: (sandbox: Sandbox, model: import("monaco-editor").editor.ITextModel, container: HTMLDivElement) => void; 25 | /** Before we remove the tab */ 26 | willUnmount?: (sandbox: Sandbox, container: HTMLDivElement) => void; 27 | /** After we remove the tab */ 28 | didUnmount?: (sandbox: Sandbox, container: HTMLDivElement) => void; 29 | /** An object you can use to keep data around in the scope of your plugin object */ 30 | data?: any; 31 | } 32 | interface PlaygroundConfig { 33 | /** Language like "en" / "ja" etc */ 34 | lang: string; 35 | /** Site prefix, like "v2" during the pre-release */ 36 | prefix: string; 37 | /** Optional plugins so that we can re-use the playground with different sidebars */ 38 | plugins?: PluginFactory[]; 39 | /** Should this playground load up custom plugins from localStorage? */ 40 | supportCustomPlugins: boolean; 41 | } 42 | export declare const setupPlayground: (sandbox: Sandbox, monaco: Monaco, config: PlaygroundConfig, i: (key: string) => string, react: typeof React) => { 43 | exporter: { 44 | openProjectInStackBlitz: () => void; 45 | openProjectInCodeSandbox: () => void; 46 | copyAsMarkdownIssue: (e: React.MouseEvent) => Promise; 47 | copyForChat: (e: React.MouseEvent) => boolean; 48 | copyForChatWithPreview: (e: React.MouseEvent) => boolean; 49 | openInTSAST: () => void; 50 | openInBugWorkbench: () => void; 51 | openInVSCodeDev: () => void; 52 | exportAsTweet: () => void; 53 | }; 54 | // ui: import("./createUI").UI; 55 | registerPlugin: (plugin: PlaygroundPlugin) => void; 56 | plugins: PlaygroundPlugin[]; 57 | getCurrentPlugin: () => PlaygroundPlugin; 58 | tabs: HTMLButtonElement[]; 59 | setDidUpdateTab: (func: (newPlugin: PlaygroundPlugin, previousPlugin: PlaygroundPlugin) => void) => void; 60 | createUtils: (sb: any, react: typeof React) => { 61 | el: (str: string, elementType: string, container: Element) => HTMLElement; 62 | requireURL: (path: string) => string; 63 | react: typeof React; 64 | createDesignSystem: (container: Element) => { 65 | container: Element; 66 | clear: () => void; 67 | code: (code: string) => HTMLElement; 68 | title: (title: string) => HTMLElement; 69 | subtitle: (subtitle: string) => HTMLElement; 70 | p: (subtitle: string) => HTMLElement; 71 | showEmptyScreen: (message: string) => HTMLDivElement; 72 | listDiags: (model: import("monaco-editor").editor.ITextModel, diags: import("typescript").DiagnosticRelatedInformation[]) => HTMLUListElement; 73 | clearDeltaDecorators: (force?: true | undefined) => void; 74 | localStorageOption: (setting: import("./ds/createDesignSystem").LocalStorageOption) => HTMLLIElement; 75 | showOptionList: (options: import("./ds/createDesignSystem").LocalStorageOption[], style: import("./ds/createDesignSystem").OptionsListConfig) => void; 76 | createTextInput: (config: { 77 | id: string; 78 | placeholder: string; 79 | onChanged?: ((text: string, input: HTMLInputElement) => void) | undefined; 80 | onEnter: (text: string, input: HTMLInputElement) => void; 81 | value?: string | undefined; 82 | keepValueAcrossReloads?: true | undefined; 83 | isEnabled?: ((input: HTMLInputElement) => boolean) | undefined; 84 | }) => HTMLFormElement; 85 | createASTTree: (node: import("typescript").Node, settings?: { 86 | closedByDefault?: true | undefined; 87 | } | undefined) => HTMLDivElement; 88 | button: (settings: { 89 | label: string; 90 | onclick?: ((ev: MouseEvent) => void) | undefined; 91 | }) => HTMLInputElement; 92 | createTabBar: () => HTMLDivElement; 93 | createTabButton: (text: string) => HTMLButtonElement; 94 | declareRestartRequired: (i?: ((key: string) => string) | undefined) => void; 95 | createSubDesignSystem: () => any; 96 | }; 97 | flashHTMLElement: (element: HTMLElement) => void; 98 | setNotifications: (pluginID: string, amount: number) => void; 99 | }; 100 | }; 101 | export type Playground = ReturnType; 102 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | type PlaygroundPlugin, 3 | type PluginFactory, 4 | type PluginUtils, 5 | } from "./vendor/playground"; 6 | import { IKeyboardEvent } from "monaco-editor"; 7 | 8 | import prettier from "prettier/standalone"; 9 | import * as prettierPluginTS from "prettier/plugins/typescript"; 10 | import * as prettierPluginEstree from "prettier/plugins/estree"; 11 | 12 | // @ts-ignore - wrong type coming from monaco 13 | const SKeyCode = sandbox.monaco.KeyCode.KeyS; 14 | const lskey = "tsplay-plugin-format-on-save-v2"; 15 | const configkey = "tsplay-plugin-prettier-config"; 16 | 17 | const store = (key: string, data: any) => { 18 | try { 19 | window.localStorage.setItem(key, JSON.stringify(data)); 20 | } catch (err) { 21 | console.log(err); 22 | } 23 | }; 24 | 25 | const get = (key: string) => { 26 | try { 27 | return JSON.parse(window.localStorage.getItem(key)); 28 | } catch (err) { 29 | console.log(err); 30 | } 31 | }; 32 | 33 | const makeUI = (container: HTMLDivElement) => { 34 | const textbox_label = document.createElement("p"); 35 | const textbox = document.createElement("textarea"); 36 | const formatOnSaveText = document.createElement("span"); 37 | const formatOnSaveLabel = document.createElement("label"); 38 | const formatOnSaveToggleInput = document.createElement("input"); 39 | const copyLinkOnSaveText = document.createElement("span"); 40 | const copyLinkOnSaveLabel = document.createElement("label"); 41 | const copyLinkOnSaveInput = document.createElement("input"); 42 | 43 | textbox.style.width = "90%"; 44 | textbox.style.minHeight = "150px"; 45 | formatOnSaveText.textContent = " Enable format on save"; 46 | copyLinkOnSaveText.textContent = " Prevent copy link on save"; 47 | textbox_label.textContent = " Prettier config (json):"; 48 | 49 | formatOnSaveToggleInput.type = "checkbox"; 50 | formatOnSaveLabel.appendChild(formatOnSaveToggleInput); 51 | formatOnSaveLabel.appendChild(formatOnSaveText); 52 | 53 | copyLinkOnSaveInput.type = "checkbox"; 54 | copyLinkOnSaveLabel.appendChild(copyLinkOnSaveInput); 55 | copyLinkOnSaveLabel.appendChild(copyLinkOnSaveText); 56 | 57 | container.appendChild(formatOnSaveLabel); 58 | container.appendChild(document.createElement("br")); 59 | container.appendChild(copyLinkOnSaveLabel); 60 | container.appendChild(textbox_label); 61 | container.appendChild(textbox); 62 | 63 | return { formatOnSaveToggleInput, copyLinkOnSaveInput, textbox }; 64 | }; 65 | 66 | const modifiedDTSPlugin: PluginFactory = (i, utils) => { 67 | let codeElement: HTMLElement; 68 | let shouldPrettyDTS = false; 69 | const plugin: PlaygroundPlugin = { 70 | id: "dts", 71 | displayName: ".D.TS", 72 | willMount: (sandbox, container) => { 73 | const { code } = utils.createDesignSystem(container); 74 | const prettyDTS = () => { 75 | sandbox.getDTSForCode().then(async (dts) => { 76 | const prettySource = shouldPrettyDTS 77 | ? await prettier.format(dts, { 78 | parser: "typescript", 79 | plugins: [prettierPluginTS, prettierPluginEstree], 80 | }) 81 | : dts; 82 | sandbox.monaco.editor 83 | .colorize(prettySource, "typescript", {}) 84 | .then((coloredDTS) => { 85 | codeElement.innerHTML = coloredDTS; 86 | }); 87 | }); 88 | }; 89 | prettyDTS(); 90 | 91 | const prettyDtsText = document.createElement("span"); 92 | const prettyDtsLabel = document.createElement("label"); 93 | const prettyDtsToggleInput = document.createElement("input"); 94 | 95 | prettyDtsText.textContent = " Prettify DTS?"; 96 | prettyDtsToggleInput.type = "checkbox"; 97 | prettyDtsLabel.appendChild(prettyDtsToggleInput); 98 | prettyDtsLabel.appendChild(prettyDtsText); 99 | 100 | prettyDtsToggleInput.onchange = () => { 101 | shouldPrettyDTS = prettyDtsToggleInput.checked; 102 | prettyDTS(); 103 | }; 104 | container.appendChild(prettyDtsLabel); 105 | container.appendChild(document.createElement("br")); 106 | container.appendChild(document.createElement("br")); 107 | 108 | codeElement = code(""); 109 | }, 110 | modelChanged: (sandbox, model) => { 111 | sandbox.getDTSForCode().then(async (dts) => { 112 | const prettySource = shouldPrettyDTS 113 | ? await prettier.format(dts, { 114 | parser: "typescript", 115 | plugins: [prettierPluginTS, prettierPluginEstree], 116 | }) 117 | : dts; 118 | sandbox.monaco.editor 119 | .colorize(prettySource, "typescript", {}) 120 | .then((coloredDTS) => { 121 | codeElement.innerHTML = coloredDTS; 122 | }); 123 | }); 124 | }, 125 | }; 126 | 127 | return plugin; 128 | }; 129 | 130 | const makePlugin = (utils: PluginUtils) => { 131 | // Find and remove showDTSPlugin in order to override it with our own 132 | const plugins = window.playground.plugins; 133 | // find showDTSPlugin 134 | const showDTSPluginIndex = plugins.findIndex((p) => p.id === "dts"); 135 | plugins.splice(showDTSPluginIndex, 1); 136 | 137 | // remove showDTSPlugin tab 138 | const tabs = window.playground.tabs; 139 | const showDTSPluginTabIndex = tabs.findIndex( 140 | (t) => t.getAttribute("id") === "playground-plugin-tab-dts" 141 | ); 142 | tabs[showDTSPluginTabIndex].remove(); 143 | tabs.splice(showDTSPluginTabIndex, 1); 144 | 145 | // register our plugin 146 | window.playground.registerPlugin(modifiedDTSPlugin((i) => i, utils)); 147 | 148 | const customPlugin: PlaygroundPlugin = { 149 | id: "format-on-save", 150 | displayName: "Format On Save", 151 | didMount: (sandbox, container) => { 152 | const ds = utils.createDesignSystem(container); 153 | let pluginConfig = JSON.parse(window.localStorage.getItem(lskey) || "{}"); 154 | let prettierConfig = get(configkey) || {}; 155 | 156 | // Bootstrap UI 157 | const { formatOnSaveToggleInput, copyLinkOnSaveInput, textbox } = 158 | makeUI(container); 159 | formatOnSaveToggleInput.checked = pluginConfig.shouldFormatOnSave; 160 | copyLinkOnSaveInput.checked = pluginConfig.preventCopyLinkOnSave; 161 | textbox.value = JSON.stringify(prettierConfig, null, 2); 162 | 163 | formatOnSaveToggleInput.onchange = () => { 164 | pluginConfig.shouldFormatOnSave = formatOnSaveToggleInput.checked; 165 | store(lskey, pluginConfig); 166 | }; 167 | copyLinkOnSaveInput.onchange = () => { 168 | pluginConfig.preventCopyLinkOnSave = copyLinkOnSaveInput.checked; 169 | store(lskey, pluginConfig); 170 | }; 171 | textbox.onchange = (e) => { 172 | // @ts-ignore 173 | prettierConfig = JSON.parse(e.target.value); 174 | store(configkey, prettierConfig); 175 | }; 176 | 177 | const handleSave = async (e: IKeyboardEvent) => { 178 | if (!pluginConfig.shouldFormatOnSave) return; 179 | const isSKey = e.keyCode === SKeyCode; 180 | const isSavePressed = (isSKey && e.metaKey) || (isSKey && e.ctrlKey); 181 | 182 | if (!isSavePressed) return; 183 | e.preventDefault(); 184 | try { 185 | const source = sandbox.getText(); 186 | const cursorPosOld = sandbox.editor.getPosition(); 187 | const prettySource = await prettier.formatWithCursor(source, { 188 | cursorOffset: cursorPosOld.column * cursorPosOld.lineNumber, 189 | parser: "typescript", 190 | plugins: [prettierPluginTS, prettierPluginEstree], 191 | ...prettierConfig, 192 | }); 193 | 194 | sandbox.editor.pushUndoStop(); 195 | const fullRange = sandbox.editor.getModel().getFullModelRange(); 196 | sandbox.editor.executeEdits(null, [ 197 | { 198 | text: prettySource.formatted, 199 | range: fullRange, 200 | }, 201 | ]); 202 | const cursorPosNew = sandbox.editor.getPosition(); 203 | // recalculate cursor position 204 | // TODO: improve it 205 | const lineDelta = cursorPosOld.lineNumber - cursorPosNew.lineNumber; 206 | const position = { 207 | lineNumber: cursorPosNew.lineNumber, 208 | column: cursorPosNew.column - lineDelta, 209 | }; 210 | sandbox.editor.setPosition(position); 211 | sandbox.editor.pushUndoStop(); 212 | } catch (e) { 213 | ds.p(`[Prettier] failed to format: ${e.message}`); 214 | } 215 | }; 216 | 217 | // Format on save 218 | sandbox.editor.onKeyDown((e) => handleSave(e)); 219 | 220 | // Override the copy command to save the URL to the clipboard 221 | const originalCopyAction = sandbox.editor.getAction("copy-clipboard"); 222 | sandbox.editor.addAction({ 223 | id: "copy-clipboard", 224 | label: "Save to clipboard", 225 | keybindings: [sandbox.monaco.KeyMod.CtrlCmd | SKeyCode], 226 | contextMenuGroupId: "run", 227 | contextMenuOrder: 1.5, 228 | run: () => { 229 | if (pluginConfig.preventCopyLinkOnSave) { 230 | // do not copy the code to clipboard but still update the URL 231 | const newURL = sandbox.createURLQueryWithCompilerOptions(sandbox); 232 | window.history.replaceState({}, "", newURL); 233 | } else { 234 | originalCopyAction.run(); 235 | } 236 | }, 237 | }); 238 | }, 239 | 240 | modelChangedDebounce: async (_sandbox, _model) => {}, 241 | didUnmount: () => {}, 242 | }; 243 | 244 | return customPlugin; 245 | }; 246 | 247 | export default makePlugin; 248 | -------------------------------------------------------------------------------- /src/vendor/sandbox.d.ts: -------------------------------------------------------------------------------- 1 | import { TypeScriptWorker } from "./tsWorker";// import { TypeScriptWorker } from "./tsWorker"; 2 | // import lzstring from "./vendor/lzstring.min"; 3 | 4 | import * as tsvfs from './typescript-vfs'; 5 | type CompilerOptions = import("monaco-editor").languages.typescript.CompilerOptions; 6 | type Monaco = typeof import("monaco-editor"); 7 | /** 8 | * These are settings for the playground which are the equivalent to props in React 9 | * any changes to it should require a new setup of the playground 10 | */ 11 | export type SandboxConfig = { 12 | /** The default source code for the playground */ 13 | text: string; 14 | /** @deprecated */ 15 | useJavaScript?: boolean; 16 | /** The default file for the playground */ 17 | filetype: "js" | "ts" | "d.ts"; 18 | /** Compiler options which are automatically just forwarded on */ 19 | compilerOptions: CompilerOptions; 20 | /** Optional monaco settings overrides */ 21 | monacoSettings?: import("monaco-editor").editor.IEditorOptions; 22 | /** Acquire types via type acquisition */ 23 | acquireTypes: boolean; 24 | /** Support twoslash compiler options */ 25 | supportTwoslashCompilerOptions: boolean; 26 | /** Get the text via query params and local storage, useful when the editor is the main experience */ 27 | suppressAutomaticallyGettingDefaultText?: true; 28 | /** Suppress setting compiler options from the compiler flags from query params */ 29 | suppressAutomaticallyGettingCompilerFlags?: true; 30 | /** Optional path to TypeScript worker wrapper class script, see https://github.com/microsoft/monaco-typescript/pull/65 */ 31 | customTypeScriptWorkerPath?: string; 32 | /** Logging system */ 33 | logger: { 34 | log: (...args: any[]) => void; 35 | error: (...args: any[]) => void; 36 | groupCollapsed: (...args: any[]) => void; 37 | groupEnd: (...args: any[]) => void; 38 | }; 39 | } & ({ 40 | domID: string; 41 | } | { 42 | elementToAppend: HTMLElement; 43 | }); 44 | /** The default settings which we apply a partial over */ 45 | export declare function defaultPlaygroundSettings(): { 46 | /** The default source code for the playground */ 47 | text: string; 48 | /** @deprecated */ 49 | useJavaScript?: boolean | undefined; 50 | /** The default file for the playground */ 51 | filetype: "js" | "ts" | "d.ts"; 52 | /** Compiler options which are automatically just forwarded on */ 53 | compilerOptions: import("monaco-editor").languages.typescript.CompilerOptions; 54 | /** Optional monaco settings overrides */ 55 | monacoSettings?: import("monaco-editor").editor.IEditorOptions | undefined; 56 | /** Acquire types via type acquisition */ 57 | acquireTypes: boolean; 58 | /** Support twoslash compiler options */ 59 | supportTwoslashCompilerOptions: boolean; 60 | /** Get the text via query params and local storage, useful when the editor is the main experience */ 61 | suppressAutomaticallyGettingDefaultText?: true | undefined; 62 | /** Suppress setting compiler options from the compiler flags from query params */ 63 | suppressAutomaticallyGettingCompilerFlags?: true | undefined; 64 | /** Optional path to TypeScript worker wrapper class script, see https://github.com/microsoft/monaco-typescript/pull/65 */ 65 | customTypeScriptWorkerPath?: string | undefined; 66 | /** Logging system */ 67 | logger: { 68 | log: (...args: any[]) => void; 69 | error: (...args: any[]) => void; 70 | groupCollapsed: (...args: any[]) => void; 71 | groupEnd: (...args: any[]) => void; 72 | }; 73 | } & { 74 | domID: string; 75 | }; 76 | /** Creates a sandbox editor, and returns a set of useful functions and the editor */ 77 | export declare const createTypeScriptSandbox: (partialConfig: Partial, monaco: Monaco, ts: typeof import("typescript")) => { 78 | /** The same config you passed in */ 79 | config: { 80 | text: string; 81 | useJavaScript?: boolean | undefined; 82 | filetype: "js" | "ts" | "d.ts"; 83 | compilerOptions: CompilerOptions; 84 | monacoSettings?: import("monaco-editor").editor.IEditorOptions | undefined; 85 | acquireTypes: boolean; 86 | supportTwoslashCompilerOptions: boolean; 87 | suppressAutomaticallyGettingDefaultText?: true | undefined; 88 | suppressAutomaticallyGettingCompilerFlags?: true | undefined; 89 | customTypeScriptWorkerPath?: string | undefined; 90 | logger: { 91 | log: (...args: any[]) => void; 92 | error: (...args: any[]) => void; 93 | groupCollapsed: (...args: any[]) => void; 94 | groupEnd: (...args: any[]) => void; 95 | }; 96 | domID: string; 97 | } | { 98 | text: string; 99 | useJavaScript?: boolean | undefined; 100 | filetype: "js" | "ts" | "d.ts"; 101 | compilerOptions: CompilerOptions; 102 | monacoSettings?: import("monaco-editor").editor.IEditorOptions | undefined; 103 | acquireTypes: boolean; 104 | supportTwoslashCompilerOptions: boolean; 105 | suppressAutomaticallyGettingDefaultText?: true | undefined; 106 | suppressAutomaticallyGettingCompilerFlags?: true | undefined; 107 | customTypeScriptWorkerPath?: string | undefined; 108 | logger: { 109 | log: (...args: any[]) => void; 110 | error: (...args: any[]) => void; 111 | groupCollapsed: (...args: any[]) => void; 112 | groupEnd: (...args: any[]) => void; 113 | }; 114 | elementToAppend?: HTMLElement | undefined; 115 | domID: string; 116 | }; 117 | /** A list of TypeScript versions you can use with the TypeScript sandbox */ 118 | supportedVersions: readonly ["5.4.3", "5.3.3", "5.2.2", "5.1.6", "5.0.4", "4.9.5", "4.8.4", "4.7.4", "4.6.4", "4.5.5", "4.4.4", "4.3.5", "4.2.3", "4.1.5", "4.0.5", "3.9.7", "3.8.3", "3.7.5", "3.6.3", "3.5.1", "3.3.3", "3.1.6", "3.0.1", "2.8.1", "2.7.2", "2.4.1"]; 119 | /** The monaco editor instance */ 120 | editor: import("monaco-editor").editor.IStandaloneCodeEditor; 121 | /** Either "typescript" or "javascript" depending on your config */ 122 | language: string; 123 | /** The outer monaco module, the result of require("monaco-editor") */ 124 | monaco: typeof import("monaco-editor"); 125 | /** Gets a monaco-typescript worker, this will give you access to a language server. Note: prefer this for language server work because it happens on a webworker . */ 126 | getWorkerProcess: () => Promise; 127 | /** A copy of require("@typescript/vfs") this can be used to quickly set up an in-memory compiler runs for ASTs, or to get complex language server results (anything above has to be serialized when passed)*/ 128 | tsvfs: typeof tsvfs; 129 | /** Get all the different emitted files after TypeScript is run */ 130 | getEmitResult: () => Promise; 131 | /** Gets just the JavaScript for your sandbox, will transpile if in TS only */ 132 | getRunnableJS: () => Promise; 133 | /** Gets the DTS output of the main code in the editor */ 134 | getDTSForCode: () => Promise; 135 | /** The monaco-editor dom node, used for showing/hiding the editor */ 136 | getDomNode: () => HTMLElement; 137 | /** The model is an object which monaco uses to keep track of text in the editor. Use this to directly modify the text in the editor */ 138 | getModel: () => import("monaco-editor").editor.ITextModel; 139 | /** Gets the text of the main model, which is the text in the editor */ 140 | getText: () => string; 141 | /** Shortcut for setting the model's text content which would update the editor */ 142 | setText: (text: string) => void; 143 | /** Gets the AST of the current text in monaco - uses `createTSProgram`, so the performance caveat applies there too */ 144 | getAST: () => Promise; 145 | /** The module you get from require("typescript") */ 146 | ts: typeof import("typescript"); 147 | /** Create a new Program, a TypeScript data model which represents the entire project. As well as some of the 148 | * primitive objects you would normally need to do work with the files. 149 | * 150 | * The first time this is called it has to download all the DTS files which is needed for an exact compiler run. Which 151 | * at max is about 1.5MB - after that subsequent downloads of dts lib files come from localStorage. 152 | * 153 | * Try to use this sparingly as it can be computationally expensive, at the minimum you should be using the debounced setup. 154 | * 155 | * Accepts an optional fsMap which you can use to add any files, or overwrite the default file. 156 | * 157 | * TODO: It would be good to create an easy way to have a single program instance which is updated for you 158 | * when the monaco model changes. 159 | */ 160 | setupTSVFS: (fsMapAdditions?: Map) => Promise<{ 161 | program: import("typescript").Program; 162 | system: import("typescript").System; 163 | host: { 164 | compilerHost: import("typescript").CompilerHost; 165 | updateFile: (sourceFile: import("typescript").SourceFile) => boolean; 166 | }; 167 | fsMap: Map; 168 | }>; 169 | /** Uses the above call setupTSVFS, but only returns the program */ 170 | createTSProgram: () => Promise; 171 | /** The Sandbox's default compiler options */ 172 | compilerDefaults: { 173 | [x: string]: import("monaco-editor").languages.typescript.CompilerOptionsValue; 174 | allowJs?: boolean | undefined; 175 | allowSyntheticDefaultImports?: boolean | undefined; 176 | allowUmdGlobalAccess?: boolean | undefined; 177 | allowUnreachableCode?: boolean | undefined; 178 | allowUnusedLabels?: boolean | undefined; 179 | alwaysStrict?: boolean | undefined; 180 | baseUrl?: string | undefined; 181 | charset?: string | undefined; 182 | checkJs?: boolean | undefined; 183 | declaration?: boolean | undefined; 184 | declarationMap?: boolean | undefined; 185 | emitDeclarationOnly?: boolean | undefined; 186 | declarationDir?: string | undefined; 187 | disableSizeLimit?: boolean | undefined; 188 | disableSourceOfProjectReferenceRedirect?: boolean | undefined; 189 | downlevelIteration?: boolean | undefined; 190 | emitBOM?: boolean | undefined; 191 | emitDecoratorMetadata?: boolean | undefined; 192 | experimentalDecorators?: boolean | undefined; 193 | forceConsistentCasingInFileNames?: boolean | undefined; 194 | importHelpers?: boolean | undefined; 195 | inlineSourceMap?: boolean | undefined; 196 | inlineSources?: boolean | undefined; 197 | isolatedModules?: boolean | undefined; 198 | jsx?: import("monaco-editor").languages.typescript.JsxEmit | undefined; 199 | keyofStringsOnly?: boolean | undefined; 200 | lib?: string[] | undefined; 201 | locale?: string | undefined; 202 | mapRoot?: string | undefined; 203 | maxNodeModuleJsDepth?: number | undefined; 204 | module?: import("monaco-editor").languages.typescript.ModuleKind | undefined; 205 | moduleResolution?: import("monaco-editor").languages.typescript.ModuleResolutionKind | undefined; 206 | newLine?: import("monaco-editor").languages.typescript.NewLineKind | undefined; 207 | noEmit?: boolean | undefined; 208 | noEmitHelpers?: boolean | undefined; 209 | noEmitOnError?: boolean | undefined; 210 | noErrorTruncation?: boolean | undefined; 211 | noFallthroughCasesInSwitch?: boolean | undefined; 212 | noImplicitAny?: boolean | undefined; 213 | noImplicitReturns?: boolean | undefined; 214 | noImplicitThis?: boolean | undefined; 215 | noStrictGenericChecks?: boolean | undefined; 216 | noUnusedLocals?: boolean | undefined; 217 | noUnusedParameters?: boolean | undefined; 218 | noImplicitUseStrict?: boolean | undefined; 219 | noLib?: boolean | undefined; 220 | noResolve?: boolean | undefined; 221 | out?: string | undefined; 222 | outDir?: string | undefined; 223 | outFile?: string | undefined; 224 | paths?: import("monaco-editor").languages.typescript.MapLike | undefined; 225 | preserveConstEnums?: boolean | undefined; 226 | preserveSymlinks?: boolean | undefined; 227 | project?: string | undefined; 228 | reactNamespace?: string | undefined; 229 | jsxFactory?: string | undefined; 230 | composite?: boolean | undefined; 231 | removeComments?: boolean | undefined; 232 | rootDir?: string | undefined; 233 | rootDirs?: string[] | undefined; 234 | skipLibCheck?: boolean | undefined; 235 | skipDefaultLibCheck?: boolean | undefined; 236 | sourceMap?: boolean | undefined; 237 | sourceRoot?: string | undefined; 238 | strict?: boolean | undefined; 239 | strictFunctionTypes?: boolean | undefined; 240 | strictBindCallApply?: boolean | undefined; 241 | strictNullChecks?: boolean | undefined; 242 | strictPropertyInitialization?: boolean | undefined; 243 | stripInternal?: boolean | undefined; 244 | suppressExcessPropertyErrors?: boolean | undefined; 245 | suppressImplicitAnyIndexErrors?: boolean | undefined; 246 | target?: import("monaco-editor").languages.typescript.ScriptTarget | undefined; 247 | traceResolution?: boolean | undefined; 248 | resolveJsonModule?: boolean | undefined; 249 | types?: string[] | undefined; 250 | typeRoots?: string[] | undefined; 251 | esModuleInterop?: boolean | undefined; 252 | useDefineForClassFields?: boolean | undefined; 253 | }; 254 | /** The Sandbox's current compiler options */ 255 | getCompilerOptions: () => import("monaco-editor").languages.typescript.CompilerOptions; 256 | /** Replace the Sandbox's compiler options */ 257 | setCompilerSettings: (opts: CompilerOptions) => void; 258 | /** Overwrite the Sandbox's compiler options */ 259 | updateCompilerSetting: (key: keyof CompilerOptions, value: any) => void; 260 | /** Update a single compiler option in the SAndbox */ 261 | updateCompilerSettings: (opts: CompilerOptions) => void; 262 | /** A way to get callbacks when compiler settings have changed */ 263 | setDidUpdateCompilerSettings: (func: (opts: CompilerOptions) => void) => void; 264 | /** A copy of lzstring, which is used to archive/unarchive code */ 265 | // lzstring: typeof lzstring; 266 | /** Returns compiler options found in the params of the current page */ 267 | createURLQueryWithCompilerOptions: (_sandbox: any, paramOverrides?: any) => string; 268 | /** 269 | * @deprecated Use `getTwoSlashCompilerOptions` instead. 270 | * 271 | * Returns compiler options in the source code using twoslash notation 272 | */ 273 | getTwoSlashComplierOptions: (code: string) => any; 274 | /** Returns compiler options in the source code using twoslash notation */ 275 | getTwoSlashCompilerOptions: (code: string) => any; 276 | /** Gets to the current monaco-language, this is how you talk to the background webworkers */ 277 | languageServiceDefaults: import("monaco-editor").languages.typescript.LanguageServiceDefaults; 278 | /** The path which represents the current file using the current compiler options */ 279 | filepath: string; 280 | /** Adds a file to the vfs used by the editor */ 281 | addLibraryToRuntime: (code: string, _path: string) => void; 282 | }; 283 | export type Sandbox = ReturnType; 284 | export {}; 285 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@rollup/plugin-commonjs@^21.0.1": 6 | version "21.0.1" 7 | resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.1.tgz#1e57c81ae1518e4df0954d681c642e7d94588fee" 8 | integrity sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg== 9 | dependencies: 10 | "@rollup/pluginutils" "^3.1.0" 11 | commondir "^1.0.1" 12 | estree-walker "^2.0.1" 13 | glob "^7.1.6" 14 | is-reference "^1.2.1" 15 | magic-string "^0.25.7" 16 | resolve "^1.17.0" 17 | 18 | "@rollup/plugin-json@^4.1.0": 19 | version "4.1.0" 20 | resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" 21 | integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== 22 | dependencies: 23 | "@rollup/pluginutils" "^3.0.8" 24 | 25 | "@rollup/plugin-node-resolve@^13.1.3": 26 | version "13.1.3" 27 | resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz#2ed277fb3ad98745424c1d2ba152484508a92d79" 28 | integrity sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ== 29 | dependencies: 30 | "@rollup/pluginutils" "^3.1.0" 31 | "@types/resolve" "1.17.1" 32 | builtin-modules "^3.1.0" 33 | deepmerge "^4.2.2" 34 | is-module "^1.0.0" 35 | resolve "^1.19.0" 36 | 37 | "@rollup/plugin-typescript@^8.3.0": 38 | version "8.3.0" 39 | resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-8.3.0.tgz#bc1077fa5897b980fc27e376c4e377882c63e68b" 40 | integrity sha512-I5FpSvLbtAdwJ+naznv+B4sjXZUcIvLLceYpITAn7wAP8W0wqc5noLdGIp9HGVntNhRWXctwPYrSSFQxtl0FPA== 41 | dependencies: 42 | "@rollup/pluginutils" "^3.1.0" 43 | resolve "^1.17.0" 44 | 45 | "@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": 46 | version "3.1.0" 47 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" 48 | integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== 49 | dependencies: 50 | "@types/estree" "0.0.39" 51 | estree-walker "^1.0.1" 52 | picomatch "^2.2.2" 53 | 54 | "@rollup/pluginutils@^4.1.1": 55 | version "4.1.2" 56 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.2.tgz#ed5821c15e5e05e32816f5fb9ec607cdf5a75751" 57 | integrity sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ== 58 | dependencies: 59 | estree-walker "^2.0.1" 60 | picomatch "^2.2.2" 61 | 62 | "@types/estree@*": 63 | version "0.0.51" 64 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" 65 | integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== 66 | 67 | "@types/estree@0.0.39": 68 | version "0.0.39" 69 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" 70 | integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 71 | 72 | "@types/node@*": 73 | version "17.0.17" 74 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.17.tgz#a8ddf6e0c2341718d74ee3dc413a13a042c45a0c" 75 | integrity sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw== 76 | 77 | "@types/prop-types@*": 78 | version "15.7.4" 79 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" 80 | integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== 81 | 82 | "@types/react@^16.9.23": 83 | version "16.14.23" 84 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.23.tgz#37201b9f2324c5ff8fa4600dbf19079dfdffc880" 85 | integrity sha512-WngBZLuSkP4IAgPi0HOsGCHo6dn3CcuLQnCfC17VbA7YBgipZiZoTOhObwl/93DsFW0Y2a/ZXeonpW4DxirEJg== 86 | dependencies: 87 | "@types/prop-types" "*" 88 | "@types/scheduler" "*" 89 | csstype "^3.0.2" 90 | 91 | "@types/resolve@1.17.1": 92 | version "1.17.1" 93 | resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" 94 | integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== 95 | dependencies: 96 | "@types/node" "*" 97 | 98 | "@types/scheduler@*": 99 | version "0.16.2" 100 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" 101 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== 102 | 103 | "@zeit/schemas@2.6.0": 104 | version "2.6.0" 105 | resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.6.0.tgz#004e8e553b4cd53d538bd38eac7bcbf58a867fe3" 106 | integrity sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg== 107 | 108 | accepts@~1.3.5: 109 | version "1.3.8" 110 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" 111 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 112 | dependencies: 113 | mime-types "~2.1.34" 114 | negotiator "0.6.3" 115 | 116 | ajv@6.12.6: 117 | version "6.12.6" 118 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 119 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 120 | dependencies: 121 | fast-deep-equal "^3.1.1" 122 | fast-json-stable-stringify "^2.0.0" 123 | json-schema-traverse "^0.4.1" 124 | uri-js "^4.2.2" 125 | 126 | ansi-align@^3.0.0: 127 | version "3.0.1" 128 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" 129 | integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== 130 | dependencies: 131 | string-width "^4.1.0" 132 | 133 | ansi-regex@^5.0.1: 134 | version "5.0.1" 135 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 136 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 137 | 138 | ansi-styles@^3.2.1: 139 | version "3.2.1" 140 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 141 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 142 | dependencies: 143 | color-convert "^1.9.0" 144 | 145 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 146 | version "4.3.0" 147 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 148 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 149 | dependencies: 150 | color-convert "^2.0.1" 151 | 152 | anymatch@~3.1.2: 153 | version "3.1.2" 154 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 155 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 156 | dependencies: 157 | normalize-path "^3.0.0" 158 | picomatch "^2.0.4" 159 | 160 | arch@^2.1.1: 161 | version "2.2.0" 162 | resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" 163 | integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== 164 | 165 | arg@2.0.0: 166 | version "2.0.0" 167 | resolved "https://registry.yarnpkg.com/arg/-/arg-2.0.0.tgz#c06e7ff69ab05b3a4a03ebe0407fac4cba657545" 168 | integrity sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w== 169 | 170 | balanced-match@^1.0.0: 171 | version "1.0.2" 172 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 173 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 174 | 175 | binary-extensions@^2.0.0: 176 | version "2.2.0" 177 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 178 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 179 | 180 | boxen@5.1.2: 181 | version "5.1.2" 182 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" 183 | integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== 184 | dependencies: 185 | ansi-align "^3.0.0" 186 | camelcase "^6.2.0" 187 | chalk "^4.1.0" 188 | cli-boxes "^2.2.1" 189 | string-width "^4.2.2" 190 | type-fest "^0.20.2" 191 | widest-line "^3.1.0" 192 | wrap-ansi "^7.0.0" 193 | 194 | brace-expansion@^1.1.7: 195 | version "1.1.11" 196 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 197 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 198 | dependencies: 199 | balanced-match "^1.0.0" 200 | concat-map "0.0.1" 201 | 202 | braces@~3.0.2: 203 | version "3.0.2" 204 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 205 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 206 | dependencies: 207 | fill-range "^7.0.1" 208 | 209 | builtin-modules@^3.1.0: 210 | version "3.2.0" 211 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" 212 | integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== 213 | 214 | bytes@3.0.0: 215 | version "3.0.0" 216 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 217 | integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= 218 | 219 | camelcase@^6.2.0: 220 | version "6.3.0" 221 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 222 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 223 | 224 | chalk@2.4.1: 225 | version "2.4.1" 226 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" 227 | integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== 228 | dependencies: 229 | ansi-styles "^3.2.1" 230 | escape-string-regexp "^1.0.5" 231 | supports-color "^5.3.0" 232 | 233 | chalk@^4.1.0: 234 | version "4.1.2" 235 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 236 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 237 | dependencies: 238 | ansi-styles "^4.1.0" 239 | supports-color "^7.1.0" 240 | 241 | chokidar@^3.5.3: 242 | version "3.5.3" 243 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 244 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 245 | dependencies: 246 | anymatch "~3.1.2" 247 | braces "~3.0.2" 248 | glob-parent "~5.1.2" 249 | is-binary-path "~2.1.0" 250 | is-glob "~4.0.1" 251 | normalize-path "~3.0.0" 252 | readdirp "~3.6.0" 253 | optionalDependencies: 254 | fsevents "~2.3.2" 255 | 256 | cli-boxes@^2.2.1: 257 | version "2.2.1" 258 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" 259 | integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== 260 | 261 | clipboardy@2.3.0: 262 | version "2.3.0" 263 | resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290" 264 | integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ== 265 | dependencies: 266 | arch "^2.1.1" 267 | execa "^1.0.0" 268 | is-wsl "^2.1.1" 269 | 270 | cliui@^7.0.2: 271 | version "7.0.4" 272 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 273 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 274 | dependencies: 275 | string-width "^4.2.0" 276 | strip-ansi "^6.0.0" 277 | wrap-ansi "^7.0.0" 278 | 279 | color-convert@^1.9.0: 280 | version "1.9.3" 281 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 282 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 283 | dependencies: 284 | color-name "1.1.3" 285 | 286 | color-convert@^2.0.1: 287 | version "2.0.1" 288 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 289 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 290 | dependencies: 291 | color-name "~1.1.4" 292 | 293 | color-name@1.1.3: 294 | version "1.1.3" 295 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 296 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 297 | 298 | color-name@~1.1.4: 299 | version "1.1.4" 300 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 301 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 302 | 303 | commondir@^1.0.1: 304 | version "1.0.1" 305 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 306 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 307 | 308 | compressible@~2.0.14: 309 | version "2.0.18" 310 | resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" 311 | integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== 312 | dependencies: 313 | mime-db ">= 1.43.0 < 2" 314 | 315 | compression@1.7.3: 316 | version "1.7.3" 317 | resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" 318 | integrity sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg== 319 | dependencies: 320 | accepts "~1.3.5" 321 | bytes "3.0.0" 322 | compressible "~2.0.14" 323 | debug "2.6.9" 324 | on-headers "~1.0.1" 325 | safe-buffer "5.1.2" 326 | vary "~1.1.2" 327 | 328 | concat-map@0.0.1: 329 | version "0.0.1" 330 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 331 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 332 | 333 | concurrently@^7.0.0: 334 | version "7.0.0" 335 | resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.0.0.tgz#78d31b441cec338dab03316c221a2f9a67c529b0" 336 | integrity sha512-WKM7PUsI8wyXpF80H+zjHP32fsgsHNQfPLw/e70Z5dYkV7hF+rf8q3D+ScWJIEr57CpkO3OWBko6hwhQLPR8Pw== 337 | dependencies: 338 | chalk "^4.1.0" 339 | date-fns "^2.16.1" 340 | lodash "^4.17.21" 341 | rxjs "^6.6.3" 342 | spawn-command "^0.0.2-1" 343 | supports-color "^8.1.0" 344 | tree-kill "^1.2.2" 345 | yargs "^16.2.0" 346 | 347 | content-disposition@0.5.2: 348 | version "0.5.2" 349 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 350 | integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= 351 | 352 | cross-spawn@^6.0.0: 353 | version "6.0.5" 354 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 355 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 356 | dependencies: 357 | nice-try "^1.0.4" 358 | path-key "^2.0.1" 359 | semver "^5.5.0" 360 | shebang-command "^1.2.0" 361 | which "^1.2.9" 362 | 363 | csstype@^3.0.2: 364 | version "3.0.10" 365 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" 366 | integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== 367 | 368 | date-fns@^2.16.1: 369 | version "2.28.0" 370 | resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" 371 | integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== 372 | 373 | debug@2.6.9: 374 | version "2.6.9" 375 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 376 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 377 | dependencies: 378 | ms "2.0.0" 379 | 380 | debug@^4.3.3: 381 | version "4.3.3" 382 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 383 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 384 | dependencies: 385 | ms "2.1.2" 386 | 387 | deep-extend@^0.6.0: 388 | version "0.6.0" 389 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 390 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 391 | 392 | deepmerge@^4.2.2: 393 | version "4.2.2" 394 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" 395 | integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== 396 | 397 | emoji-regex@^8.0.0: 398 | version "8.0.0" 399 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 400 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 401 | 402 | end-of-stream@^1.1.0: 403 | version "1.4.4" 404 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 405 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 406 | dependencies: 407 | once "^1.4.0" 408 | 409 | es-module-lexer@^0.9.3: 410 | version "0.9.3" 411 | resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" 412 | integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== 413 | 414 | esbuild-android-arm64@0.14.21: 415 | version "0.14.21" 416 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.21.tgz#8842d0c3b7c81fbe2dc46ddb416ffd6eb822184b" 417 | integrity sha512-Bqgld1TY0wZv8TqiQmVxQFgYzz8ZmyzT7clXBDZFkOOdRybzsnj8AZuK1pwcLVA7Ya6XncHgJqIao7NFd3s0RQ== 418 | 419 | esbuild-darwin-64@0.14.21: 420 | version "0.14.21" 421 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.21.tgz#ec7df02ad88ecf7f8fc23a3ed7917e07dea0c9c9" 422 | integrity sha512-j+Eg+e13djzyYINVvAbOo2/zvZ2DivuJJTaBrJnJHSD7kUNuGHRkHoSfFjbI80KHkn091w350wdmXDNSgRjfYQ== 423 | 424 | esbuild-darwin-arm64@0.14.21: 425 | version "0.14.21" 426 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.21.tgz#0c2a977edec1ef54097ee56a911518c820d4e5e4" 427 | integrity sha512-nDNTKWDPI0RuoPj5BhcSB2z5EmZJJAyRtZLIjyXSqSpAyoB8eyAKXl4lB8U2P78Fnh4Lh1le/fmpewXE04JhBQ== 428 | 429 | esbuild-freebsd-64@0.14.21: 430 | version "0.14.21" 431 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.21.tgz#f5b5fc1d031286c3a0949d1bda7db774b7d0404e" 432 | integrity sha512-zIurkCHXhxELiDZtLGiexi8t8onQc2LtuE+S7457H/pP0g0MLRKMrsn/IN4LDkNe6lvBjuoZZi2OfelOHn831g== 433 | 434 | esbuild-freebsd-arm64@0.14.21: 435 | version "0.14.21" 436 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.21.tgz#a05cab908013e4992b31a675850b8c44eb468c0c" 437 | integrity sha512-wdxMmkJfbwcN+q85MpeUEamVZ40FNsBa9mPq8tAszDn8TRT2HoJvVRADPIIBa9SWWwlDChIMjkDKAnS3KS/sPA== 438 | 439 | esbuild-linux-32@0.14.21: 440 | version "0.14.21" 441 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.21.tgz#638d244cc58b951f447addb4bade628d126ef84b" 442 | integrity sha512-fmxvyzOPPh2xiEHojpCeIQP6pXcoKsWbz3ryDDIKLOsk4xp3GbpHIEAWP0xTeuhEbendmvBDVKbAVv3PnODXLg== 443 | 444 | esbuild-linux-64@0.14.21: 445 | version "0.14.21" 446 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.21.tgz#8eb634abee928be7e35b985fafbfef2f2e31397f" 447 | integrity sha512-edZyNOv1ql+kpmlzdqzzDjRQYls+tSyi4QFi+PdBhATJFUqHsnNELWA9vMSzAaInPOEaVUTA5Ml28XFChcy4DA== 448 | 449 | esbuild-linux-arm64@0.14.21: 450 | version "0.14.21" 451 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.21.tgz#e05599ea6253b58394157da162d856f3ead62f9e" 452 | integrity sha512-t5qxRkq4zdQC0zXpzSB2bTtfLgOvR0C6BXYaRE/6/k8/4SrkZcTZBeNu+xGvwCU4b5dU9ST9pwIWkK6T1grS8g== 453 | 454 | esbuild-linux-arm@0.14.21: 455 | version "0.14.21" 456 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.21.tgz#1ae1078231cf689d3ba894a32d3723c0be9b91fd" 457 | integrity sha512-aSU5pUueK6afqmLQsbU+QcFBT62L+4G9hHMJDHWfxgid6hzhSmfRH9U/f+ymvxsSTr/HFRU4y7ox8ZyhlVl98w== 458 | 459 | esbuild-linux-mips64le@0.14.21: 460 | version "0.14.21" 461 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.21.tgz#f05be62d126764e99b37edcac5bb49b78c7a8890" 462 | integrity sha512-jLZLQGCNlUsmIHtGqNvBs3zN+7a4D9ckf0JZ+jQTwHdZJ1SgV9mAjbB980OFo66LoY+WeM7t3WEnq3FjI1zw4A== 463 | 464 | esbuild-linux-ppc64le@0.14.21: 465 | version "0.14.21" 466 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.21.tgz#592c98d82dad7982268ef8deed858c4566f07ab1" 467 | integrity sha512-4TWxpK391en2UBUw6GSrukToTDu6lL9vkm3Ll40HrI08WG3qcnJu7bl8e1+GzelDsiw1QmfAY/nNvJ6iaHRpCQ== 468 | 469 | esbuild-linux-riscv64@0.14.21: 470 | version "0.14.21" 471 | resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.21.tgz#0db7bd6f10d8f9afea973a7d6bf87b449b864b7b" 472 | integrity sha512-fElngqOaOfTsF+u+oetDLHsPG74vB2ZaGZUqmGefAJn3a5z9Z2pNa4WpVbbKgHpaAAy5tWM1m1sbGohj6Ki6+Q== 473 | 474 | esbuild-linux-s390x@0.14.21: 475 | version "0.14.21" 476 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.21.tgz#254a9354d34c9d1b41a3e21d2ec9269cbbb2c5df" 477 | integrity sha512-brleZ6R5fYv0qQ7ZBwenQmP6i9TdvJCB092c/3D3pTLQHBGHJb5zWgKxOeS7bdHzmLy6a6W7GbFk6QKpjyD6QA== 478 | 479 | esbuild-netbsd-64@0.14.21: 480 | version "0.14.21" 481 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.21.tgz#4cb783d060b02bf3b897a9a12cce2b3b547726f8" 482 | integrity sha512-nCEgsLCQ8RoFWVV8pVI+kX66ICwbPP/M9vEa0NJGIEB/Vs5sVGMqkf67oln90XNSkbc0bPBDuo4G6FxlF7PN8g== 483 | 484 | esbuild-openbsd-64@0.14.21: 485 | version "0.14.21" 486 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.21.tgz#f886b93feefddbe573528fa4b421c9c6e2bc969b" 487 | integrity sha512-h9zLMyVD0T73MDTVYIb/qUTokwI6EJH9O6wESuTNq6+XpMSr6C5aYZ4fvFKdNELW+Xsod+yDS2hV2JTUAbFrLA== 488 | 489 | esbuild-sunos-64@0.14.21: 490 | version "0.14.21" 491 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.21.tgz#3829e4d57d4cb6950837fe90b0b67cdfb37cf13a" 492 | integrity sha512-Kl+7Cot32qd9oqpLdB1tEGXEkjBlijrIxMJ0+vlDFaqsODutif25on0IZlFxEBtL2Gosd4p5WCV1U7UskNQfXA== 493 | 494 | esbuild-windows-32@0.14.21: 495 | version "0.14.21" 496 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.21.tgz#b858a22d1a82e53cdc59310cd56294133f7a95e7" 497 | integrity sha512-V7vnTq67xPBUCk/9UtlolmQ798Ecjdr1ZoI1vcSgw7M82aSSt0eZdP6bh5KAFZU8pxDcx3qoHyWQfHYr11f22A== 498 | 499 | esbuild-windows-64@0.14.21: 500 | version "0.14.21" 501 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.21.tgz#7bb5a027d5720cf9caf18a4bedd11327208f1f12" 502 | integrity sha512-kDgHjKOHwjfJDCyRGELzVxiP/RBJBTA+wyspf78MTTJQkyPuxH2vChReNdWc+dU2S4gIZFHMdP1Qrl/k22ZmaA== 503 | 504 | esbuild-windows-arm64@0.14.21: 505 | version "0.14.21" 506 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.21.tgz#25df54521ad602c826b262ea2e7cc1fe80f5c2f5" 507 | integrity sha512-8Sbo0zpzgwWrwjQYLmHF78f7E2xg5Ve63bjB2ng3V2aManilnnTGaliq2snYg+NOX60+hEvJHRdVnuIAHW0lVw== 508 | 509 | esbuild@^0.14.21: 510 | version "0.14.21" 511 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.21.tgz#b3e05f900f1c4394f596d60d63d9816468f0f671" 512 | integrity sha512-7WEoNMBJdLN993dr9h0CpFHPRc3yFZD+EAVY9lg6syJJ12gc5fHq8d75QRExuhnMkT2DaRiIKFThRvDWP+fO+A== 513 | optionalDependencies: 514 | esbuild-android-arm64 "0.14.21" 515 | esbuild-darwin-64 "0.14.21" 516 | esbuild-darwin-arm64 "0.14.21" 517 | esbuild-freebsd-64 "0.14.21" 518 | esbuild-freebsd-arm64 "0.14.21" 519 | esbuild-linux-32 "0.14.21" 520 | esbuild-linux-64 "0.14.21" 521 | esbuild-linux-arm "0.14.21" 522 | esbuild-linux-arm64 "0.14.21" 523 | esbuild-linux-mips64le "0.14.21" 524 | esbuild-linux-ppc64le "0.14.21" 525 | esbuild-linux-riscv64 "0.14.21" 526 | esbuild-linux-s390x "0.14.21" 527 | esbuild-netbsd-64 "0.14.21" 528 | esbuild-openbsd-64 "0.14.21" 529 | esbuild-sunos-64 "0.14.21" 530 | esbuild-windows-32 "0.14.21" 531 | esbuild-windows-64 "0.14.21" 532 | esbuild-windows-arm64 "0.14.21" 533 | 534 | escalade@^3.1.1: 535 | version "3.1.1" 536 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 537 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 538 | 539 | escape-string-regexp@^1.0.5: 540 | version "1.0.5" 541 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 542 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 543 | 544 | estree-walker@^1.0.1: 545 | version "1.0.1" 546 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" 547 | integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== 548 | 549 | estree-walker@^2.0.1: 550 | version "2.0.2" 551 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 552 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 553 | 554 | execa@^1.0.0: 555 | version "1.0.0" 556 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" 557 | integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== 558 | dependencies: 559 | cross-spawn "^6.0.0" 560 | get-stream "^4.0.0" 561 | is-stream "^1.1.0" 562 | npm-run-path "^2.0.0" 563 | p-finally "^1.0.0" 564 | signal-exit "^3.0.0" 565 | strip-eof "^1.0.0" 566 | 567 | fast-deep-equal@^3.1.1: 568 | version "3.1.3" 569 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 570 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 571 | 572 | fast-json-stable-stringify@^2.0.0: 573 | version "2.1.0" 574 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 575 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 576 | 577 | fast-url-parser@1.1.3: 578 | version "1.1.3" 579 | resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" 580 | integrity sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0= 581 | dependencies: 582 | punycode "^1.3.2" 583 | 584 | fill-range@^7.0.1: 585 | version "7.0.1" 586 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 587 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 588 | dependencies: 589 | to-regex-range "^5.0.1" 590 | 591 | fs.realpath@^1.0.0: 592 | version "1.0.0" 593 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 594 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 595 | 596 | fsevents@~2.3.2: 597 | version "2.3.2" 598 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 599 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 600 | 601 | function-bind@^1.1.1: 602 | version "1.1.1" 603 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 604 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 605 | 606 | get-caller-file@^2.0.5: 607 | version "2.0.5" 608 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 609 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 610 | 611 | get-stream@^4.0.0: 612 | version "4.1.0" 613 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 614 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 615 | dependencies: 616 | pump "^3.0.0" 617 | 618 | glob-parent@~5.1.2: 619 | version "5.1.2" 620 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 621 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 622 | dependencies: 623 | is-glob "^4.0.1" 624 | 625 | glob@^7.1.6: 626 | version "7.2.0" 627 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 628 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 629 | dependencies: 630 | fs.realpath "^1.0.0" 631 | inflight "^1.0.4" 632 | inherits "2" 633 | minimatch "^3.0.4" 634 | once "^1.3.0" 635 | path-is-absolute "^1.0.0" 636 | 637 | has-flag@^3.0.0: 638 | version "3.0.0" 639 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 640 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 641 | 642 | has-flag@^4.0.0: 643 | version "4.0.0" 644 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 645 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 646 | 647 | has@^1.0.3: 648 | version "1.0.3" 649 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 650 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 651 | dependencies: 652 | function-bind "^1.1.1" 653 | 654 | inflight@^1.0.4: 655 | version "1.0.6" 656 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 657 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 658 | dependencies: 659 | once "^1.3.0" 660 | wrappy "1" 661 | 662 | inherits@2: 663 | version "2.0.4" 664 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 665 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 666 | 667 | ini@~1.3.0: 668 | version "1.3.8" 669 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 670 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 671 | 672 | is-binary-path@~2.1.0: 673 | version "2.1.0" 674 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 675 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 676 | dependencies: 677 | binary-extensions "^2.0.0" 678 | 679 | is-core-module@^2.8.1: 680 | version "2.8.1" 681 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" 682 | integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== 683 | dependencies: 684 | has "^1.0.3" 685 | 686 | is-docker@^2.0.0: 687 | version "2.2.1" 688 | resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" 689 | integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== 690 | 691 | is-extglob@^2.1.1: 692 | version "2.1.1" 693 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 694 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 695 | 696 | is-fullwidth-code-point@^3.0.0: 697 | version "3.0.0" 698 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 699 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 700 | 701 | is-glob@^4.0.1, is-glob@~4.0.1: 702 | version "4.0.3" 703 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 704 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 705 | dependencies: 706 | is-extglob "^2.1.1" 707 | 708 | is-module@^1.0.0: 709 | version "1.0.0" 710 | resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" 711 | integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= 712 | 713 | is-number@^7.0.0: 714 | version "7.0.0" 715 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 716 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 717 | 718 | is-reference@^1.2.1: 719 | version "1.2.1" 720 | resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" 721 | integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== 722 | dependencies: 723 | "@types/estree" "*" 724 | 725 | is-stream@^1.1.0: 726 | version "1.1.0" 727 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 728 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 729 | 730 | is-wsl@^2.1.1: 731 | version "2.2.0" 732 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" 733 | integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== 734 | dependencies: 735 | is-docker "^2.0.0" 736 | 737 | isexe@^2.0.0: 738 | version "2.0.0" 739 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 740 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 741 | 742 | joycon@^3.0.1: 743 | version "3.1.1" 744 | resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" 745 | integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== 746 | 747 | json-schema-traverse@^0.4.1: 748 | version "0.4.1" 749 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 750 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 751 | 752 | jsonc-parser@^3.0.0: 753 | version "3.0.0" 754 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" 755 | integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== 756 | 757 | lodash@^4.17.21: 758 | version "4.17.21" 759 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 760 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 761 | 762 | magic-string@^0.25.7: 763 | version "0.25.7" 764 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" 765 | integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== 766 | dependencies: 767 | sourcemap-codec "^1.4.4" 768 | 769 | mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": 770 | version "1.51.0" 771 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" 772 | integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== 773 | 774 | mime-db@~1.33.0: 775 | version "1.33.0" 776 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" 777 | integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== 778 | 779 | mime-types@2.1.18: 780 | version "2.1.18" 781 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" 782 | integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== 783 | dependencies: 784 | mime-db "~1.33.0" 785 | 786 | mime-types@~2.1.34: 787 | version "2.1.34" 788 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" 789 | integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== 790 | dependencies: 791 | mime-db "1.51.0" 792 | 793 | minimatch@3.0.4: 794 | version "3.0.4" 795 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 796 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 797 | dependencies: 798 | brace-expansion "^1.1.7" 799 | 800 | minimatch@^3.0.4: 801 | version "3.0.5" 802 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" 803 | integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== 804 | dependencies: 805 | brace-expansion "^1.1.7" 806 | 807 | minimist@^1.2.0: 808 | version "1.2.5" 809 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 810 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 811 | 812 | monaco-editor@^0.29.1: 813 | version "0.29.1" 814 | resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.29.1.tgz#6ee93d8a5320704d48fd7058204deed72429c020" 815 | integrity sha512-rguaEG/zrPQSaKzQB7IfX/PpNa0qxF1FY8ZXRkN4WIl8qZdTQRSRJCtRto7IMcSgrU6H53RXI+fTcywOBC4aVw== 816 | 817 | ms@2.0.0: 818 | version "2.0.0" 819 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 820 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 821 | 822 | ms@2.1.2: 823 | version "2.1.2" 824 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 825 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 826 | 827 | negotiator@0.6.3: 828 | version "0.6.3" 829 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" 830 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 831 | 832 | nice-try@^1.0.4: 833 | version "1.0.5" 834 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 835 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 836 | 837 | node-fetch@^2.6.0: 838 | version "2.6.7" 839 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 840 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 841 | dependencies: 842 | whatwg-url "^5.0.0" 843 | 844 | normalize-path@^3.0.0, normalize-path@~3.0.0: 845 | version "3.0.0" 846 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 847 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 848 | 849 | npm-run-path@^2.0.0: 850 | version "2.0.2" 851 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 852 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 853 | dependencies: 854 | path-key "^2.0.0" 855 | 856 | on-headers@~1.0.1: 857 | version "1.0.2" 858 | resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" 859 | integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== 860 | 861 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 862 | version "1.4.0" 863 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 864 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 865 | dependencies: 866 | wrappy "1" 867 | 868 | p-finally@^1.0.0: 869 | version "1.0.0" 870 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 871 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 872 | 873 | path-is-absolute@^1.0.0: 874 | version "1.0.1" 875 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 876 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 877 | 878 | path-is-inside@1.0.2: 879 | version "1.0.2" 880 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 881 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= 882 | 883 | path-key@^2.0.0, path-key@^2.0.1: 884 | version "2.0.1" 885 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 886 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 887 | 888 | path-parse@^1.0.7: 889 | version "1.0.7" 890 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 891 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 892 | 893 | path-to-regexp@2.2.1: 894 | version "2.2.1" 895 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" 896 | integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== 897 | 898 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2: 899 | version "2.3.1" 900 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 901 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 902 | 903 | prettier@^3.2.5: 904 | version "3.2.5" 905 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" 906 | integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== 907 | 908 | pump@^3.0.0: 909 | version "3.0.0" 910 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 911 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 912 | dependencies: 913 | end-of-stream "^1.1.0" 914 | once "^1.3.1" 915 | 916 | punycode@^1.3.2: 917 | version "1.4.1" 918 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 919 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= 920 | 921 | punycode@^2.1.0: 922 | version "2.1.1" 923 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 924 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 925 | 926 | range-parser@1.2.0: 927 | version "1.2.0" 928 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 929 | integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= 930 | 931 | rc@^1.0.1, rc@^1.1.6: 932 | version "1.2.8" 933 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 934 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 935 | dependencies: 936 | deep-extend "^0.6.0" 937 | ini "~1.3.0" 938 | minimist "^1.2.0" 939 | strip-json-comments "~2.0.1" 940 | 941 | readdirp@~3.6.0: 942 | version "3.6.0" 943 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 944 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 945 | dependencies: 946 | picomatch "^2.2.1" 947 | 948 | registry-auth-token@3.3.2: 949 | version "3.3.2" 950 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" 951 | integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ== 952 | dependencies: 953 | rc "^1.1.6" 954 | safe-buffer "^5.0.1" 955 | 956 | registry-url@3.1.0: 957 | version "3.1.0" 958 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 959 | integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= 960 | dependencies: 961 | rc "^1.0.1" 962 | 963 | require-directory@^2.1.1: 964 | version "2.1.1" 965 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 966 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 967 | 968 | resolve@^1.17.0, resolve@^1.19.0: 969 | version "1.22.0" 970 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" 971 | integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== 972 | dependencies: 973 | is-core-module "^2.8.1" 974 | path-parse "^1.0.7" 975 | supports-preserve-symlinks-flag "^1.0.0" 976 | 977 | rollup-plugin-esbuild@^4.8.2: 978 | version "4.8.2" 979 | resolved "https://registry.yarnpkg.com/rollup-plugin-esbuild/-/rollup-plugin-esbuild-4.8.2.tgz#c097b93cd4b622e62206cadb5797589f548cf48c" 980 | integrity sha512-wsaYNOjzTb6dN1qCIZsMZ7Q0LWiPJklYs2TDI8vJA2LUbvtPUY+17TC8C0vSat3jPMInfR9XWKdA7ttuwkjsGQ== 981 | dependencies: 982 | "@rollup/pluginutils" "^4.1.1" 983 | debug "^4.3.3" 984 | es-module-lexer "^0.9.3" 985 | joycon "^3.0.1" 986 | jsonc-parser "^3.0.0" 987 | 988 | rollup@^2.67.2: 989 | version "2.67.2" 990 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.67.2.tgz#d95e15f60932ad21e05a870bd0aa0b235d056f04" 991 | integrity sha512-hoEiBWwZtf1QdK3jZIq59L0FJj4Fiv4RplCO4pvCRC86qsoFurWB4hKQIjoRf3WvJmk5UZ9b0y5ton+62fC7Tw== 992 | optionalDependencies: 993 | fsevents "~2.3.2" 994 | 995 | rxjs@^6.6.3: 996 | version "6.6.7" 997 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" 998 | integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== 999 | dependencies: 1000 | tslib "^1.9.0" 1001 | 1002 | safe-buffer@5.1.2: 1003 | version "5.1.2" 1004 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1005 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1006 | 1007 | safe-buffer@^5.0.1: 1008 | version "5.2.1" 1009 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1010 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1011 | 1012 | semver@^5.5.0: 1013 | version "5.7.1" 1014 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1015 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1016 | 1017 | serve-handler@6.1.3: 1018 | version "6.1.3" 1019 | resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.3.tgz#1bf8c5ae138712af55c758477533b9117f6435e8" 1020 | integrity sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w== 1021 | dependencies: 1022 | bytes "3.0.0" 1023 | content-disposition "0.5.2" 1024 | fast-url-parser "1.1.3" 1025 | mime-types "2.1.18" 1026 | minimatch "3.0.4" 1027 | path-is-inside "1.0.2" 1028 | path-to-regexp "2.2.1" 1029 | range-parser "1.2.0" 1030 | 1031 | serve@^13.0.2: 1032 | version "13.0.2" 1033 | resolved "https://registry.yarnpkg.com/serve/-/serve-13.0.2.tgz#b19ccb854dfdf3085613cd3a4033c7807aeaf85b" 1034 | integrity sha512-71R6fKvNgKrqARAag6lYJNnxDzpH7DCNrMuvPY5PLVaC2PDhJsGTj/34o4o4tPWhTuLgEXqvgnAWbATQ9zGZTQ== 1035 | dependencies: 1036 | "@zeit/schemas" "2.6.0" 1037 | ajv "6.12.6" 1038 | arg "2.0.0" 1039 | boxen "5.1.2" 1040 | chalk "2.4.1" 1041 | clipboardy "2.3.0" 1042 | compression "1.7.3" 1043 | serve-handler "6.1.3" 1044 | update-check "1.5.2" 1045 | 1046 | shebang-command@^1.2.0: 1047 | version "1.2.0" 1048 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1049 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1050 | dependencies: 1051 | shebang-regex "^1.0.0" 1052 | 1053 | shebang-regex@^1.0.0: 1054 | version "1.0.0" 1055 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1056 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1057 | 1058 | signal-exit@^3.0.0: 1059 | version "3.0.7" 1060 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 1061 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 1062 | 1063 | sourcemap-codec@^1.4.4: 1064 | version "1.4.8" 1065 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 1066 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 1067 | 1068 | spawn-command@^0.0.2-1: 1069 | version "0.0.2-1" 1070 | resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" 1071 | integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= 1072 | 1073 | string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: 1074 | version "4.2.3" 1075 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1076 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1077 | dependencies: 1078 | emoji-regex "^8.0.0" 1079 | is-fullwidth-code-point "^3.0.0" 1080 | strip-ansi "^6.0.1" 1081 | 1082 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1083 | version "6.0.1" 1084 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1085 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1086 | dependencies: 1087 | ansi-regex "^5.0.1" 1088 | 1089 | strip-eof@^1.0.0: 1090 | version "1.0.0" 1091 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 1092 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 1093 | 1094 | strip-json-comments@~2.0.1: 1095 | version "2.0.1" 1096 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1097 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1098 | 1099 | supports-color@^5.3.0: 1100 | version "5.5.0" 1101 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1102 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1103 | dependencies: 1104 | has-flag "^3.0.0" 1105 | 1106 | supports-color@^7.1.0: 1107 | version "7.2.0" 1108 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1109 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1110 | dependencies: 1111 | has-flag "^4.0.0" 1112 | 1113 | supports-color@^8.1.0: 1114 | version "8.1.1" 1115 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1116 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1117 | dependencies: 1118 | has-flag "^4.0.0" 1119 | 1120 | supports-preserve-symlinks-flag@^1.0.0: 1121 | version "1.0.0" 1122 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1123 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1124 | 1125 | to-regex-range@^5.0.1: 1126 | version "5.0.1" 1127 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1128 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1129 | dependencies: 1130 | is-number "^7.0.0" 1131 | 1132 | tr46@~0.0.3: 1133 | version "0.0.3" 1134 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1135 | integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= 1136 | 1137 | tree-kill@^1.2.2: 1138 | version "1.2.2" 1139 | resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" 1140 | integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== 1141 | 1142 | tslib@^1.10.0, tslib@^1.9.0: 1143 | version "1.14.1" 1144 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1145 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1146 | 1147 | type-fest@^0.20.2: 1148 | version "0.20.2" 1149 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1150 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1151 | 1152 | typescript@latest: 1153 | version "4.5.5" 1154 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" 1155 | integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== 1156 | 1157 | update-check@1.5.2: 1158 | version "1.5.2" 1159 | resolved "https://registry.yarnpkg.com/update-check/-/update-check-1.5.2.tgz#2fe09f725c543440b3d7dabe8971f2d5caaedc28" 1160 | integrity sha512-1TrmYLuLj/5ZovwUS7fFd1jMH3NnFDN1y1A8dboedIDt7zs/zJMo6TwwlhYKkSeEwzleeiSBV5/3c9ufAQWDaQ== 1161 | dependencies: 1162 | registry-auth-token "3.3.2" 1163 | registry-url "3.1.0" 1164 | 1165 | uri-js@^4.2.2: 1166 | version "4.4.1" 1167 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1168 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1169 | dependencies: 1170 | punycode "^2.1.0" 1171 | 1172 | vary@~1.1.2: 1173 | version "1.1.2" 1174 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1175 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 1176 | 1177 | webidl-conversions@^3.0.0: 1178 | version "3.0.1" 1179 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 1180 | integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= 1181 | 1182 | whatwg-url@^5.0.0: 1183 | version "5.0.0" 1184 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 1185 | integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= 1186 | dependencies: 1187 | tr46 "~0.0.3" 1188 | webidl-conversions "^3.0.0" 1189 | 1190 | which@^1.2.9: 1191 | version "1.3.1" 1192 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1193 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1194 | dependencies: 1195 | isexe "^2.0.0" 1196 | 1197 | widest-line@^3.1.0: 1198 | version "3.1.0" 1199 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" 1200 | integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== 1201 | dependencies: 1202 | string-width "^4.0.0" 1203 | 1204 | wrap-ansi@^7.0.0: 1205 | version "7.0.0" 1206 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1207 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1208 | dependencies: 1209 | ansi-styles "^4.0.0" 1210 | string-width "^4.1.0" 1211 | strip-ansi "^6.0.0" 1212 | 1213 | wrappy@1: 1214 | version "1.0.2" 1215 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1216 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1217 | 1218 | y18n@^5.0.5: 1219 | version "5.0.8" 1220 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1221 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1222 | 1223 | yargs-parser@^20.2.2: 1224 | version "20.2.9" 1225 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 1226 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 1227 | 1228 | yargs@^16.2.0: 1229 | version "16.2.0" 1230 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1231 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1232 | dependencies: 1233 | cliui "^7.0.2" 1234 | escalade "^3.1.1" 1235 | get-caller-file "^2.0.5" 1236 | require-directory "^2.1.1" 1237 | string-width "^4.2.0" 1238 | y18n "^5.0.5" 1239 | yargs-parser "^20.2.2" 1240 | --------------------------------------------------------------------------------