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 CHANGED
@@ -1,5 +1,5 @@
1
- "use strict";var te=Object.create;var x=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var ne=Object.getOwnPropertyNames;var se=Object.getPrototypeOf,oe=Object.prototype.hasOwnProperty;var ie=(e,r)=>{for(var t in r)x(e,t,{get:r[t],enumerable:!0})},_=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of ne(r))!oe.call(e,s)&&s!==t&&x(e,s,{get:()=>r[s],enumerable:!(n=re(r,s))||n.enumerable});return e};var b=(e,r,t)=>(t=e!=null?te(se(e)):{},_(r||!e||!e.__esModule?x(t,"default",{value:e,enumerable:!0}):t,e)),ae=e=>_(x({},"__esModule",{value:!0}),e);var me={};ie(me,{default:()=>B});module.exports=ae(me);var c=require("fs"),N=require("http"),m=require("path"),V=b(require("get-port"),1),H=b(require("open"),1),S=b(require("picocolors"),1),W=b(require("serve-handler"),1),q=require("vite"),z=require("websocket");var f=class{constructor(r){this.config=r;this.addHomepageMeta(),this.maxKeyLength=Math.max(...Object.keys(this.config).map(t=>t.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,t){t=Array.isArray(t)?t.join(" "):t===!0?"":t,this.header.push(`// @${r}${this.addSpaces(r)}${t}`)}generate(){for(let[r,t]of Object.entries(this.config))if(Array.isArray(t))t.forEach(n=>this.addMetadata(r,n));else{if(t===void 0)continue;this.addMetadata(r,t)}return["// ==UserScript==",...this.header,"// ==/UserScript=="].join(`
2
- `)}};var O=require("path"),E=require("url"),pe={},P=(0,O.dirname)((0,E.fileURLToPath)(pe.url)),v="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 U=class{styles=new Map;add(r,t){return this.styles.set(r,t.replace(`
3
- `,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(r){let t=[];for(let n of r){let s=this.styles.get(n);s&&t.push([n,s])}this.styles.clear(),t.forEach(n=>this.styles.set(...n))}},j=new U;var k=require("vite");function G(e){return[...new Set(Array.isArray(e)?e:e?[e]:[])]}async function $({minify:e,file:r,name:t,loader:n}){let{code:s}=await(0,k.transformWithEsbuild)(r,t,{minify:e,loader:n,sourcemap:!1,legalComments:"none"});return s}function A(e){let r=[];for(let t of g)e.indexOf(t)!==-1&&r.push(t);return r}function B(e){try{let r,t,n=null,s=(0,q.createLogger)("info",{prefix:`[${v}]`,allowClearScreen:!0}),h=(0,N.createServer)((o,i)=>(0,W.default)(o,i,{public:r.build.outDir})),K=z.server;return new K({httpServer:h}).on("request",o=>{n=o.accept(null,o.origin)}),{name:v,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){r=o,t=o.build.watch??!1,e.entry=(0,m.resolve)(o.root,e.entry),Array.from(["match","require","include","exclude","resource","connect"]).forEach(i=>{let a=e.header[i];e.header[i]=G(a)}),e.server={port:await(0,V.default)(),open:!1,...e.server}},async transform(o,i){let a=o;if(C.test(i)){let p=await $({minify:!t,file:a,name:i,loader:"css"});a=j.add(i,p)}return 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 p=Object.keys(a.modules).filter(u=>C.test(u));p.length&&j.merge(p)}},async writeBundle(o,i){let{open:a,port:p}=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 y=r.root,w=r.build.outDir,M=(0,m.resolve)(y,w,d),Y=(0,m.resolve)(y,w,I),Q=(0,m.resolve)(y,w,F),X=(0,m.resolve)(y,w,J),L=(0,m.resolve)(P,`ws-${u}.js`);try{let l=(0,c.readFileSync)(M,"utf8");if(l=l.replace(R,`${j.inject()}`),l=await $({minify:!t,file:l,name:d,loader:"js"}),e.header.grant=G(t?g:[...A(l),...e.header.grant??[]]),t){let Z=(0,c.readFileSync)((0,m.resolve)(P,"ws.js"),"utf8"),ee=await $({minify:!t,file:Z.replace("__WS__",`ws://localhost:${p}`),name:L,loader:"js"});(0,c.writeFileSync)(L,ee),(0,c.writeFileSync)(Q,new f({...e.header,require:[...e.header.require??[],"file://"+L,"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}
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(t&&!h.listening){let d=`http://localhost:${p}`;h.listen(p,()=>{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 t||(h.close(),process.exit(0))},buildEnd(){t&&(s.clearScreen("info"),n&&n.sendUTF(JSON.stringify({message:"reload"})))}}}catch(r){return console.error(r),{name:v}}}
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}}}
@@ -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 g}from"fs";import{createServer as I}from"http";import{resolve as p}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(o=>this.addMetadata(r,o));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)),x="vite-userscript-plugin",M='console.warn("__STYLE__")',F=new RegExp(/\.(t|j)sx?$/),L=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);var P=class{styles=new Map;add(r,e){return this.styles.set(r,e.replace(`
3
- `,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(r){let e=[];for(let o of r){let l=this.styles.get(o);l&&e.push([o,l])}this.styles.clear(),e.forEach(o=>this.styles.set(...o))}},b=new P;import{transformWithEsbuild as K}from"vite";function R(t){return[...new Set(Array.isArray(t)?t:t?[t]:[])]}async function v({minify:t,file:r,name:e,loader:o}){let{code:l}=await K(r,e,{minify:t,loader:o,sourcemap:!1,legalComments:"none"});return l}function T(t){let r=[];for(let e of f)t.indexOf(e)!==-1&&r.push(e);return r}function ee(t){try{let r,e,o=null,l=X("info",{prefix:`[${x}]`,allowClearScreen:!0}),h=I((n,s)=>Q(n,s,{public:r.build.outDir})),O=Z;return new O({httpServer:h}).on("request",n=>{o=n.accept(null,n.origin)}),{name:x,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(n){r=n,e=n.build.watch??!1,t.entry=p(n.root,t.entry),Array.from(["match","require","include","exclude","resource","connect"]).forEach(s=>{let i=t.header[s];t.header[s]=R(i)}),t.server={port:await J(),open:!1,...t.server}},async transform(n,s){let i=n;if(L.test(s)){let c=await v({minify:!e,file:i,name:s,loader:"css"});i=b.add(s,c)}return s.includes(t.entry)&&(i=n+M),{code:i,map:null}},generateBundle(n,s){for(let i of Object.values(s)){if(i.type==="asset")continue;let c=Object.keys(i.modules).filter(m=>L.test(m));c.length&&b.merge(c)}},async writeBundle(n,s){let{open:i,port:c}=t.server,m=n.sanitizeFileName(t.header.name),E=`${m}.user.js`,U=`${m}.proxy.user.js`,D=`${m}.meta.js`;for(let[u]of Object.entries(s))if(F.test(u)){let y=r.root,w=r.build.outDir,j=p(y,w,u),k=p(y,w,E),A=p(y,w,U),N=p(y,w,D),$=p(S,`ws-${m}.js`);try{let a=_(j,"utf8");if(a=a.replace(M,`${b.inject()}`),a=await v({minify:!e,file:a,name:u,loader:"js"}),t.header.grant=R(e?f:[...T(a),...t.header.grant??[]]),e){let V=_(p(S,"ws.js"),"utf8"),H=await v({minify:!e,file:V.replace("__WS__",`ws://localhost:${c}`),name:$,loader:"js"});g($,H),g(A,new d({...t.header,require:[...t.header.require??[],"file://"+$,"file://"+j]}).generate())}let G=new d(t.header).generate();g(j,a),g(N,G),g(k,`${G}
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
- ${a}`)}catch(a){console.log(a)}}if(e&&!h.listening){let u=`http://localhost:${c}`;h.listen(c,()=>{l.clearScreen("info"),l.info(C.bold(`${C.cyan(">>> [vite-userscript-plugin]")} ${C.gray(u)}`))}),i&&await Y(`${u}/${U}`)}else e||(h.close(),process.exit(0))},buildEnd(){e&&(l.clearScreen("info"),o&&o.sendUTF(JSON.stringify({message:"reload"})))}}}catch(r){return console.error(r),{name:x}}}export{ee as default};
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.1",
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.32.2",
61
- "tsup": "7.0.0",
62
- "turbo": "1.10.3",
63
- "typescript": "5.1.3",
64
- "vite": "4.3.9",
65
- "vite-plugin-dts": "2.3.0",
66
- "vitest": "0.32.2"
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"