vite-userscript-plugin 1.1.2 → 1.2.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/README.md +12 -1
- package/dist/index.cjs +4 -4
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -73,7 +73,7 @@ interface ServerConfig {
|
|
|
73
73
|
*/
|
|
74
74
|
port?: number;
|
|
75
75
|
/**
|
|
76
|
-
* @default
|
|
76
|
+
* @default false
|
|
77
77
|
*/
|
|
78
78
|
open?: boolean;
|
|
79
79
|
}
|
|
@@ -97,3 +97,14 @@ interface UserscriptPluginConfig {
|
|
|
97
97
|
## Example
|
|
98
98
|
|
|
99
99
|
See the [examples](https://github.com/crashmax-dev/vite-userscript-plugin/tree/master/examples) folder.
|
|
100
|
+
|
|
101
|
+
## Used by
|
|
102
|
+
|
|
103
|
+
- [vite-userscript-template](https://github.com/crashmax-dev/vite-userscript-template)
|
|
104
|
+
- [netangels-userscript](https://github.com/crashmax-dev/netangels-userscript)
|
|
105
|
+
- [godev-code-highlight](https://github.com/crashmax-dev/godev-code-highlight)
|
|
106
|
+
- [beautifier-userscript](https://github.com/crashmax-dev/beautifier-userscript)
|
|
107
|
+
|
|
108
|
+
## License
|
|
109
|
+
|
|
110
|
+
[MIT](./LICENCE) © [crashmax](https://github.com/crashmax-dev)
|
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`)}function E({entry:e,header:
|
|
3
|
-
`,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(
|
|
1
|
+
"use strict";var Z=Object.create;var M=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,ne=Object.prototype.hasOwnProperty;var oe=(e,r)=>{for(var t in r)M(e,t,{get:r[t],enumerable:!0})},T=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of te(r))!ne.call(e,o)&&o!==t&&M(e,o,{get:()=>r[o],enumerable:!(n=ee(r,o))||n.enumerable});return e};var u=(e,r,t)=>(t=e!=null?Z(re(e)):{},T(r||!e||!e.__esModule?M(t,"default",{value:e,enumerable:!0}):t,e)),se=e=>T(M({},"__esModule",{value:!0}),e);var ie={};oe(ie,{default:()=>N});module.exports=se(ie);var D=u(require("get-port"),1),c=require("fs"),K=require("http"),a=require("path"),C=require("url"),q=u(require("open"),1),L=u(require("picocolors"),1),A=u(require("sanitize-filename"),1),H=u(require("serve-handler"),1),W=require("vite"),B=require("websocket");var g=class{constructor(r){this.config=r;this.downloadMeta(),this.configKeys=Object.keys(this.config),this.maxKeyLength=Math.max(...this.configKeys.map(t=>t.length))+1}header=[];configKeys;maxKeyLength;downloadMeta(){let{name:r,homepage:t,updateURL:n,downloadURL:o}=this.config;t&&!n&&!o&&(this.config.updateURL=new URL(`${r}.meta.js`,t).href,this.config.downloadURL=new URL(`${r}.user.js`,t).href)}addSpaces(r){return" ".repeat(this.maxKeyLength-r.length)}addMetadata(r,t){let n=typeof t=="boolean";n&&!t||(t=n?"":`${this.addSpaces(r)}${t}`,this.header.push(`// @${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
|
+
`)}};function E({entry:e,header:r}){return{build:{lib:{entry:e,name:r.name,formats:["iife"],fileName:()=>`${r.name}.js`},rollupOptions:{output:{extend:!0}}}}}var F=new RegExp(/.(t|j)sx?/),S=new RegExp(/\.(s?css|sass)$/),x=["unsafeWindow","window.onurlchange","window.focus","window.close","GM_setValue","GM_getValue","GM_deleteValue","GM_listValues","GM_setClipboard","GM_addStyle","GM_addElement","GM_addValueChangeListener","GM_removeValueChangeListener","GM_registerMenuCommand","GM_unregisterMenuCommand","GM_download","GM_getTab","GM_getTabs","GM_saveTab","GM_openInTab","GM_notification","GM_getResourceURL","GM_getResourceText","GM_xmlhttpRequest","GM_webRequest","GM_log","GM_info"];var O=require("vite");function R(e){return[...new Set(Array.isArray(e)?e:e?[e]:[])]}async function h({file:e,name:r,loader:t}){let{code:n}=await(0,O.transformWithEsbuild)(e,r,{loader:t,minify:!0});return n}function V(e){let r=[];for(let t of x)e.indexOf(t)!==-1&&r.push(t);return r}var $=class{styles=new Map;async add(r,t){let n=await h({file:r,name:t,loader:"css"});return this.styles.set(t,n.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 o=this.styles.get(n);!o||t.push([n,o])}this.styles.clear(),t.forEach(n=>this.styles.set(...n))}},b=new $;var k={};function N(e){let r,t,n=null,o=(0,W.createLogger)("info",{prefix:"[vite-userscript-plugin]",allowClearScreen:!0}),y=(0,K.createServer)((s,i)=>(0,H.default)(s,i,{public:r.build.outDir})),z=B.server;return new z({httpServer:y}).on("request",s=>{n=s.accept(null,s.origin)}),{name:"vite-userscript-plugin",apply:"build",config(){return E(e)},async configResolved(s){r=s,t=s.build.watch??!1,e.entry=(0,a.resolve)(s.root,e.entry),e.header.name=(0,A.default)(e.header.name),Array.from(["match","require","include","exclude","resource","connect"]).forEach(i=>{let d=e.header[i];e.header[i]=R(d)}),e.server={port:await(0,D.default)(),open:!1,...e.server}},async transform(s,i){let d=s;return S.test(i)&&(d=await b.add(s,i)),i.includes(e.entry)&&(d=s+"__STYLE__"),{code:d,map:null}},generateBundle(s,i){for(let[d,p]of Object.entries(i)){let f=Object.keys(p.modules).filter(v=>S.test(v));f.length&&b.merge(f)}},async writeBundle(s,i){let{open:d,port:p}=e.server,U=`${e.header.name}.user.js`,f=`${e.header.name}.proxy.user.js`,v=`${e.header.name}.meta.js`;for(let[m]of Object.entries(i))if(F.test(m)){let w=r.root,_=r.build.outDir,G=(0,a.resolve)(w,_,m),Y=(0,a.resolve)(w,_,U),I=(0,a.resolve)(w,_,f),J=(0,a.resolve)(w,_,v),j=(0,a.resolve)((0,a.dirname)((0,C.fileURLToPath)(k.url)),`hot-reload-${e.header.name}.js`);try{let l=(0,c.readFileSync)(G,"utf8");if(l=l.replace("__STYLE__",`${b.inject()}`),l=await h({file:l,name:m,loader:"js"}),e.header.grant=R(t?x:[...V(l),...e.header.grant??[]]),t){let Q=(0,c.readFileSync)((0,a.resolve)((0,a.dirname)((0,C.fileURLToPath)(k.url)),"hot-reload.js"),"utf8"),X=await h({file:Q.replace("__WS__",`ws://localhost:${p}`),name:j,loader:"js"});(0,c.writeFileSync)(j,X),(0,c.writeFileSync)(I,new g({...e.header,require:[...e.header.require,"file://"+j,"file://"+G]}).generate())}let P=new g(e.header).generate();(0,c.writeFileSync)(G,l),(0,c.writeFileSync)(J,P),(0,c.writeFileSync)(Y,`${P}
|
|
4
4
|
|
|
5
|
-
${
|
|
5
|
+
${l}`)}catch(l){console.log(l)}}if(t&&!y.listening){let m=`http://localhost:${p}`;y.listen(p,()=>{o.clearScreen("info"),o.info(L.default.blue(`Running at: ${L.default.gray(m)}`))}),d&&await(0,q.default)(`${m}/${f}`)}else t||(y.close(),process.exit(0))},buildEnd(){t&&(o.clearScreen("info"),n&&n.sendUTF(JSON.stringify({message:"reload"})))}}}0&&(module.exports={});
|
package/dist/index.d.ts
CHANGED
|
@@ -151,7 +151,7 @@ declare type HeaderConfig = {
|
|
|
151
151
|
* some powerful window functions. If no `@grant` tag is given TM guesses
|
|
152
152
|
* the scripts needs.
|
|
153
153
|
*/
|
|
154
|
-
grant?:
|
|
154
|
+
grant?: Grants[];
|
|
155
155
|
/**
|
|
156
156
|
* Defines the moment the script is injected. In opposition to other script
|
|
157
157
|
* handlers, `@run-at` defines the first possible moment a script wants to
|
|
@@ -193,7 +193,7 @@ interface ServerConfig {
|
|
|
193
193
|
*/
|
|
194
194
|
port?: number;
|
|
195
195
|
/**
|
|
196
|
-
* @default
|
|
196
|
+
* @default false
|
|
197
197
|
*/
|
|
198
198
|
open?: boolean;
|
|
199
199
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
`)}function
|
|
3
|
-
`,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(
|
|
1
|
+
import H from"get-port";import{readFileSync as P,writeFileSync as g}from"fs";import{createServer as W}from"http";import{dirname as T,resolve as c}from"path";import{fileURLToPath as E}from"url";import B from"open";import F from"picocolors";import N from"sanitize-filename";import z from"serve-handler";import{createLogger as Y}from"vite";import{server as I}from"websocket";var f=class{constructor(r){this.config=r;this.downloadMeta(),this.configKeys=Object.keys(this.config),this.maxKeyLength=Math.max(...this.configKeys.map(e=>e.length))+1}header=[];configKeys;maxKeyLength;downloadMeta(){let{name:r,homepage:e,updateURL:n,downloadURL:a}=this.config;e&&!n&&!a&&(this.config.updateURL=new URL(`${r}.meta.js`,e).href,this.config.downloadURL=new URL(`${r}.user.js`,e).href)}addSpaces(r){return" ".repeat(this.maxKeyLength-r.length)}addMetadata(r,e){let n=typeof e=="boolean";n&&!e||(e=n?"":`${this.addSpaces(r)}${e}`,this.header.push(`// @${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
|
+
`)}};function C({entry:t,header:r}){return{build:{lib:{entry:t,name:r.name,formats:["iife"],fileName:()=>`${r.name}.js`},rollupOptions:{output:{extend:!0}}}}}var L=new RegExp(/.(t|j)sx?/),G=new RegExp(/\.(s?css|sass)$/),_=["unsafeWindow","window.onurlchange","window.focus","window.close","GM_setValue","GM_getValue","GM_deleteValue","GM_listValues","GM_setClipboard","GM_addStyle","GM_addElement","GM_addValueChangeListener","GM_removeValueChangeListener","GM_registerMenuCommand","GM_unregisterMenuCommand","GM_download","GM_getTab","GM_getTabs","GM_saveTab","GM_openInTab","GM_notification","GM_getResourceURL","GM_getResourceText","GM_xmlhttpRequest","GM_webRequest","GM_log","GM_info"];import{transformWithEsbuild as A}from"vite";function j(t){return[...new Set(Array.isArray(t)?t:t?[t]:[])]}async function u({file:t,name:r,loader:e}){let{code:n}=await A(t,r,{loader:e,minify:!0});return n}function U(t){let r=[];for(let e of _)t.indexOf(e)!==-1&&r.push(e);return r}var S=class{styles=new Map;async add(r,e){let n=await u({file:r,name:e,loader:"css"});return this.styles.set(e,n.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))}},M=new S;function J(t){let r,e,n=null,a=Y("info",{prefix:"[vite-userscript-plugin]",allowClearScreen:!0}),h=W((o,s)=>z(o,s,{public:r.build.outDir})),O=I;return new O({httpServer:h}).on("request",o=>{n=o.accept(null,o.origin)}),{name:"vite-userscript-plugin",apply:"build",config(){return C(t)},async configResolved(o){r=o,e=o.build.watch??!1,t.entry=c(o.root,t.entry),t.header.name=N(t.header.name),Array.from(["match","require","include","exclude","resource","connect"]).forEach(s=>{let l=t.header[s];t.header[s]=j(l)}),t.server={port:await H(),open:!1,...t.server}},async transform(o,s){let l=o;return G.test(s)&&(l=await M.add(o,s)),s.includes(t.entry)&&(l=o+"__STYLE__"),{code:l,map:null}},generateBundle(o,s){for(let[l,m]of Object.entries(s)){let p=Object.keys(m.modules).filter(x=>G.test(x));p.length&&M.merge(p)}},async writeBundle(o,s){let{open:l,port:m}=t.server,R=`${t.header.name}.user.js`,p=`${t.header.name}.proxy.user.js`,x=`${t.header.name}.meta.js`;for(let[d]of Object.entries(s))if(L.test(d)){let y=r.root,w=r.build.outDir,b=c(y,w,d),V=c(y,w,R),k=c(y,w,p),D=c(y,w,x),v=c(T(E(import.meta.url)),`hot-reload-${t.header.name}.js`);try{let i=P(b,"utf8");if(i=i.replace("__STYLE__",`${M.inject()}`),i=await u({file:i,name:d,loader:"js"}),t.header.grant=j(e?_:[...U(i),...t.header.grant??[]]),e){let K=P(c(T(E(import.meta.url)),"hot-reload.js"),"utf8"),q=await u({file:K.replace("__WS__",`ws://localhost:${m}`),name:v,loader:"js"});g(v,q),g(k,new f({...t.header,require:[...t.header.require,"file://"+v,"file://"+b]}).generate())}let $=new f(t.header).generate();g(b,i),g(D,$),g(V,`${$}
|
|
4
4
|
|
|
5
|
-
${
|
|
5
|
+
${i}`)}catch(i){console.log(i)}}if(e&&!h.listening){let d=`http://localhost:${m}`;h.listen(m,()=>{a.clearScreen("info"),a.info(F.blue(`Running at: ${F.gray(d)}`))}),l&&await B(`${d}/${p}`)}else e||(h.close(),process.exit(0))},buildEnd(){e&&(a.clearScreen("info"),n&&n.sendUTF(JSON.stringify({message:"reload"})))}}}export{J as default};
|