├── .gitignore ├── .vscode ├── settings.json └── tasks.json ├── LICENSE ├── README.md ├── dist └── clickout-event.js ├── gulpfile.js ├── package.json ├── pnpm-lock.yaml ├── src ├── functions.ts ├── index.ts ├── shorthands.ts └── types.ts ├── test ├── clickout-event.js ├── html.htm ├── javascript.htm ├── jquery.htm ├── nested.htm └── vue.htm └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.words": [ 3 | "clickout" 4 | ], 5 | "typescript.tsdk": "node_modules\\typescript\\lib" 6 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "type": "gulp", 6 | "task": "build", 7 | "group": { 8 | "kind": "build", 9 | "isDefault": true 10 | }, 11 | "problemMatcher": [], 12 | "label": "gulp: build" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2020 MuTsunTsai 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Clickout-Event 2 | 3 | > Provides universal support for `clickout` and other similar events to any front-end frameworks. 4 | 5 | [![npm version](https://img.shields.io/npm/v/clickout-event.svg?logo=npm)](https://www.npmjs.com/package/clickout-event) 6 | ![npm downloads](https://img.shields.io/npm/dt/clickout-event?logo=npm) 7 | [![GitHub package version](https://img.shields.io/github/package-json/v/MuTsunTsai/clickout-event.svg?logo=github&label=Github)](https://github.com/MuTsunTsai/clickout-event) 8 | ![license](https://img.shields.io/npm/l/clickout-event.svg) 9 | 10 | 11 | There are many packages that are designed to capture and handle the 12 | "click outside" event of an element. Some of them target vanilla JavaScript, 13 | while some others target specific front-end framework, possibly specific version. 14 | Front-end designers in the past had to look for the right package that works 15 | for their particular scenario. 16 | 17 | Look no further! Introducing Clickout-Event, 18 | a package that provides universal support for `clickout` and other similar events. 19 | It works in all scenarios: plain HTML `onclickout` attributes, 20 | `.addEventListener('clickout')` of vanilla JavaScript, 21 | `.on('clickout')` of jQuery, `v-on:clickout` directives of Vue.js, you name it. 22 | As long as a front-end framework internally uses `addEventListener` to handle events, 23 | Clickout-Event works for it. 24 | 25 | ## License 26 | 27 | MIT License 28 | 29 | ## Requirement 30 | 31 | In order to fully implement all native event behaviors, 32 | Clickout-Event uses the [mutation observer API](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver), 33 | so it will not work directly for legacy browsers. 34 | You may try using polyfills to make it work, 35 | but I haven't tested those yet. 36 | 37 | ## Install (with module) 38 | 39 | You can get Clickout-Event as an NPM package by running: 40 | ```bash 41 | npm install clickout-event --save 42 | ``` 43 | Then add one of the following lines to your entry script: 44 | 45 | ```js 46 | require('clickout-event'); 47 | // or 48 | import 'clickout-event'; 49 | ``` 50 | 51 | And watch the magic happen. 52 | 53 | ## Install (without module) 54 | 55 | Simply download [`clickout-event.js`](https://github.com/MuTsunTsai/clickout-event/raw/master/dist/clickout-event.js). 56 | Then all you need to do is add the script tag anywhere (as long as it is before any calling of the `addEventListener` method, such as the beginning of the `` section) in your HTML file: 57 | 58 | ```html 59 | 60 | ``` 61 | 62 | ## API 63 | 64 | Clickout-Event provides the corresponding "out-events" for the following events: `click`, `dblclick`, `mousedown`, `mouseup`, `touchstart`, `touchend`, `pointerdown` and `pointerup`. The corresponding events are then called `clickout`, `dblclickout` etc. You can then use them the same way you use any other events; see examples below. 65 | 66 | Note that pointer events is not supported in Safari. 67 | 68 | With each out-event, you can use `event.relatedTarget` to find out exactly which element fires the original event (that is, the element being clicked etc.). 69 | 70 | ## Usage 71 | 72 | ### HTML inline attribute 73 | 74 | ```html 75 |
...
76 | ``` 77 | 78 | ### Vanilla JavaScript 79 | 80 | ```js 81 | document.getElementById('myId').addEventListener('clickout', myListener); 82 | ``` 83 | 84 | ### [jQuery](https://jquery.com/) 85 | 86 | ```js 87 | $('#myId').on('clickout', myListener); 88 | ``` 89 | 90 | ### [Vue.js](https://vuejs.org/) 91 | 92 | ```html 93 |
...
94 | ``` 95 | 96 | ### [Angular](https://angular.io/) 97 | 98 | ```html 99 |
...
100 | ``` 101 | 102 | ### Other frameworks 103 | 104 | Some frameworks (such as [React](https://reactjs.org/) and [Blazor](https://blazor.net/)) 105 | have a fixed list of events that are supported by their event attribute syntax, 106 | so you cannot directly use their event attributes with out-events 107 | (or with any custom events for that matter) in their templates. 108 | Still, you can create custom components in these frameworks and use the vanilla 109 | `addEventListener()` method to register event listener. 110 | 111 | ## Details 112 | 113 | ### Event propagation 114 | 115 | You can have nested elements using the out-events. In that case, 116 | unlike regular events, out-events fire in the top-down ordering; 117 | that is, the parent element will fire the event first, 118 | and then will the child elements. 119 | Similarly, when calling `event.stopPropagation()` 120 | (or, for example, using `v-on:clickout.stop` in Vue.js) on the out-events, 121 | it will be the parent element stopping the child element from firing the event. 122 | 123 | By design, even if the propagation of the original event is stopped, 124 | the corresponding out-event will still fire regardlessly. 125 | 126 | ### Dynamic elements 127 | 128 | Feel free to add or remove elements dynamically! 129 | Clickout-Event monitors changes to the document, 130 | and will ensure the out-events work no matter which dynamic 131 | front-end framework you're using. 132 | 133 | ### Content Security Policy (CSP) 134 | 135 | When using inline event attributes, 136 | Clickout-Event is subject to the same CSP restriction as any other events; 137 | that is, `'unsafe-inline'` must be allowed. Now Clickout-Event uses 138 | native mechanisms instead of eval-like methods to parse the attribute, 139 | so you don't need to allow `'unsafe-eval'`. 140 | 141 | ### Caveat 142 | 143 | Since out-events are synthetic events, 144 | they are untrusted (that is, `event.isTrusted == false`) by nature, 145 | and your event listener is not supposed to reject the event because of this. -------------------------------------------------------------------------------- /dist/clickout-event.js: -------------------------------------------------------------------------------- 1 | /** 2 | * clickout-event v1.1.3 3 | * (c) 2020-2025 Mu-Tsun Tsai 4 | * Released under the MIT License. 5 | */ 6 | !function(){"use strict";const t="on",e="out",n="body",o="stop",s="click",i="apply",r="target",u="prototype",c="Propagation",d="setAttribute",a="relatedTarget",h="addEventListener",p=Symbol(e),l=Object,f=document,m="undefined"!=typeof TouchEvent?TouchEvent:void 0,v=HTMLElement,y=v[u],b=Event[u],E=[s,"dbl"+s,"mousedown","mouseup","touchstart","touchend","pointerdown","pointerup"],w=new Set(E),g=new Set(E.map((n=>t+n+e))),T=(t,e)=>!!e&&t instanceof e,L=(t,e)=>t.contains(e),N=(t,e)=>{for(let n of t)e(n)},S=n=>{T(n,v)&&(n[p]?A(n):N(w,(o=>{let s=t+o+e,i=n.getAttribute(s);i&&!j(n)[s]&&n[d](s,i)})),N(n.childNodes,S))},j=t=>t[p]=t[p]||{},A=t=>{j(t),I.includes(t)||(I.push(t),q=!0)},M=(t,e)=>L(e,t)?1:L(t,e)?-1:0,O=t=>{q&&(I.sort(M),q=!1);let n=t[r];T(t,m)?(t=new m(t.type+e,t))[a]=n:t=new t.constructor(t.type+e,l.assign({},t,{[a]:n})),t[o]=[],N(I,(e=>{L(e,n)||t[o].some((t=>L(t,e)))||e.dispatchEvent(t)}))},P=e=>function(){let n=this,s=n.type;e[i](n),g.has(t+s)&&n[o].push(n[r])},k=(t,e,n)=>t[e]=n(t[e]);function H(e){let n=this[p][t+e.type];n&&n[i](this,[e])}let I=[],q=!1,x=f.createElement(n);N(w,(n=>{f[h](n,O,{passive:!0,capture:!0});let o=t+n+e;l.defineProperty(y,o,{get(){return this[p][o]},set(t){this[h](n+e,H),this[p][o]="object"==typeof t?t.handleEvent:t}})})),k(y,h,(e=>function(...n){g.has(t+n[0])&&A(this),e[i](this,n)})),k(y,d,(e=>function(n,o){g.has(n)?(e[i](x,[t+s,o]),this[n]=x[t+s]):e[i](this,[n,o])})),k(b,o+c,P),k(b,o+"Immediate"+c,P),new MutationObserver((t=>{N(t,(t=>{N(t.addedNodes,S),N(t.removedNodes,(t=>{T(t,v)&&(I=I.filter((e=>!L(t,e))))}))}))})).observe(f.documentElement,{childList:!0,subtree:!0}),S(f[n])}(); -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | const gulp = require('gulp'); 2 | const ts = require('gulp-typescript'); 3 | const through2 = require("gulp-through2"); 4 | const terser = require('gulp-terser'); 5 | 6 | const pkg = require('./package.json'); 7 | const header = `/** 8 | * ${pkg.name} v${pkg.version} 9 | * (c) 2020-${new Date().getFullYear()} Mu-Tsun Tsai 10 | * Released under the MIT License. 11 | */`; 12 | 13 | const terserOption = { 14 | "compress": { 15 | "evaluate": false, 16 | "properties": false, 17 | "unsafe_arrows": true 18 | }, 19 | "output": { 20 | "comments": true 21 | } 22 | }; 23 | 24 | const project = ts.createProject("tsconfig.json"); 25 | gulp.task('default', () => 26 | project.src() 27 | .pipe(project()) 28 | .pipe(gulp.dest("test")) 29 | .pipe(through2(body => `${header};(function(){ ${body} })()`)) 30 | .pipe(terser(terserOption)) 31 | .pipe(gulp.dest("dist")) 32 | ); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "clickout-event", 3 | "version": "1.1.3", 4 | "description": "Provides universal support for `clickout` and other similar events to webpages.", 5 | "main": "dist/clickout-event.js", 6 | "scripts": { 7 | "version": "gulp default && git add -A", 8 | "test": "echo \"Error: no test specified\"" 9 | }, 10 | "keywords": [ 11 | "clickout", 12 | "click", 13 | "outside", 14 | "event" 15 | ], 16 | "repository": { 17 | "type": "git", 18 | "url": "git+https://github.com/MuTsunTsai/clickout-event.git" 19 | }, 20 | "author": "Mu-Tsun Tsai", 21 | "license": "MIT", 22 | "devDependencies": { 23 | "gulp": "^5.0.0", 24 | "gulp-terser": "^2.1.0", 25 | "gulp-through2": "^1.1.0", 26 | "gulp-typescript": "6.0.0-alpha.1", 27 | "typescript": "^5.7.3" 28 | }, 29 | "files": [ 30 | "dist" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | gulp: 12 | specifier: ^5.0.0 13 | version: 5.0.0 14 | gulp-terser: 15 | specifier: ^2.1.0 16 | version: 2.1.0 17 | gulp-through2: 18 | specifier: ^1.1.0 19 | version: 1.1.0 20 | gulp-typescript: 21 | specifier: 6.0.0-alpha.1 22 | version: 6.0.0-alpha.1(typescript@5.7.3) 23 | typescript: 24 | specifier: ^5.7.3 25 | version: 5.7.3 26 | 27 | packages: 28 | 29 | '@gulpjs/messages@1.1.0': 30 | resolution: {integrity: sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==} 31 | engines: {node: '>=10.13.0'} 32 | 33 | '@gulpjs/to-absolute-glob@4.0.0': 34 | resolution: {integrity: sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==} 35 | engines: {node: '>=10.13.0'} 36 | 37 | '@jridgewell/gen-mapping@0.3.8': 38 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 39 | engines: {node: '>=6.0.0'} 40 | 41 | '@jridgewell/resolve-uri@3.1.2': 42 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 43 | engines: {node: '>=6.0.0'} 44 | 45 | '@jridgewell/set-array@1.2.1': 46 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 47 | engines: {node: '>=6.0.0'} 48 | 49 | '@jridgewell/source-map@0.3.6': 50 | resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} 51 | 52 | '@jridgewell/sourcemap-codec@1.5.0': 53 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 54 | 55 | '@jridgewell/trace-mapping@0.3.25': 56 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 57 | 58 | '@types/expect@1.20.4': 59 | resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==} 60 | 61 | '@types/node@22.13.4': 62 | resolution: {integrity: sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==} 63 | 64 | '@types/vinyl@2.0.12': 65 | resolution: {integrity: sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==} 66 | 67 | acorn@8.14.0: 68 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 69 | engines: {node: '>=0.4.0'} 70 | hasBin: true 71 | 72 | ansi-colors@1.1.0: 73 | resolution: {integrity: sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==} 74 | engines: {node: '>=0.10.0'} 75 | 76 | ansi-colors@4.1.3: 77 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 78 | engines: {node: '>=6'} 79 | 80 | ansi-regex@5.0.1: 81 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 82 | engines: {node: '>=8'} 83 | 84 | ansi-styles@4.3.0: 85 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 86 | engines: {node: '>=8'} 87 | 88 | ansi-wrap@0.1.0: 89 | resolution: {integrity: sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==} 90 | engines: {node: '>=0.10.0'} 91 | 92 | anymatch@3.1.3: 93 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 94 | engines: {node: '>= 8'} 95 | 96 | append-buffer@1.0.2: 97 | resolution: {integrity: sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==} 98 | engines: {node: '>=0.10.0'} 99 | 100 | arr-diff@4.0.0: 101 | resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} 102 | engines: {node: '>=0.10.0'} 103 | 104 | arr-union@3.1.0: 105 | resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} 106 | engines: {node: '>=0.10.0'} 107 | 108 | array-each@1.0.1: 109 | resolution: {integrity: sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==} 110 | engines: {node: '>=0.10.0'} 111 | 112 | array-slice@1.1.0: 113 | resolution: {integrity: sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==} 114 | engines: {node: '>=0.10.0'} 115 | 116 | assign-symbols@1.0.0: 117 | resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} 118 | engines: {node: '>=0.10.0'} 119 | 120 | async-done@2.0.0: 121 | resolution: {integrity: sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==} 122 | engines: {node: '>= 10.13.0'} 123 | 124 | async-settle@2.0.0: 125 | resolution: {integrity: sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==} 126 | engines: {node: '>= 10.13.0'} 127 | 128 | b4a@1.6.7: 129 | resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} 130 | 131 | bach@2.0.1: 132 | resolution: {integrity: sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==} 133 | engines: {node: '>=10.13.0'} 134 | 135 | balanced-match@1.0.2: 136 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 137 | 138 | bare-events@2.5.4: 139 | resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} 140 | 141 | base64-js@1.5.1: 142 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 143 | 144 | binary-extensions@2.3.0: 145 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 146 | engines: {node: '>=8'} 147 | 148 | bl@5.1.0: 149 | resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} 150 | 151 | brace-expansion@1.1.11: 152 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 153 | 154 | braces@3.0.3: 155 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 156 | engines: {node: '>=8'} 157 | 158 | buffer-equal@1.0.1: 159 | resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==} 160 | engines: {node: '>=0.4'} 161 | 162 | buffer-from@1.1.2: 163 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 164 | 165 | buffer@6.0.3: 166 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 167 | 168 | call-bind-apply-helpers@1.0.2: 169 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 170 | engines: {node: '>= 0.4'} 171 | 172 | call-bind@1.0.8: 173 | resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} 174 | engines: {node: '>= 0.4'} 175 | 176 | call-bound@1.0.3: 177 | resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} 178 | engines: {node: '>= 0.4'} 179 | 180 | chalk@4.1.2: 181 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 182 | engines: {node: '>=10'} 183 | 184 | chokidar@3.6.0: 185 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 186 | engines: {node: '>= 8.10.0'} 187 | 188 | cliui@7.0.4: 189 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 190 | 191 | clone-buffer@1.0.0: 192 | resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==} 193 | engines: {node: '>= 0.10'} 194 | 195 | clone-stats@1.0.0: 196 | resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==} 197 | 198 | clone@2.1.2: 199 | resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} 200 | engines: {node: '>=0.8'} 201 | 202 | cloneable-readable@1.1.3: 203 | resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==} 204 | 205 | color-convert@2.0.1: 206 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 207 | engines: {node: '>=7.0.0'} 208 | 209 | color-name@1.1.4: 210 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 211 | 212 | commander@2.20.3: 213 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 214 | 215 | concat-map@0.0.1: 216 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 217 | 218 | convert-source-map@1.9.0: 219 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 220 | 221 | convert-source-map@2.0.0: 222 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 223 | 224 | copy-props@4.0.0: 225 | resolution: {integrity: sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==} 226 | engines: {node: '>= 10.13.0'} 227 | 228 | core-util-is@1.0.3: 229 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 230 | 231 | define-data-property@1.1.4: 232 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 233 | engines: {node: '>= 0.4'} 234 | 235 | define-properties@1.2.1: 236 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 237 | engines: {node: '>= 0.4'} 238 | 239 | detect-file@1.0.0: 240 | resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} 241 | engines: {node: '>=0.10.0'} 242 | 243 | dunder-proto@1.0.1: 244 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 245 | engines: {node: '>= 0.4'} 246 | 247 | duplexify@3.7.1: 248 | resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} 249 | 250 | each-props@3.0.0: 251 | resolution: {integrity: sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==} 252 | engines: {node: '>= 10.13.0'} 253 | 254 | emoji-regex@8.0.0: 255 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 256 | 257 | end-of-stream@1.4.4: 258 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 259 | 260 | es-define-property@1.0.1: 261 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 262 | engines: {node: '>= 0.4'} 263 | 264 | es-errors@1.3.0: 265 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 266 | engines: {node: '>= 0.4'} 267 | 268 | es-object-atoms@1.1.1: 269 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 270 | engines: {node: '>= 0.4'} 271 | 272 | escalade@3.2.0: 273 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 274 | engines: {node: '>=6'} 275 | 276 | expand-tilde@2.0.2: 277 | resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} 278 | engines: {node: '>=0.10.0'} 279 | 280 | extend-shallow@3.0.2: 281 | resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} 282 | engines: {node: '>=0.10.0'} 283 | 284 | extend@3.0.2: 285 | resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} 286 | 287 | fast-fifo@1.3.2: 288 | resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} 289 | 290 | fast-levenshtein@3.0.0: 291 | resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} 292 | 293 | fastest-levenshtein@1.0.16: 294 | resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} 295 | engines: {node: '>= 4.9.1'} 296 | 297 | fastq@1.19.0: 298 | resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} 299 | 300 | fill-range@7.1.1: 301 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 302 | engines: {node: '>=8'} 303 | 304 | findup-sync@5.0.0: 305 | resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==} 306 | engines: {node: '>= 10.13.0'} 307 | 308 | fined@2.0.0: 309 | resolution: {integrity: sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==} 310 | engines: {node: '>= 10.13.0'} 311 | 312 | flagged-respawn@2.0.0: 313 | resolution: {integrity: sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==} 314 | engines: {node: '>= 10.13.0'} 315 | 316 | flush-write-stream@1.1.1: 317 | resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==} 318 | 319 | for-in@1.0.2: 320 | resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} 321 | engines: {node: '>=0.10.0'} 322 | 323 | for-own@1.0.0: 324 | resolution: {integrity: sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==} 325 | engines: {node: '>=0.10.0'} 326 | 327 | fs-mkdirp-stream@1.0.0: 328 | resolution: {integrity: sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==} 329 | engines: {node: '>= 0.10'} 330 | 331 | fs-mkdirp-stream@2.0.1: 332 | resolution: {integrity: sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==} 333 | engines: {node: '>=10.13.0'} 334 | 335 | fs.realpath@1.0.0: 336 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 337 | 338 | fsevents@2.3.3: 339 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 340 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 341 | os: [darwin] 342 | 343 | function-bind@1.1.2: 344 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 345 | 346 | get-caller-file@2.0.5: 347 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 348 | engines: {node: 6.* || 8.* || >= 10.*} 349 | 350 | get-intrinsic@1.2.7: 351 | resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} 352 | engines: {node: '>= 0.4'} 353 | 354 | get-proto@1.0.1: 355 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 356 | engines: {node: '>= 0.4'} 357 | 358 | glob-parent@3.1.0: 359 | resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==} 360 | 361 | glob-parent@5.1.2: 362 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 363 | engines: {node: '>= 6'} 364 | 365 | glob-parent@6.0.2: 366 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 367 | engines: {node: '>=10.13.0'} 368 | 369 | glob-stream@6.1.0: 370 | resolution: {integrity: sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==} 371 | engines: {node: '>= 0.10'} 372 | 373 | glob-stream@8.0.2: 374 | resolution: {integrity: sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==} 375 | engines: {node: '>=10.13.0'} 376 | 377 | glob-watcher@6.0.0: 378 | resolution: {integrity: sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==} 379 | engines: {node: '>= 10.13.0'} 380 | 381 | glob@7.2.3: 382 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 383 | deprecated: Glob versions prior to v9 are no longer supported 384 | 385 | global-modules@1.0.0: 386 | resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} 387 | engines: {node: '>=0.10.0'} 388 | 389 | global-prefix@1.0.2: 390 | resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} 391 | engines: {node: '>=0.10.0'} 392 | 393 | glogg@2.2.0: 394 | resolution: {integrity: sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==} 395 | engines: {node: '>= 10.13.0'} 396 | 397 | gopd@1.2.0: 398 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 399 | engines: {node: '>= 0.4'} 400 | 401 | graceful-fs@4.2.11: 402 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 403 | 404 | gulp-cli@3.0.0: 405 | resolution: {integrity: sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==} 406 | engines: {node: '>=10.13.0'} 407 | hasBin: true 408 | 409 | gulp-terser@2.1.0: 410 | resolution: {integrity: sha512-lQ3+JUdHDVISAlUIUSZ/G9Dz/rBQHxOiYDQ70IVWFQeh4b33TC1MCIU+K18w07PS3rq/CVc34aQO4SUbdaNMPQ==} 411 | engines: {node: '>=10'} 412 | 413 | gulp-through2@1.1.0: 414 | resolution: {integrity: sha512-c7ENVnqYvnlGnGfPCwoN0dXbwqJ/fP0YVpK5/htK5GmDyhm6rzE/sE+x441jydr1e1XoIpbm5/M3Qoku0huafw==} 415 | engines: {node: '>=16.0.0'} 416 | 417 | gulp-typescript@6.0.0-alpha.1: 418 | resolution: {integrity: sha512-KoT0TTfjfT7w3JItHkgFH1T/zK4oXWC+a8xxKfniRfVcA0Fa1bKrIhztYelYmb+95RB80OLMBreknYkdwzdi2Q==} 419 | engines: {node: '>= 8'} 420 | peerDependencies: 421 | typescript: '~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.7.0-dev ' 422 | 423 | gulp@5.0.0: 424 | resolution: {integrity: sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==} 425 | engines: {node: '>=10.13.0'} 426 | hasBin: true 427 | 428 | gulplog@2.2.0: 429 | resolution: {integrity: sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==} 430 | engines: {node: '>= 10.13.0'} 431 | 432 | has-flag@4.0.0: 433 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 434 | engines: {node: '>=8'} 435 | 436 | has-property-descriptors@1.0.2: 437 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 438 | 439 | has-symbols@1.1.0: 440 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 441 | engines: {node: '>= 0.4'} 442 | 443 | hasown@2.0.2: 444 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 445 | engines: {node: '>= 0.4'} 446 | 447 | homedir-polyfill@1.0.3: 448 | resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} 449 | engines: {node: '>=0.10.0'} 450 | 451 | iconv-lite@0.6.3: 452 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 453 | engines: {node: '>=0.10.0'} 454 | 455 | ieee754@1.2.1: 456 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 457 | 458 | inflight@1.0.6: 459 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 460 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 461 | 462 | inherits@2.0.4: 463 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 464 | 465 | ini@1.3.8: 466 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 467 | 468 | interpret@3.1.1: 469 | resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} 470 | engines: {node: '>=10.13.0'} 471 | 472 | is-absolute@1.0.0: 473 | resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} 474 | engines: {node: '>=0.10.0'} 475 | 476 | is-binary-path@2.1.0: 477 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 478 | engines: {node: '>=8'} 479 | 480 | is-buffer@1.1.6: 481 | resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} 482 | 483 | is-core-module@2.16.1: 484 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 485 | engines: {node: '>= 0.4'} 486 | 487 | is-extendable@1.0.1: 488 | resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} 489 | engines: {node: '>=0.10.0'} 490 | 491 | is-extglob@2.1.1: 492 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 493 | engines: {node: '>=0.10.0'} 494 | 495 | is-fullwidth-code-point@3.0.0: 496 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 497 | engines: {node: '>=8'} 498 | 499 | is-glob@3.1.0: 500 | resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==} 501 | engines: {node: '>=0.10.0'} 502 | 503 | is-glob@4.0.3: 504 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 505 | engines: {node: '>=0.10.0'} 506 | 507 | is-negated-glob@1.0.0: 508 | resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==} 509 | engines: {node: '>=0.10.0'} 510 | 511 | is-number@7.0.0: 512 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 513 | engines: {node: '>=0.12.0'} 514 | 515 | is-plain-object@2.0.4: 516 | resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} 517 | engines: {node: '>=0.10.0'} 518 | 519 | is-plain-object@5.0.0: 520 | resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} 521 | engines: {node: '>=0.10.0'} 522 | 523 | is-relative@1.0.0: 524 | resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} 525 | engines: {node: '>=0.10.0'} 526 | 527 | is-unc-path@1.0.0: 528 | resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} 529 | engines: {node: '>=0.10.0'} 530 | 531 | is-utf8@0.2.1: 532 | resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} 533 | 534 | is-valid-glob@1.0.0: 535 | resolution: {integrity: sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==} 536 | engines: {node: '>=0.10.0'} 537 | 538 | is-windows@1.0.2: 539 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 540 | engines: {node: '>=0.10.0'} 541 | 542 | isarray@1.0.0: 543 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 544 | 545 | isexe@2.0.0: 546 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 547 | 548 | isobject@3.0.1: 549 | resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} 550 | engines: {node: '>=0.10.0'} 551 | 552 | json-stable-stringify-without-jsonify@1.0.1: 553 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 554 | 555 | last-run@2.0.0: 556 | resolution: {integrity: sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==} 557 | engines: {node: '>= 10.13.0'} 558 | 559 | lazystream@1.0.1: 560 | resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} 561 | engines: {node: '>= 0.6.3'} 562 | 563 | lead@1.0.0: 564 | resolution: {integrity: sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==} 565 | engines: {node: '>= 0.10'} 566 | 567 | lead@4.0.0: 568 | resolution: {integrity: sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==} 569 | engines: {node: '>=10.13.0'} 570 | 571 | liftoff@5.0.0: 572 | resolution: {integrity: sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==} 573 | engines: {node: '>=10.13.0'} 574 | 575 | map-cache@0.2.2: 576 | resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} 577 | engines: {node: '>=0.10.0'} 578 | 579 | math-intrinsics@1.1.0: 580 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 581 | engines: {node: '>= 0.4'} 582 | 583 | micromatch@4.0.8: 584 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 585 | engines: {node: '>=8.6'} 586 | 587 | minimatch@3.1.2: 588 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 589 | 590 | mute-stdout@2.0.0: 591 | resolution: {integrity: sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==} 592 | engines: {node: '>= 10.13.0'} 593 | 594 | normalize-path@2.1.1: 595 | resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} 596 | engines: {node: '>=0.10.0'} 597 | 598 | normalize-path@3.0.0: 599 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 600 | engines: {node: '>=0.10.0'} 601 | 602 | now-and-later@2.0.1: 603 | resolution: {integrity: sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==} 604 | engines: {node: '>= 0.10'} 605 | 606 | now-and-later@3.0.0: 607 | resolution: {integrity: sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==} 608 | engines: {node: '>= 10.13.0'} 609 | 610 | object-keys@1.1.1: 611 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 612 | engines: {node: '>= 0.4'} 613 | 614 | object.assign@4.1.7: 615 | resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} 616 | engines: {node: '>= 0.4'} 617 | 618 | object.defaults@1.1.0: 619 | resolution: {integrity: sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==} 620 | engines: {node: '>=0.10.0'} 621 | 622 | object.pick@1.3.0: 623 | resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} 624 | engines: {node: '>=0.10.0'} 625 | 626 | once@1.4.0: 627 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 628 | 629 | ordered-read-streams@1.0.1: 630 | resolution: {integrity: sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==} 631 | 632 | parse-filepath@1.0.2: 633 | resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} 634 | engines: {node: '>=0.8'} 635 | 636 | parse-passwd@1.0.0: 637 | resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} 638 | engines: {node: '>=0.10.0'} 639 | 640 | path-dirname@1.0.2: 641 | resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} 642 | 643 | path-is-absolute@1.0.1: 644 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 645 | engines: {node: '>=0.10.0'} 646 | 647 | path-parse@1.0.7: 648 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 649 | 650 | path-root-regex@0.1.2: 651 | resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} 652 | engines: {node: '>=0.10.0'} 653 | 654 | path-root@0.1.1: 655 | resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} 656 | engines: {node: '>=0.10.0'} 657 | 658 | picomatch@2.3.1: 659 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 660 | engines: {node: '>=8.6'} 661 | 662 | plugin-error@1.0.1: 663 | resolution: {integrity: sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==} 664 | engines: {node: '>= 0.10'} 665 | 666 | plugin-error@2.0.1: 667 | resolution: {integrity: sha512-zMakqvIDyY40xHOvzXka0kUvf40nYIuwRE8dWhti2WtjQZ31xAgBZBhxsK7vK3QbRXS1Xms/LO7B5cuAsfB2Gg==} 668 | engines: {node: '>=10.13.0'} 669 | 670 | process-nextick-args@2.0.1: 671 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 672 | 673 | pump@2.0.1: 674 | resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} 675 | 676 | pumpify@1.5.1: 677 | resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} 678 | 679 | readable-stream@2.3.8: 680 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 681 | 682 | readable-stream@3.6.2: 683 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 684 | engines: {node: '>= 6'} 685 | 686 | readdirp@3.6.0: 687 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 688 | engines: {node: '>=8.10.0'} 689 | 690 | rechoir@0.8.0: 691 | resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} 692 | engines: {node: '>= 10.13.0'} 693 | 694 | remove-bom-buffer@3.0.0: 695 | resolution: {integrity: sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==} 696 | engines: {node: '>=0.10.0'} 697 | 698 | remove-bom-stream@1.2.0: 699 | resolution: {integrity: sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==} 700 | engines: {node: '>= 0.10'} 701 | 702 | remove-trailing-separator@1.1.0: 703 | resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} 704 | 705 | replace-ext@1.0.1: 706 | resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==} 707 | engines: {node: '>= 0.10'} 708 | 709 | replace-ext@2.0.0: 710 | resolution: {integrity: sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==} 711 | engines: {node: '>= 10'} 712 | 713 | replace-homedir@2.0.0: 714 | resolution: {integrity: sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==} 715 | engines: {node: '>= 10.13.0'} 716 | 717 | require-directory@2.1.1: 718 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 719 | engines: {node: '>=0.10.0'} 720 | 721 | resolve-dir@1.0.1: 722 | resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} 723 | engines: {node: '>=0.10.0'} 724 | 725 | resolve-options@1.1.0: 726 | resolution: {integrity: sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==} 727 | engines: {node: '>= 0.10'} 728 | 729 | resolve-options@2.0.0: 730 | resolution: {integrity: sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==} 731 | engines: {node: '>= 10.13.0'} 732 | 733 | resolve@1.22.10: 734 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 735 | engines: {node: '>= 0.4'} 736 | hasBin: true 737 | 738 | reusify@1.0.4: 739 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 740 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 741 | 742 | safe-buffer@5.1.2: 743 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 744 | 745 | safe-buffer@5.2.1: 746 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 747 | 748 | safer-buffer@2.1.2: 749 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 750 | 751 | semver-greatest-satisfied-range@2.0.0: 752 | resolution: {integrity: sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==} 753 | engines: {node: '>= 10.13.0'} 754 | 755 | semver@6.3.1: 756 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 757 | hasBin: true 758 | 759 | set-function-length@1.2.2: 760 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 761 | engines: {node: '>= 0.4'} 762 | 763 | source-map-support@0.5.21: 764 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 765 | 766 | source-map@0.5.7: 767 | resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} 768 | engines: {node: '>=0.10.0'} 769 | 770 | source-map@0.6.1: 771 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 772 | engines: {node: '>=0.10.0'} 773 | 774 | source-map@0.7.4: 775 | resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} 776 | engines: {node: '>= 8'} 777 | 778 | sparkles@2.1.0: 779 | resolution: {integrity: sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==} 780 | engines: {node: '>= 10.13.0'} 781 | 782 | stream-composer@1.0.2: 783 | resolution: {integrity: sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==} 784 | 785 | stream-exhaust@1.0.2: 786 | resolution: {integrity: sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==} 787 | 788 | stream-shift@1.0.3: 789 | resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} 790 | 791 | streamx@2.22.0: 792 | resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} 793 | 794 | string-width@4.2.3: 795 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 796 | engines: {node: '>=8'} 797 | 798 | string_decoder@1.1.1: 799 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 800 | 801 | string_decoder@1.3.0: 802 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 803 | 804 | strip-ansi@6.0.1: 805 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 806 | engines: {node: '>=8'} 807 | 808 | supports-color@7.2.0: 809 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 810 | engines: {node: '>=8'} 811 | 812 | supports-preserve-symlinks-flag@1.0.0: 813 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 814 | engines: {node: '>= 0.4'} 815 | 816 | sver@1.8.4: 817 | resolution: {integrity: sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==} 818 | 819 | teex@1.0.1: 820 | resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} 821 | 822 | terser@5.39.0: 823 | resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} 824 | engines: {node: '>=10'} 825 | hasBin: true 826 | 827 | text-decoder@1.2.3: 828 | resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} 829 | 830 | through2-filter@3.0.0: 831 | resolution: {integrity: sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==} 832 | 833 | through2@2.0.5: 834 | resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} 835 | 836 | through2@3.0.2: 837 | resolution: {integrity: sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==} 838 | 839 | through2@4.0.2: 840 | resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} 841 | 842 | to-absolute-glob@2.0.2: 843 | resolution: {integrity: sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==} 844 | engines: {node: '>=0.10.0'} 845 | 846 | to-regex-range@5.0.1: 847 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 848 | engines: {node: '>=8.0'} 849 | 850 | to-through@2.0.0: 851 | resolution: {integrity: sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==} 852 | engines: {node: '>= 0.10'} 853 | 854 | to-through@3.0.0: 855 | resolution: {integrity: sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==} 856 | engines: {node: '>=10.13.0'} 857 | 858 | typescript@5.7.3: 859 | resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} 860 | engines: {node: '>=14.17'} 861 | hasBin: true 862 | 863 | unc-path-regex@0.1.2: 864 | resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} 865 | engines: {node: '>=0.10.0'} 866 | 867 | undertaker-registry@2.0.0: 868 | resolution: {integrity: sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==} 869 | engines: {node: '>= 10.13.0'} 870 | 871 | undertaker@2.0.0: 872 | resolution: {integrity: sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==} 873 | engines: {node: '>=10.13.0'} 874 | 875 | undici-types@6.20.0: 876 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 877 | 878 | unique-stream@2.3.1: 879 | resolution: {integrity: sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==} 880 | 881 | util-deprecate@1.0.2: 882 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 883 | 884 | v8flags@4.0.1: 885 | resolution: {integrity: sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==} 886 | engines: {node: '>= 10.13.0'} 887 | 888 | value-or-function@3.0.0: 889 | resolution: {integrity: sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==} 890 | engines: {node: '>= 0.10'} 891 | 892 | value-or-function@4.0.0: 893 | resolution: {integrity: sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==} 894 | engines: {node: '>= 10.13.0'} 895 | 896 | vinyl-contents@2.0.0: 897 | resolution: {integrity: sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==} 898 | engines: {node: '>=10.13.0'} 899 | 900 | vinyl-fs@3.0.3: 901 | resolution: {integrity: sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==} 902 | engines: {node: '>= 0.10'} 903 | 904 | vinyl-fs@4.0.0: 905 | resolution: {integrity: sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==} 906 | engines: {node: '>=10.13.0'} 907 | 908 | vinyl-sourcemap@1.1.0: 909 | resolution: {integrity: sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==} 910 | engines: {node: '>= 0.10'} 911 | 912 | vinyl-sourcemap@2.0.0: 913 | resolution: {integrity: sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==} 914 | engines: {node: '>=10.13.0'} 915 | 916 | vinyl-sourcemaps-apply@0.2.1: 917 | resolution: {integrity: sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==} 918 | 919 | vinyl@2.2.1: 920 | resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==} 921 | engines: {node: '>= 0.10'} 922 | 923 | vinyl@3.0.0: 924 | resolution: {integrity: sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==} 925 | engines: {node: '>=10.13.0'} 926 | 927 | which@1.3.1: 928 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 929 | hasBin: true 930 | 931 | wrap-ansi@7.0.0: 932 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 933 | engines: {node: '>=10'} 934 | 935 | wrappy@1.0.2: 936 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 937 | 938 | xtend@4.0.2: 939 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 940 | engines: {node: '>=0.4'} 941 | 942 | y18n@5.0.8: 943 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 944 | engines: {node: '>=10'} 945 | 946 | yargs-parser@20.2.9: 947 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 948 | engines: {node: '>=10'} 949 | 950 | yargs@16.2.0: 951 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 952 | engines: {node: '>=10'} 953 | 954 | snapshots: 955 | 956 | '@gulpjs/messages@1.1.0': {} 957 | 958 | '@gulpjs/to-absolute-glob@4.0.0': 959 | dependencies: 960 | is-negated-glob: 1.0.0 961 | 962 | '@jridgewell/gen-mapping@0.3.8': 963 | dependencies: 964 | '@jridgewell/set-array': 1.2.1 965 | '@jridgewell/sourcemap-codec': 1.5.0 966 | '@jridgewell/trace-mapping': 0.3.25 967 | 968 | '@jridgewell/resolve-uri@3.1.2': {} 969 | 970 | '@jridgewell/set-array@1.2.1': {} 971 | 972 | '@jridgewell/source-map@0.3.6': 973 | dependencies: 974 | '@jridgewell/gen-mapping': 0.3.8 975 | '@jridgewell/trace-mapping': 0.3.25 976 | 977 | '@jridgewell/sourcemap-codec@1.5.0': {} 978 | 979 | '@jridgewell/trace-mapping@0.3.25': 980 | dependencies: 981 | '@jridgewell/resolve-uri': 3.1.2 982 | '@jridgewell/sourcemap-codec': 1.5.0 983 | 984 | '@types/expect@1.20.4': {} 985 | 986 | '@types/node@22.13.4': 987 | dependencies: 988 | undici-types: 6.20.0 989 | 990 | '@types/vinyl@2.0.12': 991 | dependencies: 992 | '@types/expect': 1.20.4 993 | '@types/node': 22.13.4 994 | 995 | acorn@8.14.0: {} 996 | 997 | ansi-colors@1.1.0: 998 | dependencies: 999 | ansi-wrap: 0.1.0 1000 | 1001 | ansi-colors@4.1.3: {} 1002 | 1003 | ansi-regex@5.0.1: {} 1004 | 1005 | ansi-styles@4.3.0: 1006 | dependencies: 1007 | color-convert: 2.0.1 1008 | 1009 | ansi-wrap@0.1.0: {} 1010 | 1011 | anymatch@3.1.3: 1012 | dependencies: 1013 | normalize-path: 3.0.0 1014 | picomatch: 2.3.1 1015 | 1016 | append-buffer@1.0.2: 1017 | dependencies: 1018 | buffer-equal: 1.0.1 1019 | 1020 | arr-diff@4.0.0: {} 1021 | 1022 | arr-union@3.1.0: {} 1023 | 1024 | array-each@1.0.1: {} 1025 | 1026 | array-slice@1.1.0: {} 1027 | 1028 | assign-symbols@1.0.0: {} 1029 | 1030 | async-done@2.0.0: 1031 | dependencies: 1032 | end-of-stream: 1.4.4 1033 | once: 1.4.0 1034 | stream-exhaust: 1.0.2 1035 | 1036 | async-settle@2.0.0: 1037 | dependencies: 1038 | async-done: 2.0.0 1039 | 1040 | b4a@1.6.7: {} 1041 | 1042 | bach@2.0.1: 1043 | dependencies: 1044 | async-done: 2.0.0 1045 | async-settle: 2.0.0 1046 | now-and-later: 3.0.0 1047 | 1048 | balanced-match@1.0.2: {} 1049 | 1050 | bare-events@2.5.4: 1051 | optional: true 1052 | 1053 | base64-js@1.5.1: {} 1054 | 1055 | binary-extensions@2.3.0: {} 1056 | 1057 | bl@5.1.0: 1058 | dependencies: 1059 | buffer: 6.0.3 1060 | inherits: 2.0.4 1061 | readable-stream: 3.6.2 1062 | 1063 | brace-expansion@1.1.11: 1064 | dependencies: 1065 | balanced-match: 1.0.2 1066 | concat-map: 0.0.1 1067 | 1068 | braces@3.0.3: 1069 | dependencies: 1070 | fill-range: 7.1.1 1071 | 1072 | buffer-equal@1.0.1: {} 1073 | 1074 | buffer-from@1.1.2: {} 1075 | 1076 | buffer@6.0.3: 1077 | dependencies: 1078 | base64-js: 1.5.1 1079 | ieee754: 1.2.1 1080 | 1081 | call-bind-apply-helpers@1.0.2: 1082 | dependencies: 1083 | es-errors: 1.3.0 1084 | function-bind: 1.1.2 1085 | 1086 | call-bind@1.0.8: 1087 | dependencies: 1088 | call-bind-apply-helpers: 1.0.2 1089 | es-define-property: 1.0.1 1090 | get-intrinsic: 1.2.7 1091 | set-function-length: 1.2.2 1092 | 1093 | call-bound@1.0.3: 1094 | dependencies: 1095 | call-bind-apply-helpers: 1.0.2 1096 | get-intrinsic: 1.2.7 1097 | 1098 | chalk@4.1.2: 1099 | dependencies: 1100 | ansi-styles: 4.3.0 1101 | supports-color: 7.2.0 1102 | 1103 | chokidar@3.6.0: 1104 | dependencies: 1105 | anymatch: 3.1.3 1106 | braces: 3.0.3 1107 | glob-parent: 5.1.2 1108 | is-binary-path: 2.1.0 1109 | is-glob: 4.0.3 1110 | normalize-path: 3.0.0 1111 | readdirp: 3.6.0 1112 | optionalDependencies: 1113 | fsevents: 2.3.3 1114 | 1115 | cliui@7.0.4: 1116 | dependencies: 1117 | string-width: 4.2.3 1118 | strip-ansi: 6.0.1 1119 | wrap-ansi: 7.0.0 1120 | 1121 | clone-buffer@1.0.0: {} 1122 | 1123 | clone-stats@1.0.0: {} 1124 | 1125 | clone@2.1.2: {} 1126 | 1127 | cloneable-readable@1.1.3: 1128 | dependencies: 1129 | inherits: 2.0.4 1130 | process-nextick-args: 2.0.1 1131 | readable-stream: 2.3.8 1132 | 1133 | color-convert@2.0.1: 1134 | dependencies: 1135 | color-name: 1.1.4 1136 | 1137 | color-name@1.1.4: {} 1138 | 1139 | commander@2.20.3: {} 1140 | 1141 | concat-map@0.0.1: {} 1142 | 1143 | convert-source-map@1.9.0: {} 1144 | 1145 | convert-source-map@2.0.0: {} 1146 | 1147 | copy-props@4.0.0: 1148 | dependencies: 1149 | each-props: 3.0.0 1150 | is-plain-object: 5.0.0 1151 | 1152 | core-util-is@1.0.3: {} 1153 | 1154 | define-data-property@1.1.4: 1155 | dependencies: 1156 | es-define-property: 1.0.1 1157 | es-errors: 1.3.0 1158 | gopd: 1.2.0 1159 | 1160 | define-properties@1.2.1: 1161 | dependencies: 1162 | define-data-property: 1.1.4 1163 | has-property-descriptors: 1.0.2 1164 | object-keys: 1.1.1 1165 | 1166 | detect-file@1.0.0: {} 1167 | 1168 | dunder-proto@1.0.1: 1169 | dependencies: 1170 | call-bind-apply-helpers: 1.0.2 1171 | es-errors: 1.3.0 1172 | gopd: 1.2.0 1173 | 1174 | duplexify@3.7.1: 1175 | dependencies: 1176 | end-of-stream: 1.4.4 1177 | inherits: 2.0.4 1178 | readable-stream: 2.3.8 1179 | stream-shift: 1.0.3 1180 | 1181 | each-props@3.0.0: 1182 | dependencies: 1183 | is-plain-object: 5.0.0 1184 | object.defaults: 1.1.0 1185 | 1186 | emoji-regex@8.0.0: {} 1187 | 1188 | end-of-stream@1.4.4: 1189 | dependencies: 1190 | once: 1.4.0 1191 | 1192 | es-define-property@1.0.1: {} 1193 | 1194 | es-errors@1.3.0: {} 1195 | 1196 | es-object-atoms@1.1.1: 1197 | dependencies: 1198 | es-errors: 1.3.0 1199 | 1200 | escalade@3.2.0: {} 1201 | 1202 | expand-tilde@2.0.2: 1203 | dependencies: 1204 | homedir-polyfill: 1.0.3 1205 | 1206 | extend-shallow@3.0.2: 1207 | dependencies: 1208 | assign-symbols: 1.0.0 1209 | is-extendable: 1.0.1 1210 | 1211 | extend@3.0.2: {} 1212 | 1213 | fast-fifo@1.3.2: {} 1214 | 1215 | fast-levenshtein@3.0.0: 1216 | dependencies: 1217 | fastest-levenshtein: 1.0.16 1218 | 1219 | fastest-levenshtein@1.0.16: {} 1220 | 1221 | fastq@1.19.0: 1222 | dependencies: 1223 | reusify: 1.0.4 1224 | 1225 | fill-range@7.1.1: 1226 | dependencies: 1227 | to-regex-range: 5.0.1 1228 | 1229 | findup-sync@5.0.0: 1230 | dependencies: 1231 | detect-file: 1.0.0 1232 | is-glob: 4.0.3 1233 | micromatch: 4.0.8 1234 | resolve-dir: 1.0.1 1235 | 1236 | fined@2.0.0: 1237 | dependencies: 1238 | expand-tilde: 2.0.2 1239 | is-plain-object: 5.0.0 1240 | object.defaults: 1.1.0 1241 | object.pick: 1.3.0 1242 | parse-filepath: 1.0.2 1243 | 1244 | flagged-respawn@2.0.0: {} 1245 | 1246 | flush-write-stream@1.1.1: 1247 | dependencies: 1248 | inherits: 2.0.4 1249 | readable-stream: 2.3.8 1250 | 1251 | for-in@1.0.2: {} 1252 | 1253 | for-own@1.0.0: 1254 | dependencies: 1255 | for-in: 1.0.2 1256 | 1257 | fs-mkdirp-stream@1.0.0: 1258 | dependencies: 1259 | graceful-fs: 4.2.11 1260 | through2: 2.0.5 1261 | 1262 | fs-mkdirp-stream@2.0.1: 1263 | dependencies: 1264 | graceful-fs: 4.2.11 1265 | streamx: 2.22.0 1266 | 1267 | fs.realpath@1.0.0: {} 1268 | 1269 | fsevents@2.3.3: 1270 | optional: true 1271 | 1272 | function-bind@1.1.2: {} 1273 | 1274 | get-caller-file@2.0.5: {} 1275 | 1276 | get-intrinsic@1.2.7: 1277 | dependencies: 1278 | call-bind-apply-helpers: 1.0.2 1279 | es-define-property: 1.0.1 1280 | es-errors: 1.3.0 1281 | es-object-atoms: 1.1.1 1282 | function-bind: 1.1.2 1283 | get-proto: 1.0.1 1284 | gopd: 1.2.0 1285 | has-symbols: 1.1.0 1286 | hasown: 2.0.2 1287 | math-intrinsics: 1.1.0 1288 | 1289 | get-proto@1.0.1: 1290 | dependencies: 1291 | dunder-proto: 1.0.1 1292 | es-object-atoms: 1.1.1 1293 | 1294 | glob-parent@3.1.0: 1295 | dependencies: 1296 | is-glob: 3.1.0 1297 | path-dirname: 1.0.2 1298 | 1299 | glob-parent@5.1.2: 1300 | dependencies: 1301 | is-glob: 4.0.3 1302 | 1303 | glob-parent@6.0.2: 1304 | dependencies: 1305 | is-glob: 4.0.3 1306 | 1307 | glob-stream@6.1.0: 1308 | dependencies: 1309 | extend: 3.0.2 1310 | glob: 7.2.3 1311 | glob-parent: 3.1.0 1312 | is-negated-glob: 1.0.0 1313 | ordered-read-streams: 1.0.1 1314 | pumpify: 1.5.1 1315 | readable-stream: 2.3.8 1316 | remove-trailing-separator: 1.1.0 1317 | to-absolute-glob: 2.0.2 1318 | unique-stream: 2.3.1 1319 | 1320 | glob-stream@8.0.2: 1321 | dependencies: 1322 | '@gulpjs/to-absolute-glob': 4.0.0 1323 | anymatch: 3.1.3 1324 | fastq: 1.19.0 1325 | glob-parent: 6.0.2 1326 | is-glob: 4.0.3 1327 | is-negated-glob: 1.0.0 1328 | normalize-path: 3.0.0 1329 | streamx: 2.22.0 1330 | 1331 | glob-watcher@6.0.0: 1332 | dependencies: 1333 | async-done: 2.0.0 1334 | chokidar: 3.6.0 1335 | 1336 | glob@7.2.3: 1337 | dependencies: 1338 | fs.realpath: 1.0.0 1339 | inflight: 1.0.6 1340 | inherits: 2.0.4 1341 | minimatch: 3.1.2 1342 | once: 1.4.0 1343 | path-is-absolute: 1.0.1 1344 | 1345 | global-modules@1.0.0: 1346 | dependencies: 1347 | global-prefix: 1.0.2 1348 | is-windows: 1.0.2 1349 | resolve-dir: 1.0.1 1350 | 1351 | global-prefix@1.0.2: 1352 | dependencies: 1353 | expand-tilde: 2.0.2 1354 | homedir-polyfill: 1.0.3 1355 | ini: 1.3.8 1356 | is-windows: 1.0.2 1357 | which: 1.3.1 1358 | 1359 | glogg@2.2.0: 1360 | dependencies: 1361 | sparkles: 2.1.0 1362 | 1363 | gopd@1.2.0: {} 1364 | 1365 | graceful-fs@4.2.11: {} 1366 | 1367 | gulp-cli@3.0.0: 1368 | dependencies: 1369 | '@gulpjs/messages': 1.1.0 1370 | chalk: 4.1.2 1371 | copy-props: 4.0.0 1372 | gulplog: 2.2.0 1373 | interpret: 3.1.1 1374 | liftoff: 5.0.0 1375 | mute-stdout: 2.0.0 1376 | replace-homedir: 2.0.0 1377 | semver-greatest-satisfied-range: 2.0.0 1378 | string-width: 4.2.3 1379 | v8flags: 4.0.1 1380 | yargs: 16.2.0 1381 | 1382 | gulp-terser@2.1.0: 1383 | dependencies: 1384 | plugin-error: 1.0.1 1385 | terser: 5.39.0 1386 | through2: 4.0.2 1387 | vinyl-sourcemaps-apply: 0.2.1 1388 | 1389 | gulp-through2@1.1.0: 1390 | dependencies: 1391 | '@types/vinyl': 2.0.12 1392 | plugin-error: 2.0.1 1393 | vinyl: 3.0.0 1394 | 1395 | gulp-typescript@6.0.0-alpha.1(typescript@5.7.3): 1396 | dependencies: 1397 | ansi-colors: 4.1.3 1398 | plugin-error: 1.0.1 1399 | source-map: 0.7.4 1400 | through2: 3.0.2 1401 | typescript: 5.7.3 1402 | vinyl: 2.2.1 1403 | vinyl-fs: 3.0.3 1404 | 1405 | gulp@5.0.0: 1406 | dependencies: 1407 | glob-watcher: 6.0.0 1408 | gulp-cli: 3.0.0 1409 | undertaker: 2.0.0 1410 | vinyl-fs: 4.0.0 1411 | 1412 | gulplog@2.2.0: 1413 | dependencies: 1414 | glogg: 2.2.0 1415 | 1416 | has-flag@4.0.0: {} 1417 | 1418 | has-property-descriptors@1.0.2: 1419 | dependencies: 1420 | es-define-property: 1.0.1 1421 | 1422 | has-symbols@1.1.0: {} 1423 | 1424 | hasown@2.0.2: 1425 | dependencies: 1426 | function-bind: 1.1.2 1427 | 1428 | homedir-polyfill@1.0.3: 1429 | dependencies: 1430 | parse-passwd: 1.0.0 1431 | 1432 | iconv-lite@0.6.3: 1433 | dependencies: 1434 | safer-buffer: 2.1.2 1435 | 1436 | ieee754@1.2.1: {} 1437 | 1438 | inflight@1.0.6: 1439 | dependencies: 1440 | once: 1.4.0 1441 | wrappy: 1.0.2 1442 | 1443 | inherits@2.0.4: {} 1444 | 1445 | ini@1.3.8: {} 1446 | 1447 | interpret@3.1.1: {} 1448 | 1449 | is-absolute@1.0.0: 1450 | dependencies: 1451 | is-relative: 1.0.0 1452 | is-windows: 1.0.2 1453 | 1454 | is-binary-path@2.1.0: 1455 | dependencies: 1456 | binary-extensions: 2.3.0 1457 | 1458 | is-buffer@1.1.6: {} 1459 | 1460 | is-core-module@2.16.1: 1461 | dependencies: 1462 | hasown: 2.0.2 1463 | 1464 | is-extendable@1.0.1: 1465 | dependencies: 1466 | is-plain-object: 2.0.4 1467 | 1468 | is-extglob@2.1.1: {} 1469 | 1470 | is-fullwidth-code-point@3.0.0: {} 1471 | 1472 | is-glob@3.1.0: 1473 | dependencies: 1474 | is-extglob: 2.1.1 1475 | 1476 | is-glob@4.0.3: 1477 | dependencies: 1478 | is-extglob: 2.1.1 1479 | 1480 | is-negated-glob@1.0.0: {} 1481 | 1482 | is-number@7.0.0: {} 1483 | 1484 | is-plain-object@2.0.4: 1485 | dependencies: 1486 | isobject: 3.0.1 1487 | 1488 | is-plain-object@5.0.0: {} 1489 | 1490 | is-relative@1.0.0: 1491 | dependencies: 1492 | is-unc-path: 1.0.0 1493 | 1494 | is-unc-path@1.0.0: 1495 | dependencies: 1496 | unc-path-regex: 0.1.2 1497 | 1498 | is-utf8@0.2.1: {} 1499 | 1500 | is-valid-glob@1.0.0: {} 1501 | 1502 | is-windows@1.0.2: {} 1503 | 1504 | isarray@1.0.0: {} 1505 | 1506 | isexe@2.0.0: {} 1507 | 1508 | isobject@3.0.1: {} 1509 | 1510 | json-stable-stringify-without-jsonify@1.0.1: {} 1511 | 1512 | last-run@2.0.0: {} 1513 | 1514 | lazystream@1.0.1: 1515 | dependencies: 1516 | readable-stream: 2.3.8 1517 | 1518 | lead@1.0.0: 1519 | dependencies: 1520 | flush-write-stream: 1.1.1 1521 | 1522 | lead@4.0.0: {} 1523 | 1524 | liftoff@5.0.0: 1525 | dependencies: 1526 | extend: 3.0.2 1527 | findup-sync: 5.0.0 1528 | fined: 2.0.0 1529 | flagged-respawn: 2.0.0 1530 | is-plain-object: 5.0.0 1531 | rechoir: 0.8.0 1532 | resolve: 1.22.10 1533 | 1534 | map-cache@0.2.2: {} 1535 | 1536 | math-intrinsics@1.1.0: {} 1537 | 1538 | micromatch@4.0.8: 1539 | dependencies: 1540 | braces: 3.0.3 1541 | picomatch: 2.3.1 1542 | 1543 | minimatch@3.1.2: 1544 | dependencies: 1545 | brace-expansion: 1.1.11 1546 | 1547 | mute-stdout@2.0.0: {} 1548 | 1549 | normalize-path@2.1.1: 1550 | dependencies: 1551 | remove-trailing-separator: 1.1.0 1552 | 1553 | normalize-path@3.0.0: {} 1554 | 1555 | now-and-later@2.0.1: 1556 | dependencies: 1557 | once: 1.4.0 1558 | 1559 | now-and-later@3.0.0: 1560 | dependencies: 1561 | once: 1.4.0 1562 | 1563 | object-keys@1.1.1: {} 1564 | 1565 | object.assign@4.1.7: 1566 | dependencies: 1567 | call-bind: 1.0.8 1568 | call-bound: 1.0.3 1569 | define-properties: 1.2.1 1570 | es-object-atoms: 1.1.1 1571 | has-symbols: 1.1.0 1572 | object-keys: 1.1.1 1573 | 1574 | object.defaults@1.1.0: 1575 | dependencies: 1576 | array-each: 1.0.1 1577 | array-slice: 1.1.0 1578 | for-own: 1.0.0 1579 | isobject: 3.0.1 1580 | 1581 | object.pick@1.3.0: 1582 | dependencies: 1583 | isobject: 3.0.1 1584 | 1585 | once@1.4.0: 1586 | dependencies: 1587 | wrappy: 1.0.2 1588 | 1589 | ordered-read-streams@1.0.1: 1590 | dependencies: 1591 | readable-stream: 2.3.8 1592 | 1593 | parse-filepath@1.0.2: 1594 | dependencies: 1595 | is-absolute: 1.0.0 1596 | map-cache: 0.2.2 1597 | path-root: 0.1.1 1598 | 1599 | parse-passwd@1.0.0: {} 1600 | 1601 | path-dirname@1.0.2: {} 1602 | 1603 | path-is-absolute@1.0.1: {} 1604 | 1605 | path-parse@1.0.7: {} 1606 | 1607 | path-root-regex@0.1.2: {} 1608 | 1609 | path-root@0.1.1: 1610 | dependencies: 1611 | path-root-regex: 0.1.2 1612 | 1613 | picomatch@2.3.1: {} 1614 | 1615 | plugin-error@1.0.1: 1616 | dependencies: 1617 | ansi-colors: 1.1.0 1618 | arr-diff: 4.0.0 1619 | arr-union: 3.1.0 1620 | extend-shallow: 3.0.2 1621 | 1622 | plugin-error@2.0.1: 1623 | dependencies: 1624 | ansi-colors: 1.1.0 1625 | 1626 | process-nextick-args@2.0.1: {} 1627 | 1628 | pump@2.0.1: 1629 | dependencies: 1630 | end-of-stream: 1.4.4 1631 | once: 1.4.0 1632 | 1633 | pumpify@1.5.1: 1634 | dependencies: 1635 | duplexify: 3.7.1 1636 | inherits: 2.0.4 1637 | pump: 2.0.1 1638 | 1639 | readable-stream@2.3.8: 1640 | dependencies: 1641 | core-util-is: 1.0.3 1642 | inherits: 2.0.4 1643 | isarray: 1.0.0 1644 | process-nextick-args: 2.0.1 1645 | safe-buffer: 5.1.2 1646 | string_decoder: 1.1.1 1647 | util-deprecate: 1.0.2 1648 | 1649 | readable-stream@3.6.2: 1650 | dependencies: 1651 | inherits: 2.0.4 1652 | string_decoder: 1.3.0 1653 | util-deprecate: 1.0.2 1654 | 1655 | readdirp@3.6.0: 1656 | dependencies: 1657 | picomatch: 2.3.1 1658 | 1659 | rechoir@0.8.0: 1660 | dependencies: 1661 | resolve: 1.22.10 1662 | 1663 | remove-bom-buffer@3.0.0: 1664 | dependencies: 1665 | is-buffer: 1.1.6 1666 | is-utf8: 0.2.1 1667 | 1668 | remove-bom-stream@1.2.0: 1669 | dependencies: 1670 | remove-bom-buffer: 3.0.0 1671 | safe-buffer: 5.2.1 1672 | through2: 2.0.5 1673 | 1674 | remove-trailing-separator@1.1.0: {} 1675 | 1676 | replace-ext@1.0.1: {} 1677 | 1678 | replace-ext@2.0.0: {} 1679 | 1680 | replace-homedir@2.0.0: {} 1681 | 1682 | require-directory@2.1.1: {} 1683 | 1684 | resolve-dir@1.0.1: 1685 | dependencies: 1686 | expand-tilde: 2.0.2 1687 | global-modules: 1.0.0 1688 | 1689 | resolve-options@1.1.0: 1690 | dependencies: 1691 | value-or-function: 3.0.0 1692 | 1693 | resolve-options@2.0.0: 1694 | dependencies: 1695 | value-or-function: 4.0.0 1696 | 1697 | resolve@1.22.10: 1698 | dependencies: 1699 | is-core-module: 2.16.1 1700 | path-parse: 1.0.7 1701 | supports-preserve-symlinks-flag: 1.0.0 1702 | 1703 | reusify@1.0.4: {} 1704 | 1705 | safe-buffer@5.1.2: {} 1706 | 1707 | safe-buffer@5.2.1: {} 1708 | 1709 | safer-buffer@2.1.2: {} 1710 | 1711 | semver-greatest-satisfied-range@2.0.0: 1712 | dependencies: 1713 | sver: 1.8.4 1714 | 1715 | semver@6.3.1: 1716 | optional: true 1717 | 1718 | set-function-length@1.2.2: 1719 | dependencies: 1720 | define-data-property: 1.1.4 1721 | es-errors: 1.3.0 1722 | function-bind: 1.1.2 1723 | get-intrinsic: 1.2.7 1724 | gopd: 1.2.0 1725 | has-property-descriptors: 1.0.2 1726 | 1727 | source-map-support@0.5.21: 1728 | dependencies: 1729 | buffer-from: 1.1.2 1730 | source-map: 0.6.1 1731 | 1732 | source-map@0.5.7: {} 1733 | 1734 | source-map@0.6.1: {} 1735 | 1736 | source-map@0.7.4: {} 1737 | 1738 | sparkles@2.1.0: {} 1739 | 1740 | stream-composer@1.0.2: 1741 | dependencies: 1742 | streamx: 2.22.0 1743 | 1744 | stream-exhaust@1.0.2: {} 1745 | 1746 | stream-shift@1.0.3: {} 1747 | 1748 | streamx@2.22.0: 1749 | dependencies: 1750 | fast-fifo: 1.3.2 1751 | text-decoder: 1.2.3 1752 | optionalDependencies: 1753 | bare-events: 2.5.4 1754 | 1755 | string-width@4.2.3: 1756 | dependencies: 1757 | emoji-regex: 8.0.0 1758 | is-fullwidth-code-point: 3.0.0 1759 | strip-ansi: 6.0.1 1760 | 1761 | string_decoder@1.1.1: 1762 | dependencies: 1763 | safe-buffer: 5.1.2 1764 | 1765 | string_decoder@1.3.0: 1766 | dependencies: 1767 | safe-buffer: 5.2.1 1768 | 1769 | strip-ansi@6.0.1: 1770 | dependencies: 1771 | ansi-regex: 5.0.1 1772 | 1773 | supports-color@7.2.0: 1774 | dependencies: 1775 | has-flag: 4.0.0 1776 | 1777 | supports-preserve-symlinks-flag@1.0.0: {} 1778 | 1779 | sver@1.8.4: 1780 | optionalDependencies: 1781 | semver: 6.3.1 1782 | 1783 | teex@1.0.1: 1784 | dependencies: 1785 | streamx: 2.22.0 1786 | 1787 | terser@5.39.0: 1788 | dependencies: 1789 | '@jridgewell/source-map': 0.3.6 1790 | acorn: 8.14.0 1791 | commander: 2.20.3 1792 | source-map-support: 0.5.21 1793 | 1794 | text-decoder@1.2.3: 1795 | dependencies: 1796 | b4a: 1.6.7 1797 | 1798 | through2-filter@3.0.0: 1799 | dependencies: 1800 | through2: 2.0.5 1801 | xtend: 4.0.2 1802 | 1803 | through2@2.0.5: 1804 | dependencies: 1805 | readable-stream: 2.3.8 1806 | xtend: 4.0.2 1807 | 1808 | through2@3.0.2: 1809 | dependencies: 1810 | inherits: 2.0.4 1811 | readable-stream: 3.6.2 1812 | 1813 | through2@4.0.2: 1814 | dependencies: 1815 | readable-stream: 3.6.2 1816 | 1817 | to-absolute-glob@2.0.2: 1818 | dependencies: 1819 | is-absolute: 1.0.0 1820 | is-negated-glob: 1.0.0 1821 | 1822 | to-regex-range@5.0.1: 1823 | dependencies: 1824 | is-number: 7.0.0 1825 | 1826 | to-through@2.0.0: 1827 | dependencies: 1828 | through2: 2.0.5 1829 | 1830 | to-through@3.0.0: 1831 | dependencies: 1832 | streamx: 2.22.0 1833 | 1834 | typescript@5.7.3: {} 1835 | 1836 | unc-path-regex@0.1.2: {} 1837 | 1838 | undertaker-registry@2.0.0: {} 1839 | 1840 | undertaker@2.0.0: 1841 | dependencies: 1842 | bach: 2.0.1 1843 | fast-levenshtein: 3.0.0 1844 | last-run: 2.0.0 1845 | undertaker-registry: 2.0.0 1846 | 1847 | undici-types@6.20.0: {} 1848 | 1849 | unique-stream@2.3.1: 1850 | dependencies: 1851 | json-stable-stringify-without-jsonify: 1.0.1 1852 | through2-filter: 3.0.0 1853 | 1854 | util-deprecate@1.0.2: {} 1855 | 1856 | v8flags@4.0.1: {} 1857 | 1858 | value-or-function@3.0.0: {} 1859 | 1860 | value-or-function@4.0.0: {} 1861 | 1862 | vinyl-contents@2.0.0: 1863 | dependencies: 1864 | bl: 5.1.0 1865 | vinyl: 3.0.0 1866 | 1867 | vinyl-fs@3.0.3: 1868 | dependencies: 1869 | fs-mkdirp-stream: 1.0.0 1870 | glob-stream: 6.1.0 1871 | graceful-fs: 4.2.11 1872 | is-valid-glob: 1.0.0 1873 | lazystream: 1.0.1 1874 | lead: 1.0.0 1875 | object.assign: 4.1.7 1876 | pumpify: 1.5.1 1877 | readable-stream: 2.3.8 1878 | remove-bom-buffer: 3.0.0 1879 | remove-bom-stream: 1.2.0 1880 | resolve-options: 1.1.0 1881 | through2: 2.0.5 1882 | to-through: 2.0.0 1883 | value-or-function: 3.0.0 1884 | vinyl: 2.2.1 1885 | vinyl-sourcemap: 1.1.0 1886 | 1887 | vinyl-fs@4.0.0: 1888 | dependencies: 1889 | fs-mkdirp-stream: 2.0.1 1890 | glob-stream: 8.0.2 1891 | graceful-fs: 4.2.11 1892 | iconv-lite: 0.6.3 1893 | is-valid-glob: 1.0.0 1894 | lead: 4.0.0 1895 | normalize-path: 3.0.0 1896 | resolve-options: 2.0.0 1897 | stream-composer: 1.0.2 1898 | streamx: 2.22.0 1899 | to-through: 3.0.0 1900 | value-or-function: 4.0.0 1901 | vinyl: 3.0.0 1902 | vinyl-sourcemap: 2.0.0 1903 | 1904 | vinyl-sourcemap@1.1.0: 1905 | dependencies: 1906 | append-buffer: 1.0.2 1907 | convert-source-map: 1.9.0 1908 | graceful-fs: 4.2.11 1909 | normalize-path: 2.1.1 1910 | now-and-later: 2.0.1 1911 | remove-bom-buffer: 3.0.0 1912 | vinyl: 2.2.1 1913 | 1914 | vinyl-sourcemap@2.0.0: 1915 | dependencies: 1916 | convert-source-map: 2.0.0 1917 | graceful-fs: 4.2.11 1918 | now-and-later: 3.0.0 1919 | streamx: 2.22.0 1920 | vinyl: 3.0.0 1921 | vinyl-contents: 2.0.0 1922 | 1923 | vinyl-sourcemaps-apply@0.2.1: 1924 | dependencies: 1925 | source-map: 0.5.7 1926 | 1927 | vinyl@2.2.1: 1928 | dependencies: 1929 | clone: 2.1.2 1930 | clone-buffer: 1.0.0 1931 | clone-stats: 1.0.0 1932 | cloneable-readable: 1.1.3 1933 | remove-trailing-separator: 1.1.0 1934 | replace-ext: 1.0.1 1935 | 1936 | vinyl@3.0.0: 1937 | dependencies: 1938 | clone: 2.1.2 1939 | clone-stats: 1.0.0 1940 | remove-trailing-separator: 1.1.0 1941 | replace-ext: 2.0.0 1942 | teex: 1.0.1 1943 | 1944 | which@1.3.1: 1945 | dependencies: 1946 | isexe: 2.0.0 1947 | 1948 | wrap-ansi@7.0.0: 1949 | dependencies: 1950 | ansi-styles: 4.3.0 1951 | string-width: 4.2.3 1952 | strip-ansi: 6.0.1 1953 | 1954 | wrappy@1.0.2: {} 1955 | 1956 | xtend@4.0.2: {} 1957 | 1958 | y18n@5.0.8: {} 1959 | 1960 | yargs-parser@20.2.9: {} 1961 | 1962 | yargs@16.2.0: 1963 | dependencies: 1964 | cliui: 7.0.4 1965 | escalade: 3.2.0 1966 | get-caller-file: 2.0.5 1967 | require-directory: 2.1.1 1968 | string-width: 4.2.3 1969 | y18n: 5.0.8 1970 | yargs-parser: 20.2.9 1971 | -------------------------------------------------------------------------------- /src/functions.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | const checkRecursive = (el: Node) => { 4 | if(is(el, HTMLElement_)) { 5 | if(el[outSymbol]) { 6 | // Reattachment of an OutElement. 7 | addElement(el); 8 | } else { 9 | // Check if there is any inline attributes. 10 | each(targetEvents, e => { 11 | let onEventOut = on_ + e + out_ as TargetOnOutEvents; 12 | let attr = el.getAttribute(onEventOut); 13 | 14 | // Inline attribute translates to onEventOut handlers only if the latter is not set, 15 | // according to the native browser behaviors. 16 | if(attr && !manager(el)[onEventOut]) el[setAttribute_](onEventOut, attr); 17 | }); 18 | } 19 | each(el.childNodes, checkRecursive); 20 | } 21 | }; 22 | 23 | const manager = (el: HTMLElement) => el[outSymbol] = el[outSymbol] || {}; 24 | 25 | const addElement = (el: HTMLElement) => { 26 | manager(el); 27 | if(outList.includes(el)) return; 28 | outList.push(el); 29 | sortNeeded = true; 30 | }; 31 | 32 | const elementSort = (e1: Node, e2: Node) => { 33 | if(contains(e2, e1)) return 1; 34 | if(contains(e1, e2)) return -1; 35 | return 0; 36 | }; 37 | 38 | const processOut = (event: TouchEvent | PointerEvent) => { 39 | if(sortNeeded) { 40 | outList.sort(elementSort); 41 | sortNeeded = false; 42 | } 43 | let target = event[target_] as Node; 44 | 45 | // TouchEvent does not have 'relatedTarget' property and have to be handled separately. 46 | if(is(event, TouchEvent_)) { 47 | event = new TouchEvent_(event.type + out_, event as any); 48 | event[relatedTarget_] = target; 49 | } else { 50 | event = new (event.constructor as new (...args: any) => PointerEvent)(event.type + out_, 51 | Object_.assign({}, event, { [relatedTarget_]: target }) 52 | ); 53 | } 54 | event[stop_] = []; 55 | 56 | // Loops from top-down 57 | each(outList, el => { 58 | if(!contains(el, target) && !event[stop_].some(c => contains(c, el))) { 59 | el.dispatchEvent(event); 60 | } 61 | }); 62 | }; 63 | 64 | const eventPatchFactory = (func: Function) => function(this: TouchEvent | PointerEvent) { 65 | let ev = this, type = ev.type as TargetEvents; 66 | func[apply_](ev); 67 | if(targetOnOutEvents.has(on_ + type as any)) ev[stop_].push(ev[target_] as HTMLElement); 68 | }; 69 | 70 | const patch = (proto: T, method: K, factory: (org: T[K]) => T[K]) => 71 | proto[method] = factory(proto[method]); 72 | 73 | function attributeListener(this: HTMLElement, event: Event) { 74 | let listener = this[outSymbol][on_ + event.type as TargetOnOutEvents]; 75 | if(listener) listener[apply_](this, [event]); 76 | }; -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | /** 4 | * Keeps a list of all OutElements that are currently in the DOM, 5 | * ordered from top level element to deeper level elements. 6 | */ 7 | let outList: HTMLElement[] = []; 8 | 9 | let sortNeeded = false; 10 | 11 | /** 12 | * Create a virtual element for parsing inline event attribute. 13 | * It really doesn't matter what type of element we use here; 14 | * we use body just for reusing keyword. 15 | */ 16 | let virtual = document_.createElement(body_); 17 | 18 | each(targetEvents, event => { 19 | // Add top-level event listener. 20 | document_[addEventListener_](event, processOut as EventListener, { 21 | passive: true, 22 | /** 23 | * Use capture here, so that this listener runs before almost every other event listeners, 24 | * in order to prevent it from being blocked by event.stopPropagation(). 25 | * In the very unlikely event of the user define another capturing handler before this particular one, 26 | * and at the same time stops propagation, 27 | * I'm sure the user knows what is intended and therefore will not attempt to override the intention. 28 | */ 29 | capture: true 30 | }); 31 | 32 | // Create out-event attributes. 33 | let onEventOut = on_ + event + out_ as TargetOnOutEvents; 34 | Object_.defineProperty(HTMLElementPrototype, onEventOut, { 35 | get(this: HTMLElement) { return this[outSymbol][onEventOut]; }, 36 | set(this: HTMLElement, value: EventListenerOrEventListenerObject) { 37 | // Registering duplicate listener has no effect. 38 | this[addEventListener_](event + out_, attributeListener); 39 | this[outSymbol][onEventOut] = typeof value == "object" ? value.handleEvent : value; 40 | } 41 | }); 42 | }); 43 | 44 | // Patch prototypes. 45 | patch(HTMLElementPrototype, addEventListener_, 46 | // function keyword must be used here since we need the 'this' keyword. 47 | ael => function(this: HTMLElement, ...args: any) { 48 | if(targetOnOutEvents.has(on_ + args[0] as any)) addElement(this); 49 | ael[apply_](this, args); 50 | } 51 | ); 52 | patch(HTMLElementPrototype, setAttribute_, 53 | sa => function(this: HTMLElement, qualifiedName: string, value: string) { 54 | if(targetOnOutEvents.has(qualifiedName as any)) { 55 | // Parse the attribute using native mechanism, 56 | // in order to achieve consistent behavior regarding content-security-policy. 57 | // It doesn't really matter which event we use here; 58 | // we use onclick just for reusing keyword. 59 | sa[apply_](virtual, [on_ + click_, value]); 60 | this[qualifiedName as TargetOnOutEvents] = virtual[on_ + click_ as "onclick"] as EventListener; 61 | } else { 62 | sa[apply_](this, [qualifiedName, value]); 63 | } 64 | } 65 | ); 66 | patch(EventPrototype, stop_ + Propagation_ as any, eventPatchFactory); 67 | patch(EventPrototype, stop_ + "Immediate" + Propagation_ as any, eventPatchFactory); 68 | 69 | // Observe mutation of the entire document. 70 | new MutationObserver((list: MutationRecord[]) => { 71 | each(list, record => { 72 | each(record.addedNodes, checkRecursive); 73 | each(record.removedNodes, n => { 74 | if(is(n, HTMLElement_)) { 75 | outList = outList.filter(c => !contains(n, c)); 76 | } 77 | }); 78 | }); 79 | }).observe(document_.documentElement, { 80 | childList: true, 81 | subtree: true 82 | }); 83 | 84 | // Process contents before the current script tag, if any. 85 | checkRecursive(document_[body_]); -------------------------------------------------------------------------------- /src/shorthands.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | // These constants are defined mainly for shortening the transpiled result. 4 | 5 | const on_ = 'on'; 6 | const out_ = 'out'; 7 | const body_ = 'body'; 8 | const stop_ = 'stop'; 9 | const click_ = 'click'; 10 | const apply_ = 'apply'; 11 | const target_ = 'target'; 12 | const dataset_ = 'dataset'; 13 | const prototype_ = "prototype"; 14 | const Propagation_ = 'Propagation'; 15 | const setAttribute_ = "setAttribute"; 16 | const relatedTarget_ = 'relatedTarget'; 17 | const addEventListener_ = "addEventListener"; 18 | 19 | const outSymbol = Symbol(out_); 20 | 21 | const Object_ = Object; 22 | const document_ = document; 23 | const TouchEvent_: typeof TouchEvent = (typeof (TouchEvent) != "undefined" ? TouchEvent : undefined) as any; 24 | const HTMLElement_ = HTMLElement; 25 | const HTMLElementPrototype = HTMLElement_[prototype_]; 26 | const EventPrototype = Event[prototype_]; 27 | 28 | interface HTMLElement extends GlobalOutEventHandlers { 29 | /** An object containing the actual inline event listeners. */ 30 | [outSymbol]: GlobalOutEventHandlers; 31 | } 32 | 33 | const events: ReadonlyArray = [ 34 | click_, 'dbl' + click_ as 'dblclick', 35 | 'mousedown', 'mouseup', 36 | 'touchstart', 'touchend', 37 | 'pointerdown', 'pointerup' 38 | ]; 39 | const targetEvents: ReadonlySet = new Set(events); 40 | const targetOnOutEvents: ReadonlySet = new Set(events.map(e => on_ + e + out_ as TargetOnOutEvents)); 41 | 42 | const is = (a: any, b: new (...args: any) => T): a is T => !!b && (a instanceof b); 43 | const contains = (a: Node, b: Node) => a.contains(b); 44 | const each = (list: Iterable, action: (item: T) => void) => { 45 | for(let item of list) action(item); 46 | }; 47 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | 2 | type TargetMouseEvents = 'click' | 'dblclick' | 'mousedown' | 'mouseup'; 3 | type TargetTouchEvents = 'touchstart' | 'touchend'; 4 | type TargetPointerEvents = 'pointerdown' | 'pointerup'; 5 | type TargetEvents = TargetMouseEvents | TargetTouchEvents | TargetPointerEvents; 6 | 7 | type TargetOnOutEvents = `on${TargetEvents}out`; 8 | 9 | type GlobalOutEventHandlers = { [e in TargetOnOutEvents]: EventListener }; 10 | 11 | interface OutEvent { 12 | stop: HTMLElement[]; 13 | } 14 | 15 | interface MouseEvent extends OutEvent { } 16 | interface TouchEvent extends OutEvent { 17 | relatedTarget: EventTarget; 18 | } 19 | -------------------------------------------------------------------------------- /test/clickout-event.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const on_ = 'on'; 3 | const out_ = 'out'; 4 | const body_ = 'body'; 5 | const stop_ = 'stop'; 6 | const click_ = 'click'; 7 | const apply_ = 'apply'; 8 | const target_ = 'target'; 9 | const dataset_ = 'dataset'; 10 | const prototype_ = "prototype"; 11 | const Propagation_ = 'Propagation'; 12 | const setAttribute_ = "setAttribute"; 13 | const relatedTarget_ = 'relatedTarget'; 14 | const addEventListener_ = "addEventListener"; 15 | const outSymbol = Symbol(out_); 16 | const Object_ = Object; 17 | const document_ = document; 18 | const TouchEvent_ = (typeof (TouchEvent) != "undefined" ? TouchEvent : undefined); 19 | const HTMLElement_ = HTMLElement; 20 | const HTMLElementPrototype = HTMLElement_[prototype_]; 21 | const EventPrototype = Event[prototype_]; 22 | const events = [ 23 | click_, 'dbl' + click_, 24 | 'mousedown', 'mouseup', 25 | 'touchstart', 'touchend', 26 | 'pointerdown', 'pointerup' 27 | ]; 28 | const targetEvents = new Set(events); 29 | const targetOnOutEvents = new Set(events.map(e => on_ + e + out_)); 30 | const is = (a, b) => !!b && (a instanceof b); 31 | const contains = (a, b) => a.contains(b); 32 | const each = (list, action) => { 33 | for (let item of list) 34 | action(item); 35 | }; 36 | const checkRecursive = (el) => { 37 | if (is(el, HTMLElement_)) { 38 | if (el[outSymbol]) { 39 | addElement(el); 40 | } 41 | else { 42 | each(targetEvents, e => { 43 | let onEventOut = on_ + e + out_; 44 | let attr = el.getAttribute(onEventOut); 45 | if (attr && !manager(el)[onEventOut]) 46 | el[setAttribute_](onEventOut, attr); 47 | }); 48 | } 49 | each(el.childNodes, checkRecursive); 50 | } 51 | }; 52 | const manager = (el) => el[outSymbol] = el[outSymbol] || {}; 53 | const addElement = (el) => { 54 | manager(el); 55 | if (outList.includes(el)) 56 | return; 57 | outList.push(el); 58 | sortNeeded = true; 59 | }; 60 | const elementSort = (e1, e2) => { 61 | if (contains(e2, e1)) 62 | return 1; 63 | if (contains(e1, e2)) 64 | return -1; 65 | return 0; 66 | }; 67 | const processOut = (event) => { 68 | if (sortNeeded) { 69 | outList.sort(elementSort); 70 | sortNeeded = false; 71 | } 72 | let target = event[target_]; 73 | if (is(event, TouchEvent_)) { 74 | event = new TouchEvent_(event.type + out_, event); 75 | event[relatedTarget_] = target; 76 | } 77 | else { 78 | event = new event.constructor(event.type + out_, Object_.assign({}, event, { [relatedTarget_]: target })); 79 | } 80 | event[stop_] = []; 81 | each(outList, el => { 82 | if (!contains(el, target) && !event[stop_].some(c => contains(c, el))) { 83 | el.dispatchEvent(event); 84 | } 85 | }); 86 | }; 87 | const eventPatchFactory = (func) => function () { 88 | let ev = this, type = ev.type; 89 | func[apply_](ev); 90 | if (targetOnOutEvents.has(on_ + type)) 91 | ev[stop_].push(ev[target_]); 92 | }; 93 | const patch = (proto, method, factory) => proto[method] = factory(proto[method]); 94 | function attributeListener(event) { 95 | let listener = this[outSymbol][on_ + event.type]; 96 | if (listener) 97 | listener[apply_](this, [event]); 98 | } 99 | ; 100 | let outList = []; 101 | let sortNeeded = false; 102 | let virtual = document_.createElement(body_); 103 | each(targetEvents, event => { 104 | document_[addEventListener_](event, processOut, { 105 | passive: true, 106 | capture: true 107 | }); 108 | let onEventOut = on_ + event + out_; 109 | Object_.defineProperty(HTMLElementPrototype, onEventOut, { 110 | get() { return this[outSymbol][onEventOut]; }, 111 | set(value) { 112 | this[addEventListener_](event + out_, attributeListener); 113 | this[outSymbol][onEventOut] = typeof value == "object" ? value.handleEvent : value; 114 | } 115 | }); 116 | }); 117 | patch(HTMLElementPrototype, addEventListener_, ael => function (...args) { 118 | if (targetOnOutEvents.has(on_ + args[0])) 119 | addElement(this); 120 | ael[apply_](this, args); 121 | }); 122 | patch(HTMLElementPrototype, setAttribute_, sa => function (qualifiedName, value) { 123 | if (targetOnOutEvents.has(qualifiedName)) { 124 | sa[apply_](virtual, [on_ + click_, value]); 125 | this[qualifiedName] = virtual[on_ + click_]; 126 | } 127 | else { 128 | sa[apply_](this, [qualifiedName, value]); 129 | } 130 | }); 131 | patch(EventPrototype, stop_ + Propagation_, eventPatchFactory); 132 | patch(EventPrototype, stop_ + "Immediate" + Propagation_, eventPatchFactory); 133 | new MutationObserver((list) => { 134 | each(list, record => { 135 | each(record.addedNodes, checkRecursive); 136 | each(record.removedNodes, n => { 137 | if (is(n, HTMLElement_)) { 138 | outList = outList.filter(c => !contains(n, c)); 139 | } 140 | }); 141 | }); 142 | }).observe(document_.documentElement, { 143 | childList: true, 144 | subtree: true 145 | }); 146 | checkRecursive(document_[body_]); 147 | -------------------------------------------------------------------------------- /test/html.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Vanilla HTML Test 6 | 7 | 8 | 14 | 15 | 16 | 17 | 18 |
 
19 |
 
20 |
 
21 |
 
22 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /test/javascript.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Vanilla JavaScript Test 6 | 7 | 8 | 14 | 15 | 16 | 17 | 18 |
 
19 |
 
20 |
 
21 |
 
22 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /test/jquery.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | jQuery Test 6 | 7 | 8 | 14 | 15 | 16 | 17 | 18 | 19 |
 
20 |
 
21 |
 
22 |
 
23 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /test/nested.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Vanilla HTML Test 6 | 7 | 8 | 14 | 15 | 16 | 17 | 18 |
19 |
20 |
 
21 |
22 |
23 | 24 |
25 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /test/vue.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Vue.js Test 6 | 7 | 8 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |
 
21 |
 
22 |
 
23 |
 
24 |
25 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "lib": ["ESNext", "DOM", "DOM.Iterable"], 5 | "strict": true, 6 | "removeComments": true, 7 | "outFile": "clickout-event.js" 8 | }, 9 | "include": [ 10 | "src/**/*.ts" 11 | ] 12 | } --------------------------------------------------------------------------------