vite-userscript-plugin 1.9.1 → 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +4 -4
- package/dist/index.d.cts +171 -0
- package/dist/index.js +4 -4
- package/package.json +8 -8
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";var te=Object.create;var
|
|
2
|
-
`)}};var O=require("path"),E=require("url"),pe={},
|
|
3
|
-
`,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(
|
|
1
|
+
"use strict";var te=Object.create;var b=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var ne=Object.getOwnPropertyNames;var se=Object.getPrototypeOf,oe=Object.prototype.hasOwnProperty;var ie=(e,t)=>{for(var r in t)b(e,r,{get:t[r],enumerable:!0})},_=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ne(t))!oe.call(e,s)&&s!==r&&b(e,s,{get:()=>t[s],enumerable:!(n=re(t,s))||n.enumerable});return e};var v=(e,t,r)=>(r=e!=null?te(se(e)):{},_(t||!e||!e.__esModule?b(r,"default",{value:e,enumerable:!0}):r,e)),ae=e=>_(b({},"__esModule",{value:!0}),e);var me={};ie(me,{default:()=>B});module.exports=ae(me);var c=require("fs"),N=require("http"),p=require("path"),V=v(require("get-port"),1),H=v(require("open"),1),S=v(require("picocolors"),1),W=v(require("serve-handler"),1),q=require("vite"),z=require("websocket");var f=class{constructor(t){this.config=t;this.addHomepageMeta(),this.maxKeyLength=Math.max(...Object.keys(this.config).map(r=>r.length))+1}header=[];maxKeyLength;addHomepageMeta(){let t=this.config.homepage??this.config.homepageURL;t&&(this.config.updateURL=new URL(`${this.config.name}.meta.js`,t).href,this.config.downloadURL=new URL(`${this.config.name}.user.js`,t).href)}addSpaces(t){return" ".repeat(this.maxKeyLength-t.length)}addMetadata(t,r){r=Array.isArray(r)?r.join(" "):r===!0?"":r,this.header.push(`// @${t}${this.addSpaces(t)}${r}`)}generate(){for(let[t,r]of Object.entries(this.config))if(Array.isArray(r))r.forEach(n=>this.addMetadata(t,n));else{if(r===void 0)continue;this.addMetadata(t,r)}return["// ==UserScript==",...this.header,"// ==/UserScript=="].join(`
|
|
2
|
+
`)}};var O=require("path"),E=require("url"),pe={},L=(0,O.dirname)((0,E.fileURLToPath)(pe.url)),j="vite-userscript-plugin",R='console.warn("__STYLE__")',D=new RegExp(/\.(t|j)sx?$/),C=new RegExp(/\.(s[ac]|c|le)ss$/),le=["setValue","getValue","deleteValue","listValues","setClipboard","addStyle","addElement","addValueChangeListener","removeValueChangeListener","registerMenuCommand","unregisterMenuCommand","download","getTab","getTabs","saveTab","openInTab","notification","getResourceURL","getResourceText","xmlhttpRequest","log","info"],ce=["unsafeWindow","window.onurlchange","window.focus","window.close"],g=le.map(e=>[`GM_${e}`,`GM.${e}`]).flat();g.push(...ce);var k=require("vite");function U(e){return[...new Set(Array.isArray(e)?e:e?[e]:[])]}async function h({minify:e,file:t,name:r,loader:n}){let{code:s}=await(0,k.transformWithEsbuild)(t,r,{minify:e,loader:n,sourcemap:!1,legalComments:"none"});return s}function A(e){let t=[];for(let r of g)e.indexOf(r)!==-1&&t.push(r);return t}var G=class{styles=new Map;async add(t,r,n){let s=await h({name:t,file:r,minify:n,loader:"css"});return this.styles.set(t,s.replace(`
|
|
3
|
+
`,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(t){let r=[];for(let n of t){let s=this.styles.get(n);s&&r.push([n,s])}this.styles.clear(),r.forEach(n=>this.styles.set(...n))}},$=new G;function B(e){try{let t,r,n=null,s=(0,q.createLogger)("info",{prefix:`[${j}]`,allowClearScreen:!0}),y=(0,N.createServer)((o,i)=>(0,W.default)(o,i,{public:t.build.outDir})),K=z.server;return new K({httpServer:y}).on("request",o=>{n=o.accept(null,o.origin)}),{name:j,apply:"build",config(){return{build:{target:"esnext",minify:!1,lib:{entry:e.entry,name:e.header.name,formats:["iife"],fileName:()=>`${e.header.name}.js`},rollupOptions:{output:{extend:!0}}}}},async configResolved(o){t=o,r=o.build.watch??!1,e.entry=(0,p.resolve)(o.root,e.entry),Array.from(["match","require","include","exclude","resource","connect"]).forEach(i=>{let a=e.header[i];e.header[i]=U(a)}),e.server={port:await(0,V.default)(),open:!1,...e.server}},async transform(o,i){let a=o;return C.test(i)&&(a=await $.add(i,a,!r)),i.includes(e.entry)&&(a=o+R),{code:a,map:null}},generateBundle(o,i){for(let a of Object.values(i)){if(a.type==="asset")continue;let m=Object.keys(a.modules).filter(u=>C.test(u));m.length&&$.merge(m)}},async writeBundle(o,i){let{open:a,port:m}=e.server,u=o.sanitizeFileName(e.header.name),I=`${u}.user.js`,F=`${u}.proxy.user.js`,J=`${u}.meta.js`;for(let[d]of Object.entries(i))if(D.test(d)){let w=t.root,x=t.build.outDir,M=(0,p.resolve)(w,x,d),Y=(0,p.resolve)(w,x,I),Q=(0,p.resolve)(w,x,F),X=(0,p.resolve)(w,x,J),P=(0,p.resolve)(L,`ws-${u}.js`);try{let l=(0,c.readFileSync)(M,"utf8");if(l=l.replace(R,`${$.inject()}`),l=await h({minify:!r,file:l,name:d,loader:"js"}),e.header.grant=U(r?g:[...A(l),...e.header.grant??[]]),r){let Z=(0,c.readFileSync)((0,p.resolve)(L,"ws.js"),"utf8"),ee=await h({minify:!r,file:Z.replace("__WS__",`ws://localhost:${m}`),name:P,loader:"js"});(0,c.writeFileSync)(P,ee),(0,c.writeFileSync)(Q,new f({...e.header,require:[...e.header.require??[],"file://"+P,"file://"+M]}).generate())}let T=new f(e.header).generate();(0,c.writeFileSync)(M,l),(0,c.writeFileSync)(X,T),(0,c.writeFileSync)(Y,`${T}
|
|
4
4
|
|
|
5
|
-
${l}`)}catch(l){console.log(l)}}if(
|
|
5
|
+
${l}`)}catch(l){console.log(l)}}if(r&&!y.listening){let d=`http://localhost:${m}`;y.listen(m,()=>{s.clearScreen("info"),s.info(S.default.bold(`${S.default.cyan(">>> [vite-userscript-plugin]")} ${S.default.gray(d)}`))}),a&&await(0,H.default)(`${d}/${F}`)}else r||(y.close(),process.exit(0))},buildEnd(){r&&(s.clearScreen("info"),n&&n.sendUTF(JSON.stringify({message:"reload"})))}}}catch(t){return console.error(t),{name:j}}}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { PluginOption } from 'vite';
|
|
2
|
+
|
|
3
|
+
declare const GM: readonly ["setValue", "getValue", "deleteValue", "listValues", "setClipboard", "addStyle", "addElement", "addValueChangeListener", "removeValueChangeListener", "registerMenuCommand", "unregisterMenuCommand", "download", "getTab", "getTabs", "saveTab", "openInTab", "notification", "getResourceURL", "getResourceText", "xmlhttpRequest", "log", "info"];
|
|
4
|
+
declare const GMwindow: readonly ["unsafeWindow", "window.onurlchange", "window.focus", "window.close"];
|
|
5
|
+
|
|
6
|
+
type RunAt = 'document-start' | 'document-body' | 'document-end' | 'document-idle' | 'context-menu';
|
|
7
|
+
type GMLiterals<T extends string> = [`GM_${T}` | `GM.${T}`];
|
|
8
|
+
type GMWindow = typeof GMwindow[number];
|
|
9
|
+
type Grants = GMWindow | GMLiterals<typeof GM[number]>[number];
|
|
10
|
+
type HeaderConfig = {
|
|
11
|
+
[property: string]: any;
|
|
12
|
+
/**
|
|
13
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:name
|
|
14
|
+
*/
|
|
15
|
+
name: string;
|
|
16
|
+
/**
|
|
17
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:namespace
|
|
18
|
+
*/
|
|
19
|
+
namespace?: string;
|
|
20
|
+
/**
|
|
21
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:copyright
|
|
22
|
+
*/
|
|
23
|
+
copyright?: string;
|
|
24
|
+
/**
|
|
25
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:version
|
|
26
|
+
*/
|
|
27
|
+
version: string;
|
|
28
|
+
/**
|
|
29
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:description
|
|
30
|
+
*/
|
|
31
|
+
description?: string;
|
|
32
|
+
/**
|
|
33
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:icon
|
|
34
|
+
*/
|
|
35
|
+
icon?: string;
|
|
36
|
+
/**
|
|
37
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:icon
|
|
38
|
+
*/
|
|
39
|
+
iconURL?: string;
|
|
40
|
+
/**
|
|
41
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:icon
|
|
42
|
+
*/
|
|
43
|
+
defaulticon?: string;
|
|
44
|
+
/**
|
|
45
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:icon64
|
|
46
|
+
*/
|
|
47
|
+
icon64?: string;
|
|
48
|
+
/**
|
|
49
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:icon64
|
|
50
|
+
*/
|
|
51
|
+
icon64URL?: string;
|
|
52
|
+
/**
|
|
53
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:grant
|
|
54
|
+
*/
|
|
55
|
+
grant?: Grants[];
|
|
56
|
+
/**
|
|
57
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:author
|
|
58
|
+
*/
|
|
59
|
+
author?: string;
|
|
60
|
+
/**
|
|
61
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:homepage
|
|
62
|
+
*/
|
|
63
|
+
homepage?: string;
|
|
64
|
+
/**
|
|
65
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:homepage
|
|
66
|
+
*/
|
|
67
|
+
homepageURL?: string;
|
|
68
|
+
/**
|
|
69
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:homepage
|
|
70
|
+
*/
|
|
71
|
+
website?: string;
|
|
72
|
+
/**
|
|
73
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:homepage
|
|
74
|
+
*/
|
|
75
|
+
source?: string;
|
|
76
|
+
/**
|
|
77
|
+
* @see https://www.tampermonkey.net/documentation.phpmeta:antifeature
|
|
78
|
+
*/
|
|
79
|
+
antifeature?: [type: string, description: string][];
|
|
80
|
+
/**
|
|
81
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:require
|
|
82
|
+
*/
|
|
83
|
+
require?: string[] | string;
|
|
84
|
+
/**
|
|
85
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:resource
|
|
86
|
+
*/
|
|
87
|
+
resource?: [key: string, value: string][];
|
|
88
|
+
/**
|
|
89
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:include
|
|
90
|
+
*/
|
|
91
|
+
include?: string[] | string;
|
|
92
|
+
/**
|
|
93
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:match
|
|
94
|
+
* @see https://violentmonkey.github.io/api/metadata-block/#match--exclude-match
|
|
95
|
+
*/
|
|
96
|
+
match: string[] | string;
|
|
97
|
+
/**
|
|
98
|
+
* @see https://violentmonkey.github.io/api/metadata-block/#match--exclude-match
|
|
99
|
+
*/
|
|
100
|
+
'exclude-match'?: string[] | string;
|
|
101
|
+
/**
|
|
102
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:exclude
|
|
103
|
+
*/
|
|
104
|
+
exclude?: string[] | string;
|
|
105
|
+
/**
|
|
106
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:run_at
|
|
107
|
+
*/
|
|
108
|
+
'run-at'?: RunAt;
|
|
109
|
+
/**
|
|
110
|
+
* @see https://www.tampermonkey.net/documentation.phpmeta:sandbox
|
|
111
|
+
*/
|
|
112
|
+
sandbox?: string;
|
|
113
|
+
/**
|
|
114
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:connect
|
|
115
|
+
*/
|
|
116
|
+
connect?: string[] | string;
|
|
117
|
+
/**
|
|
118
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:noframes
|
|
119
|
+
*/
|
|
120
|
+
noframes?: boolean;
|
|
121
|
+
/**
|
|
122
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:updateURL
|
|
123
|
+
*/
|
|
124
|
+
updateURL?: string;
|
|
125
|
+
/**
|
|
126
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:downloadURL
|
|
127
|
+
*/
|
|
128
|
+
downloadURL?: string;
|
|
129
|
+
/**
|
|
130
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:supportURL
|
|
131
|
+
*/
|
|
132
|
+
supportURL?: string;
|
|
133
|
+
/**
|
|
134
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:webRequest
|
|
135
|
+
*/
|
|
136
|
+
webRequest?: string[];
|
|
137
|
+
/**
|
|
138
|
+
* @see https://www.tampermonkey.net/documentation.php#meta:unwrap
|
|
139
|
+
*/
|
|
140
|
+
unwrap?: boolean;
|
|
141
|
+
};
|
|
142
|
+
interface ServerConfig {
|
|
143
|
+
/**
|
|
144
|
+
* {@link https://github.com/sindresorhus/get-port}
|
|
145
|
+
*/
|
|
146
|
+
port?: number;
|
|
147
|
+
/**
|
|
148
|
+
* @default false
|
|
149
|
+
*/
|
|
150
|
+
open?: boolean;
|
|
151
|
+
}
|
|
152
|
+
interface UserscriptPluginConfig {
|
|
153
|
+
/**
|
|
154
|
+
* Path of userscript entry.
|
|
155
|
+
*/
|
|
156
|
+
entry: string;
|
|
157
|
+
/**
|
|
158
|
+
* Userscript header config.
|
|
159
|
+
*
|
|
160
|
+
* @see https://www.tampermonkey.net/documentation.php
|
|
161
|
+
*/
|
|
162
|
+
header: HeaderConfig;
|
|
163
|
+
/**
|
|
164
|
+
* Server config.
|
|
165
|
+
*/
|
|
166
|
+
server?: ServerConfig;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
declare function UserscriptPlugin(config: UserscriptPluginConfig): PluginOption;
|
|
170
|
+
|
|
171
|
+
export { UserscriptPluginConfig, UserscriptPlugin as default };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{readFileSync as _,writeFileSync as
|
|
2
|
-
`)}};import{dirname as W}from"path";import{fileURLToPath as q}from"url";var S=W(q(import.meta.url)),
|
|
3
|
-
`,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(r){let e=[];for(let
|
|
1
|
+
import{readFileSync as _,writeFileSync as h}from"fs";import{createServer as I}from"http";import{resolve as c}from"path";import J from"get-port";import Y from"open";import C from"picocolors";import Q from"serve-handler";import{createLogger as X}from"vite";import{server as Z}from"websocket";var d=class{constructor(r){this.config=r;this.addHomepageMeta(),this.maxKeyLength=Math.max(...Object.keys(this.config).map(e=>e.length))+1}header=[];maxKeyLength;addHomepageMeta(){let r=this.config.homepage??this.config.homepageURL;r&&(this.config.updateURL=new URL(`${this.config.name}.meta.js`,r).href,this.config.downloadURL=new URL(`${this.config.name}.user.js`,r).href)}addSpaces(r){return" ".repeat(this.maxKeyLength-r.length)}addMetadata(r,e){e=Array.isArray(e)?e.join(" "):e===!0?"":e,this.header.push(`// @${r}${this.addSpaces(r)}${e}`)}generate(){for(let[r,e]of Object.entries(this.config))if(Array.isArray(e))e.forEach(n=>this.addMetadata(r,n));else{if(e===void 0)continue;this.addMetadata(r,e)}return["// ==UserScript==",...this.header,"// ==/UserScript=="].join(`
|
|
2
|
+
`)}};import{dirname as W}from"path";import{fileURLToPath as q}from"url";var S=W(q(import.meta.url)),b="vite-userscript-plugin",M='console.warn("__STYLE__")',F=new RegExp(/\.(t|j)sx?$/),P=new RegExp(/\.(s[ac]|c|le)ss$/),z=["setValue","getValue","deleteValue","listValues","setClipboard","addStyle","addElement","addValueChangeListener","removeValueChangeListener","registerMenuCommand","unregisterMenuCommand","download","getTab","getTabs","saveTab","openInTab","notification","getResourceURL","getResourceText","xmlhttpRequest","log","info"],B=["unsafeWindow","window.onurlchange","window.focus","window.close"],f=z.map(t=>[`GM_${t}`,`GM.${t}`]).flat();f.push(...B);import{transformWithEsbuild as K}from"vite";function L(t){return[...new Set(Array.isArray(t)?t:t?[t]:[])]}async function g({minify:t,file:r,name:e,loader:n}){let{code:a}=await K(r,e,{minify:t,loader:n,sourcemap:!1,legalComments:"none"});return a}function T(t){let r=[];for(let e of f)t.indexOf(e)!==-1&&r.push(e);return r}var R=class{styles=new Map;async add(r,e,n){let a=await g({name:r,file:e,minify:n,loader:"css"});return this.styles.set(r,a.replace(`
|
|
3
|
+
`,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(r){let e=[];for(let n of r){let a=this.styles.get(n);a&&e.push([n,a])}this.styles.clear(),e.forEach(n=>this.styles.set(...n))}},v=new R;function ee(t){try{let r,e,n=null,a=X("info",{prefix:`[${b}]`,allowClearScreen:!0}),y=I((s,o)=>Q(s,o,{public:r.build.outDir})),O=Z;return new O({httpServer:y}).on("request",s=>{n=s.accept(null,s.origin)}),{name:b,apply:"build",config(){return{build:{target:"esnext",minify:!1,lib:{entry:t.entry,name:t.header.name,formats:["iife"],fileName:()=>`${t.header.name}.js`},rollupOptions:{output:{extend:!0}}}}},async configResolved(s){r=s,e=s.build.watch??!1,t.entry=c(s.root,t.entry),Array.from(["match","require","include","exclude","resource","connect"]).forEach(o=>{let i=t.header[o];t.header[o]=L(i)}),t.server={port:await J(),open:!1,...t.server}},async transform(s,o){let i=s;return P.test(o)&&(i=await v.add(o,i,!e)),o.includes(t.entry)&&(i=s+M),{code:i,map:null}},generateBundle(s,o){for(let i of Object.values(o)){if(i.type==="asset")continue;let p=Object.keys(i.modules).filter(m=>P.test(m));p.length&&v.merge(p)}},async writeBundle(s,o){let{open:i,port:p}=t.server,m=s.sanitizeFileName(t.header.name),E=`${m}.user.js`,U=`${m}.proxy.user.js`,D=`${m}.meta.js`;for(let[u]of Object.entries(o))if(F.test(u)){let w=r.root,x=r.build.outDir,j=c(w,x,u),k=c(w,x,E),A=c(w,x,U),N=c(w,x,D),$=c(S,`ws-${m}.js`);try{let l=_(j,"utf8");if(l=l.replace(M,`${v.inject()}`),l=await g({minify:!e,file:l,name:u,loader:"js"}),t.header.grant=L(e?f:[...T(l),...t.header.grant??[]]),e){let V=_(c(S,"ws.js"),"utf8"),H=await g({minify:!e,file:V.replace("__WS__",`ws://localhost:${p}`),name:$,loader:"js"});h($,H),h(A,new d({...t.header,require:[...t.header.require??[],"file://"+$,"file://"+j]}).generate())}let G=new d(t.header).generate();h(j,l),h(N,G),h(k,`${G}
|
|
4
4
|
|
|
5
|
-
${
|
|
5
|
+
${l}`)}catch(l){console.log(l)}}if(e&&!y.listening){let u=`http://localhost:${p}`;y.listen(p,()=>{a.clearScreen("info"),a.info(C.bold(`${C.cyan(">>> [vite-userscript-plugin]")} ${C.gray(u)}`))}),i&&await Y(`${u}/${U}`)}else e||(y.close(),process.exit(0))},buildEnd(){e&&(a.clearScreen("info"),n&&n.sendUTF(JSON.stringify({message:"reload"})))}}}catch(r){return console.error(r),{name:b}}}export{ee as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vite-userscript-plugin",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -57,13 +57,13 @@
|
|
|
57
57
|
"@types/node": "18.15.3",
|
|
58
58
|
"@types/serve-handler": "6.1.1",
|
|
59
59
|
"@types/websocket": "1.0.5",
|
|
60
|
-
"@vitest/ui": "0.
|
|
61
|
-
"tsup": "7.
|
|
62
|
-
"turbo": "1.10.
|
|
63
|
-
"typescript": "5.1.
|
|
64
|
-
"vite": "4.
|
|
65
|
-
"vite-plugin-dts": "
|
|
66
|
-
"vitest": "0.
|
|
60
|
+
"@vitest/ui": "0.33.0",
|
|
61
|
+
"tsup": "7.1.0",
|
|
62
|
+
"turbo": "1.10.7",
|
|
63
|
+
"typescript": "5.1.6",
|
|
64
|
+
"vite": "4.4.2",
|
|
65
|
+
"vite-plugin-dts": "3.1.1",
|
|
66
|
+
"vitest": "0.33.0"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
69
|
"vite": ">=3.0.0"
|