vite-userscript-plugin 0.9.1 → 1.1.0
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 +33 -20
- package/dist/index.cjs +4 -4
- package/dist/index.d.ts +17 -3
- package/dist/index.js +4 -4
- package/package.json +12 -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,38 @@ 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;
|
|
94
|
+
/**
|
|
95
|
+
* Import all `@grant` in development mode.
|
|
96
|
+
* @default true
|
|
97
|
+
*/
|
|
98
|
+
autoGrants?: boolean;
|
|
86
99
|
}
|
|
87
100
|
```
|
|
88
101
|
|
|
89
102
|
## Example
|
|
90
103
|
|
|
91
|
-
See the [
|
|
104
|
+
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 J=Object.create;var x=Object.defineProperty;var Q=Object.getOwnPropertyDescriptor;var X=Object.getOwnPropertyNames;var Z=Object.getPrototypeOf,ee=Object.prototype.hasOwnProperty;var te=(e,t)=>{for(var r in t)x(e,r,{get:t[r],enumerable:!0})},O=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of X(t))!ee.call(e,o)&&o!==r&&x(e,o,{get:()=>t[o],enumerable:!(s=Q(t,o))||s.enumerable});return e};var M=(e,t,r)=>(r=e!=null?J(Z(e)):{},O(t||!e||!e.__esModule?x(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>O(x({},"__esModule",{value:!0}),e);var ne={};te(ne,{default:()=>H});module.exports=re(ne);var F=M(require("get-port"),1),f=require("fs"),q=require("http"),d=require("path"),P=require("url"),D=M(require("open"),1),T=M(require("picocolors"),1),V=M(require("sanitize-filename"),1),W=M(require("serve-handler"),1),A=require("vite"),B=require("websocket");function $(e){let t=[],r=Object.keys(e),s=Math.max(...r.map(i=>i.length))+1,o=i=>" ".repeat(s-i.length),g=(i,a)=>{let n=typeof a=="boolean";n&&!a||(a=n?"":o(i)+a.toString(),t.push(`// @${i}${a}`))};for(let[i,a]of Object.entries(e))if(Array.isArray(a))a.forEach(n=>g(i,n));else{if(a===void 0)continue;g(i,a)}return["// ==UserScript==",...t,"// ==/UserScript=="].join(`
|
|
2
|
+
`)}var E=new RegExp(/.(t|j)sx?/),R=new RegExp(/\.(s?css|sass)$/),b=["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 p(e){return[...new Set(Array.isArray(e)?e:e?[e]:[])]}async function w({file:e,name:t,loader:r}){let{code:s}=await(0,L.transformWithEsbuild)(e,t,{loader:r,minify:!0});return s}function U(e){let t=[];for(let r of b)e.indexOf(r)!==-1&&t.push(r);return t}var C=class{styles=new Map;async add(t,r){let s=await w({file:t,name:r,loader:"css"});return this.styles.set(r,s.replace(`
|
|
3
|
+
`,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(t){let r=[];for(let s of t){let o=this.styles.get(s);!o||r.push([s,o])}this.styles.clear(),r.forEach(s=>this.styles.set(...s))}},S=new C;var k={};function H(e){let t,r,s=null,o=(0,A.createLogger)("info",{prefix:"[vite-userscript-plugin]",allowClearScreen:!0}),g=(0,q.createServer)((n,l)=>(0,W.default)(n,l,{public:t.build.outDir})),i=B.server;return new i({httpServer:g}).on("request",n=>{s=n.accept(null,n.origin)}),{name:"vite-userscript-plugin",apply:"build",config(){return{build:{lib:{entry:e.entry,name:e.header.name,formats:["iife"],fileName:()=>`${e.header.name}.js`},rollupOptions:{output:{extend:!0}}}}},async configResolved(n){t=n,r=n.build.watch??!1;let{name:l,match:m,require:y,include:_,exclude:u,resource:h,connect:G}=e.header;e.entry=(0,d.resolve)(n.root,e.entry),e.header.name=(0,V.default)(l),e.header.match=p(m),e.header.require=p(y),e.header.include=p(_),e.header.exclude=p(u),e.header.resource=p(h),e.header.connect=p(G),e.autoGrants=e.autoGrants??!0,e.server={port:await(0,F.default)(),open:!0,...e.server}},async transform(n,l){let m=n;return R.test(l)&&(m=await S.add(n,l)),l.includes(e.entry)&&(m=n+"__STYLE__"),{code:m,map:null}},generateBundle(n,l){for(let[m,y]of Object.entries(l)){let u=Object.keys(y.modules).filter(h=>R.test(h));u.length>0&&S.merge(u)}},async writeBundle(n,l){let{open:m,port:y}=e.server,_=`${e.header.name}.proxy.user.js`;for(let[u]of Object.entries(l))if(E.test(u)){let h=t.root,G=t.build.outDir,N=`${e.header.name}.user.js`,j=(0,d.resolve)(h,G,u),z=(0,d.resolve)(h,G,_),K=(0,d.resolve)(h,G,N),v=(0,d.resolve)((0,d.dirname)((0,P.fileURLToPath)(k.url)),`hot-reload-${e.header.name}.js`);try{let c=(0,f.readFileSync)(j,"utf8");if(e.header.grant=p(r?b:e.autoGrants??!0?U(c):[...e.header.grant??[],"GM_addStyle","GM_info"]),r){let Y=(0,f.readFileSync)((0,d.resolve)((0,d.dirname)((0,P.fileURLToPath)(k.url)),"hot-reload.js"),"utf8"),I=await w({file:Y.replace("__WS__",`ws://localhost:${y}`),name:v,loader:"js"});(0,f.writeFileSync)(v,I),(0,f.writeFileSync)(z,$({...e.header,require:[...e.header.require,"file://"+v,"file://"+j]}))}c=c.replace("__STYLE__",`${S.inject()}`),c=await w({file:c,name:u,loader:"js"}),(0,f.writeFileSync)(j,c),(0,f.writeFileSync)(K,`${$(e.header)}
|
|
4
4
|
|
|
5
|
-
${
|
|
5
|
+
${c}`)}catch(c){console.log(c)}}if(r&&!g.listening){let u=`http://localhost:${y}`;g.listen(y,()=>{o.clearScreen("info"),o.info(T.default.blue(`Running at: ${T.default.gray(u)}`))}),m&&await(0,D.default)(`${u}/${_}`)}else r||(g.close(),process.exit(0))},buildEnd(){r&&(o.clearScreen("info"),s&&s.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,7 +205,11 @@ interface UserscriptPluginConfig {
|
|
|
195
205
|
/**
|
|
196
206
|
* Userscript header config.
|
|
197
207
|
*/
|
|
198
|
-
|
|
208
|
+
header: HeaderConfig;
|
|
209
|
+
/**
|
|
210
|
+
* Server config.
|
|
211
|
+
*/
|
|
212
|
+
server?: ServerConfig;
|
|
199
213
|
/**
|
|
200
214
|
* Import all `@grant` in development mode.
|
|
201
215
|
* @default true
|
|
@@ -205,4 +219,4 @@ interface UserscriptPluginConfig {
|
|
|
205
219
|
|
|
206
220
|
declare function UserscriptPlugin(config: UserscriptPluginConfig): PluginOption;
|
|
207
221
|
|
|
208
|
-
export {
|
|
222
|
+
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(n){let t=[];for(let s of n){let d=this.styles.get(s);!d||t.push([s,d])}this.styles.clear(),t.forEach(s=>this.styles.set(...s))}},
|
|
1
|
+
import V from"get-port";import{readFileSync as P,writeFileSync as x}from"fs";import{createServer as W}from"http";import{dirname as T,resolve as y}from"path";import{fileURLToPath as O}from"url";import A from"open";import E from"picocolors";import B from"sanitize-filename";import H from"serve-handler";import{createLogger as N}from"vite";import{server as z}from"websocket";function j(e){let n=[],t=Object.keys(e),s=Math.max(...t.map(o=>o.length))+1,d=o=>" ".repeat(s-o.length),p=(o,i)=>{let r=typeof i=="boolean";r&&!i||(i=r?"":d(o)+i.toString(),n.push(`// @${o}${i}`))};for(let[o,i]of Object.entries(e))if(Array.isArray(i))i.forEach(r=>p(o,r));else{if(i===void 0)continue;p(o,i)}return["// ==UserScript==",...n,"// ==/UserScript=="].join(`
|
|
2
|
+
`)}var R=new RegExp(/.(t|j)sx?/),v=new RegExp(/\.(s?css|sass)$/),M=["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 m(e){return[...new Set(Array.isArray(e)?e:e?[e]:[])]}async function G({file:e,name:n,loader:t}){let{code:s}=await D(e,n,{loader:t,minify:!0});return s}function C(e){let n=[];for(let t of M)e.indexOf(t)!==-1&&n.push(t);return n}var $=class{styles=new Map;async add(n,t){let s=await G({file:n,name:t,loader:"css"});return this.styles.set(t,s.replace(`
|
|
3
|
+
`,"")),""}inject(){return this.styles.size?`GM_addStyle(\`${[...this.styles.values()].join("")}\`)`:void 0}merge(n){let t=[];for(let s of n){let d=this.styles.get(s);!d||t.push([s,d])}this.styles.clear(),t.forEach(s=>this.styles.set(...s))}},w=new $;function K(e){let n,t,s=null,d=N("info",{prefix:"[vite-userscript-plugin]",allowClearScreen:!0}),p=W((r,a)=>H(r,a,{public:n.build.outDir})),o=z;return new o({httpServer:p}).on("request",r=>{s=r.accept(null,r.origin)}),{name:"vite-userscript-plugin",apply:"build",config(){return{build:{lib:{entry:e.entry,name:e.header.name,formats:["iife"],fileName:()=>`${e.header.name}.js`},rollupOptions:{output:{extend:!0}}}}},async configResolved(r){n=r,t=r.build.watch??!1;let{name:a,match:c,require:f,include:h,exclude:l,resource:g,connect:_}=e.header;e.entry=y(r.root,e.entry),e.header.name=B(a),e.header.match=m(c),e.header.require=m(f),e.header.include=m(h),e.header.exclude=m(l),e.header.resource=m(g),e.header.connect=m(_),e.autoGrants=e.autoGrants??!0,e.server={port:await V(),open:!0,...e.server}},async transform(r,a){let c=r;return v.test(a)&&(c=await w.add(r,a)),a.includes(e.entry)&&(c=r+"__STYLE__"),{code:c,map:null}},generateBundle(r,a){for(let[c,f]of Object.entries(a)){let l=Object.keys(f.modules).filter(g=>v.test(g));l.length>0&&w.merge(l)}},async writeBundle(r,a){let{open:c,port:f}=e.server,h=`${e.header.name}.proxy.user.js`;for(let[l]of Object.entries(a))if(R.test(l)){let g=n.root,_=n.build.outDir,L=`${e.header.name}.user.js`,b=y(g,_,l),U=y(g,_,h),k=y(g,_,L),S=y(T(O(import.meta.url)),`hot-reload-${e.header.name}.js`);try{let u=P(b,"utf8");if(e.header.grant=m(t?M:e.autoGrants??!0?C(u):[...e.header.grant??[],"GM_addStyle","GM_info"]),t){let F=P(y(T(O(import.meta.url)),"hot-reload.js"),"utf8"),q=await G({file:F.replace("__WS__",`ws://localhost:${f}`),name:S,loader:"js"});x(S,q),x(U,j({...e.header,require:[...e.header.require,"file://"+S,"file://"+b]}))}u=u.replace("__STYLE__",`${w.inject()}`),u=await G({file:u,name:l,loader:"js"}),x(b,u),x(k,`${j(e.header)}
|
|
4
4
|
|
|
5
|
-
${
|
|
5
|
+
${u}`)}catch(u){console.log(u)}}if(t&&!p.listening){let l=`http://localhost:${f}`;p.listen(f,()=>{d.clearScreen("info"),d.info(E.blue(`Running at: ${E.gray(l)}`))}),c&&await A(`${l}/${h}`)}else t||(p.close(),process.exit(0))},buildEnd(){t&&(d.clearScreen("info"),s&&s.sendUTF(JSON.stringify({message:"reload"})))}}}export{K as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vite-userscript-plugin",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -36,19 +36,25 @@
|
|
|
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",
|
|
52
|
+
"tsup": "^6.2.3",
|
|
48
53
|
"turbo": "^1.4.3",
|
|
49
|
-
"typescript": "^4.
|
|
54
|
+
"typescript": "^4.8.2",
|
|
50
55
|
"vite": "^3.0.9",
|
|
51
|
-
"vite-plugin-dts": "^1.4.1"
|
|
56
|
+
"vite-plugin-dts": "^1.4.1",
|
|
57
|
+
"vitest": "^0.22.1"
|
|
52
58
|
},
|
|
53
59
|
"peerDependencies": {
|
|
54
60
|
"@types/tampermonkey": ">=4.0.0",
|
|
@@ -57,6 +63,8 @@
|
|
|
57
63
|
"scripts": {
|
|
58
64
|
"dev": "tsup --watch",
|
|
59
65
|
"build": "tsup",
|
|
66
|
+
"test": "vitest",
|
|
67
|
+
"test:ui": "vitest --ui",
|
|
60
68
|
"examples:dev": "turbo run dev --filter='./examples/*'",
|
|
61
69
|
"examples:build": "turbo run build --filter='./examples/*'",
|
|
62
70
|
"format": "prettier --write --ignore-unknown **"
|