├── .gitattributes ├── .gitignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── dist ├── highlightjs-vue.esm.min.js ├── highlightjs-vue.min.js ├── lib │ ├── utils.d.ts │ └── utils.d.ts.map ├── vue.d.ts └── vue.d.ts.map ├── package-lock.json ├── package.json ├── rollup.config.js ├── src ├── lib │ └── utils.ts └── vue.ts └── tsconfig.json /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .vscode 3 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 2.1.3 2 | 3 | - Fix `language` prop being ignored unless `autodetect` is explicitly set to `false` (#41) 4 | 5 | ## 2.1.2 6 | 7 | - Default to `tabindex="0"` on the internal `` element to allow keyboard scrolling when a scrollbar is applied to the element. This resolves an accessibility issue found by Vue-Axe. (#33) 8 | 9 | ## 2.1.1 10 | 11 | - add `exports "."` to `package.json` (#27) 12 | 13 | ## 2.1.0 14 | 15 | - `vue` and `highlight.js` moved to `peerDependencies` (#17) 16 | - no other changes 17 | 18 | ## 2.0.1 19 | 20 | - Export `component` also 21 | - Fix name of types file 22 | 23 | ## 2.0.0 24 | 25 | - Vue 3.x support 26 | - TypeScript 27 | 28 | ## 1.0.1 29 | 30 | - Publishing 1.0 was weird, just wanting to make sure the correct code was on NPM. 31 | 32 | ## 1.0.0 33 | 34 | - Update to the newer Highlight.js `highlight` API. 35 | - Clarify in README this is for Vue.js 2.0 36 | 37 | ## 0.9.0 38 | 39 | - Original release 40 | - Code split out from the original Highlight.js package 41 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | This plugin is designed to be small and simple, but we're also open to possible contributions and improvements. 4 | 5 | Please open an issue first to discuss your ideas. 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2022, Josh Goebel 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Highlight.js plugin for Vue.js 2 | 3 | [![latest version](https://badgen.net/npm/v/@highlightjs/vue-plugin/latest?label=latest)](https://www.npmjs.com/package/@highlightjs/vue-plugin) 4 | [![latest version](https://badgen.net/npm/v/@highlightjs/vue-plugin/next?label=next)](https://www.npmjs.com/package/@highlightjs/vue-plugin) 5 | ![vue 3](https://badgen.net/badge/vue/3/green) 6 | ![vue 2](https://badgen.net/badge/vue/2/green) 7 | [![license](https://badgen.net/github/license/highlightjs/vue-plugin?color=cyan)](https://github.com/highlightjs/vue-plugin/blob/main/LICENSE) 8 | 9 | [![publish size](https://badgen.net/packagephobia/publish/@highlightjs/vue-plugin?label=size)](https://packagephobia.com/result?p=@highlightjs/vue-plugin) 10 | [![gzipped size](https://badgen.net/bundlephobia/minzip/@highlightjs/vue-plugin?label=gzipped)](https://bundlephobia.com/result?p=@highlightjs/vue-plugin) 11 | [![slack](https://badgen.net/badge/icon/slack?icon=slack&label&color=pink)](https://join.slack.com/t/highlightjs/shared_invite/zt-mj0utgqp-TNFf4VQICnDnPg4zMHChFw) 12 | 13 | 14 | This plugin provides a `highlightjs` component for use in your Vue.js 3 applications: 15 | 16 | ```html 17 |
18 | 19 | 20 | 21 | 22 |
23 | ``` 24 | 25 | Note: For Vue.js version 2 support see the [1-stable](https://github.com/highlightjs/vue-plugin/tree/1-stable) branch here on GitHub. Version 1.x.x is compatible with Vue.js v2; version 2.x.x with Vue.js v3. 26 | 27 | ## Installation 28 | 29 | ```shell 30 | npm add @highlightjs/vue-plugin 31 | ``` 32 | 33 | ## Using ES6 modules / bundling 34 | 35 | As a [Vue Plugin](https://vuejs.org/guide/reusability/plugins.html): 36 | 37 | ```js 38 | import 'highlight.js/styles/stackoverflow-light.css' 39 | import hljs from 'highlight.js/lib/core'; 40 | import javascript from 'highlight.js/lib/languages/javascript'; 41 | import hljsVuePlugin from "@highlightjs/vue-plugin"; 42 | 43 | hljs.registerLanguage('javascript', javascript); 44 | 45 | const app = createApp(App) 46 | app.use(hljsVuePlugin) 47 | app.mount('#app') 48 | ``` 49 | 50 | Note: The plugin imports `highlight.js/lib/core` internally (but no languages). Thanks to the magic of ES6 modules you can import Highlight.js anywhere to register languages or configure the library. Any import of Highlight.js refers to the same singleton instance of the library, so configuring the library anywhere configures it everywhere. 51 | 52 | You can also simply load all "common" languages at once (as of v11): 53 | 54 | ```js 55 | import 'highlight.js/styles/stackoverflow-light.css' 56 | import 'highlight.js/lib/common'; 57 | import hljsVuePlugin from "@highlightjs/vue-plugin"; 58 | 59 | const app = createApp(App) 60 | app.use(hljsVuePlugin) 61 | app.mount('#app') 62 | ``` 63 | 64 | Note that the `highlight.js/lib/common` import does not import the `hljs` object because it registers common languages internally and modern web bundlers like `webpack` will optimize out unused imported names. If you want to customize the `hljs` object, you can import it like the [previous example](#using-es6-modules--bundling). 65 | 66 | ## Using component locally 67 | 68 | The component can also be imported locally. However, you still have to import the css styles somewhere. 69 | 70 | ```vue 71 | 77 | 78 | 88 | ``` 89 | 90 | ## Using the pre-built libraries 91 | 92 | ```html 93 | 94 | 95 | 96 | ``` 97 | 98 | Then simply register the plugin with Vue: 99 | 100 | ```js 101 | const app = createApp(App) 102 | app.use(hljsVuePlugin) 103 | ``` 104 | 105 | ## Building the pre-built library from source 106 | 107 | We use rollup to build the `dist` distributable. 108 | 109 | ``` 110 | npm run build 111 | ``` 112 | -------------------------------------------------------------------------------- /dist/highlightjs-vue.esm.min.js: -------------------------------------------------------------------------------- 1 | import{defineComponent as e,ref as l,watch as a,computed as t,h as n}from"vue";import u from"highlight.js/lib/core";var r=e({props:{code:{type:String,required:!0},language:{type:String,default:""},autodetect:{type:Boolean,default:!0},ignoreIllegals:{type:Boolean,default:!0}},setup:function(e){var n=l(e.language);a((function(){return e.language}),(function(e){n.value=e}));var r=t((function(){return e.autodetect||!n.value})),o=t((function(){return!r.value&&!u.getLanguage(n.value)}));return{className:t((function(){return o.value?"":"hljs "+n.value})),highlightedCode:t((function(){var l;if(o.value)return console.warn('The language "'+n.value+'" you specified could not be found.'),e.code.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");if(r.value){var a=u.highlightAuto(e.code);return n.value=null!==(l=a.language)&&void 0!==l?l:"",a.value}return(a=u.highlight(e.code,{language:n.value,ignoreIllegals:e.ignoreIllegals})).value}))}},render:function(){return n("pre",{},[n("code",{class:this.className,innerHTML:this.highlightedCode})])}}),o={install:function(e){e.component("highlightjs",r)},component:r};export default o; 2 | -------------------------------------------------------------------------------- /dist/highlightjs-vue.min.js: -------------------------------------------------------------------------------- 1 | var hljsVuePlugin=function(e,n){"use strict";var u=e.defineComponent({props:{code:{type:String,required:!0},language:{type:String,default:""},autodetect:{type:Boolean,default:!0},ignoreIllegals:{type:Boolean,default:!0}},setup:function(u){var t=e.ref(u.language);e.watch((function(){return u.language}),(function(e){t.value=e}));var a=e.computed((function(){return u.autodetect||!t.value})),l=e.computed((function(){return!a.value&&!n.getLanguage(t.value)}));return{className:e.computed((function(){return l.value?"":"hljs "+t.value})),highlightedCode:e.computed((function(){var e;if(l.value)return console.warn('The language "'+t.value+'" you specified could not be found.'),u.code.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");if(a.value){var o=n.highlightAuto(u.code);return t.value=null!==(e=o.language)&&void 0!==e?e:"",o.value}return(o=n.highlight(u.code,{language:t.value,ignoreIllegals:u.ignoreIllegals})).value}))}},render:function(){return e.h("pre",{},[e.h("code",{class:this.className,innerHTML:this.highlightedCode})])}});return{install:function(e){e.component("highlightjs",u)},component:u}}(Vue,hljs); 2 | -------------------------------------------------------------------------------- /dist/lib/utils.d.ts: -------------------------------------------------------------------------------- 1 | export declare function escapeHtml(value: string): string; 2 | //# sourceMappingURL=utils.d.ts.map -------------------------------------------------------------------------------- /dist/lib/utils.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD"} -------------------------------------------------------------------------------- /dist/vue.d.ts: -------------------------------------------------------------------------------- 1 | import { Plugin } from 'vue'; 2 | declare const component: import("vue").DefineComponent<{ 3 | code: { 4 | type: StringConstructor; 5 | required: true; 6 | }; 7 | language: { 8 | type: StringConstructor; 9 | default: string; 10 | }; 11 | autodetect: { 12 | type: BooleanConstructor; 13 | default: boolean; 14 | }; 15 | ignoreIllegals: { 16 | type: BooleanConstructor; 17 | default: boolean; 18 | }; 19 | }, { 20 | className: import("vue").ComputedRef; 21 | highlightedCode: import("vue").ComputedRef; 22 | }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<{ 23 | code: string; 24 | language: string; 25 | autodetect: boolean; 26 | ignoreIllegals: boolean; 27 | } & {}>, { 28 | language: string; 29 | autodetect: boolean; 30 | ignoreIllegals: boolean; 31 | }>; 32 | declare const plugin: Plugin & { 33 | component: typeof component; 34 | }; 35 | export default plugin; 36 | //# sourceMappingURL=vue.d.ts.map -------------------------------------------------------------------------------- /dist/vue.d.ts.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../src/vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,MAAM,EAAS,MAAM,KAAK,CAAA;AAItE,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqEb,CAAA;AAEF,QAAA,MAAM,MAAM,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,OAAO,SAAS,CAAA;CAKnD,CAAA;AAED,eAAe,MAAM,CAAA"} -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@highlightjs/vue-plugin", 3 | "version": "2.1.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@highlightjs/vue-plugin", 9 | "version": "2.0.1", 10 | "license": "BSD-3-Clause", 11 | "dependencies": { 12 | "highlight.js": "^11.0.1", 13 | "vue": "^3" 14 | }, 15 | "devDependencies": { 16 | "rollup": "^2.42.3", 17 | "rollup-plugin-terser": "^7.0.2", 18 | "rollup-plugin-typescript2": "^0.30.0", 19 | "tslib": "^2.2.0", 20 | "typescript": "^4.2.4" 21 | } 22 | }, 23 | "node_modules/@babel/code-frame": { 24 | "version": "7.12.13", 25 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", 26 | "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", 27 | "dev": true, 28 | "dependencies": { 29 | "@babel/highlight": "^7.12.13" 30 | } 31 | }, 32 | "node_modules/@babel/helper-validator-identifier": { 33 | "version": "7.14.5", 34 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", 35 | "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", 36 | "engines": { 37 | "node": ">=6.9.0" 38 | } 39 | }, 40 | "node_modules/@babel/highlight": { 41 | "version": "7.13.10", 42 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", 43 | "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", 44 | "dev": true, 45 | "dependencies": { 46 | "@babel/helper-validator-identifier": "^7.12.11", 47 | "chalk": "^2.0.0", 48 | "js-tokens": "^4.0.0" 49 | } 50 | }, 51 | "node_modules/@babel/parser": { 52 | "version": "7.14.7", 53 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", 54 | "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", 55 | "bin": { 56 | "parser": "bin/babel-parser.js" 57 | }, 58 | "engines": { 59 | "node": ">=6.0.0" 60 | } 61 | }, 62 | "node_modules/@babel/types": { 63 | "version": "7.14.5", 64 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", 65 | "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", 66 | "dependencies": { 67 | "@babel/helper-validator-identifier": "^7.14.5", 68 | "to-fast-properties": "^2.0.0" 69 | }, 70 | "engines": { 71 | "node": ">=6.9.0" 72 | } 73 | }, 74 | "node_modules/@rollup/pluginutils": { 75 | "version": "4.1.0", 76 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", 77 | "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", 78 | "dev": true, 79 | "dependencies": { 80 | "estree-walker": "^2.0.1", 81 | "picomatch": "^2.2.2" 82 | }, 83 | "engines": { 84 | "node": ">= 8.0.0" 85 | }, 86 | "peerDependencies": { 87 | "rollup": "^1.20.0||^2.0.0" 88 | } 89 | }, 90 | "node_modules/@types/node": { 91 | "version": "14.14.35", 92 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.35.tgz", 93 | "integrity": "sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag==", 94 | "dev": true 95 | }, 96 | "node_modules/@vue/compiler-core": { 97 | "version": "3.1.2", 98 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.1.2.tgz", 99 | "integrity": "sha512-nHmq7vLjq/XM2IMbZUcKWoH5sPXa2uR/nIKZtjbK5F3TcbnYE/zKsrSUR9WZJ03unlwotNBX1OyxVt9HbWD7/Q==", 100 | "dependencies": { 101 | "@babel/parser": "^7.12.0", 102 | "@babel/types": "^7.12.0", 103 | "@vue/shared": "3.1.2", 104 | "estree-walker": "^2.0.1", 105 | "source-map": "^0.6.1" 106 | } 107 | }, 108 | "node_modules/@vue/compiler-core/node_modules/source-map": { 109 | "version": "0.6.1", 110 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 111 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 112 | "engines": { 113 | "node": ">=0.10.0" 114 | } 115 | }, 116 | "node_modules/@vue/compiler-dom": { 117 | "version": "3.1.2", 118 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.1.2.tgz", 119 | "integrity": "sha512-k2+SWcWH0jL6WQAX7Or2ONqu5MbtTgTO0dJrvebQYzgqaKMXNI90RNeWeCxS4BnNFMDONpHBeFgbwbnDWIkmRg==", 120 | "dependencies": { 121 | "@vue/compiler-core": "3.1.2", 122 | "@vue/shared": "3.1.2" 123 | } 124 | }, 125 | "node_modules/@vue/reactivity": { 126 | "version": "3.1.2", 127 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.2.tgz", 128 | "integrity": "sha512-glJzJoN2xE7I2lRvwKM5u1BHRPTd1yc8iaf//Lai/78/uYAvE5DXp5HzWRFOwMlbRvMGJHIQjOqoxj87cDAaag==", 129 | "dependencies": { 130 | "@vue/shared": "3.1.2" 131 | } 132 | }, 133 | "node_modules/@vue/runtime-core": { 134 | "version": "3.1.2", 135 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.1.2.tgz", 136 | "integrity": "sha512-gsPZG4dRIkixuuKmoj4P9IHgfT0yaFLcqWOM5F/bCk0nxQn1XtxH8oUehWuET726KhbukvDoJfe9G2CKviy80w==", 137 | "dependencies": { 138 | "@vue/reactivity": "3.1.2", 139 | "@vue/shared": "3.1.2" 140 | } 141 | }, 142 | "node_modules/@vue/runtime-dom": { 143 | "version": "3.1.2", 144 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.1.2.tgz", 145 | "integrity": "sha512-QvINxjLucEZFzp5f0NVu7JqWYCv5TKQfkH2FDs/N6QNE4iKcYtKrWdT0HKfABnVXG28Znqv6rIH0dH4ZAOwxpA==", 146 | "dependencies": { 147 | "@vue/runtime-core": "3.1.2", 148 | "@vue/shared": "3.1.2", 149 | "csstype": "^2.6.8" 150 | } 151 | }, 152 | "node_modules/@vue/shared": { 153 | "version": "3.1.2", 154 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.2.tgz", 155 | "integrity": "sha512-EmH/poaDWBPJaPILXNI/1fvUbArJQmmTyVCwvvyDYDFnkPoTclAbHRAtyIvqfez7jybTDn077HTNILpxlsoWhg==" 156 | }, 157 | "node_modules/ansi-styles": { 158 | "version": "3.2.1", 159 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 160 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 161 | "dev": true, 162 | "dependencies": { 163 | "color-convert": "^1.9.0" 164 | }, 165 | "engines": { 166 | "node": ">=4" 167 | } 168 | }, 169 | "node_modules/buffer-from": { 170 | "version": "1.1.1", 171 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 172 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 173 | "dev": true 174 | }, 175 | "node_modules/chalk": { 176 | "version": "2.4.2", 177 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 178 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 179 | "dev": true, 180 | "dependencies": { 181 | "ansi-styles": "^3.2.1", 182 | "escape-string-regexp": "^1.0.5", 183 | "supports-color": "^5.3.0" 184 | }, 185 | "engines": { 186 | "node": ">=4" 187 | } 188 | }, 189 | "node_modules/color-convert": { 190 | "version": "1.9.3", 191 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 192 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 193 | "dev": true, 194 | "dependencies": { 195 | "color-name": "1.1.3" 196 | } 197 | }, 198 | "node_modules/color-name": { 199 | "version": "1.1.3", 200 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 201 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 202 | "dev": true 203 | }, 204 | "node_modules/commander": { 205 | "version": "2.20.3", 206 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 207 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 208 | "dev": true 209 | }, 210 | "node_modules/commondir": { 211 | "version": "1.0.1", 212 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 213 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 214 | "dev": true 215 | }, 216 | "node_modules/csstype": { 217 | "version": "2.6.17", 218 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.17.tgz", 219 | "integrity": "sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==" 220 | }, 221 | "node_modules/escape-string-regexp": { 222 | "version": "1.0.5", 223 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 224 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 225 | "dev": true, 226 | "engines": { 227 | "node": ">=0.8.0" 228 | } 229 | }, 230 | "node_modules/estree-walker": { 231 | "version": "2.0.2", 232 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 233 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 234 | }, 235 | "node_modules/find-cache-dir": { 236 | "version": "3.3.1", 237 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", 238 | "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", 239 | "dev": true, 240 | "dependencies": { 241 | "commondir": "^1.0.1", 242 | "make-dir": "^3.0.2", 243 | "pkg-dir": "^4.1.0" 244 | }, 245 | "engines": { 246 | "node": ">=8" 247 | }, 248 | "funding": { 249 | "url": "https://github.com/avajs/find-cache-dir?sponsor=1" 250 | } 251 | }, 252 | "node_modules/find-up": { 253 | "version": "4.1.0", 254 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 255 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 256 | "dev": true, 257 | "dependencies": { 258 | "locate-path": "^5.0.0", 259 | "path-exists": "^4.0.0" 260 | }, 261 | "engines": { 262 | "node": ">=8" 263 | } 264 | }, 265 | "node_modules/fs-extra": { 266 | "version": "8.1.0", 267 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 268 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 269 | "dev": true, 270 | "dependencies": { 271 | "graceful-fs": "^4.2.0", 272 | "jsonfile": "^4.0.0", 273 | "universalify": "^0.1.0" 274 | }, 275 | "engines": { 276 | "node": ">=6 <7 || >=8" 277 | } 278 | }, 279 | "node_modules/fsevents": { 280 | "version": "2.3.2", 281 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 282 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 283 | "dev": true, 284 | "hasInstallScript": true, 285 | "optional": true, 286 | "os": [ 287 | "darwin" 288 | ], 289 | "engines": { 290 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 291 | } 292 | }, 293 | "node_modules/function-bind": { 294 | "version": "1.1.1", 295 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 296 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 297 | "dev": true 298 | }, 299 | "node_modules/graceful-fs": { 300 | "version": "4.2.6", 301 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 302 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", 303 | "dev": true 304 | }, 305 | "node_modules/has": { 306 | "version": "1.0.3", 307 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 308 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 309 | "dev": true, 310 | "dependencies": { 311 | "function-bind": "^1.1.1" 312 | }, 313 | "engines": { 314 | "node": ">= 0.4.0" 315 | } 316 | }, 317 | "node_modules/has-flag": { 318 | "version": "3.0.0", 319 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 320 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 321 | "dev": true, 322 | "engines": { 323 | "node": ">=8" 324 | } 325 | }, 326 | "node_modules/highlight.js": { 327 | "version": "11.0.1", 328 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.0.1.tgz", 329 | "integrity": "sha512-EqYpWyTF2s8nMfttfBA2yLKPNoZCO33pLS4MnbXQ4hECf1TKujCt1Kq7QAdrio7roL4+CqsfjqwYj4tYgq0pJQ==", 330 | "engines": { 331 | "node": ">=12.0.0" 332 | } 333 | }, 334 | "node_modules/is-core-module": { 335 | "version": "2.4.0", 336 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", 337 | "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", 338 | "dev": true, 339 | "dependencies": { 340 | "has": "^1.0.3" 341 | }, 342 | "funding": { 343 | "url": "https://github.com/sponsors/ljharb" 344 | } 345 | }, 346 | "node_modules/jest-worker": { 347 | "version": "26.6.2", 348 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 349 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 350 | "dev": true, 351 | "dependencies": { 352 | "@types/node": "*", 353 | "merge-stream": "^2.0.0", 354 | "supports-color": "^7.0.0" 355 | }, 356 | "engines": { 357 | "node": ">= 10.13.0" 358 | } 359 | }, 360 | "node_modules/jest-worker/node_modules/has-flag": { 361 | "version": "4.0.0", 362 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 363 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 364 | "dev": true, 365 | "engines": { 366 | "node": ">=8" 367 | } 368 | }, 369 | "node_modules/jest-worker/node_modules/supports-color": { 370 | "version": "7.2.0", 371 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 372 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 373 | "dev": true, 374 | "dependencies": { 375 | "has-flag": "^4.0.0" 376 | }, 377 | "engines": { 378 | "node": ">=8" 379 | } 380 | }, 381 | "node_modules/js-tokens": { 382 | "version": "4.0.0", 383 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 384 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 385 | "dev": true 386 | }, 387 | "node_modules/jsonfile": { 388 | "version": "4.0.0", 389 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 390 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 391 | "dev": true, 392 | "optionalDependencies": { 393 | "graceful-fs": "^4.1.6" 394 | } 395 | }, 396 | "node_modules/locate-path": { 397 | "version": "5.0.0", 398 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 399 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 400 | "dev": true, 401 | "dependencies": { 402 | "p-locate": "^4.1.0" 403 | }, 404 | "engines": { 405 | "node": ">=8" 406 | } 407 | }, 408 | "node_modules/make-dir": { 409 | "version": "3.1.0", 410 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 411 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 412 | "dev": true, 413 | "dependencies": { 414 | "semver": "^6.0.0" 415 | }, 416 | "engines": { 417 | "node": ">=8" 418 | }, 419 | "funding": { 420 | "url": "https://github.com/sponsors/sindresorhus" 421 | } 422 | }, 423 | "node_modules/merge-stream": { 424 | "version": "2.0.0", 425 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 426 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 427 | "dev": true 428 | }, 429 | "node_modules/p-limit": { 430 | "version": "2.3.0", 431 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 432 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 433 | "dev": true, 434 | "dependencies": { 435 | "p-try": "^2.0.0" 436 | }, 437 | "engines": { 438 | "node": ">=6" 439 | }, 440 | "funding": { 441 | "url": "https://github.com/sponsors/sindresorhus" 442 | } 443 | }, 444 | "node_modules/p-locate": { 445 | "version": "4.1.0", 446 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 447 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 448 | "dev": true, 449 | "dependencies": { 450 | "p-limit": "^2.2.0" 451 | }, 452 | "engines": { 453 | "node": ">=8" 454 | } 455 | }, 456 | "node_modules/p-try": { 457 | "version": "2.2.0", 458 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 459 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 460 | "dev": true, 461 | "engines": { 462 | "node": ">=6" 463 | } 464 | }, 465 | "node_modules/path-exists": { 466 | "version": "4.0.0", 467 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 468 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 469 | "dev": true, 470 | "engines": { 471 | "node": ">=8" 472 | } 473 | }, 474 | "node_modules/path-parse": { 475 | "version": "1.0.7", 476 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 477 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 478 | "dev": true 479 | }, 480 | "node_modules/picomatch": { 481 | "version": "2.3.0", 482 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 483 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 484 | "dev": true, 485 | "engines": { 486 | "node": ">=8.6" 487 | }, 488 | "funding": { 489 | "url": "https://github.com/sponsors/jonschlinkert" 490 | } 491 | }, 492 | "node_modules/pkg-dir": { 493 | "version": "4.2.0", 494 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 495 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 496 | "dev": true, 497 | "dependencies": { 498 | "find-up": "^4.0.0" 499 | }, 500 | "engines": { 501 | "node": ">=8" 502 | } 503 | }, 504 | "node_modules/randombytes": { 505 | "version": "2.1.0", 506 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 507 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 508 | "dev": true, 509 | "dependencies": { 510 | "safe-buffer": "^5.1.0" 511 | } 512 | }, 513 | "node_modules/resolve": { 514 | "version": "1.20.0", 515 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 516 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 517 | "dev": true, 518 | "dependencies": { 519 | "is-core-module": "^2.2.0", 520 | "path-parse": "^1.0.6" 521 | }, 522 | "funding": { 523 | "url": "https://github.com/sponsors/ljharb" 524 | } 525 | }, 526 | "node_modules/rollup": { 527 | "version": "2.52.2", 528 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.2.tgz", 529 | "integrity": "sha512-4RlFC3k2BIHlUsJ9mGd8OO+9Lm2eDF5P7+6DNQOp5sx+7N/1tFM01kELfbxlMX3MxT6owvLB1ln4S3QvvQlbUA==", 530 | "dev": true, 531 | "bin": { 532 | "rollup": "dist/bin/rollup" 533 | }, 534 | "engines": { 535 | "node": ">=10.0.0" 536 | }, 537 | "optionalDependencies": { 538 | "fsevents": "~2.3.2" 539 | } 540 | }, 541 | "node_modules/rollup-plugin-terser": { 542 | "version": "7.0.2", 543 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 544 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 545 | "dev": true, 546 | "dependencies": { 547 | "@babel/code-frame": "^7.10.4", 548 | "jest-worker": "^26.2.1", 549 | "serialize-javascript": "^4.0.0", 550 | "terser": "^5.0.0" 551 | }, 552 | "peerDependencies": { 553 | "rollup": "^2.0.0" 554 | } 555 | }, 556 | "node_modules/rollup-plugin-typescript2": { 557 | "version": "0.30.0", 558 | "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.30.0.tgz", 559 | "integrity": "sha512-NUFszIQyhgDdhRS9ya/VEmsnpTe+GERDMmFo0Y+kf8ds51Xy57nPNGglJY+W6x1vcouA7Au7nsTgsLFj2I0PxQ==", 560 | "dev": true, 561 | "dependencies": { 562 | "@rollup/pluginutils": "^4.1.0", 563 | "find-cache-dir": "^3.3.1", 564 | "fs-extra": "8.1.0", 565 | "resolve": "1.20.0", 566 | "tslib": "2.1.0" 567 | }, 568 | "peerDependencies": { 569 | "rollup": ">=1.26.3", 570 | "typescript": ">=2.4.0" 571 | } 572 | }, 573 | "node_modules/rollup-plugin-typescript2/node_modules/tslib": { 574 | "version": "2.1.0", 575 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", 576 | "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", 577 | "dev": true 578 | }, 579 | "node_modules/safe-buffer": { 580 | "version": "5.2.1", 581 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 582 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 583 | "dev": true, 584 | "funding": [ 585 | { 586 | "type": "github", 587 | "url": "https://github.com/sponsors/feross" 588 | }, 589 | { 590 | "type": "patreon", 591 | "url": "https://www.patreon.com/feross" 592 | }, 593 | { 594 | "type": "consulting", 595 | "url": "https://feross.org/support" 596 | } 597 | ] 598 | }, 599 | "node_modules/semver": { 600 | "version": "6.3.0", 601 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 602 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 603 | "dev": true, 604 | "bin": { 605 | "semver": "bin/semver.js" 606 | } 607 | }, 608 | "node_modules/serialize-javascript": { 609 | "version": "4.0.0", 610 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 611 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 612 | "dev": true, 613 | "dependencies": { 614 | "randombytes": "^2.1.0" 615 | } 616 | }, 617 | "node_modules/source-map": { 618 | "version": "0.7.3", 619 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 620 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 621 | "dev": true, 622 | "engines": { 623 | "node": ">= 8" 624 | } 625 | }, 626 | "node_modules/source-map-support": { 627 | "version": "0.5.19", 628 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 629 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 630 | "dev": true, 631 | "dependencies": { 632 | "buffer-from": "^1.0.0", 633 | "source-map": "^0.6.0" 634 | } 635 | }, 636 | "node_modules/source-map-support/node_modules/source-map": { 637 | "version": "0.6.1", 638 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 639 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 640 | "dev": true, 641 | "engines": { 642 | "node": ">=0.10.0" 643 | } 644 | }, 645 | "node_modules/supports-color": { 646 | "version": "5.5.0", 647 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 648 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 649 | "dev": true, 650 | "dependencies": { 651 | "has-flag": "^3.0.0" 652 | }, 653 | "engines": { 654 | "node": ">=8" 655 | } 656 | }, 657 | "node_modules/terser": { 658 | "version": "5.6.1", 659 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", 660 | "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", 661 | "dev": true, 662 | "dependencies": { 663 | "commander": "^2.20.0", 664 | "source-map": "~0.7.2", 665 | "source-map-support": "~0.5.19" 666 | }, 667 | "bin": { 668 | "terser": "bin/terser" 669 | }, 670 | "engines": { 671 | "node": ">=10" 672 | } 673 | }, 674 | "node_modules/to-fast-properties": { 675 | "version": "2.0.0", 676 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 677 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 678 | "engines": { 679 | "node": ">=4" 680 | } 681 | }, 682 | "node_modules/tslib": { 683 | "version": "2.3.0", 684 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", 685 | "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", 686 | "dev": true 687 | }, 688 | "node_modules/typescript": { 689 | "version": "4.3.4", 690 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", 691 | "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", 692 | "dev": true, 693 | "bin": { 694 | "tsc": "bin/tsc", 695 | "tsserver": "bin/tsserver" 696 | }, 697 | "engines": { 698 | "node": ">=4.2.0" 699 | } 700 | }, 701 | "node_modules/universalify": { 702 | "version": "0.1.2", 703 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 704 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 705 | "dev": true, 706 | "engines": { 707 | "node": ">= 4.0.0" 708 | } 709 | }, 710 | "node_modules/vue": { 711 | "version": "3.1.2", 712 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.1.2.tgz", 713 | "integrity": "sha512-q/rbKpb7aofax4ugqu2k/uj7BYuNPcd6Z5/qJtfkJQsE0NkwVoCyeSh7IZGH61hChwYn3CEkh4bHolvUPxlQ+w==", 714 | "dependencies": { 715 | "@vue/compiler-dom": "3.1.2", 716 | "@vue/runtime-dom": "3.1.2", 717 | "@vue/shared": "3.1.2" 718 | } 719 | } 720 | }, 721 | "dependencies": { 722 | "@babel/code-frame": { 723 | "version": "7.12.13", 724 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", 725 | "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", 726 | "dev": true, 727 | "requires": { 728 | "@babel/highlight": "^7.12.13" 729 | } 730 | }, 731 | "@babel/helper-validator-identifier": { 732 | "version": "7.14.5", 733 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", 734 | "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==" 735 | }, 736 | "@babel/highlight": { 737 | "version": "7.13.10", 738 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", 739 | "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", 740 | "dev": true, 741 | "requires": { 742 | "@babel/helper-validator-identifier": "^7.12.11", 743 | "chalk": "^2.0.0", 744 | "js-tokens": "^4.0.0" 745 | } 746 | }, 747 | "@babel/parser": { 748 | "version": "7.14.7", 749 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", 750 | "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" 751 | }, 752 | "@babel/types": { 753 | "version": "7.14.5", 754 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", 755 | "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", 756 | "requires": { 757 | "@babel/helper-validator-identifier": "^7.14.5", 758 | "to-fast-properties": "^2.0.0" 759 | } 760 | }, 761 | "@rollup/pluginutils": { 762 | "version": "4.1.0", 763 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", 764 | "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", 765 | "dev": true, 766 | "requires": { 767 | "estree-walker": "^2.0.1", 768 | "picomatch": "^2.2.2" 769 | } 770 | }, 771 | "@types/node": { 772 | "version": "14.14.35", 773 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.35.tgz", 774 | "integrity": "sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag==", 775 | "dev": true 776 | }, 777 | "@vue/compiler-core": { 778 | "version": "3.1.2", 779 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.1.2.tgz", 780 | "integrity": "sha512-nHmq7vLjq/XM2IMbZUcKWoH5sPXa2uR/nIKZtjbK5F3TcbnYE/zKsrSUR9WZJ03unlwotNBX1OyxVt9HbWD7/Q==", 781 | "requires": { 782 | "@babel/parser": "^7.12.0", 783 | "@babel/types": "^7.12.0", 784 | "@vue/shared": "3.1.2", 785 | "estree-walker": "^2.0.1", 786 | "source-map": "^0.6.1" 787 | }, 788 | "dependencies": { 789 | "source-map": { 790 | "version": "0.6.1", 791 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 792 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 793 | } 794 | } 795 | }, 796 | "@vue/compiler-dom": { 797 | "version": "3.1.2", 798 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.1.2.tgz", 799 | "integrity": "sha512-k2+SWcWH0jL6WQAX7Or2ONqu5MbtTgTO0dJrvebQYzgqaKMXNI90RNeWeCxS4BnNFMDONpHBeFgbwbnDWIkmRg==", 800 | "requires": { 801 | "@vue/compiler-core": "3.1.2", 802 | "@vue/shared": "3.1.2" 803 | } 804 | }, 805 | "@vue/reactivity": { 806 | "version": "3.1.2", 807 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.2.tgz", 808 | "integrity": "sha512-glJzJoN2xE7I2lRvwKM5u1BHRPTd1yc8iaf//Lai/78/uYAvE5DXp5HzWRFOwMlbRvMGJHIQjOqoxj87cDAaag==", 809 | "requires": { 810 | "@vue/shared": "3.1.2" 811 | } 812 | }, 813 | "@vue/runtime-core": { 814 | "version": "3.1.2", 815 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.1.2.tgz", 816 | "integrity": "sha512-gsPZG4dRIkixuuKmoj4P9IHgfT0yaFLcqWOM5F/bCk0nxQn1XtxH8oUehWuET726KhbukvDoJfe9G2CKviy80w==", 817 | "requires": { 818 | "@vue/reactivity": "3.1.2", 819 | "@vue/shared": "3.1.2" 820 | } 821 | }, 822 | "@vue/runtime-dom": { 823 | "version": "3.1.2", 824 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.1.2.tgz", 825 | "integrity": "sha512-QvINxjLucEZFzp5f0NVu7JqWYCv5TKQfkH2FDs/N6QNE4iKcYtKrWdT0HKfABnVXG28Znqv6rIH0dH4ZAOwxpA==", 826 | "requires": { 827 | "@vue/runtime-core": "3.1.2", 828 | "@vue/shared": "3.1.2", 829 | "csstype": "^2.6.8" 830 | } 831 | }, 832 | "@vue/shared": { 833 | "version": "3.1.2", 834 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.2.tgz", 835 | "integrity": "sha512-EmH/poaDWBPJaPILXNI/1fvUbArJQmmTyVCwvvyDYDFnkPoTclAbHRAtyIvqfez7jybTDn077HTNILpxlsoWhg==" 836 | }, 837 | "ansi-styles": { 838 | "version": "3.2.1", 839 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 840 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 841 | "dev": true, 842 | "requires": { 843 | "color-convert": "^1.9.0" 844 | } 845 | }, 846 | "buffer-from": { 847 | "version": "1.1.1", 848 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 849 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 850 | "dev": true 851 | }, 852 | "chalk": { 853 | "version": "2.4.2", 854 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 855 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 856 | "dev": true, 857 | "requires": { 858 | "ansi-styles": "^3.2.1", 859 | "escape-string-regexp": "^1.0.5", 860 | "supports-color": "^5.3.0" 861 | } 862 | }, 863 | "color-convert": { 864 | "version": "1.9.3", 865 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 866 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 867 | "dev": true, 868 | "requires": { 869 | "color-name": "1.1.3" 870 | } 871 | }, 872 | "color-name": { 873 | "version": "1.1.3", 874 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 875 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 876 | "dev": true 877 | }, 878 | "commander": { 879 | "version": "2.20.3", 880 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 881 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 882 | "dev": true 883 | }, 884 | "commondir": { 885 | "version": "1.0.1", 886 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 887 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 888 | "dev": true 889 | }, 890 | "csstype": { 891 | "version": "2.6.17", 892 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.17.tgz", 893 | "integrity": "sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==" 894 | }, 895 | "escape-string-regexp": { 896 | "version": "1.0.5", 897 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 898 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 899 | "dev": true 900 | }, 901 | "estree-walker": { 902 | "version": "2.0.2", 903 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 904 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 905 | }, 906 | "find-cache-dir": { 907 | "version": "3.3.1", 908 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", 909 | "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", 910 | "dev": true, 911 | "requires": { 912 | "commondir": "^1.0.1", 913 | "make-dir": "^3.0.2", 914 | "pkg-dir": "^4.1.0" 915 | } 916 | }, 917 | "find-up": { 918 | "version": "4.1.0", 919 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 920 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 921 | "dev": true, 922 | "requires": { 923 | "locate-path": "^5.0.0", 924 | "path-exists": "^4.0.0" 925 | } 926 | }, 927 | "fs-extra": { 928 | "version": "8.1.0", 929 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 930 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 931 | "dev": true, 932 | "requires": { 933 | "graceful-fs": "^4.2.0", 934 | "jsonfile": "^4.0.0", 935 | "universalify": "^0.1.0" 936 | } 937 | }, 938 | "fsevents": { 939 | "version": "2.3.2", 940 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 941 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 942 | "dev": true, 943 | "optional": true 944 | }, 945 | "function-bind": { 946 | "version": "1.1.1", 947 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 948 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 949 | "dev": true 950 | }, 951 | "graceful-fs": { 952 | "version": "4.2.6", 953 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 954 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", 955 | "dev": true 956 | }, 957 | "has": { 958 | "version": "1.0.3", 959 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 960 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 961 | "dev": true, 962 | "requires": { 963 | "function-bind": "^1.1.1" 964 | } 965 | }, 966 | "has-flag": { 967 | "version": "3.0.0", 968 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 969 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 970 | "dev": true 971 | }, 972 | "highlight.js": { 973 | "version": "11.0.1", 974 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.0.1.tgz", 975 | "integrity": "sha512-EqYpWyTF2s8nMfttfBA2yLKPNoZCO33pLS4MnbXQ4hECf1TKujCt1Kq7QAdrio7roL4+CqsfjqwYj4tYgq0pJQ==" 976 | }, 977 | "is-core-module": { 978 | "version": "2.4.0", 979 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", 980 | "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", 981 | "dev": true, 982 | "requires": { 983 | "has": "^1.0.3" 984 | } 985 | }, 986 | "jest-worker": { 987 | "version": "26.6.2", 988 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 989 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 990 | "dev": true, 991 | "requires": { 992 | "@types/node": "*", 993 | "merge-stream": "^2.0.0", 994 | "supports-color": "^7.0.0" 995 | }, 996 | "dependencies": { 997 | "has-flag": { 998 | "version": "4.0.0", 999 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1000 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1001 | "dev": true 1002 | }, 1003 | "supports-color": { 1004 | "version": "7.2.0", 1005 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1006 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1007 | "dev": true, 1008 | "requires": { 1009 | "has-flag": "^4.0.0" 1010 | } 1011 | } 1012 | } 1013 | }, 1014 | "js-tokens": { 1015 | "version": "4.0.0", 1016 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1017 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1018 | "dev": true 1019 | }, 1020 | "jsonfile": { 1021 | "version": "4.0.0", 1022 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1023 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 1024 | "dev": true, 1025 | "requires": { 1026 | "graceful-fs": "^4.1.6" 1027 | } 1028 | }, 1029 | "locate-path": { 1030 | "version": "5.0.0", 1031 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1032 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1033 | "dev": true, 1034 | "requires": { 1035 | "p-locate": "^4.1.0" 1036 | } 1037 | }, 1038 | "make-dir": { 1039 | "version": "3.1.0", 1040 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1041 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1042 | "dev": true, 1043 | "requires": { 1044 | "semver": "^6.0.0" 1045 | } 1046 | }, 1047 | "merge-stream": { 1048 | "version": "2.0.0", 1049 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1050 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1051 | "dev": true 1052 | }, 1053 | "p-limit": { 1054 | "version": "2.3.0", 1055 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1056 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1057 | "dev": true, 1058 | "requires": { 1059 | "p-try": "^2.0.0" 1060 | } 1061 | }, 1062 | "p-locate": { 1063 | "version": "4.1.0", 1064 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1065 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1066 | "dev": true, 1067 | "requires": { 1068 | "p-limit": "^2.2.0" 1069 | } 1070 | }, 1071 | "p-try": { 1072 | "version": "2.2.0", 1073 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1074 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1075 | "dev": true 1076 | }, 1077 | "path-exists": { 1078 | "version": "4.0.0", 1079 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1080 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1081 | "dev": true 1082 | }, 1083 | "path-parse": { 1084 | "version": "1.0.7", 1085 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1086 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1087 | "dev": true 1088 | }, 1089 | "picomatch": { 1090 | "version": "2.3.0", 1091 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 1092 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 1093 | "dev": true 1094 | }, 1095 | "pkg-dir": { 1096 | "version": "4.2.0", 1097 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 1098 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 1099 | "dev": true, 1100 | "requires": { 1101 | "find-up": "^4.0.0" 1102 | } 1103 | }, 1104 | "randombytes": { 1105 | "version": "2.1.0", 1106 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1107 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1108 | "dev": true, 1109 | "requires": { 1110 | "safe-buffer": "^5.1.0" 1111 | } 1112 | }, 1113 | "resolve": { 1114 | "version": "1.20.0", 1115 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 1116 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 1117 | "dev": true, 1118 | "requires": { 1119 | "is-core-module": "^2.2.0", 1120 | "path-parse": "^1.0.6" 1121 | } 1122 | }, 1123 | "rollup": { 1124 | "version": "2.52.2", 1125 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.2.tgz", 1126 | "integrity": "sha512-4RlFC3k2BIHlUsJ9mGd8OO+9Lm2eDF5P7+6DNQOp5sx+7N/1tFM01kELfbxlMX3MxT6owvLB1ln4S3QvvQlbUA==", 1127 | "dev": true, 1128 | "requires": { 1129 | "fsevents": "~2.3.2" 1130 | } 1131 | }, 1132 | "rollup-plugin-terser": { 1133 | "version": "7.0.2", 1134 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 1135 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 1136 | "dev": true, 1137 | "requires": { 1138 | "@babel/code-frame": "^7.10.4", 1139 | "jest-worker": "^26.2.1", 1140 | "serialize-javascript": "^4.0.0", 1141 | "terser": "^5.0.0" 1142 | } 1143 | }, 1144 | "rollup-plugin-typescript2": { 1145 | "version": "0.30.0", 1146 | "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.30.0.tgz", 1147 | "integrity": "sha512-NUFszIQyhgDdhRS9ya/VEmsnpTe+GERDMmFo0Y+kf8ds51Xy57nPNGglJY+W6x1vcouA7Au7nsTgsLFj2I0PxQ==", 1148 | "dev": true, 1149 | "requires": { 1150 | "@rollup/pluginutils": "^4.1.0", 1151 | "find-cache-dir": "^3.3.1", 1152 | "fs-extra": "8.1.0", 1153 | "resolve": "1.20.0", 1154 | "tslib": "2.1.0" 1155 | }, 1156 | "dependencies": { 1157 | "tslib": { 1158 | "version": "2.1.0", 1159 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", 1160 | "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", 1161 | "dev": true 1162 | } 1163 | } 1164 | }, 1165 | "safe-buffer": { 1166 | "version": "5.2.1", 1167 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1168 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1169 | "dev": true 1170 | }, 1171 | "semver": { 1172 | "version": "6.3.0", 1173 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1174 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1175 | "dev": true 1176 | }, 1177 | "serialize-javascript": { 1178 | "version": "4.0.0", 1179 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 1180 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 1181 | "dev": true, 1182 | "requires": { 1183 | "randombytes": "^2.1.0" 1184 | } 1185 | }, 1186 | "source-map": { 1187 | "version": "0.7.3", 1188 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 1189 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 1190 | "dev": true 1191 | }, 1192 | "source-map-support": { 1193 | "version": "0.5.19", 1194 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 1195 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 1196 | "dev": true, 1197 | "requires": { 1198 | "buffer-from": "^1.0.0", 1199 | "source-map": "^0.6.0" 1200 | }, 1201 | "dependencies": { 1202 | "source-map": { 1203 | "version": "0.6.1", 1204 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1205 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1206 | "dev": true 1207 | } 1208 | } 1209 | }, 1210 | "supports-color": { 1211 | "version": "5.5.0", 1212 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1213 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1214 | "dev": true, 1215 | "requires": { 1216 | "has-flag": "^3.0.0" 1217 | } 1218 | }, 1219 | "terser": { 1220 | "version": "5.6.1", 1221 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", 1222 | "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", 1223 | "dev": true, 1224 | "requires": { 1225 | "commander": "^2.20.0", 1226 | "source-map": "~0.7.2", 1227 | "source-map-support": "~0.5.19" 1228 | } 1229 | }, 1230 | "to-fast-properties": { 1231 | "version": "2.0.0", 1232 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 1233 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" 1234 | }, 1235 | "tslib": { 1236 | "version": "2.3.0", 1237 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", 1238 | "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", 1239 | "dev": true 1240 | }, 1241 | "typescript": { 1242 | "version": "4.3.4", 1243 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", 1244 | "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", 1245 | "dev": true 1246 | }, 1247 | "universalify": { 1248 | "version": "0.1.2", 1249 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1250 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1251 | "dev": true 1252 | }, 1253 | "vue": { 1254 | "version": "3.1.2", 1255 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.1.2.tgz", 1256 | "integrity": "sha512-q/rbKpb7aofax4ugqu2k/uj7BYuNPcd6Z5/qJtfkJQsE0NkwVoCyeSh7IZGH61hChwYn3CEkh4bHolvUPxlQ+w==", 1257 | "requires": { 1258 | "@vue/compiler-dom": "3.1.2", 1259 | "@vue/runtime-dom": "3.1.2", 1260 | "@vue/shared": "3.1.2" 1261 | } 1262 | } 1263 | } 1264 | } 1265 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@highlightjs/vue-plugin", 3 | "version": "2.1.1", 4 | "description": "Highlight.js Vue Plugin", 5 | "main": "dist/highlightjs-vue.min.js", 6 | "module": "dist/highlightjs-vue.esm.min.js", 7 | "types": "dist/vue.d.ts", 8 | "scripts": { 9 | "build": "rollup -c", 10 | "test": "echo \"Error: no test specified\" && exit 1", 11 | "publish": "npm publish --access public --tag next" 12 | }, 13 | "exports": { 14 | ".": { 15 | "require": "./dist/highlightjs-vue.min.js", 16 | "import": "./dist/highlightjs-vue.esm.min.js", 17 | "types": "./dist/vue.d.ts" 18 | } 19 | }, 20 | "type": "module", 21 | "author": "Josh Goebel ", 22 | "license": "BSD-3-Clause", 23 | "devDependencies": { 24 | "rollup": "^2.42.3", 25 | "rollup-plugin-terser": "^7.0.2", 26 | "rollup-plugin-typescript2": "^0.30.0", 27 | "tslib": "^2.2.0", 28 | "typescript": "^4.2.4" 29 | }, 30 | "peerDependencies": { 31 | "highlight.js": "^11.0.1", 32 | "vue": "^3" 33 | }, 34 | "files": [ 35 | "dist", 36 | "src" 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import { terser } from "rollup-plugin-terser"; 2 | import typescript from 'rollup-plugin-typescript2'; 3 | 4 | export default { 5 | input: 'src/vue.ts', 6 | plugins: [typescript(), terser()], 7 | external: [ 8 | "highlight.js/lib/core", 9 | "vue" 10 | ], 11 | output: [ 12 | { 13 | file: 'dist/highlightjs-vue.min.js', 14 | format: 'iife', 15 | name: "hljsVuePlugin", 16 | interop: "default", 17 | globals: { 18 | 'highlight.js/lib/core': 'hljs', 19 | 'vue': 'Vue', 20 | }, 21 | }, 22 | { 23 | file: 'dist/highlightjs-vue.esm.min.js', 24 | format: 'es', 25 | interop: "default", 26 | exports: 'default', 27 | }, 28 | ], 29 | }; 30 | -------------------------------------------------------------------------------- /src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | export function escapeHtml(value: string): string { 2 | return value 3 | .replace(/&/g, '&') 4 | .replace(//g, '>') 6 | .replace(/"/g, '"') 7 | .replace(/'/g, ''') 8 | } 9 | -------------------------------------------------------------------------------- /src/vue.ts: -------------------------------------------------------------------------------- 1 | import { ref, h, computed, defineComponent, Plugin, watch } from 'vue' 2 | import hljs from 'highlight.js/lib/core' 3 | import { escapeHtml } from './lib/utils' 4 | 5 | const component = defineComponent({ 6 | props: { 7 | code: { 8 | type: String, 9 | required: true, 10 | }, 11 | language: { 12 | type: String, 13 | default: '', 14 | }, 15 | autodetect: { 16 | type: Boolean, 17 | default: true, 18 | }, 19 | ignoreIllegals: { 20 | type: Boolean, 21 | default: true, 22 | }, 23 | }, 24 | setup(props) { 25 | const language = ref(props.language) 26 | watch(() => props.language, (newLanguage) => { 27 | language.value = newLanguage 28 | }) 29 | 30 | const autodetect = computed(() => props.autodetect && !language.value) 31 | const cannotDetectLanguage = computed(() => !autodetect.value && !hljs.getLanguage(language.value)) 32 | 33 | const className = computed((): string => { 34 | if (cannotDetectLanguage.value) { 35 | return '' 36 | } else { 37 | return `hljs ${language.value}` 38 | } 39 | }) 40 | 41 | const highlightedCode = computed((): string => { 42 | // No idea what language to use, return raw code 43 | if (cannotDetectLanguage.value) { 44 | console.warn(`The language "${language.value}" you specified could not be found.`) 45 | return escapeHtml(props.code) 46 | } 47 | 48 | if (autodetect.value) { 49 | const result = hljs.highlightAuto(props.code) 50 | language.value = result.language ?? '' 51 | return result.value 52 | } else { 53 | const result = hljs.highlight(props.code, { 54 | language: language.value, 55 | ignoreIllegals: props.ignoreIllegals, 56 | }) 57 | return result.value 58 | } 59 | }) 60 | 61 | return { 62 | className, 63 | highlightedCode, 64 | } 65 | }, 66 | render() { 67 | return h('pre', {}, [ 68 | h('code', { 69 | class: this.className, 70 | innerHTML: this.highlightedCode, 71 | tabindex: '0', 72 | }), 73 | ]) 74 | }, 75 | }) 76 | 77 | const plugin: Plugin & { component: typeof component } = { 78 | install(app) { 79 | app.component('highlightjs', component) 80 | }, 81 | component, 82 | } 83 | 84 | export default plugin 85 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "sourceMap": true, 5 | "declaration": true, 6 | "declarationMap": true, 7 | 8 | "allowSyntheticDefaultImports": true, 9 | 10 | "outDir": "dist", 11 | }, 12 | "exclude": [ 13 | "node_modules", 14 | "dist", 15 | ], 16 | "include": [ 17 | "**/*.ts", 18 | ], 19 | } 20 | --------------------------------------------------------------------------------