vite-userscript-plugin 0.9.2 → 1.1.1
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 +28 -20
- package/dist/index.cjs +4 -4
- package/dist/index.d.ts +15 -6
- package/dist/index.js +4 -4
- package/package.json +8 -4
package/README.md
CHANGED
|
@@ -32,14 +32,14 @@ pnpm add vite-userscript-plugin -D
|
|
|
32
32
|
|
|
33
33
|
```js
|
|
34
34
|
import { defineConfig } from 'vite'
|
|
35
|
-
import
|
|
35
|
+
import Userscript from 'vite-userscript-plugin'
|
|
36
36
|
import { name, version } from './package.json'
|
|
37
37
|
|
|
38
38
|
export default defineConfig({
|
|
39
39
|
plugins: [
|
|
40
|
-
|
|
40
|
+
Userscript({
|
|
41
41
|
entry: 'src/index.ts',
|
|
42
|
-
|
|
42
|
+
header: {
|
|
43
43
|
name,
|
|
44
44
|
version,
|
|
45
45
|
match: [
|
|
@@ -67,25 +67,33 @@ export default defineConfig({
|
|
|
67
67
|
## Plugin Configuration
|
|
68
68
|
|
|
69
69
|
```ts
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
70
|
+
interface ServerConfig {
|
|
71
|
+
/**
|
|
72
|
+
* {@link https://github.com/sindresorhus/get-port}
|
|
73
|
+
*/
|
|
74
|
+
port?: number;
|
|
75
|
+
/**
|
|
76
|
+
* @default true
|
|
77
|
+
*/
|
|
78
|
+
open?: boolean;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
interface UserscriptPluginConfig {
|
|
82
|
+
/**
|
|
83
|
+
* Path of userscript entry.
|
|
84
|
+
*/
|
|
85
|
+
entry: string;
|
|
86
|
+
/**
|
|
87
|
+
* Userscript header config.
|
|
88
|
+
*/
|
|
89
|
+
header: HeaderConfig;
|
|
90
|
+
/**
|
|
91
|
+
* Server config.
|
|
92
|
+
*/
|
|
93
|
+
server?: ServerConfig;
|
|
86
94
|
}
|
|
87
95
|
```
|
|
88
96
|
|
|
89
97
|
## Example
|
|
90
98
|
|
|
91
|
-
See the [
|
|
99
|
+
See the [examples](https://github.com/crashmax-dev/vite-userscript-plugin/tree/master/examples) folder.
|
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`)}var
|
|
3
|
-
`,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(t){let r=[];for(let
|
|
1
|
+
"use strict";var Q=Object.create;var w=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Z=Object.getOwnPropertyNames;var ee=Object.getPrototypeOf,te=Object.prototype.hasOwnProperty;var re=(e,t)=>{for(var r in t)w(e,r,{get:t[r],enumerable:!0})},U=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Z(t))!te.call(e,s)&&s!==r&&w(e,s,{get:()=>t[s],enumerable:!(o=X(t,s))||o.enumerable});return e};var h=(e,t,r)=>(r=e!=null?Q(ee(e)):{},U(t||!e||!e.__esModule?w(r,"default",{value:e,enumerable:!0}):r,e)),ne=e=>U(w({},"__esModule",{value:!0}),e);var oe={};re(oe,{default:()=>N});module.exports=ne(oe);var k=h(require("get-port"),1),f=require("fs"),A=require("http"),c=require("path"),P=require("url"),D=h(require("open"),1),T=h(require("picocolors"),1),q=h(require("sanitize-filename"),1),H=h(require("serve-handler"),1),W=require("vite"),B=require("websocket");function j(e){let t=[],r=Object.keys(e),o=Math.max(...r.map(a=>a.length))+1,s=a=>" ".repeat(o-a.length),d=(a,l)=>{let n=typeof l=="boolean";n&&!l||(l=n?"":s(a)+l.toString(),t.push(`// @${a}${l}`))};for(let[a,l]of Object.entries(e))if(Array.isArray(l))l.forEach(n=>d(a,n));else{if(l===void 0)continue;d(a,l)}return["// ==UserScript==",...t,"// ==/UserScript=="].join(`
|
|
2
|
+
`)}function E({entry:e,header:t}){return{build:{lib:{entry:e,name:t.name,formats:["iife"],fileName:()=>`${t.name}.js`},rollupOptions:{output:{extend:!0}}}}}var O=new RegExp(/.(t|j)sx?/),C=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 L=require("vite");function $(e){return[...new Set(Array.isArray(e)?e:e?[e]:[])]}async function _({file:e,name:t,loader:r}){let{code:o}=await(0,L.transformWithEsbuild)(e,t,{loader:r,minify:!0});return o}function F(e){let t=[];for(let r of x)e.indexOf(r)!==-1&&t.push(r);return t}var R=class{styles=new Map;async add(t,r){let o=await _({file:t,name:r,loader:"css"});return this.styles.set(r,o.replace(`
|
|
3
|
+
`,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(t){let r=[];for(let o of t){let s=this.styles.get(o);!s||r.push([o,s])}this.styles.clear(),r.forEach(o=>this.styles.set(...o))}},M=new R;var V={};function N(e){let t,r,o=null,s=(0,W.createLogger)("info",{prefix:"[vite-userscript-plugin]",allowClearScreen:!0}),d=(0,A.createServer)((n,i)=>(0,H.default)(n,i,{public:t.build.outDir})),a=B.server;return new a({httpServer:d}).on("request",n=>{o=n.accept(null,n.origin)}),{name:"vite-userscript-plugin",apply:"build",config(){return E(e)},async configResolved(n){t=n,r=n.build.watch??!1,e.entry=(0,c.resolve)(n.root,e.entry),e.header.name=(0,q.default)(e.header.name),Array.from(["match","require","include","exclude","resource","connect"]).forEach(i=>{let u=e.header[i];Array.isArray(u)&&(e.header[i]=$(u))}),e.server={port:await(0,k.default)(),open:!0,...e.server}},async transform(n,i){let u=n;return C.test(i)&&(u=await M.add(n,i)),i.includes(e.entry)&&(u=n+"__STYLE__"),{code:u,map:null}},generateBundle(n,i){for(let[u,g]of Object.entries(i)){let m=Object.keys(g.modules).filter(y=>C.test(y));m.length>0&&M.merge(m)}},async writeBundle(n,i){let{open:u,port:g}=e.server,b=`${e.header.name}.proxy.user.js`;for(let[m]of Object.entries(i))if(O.test(m)){let y=t.root,G=t.build.outDir,z=`${e.header.name}.user.js`,S=(0,c.resolve)(y,G,m),K=(0,c.resolve)(y,G,b),Y=(0,c.resolve)(y,G,z),v=(0,c.resolve)((0,c.dirname)((0,P.fileURLToPath)(V.url)),`hot-reload-${e.header.name}.js`);try{let p=(0,f.readFileSync)(S,"utf8");if(r){let I=(0,f.readFileSync)((0,c.resolve)((0,c.dirname)((0,P.fileURLToPath)(V.url)),"hot-reload.js"),"utf8"),J=await _({file:I.replace("__WS__",`ws://localhost:${g}`),name:v,loader:"js"});(0,f.writeFileSync)(v,J),(0,f.writeFileSync)(K,j({...e.header,require:[...e.header.require,"file://"+v,"file://"+S]}))}p=p.replace("__STYLE__",`${M.inject()}`),p=await _({file:p,name:m,loader:"js"}),e.header.grant=$(r?x:[...F(p),...e.header.grant??[]]),(0,f.writeFileSync)(S,p),(0,f.writeFileSync)(Y,`${j(e.header)}
|
|
4
4
|
|
|
5
|
-
${
|
|
5
|
+
${p}`)}catch(p){console.log(p)}}if(r&&!d.listening){let m=`http://localhost:${g}`;d.listen(g,()=>{s.clearScreen("info"),s.info(T.default.blue(`Running at: ${T.default.gray(m)}`))}),u&&await(0,D.default)(`${m}/${b}`)}else r||(d.close(),process.exit(0))},buildEnd(){r&&(s.clearScreen("info"),o&&o.sendUTF(JSON.stringify({message:"reload"})))}}}0&&(module.exports={});
|
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ declare const grants: readonly ["unsafeWindow", "window.onurlchange", "window.fo
|
|
|
4
4
|
|
|
5
5
|
declare type RunAt = 'document-start' | 'document-body' | 'document-end' | 'document-idle' | 'context-menu';
|
|
6
6
|
declare type Grants = typeof grants[number];
|
|
7
|
-
declare type
|
|
7
|
+
declare type HeaderConfig = {
|
|
8
8
|
[property: string]: string | boolean | number | string[] | undefined;
|
|
9
9
|
/**
|
|
10
10
|
* The name of the script.
|
|
@@ -187,6 +187,16 @@ declare type MetadataConfig = {
|
|
|
187
187
|
*/
|
|
188
188
|
'run-at'?: RunAt;
|
|
189
189
|
};
|
|
190
|
+
interface ServerConfig {
|
|
191
|
+
/**
|
|
192
|
+
* {@link https://github.com/sindresorhus/get-port}
|
|
193
|
+
*/
|
|
194
|
+
port?: number;
|
|
195
|
+
/**
|
|
196
|
+
* @default true
|
|
197
|
+
*/
|
|
198
|
+
open?: boolean;
|
|
199
|
+
}
|
|
190
200
|
interface UserscriptPluginConfig {
|
|
191
201
|
/**
|
|
192
202
|
* Path of userscript entry.
|
|
@@ -195,14 +205,13 @@ interface UserscriptPluginConfig {
|
|
|
195
205
|
/**
|
|
196
206
|
* Userscript header config.
|
|
197
207
|
*/
|
|
198
|
-
|
|
208
|
+
header: HeaderConfig;
|
|
199
209
|
/**
|
|
200
|
-
*
|
|
201
|
-
* @default true
|
|
210
|
+
* Server config.
|
|
202
211
|
*/
|
|
203
|
-
|
|
212
|
+
server?: ServerConfig;
|
|
204
213
|
}
|
|
205
214
|
|
|
206
215
|
declare function UserscriptPlugin(config: UserscriptPluginConfig): PluginOption;
|
|
207
216
|
|
|
208
|
-
export {
|
|
217
|
+
export { UserscriptPluginConfig, UserscriptPlugin as default };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
`)}var
|
|
3
|
-
`,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(
|
|
1
|
+
import q from"get-port";import{readFileSync as T,writeFileSync as w}from"fs";import{createServer as H}from"http";import{dirname as U,resolve as f}from"path";import{fileURLToPath as E}from"url";import W from"open";import O from"picocolors";import B from"sanitize-filename";import N from"serve-handler";import{createLogger as z}from"vite";import{server as K}from"websocket";function S(e){let t=[],r=Object.keys(e),o=Math.max(...r.map(i=>i.length))+1,m=i=>" ".repeat(o-i.length),p=(i,a)=>{let n=typeof a=="boolean";n&&!a||(a=n?"":m(i)+a.toString(),t.push(`// @${i}${a}`))};for(let[i,a]of Object.entries(e))if(Array.isArray(a))a.forEach(n=>p(i,n));else{if(a===void 0)continue;p(i,a)}return["// ==UserScript==",...t,"// ==/UserScript=="].join(`
|
|
2
|
+
`)}function $({entry:e,header:t}){return{build:{lib:{entry:e,name:t.name,formats:["iife"],fileName:()=>`${t.name}.js`},rollupOptions:{output:{extend:!0}}}}}var R=new RegExp(/.(t|j)sx?/),v=new RegExp(/\.(s?css|sass)$/),h=["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 D}from"vite";function j(e){return[...new Set(Array.isArray(e)?e:e?[e]:[])]}async function y({file:e,name:t,loader:r}){let{code:o}=await D(e,t,{loader:r,minify:!0});return o}function P(e){let t=[];for(let r of h)e.indexOf(r)!==-1&&t.push(r);return t}var C=class{styles=new Map;async add(t,r){let o=await y({file:t,name:r,loader:"css"});return this.styles.set(r,o.replace(`
|
|
3
|
+
`,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(t){let r=[];for(let o of t){let m=this.styles.get(o);!m||r.push([o,m])}this.styles.clear(),r.forEach(o=>this.styles.set(...o))}},_=new C;function Y(e){let t,r,o=null,m=z("info",{prefix:"[vite-userscript-plugin]",allowClearScreen:!0}),p=H((n,s)=>N(n,s,{public:t.build.outDir})),i=K;return new i({httpServer:p}).on("request",n=>{o=n.accept(null,n.origin)}),{name:"vite-userscript-plugin",apply:"build",config(){return $(e)},async configResolved(n){t=n,r=n.build.watch??!1,e.entry=f(n.root,e.entry),e.header.name=B(e.header.name),Array.from(["match","require","include","exclude","resource","connect"]).forEach(s=>{let l=e.header[s];Array.isArray(l)&&(e.header[s]=j(l))}),e.server={port:await q(),open:!0,...e.server}},async transform(n,s){let l=n;return v.test(s)&&(l=await _.add(n,s)),s.includes(e.entry)&&(l=n+"__STYLE__"),{code:l,map:null}},generateBundle(n,s){for(let[l,d]of Object.entries(s)){let c=Object.keys(d.modules).filter(g=>v.test(g));c.length>0&&_.merge(c)}},async writeBundle(n,s){let{open:l,port:d}=e.server,x=`${e.header.name}.proxy.user.js`;for(let[c]of Object.entries(s))if(R.test(c)){let g=t.root,M=t.build.outDir,L=`${e.header.name}.user.js`,b=f(g,M,c),F=f(g,M,x),V=f(g,M,L),G=f(U(E(import.meta.url)),`hot-reload-${e.header.name}.js`);try{let u=T(b,"utf8");if(r){let k=T(f(U(E(import.meta.url)),"hot-reload.js"),"utf8"),A=await y({file:k.replace("__WS__",`ws://localhost:${d}`),name:G,loader:"js"});w(G,A),w(F,S({...e.header,require:[...e.header.require,"file://"+G,"file://"+b]}))}u=u.replace("__STYLE__",`${_.inject()}`),u=await y({file:u,name:c,loader:"js"}),e.header.grant=j(r?h:[...P(u),...e.header.grant??[]]),w(b,u),w(V,`${S(e.header)}
|
|
4
4
|
|
|
5
|
-
${
|
|
5
|
+
${u}`)}catch(u){console.log(u)}}if(r&&!p.listening){let c=`http://localhost:${d}`;p.listen(d,()=>{m.clearScreen("info"),m.info(O.blue(`Running at: ${O.gray(c)}`))}),l&&await W(`${c}/${x}`)}else r||(p.close(),process.exit(0))},buildEnd(){r&&(m.clearScreen("info"),o&&o.sendUTF(JSON.stringify({message:"reload"})))}}}export{Y as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vite-userscript-plugin",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -36,18 +36,22 @@
|
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@types/tampermonkey": "^4.0.5",
|
|
38
38
|
"get-port": "^6.1.2",
|
|
39
|
+
"open": "^8.4.0",
|
|
40
|
+
"picocolors": "^1.0.0",
|
|
39
41
|
"sanitize-filename": "^1.6.3",
|
|
42
|
+
"serve-handler": "^6.1.3",
|
|
40
43
|
"websocket": "^1.0.34"
|
|
41
44
|
},
|
|
42
45
|
"devDependencies": {
|
|
43
46
|
"@crashmax/prettier-config": "^2.0.3",
|
|
44
47
|
"@crashmax/tsconfig": "^1.0.2",
|
|
45
48
|
"@types/node": "^18.7.13",
|
|
49
|
+
"@types/serve-handler": "^6.1.1",
|
|
46
50
|
"@types/websocket": "^1.0.5",
|
|
47
51
|
"@vitest/ui": "^0.22.1",
|
|
48
|
-
"tsup": "^6.2.
|
|
52
|
+
"tsup": "^6.2.3",
|
|
49
53
|
"turbo": "^1.4.3",
|
|
50
|
-
"typescript": "^4.
|
|
54
|
+
"typescript": "^4.8.2",
|
|
51
55
|
"vite": "^3.0.9",
|
|
52
56
|
"vite-plugin-dts": "^1.4.1",
|
|
53
57
|
"vitest": "^0.22.1"
|
|
@@ -60,7 +64,7 @@
|
|
|
60
64
|
"dev": "tsup --watch",
|
|
61
65
|
"build": "tsup",
|
|
62
66
|
"test": "vitest",
|
|
63
|
-
"test:ui": "vitest --ui",
|
|
67
|
+
"test:ui": "vitest --ui --watch",
|
|
64
68
|
"examples:dev": "turbo run dev --filter='./examples/*'",
|
|
65
69
|
"examples:build": "turbo run build --filter='./examples/*'",
|
|
66
70
|
"format": "prettier --write --ignore-unknown **"
|