├── pnpm-workspace.yaml ├── .npmrc ├── README.md ├── 202-node-async ├── 202-node-async.pdf ├── src │ ├── components │ │ ├── MarkerOptional.vue │ │ ├── Marker.vue │ │ └── MarkerVersion.vue │ ├── public │ │ └── images │ │ │ ├── emqx-dashboard.png │ │ │ ├── mqttx-in-out.png │ │ │ └── mqttx-pub-sub.png │ ├── style.css │ ├── package.json │ └── slides.md └── README.md ├── 203-node-mixed ├── 203-node-mixed.pdf ├── src │ ├── public │ │ └── images │ │ │ └── mqttx-out.jpg │ ├── style.css │ ├── package.json │ └── slides.md └── README.md ├── 101-ofn-overview └── src │ ├── package.json │ └── slides.md ├── package.json ├── .github └── dependabot.yml ├── netlify.toml ├── .gitignore ├── LICENSE └── pnpm-lock.yaml /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - '*/src' 3 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | shamefully-hoist=true 2 | ignore-workspace-root-check=true -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # openfunction-talks 2 | Presentation slides of OpenFunction topics 3 | -------------------------------------------------------------------------------- /202-node-async/202-node-async.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devops/openfunction-talks/main/202-node-async/202-node-async.pdf -------------------------------------------------------------------------------- /203-node-mixed/203-node-mixed.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devops/openfunction-talks/main/203-node-mixed/203-node-mixed.pdf -------------------------------------------------------------------------------- /202-node-async/src/components/MarkerOptional.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /203-node-mixed/src/public/images/mqttx-out.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devops/openfunction-talks/main/203-node-mixed/src/public/images/mqttx-out.jpg -------------------------------------------------------------------------------- /202-node-async/src/public/images/emqx-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devops/openfunction-talks/main/202-node-async/src/public/images/emqx-dashboard.png -------------------------------------------------------------------------------- /202-node-async/src/public/images/mqttx-in-out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devops/openfunction-talks/main/202-node-async/src/public/images/mqttx-in-out.png -------------------------------------------------------------------------------- /202-node-async/src/public/images/mqttx-pub-sub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devops/openfunction-talks/main/202-node-async/src/public/images/mqttx-pub-sub.png -------------------------------------------------------------------------------- /202-node-async/src/components/Marker.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /202-node-async/src/components/MarkerVersion.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /202-node-async/src/style.css: -------------------------------------------------------------------------------- 1 | .footnotes-sep { 2 | @apply mt-20 opacity-10; 3 | } 4 | 5 | .footnotes { 6 | @apply text-sm opacity-75; 7 | } 8 | 9 | .footnotes p { 10 | @apply my-1; 11 | } 12 | 13 | .footnote-backref { 14 | display: none; 15 | } -------------------------------------------------------------------------------- /203-node-mixed/src/style.css: -------------------------------------------------------------------------------- 1 | .footnotes-sep { 2 | @apply mt-20 opacity-10; 3 | } 4 | 5 | .footnotes { 6 | @apply text-sm opacity-75; 7 | } 8 | 9 | .footnotes p { 10 | @apply my-1; 11 | } 12 | 13 | .footnote-backref { 14 | display: none; 15 | } 16 | 17 | .slidev-code { 18 | @apply w-95/100; 19 | } 20 | 21 | blockquote { 22 | @apply w-95/100; 23 | } -------------------------------------------------------------------------------- /203-node-mixed/README.md: -------------------------------------------------------------------------------- 1 | # Triggering Async Function From HTTP Request 2 | 3 | - Tricky Part of Async Function 4 | - HTTP Comes to the Rescue 5 | - Invoke Async in A Sync Way 6 | - Lab: HTTP Trigger MQTT Bindings 7 | - Sample Function and Manifest 8 | - Deploy Sample Function 9 | - HTTP~ Fire! 10 | 11 | > The slide is powered by [Slidev](https://sli.dev/). 12 | -------------------------------------------------------------------------------- /202-node-async/README.md: -------------------------------------------------------------------------------- 1 | # Node.js Async Function Quickstart 2 | 3 | - Prerequsites 4 | - Your First Async Function 5 | - A sample async function 6 | - Build Function Image via Pack Optional 7 | - Lab: MQTT Forwarder 8 | - Set up MQTT Broker Optional 9 | - Lab 1: MQTT Input and Output Binding 10 | - Lab 2: MQTT Pub and Sub 11 | 12 | > The slide is powered by [Slidev](https://sli.dev/). 13 | -------------------------------------------------------------------------------- /101-ofn-overview/src/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "101-ofn-overview", 3 | "private": true, 4 | "scripts": { 5 | "dev": "slidev", 6 | "build": "slidev build --base /2022/101-ofn-overview/ --out ../../dist/2022/101-ofn-overview" 7 | }, 8 | "dependencies": { 9 | "@slidev/cli": "^0.33.0", 10 | "@slidev/theme-default": "*", 11 | "slidev-theme-light-icons": "^1.0.2" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "build": "rimraf dist && pnpm -r run build", 5 | "export": "pnpm -r run export" 6 | }, 7 | "devDependencies": { 8 | "@iconify/json": "^2.1.61", 9 | "@slidev/cli": "^0.33.0", 10 | "@slidev/theme-default": "^0.21.2", 11 | "playwright-chromium": "^1.22.2", 12 | "pnpm": "^7.2.1", 13 | "rimraf": "^3.0.2" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /202-node-async/src/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "202-node-async", 3 | "private": true, 4 | "scripts": { 5 | "dev": "slidev", 6 | "build": "slidev build --base /2022/202-node-async/ --out ../../dist/2022/202-node-async", 7 | "export": "slidev export --dark --with-clicks --output ../202-node-async.pdf" 8 | }, 9 | "dependencies": { 10 | "@slidev/cli": "^0.33.0", 11 | "@slidev/theme-default": "*", 12 | "@slidev/theme-seriph": "*" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /203-node-mixed/src/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "203-node-mixed", 3 | "private": true, 4 | "scripts": { 5 | "dev": "slidev", 6 | "build": "slidev build --base /2022/203-node-mixed/ --out ../../dist/2022/203-node-mixed", 7 | "export": "slidev export --dark --with-clicks --output ../203-node-mixed.pdf" 8 | }, 9 | "dependencies": { 10 | "@slidev/cli": "^0.33.0", 11 | "@slidev/theme-default": "*", 12 | "@slidev/theme-seriph": "*" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: docker 4 | directory: '/' 5 | schedule: 6 | interval: daily 7 | open-pull-requests-limit: 10 8 | - package-ecosystem: npm 9 | directory: '/' 10 | schedule: 11 | interval: daily 12 | open-pull-requests-limit: 10 13 | labels: 14 | - 'type: dependencies' 15 | - package-ecosystem: 'github-actions' 16 | directory: '/' 17 | schedule: 18 | interval: 'daily' 19 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build.environment] 2 | NPM_FLAGS = "--prefix=/dev/null" 3 | NODE_VERSION = "14" 4 | PLAYWRIGHT_BROWSERS_PATH = "0" 5 | 6 | [build] 7 | publish = "dist" 8 | command = "npx pnpm i --store=node_modules/.pnpm-store && npx pnpm run build" 9 | 10 | [[redirects]] 11 | from = "/2022/101-ofn-overview/*" 12 | to = "/2022/101-ofn-overview/index.html" 13 | status = 200 14 | 15 | [[redirects]] 16 | from = "/2022/202-node-async/*" 17 | to = "/2022/202-node-async/index.html" 18 | status = 200 19 | 20 | [[redirects]] 21 | from = "/2022/203-node-mixed/*" 22 | to = "/2022/203-node-mixed/index.html" 23 | status = 200 24 | 25 | [[redirects]] 26 | from = "/" 27 | to = "https://openfunction.dev" 28 | status = 302 29 | force = true -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | 106 | # VSCode cache 107 | .vscode 108 | .history 109 | 110 | # Netlify / Vercel 111 | .netlify -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /203-node-mixed/src/slides.md: -------------------------------------------------------------------------------- 1 | --- 2 | hideInToc: true 3 | download: 'https://github.com/webup/openfunction-talks/raw/main/203-node-async/203-node-mixed.pdf' 4 | # try also 'default' to start with a default theme 5 | # theme: seriph 6 | # random image from a curated Unsplash collection by Anthony 7 | # like them? see https://unsplash.com/collections/94734566/slidev 8 | background: https://source.unsplash.com/collection/94734566/1920x1080 9 | # apply any windi css classes to the current slide 10 | class: 'text-center' 11 | # https://sli.dev/custom/highlighters.html 12 | # highlighter: shiki 13 | # show line numbers in code blocks 14 | lineNumbers: false 15 | # some information about the slides, markdown enabled 16 | info: | 17 | ## OpenFunction Tutorials 18 | 19 | Hands-on tutorial on Node.js Functions Framework 20 | 21 | Learn more at [OpenFunction](https://openfunction.dev/) 22 | # persist drawings in exports and build 23 | drawings: 24 | persist: false 25 | --- 26 | 27 | # OpenFunction 203 28 | 29 | Triggering Async Function From HTTP Request 30 | 31 |
32 | 33 | Press Space for next page 34 | 35 |
36 | 37 |
38 | 40 | 41 | 42 | 44 | 45 | 46 |
47 | 48 | --- 49 | layout: intro 50 | hideInToc: true 51 | --- 52 | 53 | # Haili Zhang 54 | 55 |
56 | KubeSphere Ambassador, CNCF OpenFunction TOC Memeber.
57 | Cloud Platform Director of UISEE© Technology.
58 | Cloud Native focuses: Kubernetes, DevOps, Observability, Service Mesh, Serverless.
59 |
60 | 61 |
62 | 63 |
webup
64 | 65 |
zhanghaili0610
66 | 67 |
haili.zhang@uisee.com
68 | 69 | 70 |
71 | 72 | 73 | 74 | --- 75 | hideInToc: true 76 | --- 77 | 78 | # Table of Content 79 | 80 | 81 | 82 | --- 83 | title: Tricky Part of Async Function 84 | layout: iframe-right 85 | url: https://embeds.onemodel.app/d/iframe/aiOvN37uC1OEIrKh6yGADkuuyLPuaGFG4bc4OTl6TrL3h10zvCt2MbG020YB 86 | --- 87 | 88 | ## Tricky Part of Async Func 89 | 90 |
91 | 92 | ###### Pros 93 | 94 | * By leveraging Dapr, async function could nearly connect with everthing ... 95 | * Check [Dapr Bindings](https://docs.dapr.io/reference/components-reference/supported-bindings/) 96 | * Check [Dapr PubSub Brokers](https://docs.dapr.io/reference/components-reference/supported-pubsub/) 97 | 98 |
99 | 100 | ###### Cons 101 | 102 | * NEED ***events*** to pull the trigger 103 | * Usually coming in from external systems, or interface with external systems 104 | * e.g. message queue, cron, K8s events 105 | * Also rather unfriendly for testing 106 | * We need a MQTT client tool to serve as the event publisher, remember [that](https://openfunction-talks.netlify.app/2022/202-node-async/13)? 107 | 108 | 109 | --- 110 | title: HTTP Comes to the Rescue 111 | layout: iframe-right 112 | url: https://embeds.onemodel.app/d/iframe/QDvoHGiYvG9o2SjZB7bP0VJ63fT2UfM4ovw7jhWX2VA2rSwgUJ4MuwKA2TRQ 113 | --- 114 | 115 | ## HTTP Comes to the Rescue 116 | 117 |
118 | 119 | ###### Idea 120 | 121 | * Use HTTP sync function as trigger 122 | * `POST` data to one sync function 123 | * Sync function bridge data to event hub 124 | * With async function subscribed to hub 125 | 126 |
127 | 128 | ###### Solution 129 | 130 | * Enable Dapr output binding and pub in sync function runtime [^1] 131 | * Check the figure aside as an example 👉 132 | 133 | [^1]: Feature introduced in [OpenFunction 0.6.0](https://github.com/OpenFunction/OpenFunction/releases/tag/v0.6.0) along with [Node.js Function Framework 0.5.0](https://github.com/OpenFunction/functions-framework-nodejs/releases/tag/v0.5.0) 134 | 135 | --- 136 | layout: statement 137 | hideInToc: true 138 | --- 139 | 140 | # Invoke Async in A Sync Way! 141 | 142 | --- 143 | title: Invoke Async in A Sync Way 144 | layout: two-cols 145 | --- 146 | 147 | ## Same function signature 148 | 149 | Exactly the same async function [signature](https://openfunction-talks.netlify.app/2022/202-node-async/5). 150 | 151 | ```js 152 | function (ctx, data) {} 153 | ``` 154 | 155 | > `data`: Request [body](https://devdocs.io/express/index#req.body) data, parsed as JSON by default 156 | 157 |
158 | 159 | ###### Extensions 160 | 161 | * `ctx.req`: The pass-through Express standard HTTP [request](https://devdocs.io/express-request/) object 162 | * `ctx.res`: The pass-through Express standard HTTP [response](https://devdocs.io/express-response/) object 163 | * These two methods are optional for use, even no response made by `ctx.res` would NOT block the HTTP request handler 164 | 165 | ::right:: 166 | 167 | ## Specific signature type 168 | 169 | New type `openfunction` ready to work. 170 | 171 | * OpenFunction Function CRD: 172 | 173 | ```yaml{9-} 174 | apiVersion: core.openfunction.io/v1beta1 175 | kind: Function 176 | metadata: 177 | name: func-name 178 | spec: 179 | serving: 180 | # default to knative 181 | runtime: knative 182 | params: 183 | # default to http 184 | FUNCTION_SIGNATURE_TYPE: openfunction 185 | ``` 186 | 187 | * CLI: `--signature-type=openfunction` 188 | * ENV: `FUNCTION_SIGNATURE_TYPE=openfunction` 189 | 190 | --- 191 | layout: center 192 | class: text-center 193 | --- 194 | 195 | # Lab: HTTP Trigger MQTT Bindings 196 | 197 | --- 198 | title: Sample Function and Manifest 199 | level: 2 200 | layout: two-cols 201 | --- 202 | 203 | # Sample Function 204 | 205 | Another plain forwarder 206 | 207 | ```js 208 | // Standard Express style HTTP sync function 209 | export const tryKnative = (req, res) => { 210 | res.send(`Hello, ${req.query.u || 'World'}!`); 211 | }; 212 | 213 | // OpenFunction standard function which could 214 | // set bridge between sync and async function 215 | export const tryKnativeAsync = async (ctx, data) => { 216 | console.log('Data received: %o', data); 217 | 218 | // Forward HTTP body to Dapr outputs 219 | await ctx.send(data); 220 | 221 | // Send something back as HTTP response 222 | // when necessary 223 | // ctx.res.send(data); 224 | }; 225 | ``` 226 | 227 | > Remember to build the function, either when applying Function CR manifest or directly via [Pack](https://openfunction-talks.netlify.app/2022/202-node-async/7) CLI tool 228 | 229 | ::right:: 230 | 231 | # Sample CR Manifest 232 | 233 | Check out full content in [http-trigger.yml](https://github.com/OpenFunction/samples/blob/main/functions/knative/with-output-binding-node/http-trigger.yaml) 234 | 235 | ```yaml{4-7|8-} 236 | spec: 237 | image: '//' 238 | serving: 239 | runtime: knative 240 | params: 241 | FUNCTION_TARGET: tryKnativeAsync 242 | FUNCTION_SIGNATURE_TYPE: openfunction 243 | outputs: 244 | - name: mqtt-output 245 | component: mqtt-out 246 | operation: create 247 | bindings: 248 | mqtt-out: 249 | type: bindings.mqtt 250 | version: v1 251 | metadata: 252 | - name: consumerID 253 | value: '{uuid}' 254 | - name: url 255 | value: tcp://admin:public@emqx:1883 256 | - name: topic 257 | value: out 258 | ``` 259 | 260 | --- 261 | title: Deploy Sample Function 262 | level: 2 263 | --- 264 | 265 | # Deploy Sample Function 266 | 267 | * Apply function , and check running states 268 | 269 | ```bash 270 | $ kubectl apply -f http-trigger.yaml 271 | function.core.openfunction.io/sample-node-http-trigger created 272 | 273 | $ kubectl get fn 274 | NAME BUILDSTATE SERVINGSTATE BUILDER SERVING URL AGE 275 | sample-node-http-trigger Skipped Running serving-7d75d http://openfunction.io/default/sample-node-http-trigger 6d 276 | 277 | $ kubectl get deploy 278 | NAME READY UP-TO-DATE AVAILABLE AGE 279 | ... 280 | serving-7d75d-ksvc-xn768-v200-deployment 0/0 0 0 6d14h 281 | ... 282 | ``` 283 | 284 |
285 | 286 | > Knative runtime would autoscale the deployment replica to `0`, if no incoming request for a period of time. 287 | 288 | 289 | --- 290 | title: HTTP~ Fire! 291 | level: 2 292 | layout: image-right 293 | image: images/mqttx-out.jpg 294 | --- 295 | 296 | # HTTP~ Fire! 297 | 298 | Send request to domain ingress. 299 | 300 | * `POST` data to target function URL: 301 | 302 | ```bash 303 | curl -d '{"hello":"ofn"}' \ 304 | -H 'Content-Type: application/json' \ 305 | http://openfunction.io/default/sample-node-http-trigger 306 | ``` 307 | 308 | * Wait a second (may be few more seconds for cold start), you would get results: 309 | * From terminal: `{"hello":"ofn"}` 310 | * From [MQTT X](https://mqttx.app/) [^1] desktop client 👉 311 | 312 | [^1]: See also: OpenFunction 202 - [Set up MQTT Broker](https://openfunction-talks.netlify.app/2022/202-node-async/9) 313 | 314 | --- 315 | layout: center 316 | class: text-center 317 | hideInToc: true 318 | --- 319 | 320 | # Learn More 321 | 322 | [Discord](https://discord.gg/awpAh8W5xW) · [Slack](https://cloud-native.slack.com/archives/C03ETDMD3LZ) 323 | 324 |
325 | 326 | [OpenFunction](https://openfunction.dev/) · [Node.js Functions Framework](https://github.com/OpenFunction/functions-framework-nodejs) 327 | -------------------------------------------------------------------------------- /101-ofn-overview/src/slides.md: -------------------------------------------------------------------------------- 1 | --- 2 | hideInToc: true 3 | title: OpenFunction 101 4 | # try also 'default' to start with a default theme 5 | theme: light-icons 6 | # random image from a curated Unsplash collection by Anthony 7 | layout: intro 8 | image: https://source.unsplash.com/collection/94734566/1920x1080 9 | # apply any windi css classes to the current slide 10 | class: 'text-center' 11 | # https://sli.dev/custom/highlighters.html 12 | # highlighter: shiki 13 | # show line numbers in code blocks 14 | lineNumbers: false 15 | # some information about the slides, markdown enabled 16 | info: | 17 | ## OpenFunction Tutorials 18 | 19 | OpenFunction overview introduction 20 | 21 | Learn more at [OpenFunction](https://openfunction.dev/) 22 | # persist drawings in exports and build 23 | drawings: 24 | persist: false 25 | --- 26 | 27 |
28 | 29 | Press Space for next page 30 | 31 |
32 | 33 |
34 | 35 | OpenFunction 101 36 | 37 |
38 | OVERVIEW 39 |
40 |
41 | 42 | --- 43 | hideInToc: true 44 | layout: image-left 45 | image: 'https://s2.loli.net/2022/05/08/XRTdnohGA9rlewu.png' 46 | equal: true 47 | --- 48 | 49 | # Haili Zhang 50 | 51 |
52 | CNCF OpenFunction TOC Member, KubeSphere Ambassador.
53 | Cloud Platform Director of UISEE©, a leading autonomous driving company.
54 | Cloud Native focuses: Kubernetes, DevOps, Observability, Service Mesh, Serverless.
55 |
56 | 57 |
58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |
67 | 68 | --- 69 | hideInToc: true 70 | --- 71 | 72 | # Table of Content 73 | 74 | 75 | 76 | --- 77 | title: Learnings from CNCF and Datadog Reports 78 | layout: two-cols 79 | --- 80 | 81 | # CNCF Survey 2021 82 | 83 | * Container Adoption and Kubernetes have truly gone mainstream – usage has risen across organizations globally, particularly in large businesses. 84 | * According to CNCF’s respondents, 96% of organizations are either using or evaluating Kubernetes – a record high since our surveys began in 2016. 85 | * Kubernetes has demonstrated impressive growth over the past 12 months with 5.6 million developers using Kubernetes today. 86 | 87 | ::right:: 88 | 89 | 90 | 91 | --- 92 | hideInToc: true 93 | layout: two-cols 94 | --- 95 | 96 | # Serverless Boosts 🚀 97 | 98 | "As the popularity of FaaS products like AWS Lambda continues to grow, we have also seen a significant increase in adoption of other types of serverless technologies offered by Azure, Google Cloud, and AWS." 99 | 100 | ![Serverless adoption by cloud provider](https://imgix.datadoghq.com/img/state-of-serverless/2022-serverless-report-charts_FACT-1.png) 101 | 102 | ::right:: 103 | 104 | 105 | 106 | --- 107 | hideInToc: true 108 | layout: image 109 | image: https://www.cncf.io/wp-content/uploads//2022/02/p9_Repor-01-10-1.svg 110 | class: bg-slate-50 bg-origin-content 111 | --- 112 | 113 | # Serverless Platform War? 114 | 115 | "Hosted platforms (75%) are the most popular" 116 | 117 | 122 | 123 | --- 124 | 125 | # Why need cloud agnostic Serverless platform? 126 | 127 | Kubernetes brings the possibility of cloud-agnostic: multiple, distributed cloud. 128 | 129 |
130 | 131 | But it’s difficult to be cloud-agnostic for Serverless 132 | * Each cloud provider has its own Serverless platform 133 | * Further more, these platforms are coupled with their own cloud backend services 134 | 135 |
136 | 137 | Is it possible to build a cloud agnostic Serverless platform? 🤔 138 | 139 | --- 140 | title: How to build a cloud agnostic Serverless platform? 141 | layout: iframe-right 142 | url: https://embeds.onemodel.app/d/iframe/aWmQ2ljcbrB0R0nqvdoVZEojQWRhSYxthan97wncdULJmUalBkURa06aNAfx 143 | --- 144 | 145 | # What is Serverless? 146 | 147 | Let's make core concepts clear first. 148 | 149 | "Serverless computing = FaaS + BaaS." [^1] 150 | 151 | * Cloud functions — packaged as FaaS (Function as a Service) offerings — represent the core of serverless computing 152 | * Cloud platforms also provide specialized serverless frameworks that cater to specific app requirements as BaaS (Backend as a Service) offerings 153 | 154 | [^1]: [Cloud Programming Simplified: A Berkeley View on Serverless Computing](https://www2.eecs.berkeley.edu/Pubs/TechRpts/2019/EECS-2019-3.pdf). Feb 10, 2019. 155 | 156 | 173 | 174 | --- 175 | hideInToc: true 176 | layout: iframe-right 177 | url: https://embeds.onemodel.app/d/iframe/mOmUABwfsD0d6cgwGRyzt8vih5uoeXldJO4hyWdUUAjl2g7YeWeQf44kkQxh 178 | --- 179 | 180 | # How to construct? 181 | 182 | We need adapt various backend services. 183 | 184 | [Dapr](https://dapr.io/) decouples the distributed apps with underlying backend services. 185 | 186 | ![Dapr Building Blocks](https://docs.dapr.io/images/building_blocks.png) 187 | 188 | > Dapr provides you with APIs that abstract away the complexity of common challenges developers encounter regularly when building distributed applications. These API building blocks can be leveraged as the need arises - use one, several or all to develop your application faster and deliver your solution on time. 189 | 190 | --- 191 | hideInToc: true 192 | layout: iframe-right 193 | url: https://keda.sh/docs/2.7/concepts/#architecture 194 | --- 195 | 196 | # How to construct? 197 | 198 | We need achieve "zero-scale". 199 | 200 | [KEDA](https://keda.sh/) is a Kubernetes-based Event Driven Autoscaler. With KEDA, you can drive the scaling of any container in Kubernetes based on the number of events needing to be processed. 201 | 202 | * KEDA is a single-purpose and lightweight component that can be added into any Kubernetes cluster. 203 | * KEDA works alongside standard Kubernetes components like the Horizontal Pod Autoscaler and can extend functionality without overwriting or duplication. 204 | 205 | --- 206 | title: 'OpenFunction: Less codes. More Functions!' 207 | layout: image-left 208 | image: https://github.com/benjaminhuo/artwork/raw/master/projects/openfunction/icon/color/openfunction-icon-color.png 209 | equal: true 210 | --- 211 | 212 | [OpenFunction](https://openfunction.dev/) is a cloud-native open source FaaS (Function as a Service) platform aiming to let you focus on your business logic without having to maintain the underlying runtime environment and infrastructure. 213 | 214 | You can concentrate on developing business-related source code in the form of functions. 215 | 216 | --- 217 | layout: iframe 218 | url: https://www.youtube.com/embed/YWZsXdAXFO8?start=580 219 | --- 220 | 221 | --- 222 | title: Architecture Overview of OpenFunction 223 | layout: center-image 224 | image: https://openfunction.dev/openfunction-0.5-architecture.png 225 | --- 226 | 227 |
228 | Architecture Overview of OpenFunction 229 |
230 | 231 | --- 232 | layout: iframe 233 | url: https://embeds.onemodel.app/d/iframe/RZ3djGBjCkM8p2aOjZnvf0UNWPRA5zPVxbk5d6AHl5sowHNhYk6qQLMvGmMB 234 | --- 235 | 236 | --- 237 | layout: center 238 | class: text-center 239 | --- 240 | 241 | # Use Case: Online Data Processing 242 | 243 | Using OpenFunction in Autonomous Driving 244 | 245 | --- 246 | layout: iframe 247 | url: https://embeds.onemodel.app/d/iframe/abvQuuS6QoSkz1MPovXXslweJcsCPoPG73anxZoLu58lFe3UCIS58rytKe8H 248 | --- 249 | 250 | --- 251 | hideInToc: true 252 | --- 253 | 254 | # Why need a cloud agnostic Serverless platform? 255 | 256 | ### Why Cloud Agnostic 257 | 258 | * Different customers require to use different cloud providers 259 | * Some customers’ vehicle data is sensitive and are required to be isolated from public clouds 260 | 261 |
262 | 263 | ### Why Serverless 264 | 265 | * Autonomous driving has so many application scenarios, there're requirements to use different processing logics for different scenarios even for the same data source 266 | * Data types and processing modules are complex, multi-language support is required 267 | * Massive events need to be handled in real time 268 | * Data processing logics tend to be changed frequently based on rapidly changing requirements 269 | 270 | --- 271 | layout: iframe 272 | url: https://embeds.onemodel.app/d/iframe/QSsJOLQszQIxATltAMwPEpcjjLiWa6aZAuHM890P0eBdXN7lXsXehj1Lg5GA 273 | --- 274 | 275 | --- 276 | hideInToc: true 277 | layout: two-cols 278 | class: m-3 279 | --- 280 | 281 | # Dapr Matters 282 | 283 | * Data from different sensors and processing modules· are complex 284 | * Different cloud providers have different backend services that may result in duplicated implementations over the same data processing logic 285 | * Pub/Sub and Bindings make it easy to set up event-driven architecture for data processing with async functions 286 | 287 | ::right:: 288 | 289 | # KEDA Matters 290 | 291 | * AI drivers need to retain human working habits to a certain extent, so there are obvious peaks and valleys in traffic based on working schedules 292 | * For security reasons, data refresh frequently and sensors produce massive data, so workload should be scalable 293 | * The usage of compute resources directly affects project cost 294 | 295 | --- 296 | hideInToc: true 297 | layout: center-image 298 | --- 299 | 300 |
301 | Explore More 302 |
303 |
304 | Documentation | 305 | Contribution 306 |
307 | 308 | 313 | -------------------------------------------------------------------------------- /202-node-async/src/slides.md: -------------------------------------------------------------------------------- 1 | --- 2 | hideInToc: true 3 | download: 'https://github.com/webup/openfunction-talks/raw/main/202-node-async/202-node-async.pdf' 4 | # try also 'default' to start with a default theme 5 | # theme: seriph 6 | # random image from a curated Unsplash collection by Anthony 7 | # like them? see https://unsplash.com/collections/94734566/slidev 8 | background: https://source.unsplash.com/collection/94734566/1920x1080 9 | # apply any windi css classes to the current slide 10 | class: 'text-center' 11 | # https://sli.dev/custom/highlighters.html 12 | # highlighter: shiki 13 | # show line numbers in code blocks 14 | lineNumbers: false 15 | # some information about the slides, markdown enabled 16 | info: | 17 | ## OpenFunction Tutorials 18 | 19 | Hands-on tutorial on Node.js Functions Framework 20 | 21 | Learn more at [OpenFunction](https://openfunction.dev/) 22 | # persist drawings in exports and build 23 | drawings: 24 | persist: false 25 | --- 26 | 27 | # OpenFunction 202 28 | 29 | Node.js Async Function Quickstart 30 | 31 |
32 | 33 | Press Space for next page 34 | 35 |
36 | 37 | 47 | 48 | --- 49 | hideInToc: true 50 | layout: intro 51 | --- 52 | 53 | # Haili Zhang 54 | 55 |
56 | KubeSphere Ambassador, CNCF OpenFunction TOC Member.
57 | Cloud Platform Director of UISEE© Technology.
58 | Cloud Native focuses: Kubernetes, DevOps, Observability, Service Mesh, Serverless.
59 |
60 | 61 |
62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 |
71 | 72 | 73 | 74 | --- 75 | hideInToc: true 76 | --- 77 | 78 | # Table of Content 79 | 80 | 81 | 82 | --- 83 | 84 | # Prerequsites 85 | 86 | Use [`ofn`](https://github.com/OpenFunction/cli) [^1] [^2] CLI tool to deploy OpenFunction. 87 | 88 | * Install OpenFunction with Async Runtime only [^3] 89 | 90 | ```bash 91 | $ ofn install --async 92 | ``` 93 | 94 | * Install OpenFunction with Async Runtime and function build framework 95 | 96 | ```bash 97 | $ ofn install --async --shipwright 98 | ``` 99 | 100 | [^1]: Add `--region-cn` option in case you have limited access to gcr.io or github.com 101 | [^2]: Use `--dry-run` to peek the components and their versions to be installed by the current command 102 | [^3]: Please refer to learn how to build function image at local 103 | 104 | --- 105 | hideInToc: true 106 | layout: center 107 | class: text-center 108 | --- 109 | 110 | # Your First Async Function 111 | 112 | A brief walkthrough 113 | 114 | --- 115 | title: Your First Async Function 116 | --- 117 | 118 |
119 | 120 | # Async 121 | 122 | ```js 123 | function (ctx, data) {} 124 | ``` 125 |
126 | 127 |
128 | 129 | ###### Parameters 130 | 131 | * `ctx`: OpenFunction [context](https://github.com/OpenFunction/functions-framework-nodejs/blob/master/src/openfunction/function_context.ts) object 132 | * `ctx.send(payload, output?)`: Send `payload` to all or one specific `output` of Dapr Output [Binding](https://docs.dapr.io/reference/components-reference/supported-bindings/) or Pub [Broker](https://docs.dapr.io/reference/components-reference/supported-pubsub/) 133 | * `data`: Data recieved from Dapr Input Binding or Sub Broker 134 | 135 | ###### Notice 136 | 137 | * `ctx.send` CAN be invoked where necessary, when you have certain outgoing data to send 138 | 139 |
140 | 141 |
142 | 143 | # (HTTP) Sync 144 | 145 | ```js 146 | function (req, res) {} 147 | ``` 148 | 149 |
150 | 151 |
152 | 153 | ###### Parameters 154 | 155 | * `req`: Express standard [request](https://devdocs.io/express-request/) object 156 | * `res`: Express standard [response](https://devdocs.io/express-response/) object 157 | * `res.send(body)`: Use this method to send HTTP response in most common cases 158 | 159 | ###### NOTICE 160 | * Response process SHOULD be explictly ended with `res.send()`, `res.json()`, `res.end()` and alike methods 161 | 162 |
163 | 164 |
165 | 166 | --- 167 | title: A sample async function 168 | level: 2 169 | --- 170 | 171 | # A sample function: `tryAsync` 172 | 173 |
174 | 175 | 176 | 177 |
178 | 179 | ###### index.mjs 180 | 181 | ```js 182 | // Async function 183 | export const tryAsync = (ctx, data) => { 184 | console.log('Data received: %o', data); 185 | ctx.send(data); 186 | }; 187 | 188 | // HTTP sync function 189 | export const tryKnative = (req, res) => { 190 | res.send(`Hello, ${req.query.u || 'World'}!`); 191 | }; 192 | ``` 193 | 194 |
195 | 196 |
197 | 198 | ###### package.json 199 | 200 | ```json 201 | { 202 | "main": "index.mjs", 203 | "scripts": { 204 | "start": "functions-framework --target=tryKnative" 205 | }, 206 | "dependencies": { 207 | "@openfunction/functions-framework": "^0.4.1" 208 | } 209 | } 210 | ``` 211 | 212 |
213 | 214 |
215 | 216 | ###### Notice 217 | 218 | * Serveral async and sync functions CAN be placed in ONE SINGLE JavaScript file 219 | * Target function CAN be assigned when applying Function CR 220 | * In `package.json`, `sciprts` and `dependencies` sections could be omitted 221 | * [@openfucntion/openfunction-framework](https://www.npmjs.com/package/@openfunction/functions-framework/v/0.4.1) lib would be automatically added during build 222 | * `start` script is highly recommeneded for local development 223 | 224 |
225 | 226 |
227 | 228 |
229 | 230 | --- 231 | title: Build Function Image via Pack 232 | level: 2 233 | --- 234 | 235 | # Build Function Image via Pack 236 | 237 | Local build is recommended if your Kubernetes nodes have limited access to GitHub or Docker Hub. 238 | 239 | 1. Install Cloud Native Buildpacks project's [Pack](https://buildpacks.io/docs/tools/pack/) CLI tool 240 | 241 | 1. Use `pack` tool to build your function image at local [^1] 242 | 243 | ```bash {all|1|2|3|all} 244 | pack build -B openfunction/builder-node:v2-16.13 \ # Builder image, `16` is the latest version 245 | -e FUNC_NAME=tryKnative \ # Default entry point function 246 | -p src \ # Path of source files to be built 247 | /: 248 | ``` 249 | 250 | 1. Push function image to target container repository (e.g. Docker Hub) 251 | 252 | ```bash 253 | docker push /: 254 | ``` 255 | 256 | [^1]: `pack` tool would download builder image during the build process 257 | 258 | --- 259 | layout: center 260 | class: text-center 261 | --- 262 | 263 | # Lab: [MQTT](https://www.emqx.com/en/mqtt) Forwarder 264 | 265 | Use async function to bridge MQTT messages among topic channels 266 | 267 | --- 268 | title: Set up MQTT Broker 269 | level: 2 270 | --- 271 | 272 | # Set up MQTT Broker 273 | 274 | In this lab, we will use [EMQX](https://www.emqx.io/) as the broker infrastructure. Learn [full steps](https://www.emqx.com/en/blog/rapidly-deploy-emqx-clusters-on-kubernetes-via-helm). 275 | 276 | 1. Add EMQX Helm Chart repository 277 | 278 | ```bash 279 | helm repo add emqx https://repos.emqx.io/charts 280 | helm repo update 281 | ``` 282 | 283 | 1. Search available charts of EMQX 284 | 285 | ```plain 286 | helm search repo emqx 287 | 288 | NAME CHART VERSION APP VERSION DESCRIPTION 289 | emqx/emqx 4.4.3 4.4.3 A Helm chart for EMQX 290 | emqx/emqx-ee 4.4.3 4.4.3 A Helm chart for EMQ X 291 | ``` 292 | 293 | 1. Deploy single replica of EMQX, and expose NodePort service 294 | 295 | ```bash 296 | helm install emqx emqx/emqx --set replicaCount=1 --set service.type=NodePort 297 | ``` 298 | 299 | 300 | --- 301 | hideInToc: true 302 | layout: image 303 | image: images/emqx-dashboard.png 304 | class: text-center 305 | --- 306 | 307 | ###### EQMX Dashboard Screenshot 308 | 309 | --- 310 | title: "Lab 1: MQTT Input and Output Binding" 311 | level: 2 312 | layout: two-cols 313 | --- 314 | 315 | ```yaml {all|9-10|11-13|17-19|20-26} 316 | apiVersion: core.openfunction.io/v1beta1 317 | kind: Function 318 | metadata: 319 | name: sample-node-async-bindings 320 | spec: 321 | version: v2.0.0 322 | image: '/:' 323 | serving: 324 | # default to knative 325 | runtime: async 326 | annotations: 327 | # default to "grpc" 328 | dapr.io/app-protocol: http 329 | template: 330 | containers: 331 | - name: function 332 | params: 333 | # default to FUNC_NAME value 334 | FUNCTION_TARGET: tryAsync 335 | inputs: 336 | - name: mqtt-input 337 | component: mqtt-in 338 | outputs: 339 | - name: mqtt-output 340 | component: mqtt-out 341 | operation: create 342 | 343 | ``` 344 | 345 | ::right:: 346 | 347 | 348 | 349 | ```yaml 350 | bindings: 351 | mqtt-in: 352 | type: bindings.mqtt 353 | version: v1 354 | metadata: 355 | - name: consumerID 356 | value: '{uuid}' 357 | - name: url 358 | value: tcp://admin:public@emqx:1883 359 | - name: topic 360 | value: in 361 | mqtt-out: 362 | type: bindings.mqtt 363 | version: v1 364 | metadata: 365 | - name: consumerID 366 | value: '{uuid}' 367 | - name: url 368 | value: tcp://admin:public@emqx:1883 369 | - name: topic 370 | value: out 371 | ``` 372 | 373 | > * Dapr Component - Bindings - [MQTT](https://docs.dapr.io/reference/components-reference/supported-bindings/mqtt/) 374 | > * OpenFunction - Function CRD - [DaprIO](https://openfunction.dev/docs/reference/component-reference/function-spec/#daprio) 375 | > * Check full [sample](https://github.com/OpenFunction/samples/tree/main/functions/async/mqtt-io-node) codes 376 | 377 | 378 | 379 | 384 | 385 | --- 386 | title: Deploy Function 387 | level: 3 388 | --- 389 | 390 | # Lab 1: MQTT Input and Output Binding 391 | 392 | * Apply function , and check running states 393 | 394 | ```bash 395 | $ kubectl apply -f async-bindings.yaml 396 | function.core.openfunction.io/sample-node-async-bindings created 397 | 398 | $ kubectl get fn 399 | NAME BUILDSTATE SERVINGSTATE BUILDER SERVING URL AGE 400 | sample-node-async-bindings Skipped Running serving-8f7xc 140m 401 | 402 | $ kubectl get po 403 | NAME READY STATUS RESTARTS AGE 404 | serving-8f7xc-deployment-v200-l78xc-564c6b5bf7-vksg7 2/2 Running 0 141m 405 | ``` 406 | 407 | * Furthermore, check whether `function` container output correct logs 408 | 409 | ```bash 410 | $ kubectl logs -c function serving-8f7xc-deployment-v200-l78xc-564c6b5bf7-vksg7 411 | ... 412 | [Dapr-JS] Listening on 8080 413 | [Dapr-JS] Letting Dapr pick-up the server (Maximum 60s wait time) 414 | [Dapr-JS] - Waiting till Dapr Started (#0) 415 | [Dapr-JS] Server Started 416 | ``` 417 | 418 | --- 419 | title: Trigger Event 420 | level: 3 421 | layout: image-right 422 | image: images/mqttx-in-out.png 423 | --- 424 | 425 | # Lab 1: Trigger Event 426 | 427 | See also: [MQTT X](https://mqttx.app/) desktop client 428 | 429 | * Connect EQMX server via NodePort mapped to `tcp:1883` 430 | * Publish `{"msg": "hello"}` to `in` topic 431 | * Payload received in `out` topic 👇 👉 432 | * Check the `function` container log 433 | 434 | ```bash 435 | $ kubectl logs -c function serving-8f7xc-deployment-v200-l78xc-564c6b5bf7-vksg7 436 | ... 437 | [Dapr-JS] Listening on 8080 438 | [Dapr-JS] Letting Dapr pick-up the server (Maximum 60s wait time) 439 | [Dapr-JS] - Waiting till Dapr Started (#0) 440 | [Dapr-JS] Server Started 441 | Data received: { msg: 'hello' } 442 | ``` 443 | 444 | --- 445 | title: "Lab 2: MQTT Pub and Sub" 446 | level: 2 447 | layout: two-cols 448 | --- 449 | 450 | ```yaml {all|9-10|11-13|15-17|18-25} 451 | apiVersion: core.openfunction.io/v1beta1 452 | kind: Function 453 | metadata: 454 | name: sample-node-async-pubsub 455 | spec: 456 | version: v2.0.0 457 | image: '/:' 458 | serving: 459 | # default to knative 460 | runtime: async 461 | annotations: 462 | # default to "grpc" 463 | dapr.io/app-protocol: http 464 | template: ... 465 | params: 466 | # default to FUNC_NAME value 467 | FUNCTION_TARGET: tryAsync 468 | inputs: 469 | - name: mqtt-sub 470 | component: mqtt-pubsub 471 | topic: sub 472 | outputs: 473 | - name: mqtt-pub 474 | component: mqtt-pubsub 475 | topic: pub 476 | 477 | ``` 478 | 479 | ::right:: 480 | 481 | 482 | 483 | ```yaml 484 | pubsub: 485 | mqtt-pubsub: 486 | type: pubsub.mqtt 487 | version: v1 488 | metadata: 489 | - name: consumerID 490 | value: '{uuid}' 491 | - name: url 492 | value: tcp://admin:public@emqx:1883 493 | - name: qos 494 | value: 1 495 | ``` 496 | 497 | > * Dapr Component - Pub/Sub Brokers - [MQTT](https://docs.dapr.io/reference/components-reference/supported-pubsub/setup-mqtt/) 498 | > * OpenFunction - Function CRD - [DaprIO](https://openfunction.dev/docs/reference/component-reference/function-spec/#daprio) 499 | > * `topic` field is required for pubsub component 500 | > * Check full [sample](https://github.com/OpenFunction/samples/tree/main/functions/async/mqtt-io-node) codes 501 | 502 | 503 | 504 | 509 | 510 | --- 511 | title: Deploy Function 512 | level: 3 513 | --- 514 | 515 | # Lab 2: MQTT Pub and Sub 516 | 517 | * Apply function , and check running states 518 | 519 | ```bash 520 | $ kubectl apply -f async-pubsub.yaml 521 | function.core.openfunction.io/sample-node-async-pubsub created 522 | 523 | $ kubectl get fn 524 | NAME BUILDSTATE SERVINGSTATE BUILDER SERVING URL AGE 525 | sample-node-async-pubsub Skipped Running serving-2qfkl 140m 526 | 527 | $ kubectl get po 528 | NAME READY STATUS RESTARTS AGE 529 | serving-2qfkl-deployment-v200-6cshf-57c8b5b8dd-ztmbf 2/2 Running 0 141m 530 | ``` 531 | 532 | * Furthermore, check whether `function` container output correct logs 533 | 534 | ```bash 535 | $ kubectl logs -c function serving-2qfkl-deployment-v200-6cshf-57c8b5b8dd-ztmbf 536 | ... 537 | [Dapr-JS] Listening on 8080 538 | [Dapr-JS] Letting Dapr pick-up the server (Maximum 60s wait time) 539 | [Dapr-JS] - Waiting till Dapr Started (#0) 540 | [Dapr API][PubSub] Registered 1 PubSub Subscriptions 541 | [Dapr-JS] Server Started 542 | ``` 543 | 544 | --- 545 | title: Trigger Event 546 | level: 3 547 | layout: image-right 548 | image: images/mqttx-pub-sub.png 549 | --- 550 | 551 | # Lab 2: Trigger Event 552 | 553 | * Connect EQMX server via NodePort mapped to `tcp:1883` 554 | * Publish a [CloudEvents](https://cloudevents.io/) event to `pub` topic 555 | * CloudEvents payload got in `sub` 👉 556 | * Pure data recieved in async function 👇 557 | * Check the `function` container log 558 | 559 | ```bash 560 | $ kubectl logs -c function serving-2qfkl-deployment-v200-6cshf-57c8b5b8dd-ztmbf 561 | ... 562 | [Dapr-JS] Listening on 8080 563 | [Dapr-JS] Letting Dapr pick-up the server (Maximum 60s wait time) 564 | [Dapr-JS] - Waiting till Dapr Started (#0) 565 | [Dapr API][PubSub] Registered 1 PubSub Subscriptions 566 | [Dapr-JS] Server Started 567 | Data received: { orderId: '100' } 568 | ``` 569 | 570 | --- 571 | hideInToc: true 572 | layout: center 573 | class: text-center 574 | --- 575 | 576 | # Learn More 577 | 578 | [Discord](https://discord.gg/awpAh8W5xW) · [Slack](https://cloud-native.slack.com/archives/C03ETDMD3LZ) 579 | 580 |
581 | 582 | [OpenFunction](https://openfunction.dev/) · [Node.js Functions Framework](https://github.com/OpenFunction/functions-framework-nodejs) 583 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | importers: 4 | 5 | .: 6 | specifiers: 7 | '@iconify/json': ^2.1.61 8 | '@slidev/cli': ^0.33.0 9 | '@slidev/theme-default': ^0.21.2 10 | playwright-chromium: ^1.22.2 11 | pnpm: ^7.2.1 12 | rimraf: ^3.0.2 13 | devDependencies: 14 | '@iconify/json': 2.1.61 15 | '@slidev/cli': 0.33.0_playwright-chromium@1.22.2 16 | '@slidev/theme-default': 0.21.2 17 | playwright-chromium: 1.22.2 18 | pnpm: 7.2.1 19 | rimraf: 3.0.2 20 | 21 | 101-ofn-overview/src: 22 | specifiers: 23 | '@slidev/cli': ^0.33.0 24 | '@slidev/theme-default': '*' 25 | slidev-theme-light-icons: ^1.0.2 26 | dependencies: 27 | '@slidev/cli': 0.33.0 28 | '@slidev/theme-default': 0.21.2 29 | slidev-theme-light-icons: 1.0.2 30 | 31 | 202-node-async/src: 32 | specifiers: 33 | '@slidev/cli': ^0.33.0 34 | '@slidev/theme-default': '*' 35 | '@slidev/theme-seriph': '*' 36 | dependencies: 37 | '@slidev/cli': 0.33.0 38 | '@slidev/theme-default': 0.21.2 39 | '@slidev/theme-seriph': 0.21.2 40 | 41 | 203-node-mixed/src: 42 | specifiers: 43 | '@slidev/cli': ^0.33.0 44 | '@slidev/theme-default': '*' 45 | '@slidev/theme-seriph': '*' 46 | dependencies: 47 | '@slidev/cli': 0.33.0 48 | '@slidev/theme-default': 0.21.2 49 | '@slidev/theme-seriph': 0.21.2 50 | 51 | packages: 52 | 53 | /@antfu/install-pkg/0.1.0: 54 | resolution: {integrity: sha512-VaIJd3d1o7irZfK1U0nvBsHMyjkuyMP3HKYVV53z8DKyulkHKmjhhtccXO51WSPeeSHIeoJEoNOKavYpS7jkZw==} 55 | dependencies: 56 | execa: 5.1.1 57 | find-up: 5.0.0 58 | 59 | /@antfu/utils/0.1.7: 60 | resolution: {integrity: sha512-XbmXbhrjfxQq+ishOKeUIK1VYxQV0B+ZkAQkz00bxhmQd5izdT0YRSDwkyH/KX46gFVBMd+6anvSDlciUt3L4A==} 61 | dev: false 62 | 63 | /@antfu/utils/0.5.2: 64 | resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==} 65 | 66 | /@babel/helper-validator-identifier/7.16.7: 67 | resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} 68 | engines: {node: '>=6.9.0'} 69 | 70 | /@babel/parser/7.18.5: 71 | resolution: {integrity: sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==} 72 | engines: {node: '>=6.0.0'} 73 | hasBin: true 74 | dependencies: 75 | '@babel/types': 7.18.4 76 | 77 | /@babel/types/7.18.4: 78 | resolution: {integrity: sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==} 79 | engines: {node: '>=6.9.0'} 80 | dependencies: 81 | '@babel/helper-validator-identifier': 7.16.7 82 | to-fast-properties: 2.0.0 83 | 84 | /@braintree/sanitize-url/6.0.0: 85 | resolution: {integrity: sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w==} 86 | 87 | /@drauu/core/0.3.0: 88 | resolution: {integrity: sha512-rN2Nu70lDIqWrihwlrBlncv94PJrPUi2F91O8vnOEJYpb1qQnG5v8oFiYzfshiSmKzENPKHt7F8eaG5xoaLW4w==} 89 | dependencies: 90 | perfect-freehand: 1.1.0 91 | 92 | /@iconify-json/carbon/1.1.5: 93 | resolution: {integrity: sha512-ENl8CIEo+7JcRzpJ/58i+dDc3fkNOO7gyNGg4S4JN5cAiVpvltYTVO86Oei7rpl8bKypJ0vk3B0BbzzTw7DclA==} 94 | dependencies: 95 | '@iconify/types': 1.1.0 96 | 97 | /@iconify-json/ph/1.1.1: 98 | resolution: {integrity: sha512-sIHTY+c1F8x29BM49IqoccJ3T8mvVXPcrE4WOpJ3GsBaip2YqFJRYU60rw64UL6GEI13vWSD7NsZKq8ytTO87g==} 99 | dependencies: 100 | '@iconify/types': 1.1.0 101 | 102 | /@iconify/json-tools/1.0.10: 103 | resolution: {integrity: sha512-LFelJDOLZ6JHlmlAkgrvmcu4hpNPB91KYcr4f60D/exzU1eNOb4/KCVHIydGHIQFaOacIOD+Xy+B7P1z812cZg==} 104 | dev: false 105 | 106 | /@iconify/json/1.1.461: 107 | resolution: {integrity: sha512-9Y41Tk9s3LDt4WI20XySNhNX6qTJ/WOBeE3O2iyoV9LJ6gFEDjp0uTPzfRU9NUx7D6VkvQ/htJEuRe9LmyMqUA==} 108 | dev: false 109 | 110 | /@iconify/json/2.1.61: 111 | resolution: {integrity: sha512-oUnlQkA/eq6vqGSBrpZlcPd1fgeDV8PVe7QucGa7JzBnaIfKskdD0hJVYehzlTHZ4yBsTeTTmk43ddG7RtwRrQ==} 112 | dependencies: 113 | '@iconify/types': 1.1.0 114 | pathe: 0.2.0 115 | dev: true 116 | 117 | /@iconify/types/1.1.0: 118 | resolution: {integrity: sha512-Jh0llaK2LRXQoYsorIH8maClebsnzTcve+7U3rQUSnC11X4jtPnFuyatqFLvMxZ8MLG8dB4zfHsbPfuvxluONw==} 119 | 120 | /@iconify/utils/1.0.32: 121 | resolution: {integrity: sha512-m+rnw7qKHq/XF7DAi4BcFoEAcXBfqqMgQJh8brGEHeqE/RUvgDMjmxsHgWnVpFsG+VmjGyAiI7nwXdliCwEU0Q==} 122 | dependencies: 123 | '@antfu/install-pkg': 0.1.0 124 | '@antfu/utils': 0.5.2 125 | '@iconify/types': 1.1.0 126 | debug: 4.3.4 127 | kolorist: 1.5.1 128 | local-pkg: 0.4.1 129 | transitivePeerDependencies: 130 | - supports-color 131 | 132 | /@nodelib/fs.scandir/2.1.5: 133 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 134 | engines: {node: '>= 8'} 135 | dependencies: 136 | '@nodelib/fs.stat': 2.0.5 137 | run-parallel: 1.2.0 138 | 139 | /@nodelib/fs.stat/2.0.5: 140 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 141 | engines: {node: '>= 8'} 142 | 143 | /@nodelib/fs.walk/1.2.8: 144 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 145 | engines: {node: '>= 8'} 146 | dependencies: 147 | '@nodelib/fs.scandir': 2.1.5 148 | fastq: 1.13.0 149 | 150 | /@pdf-lib/standard-fonts/1.0.0: 151 | resolution: {integrity: sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==} 152 | dependencies: 153 | pako: 1.0.11 154 | dev: false 155 | 156 | /@pdf-lib/upng/1.0.1: 157 | resolution: {integrity: sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==} 158 | dependencies: 159 | pako: 1.0.11 160 | dev: false 161 | 162 | /@polka/url/1.0.0-next.21: 163 | resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} 164 | dev: false 165 | 166 | /@rollup/pluginutils/4.2.1: 167 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 168 | engines: {node: '>= 8.0.0'} 169 | dependencies: 170 | estree-walker: 2.0.2 171 | picomatch: 2.3.1 172 | 173 | /@slidev/cli/0.33.0: 174 | resolution: {integrity: sha512-Ej11pPmfya3xH8aPY+1Lyl1JSy/avQoAOyLB3Bv8nJ5MsdW+fcUj/u3OksaMbESPDly3A0RWU2Tda4NtfFVecg==} 175 | engines: {node: '>=14.0.0'} 176 | hasBin: true 177 | peerDependencies: 178 | playwright-chromium: ^1.10.0 179 | peerDependenciesMeta: 180 | playwright-chromium: 181 | optional: true 182 | dependencies: 183 | '@antfu/utils': 0.5.2 184 | '@iconify-json/carbon': 1.1.5 185 | '@iconify-json/ph': 1.1.1 186 | '@slidev/client': 0.33.0_vite@2.9.12 187 | '@slidev/parser': 0.33.0 188 | '@slidev/types': 0.33.0 189 | '@vitejs/plugin-vue': 2.3.3_vite@2.9.12+vue@3.2.37 190 | '@vue/compiler-sfc': 3.2.37 191 | cli-progress: 3.11.1 192 | codemirror: 5.65.5 193 | connect: 3.7.0 194 | debug: 4.3.4 195 | fast-glob: 3.2.11 196 | fs-extra: 10.1.0 197 | global-dirs: 3.0.0 198 | import-from: 4.0.0 199 | is-installed-globally: 0.4.0 200 | jiti: 1.13.0 201 | js-base64: 3.7.2 202 | katex: 0.15.6 203 | kolorist: 1.5.1 204 | markdown-it: 13.0.1 205 | markdown-it-footnote: 3.0.3 206 | markdown-it-link-attributes: 4.0.0 207 | monaco-editor: 0.33.0 208 | nanoid: 3.3.4 209 | open: 8.4.0 210 | plantuml-encoder: 1.4.0 211 | prismjs: 1.28.0 212 | prompts: 2.4.2 213 | resolve: 1.22.0 214 | resolve-from: 5.0.0 215 | resolve-global: 1.0.0 216 | shiki: 0.10.1 217 | unplugin-icons: 0.14.3_zzjg27s3eqfbklnrwy6rdd2pii 218 | unplugin-vue-components: 0.19.6_vite@2.9.12+vue@3.2.37 219 | vite: 2.9.12 220 | vite-plugin-md: 0.13.1_vite@2.9.12 221 | vite-plugin-remote-assets: 0.2.2_vite@2.9.12 222 | vite-plugin-vue-server-ref: 0.2.4_vite@2.9.12+vue@3.2.37 223 | vite-plugin-windicss: 1.8.4_vite@2.9.12 224 | vue: 3.2.37 225 | windicss: 3.5.4 226 | yargs: 17.5.1 227 | transitivePeerDependencies: 228 | - '@babel/parser' 229 | - '@babel/traverse' 230 | - '@nuxt/kit' 231 | - '@svgr/core' 232 | - '@vue/composition-api' 233 | - esbuild 234 | - less 235 | - rollup 236 | - sass 237 | - stylus 238 | - supports-color 239 | - vue-template-compiler 240 | - vue-template-es2015-compiler 241 | - webpack 242 | dev: false 243 | 244 | /@slidev/cli/0.33.0_playwright-chromium@1.22.2: 245 | resolution: {integrity: sha512-Ej11pPmfya3xH8aPY+1Lyl1JSy/avQoAOyLB3Bv8nJ5MsdW+fcUj/u3OksaMbESPDly3A0RWU2Tda4NtfFVecg==} 246 | engines: {node: '>=14.0.0'} 247 | hasBin: true 248 | peerDependencies: 249 | playwright-chromium: ^1.10.0 250 | peerDependenciesMeta: 251 | playwright-chromium: 252 | optional: true 253 | dependencies: 254 | '@antfu/utils': 0.5.2 255 | '@iconify-json/carbon': 1.1.5 256 | '@iconify-json/ph': 1.1.1 257 | '@slidev/client': 0.33.0_vite@2.9.12 258 | '@slidev/parser': 0.33.0 259 | '@slidev/types': 0.33.0 260 | '@vitejs/plugin-vue': 2.3.3_vite@2.9.12+vue@3.2.37 261 | '@vue/compiler-sfc': 3.2.37 262 | cli-progress: 3.11.1 263 | codemirror: 5.65.5 264 | connect: 3.7.0 265 | debug: 4.3.4 266 | fast-glob: 3.2.11 267 | fs-extra: 10.1.0 268 | global-dirs: 3.0.0 269 | import-from: 4.0.0 270 | is-installed-globally: 0.4.0 271 | jiti: 1.13.0 272 | js-base64: 3.7.2 273 | katex: 0.15.6 274 | kolorist: 1.5.1 275 | markdown-it: 13.0.1 276 | markdown-it-footnote: 3.0.3 277 | markdown-it-link-attributes: 4.0.0 278 | monaco-editor: 0.33.0 279 | nanoid: 3.3.4 280 | open: 8.4.0 281 | plantuml-encoder: 1.4.0 282 | playwright-chromium: 1.22.2 283 | prismjs: 1.28.0 284 | prompts: 2.4.2 285 | resolve: 1.22.0 286 | resolve-from: 5.0.0 287 | resolve-global: 1.0.0 288 | shiki: 0.10.1 289 | unplugin-icons: 0.14.3_zzjg27s3eqfbklnrwy6rdd2pii 290 | unplugin-vue-components: 0.19.6_vite@2.9.12+vue@3.2.37 291 | vite: 2.9.12 292 | vite-plugin-md: 0.13.1_vite@2.9.12 293 | vite-plugin-remote-assets: 0.2.2_vite@2.9.12 294 | vite-plugin-vue-server-ref: 0.2.4_vite@2.9.12+vue@3.2.37 295 | vite-plugin-windicss: 1.8.4_vite@2.9.12 296 | vue: 3.2.37 297 | windicss: 3.5.4 298 | yargs: 17.5.1 299 | transitivePeerDependencies: 300 | - '@babel/parser' 301 | - '@babel/traverse' 302 | - '@nuxt/kit' 303 | - '@svgr/core' 304 | - '@vue/composition-api' 305 | - esbuild 306 | - less 307 | - rollup 308 | - sass 309 | - stylus 310 | - supports-color 311 | - vue-template-compiler 312 | - vue-template-es2015-compiler 313 | - webpack 314 | dev: true 315 | 316 | /@slidev/cli/0.7.4: 317 | resolution: {integrity: sha512-psUwQw6XLn8ftfUMKY0e9eOKMXcZ2pYsz0JQdcWmYU6wx14GylArT+gj3MMAomdbTVyl7PgfWXqhrfG7ECTDxA==} 318 | engines: {node: '>=14.0.0'} 319 | hasBin: true 320 | peerDependencies: 321 | playwright-chromium: ^1.10.0 322 | peerDependenciesMeta: 323 | playwright-chromium: 324 | optional: true 325 | dependencies: 326 | '@antfu/utils': 0.1.7 327 | '@iconify/json': 1.1.461 328 | '@slidev/client': 0.7.4 329 | '@slidev/parser': 0.7.4 330 | '@slidev/types': 0.7.4 331 | '@vitejs/plugin-vue': 1.10.2_vite@2.9.12 332 | '@vue/compiler-sfc': 3.2.37 333 | cli-progress: 3.11.1 334 | codemirror: 5.65.5 335 | connect: 3.7.0 336 | fast-glob: 3.2.11 337 | fs-extra: 10.1.0 338 | jiti: 1.13.0 339 | js-base64: 3.7.2 340 | kolorist: 1.5.1 341 | markdown-it: 12.3.2 342 | markdown-it-katex: 2.0.3 343 | markdown-it-link-attributes: 3.0.0 344 | monaco-editor: 0.23.0 345 | pdf-lib: 1.17.1 346 | prismjs: 1.28.0 347 | prompts: 2.4.2 348 | shiki: 0.9.15 349 | sirv: 1.0.19 350 | vite: 2.9.12 351 | vite-plugin-components: 0.8.4_vite@2.9.12 352 | vite-plugin-icons: 0.5.1_rhrfcyn26yvunb2ux4b7slv7na 353 | vite-plugin-md: 0.6.7_vite@2.9.12 354 | vite-plugin-remote-assets: 0.2.2_vite@2.9.12 355 | vite-plugin-windicss: 0.16.7_vite@2.9.12 356 | vue: 3.2.37 357 | windicss: 3.5.4 358 | yargs: 17.5.1 359 | transitivePeerDependencies: 360 | - '@vue/composition-api' 361 | - less 362 | - sass 363 | - stylus 364 | - supports-color 365 | - vue-template-compiler 366 | dev: false 367 | 368 | /@slidev/client/0.33.0_vite@2.9.12: 369 | resolution: {integrity: sha512-c/0AOCkc2k/IqlYcbouRKfvM4GWa6B69+AvKE74N2sOy9kR59AR64UAMyeAIPhzOKFDl7m6crg6qOMacKU2nrQ==} 370 | engines: {node: '>=14.0.0'} 371 | dependencies: 372 | '@antfu/utils': 0.5.2 373 | '@slidev/parser': 0.33.0 374 | '@slidev/types': 0.33.0 375 | '@vueuse/core': 8.6.0_vue@3.2.37 376 | '@vueuse/head': 0.7.6_vue@3.2.37 377 | '@vueuse/motion': 2.0.0-beta.18_vue@3.2.37 378 | codemirror: 5.65.5 379 | defu: 6.0.0 380 | drauu: 0.3.0 381 | file-saver: 2.0.5 382 | js-base64: 3.7.2 383 | js-yaml: 4.1.0 384 | katex: 0.15.6 385 | mermaid: 9.1.2 386 | monaco-editor: 0.33.0 387 | nanoid: 3.3.4 388 | prettier: 2.7.0 389 | recordrtc: 5.6.2 390 | resolve: 1.22.0 391 | vite-plugin-windicss: 1.8.4_vite@2.9.12 392 | vue: 3.2.37 393 | vue-router: 4.0.16_vue@3.2.37 394 | vue-starport: 0.2.11 395 | windicss: 3.5.4 396 | transitivePeerDependencies: 397 | - '@nuxt/kit' 398 | - '@vue/composition-api' 399 | - supports-color 400 | - vite 401 | 402 | /@slidev/client/0.7.4: 403 | resolution: {integrity: sha512-5mR7VbRZStSaSF7C9/6Q/o01g8BQHkEGD8fDJH8Kx5kGd0NXyMK13Y04Mrvqbg1WpaTWvDCma2GR+J0cDh7oOQ==} 404 | engines: {node: '>=14.0.0'} 405 | dependencies: 406 | '@antfu/utils': 0.1.7 407 | '@slidev/parser': 0.7.4 408 | '@slidev/types': 0.7.4 409 | '@vueuse/core': 4.11.2_vue@3.2.37 410 | '@vueuse/head': 0.5.1_vue@3.2.37 411 | codemirror: 5.65.5 412 | file-saver: 2.0.5 413 | js-base64: 3.7.2 414 | js-yaml: 4.1.0 415 | monaco-editor: 0.23.0 416 | prettier: 2.7.0 417 | recordrtc: 5.6.2 418 | vue: 3.2.37 419 | vue-router: 4.0.16_vue@3.2.37 420 | windicss: 2.5.14 421 | transitivePeerDependencies: 422 | - '@vue/composition-api' 423 | dev: false 424 | 425 | /@slidev/parser/0.33.0: 426 | resolution: {integrity: sha512-9BEMg953NBpMncM6mxrB6HNZRGI3XySZrn/xw4BHt7O7Jzb0XCWyhE8892VsR5H57ZBGYQa0uaKJZXI0KHqxLg==} 427 | engines: {node: '>=14.0.0'} 428 | dependencies: 429 | '@slidev/types': 0.33.0 430 | js-yaml: 4.1.0 431 | 432 | /@slidev/parser/0.7.4: 433 | resolution: {integrity: sha512-1V+RglqOQmC4RNajdrYUqIDVins4tpbtzisl/V6yv9CkMq4sP/+MvdpRk8KR6SNkIPM1hgN+38C5AF+5DeQy3w==} 434 | engines: {node: '>=14.0.0'} 435 | dependencies: 436 | '@slidev/types': 0.7.4 437 | js-yaml: 4.1.0 438 | dev: false 439 | 440 | /@slidev/theme-default/0.21.2: 441 | resolution: {integrity: sha512-neUucFs2YrRZZd73QwvLTyRG/o1nerDFUR5t8YAmXVLTMzWfY71flQ6aAhjYf+WjsozYsOHcxi/pZtIzZ4VhTQ==} 442 | engines: {node: '>=14.0.0', slidev: '>=0.19.2'} 443 | dependencies: 444 | '@slidev/types': 0.22.7 445 | codemirror-theme-vars: 0.1.1 446 | prism-theme-vars: 0.2.2 447 | theme-vitesse: 0.1.14 448 | 449 | /@slidev/theme-default/0.7.9: 450 | resolution: {integrity: sha512-11+yoDYNiFcp0z5DCVUJK+apxdP25el1YI54Y5IfGNouk9UIjf0wZzDc5m73jF1dzQsHJkCMnqkMo3529TfuSQ==} 451 | engines: {node: '>=14.0.0'} 452 | peerDependencies: 453 | '@slidev/client': '*' 454 | shiki: '*' 455 | dependencies: 456 | '@slidev/types': 0.13.13 457 | codemirror-theme-vars: 0.1.1 458 | prism-theme-vars: 0.2.2 459 | theme-vitesse: 0.1.14 460 | dev: false 461 | 462 | /@slidev/theme-seriph/0.21.2: 463 | resolution: {integrity: sha512-D3zhFYBmH1X37LX1LvTUPxAM1EEK6vMfy4hyxI9JIBXuugVq1WrfjcD+Lt9HnLpH1EqD3Mk+gS0lP/uC2TaVQw==} 464 | engines: {node: '>=14.0.0', slidev: '>=0.19.3'} 465 | dependencies: 466 | '@slidev/types': 0.22.7 467 | codemirror-theme-vars: 0.1.1 468 | prism-theme-vars: 0.2.2 469 | theme-vitesse: 0.1.14 470 | dev: false 471 | 472 | /@slidev/types/0.13.13: 473 | resolution: {integrity: sha512-PdYByaK2yCFNP0J5UFonGXbjuIWSiNwaZklOe9QTZDClUOye6YprSffJpEHPPXb2ktyTf6BZIPd4YNhpTda70w==} 474 | engines: {node: '>=14.0.0'} 475 | dev: false 476 | 477 | /@slidev/types/0.22.7: 478 | resolution: {integrity: sha512-mCVKQbcGTv6d6n9aHpYNp5U04HF+FMbpY083vqpJ6Folc805BB1Am02eubaW0J6nM+dSOu2dDgPY+kIjs75sAQ==} 479 | engines: {node: '>=14.0.0'} 480 | 481 | /@slidev/types/0.33.0: 482 | resolution: {integrity: sha512-QBy1LAunbcZW5szWaoLj3oiWdnYRLeyXmxyGk9N/3x5XbR4NYLf4WMQsji4iLHADalyYwghw53QEhGJsmktQ3g==} 483 | engines: {node: '>=14.0.0'} 484 | 485 | /@slidev/types/0.7.4: 486 | resolution: {integrity: sha512-hqOGpvr0gFlQVwg1gs+KO2mWT2K3e93iCKG9xorNDQ6fmolNkWtXNr1aQ0pNlWUQpE4nYBK4WUK/E+2HIMONDQ==} 487 | engines: {node: '>=14.0.0'} 488 | dev: false 489 | 490 | /@types/linkify-it/3.0.2: 491 | resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} 492 | 493 | /@types/markdown-it/12.2.3: 494 | resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} 495 | dependencies: 496 | '@types/linkify-it': 3.0.2 497 | '@types/mdurl': 1.0.2 498 | 499 | /@types/mdurl/1.0.2: 500 | resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} 501 | 502 | /@vitejs/plugin-vue/1.10.2_vite@2.9.12: 503 | resolution: {integrity: sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw==} 504 | engines: {node: '>=12.0.0'} 505 | peerDependencies: 506 | vite: ^2.5.10 507 | dependencies: 508 | vite: 2.9.12 509 | dev: false 510 | 511 | /@vitejs/plugin-vue/2.3.3_vite@2.9.12+vue@3.2.37: 512 | resolution: {integrity: sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw==} 513 | engines: {node: '>=12.0.0'} 514 | peerDependencies: 515 | vite: ^2.5.10 516 | vue: ^3.2.25 517 | dependencies: 518 | vite: 2.9.12 519 | vue: 3.2.37 520 | 521 | /@vue/compiler-core/3.2.37: 522 | resolution: {integrity: sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==} 523 | dependencies: 524 | '@babel/parser': 7.18.5 525 | '@vue/shared': 3.2.37 526 | estree-walker: 2.0.2 527 | source-map: 0.6.1 528 | 529 | /@vue/compiler-dom/3.2.37: 530 | resolution: {integrity: sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==} 531 | dependencies: 532 | '@vue/compiler-core': 3.2.37 533 | '@vue/shared': 3.2.37 534 | 535 | /@vue/compiler-sfc/3.2.37: 536 | resolution: {integrity: sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==} 537 | dependencies: 538 | '@babel/parser': 7.18.5 539 | '@vue/compiler-core': 3.2.37 540 | '@vue/compiler-dom': 3.2.37 541 | '@vue/compiler-ssr': 3.2.37 542 | '@vue/reactivity-transform': 3.2.37 543 | '@vue/shared': 3.2.37 544 | estree-walker: 2.0.2 545 | magic-string: 0.25.9 546 | postcss: 8.4.14 547 | source-map: 0.6.1 548 | 549 | /@vue/compiler-ssr/3.2.37: 550 | resolution: {integrity: sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==} 551 | dependencies: 552 | '@vue/compiler-dom': 3.2.37 553 | '@vue/shared': 3.2.37 554 | 555 | /@vue/devtools-api/6.1.4: 556 | resolution: {integrity: sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==} 557 | 558 | /@vue/reactivity-transform/3.2.37: 559 | resolution: {integrity: sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==} 560 | dependencies: 561 | '@babel/parser': 7.18.5 562 | '@vue/compiler-core': 3.2.37 563 | '@vue/shared': 3.2.37 564 | estree-walker: 2.0.2 565 | magic-string: 0.25.9 566 | 567 | /@vue/reactivity/3.2.37: 568 | resolution: {integrity: sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==} 569 | dependencies: 570 | '@vue/shared': 3.2.37 571 | 572 | /@vue/runtime-core/3.2.37: 573 | resolution: {integrity: sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==} 574 | dependencies: 575 | '@vue/reactivity': 3.2.37 576 | '@vue/shared': 3.2.37 577 | 578 | /@vue/runtime-dom/3.2.37: 579 | resolution: {integrity: sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==} 580 | dependencies: 581 | '@vue/runtime-core': 3.2.37 582 | '@vue/shared': 3.2.37 583 | csstype: 2.6.20 584 | 585 | /@vue/server-renderer/3.2.37_vue@3.2.37: 586 | resolution: {integrity: sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==} 587 | peerDependencies: 588 | vue: 3.2.37 589 | dependencies: 590 | '@vue/compiler-ssr': 3.2.37 591 | '@vue/shared': 3.2.37 592 | vue: 3.2.37 593 | 594 | /@vue/shared/3.2.37: 595 | resolution: {integrity: sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==} 596 | 597 | /@vueuse/core/4.11.2_vue@3.2.37: 598 | resolution: {integrity: sha512-4A17XvKXpMR6829EVWvrdSKEeAjTWaiC3+xh51KEtlyCwvWQwZ0xwKDrbMj+e15ANxjHrTw/0bJVaWDfPQt/Pw==} 599 | dependencies: 600 | '@vueuse/shared': 4.11.2_vue@3.2.37 601 | vue-demi: 0.13.1_vue@3.2.37 602 | transitivePeerDependencies: 603 | - '@vue/composition-api' 604 | - vue 605 | dev: false 606 | 607 | /@vueuse/core/8.6.0_vue@3.2.37: 608 | resolution: {integrity: sha512-VirzExCm/N+QdrEWT7J4uSrvJ5hquKIAU9alQ37kUvIJk9XxCLxmfRnmekYc1kz2+6BnoyuKYXVmrMV351CB4w==} 609 | peerDependencies: 610 | '@vue/composition-api': ^1.1.0 611 | vue: ^2.6.0 || ^3.2.0 612 | peerDependenciesMeta: 613 | '@vue/composition-api': 614 | optional: true 615 | vue: 616 | optional: true 617 | dependencies: 618 | '@vueuse/metadata': 8.6.0 619 | '@vueuse/shared': 8.6.0_vue@3.2.37 620 | vue: 3.2.37 621 | vue-demi: 0.13.1_vue@3.2.37 622 | 623 | /@vueuse/head/0.5.1_vue@3.2.37: 624 | resolution: {integrity: sha512-xt6qgtItb4z/7vp664opQc0c2+ZoU9itMfvpmg4+h0uJcEnhl7LYxO4V+G8H7EVki7SyXDIFMfoCiCFaJrArmg==} 625 | peerDependencies: 626 | vue: '>=3' 627 | dependencies: 628 | vue: 3.2.37 629 | dev: false 630 | 631 | /@vueuse/head/0.7.6_vue@3.2.37: 632 | resolution: {integrity: sha512-cOWqCkT3WiF5oEpw+VVEWUJd9RLD5rc7DmnFp3cePsejp+t7686uKD9Z9ZU7Twb7R/BI8iexKTmXo9D/F3v6UA==} 633 | peerDependencies: 634 | vue: '>=3' 635 | dependencies: 636 | vue: 3.2.37 637 | 638 | /@vueuse/metadata/8.6.0: 639 | resolution: {integrity: sha512-F+CKPvaExsm7QgRr8y+ZNJFwXasn89rs5wth/HeX9lJ1q8XEt+HJ16Q5Sxh4rfG5YSKXrStveVge8TKvPjMjFA==} 640 | 641 | /@vueuse/motion/2.0.0-beta.18_vue@3.2.37: 642 | resolution: {integrity: sha512-mPeXxuqZp13lqpcb+345TnEP7tEOjC/wTkwf8be1Obzt3913lPpZPXgwKafMoocKRNOnMZye8Y6PqQOEKztk9A==} 643 | peerDependencies: 644 | '@nuxt/kit': npm:@nuxt/kit-edge@latest 645 | '@vue/composition-api': ^1.4.1 646 | vue: ^2.0.0 || >=3.0.0-rc.0 647 | peerDependenciesMeta: 648 | '@vue/composition-api': 649 | optional: true 650 | dependencies: 651 | '@vueuse/core': 8.6.0_vue@3.2.37 652 | '@vueuse/shared': 8.6.0_vue@3.2.37 653 | csstype: 3.1.0 654 | framesync: 6.1.0 655 | popmotion: 11.0.3 656 | style-value-types: 5.1.0 657 | vue: 3.2.37 658 | vue-demi: 0.13.1_vue@3.2.37 659 | 660 | /@vueuse/shared/4.11.2_vue@3.2.37: 661 | resolution: {integrity: sha512-vTbTi6ou7ljH3CkKVoaIaCAoWB5T1ewSogpL6VnO1duMPNuiv7x8K/LunMbnTg4tVyt6QwaiCuEq/kyS6AUBRg==} 662 | dependencies: 663 | vue-demi: 0.13.1_vue@3.2.37 664 | transitivePeerDependencies: 665 | - '@vue/composition-api' 666 | - vue 667 | dev: false 668 | 669 | /@vueuse/shared/8.6.0_vue@3.2.37: 670 | resolution: {integrity: sha512-Y/IVywZo7IfEoSSEtCYpkVEmPV7pU35mEIxV7PbD/D3ly18B3mEsBaPbtDkNM/QP3zAZ5mn4nEkOfddX4uwuIA==} 671 | peerDependencies: 672 | '@vue/composition-api': ^1.1.0 673 | vue: ^2.6.0 || ^3.2.0 674 | peerDependenciesMeta: 675 | '@vue/composition-api': 676 | optional: true 677 | vue: 678 | optional: true 679 | dependencies: 680 | vue: 3.2.37 681 | vue-demi: 0.13.1_vue@3.2.37 682 | 683 | /@windicss/config/1.8.4: 684 | resolution: {integrity: sha512-i4fFGFfZoRess6WMkauykHC3PFd9xKYVx7lSuLfMK7sgo6x3+l4dY42GbsWMHyLqH1sTMfyt1LgfXSIKYJozSA==} 685 | dependencies: 686 | debug: 4.3.4 687 | jiti: 1.13.0 688 | windicss: 3.5.4 689 | transitivePeerDependencies: 690 | - supports-color 691 | 692 | /@windicss/plugin-utils/0.16.7: 693 | resolution: {integrity: sha512-mxgTj/MkemN8JlyfaS20OAJ0BqTUoUlDT9wD/m5U+nUa5SN/r0kPlg1IW9SbmRTrYjNXWEENf9F0Fjb/X4zn6g==} 694 | dependencies: 695 | '@antfu/utils': 0.1.7 696 | debug: 4.3.4 697 | fast-glob: 3.2.11 698 | jiti: 1.13.0 699 | magic-string: 0.25.9 700 | micromatch: 4.0.5 701 | windicss: 3.5.4 702 | transitivePeerDependencies: 703 | - supports-color 704 | dev: false 705 | 706 | /@windicss/plugin-utils/1.8.4: 707 | resolution: {integrity: sha512-DqJVwAfzlgd8nYSNlmhXOey32pI8UwH7QiOWdFS/AR2O/q9oLDGHDn97Its/kZdfoyhi8ylwZNP2Pk0H7cihhQ==} 708 | dependencies: 709 | '@antfu/utils': 0.5.2 710 | '@windicss/config': 1.8.4 711 | debug: 4.3.4 712 | fast-glob: 3.2.11 713 | magic-string: 0.26.2 714 | micromatch: 4.0.5 715 | windicss: 3.5.4 716 | transitivePeerDependencies: 717 | - supports-color 718 | 719 | /ansi-regex/5.0.1: 720 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 721 | engines: {node: '>=8'} 722 | 723 | /ansi-styles/4.3.0: 724 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 725 | engines: {node: '>=8'} 726 | dependencies: 727 | color-convert: 2.0.1 728 | 729 | /anymatch/3.1.2: 730 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 731 | engines: {node: '>= 8'} 732 | dependencies: 733 | normalize-path: 3.0.0 734 | picomatch: 2.3.1 735 | 736 | /argparse/1.0.10: 737 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 738 | dependencies: 739 | sprintf-js: 1.0.3 740 | 741 | /argparse/2.0.1: 742 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 743 | 744 | /at-least-node/1.0.0: 745 | resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} 746 | engines: {node: '>= 4.0.0'} 747 | 748 | /axios/0.21.4_debug@4.3.4: 749 | resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} 750 | dependencies: 751 | follow-redirects: 1.15.1_debug@4.3.4 752 | transitivePeerDependencies: 753 | - debug 754 | 755 | /balanced-match/1.0.2: 756 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 757 | 758 | /binary-extensions/2.2.0: 759 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 760 | engines: {node: '>=8'} 761 | 762 | /brace-expansion/1.1.11: 763 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 764 | dependencies: 765 | balanced-match: 1.0.2 766 | concat-map: 0.0.1 767 | 768 | /brace-expansion/2.0.1: 769 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 770 | dependencies: 771 | balanced-match: 1.0.2 772 | 773 | /braces/3.0.2: 774 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 775 | engines: {node: '>=8'} 776 | dependencies: 777 | fill-range: 7.0.1 778 | 779 | /chalk/4.1.2: 780 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 781 | engines: {node: '>=10'} 782 | dependencies: 783 | ansi-styles: 4.3.0 784 | supports-color: 7.2.0 785 | dev: false 786 | 787 | /chokidar/3.5.3: 788 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 789 | engines: {node: '>= 8.10.0'} 790 | dependencies: 791 | anymatch: 3.1.2 792 | braces: 3.0.2 793 | glob-parent: 5.1.2 794 | is-binary-path: 2.1.0 795 | is-glob: 4.0.3 796 | normalize-path: 3.0.0 797 | readdirp: 3.6.0 798 | optionalDependencies: 799 | fsevents: 2.3.2 800 | 801 | /cli-progress/3.11.1: 802 | resolution: {integrity: sha512-TTMA2LHrYaZeNMcgZGO10oYqj9hvd03pltNtVbu4ddeyDTHlYV7gWxsFiuvaQlgwMBFCv1TukcjiODWFlb16tQ==} 803 | engines: {node: '>=4'} 804 | dependencies: 805 | string-width: 4.2.3 806 | 807 | /cliui/7.0.4: 808 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 809 | dependencies: 810 | string-width: 4.2.3 811 | strip-ansi: 6.0.1 812 | wrap-ansi: 7.0.0 813 | 814 | /codemirror-theme-vars/0.1.1: 815 | resolution: {integrity: sha512-Au0Ysn6tUMZB/1Jd5S8g4Or1kZxTuTnNx6MVs9H46Ad7w8IEjkHusH+4oyia/FBcVuAJO4DIlkDnPM8Qnnf1rg==} 816 | 817 | /codemirror/5.65.5: 818 | resolution: {integrity: sha512-HNyhvGLnYz5c+kIsB9QKVitiZUevha3ovbIYaQiGzKo7ECSL/elWD9RXt3JgNr0NdnyqE9/Rc/7uLfkJQL638w==} 819 | 820 | /color-convert/2.0.1: 821 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 822 | engines: {node: '>=7.0.0'} 823 | dependencies: 824 | color-name: 1.1.4 825 | 826 | /color-name/1.1.4: 827 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 828 | 829 | /commander/2.20.3: 830 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 831 | 832 | /commander/7.2.0: 833 | resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} 834 | engines: {node: '>= 10'} 835 | 836 | /commander/8.3.0: 837 | resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} 838 | engines: {node: '>= 12'} 839 | 840 | /concat-map/0.0.1: 841 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 842 | 843 | /connect/3.7.0: 844 | resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} 845 | engines: {node: '>= 0.10.0'} 846 | dependencies: 847 | debug: 2.6.9 848 | finalhandler: 1.1.2 849 | parseurl: 1.3.3 850 | utils-merge: 1.0.1 851 | transitivePeerDependencies: 852 | - supports-color 853 | 854 | /cross-spawn/7.0.3: 855 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 856 | engines: {node: '>= 8'} 857 | dependencies: 858 | path-key: 3.1.1 859 | shebang-command: 2.0.0 860 | which: 2.0.2 861 | 862 | /csstype/2.6.20: 863 | resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==} 864 | 865 | /csstype/3.1.0: 866 | resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==} 867 | 868 | /d3-array/1.2.4: 869 | resolution: {integrity: sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==} 870 | 871 | /d3-array/3.1.6: 872 | resolution: {integrity: sha512-DCbBBNuKOeiR9h04ySRBMW52TFVc91O9wJziuyXw6Ztmy8D3oZbmCkOO3UHKC7ceNJsN2Mavo9+vwV8EAEUXzA==} 873 | engines: {node: '>=12'} 874 | dependencies: 875 | internmap: 2.0.3 876 | 877 | /d3-axis/1.0.12: 878 | resolution: {integrity: sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==} 879 | 880 | /d3-axis/3.0.0: 881 | resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} 882 | engines: {node: '>=12'} 883 | 884 | /d3-brush/1.1.6: 885 | resolution: {integrity: sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==} 886 | dependencies: 887 | d3-dispatch: 1.0.6 888 | d3-drag: 1.2.5 889 | d3-interpolate: 1.4.0 890 | d3-selection: 1.4.2 891 | d3-transition: 1.3.2 892 | 893 | /d3-brush/3.0.0: 894 | resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} 895 | engines: {node: '>=12'} 896 | dependencies: 897 | d3-dispatch: 3.0.1 898 | d3-drag: 3.0.0 899 | d3-interpolate: 3.0.1 900 | d3-selection: 3.0.0 901 | d3-transition: 3.0.1_d3-selection@3.0.0 902 | 903 | /d3-chord/1.0.6: 904 | resolution: {integrity: sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==} 905 | dependencies: 906 | d3-array: 1.2.4 907 | d3-path: 1.0.9 908 | 909 | /d3-chord/3.0.1: 910 | resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} 911 | engines: {node: '>=12'} 912 | dependencies: 913 | d3-path: 3.0.1 914 | 915 | /d3-collection/1.0.7: 916 | resolution: {integrity: sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==} 917 | 918 | /d3-color/1.4.1: 919 | resolution: {integrity: sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==} 920 | 921 | /d3-color/3.1.0: 922 | resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} 923 | engines: {node: '>=12'} 924 | 925 | /d3-contour/1.3.2: 926 | resolution: {integrity: sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==} 927 | dependencies: 928 | d3-array: 1.2.4 929 | 930 | /d3-contour/3.0.1: 931 | resolution: {integrity: sha512-0Oc4D0KyhwhM7ZL0RMnfGycLN7hxHB8CMmwZ3+H26PWAG0ozNuYG5hXSDNgmP1SgJkQMrlG6cP20HoaSbvcJTQ==} 932 | engines: {node: '>=12'} 933 | dependencies: 934 | d3-array: 3.1.6 935 | 936 | /d3-delaunay/6.0.2: 937 | resolution: {integrity: sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==} 938 | engines: {node: '>=12'} 939 | dependencies: 940 | delaunator: 5.0.0 941 | 942 | /d3-dispatch/1.0.6: 943 | resolution: {integrity: sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==} 944 | 945 | /d3-dispatch/3.0.1: 946 | resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} 947 | engines: {node: '>=12'} 948 | 949 | /d3-drag/1.2.5: 950 | resolution: {integrity: sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==} 951 | dependencies: 952 | d3-dispatch: 1.0.6 953 | d3-selection: 1.4.2 954 | 955 | /d3-drag/3.0.0: 956 | resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} 957 | engines: {node: '>=12'} 958 | dependencies: 959 | d3-dispatch: 3.0.1 960 | d3-selection: 3.0.0 961 | 962 | /d3-dsv/1.2.0: 963 | resolution: {integrity: sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==} 964 | hasBin: true 965 | dependencies: 966 | commander: 2.20.3 967 | iconv-lite: 0.4.24 968 | rw: 1.3.3 969 | 970 | /d3-dsv/3.0.1: 971 | resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} 972 | engines: {node: '>=12'} 973 | hasBin: true 974 | dependencies: 975 | commander: 7.2.0 976 | iconv-lite: 0.6.3 977 | rw: 1.3.3 978 | 979 | /d3-ease/1.0.7: 980 | resolution: {integrity: sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==} 981 | 982 | /d3-ease/3.0.1: 983 | resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} 984 | engines: {node: '>=12'} 985 | 986 | /d3-fetch/1.2.0: 987 | resolution: {integrity: sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==} 988 | dependencies: 989 | d3-dsv: 1.2.0 990 | 991 | /d3-fetch/3.0.1: 992 | resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} 993 | engines: {node: '>=12'} 994 | dependencies: 995 | d3-dsv: 3.0.1 996 | 997 | /d3-force/1.2.1: 998 | resolution: {integrity: sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==} 999 | dependencies: 1000 | d3-collection: 1.0.7 1001 | d3-dispatch: 1.0.6 1002 | d3-quadtree: 1.0.7 1003 | d3-timer: 1.0.10 1004 | 1005 | /d3-force/3.0.0: 1006 | resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} 1007 | engines: {node: '>=12'} 1008 | dependencies: 1009 | d3-dispatch: 3.0.1 1010 | d3-quadtree: 3.0.1 1011 | d3-timer: 3.0.1 1012 | 1013 | /d3-format/1.4.5: 1014 | resolution: {integrity: sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==} 1015 | 1016 | /d3-format/3.1.0: 1017 | resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} 1018 | engines: {node: '>=12'} 1019 | 1020 | /d3-geo/1.12.1: 1021 | resolution: {integrity: sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==} 1022 | dependencies: 1023 | d3-array: 1.2.4 1024 | 1025 | /d3-geo/3.0.1: 1026 | resolution: {integrity: sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==} 1027 | engines: {node: '>=12'} 1028 | dependencies: 1029 | d3-array: 3.1.6 1030 | 1031 | /d3-hierarchy/1.1.9: 1032 | resolution: {integrity: sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==} 1033 | 1034 | /d3-hierarchy/3.1.2: 1035 | resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} 1036 | engines: {node: '>=12'} 1037 | 1038 | /d3-interpolate/1.4.0: 1039 | resolution: {integrity: sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==} 1040 | dependencies: 1041 | d3-color: 1.4.1 1042 | 1043 | /d3-interpolate/3.0.1: 1044 | resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} 1045 | engines: {node: '>=12'} 1046 | dependencies: 1047 | d3-color: 3.1.0 1048 | 1049 | /d3-path/1.0.9: 1050 | resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} 1051 | 1052 | /d3-path/3.0.1: 1053 | resolution: {integrity: sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==} 1054 | engines: {node: '>=12'} 1055 | 1056 | /d3-polygon/1.0.6: 1057 | resolution: {integrity: sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==} 1058 | 1059 | /d3-polygon/3.0.1: 1060 | resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} 1061 | engines: {node: '>=12'} 1062 | 1063 | /d3-quadtree/1.0.7: 1064 | resolution: {integrity: sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==} 1065 | 1066 | /d3-quadtree/3.0.1: 1067 | resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} 1068 | engines: {node: '>=12'} 1069 | 1070 | /d3-random/1.1.2: 1071 | resolution: {integrity: sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==} 1072 | 1073 | /d3-random/3.0.1: 1074 | resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} 1075 | engines: {node: '>=12'} 1076 | 1077 | /d3-scale-chromatic/1.5.0: 1078 | resolution: {integrity: sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==} 1079 | dependencies: 1080 | d3-color: 1.4.1 1081 | d3-interpolate: 1.4.0 1082 | 1083 | /d3-scale-chromatic/3.0.0: 1084 | resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} 1085 | engines: {node: '>=12'} 1086 | dependencies: 1087 | d3-color: 3.1.0 1088 | d3-interpolate: 3.0.1 1089 | 1090 | /d3-scale/2.2.2: 1091 | resolution: {integrity: sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==} 1092 | dependencies: 1093 | d3-array: 1.2.4 1094 | d3-collection: 1.0.7 1095 | d3-format: 1.4.5 1096 | d3-interpolate: 1.4.0 1097 | d3-time: 1.1.0 1098 | d3-time-format: 2.3.0 1099 | 1100 | /d3-scale/4.0.2: 1101 | resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} 1102 | engines: {node: '>=12'} 1103 | dependencies: 1104 | d3-array: 3.1.6 1105 | d3-format: 3.1.0 1106 | d3-interpolate: 3.0.1 1107 | d3-time: 3.0.0 1108 | d3-time-format: 4.1.0 1109 | 1110 | /d3-selection/1.4.2: 1111 | resolution: {integrity: sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==} 1112 | 1113 | /d3-selection/3.0.0: 1114 | resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} 1115 | engines: {node: '>=12'} 1116 | 1117 | /d3-shape/1.3.7: 1118 | resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} 1119 | dependencies: 1120 | d3-path: 1.0.9 1121 | 1122 | /d3-shape/3.1.0: 1123 | resolution: {integrity: sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==} 1124 | engines: {node: '>=12'} 1125 | dependencies: 1126 | d3-path: 3.0.1 1127 | 1128 | /d3-time-format/2.3.0: 1129 | resolution: {integrity: sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==} 1130 | dependencies: 1131 | d3-time: 1.1.0 1132 | 1133 | /d3-time-format/4.1.0: 1134 | resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} 1135 | engines: {node: '>=12'} 1136 | dependencies: 1137 | d3-time: 3.0.0 1138 | 1139 | /d3-time/1.1.0: 1140 | resolution: {integrity: sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==} 1141 | 1142 | /d3-time/3.0.0: 1143 | resolution: {integrity: sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==} 1144 | engines: {node: '>=12'} 1145 | dependencies: 1146 | d3-array: 3.1.6 1147 | 1148 | /d3-timer/1.0.10: 1149 | resolution: {integrity: sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==} 1150 | 1151 | /d3-timer/3.0.1: 1152 | resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} 1153 | engines: {node: '>=12'} 1154 | 1155 | /d3-transition/1.3.2: 1156 | resolution: {integrity: sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==} 1157 | dependencies: 1158 | d3-color: 1.4.1 1159 | d3-dispatch: 1.0.6 1160 | d3-ease: 1.0.7 1161 | d3-interpolate: 1.4.0 1162 | d3-selection: 1.4.2 1163 | d3-timer: 1.0.10 1164 | 1165 | /d3-transition/3.0.1_d3-selection@3.0.0: 1166 | resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} 1167 | engines: {node: '>=12'} 1168 | peerDependencies: 1169 | d3-selection: 2 - 3 1170 | dependencies: 1171 | d3-color: 3.1.0 1172 | d3-dispatch: 3.0.1 1173 | d3-ease: 3.0.1 1174 | d3-interpolate: 3.0.1 1175 | d3-selection: 3.0.0 1176 | d3-timer: 3.0.1 1177 | 1178 | /d3-voronoi/1.1.4: 1179 | resolution: {integrity: sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==} 1180 | 1181 | /d3-zoom/1.8.3: 1182 | resolution: {integrity: sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==} 1183 | dependencies: 1184 | d3-dispatch: 1.0.6 1185 | d3-drag: 1.2.5 1186 | d3-interpolate: 1.4.0 1187 | d3-selection: 1.4.2 1188 | d3-transition: 1.3.2 1189 | 1190 | /d3-zoom/3.0.0: 1191 | resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} 1192 | engines: {node: '>=12'} 1193 | dependencies: 1194 | d3-dispatch: 3.0.1 1195 | d3-drag: 3.0.0 1196 | d3-interpolate: 3.0.1 1197 | d3-selection: 3.0.0 1198 | d3-transition: 3.0.1_d3-selection@3.0.0 1199 | 1200 | /d3/5.16.0: 1201 | resolution: {integrity: sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==} 1202 | dependencies: 1203 | d3-array: 1.2.4 1204 | d3-axis: 1.0.12 1205 | d3-brush: 1.1.6 1206 | d3-chord: 1.0.6 1207 | d3-collection: 1.0.7 1208 | d3-color: 1.4.1 1209 | d3-contour: 1.3.2 1210 | d3-dispatch: 1.0.6 1211 | d3-drag: 1.2.5 1212 | d3-dsv: 1.2.0 1213 | d3-ease: 1.0.7 1214 | d3-fetch: 1.2.0 1215 | d3-force: 1.2.1 1216 | d3-format: 1.4.5 1217 | d3-geo: 1.12.1 1218 | d3-hierarchy: 1.1.9 1219 | d3-interpolate: 1.4.0 1220 | d3-path: 1.0.9 1221 | d3-polygon: 1.0.6 1222 | d3-quadtree: 1.0.7 1223 | d3-random: 1.1.2 1224 | d3-scale: 2.2.2 1225 | d3-scale-chromatic: 1.5.0 1226 | d3-selection: 1.4.2 1227 | d3-shape: 1.3.7 1228 | d3-time: 1.1.0 1229 | d3-time-format: 2.3.0 1230 | d3-timer: 1.0.10 1231 | d3-transition: 1.3.2 1232 | d3-voronoi: 1.1.4 1233 | d3-zoom: 1.8.3 1234 | 1235 | /d3/7.4.4: 1236 | resolution: {integrity: sha512-97FE+MYdAlV3R9P74+R3Uar7wUKkIFu89UWMjEaDhiJ9VxKvqaMxauImy8PC2DdBkdM2BxJOIoLxPrcZUyrKoQ==} 1237 | engines: {node: '>=12'} 1238 | dependencies: 1239 | d3-array: 3.1.6 1240 | d3-axis: 3.0.0 1241 | d3-brush: 3.0.0 1242 | d3-chord: 3.0.1 1243 | d3-color: 3.1.0 1244 | d3-contour: 3.0.1 1245 | d3-delaunay: 6.0.2 1246 | d3-dispatch: 3.0.1 1247 | d3-drag: 3.0.0 1248 | d3-dsv: 3.0.1 1249 | d3-ease: 3.0.1 1250 | d3-fetch: 3.0.1 1251 | d3-force: 3.0.0 1252 | d3-format: 3.1.0 1253 | d3-geo: 3.0.1 1254 | d3-hierarchy: 3.1.2 1255 | d3-interpolate: 3.0.1 1256 | d3-path: 3.0.1 1257 | d3-polygon: 3.0.1 1258 | d3-quadtree: 3.0.1 1259 | d3-random: 3.0.1 1260 | d3-scale: 4.0.2 1261 | d3-scale-chromatic: 3.0.0 1262 | d3-selection: 3.0.0 1263 | d3-shape: 3.1.0 1264 | d3-time: 3.0.0 1265 | d3-time-format: 4.1.0 1266 | d3-timer: 3.0.1 1267 | d3-transition: 3.0.1_d3-selection@3.0.0 1268 | d3-zoom: 3.0.0 1269 | 1270 | /dagre-d3/0.6.4: 1271 | resolution: {integrity: sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==} 1272 | dependencies: 1273 | d3: 5.16.0 1274 | dagre: 0.8.5 1275 | graphlib: 2.1.8 1276 | lodash: 4.17.21 1277 | 1278 | /dagre/0.8.5: 1279 | resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==} 1280 | dependencies: 1281 | graphlib: 2.1.8 1282 | lodash: 4.17.21 1283 | 1284 | /debug/2.6.9: 1285 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 1286 | peerDependencies: 1287 | supports-color: '*' 1288 | peerDependenciesMeta: 1289 | supports-color: 1290 | optional: true 1291 | dependencies: 1292 | ms: 2.0.0 1293 | 1294 | /debug/4.3.4: 1295 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1296 | engines: {node: '>=6.0'} 1297 | peerDependencies: 1298 | supports-color: '*' 1299 | peerDependenciesMeta: 1300 | supports-color: 1301 | optional: true 1302 | dependencies: 1303 | ms: 2.1.2 1304 | 1305 | /define-lazy-prop/2.0.0: 1306 | resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} 1307 | engines: {node: '>=8'} 1308 | 1309 | /defu/6.0.0: 1310 | resolution: {integrity: sha512-t2MZGLf1V2rV4VBZbWIaXKdX/mUcYW0n2znQZoADBkGGxYL8EWqCuCZBmJPJ/Yy9fofJkyuuSuo5GSwo0XdEgw==} 1311 | 1312 | /delaunator/5.0.0: 1313 | resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} 1314 | dependencies: 1315 | robust-predicates: 3.0.1 1316 | 1317 | /dompurify/2.3.8: 1318 | resolution: {integrity: sha512-eVhaWoVibIzqdGYjwsBWodIQIaXFSB+cKDf4cfxLMsK0xiud6SE+/WCVx/Xw/UwQsa4cS3T2eITcdtmTg2UKcw==} 1319 | 1320 | /drauu/0.3.0: 1321 | resolution: {integrity: sha512-27n6beq5cN1PysN0jfwL7Oms2Rk/A2MOQzu9qjhSukKrmpZoypG85q/blTy1ADvh5ukctpYJdytnoQfyNnrgjQ==} 1322 | dependencies: 1323 | '@drauu/core': 0.3.0 1324 | 1325 | /ee-first/1.1.1: 1326 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 1327 | 1328 | /emoji-regex/8.0.0: 1329 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1330 | 1331 | /encodeurl/1.0.2: 1332 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} 1333 | engines: {node: '>= 0.8'} 1334 | 1335 | /entities/2.1.0: 1336 | resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==} 1337 | dev: false 1338 | 1339 | /entities/3.0.1: 1340 | resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} 1341 | engines: {node: '>=0.12'} 1342 | 1343 | /esbuild-android-64/0.14.43: 1344 | resolution: {integrity: sha512-kqFXAS72K6cNrB6RiM7YJ5lNvmWRDSlpi7ZuRZ1hu1S3w0zlwcoCxWAyM23LQUyZSs1PbjHgdbbfYAN8IGh6xg==} 1345 | engines: {node: '>=12'} 1346 | cpu: [x64] 1347 | os: [android] 1348 | requiresBuild: true 1349 | optional: true 1350 | 1351 | /esbuild-android-arm64/0.14.43: 1352 | resolution: {integrity: sha512-bKS2BBFh+7XZY9rpjiHGRNA7LvWYbZWP87pLehggTG7tTaCDvj8qQGOU/OZSjCSKDYbgY7Q+oDw8RlYQ2Jt2BA==} 1353 | engines: {node: '>=12'} 1354 | cpu: [arm64] 1355 | os: [android] 1356 | requiresBuild: true 1357 | optional: true 1358 | 1359 | /esbuild-darwin-64/0.14.43: 1360 | resolution: {integrity: sha512-/3PSilx011ttoieRGkSZ0XV8zjBf2C9enV4ScMMbCT4dpx0mFhMOpFnCHkOK0pWGB8LklykFyHrWk2z6DENVUg==} 1361 | engines: {node: '>=12'} 1362 | cpu: [x64] 1363 | os: [darwin] 1364 | requiresBuild: true 1365 | optional: true 1366 | 1367 | /esbuild-darwin-arm64/0.14.43: 1368 | resolution: {integrity: sha512-1HyFUKs8DMCBOvw1Qxpr5Vv/ThNcVIFb5xgXWK3pyT40WPvgYIiRTwJCvNs4l8i5qWF8/CK5bQxJVDjQvtv0Yw==} 1369 | engines: {node: '>=12'} 1370 | cpu: [arm64] 1371 | os: [darwin] 1372 | requiresBuild: true 1373 | optional: true 1374 | 1375 | /esbuild-freebsd-64/0.14.43: 1376 | resolution: {integrity: sha512-FNWc05TPHYgaXjbPZO5/rJKSBslfG6BeMSs8GhwnqAKP56eEhvmzwnIz1QcC9cRVyO+IKqWNfmHFkCa1WJTULA==} 1377 | engines: {node: '>=12'} 1378 | cpu: [x64] 1379 | os: [freebsd] 1380 | requiresBuild: true 1381 | optional: true 1382 | 1383 | /esbuild-freebsd-arm64/0.14.43: 1384 | resolution: {integrity: sha512-amrYopclz3VohqisOPR6hA3GOWA3LZC1WDLnp21RhNmoERmJ/vLnOpnrG2P/Zao+/erKTCUqmrCIPVtj58DRoA==} 1385 | engines: {node: '>=12'} 1386 | cpu: [arm64] 1387 | os: [freebsd] 1388 | requiresBuild: true 1389 | optional: true 1390 | 1391 | /esbuild-linux-32/0.14.43: 1392 | resolution: {integrity: sha512-KoxoEra+9O3AKVvgDFvDkiuddCds6q71owSQEYwjtqRV7RwbPzKxJa6+uyzUulHcyGVq0g15K0oKG5CFBcvYDw==} 1393 | engines: {node: '>=12'} 1394 | cpu: [ia32] 1395 | os: [linux] 1396 | requiresBuild: true 1397 | optional: true 1398 | 1399 | /esbuild-linux-64/0.14.43: 1400 | resolution: {integrity: sha512-EwINwGMyiJMgBby5/SbMqKcUhS5AYAZ2CpEBzSowsJPNBJEdhkCTtEjk757TN/wxgbu3QklqDM6KghY660QCUw==} 1401 | engines: {node: '>=12'} 1402 | cpu: [x64] 1403 | os: [linux] 1404 | requiresBuild: true 1405 | optional: true 1406 | 1407 | /esbuild-linux-arm/0.14.43: 1408 | resolution: {integrity: sha512-e6YzQUoDxxtyamuF12eVzzRC7bbEFSZohJ6igQB9tBqnNmIQY3fI6Cns3z2wxtbZ3f2o6idkD2fQnlvs2902Dg==} 1409 | engines: {node: '>=12'} 1410 | cpu: [arm] 1411 | os: [linux] 1412 | requiresBuild: true 1413 | optional: true 1414 | 1415 | /esbuild-linux-arm64/0.14.43: 1416 | resolution: {integrity: sha512-UlSpjMWllAc70zYbHxWuDS3FJytyuR/gHJYBr8BICcTNb/TSOYVBg6U7b3jZ3mILTrgzwJUHwhEwK18FZDouUQ==} 1417 | engines: {node: '>=12'} 1418 | cpu: [arm64] 1419 | os: [linux] 1420 | requiresBuild: true 1421 | optional: true 1422 | 1423 | /esbuild-linux-mips64le/0.14.43: 1424 | resolution: {integrity: sha512-f+v8cInPEL1/SDP//CfSYzcDNgE4CY3xgDV81DWm3KAPWzhvxARrKxB1Pstf5mB56yAslJDxu7ryBUPX207EZA==} 1425 | engines: {node: '>=12'} 1426 | cpu: [mips64el] 1427 | os: [linux] 1428 | requiresBuild: true 1429 | optional: true 1430 | 1431 | /esbuild-linux-ppc64le/0.14.43: 1432 | resolution: {integrity: sha512-5wZYMDGAL/K2pqkdIsW+I4IR41kyfHr/QshJcNpUfK3RjB3VQcPWOaZmc+74rm4ZjVirYrtz+jWw0SgxtxRanA==} 1433 | engines: {node: '>=12'} 1434 | cpu: [ppc64] 1435 | os: [linux] 1436 | requiresBuild: true 1437 | optional: true 1438 | 1439 | /esbuild-linux-riscv64/0.14.43: 1440 | resolution: {integrity: sha512-lYcAOUxp85hC7lSjycJUVSmj4/9oEfSyXjb/ua9bNl8afonaduuqtw7hvKMoKuYnVwOCDw4RSfKpcnIRDWq+Bw==} 1441 | engines: {node: '>=12'} 1442 | cpu: [riscv64] 1443 | os: [linux] 1444 | requiresBuild: true 1445 | optional: true 1446 | 1447 | /esbuild-linux-s390x/0.14.43: 1448 | resolution: {integrity: sha512-27e43ZhHvhFE4nM7HqtUbMRu37I/4eNSUbb8FGZWszV+uLzMIsHDwLoBiJmw7G9N+hrehNPeQ4F5Ujad0DrUKQ==} 1449 | engines: {node: '>=12'} 1450 | cpu: [s390x] 1451 | os: [linux] 1452 | requiresBuild: true 1453 | optional: true 1454 | 1455 | /esbuild-netbsd-64/0.14.43: 1456 | resolution: {integrity: sha512-2mH4QF6hHBn5zzAfxEI/2eBC0mspVsZ6UVo821LpAJKMvLJPBk3XJO5xwg7paDqSqpl7p6IRrAenW999AEfJhQ==} 1457 | engines: {node: '>=12'} 1458 | cpu: [x64] 1459 | os: [netbsd] 1460 | requiresBuild: true 1461 | optional: true 1462 | 1463 | /esbuild-openbsd-64/0.14.43: 1464 | resolution: {integrity: sha512-ZhQpiZjvqCqO8jKdGp9+8k9E/EHSA+zIWOg+grwZasI9RoblqJ1QiZqqi7jfd6ZrrG1UFBNGe4m0NFxCFbMVbg==} 1465 | engines: {node: '>=12'} 1466 | cpu: [x64] 1467 | os: [openbsd] 1468 | requiresBuild: true 1469 | optional: true 1470 | 1471 | /esbuild-sunos-64/0.14.43: 1472 | resolution: {integrity: sha512-DgxSi9DaHReL9gYuul2rrQCAapgnCJkh3LSHPKsY26zytYppG0HgkgVF80zjIlvEsUbGBP/GHQzBtrezj/Zq1Q==} 1473 | engines: {node: '>=12'} 1474 | cpu: [x64] 1475 | os: [sunos] 1476 | requiresBuild: true 1477 | optional: true 1478 | 1479 | /esbuild-windows-32/0.14.43: 1480 | resolution: {integrity: sha512-Ih3+2O5oExiqm0mY6YYE5dR0o8+AspccQ3vIAtRodwFvhuyGLjb0Hbmzun/F3Lw19nuhPMu3sW2fqIJ5xBxByw==} 1481 | engines: {node: '>=12'} 1482 | cpu: [ia32] 1483 | os: [win32] 1484 | requiresBuild: true 1485 | optional: true 1486 | 1487 | /esbuild-windows-64/0.14.43: 1488 | resolution: {integrity: sha512-8NsuNfI8xwFuJbrCuI+aBqNTYkrWErejFO5aYM+yHqyHuL8mmepLS9EPzAzk8rvfaJrhN0+RvKWAcymViHOKEw==} 1489 | engines: {node: '>=12'} 1490 | cpu: [x64] 1491 | os: [win32] 1492 | requiresBuild: true 1493 | optional: true 1494 | 1495 | /esbuild-windows-arm64/0.14.43: 1496 | resolution: {integrity: sha512-7ZlD7bo++kVRblJEoG+cepljkfP8bfuTPz5fIXzptwnPaFwGS6ahvfoYzY7WCf5v/1nX2X02HDraVItTgbHnKw==} 1497 | engines: {node: '>=12'} 1498 | cpu: [arm64] 1499 | os: [win32] 1500 | requiresBuild: true 1501 | optional: true 1502 | 1503 | /esbuild/0.14.43: 1504 | resolution: {integrity: sha512-Uf94+kQmy/5jsFwKWiQB4hfo/RkM9Dh7b79p8yqd1tshULdr25G2szLz631NoH3s2ujnKEKVD16RmOxvCNKRFA==} 1505 | engines: {node: '>=12'} 1506 | hasBin: true 1507 | requiresBuild: true 1508 | optionalDependencies: 1509 | esbuild-android-64: 0.14.43 1510 | esbuild-android-arm64: 0.14.43 1511 | esbuild-darwin-64: 0.14.43 1512 | esbuild-darwin-arm64: 0.14.43 1513 | esbuild-freebsd-64: 0.14.43 1514 | esbuild-freebsd-arm64: 0.14.43 1515 | esbuild-linux-32: 0.14.43 1516 | esbuild-linux-64: 0.14.43 1517 | esbuild-linux-arm: 0.14.43 1518 | esbuild-linux-arm64: 0.14.43 1519 | esbuild-linux-mips64le: 0.14.43 1520 | esbuild-linux-ppc64le: 0.14.43 1521 | esbuild-linux-riscv64: 0.14.43 1522 | esbuild-linux-s390x: 0.14.43 1523 | esbuild-netbsd-64: 0.14.43 1524 | esbuild-openbsd-64: 0.14.43 1525 | esbuild-sunos-64: 0.14.43 1526 | esbuild-windows-32: 0.14.43 1527 | esbuild-windows-64: 0.14.43 1528 | esbuild-windows-arm64: 0.14.43 1529 | 1530 | /escalade/3.1.1: 1531 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1532 | engines: {node: '>=6'} 1533 | 1534 | /escape-html/1.0.3: 1535 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 1536 | 1537 | /esprima/4.0.1: 1538 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1539 | engines: {node: '>=4'} 1540 | hasBin: true 1541 | 1542 | /estree-walker/2.0.2: 1543 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1544 | 1545 | /execa/5.1.1: 1546 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1547 | engines: {node: '>=10'} 1548 | dependencies: 1549 | cross-spawn: 7.0.3 1550 | get-stream: 6.0.1 1551 | human-signals: 2.1.0 1552 | is-stream: 2.0.1 1553 | merge-stream: 2.0.0 1554 | npm-run-path: 4.0.1 1555 | onetime: 5.1.2 1556 | signal-exit: 3.0.7 1557 | strip-final-newline: 2.0.0 1558 | 1559 | /extend-shallow/2.0.1: 1560 | resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} 1561 | engines: {node: '>=0.10.0'} 1562 | dependencies: 1563 | is-extendable: 0.1.1 1564 | 1565 | /fast-glob/3.2.11: 1566 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} 1567 | engines: {node: '>=8.6.0'} 1568 | dependencies: 1569 | '@nodelib/fs.stat': 2.0.5 1570 | '@nodelib/fs.walk': 1.2.8 1571 | glob-parent: 5.1.2 1572 | merge2: 1.4.1 1573 | micromatch: 4.0.5 1574 | 1575 | /fastq/1.13.0: 1576 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 1577 | dependencies: 1578 | reusify: 1.0.4 1579 | 1580 | /file-saver/2.0.5: 1581 | resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} 1582 | 1583 | /fill-range/7.0.1: 1584 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1585 | engines: {node: '>=8'} 1586 | dependencies: 1587 | to-regex-range: 5.0.1 1588 | 1589 | /finalhandler/1.1.2: 1590 | resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} 1591 | engines: {node: '>= 0.8'} 1592 | dependencies: 1593 | debug: 2.6.9 1594 | encodeurl: 1.0.2 1595 | escape-html: 1.0.3 1596 | on-finished: 2.3.0 1597 | parseurl: 1.3.3 1598 | statuses: 1.5.0 1599 | unpipe: 1.0.0 1600 | transitivePeerDependencies: 1601 | - supports-color 1602 | 1603 | /find-up/5.0.0: 1604 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1605 | engines: {node: '>=10'} 1606 | dependencies: 1607 | locate-path: 6.0.0 1608 | path-exists: 4.0.0 1609 | 1610 | /follow-redirects/1.15.1_debug@4.3.4: 1611 | resolution: {integrity: sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==} 1612 | engines: {node: '>=4.0'} 1613 | peerDependencies: 1614 | debug: '*' 1615 | peerDependenciesMeta: 1616 | debug: 1617 | optional: true 1618 | dependencies: 1619 | debug: 4.3.4 1620 | 1621 | /framesync/6.0.1: 1622 | resolution: {integrity: sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==} 1623 | dependencies: 1624 | tslib: 2.4.0 1625 | 1626 | /framesync/6.1.0: 1627 | resolution: {integrity: sha512-aBX+hdWAvwiJYeQlFLY2533VxeL6OEu71CAgV4GGKksrj6+dE6i7K86WSSiRBEARCoJn5bFqffhg4l07eA27tg==} 1628 | dependencies: 1629 | tslib: 2.4.0 1630 | 1631 | /fs-extra/10.1.0: 1632 | resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} 1633 | engines: {node: '>=12'} 1634 | dependencies: 1635 | graceful-fs: 4.2.10 1636 | jsonfile: 6.1.0 1637 | universalify: 2.0.0 1638 | 1639 | /fs-extra/9.1.0: 1640 | resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} 1641 | engines: {node: '>=10'} 1642 | dependencies: 1643 | at-least-node: 1.0.0 1644 | graceful-fs: 4.2.10 1645 | jsonfile: 6.1.0 1646 | universalify: 2.0.0 1647 | 1648 | /fs.realpath/1.0.0: 1649 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1650 | dev: true 1651 | 1652 | /fsevents/2.3.2: 1653 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1654 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1655 | os: [darwin] 1656 | requiresBuild: true 1657 | optional: true 1658 | 1659 | /function-bind/1.1.1: 1660 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1661 | 1662 | /get-caller-file/2.0.5: 1663 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1664 | engines: {node: 6.* || 8.* || >= 10.*} 1665 | 1666 | /get-stream/6.0.1: 1667 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1668 | engines: {node: '>=10'} 1669 | 1670 | /glob-parent/5.1.2: 1671 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1672 | engines: {node: '>= 6'} 1673 | dependencies: 1674 | is-glob: 4.0.3 1675 | 1676 | /glob/7.2.0: 1677 | resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} 1678 | dependencies: 1679 | fs.realpath: 1.0.0 1680 | inflight: 1.0.6 1681 | inherits: 2.0.4 1682 | minimatch: 3.1.2 1683 | once: 1.4.0 1684 | path-is-absolute: 1.0.1 1685 | dev: true 1686 | 1687 | /global-dirs/0.1.1: 1688 | resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} 1689 | engines: {node: '>=4'} 1690 | dependencies: 1691 | ini: 1.3.8 1692 | 1693 | /global-dirs/3.0.0: 1694 | resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} 1695 | engines: {node: '>=10'} 1696 | dependencies: 1697 | ini: 2.0.0 1698 | 1699 | /graceful-fs/4.2.10: 1700 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 1701 | 1702 | /graphlib/2.1.8: 1703 | resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} 1704 | dependencies: 1705 | lodash: 4.17.21 1706 | 1707 | /gray-matter/4.0.3: 1708 | resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} 1709 | engines: {node: '>=6.0'} 1710 | dependencies: 1711 | js-yaml: 3.14.1 1712 | kind-of: 6.0.3 1713 | section-matter: 1.0.0 1714 | strip-bom-string: 1.0.0 1715 | 1716 | /has-flag/4.0.0: 1717 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1718 | engines: {node: '>=8'} 1719 | dev: false 1720 | 1721 | /has/1.0.3: 1722 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1723 | engines: {node: '>= 0.4.0'} 1724 | dependencies: 1725 | function-bind: 1.1.1 1726 | 1727 | /hey-listen/1.0.8: 1728 | resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} 1729 | 1730 | /human-signals/2.1.0: 1731 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1732 | engines: {node: '>=10.17.0'} 1733 | 1734 | /iconv-lite/0.4.24: 1735 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 1736 | engines: {node: '>=0.10.0'} 1737 | dependencies: 1738 | safer-buffer: 2.1.2 1739 | 1740 | /iconv-lite/0.6.3: 1741 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1742 | engines: {node: '>=0.10.0'} 1743 | dependencies: 1744 | safer-buffer: 2.1.2 1745 | 1746 | /import-from/4.0.0: 1747 | resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} 1748 | engines: {node: '>=12.2'} 1749 | 1750 | /inflight/1.0.6: 1751 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1752 | dependencies: 1753 | once: 1.4.0 1754 | wrappy: 1.0.2 1755 | dev: true 1756 | 1757 | /inherits/2.0.4: 1758 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1759 | dev: true 1760 | 1761 | /ini/1.3.8: 1762 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 1763 | 1764 | /ini/2.0.0: 1765 | resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} 1766 | engines: {node: '>=10'} 1767 | 1768 | /internmap/2.0.3: 1769 | resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} 1770 | engines: {node: '>=12'} 1771 | 1772 | /is-binary-path/2.1.0: 1773 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1774 | engines: {node: '>=8'} 1775 | dependencies: 1776 | binary-extensions: 2.2.0 1777 | 1778 | /is-core-module/2.9.0: 1779 | resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} 1780 | dependencies: 1781 | has: 1.0.3 1782 | 1783 | /is-docker/2.2.1: 1784 | resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} 1785 | engines: {node: '>=8'} 1786 | hasBin: true 1787 | 1788 | /is-extendable/0.1.1: 1789 | resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} 1790 | engines: {node: '>=0.10.0'} 1791 | 1792 | /is-extglob/2.1.1: 1793 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1794 | engines: {node: '>=0.10.0'} 1795 | 1796 | /is-fullwidth-code-point/3.0.0: 1797 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1798 | engines: {node: '>=8'} 1799 | 1800 | /is-glob/4.0.3: 1801 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1802 | engines: {node: '>=0.10.0'} 1803 | dependencies: 1804 | is-extglob: 2.1.1 1805 | 1806 | /is-installed-globally/0.4.0: 1807 | resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} 1808 | engines: {node: '>=10'} 1809 | dependencies: 1810 | global-dirs: 3.0.0 1811 | is-path-inside: 3.0.3 1812 | 1813 | /is-number/7.0.0: 1814 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1815 | engines: {node: '>=0.12.0'} 1816 | 1817 | /is-path-inside/3.0.3: 1818 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1819 | engines: {node: '>=8'} 1820 | 1821 | /is-stream/2.0.1: 1822 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1823 | engines: {node: '>=8'} 1824 | 1825 | /is-wsl/2.2.0: 1826 | resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} 1827 | engines: {node: '>=8'} 1828 | dependencies: 1829 | is-docker: 2.2.1 1830 | 1831 | /isexe/2.0.0: 1832 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1833 | 1834 | /jiti/1.13.0: 1835 | resolution: {integrity: sha512-/n9mNxZj/HDSrincJ6RP+L+yXbpnB8FybySBa+IjIaoH9FIxBbrbRT5XUbe8R7zuVM2AQqNMNDDqz0bzx3znOQ==} 1836 | hasBin: true 1837 | 1838 | /js-base64/3.7.2: 1839 | resolution: {integrity: sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==} 1840 | 1841 | /js-yaml/3.14.1: 1842 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1843 | hasBin: true 1844 | dependencies: 1845 | argparse: 1.0.10 1846 | esprima: 4.0.1 1847 | 1848 | /js-yaml/4.1.0: 1849 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1850 | hasBin: true 1851 | dependencies: 1852 | argparse: 2.0.1 1853 | 1854 | /jsonc-parser/3.0.0: 1855 | resolution: {integrity: sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==} 1856 | 1857 | /jsonfile/6.1.0: 1858 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 1859 | dependencies: 1860 | universalify: 2.0.0 1861 | optionalDependencies: 1862 | graceful-fs: 4.2.10 1863 | 1864 | /katex/0.15.6: 1865 | resolution: {integrity: sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA==} 1866 | hasBin: true 1867 | dependencies: 1868 | commander: 8.3.0 1869 | 1870 | /katex/0.6.0: 1871 | resolution: {integrity: sha512-rS4mY3SvHYg5LtQV6RBcK0if7ur6plyEukAOV+jGGPqFImuzu8fHL6M752iBmRGoUyF0bhZbAPoezehn7xYksA==} 1872 | hasBin: true 1873 | dependencies: 1874 | match-at: 0.1.1 1875 | dev: false 1876 | 1877 | /khroma/2.0.0: 1878 | resolution: {integrity: sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==} 1879 | 1880 | /kind-of/6.0.3: 1881 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 1882 | engines: {node: '>=0.10.0'} 1883 | 1884 | /kleur/3.0.3: 1885 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 1886 | engines: {node: '>=6'} 1887 | 1888 | /kolorist/1.5.1: 1889 | resolution: {integrity: sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==} 1890 | 1891 | /light-icons/1.0.10: 1892 | resolution: {integrity: sha512-EBB6iexm7JEceMxP1C1FjKaezzxkZFdRNP/J/TEl/kLPNjhTbvsVkGJkWgBdX3Cpzw0KThlfml4RJi2Mybr+mA==} 1893 | dev: false 1894 | 1895 | /linkify-it/3.0.3: 1896 | resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==} 1897 | dependencies: 1898 | uc.micro: 1.0.6 1899 | dev: false 1900 | 1901 | /linkify-it/4.0.1: 1902 | resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} 1903 | dependencies: 1904 | uc.micro: 1.0.6 1905 | 1906 | /local-pkg/0.4.1: 1907 | resolution: {integrity: sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==} 1908 | engines: {node: '>=14'} 1909 | 1910 | /locate-path/6.0.0: 1911 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1912 | engines: {node: '>=10'} 1913 | dependencies: 1914 | p-locate: 5.0.0 1915 | 1916 | /lodash/4.17.21: 1917 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1918 | 1919 | /magic-string/0.25.9: 1920 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 1921 | dependencies: 1922 | sourcemap-codec: 1.4.8 1923 | 1924 | /magic-string/0.26.2: 1925 | resolution: {integrity: sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==} 1926 | engines: {node: '>=12'} 1927 | dependencies: 1928 | sourcemap-codec: 1.4.8 1929 | 1930 | /markdown-it-footnote/3.0.3: 1931 | resolution: {integrity: sha512-YZMSuCGVZAjzKMn+xqIco9d1cLGxbELHZ9do/TSYVzraooV8ypsppKNmUJ0fVH5ljkCInQAtFpm8Rb3eXSrt5w==} 1932 | 1933 | /markdown-it-katex/2.0.3: 1934 | resolution: {integrity: sha512-nUkkMtRWeg7OpdflamflE/Ho/pWl64Lk9wNBKOmaj33XkQdumhXAIYhI0WO03GeiycPCsxbmX536V5NEXpC3Ng==} 1935 | dependencies: 1936 | katex: 0.6.0 1937 | dev: false 1938 | 1939 | /markdown-it-link-attributes/3.0.0: 1940 | resolution: {integrity: sha512-B34ySxVeo6MuEGSPCWyIYryuXINOvngNZL87Mp7YYfKIf6DcD837+lXA8mo6EBbauKsnGz22ZH0zsbOiQRWTNg==} 1941 | dev: false 1942 | 1943 | /markdown-it-link-attributes/4.0.0: 1944 | resolution: {integrity: sha512-ssjxSLlLfQBkX6BvAx1rCPrx7ZoK91llQQvS3P7KXvlbnVD34OUkfXwWecN7su/7mrI/HOW0RI5szdJOIqYC3w==} 1945 | 1946 | /markdown-it/12.3.2: 1947 | resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==} 1948 | hasBin: true 1949 | dependencies: 1950 | argparse: 2.0.1 1951 | entities: 2.1.0 1952 | linkify-it: 3.0.3 1953 | mdurl: 1.0.1 1954 | uc.micro: 1.0.6 1955 | dev: false 1956 | 1957 | /markdown-it/13.0.1: 1958 | resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} 1959 | hasBin: true 1960 | dependencies: 1961 | argparse: 2.0.1 1962 | entities: 3.0.1 1963 | linkify-it: 4.0.1 1964 | mdurl: 1.0.1 1965 | uc.micro: 1.0.6 1966 | 1967 | /match-at/0.1.1: 1968 | resolution: {integrity: sha512-h4Yd392z9mST+dzc+yjuybOGFNOZjmXIPKWjxBd1Bb23r4SmDOsk2NYCU2BMUBGbSpZqwVsZYNq26QS3xfaT3Q==} 1969 | dev: false 1970 | 1971 | /mdurl/1.0.1: 1972 | resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} 1973 | 1974 | /merge-stream/2.0.0: 1975 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1976 | 1977 | /merge2/1.4.1: 1978 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1979 | engines: {node: '>= 8'} 1980 | 1981 | /mermaid/9.1.2: 1982 | resolution: {integrity: sha512-RVf3hBKqiMfyORHboCaEjOAK1TomLO50hYRPvlTrZCXlCniM5pRpe8UlkHBjjpaLtioZnbdYv/vEVj7iKnwkJQ==} 1983 | dependencies: 1984 | '@braintree/sanitize-url': 6.0.0 1985 | d3: 7.4.4 1986 | dagre: 0.8.5 1987 | dagre-d3: 0.6.4 1988 | dompurify: 2.3.8 1989 | graphlib: 2.1.8 1990 | khroma: 2.0.0 1991 | moment-mini: 2.24.0 1992 | stylis: 4.1.1 1993 | 1994 | /micromatch/4.0.5: 1995 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1996 | engines: {node: '>=8.6'} 1997 | dependencies: 1998 | braces: 3.0.2 1999 | picomatch: 2.3.1 2000 | 2001 | /mimic-fn/2.1.0: 2002 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 2003 | engines: {node: '>=6'} 2004 | 2005 | /minimatch/3.1.2: 2006 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2007 | dependencies: 2008 | brace-expansion: 1.1.11 2009 | 2010 | /minimatch/5.1.0: 2011 | resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} 2012 | engines: {node: '>=10'} 2013 | dependencies: 2014 | brace-expansion: 2.0.1 2015 | 2016 | /moment-mini/2.24.0: 2017 | resolution: {integrity: sha512-9ARkWHBs+6YJIvrIp0Ik5tyTTtP9PoV0Ssu2Ocq5y9v8+NOOpWiRshAp8c4rZVWTOe+157on/5G+zj5pwIQFEQ==} 2018 | 2019 | /monaco-editor/0.23.0: 2020 | resolution: {integrity: sha512-q+CP5zMR/aFiMTE9QlIavGyGicKnG2v/H8qVvybLzeFsARM8f6G9fL0sMST2tyVYCwDKkGamZUI6647A0jR/Lg==} 2021 | dev: false 2022 | 2023 | /monaco-editor/0.33.0: 2024 | resolution: {integrity: sha512-VcRWPSLIUEgQJQIE0pVT8FcGBIgFoxz7jtqctE+IiCxWugD0DwgyQBcZBhdSrdMC84eumoqMZsGl2GTreOzwqw==} 2025 | 2026 | /mrmime/1.0.1: 2027 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} 2028 | engines: {node: '>=10'} 2029 | dev: false 2030 | 2031 | /ms/2.0.0: 2032 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 2033 | 2034 | /ms/2.1.2: 2035 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2036 | 2037 | /nanoid/3.3.4: 2038 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 2039 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2040 | hasBin: true 2041 | 2042 | /normalize-path/3.0.0: 2043 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2044 | engines: {node: '>=0.10.0'} 2045 | 2046 | /npm-run-path/4.0.1: 2047 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 2048 | engines: {node: '>=8'} 2049 | dependencies: 2050 | path-key: 3.1.1 2051 | 2052 | /on-finished/2.3.0: 2053 | resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} 2054 | engines: {node: '>= 0.8'} 2055 | dependencies: 2056 | ee-first: 1.1.1 2057 | 2058 | /once/1.4.0: 2059 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2060 | dependencies: 2061 | wrappy: 1.0.2 2062 | dev: true 2063 | 2064 | /onetime/5.1.2: 2065 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 2066 | engines: {node: '>=6'} 2067 | dependencies: 2068 | mimic-fn: 2.1.0 2069 | 2070 | /open/8.4.0: 2071 | resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} 2072 | engines: {node: '>=12'} 2073 | dependencies: 2074 | define-lazy-prop: 2.0.0 2075 | is-docker: 2.2.1 2076 | is-wsl: 2.2.0 2077 | 2078 | /p-limit/3.1.0: 2079 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2080 | engines: {node: '>=10'} 2081 | dependencies: 2082 | yocto-queue: 0.1.0 2083 | 2084 | /p-locate/5.0.0: 2085 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2086 | engines: {node: '>=10'} 2087 | dependencies: 2088 | p-limit: 3.1.0 2089 | 2090 | /pako/1.0.11: 2091 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} 2092 | dev: false 2093 | 2094 | /parseurl/1.3.3: 2095 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 2096 | engines: {node: '>= 0.8'} 2097 | 2098 | /path-exists/4.0.0: 2099 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2100 | engines: {node: '>=8'} 2101 | 2102 | /path-is-absolute/1.0.1: 2103 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2104 | engines: {node: '>=0.10.0'} 2105 | dev: true 2106 | 2107 | /path-key/3.1.1: 2108 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2109 | engines: {node: '>=8'} 2110 | 2111 | /path-parse/1.0.7: 2112 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2113 | 2114 | /pathe/0.2.0: 2115 | resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} 2116 | dev: true 2117 | 2118 | /pdf-lib/1.17.1: 2119 | resolution: {integrity: sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==} 2120 | dependencies: 2121 | '@pdf-lib/standard-fonts': 1.0.0 2122 | '@pdf-lib/upng': 1.0.1 2123 | pako: 1.0.11 2124 | tslib: 1.14.1 2125 | dev: false 2126 | 2127 | /perfect-freehand/1.1.0: 2128 | resolution: {integrity: sha512-nVWukMN9qlii1dQsQHVvfaNpeOAWVLgTZP6e/tFcU6cWlLo+6YdvfRGBL2u5pU11APlPbHeB0SpMcGA8ZjPgcQ==} 2129 | 2130 | /picocolors/1.0.0: 2131 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2132 | 2133 | /picomatch/2.3.1: 2134 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2135 | engines: {node: '>=8.6'} 2136 | 2137 | /plantuml-encoder/1.4.0: 2138 | resolution: {integrity: sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==} 2139 | 2140 | /playwright-chromium/1.22.2: 2141 | resolution: {integrity: sha512-msRcdCIJkdM2R6S+NMJZ02uyZHzJ7TIzkjzs3usDJ1Pwacp9HMhv9T/S4AxtpFXFmvMZq7UJYb0x+tCdHx9+0w==} 2142 | engines: {node: '>=14'} 2143 | hasBin: true 2144 | requiresBuild: true 2145 | dependencies: 2146 | playwright-core: 1.22.2 2147 | dev: true 2148 | 2149 | /playwright-core/1.22.2: 2150 | resolution: {integrity: sha512-w/hc/Ld0RM4pmsNeE6aL/fPNWw8BWit2tg+TfqJ3+p59c6s3B6C8mXvXrIPmfQEobkcFDc+4KirNzOQ+uBSP1Q==} 2151 | engines: {node: '>=14'} 2152 | hasBin: true 2153 | dev: true 2154 | 2155 | /pnpm/7.2.1: 2156 | resolution: {integrity: sha512-Z2Wg7YHxeit2U+0aSj+doBPF9+ER0e3VLOGuJOQbk8rzIxK6zMtrQ0ICieCUGPWRM0Vbwj8yIcTKzO22Yhs/Cg==} 2157 | engines: {node: '>=14.6'} 2158 | hasBin: true 2159 | dev: true 2160 | 2161 | /popmotion/11.0.3: 2162 | resolution: {integrity: sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==} 2163 | dependencies: 2164 | framesync: 6.0.1 2165 | hey-listen: 1.0.8 2166 | style-value-types: 5.0.0 2167 | tslib: 2.4.0 2168 | 2169 | /postcss/8.4.14: 2170 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} 2171 | engines: {node: ^10 || ^12 || >=14} 2172 | dependencies: 2173 | nanoid: 3.3.4 2174 | picocolors: 1.0.0 2175 | source-map-js: 1.0.2 2176 | 2177 | /prettier/2.7.0: 2178 | resolution: {integrity: sha512-nwoX4GMFgxoPC6diHvSwmK/4yU8FFH3V8XWtLQrbj4IBsK2pkYhG4kf/ljF/haaZ/aii+wNJqISrCDPgxGWDVQ==} 2179 | engines: {node: '>=10.13.0'} 2180 | hasBin: true 2181 | 2182 | /prism-theme-vars/0.2.2: 2183 | resolution: {integrity: sha512-EL9ifuU/F8tEldoCa2sspiiLWysCL54xDbf2gN/ubwdtbuJROqOGopG5kSwunapwaioT+jLUQ/Ky+7jnv62xJA==} 2184 | 2185 | /prismjs/1.28.0: 2186 | resolution: {integrity: sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==} 2187 | engines: {node: '>=6'} 2188 | 2189 | /prompts/2.4.2: 2190 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 2191 | engines: {node: '>= 6'} 2192 | dependencies: 2193 | kleur: 3.0.3 2194 | sisteransi: 1.0.5 2195 | 2196 | /queue-microtask/1.2.3: 2197 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2198 | 2199 | /readdirp/3.6.0: 2200 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2201 | engines: {node: '>=8.10.0'} 2202 | dependencies: 2203 | picomatch: 2.3.1 2204 | 2205 | /recordrtc/5.6.2: 2206 | resolution: {integrity: sha512-1QNKKNtl7+KcwD1lyOgP3ZlbiJ1d0HtXnypUy7yq49xEERxk31PHvE9RCciDrulPCY7WJ+oz0R9hpNxgsIurGQ==} 2207 | 2208 | /require-directory/2.1.1: 2209 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 2210 | engines: {node: '>=0.10.0'} 2211 | 2212 | /resolve-from/5.0.0: 2213 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2214 | engines: {node: '>=8'} 2215 | 2216 | /resolve-global/1.0.0: 2217 | resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} 2218 | engines: {node: '>=8'} 2219 | dependencies: 2220 | global-dirs: 0.1.1 2221 | 2222 | /resolve/1.22.0: 2223 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} 2224 | hasBin: true 2225 | dependencies: 2226 | is-core-module: 2.9.0 2227 | path-parse: 1.0.7 2228 | supports-preserve-symlinks-flag: 1.0.0 2229 | 2230 | /reusify/1.0.4: 2231 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2232 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2233 | 2234 | /rimraf/3.0.2: 2235 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2236 | hasBin: true 2237 | dependencies: 2238 | glob: 7.2.0 2239 | dev: true 2240 | 2241 | /robust-predicates/3.0.1: 2242 | resolution: {integrity: sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==} 2243 | 2244 | /rollup/2.75.6: 2245 | resolution: {integrity: sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==} 2246 | engines: {node: '>=10.0.0'} 2247 | hasBin: true 2248 | optionalDependencies: 2249 | fsevents: 2.3.2 2250 | 2251 | /run-parallel/1.2.0: 2252 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2253 | dependencies: 2254 | queue-microtask: 1.2.3 2255 | 2256 | /rw/1.3.3: 2257 | resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} 2258 | 2259 | /safer-buffer/2.1.2: 2260 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 2261 | 2262 | /section-matter/1.0.0: 2263 | resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} 2264 | engines: {node: '>=4'} 2265 | dependencies: 2266 | extend-shallow: 2.0.1 2267 | kind-of: 6.0.3 2268 | 2269 | /shebang-command/2.0.0: 2270 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2271 | engines: {node: '>=8'} 2272 | dependencies: 2273 | shebang-regex: 3.0.0 2274 | 2275 | /shebang-regex/3.0.0: 2276 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2277 | engines: {node: '>=8'} 2278 | 2279 | /shiki/0.10.1: 2280 | resolution: {integrity: sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==} 2281 | dependencies: 2282 | jsonc-parser: 3.0.0 2283 | vscode-oniguruma: 1.6.2 2284 | vscode-textmate: 5.2.0 2285 | 2286 | /shiki/0.9.15: 2287 | resolution: {integrity: sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==} 2288 | dependencies: 2289 | jsonc-parser: 3.0.0 2290 | vscode-oniguruma: 1.6.2 2291 | vscode-textmate: 5.2.0 2292 | dev: false 2293 | 2294 | /signal-exit/3.0.7: 2295 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2296 | 2297 | /sirv/1.0.19: 2298 | resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} 2299 | engines: {node: '>= 10'} 2300 | dependencies: 2301 | '@polka/url': 1.0.0-next.21 2302 | mrmime: 1.0.1 2303 | totalist: 1.1.0 2304 | dev: false 2305 | 2306 | /sisteransi/1.0.5: 2307 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 2308 | 2309 | /slidev-theme-light-icons/1.0.2: 2310 | resolution: {integrity: sha512-rcXi/ugBjVVqL9gMDZGjQuxnVXGLMcrpRsM4MHeccAa0KXldheBq4s5VfiuzpUFxBz938dJGfTyAt0HVr0ViBg==} 2311 | engines: {node: '>=14.0.0'} 2312 | dependencies: 2313 | '@slidev/cli': 0.7.4 2314 | '@slidev/theme-default': 0.7.9 2315 | light-icons: 1.0.10 2316 | transitivePeerDependencies: 2317 | - '@slidev/client' 2318 | - '@vue/composition-api' 2319 | - less 2320 | - playwright-chromium 2321 | - sass 2322 | - shiki 2323 | - stylus 2324 | - supports-color 2325 | - vue-template-compiler 2326 | dev: false 2327 | 2328 | /source-map-js/1.0.2: 2329 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2330 | engines: {node: '>=0.10.0'} 2331 | 2332 | /source-map/0.6.1: 2333 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2334 | engines: {node: '>=0.10.0'} 2335 | 2336 | /sourcemap-codec/1.4.8: 2337 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 2338 | 2339 | /sprintf-js/1.0.3: 2340 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 2341 | 2342 | /statuses/1.5.0: 2343 | resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} 2344 | engines: {node: '>= 0.6'} 2345 | 2346 | /string-width/4.2.3: 2347 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2348 | engines: {node: '>=8'} 2349 | dependencies: 2350 | emoji-regex: 8.0.0 2351 | is-fullwidth-code-point: 3.0.0 2352 | strip-ansi: 6.0.1 2353 | 2354 | /strip-ansi/6.0.1: 2355 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2356 | engines: {node: '>=8'} 2357 | dependencies: 2358 | ansi-regex: 5.0.1 2359 | 2360 | /strip-bom-string/1.0.0: 2361 | resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} 2362 | engines: {node: '>=0.10.0'} 2363 | 2364 | /strip-final-newline/2.0.0: 2365 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 2366 | engines: {node: '>=6'} 2367 | 2368 | /style-value-types/5.0.0: 2369 | resolution: {integrity: sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==} 2370 | dependencies: 2371 | hey-listen: 1.0.8 2372 | tslib: 2.4.0 2373 | 2374 | /style-value-types/5.1.0: 2375 | resolution: {integrity: sha512-DRIfBtjxQ4ztBZpexkFcI+UR7pODC5qLMf2Syt+bH98PAHHRH2tQnzxBuDQlqcAoYar6GzWnj8iAfqfwnEzCiQ==} 2376 | dependencies: 2377 | hey-listen: 1.0.8 2378 | tslib: 2.4.0 2379 | 2380 | /stylis/4.1.1: 2381 | resolution: {integrity: sha512-lVrM/bNdhVX2OgBFNa2YJ9Lxj7kPzylieHd3TNjuGE0Re9JB7joL5VUKOVH1kdNNJTgGPpT8hmwIAPLaSyEVFQ==} 2382 | 2383 | /supports-color/7.2.0: 2384 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2385 | engines: {node: '>=8'} 2386 | dependencies: 2387 | has-flag: 4.0.0 2388 | dev: false 2389 | 2390 | /supports-preserve-symlinks-flag/1.0.0: 2391 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2392 | engines: {node: '>= 0.4'} 2393 | 2394 | /theme-vitesse/0.1.14: 2395 | resolution: {integrity: sha512-b5s+Zpfaw5+djoCJ9AEbcTbpiTlLsOvGM9oblDmmWRGWNqg9oXtEYO/uwubwx77novHBI6zNuwZRHKNlAIBo4A==} 2396 | engines: {vscode: ^1.43.0} 2397 | 2398 | /to-fast-properties/2.0.0: 2399 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2400 | engines: {node: '>=4'} 2401 | 2402 | /to-regex-range/5.0.1: 2403 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2404 | engines: {node: '>=8.0'} 2405 | dependencies: 2406 | is-number: 7.0.0 2407 | 2408 | /totalist/1.1.0: 2409 | resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==} 2410 | engines: {node: '>=6'} 2411 | dev: false 2412 | 2413 | /tslib/1.14.1: 2414 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2415 | dev: false 2416 | 2417 | /tslib/2.4.0: 2418 | resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} 2419 | 2420 | /uc.micro/1.0.6: 2421 | resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} 2422 | 2423 | /ufo/0.7.11: 2424 | resolution: {integrity: sha512-IT3q0lPvtkqQ8toHQN/BkOi4VIqoqheqM1FnkNWT9y0G8B3xJhwnoKBu5OHx8zHDOvveQzfKuFowJ0VSARiIDg==} 2425 | 2426 | /universalify/2.0.0: 2427 | resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} 2428 | engines: {node: '>= 10.0.0'} 2429 | 2430 | /unpipe/1.0.0: 2431 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 2432 | engines: {node: '>= 0.8'} 2433 | 2434 | /unplugin-icons/0.14.3_zzjg27s3eqfbklnrwy6rdd2pii: 2435 | resolution: {integrity: sha512-PyyNMACpZ/EAiG3B6K1wPGZ151VGdlHIEx8/utgP546yVmPpV/xC1k1V2eEebf71fGm3WD6gzPrERNsbMgIVgg==} 2436 | peerDependencies: 2437 | '@svgr/core': '>=5.5.0' 2438 | '@vue/compiler-sfc': ^3.0.2 2439 | vue-template-compiler: ^2.6.12 2440 | vue-template-es2015-compiler: ^1.9.0 2441 | peerDependenciesMeta: 2442 | '@svgr/core': 2443 | optional: true 2444 | '@vue/compiler-sfc': 2445 | optional: true 2446 | vue-template-compiler: 2447 | optional: true 2448 | vue-template-es2015-compiler: 2449 | optional: true 2450 | dependencies: 2451 | '@antfu/install-pkg': 0.1.0 2452 | '@antfu/utils': 0.5.2 2453 | '@iconify/utils': 1.0.32 2454 | '@vue/compiler-sfc': 3.2.37 2455 | debug: 4.3.4 2456 | kolorist: 1.5.1 2457 | local-pkg: 0.4.1 2458 | unplugin: 0.6.3_vite@2.9.12 2459 | transitivePeerDependencies: 2460 | - esbuild 2461 | - rollup 2462 | - supports-color 2463 | - vite 2464 | - webpack 2465 | 2466 | /unplugin-vue-components/0.19.6_vite@2.9.12+vue@3.2.37: 2467 | resolution: {integrity: sha512-APvrJ9Hpid1MLT0G4PWerMJgARhNw6dzz0pcCwCxaO2DR7VyvDacMqjOQNC6ukq7FSw3wzD8VH+9i3EFXwkGmw==} 2468 | engines: {node: '>=14'} 2469 | peerDependencies: 2470 | '@babel/parser': ^7.15.8 2471 | '@babel/traverse': ^7.15.4 2472 | vue: 2 || 3 2473 | peerDependenciesMeta: 2474 | '@babel/parser': 2475 | optional: true 2476 | '@babel/traverse': 2477 | optional: true 2478 | dependencies: 2479 | '@antfu/utils': 0.5.2 2480 | '@rollup/pluginutils': 4.2.1 2481 | chokidar: 3.5.3 2482 | debug: 4.3.4 2483 | fast-glob: 3.2.11 2484 | local-pkg: 0.4.1 2485 | magic-string: 0.26.2 2486 | minimatch: 5.1.0 2487 | resolve: 1.22.0 2488 | unplugin: 0.6.3_vite@2.9.12 2489 | vue: 3.2.37 2490 | transitivePeerDependencies: 2491 | - esbuild 2492 | - rollup 2493 | - supports-color 2494 | - vite 2495 | - webpack 2496 | 2497 | /unplugin/0.6.3_vite@2.9.12: 2498 | resolution: {integrity: sha512-CoW88FQfCW/yabVc4bLrjikN9HC8dEvMU4O7B6K2jsYMPK0l6iAnd9dpJwqGcmXJKRCU9vwSsy653qg+RK0G6A==} 2499 | peerDependencies: 2500 | esbuild: '>=0.13' 2501 | rollup: ^2.50.0 2502 | vite: ^2.3.0 2503 | webpack: 4 || 5 2504 | peerDependenciesMeta: 2505 | esbuild: 2506 | optional: true 2507 | rollup: 2508 | optional: true 2509 | vite: 2510 | optional: true 2511 | webpack: 2512 | optional: true 2513 | dependencies: 2514 | chokidar: 3.5.3 2515 | vite: 2.9.12 2516 | webpack-sources: 3.2.3 2517 | webpack-virtual-modules: 0.4.3 2518 | 2519 | /utils-merge/1.0.1: 2520 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} 2521 | engines: {node: '>= 0.4.0'} 2522 | 2523 | /vite-plugin-components/0.8.4_vite@2.9.12: 2524 | resolution: {integrity: sha512-h6/FNBKBXc4TIcHxnFYxa4+aBGDZusqp/6Ra3LBvwolwFuX6k8qPsBbXkBP0I+UwOkyHw9iU2xJ4rdYBGyN+0Q==} 2525 | deprecated: renamed to `unplugin-vue-components`, see https://github.com/antfu/unplugin-vue-components/releases/tag/v0.14.0 2526 | peerDependencies: 2527 | vite: ^2.0.0-beta.69 2528 | dependencies: 2529 | chokidar: 3.5.3 2530 | debug: 4.3.4 2531 | fast-glob: 3.2.11 2532 | minimatch: 3.1.2 2533 | vite: 2.9.12 2534 | transitivePeerDependencies: 2535 | - supports-color 2536 | dev: false 2537 | 2538 | /vite-plugin-icons/0.5.1_rhrfcyn26yvunb2ux4b7slv7na: 2539 | resolution: {integrity: sha512-snEQYVnZ7NFEShFpki3vL9vj8k7M60PO6SXQTZgzIgrwlVsTsGzgsLw8B73v4DzEygPS7wuw3q6XqlZDVUMSiQ==} 2540 | deprecated: renamed to `unplugin-icons`, see https://github.com/antfu/unplugin-icons/releases/tag/v0.7.0 2541 | peerDependencies: 2542 | '@iconify/json': '*' 2543 | '@vue/compiler-sfc': ^3.0.2 2544 | vue-template-compiler: ^2.6.12 2545 | dependencies: 2546 | '@iconify/json': 1.1.461 2547 | '@iconify/json-tools': 1.0.10 2548 | '@vue/compiler-sfc': 3.2.37 2549 | vue-template-es2015-compiler: 1.9.1 2550 | dev: false 2551 | 2552 | /vite-plugin-md/0.13.1_vite@2.9.12: 2553 | resolution: {integrity: sha512-ZLXRuhQCFVCvxTE79CtSOj71TknT7Hube5SN3aU65k7FpsIQ8ftQhMn3PbdVjHUlQRR462IuPsTYbyXHyrOmOQ==} 2554 | peerDependencies: 2555 | vite: ^2.0.0 2556 | dependencies: 2557 | '@antfu/utils': 0.5.2 2558 | '@rollup/pluginutils': 4.2.1 2559 | '@types/markdown-it': 12.2.3 2560 | '@vue/runtime-core': 3.2.37 2561 | gray-matter: 4.0.3 2562 | markdown-it: 13.0.1 2563 | vite: 2.9.12 2564 | 2565 | /vite-plugin-md/0.6.7_vite@2.9.12: 2566 | resolution: {integrity: sha512-R9i61r1y6gfelJKtHiHkw6NOkucFzGRgy7VL7bqMufiSh1UNyYKZrpiQtagzavpBlJSVk34lfEyfyKpQyeuocQ==} 2567 | peerDependencies: 2568 | vite: ^2.0.0 2569 | dependencies: 2570 | gray-matter: 4.0.3 2571 | markdown-it: 12.3.2 2572 | vite: 2.9.12 2573 | dev: false 2574 | 2575 | /vite-plugin-remote-assets/0.2.2_vite@2.9.12: 2576 | resolution: {integrity: sha512-Hl2g1EGJW7jHjNKQ0hf96LJEbfmintfQLBIgKJkyFPyjO1NH3gNUheFgBoxi6G4/nbE9hHzpIIr30iwm1NxLlQ==} 2577 | peerDependencies: 2578 | vite: ^2.0.0 2579 | dependencies: 2580 | axios: 0.21.4_debug@4.3.4 2581 | debug: 4.3.4 2582 | fs-extra: 9.1.0 2583 | magic-string: 0.25.9 2584 | vite: 2.9.12 2585 | transitivePeerDependencies: 2586 | - supports-color 2587 | 2588 | /vite-plugin-vue-server-ref/0.2.4_vite@2.9.12+vue@3.2.37: 2589 | resolution: {integrity: sha512-+WAiq0fSfP+LbmTbx2BkDrL6sGWrb0sUGZPk+G3ZbbmowFNh3TY+f+AV1ofce0rKs4hvH3zBuXxEAkTf/wQqRA==} 2590 | peerDependencies: 2591 | vite: ^2.0.0 2592 | vue: ^3.0.0-0 2593 | dependencies: 2594 | debug: 4.3.4 2595 | ufo: 0.7.11 2596 | vite: 2.9.12 2597 | vue: 3.2.37 2598 | transitivePeerDependencies: 2599 | - supports-color 2600 | 2601 | /vite-plugin-windicss/0.16.7_vite@2.9.12: 2602 | resolution: {integrity: sha512-fNBLO2EBdQsJNU3IyehSmqPdrHc6Ve+hPYDaf5SrW8nGd9Wbd8ZVh6cX/1blRcjMw0qOjgcx7GM8pRWBjhzt3Q==} 2603 | peerDependencies: 2604 | vite: ^2.0.1 2605 | dependencies: 2606 | '@windicss/plugin-utils': 0.16.7 2607 | chalk: 4.1.2 2608 | debug: 4.3.4 2609 | vite: 2.9.12 2610 | windicss: 3.5.4 2611 | transitivePeerDependencies: 2612 | - supports-color 2613 | dev: false 2614 | 2615 | /vite-plugin-windicss/1.8.4_vite@2.9.12: 2616 | resolution: {integrity: sha512-LSZAO8BZn3x406GRbYX5t5ONXXJVdqiQtN1qrznLA/Dy5/NzZVhfcrL6N1qEYYO7HsCDT4pLAjTzObvDnM9Y8A==} 2617 | peerDependencies: 2618 | vite: ^2.0.1 2619 | dependencies: 2620 | '@windicss/plugin-utils': 1.8.4 2621 | debug: 4.3.4 2622 | kolorist: 1.5.1 2623 | vite: 2.9.12 2624 | windicss: 3.5.4 2625 | transitivePeerDependencies: 2626 | - supports-color 2627 | 2628 | /vite/2.9.12: 2629 | resolution: {integrity: sha512-suxC36dQo9Rq1qMB2qiRorNJtJAdxguu5TMvBHOc/F370KvqAe9t48vYp+/TbPKRNrMh/J55tOUmkuIqstZaew==} 2630 | engines: {node: '>=12.2.0'} 2631 | hasBin: true 2632 | peerDependencies: 2633 | less: '*' 2634 | sass: '*' 2635 | stylus: '*' 2636 | peerDependenciesMeta: 2637 | less: 2638 | optional: true 2639 | sass: 2640 | optional: true 2641 | stylus: 2642 | optional: true 2643 | dependencies: 2644 | esbuild: 0.14.43 2645 | postcss: 8.4.14 2646 | resolve: 1.22.0 2647 | rollup: 2.75.6 2648 | optionalDependencies: 2649 | fsevents: 2.3.2 2650 | 2651 | /vscode-oniguruma/1.6.2: 2652 | resolution: {integrity: sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==} 2653 | 2654 | /vscode-textmate/5.2.0: 2655 | resolution: {integrity: sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==} 2656 | 2657 | /vue-demi/0.13.1_vue@3.2.37: 2658 | resolution: {integrity: sha512-xmkJ56koG3ptpLnpgmIzk9/4nFf4CqduSJbUM0OdPoU87NwRuZ6x49OLhjSa/fC15fV+5CbEnrxU4oyE022svg==} 2659 | engines: {node: '>=12'} 2660 | hasBin: true 2661 | requiresBuild: true 2662 | peerDependencies: 2663 | '@vue/composition-api': ^1.0.0-rc.1 2664 | vue: ^3.0.0-0 || ^2.6.0 2665 | peerDependenciesMeta: 2666 | '@vue/composition-api': 2667 | optional: true 2668 | dependencies: 2669 | vue: 3.2.37 2670 | 2671 | /vue-router/4.0.16_vue@3.2.37: 2672 | resolution: {integrity: sha512-JcO7cb8QJLBWE+DfxGUL3xUDOae/8nhM1KVdnudadTAORbuxIC/xAydC5Zr/VLHUDQi1ppuTF5/rjBGzgzrJNA==} 2673 | peerDependencies: 2674 | vue: ^3.2.0 2675 | dependencies: 2676 | '@vue/devtools-api': 6.1.4 2677 | vue: 3.2.37 2678 | 2679 | /vue-starport/0.2.11: 2680 | resolution: {integrity: sha512-JUG5ZTvVwD8HY6M5/0dl9BTVSFfjDbDqG8cb1F0hY2wO1OTkIac+iwX8yr4f5U+2jxie6RGchoyJzQktVTwkUQ==} 2681 | dependencies: 2682 | '@vueuse/core': 8.6.0_vue@3.2.37 2683 | vue: 3.2.37 2684 | transitivePeerDependencies: 2685 | - '@vue/composition-api' 2686 | 2687 | /vue-template-es2015-compiler/1.9.1: 2688 | resolution: {integrity: sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==} 2689 | dev: false 2690 | 2691 | /vue/3.2.37: 2692 | resolution: {integrity: sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==} 2693 | dependencies: 2694 | '@vue/compiler-dom': 3.2.37 2695 | '@vue/compiler-sfc': 3.2.37 2696 | '@vue/runtime-dom': 3.2.37 2697 | '@vue/server-renderer': 3.2.37_vue@3.2.37 2698 | '@vue/shared': 3.2.37 2699 | 2700 | /webpack-sources/3.2.3: 2701 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} 2702 | engines: {node: '>=10.13.0'} 2703 | 2704 | /webpack-virtual-modules/0.4.3: 2705 | resolution: {integrity: sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==} 2706 | 2707 | /which/2.0.2: 2708 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2709 | engines: {node: '>= 8'} 2710 | hasBin: true 2711 | dependencies: 2712 | isexe: 2.0.0 2713 | 2714 | /windicss/2.5.14: 2715 | resolution: {integrity: sha512-8Lm7U1M5AzJPbiaVSVz7qWdETRzlkv//5LBMICBBAojos1jo09lUGhNZ5rBzHeldB9JmqYMDOGgrrXHExu0EAg==} 2716 | engines: {node: '>= 12'} 2717 | hasBin: true 2718 | dev: false 2719 | 2720 | /windicss/3.5.4: 2721 | resolution: {integrity: sha512-x2Iu0a69dtNiKHMkR886lx0WKbZI5GqvXyvGBCJ2VA6rcjKYjnzCA/Ljd6hNQBfqlkSum8J+qAVcCfLzQFI4rQ==} 2722 | engines: {node: '>= 12'} 2723 | hasBin: true 2724 | 2725 | /wrap-ansi/7.0.0: 2726 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2727 | engines: {node: '>=10'} 2728 | dependencies: 2729 | ansi-styles: 4.3.0 2730 | string-width: 4.2.3 2731 | strip-ansi: 6.0.1 2732 | 2733 | /wrappy/1.0.2: 2734 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2735 | dev: true 2736 | 2737 | /y18n/5.0.8: 2738 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 2739 | engines: {node: '>=10'} 2740 | 2741 | /yargs-parser/21.0.1: 2742 | resolution: {integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==} 2743 | engines: {node: '>=12'} 2744 | 2745 | /yargs/17.5.1: 2746 | resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} 2747 | engines: {node: '>=12'} 2748 | dependencies: 2749 | cliui: 7.0.4 2750 | escalade: 3.1.1 2751 | get-caller-file: 2.0.5 2752 | require-directory: 2.1.1 2753 | string-width: 4.2.3 2754 | y18n: 5.0.8 2755 | yargs-parser: 21.0.1 2756 | 2757 | /yocto-queue/0.1.0: 2758 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2759 | engines: {node: '>=10'} 2760 | --------------------------------------------------------------------------------