Auto-adjust userscript sourcemap comment
See original GitHub issue-
The bug is also present in the latest beta. Warning! Do an export in Violentmonkey settings before testing.
-
I have searched for existing issues that already reported this problem and found none
Describe the bug userscript sourcemap is mapping wrong variable
To Reproduce
install it, then open https://i.songe.li/, press F12
and check console
// ==UserScript==
// @name example
// @name:ja hentai
// @name:zh 测试_
// @namespace https://github.com/lisonge
// @version 1.0.1
// @author lisonge
// @description default description zh
// @description:zh 描述
// @description:en description
// @description:ja 説明z
// @description:zh-CN 描述
// @license MIT
// @icon https://vitejs.dev/logo.svg
// @homepage https://github.com/lisonge/vite-plugin-monkey#readme
// @homepageURL https://github.com/lisonge/vite-plugin-monkey#readme
// @source https://github.com/lisonge/vite-plugin-monkey.git
// @supportURL https://github.com/lisonge/vite-plugin-monkey/issues
// @include /^https:\/\/i\.songe\.li\/.*/
// @match https://i.songe.li/
// @require https://cdn.jsdelivr.net/npm/blueimp-md5@2.19.0
// @resource element-plus/dist/index.css https://cdn.jsdelivr.net/npm/element-plus@2.2.17/dist/index.css
// @grant GM_cookie
// @grant GM_getResourceText
// @grant unsafeWindow
// ==/UserScript==
(e=>{const o=document.createElement("style");o.dataset.source="vite-plugin-monkey",o.innerText=e,document.head.appendChild(o)})(":root{font-family:Inter,Avenir,Helvetica,Arial,sans-serif;font-size:16px;line-height:24px;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}.card{padding:2em}#app{max-width:1280px;margin:0 auto;padding:2rem;text-align:center}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}");
(function(md52, client) {
var _a;
"use strict";
const _interopDefaultLegacy = (e) => e && typeof e === "object" && "default" in e ? e : { default: e };
const md5__default = /* @__PURE__ */ _interopDefaultLegacy(md52);
const style = "";
const cssLoader = (e) => {
const t = GM_getResourceText(e), o = document.createElement("style");
return o.innerText = t, document.head.append(o), t;
};
cssLoader("element-plus/dist/index.css");
const v1 = 1;
console.log("test");
console.log({ v1 });
console.log(`md5('114514')=${md5__default.default("114514")}`);
console.log("document.readyState", document.readyState);
console.log(client.monkeyWindow);
if (client.unsafeWindow == window) {
console.log("scope->host");
} else {
console.log("scope->monkey");
}
(_a = client.GM_cookie) == null ? void 0 : _a.list({}, (cookies, error) => {
if (error) {
console.log(error);
} else {
const [cookie] = cookies;
if (cookie) {
console.log(cookie);
}
}
});
})(md5, (window.monkeyWindow = window, window));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS51c2VyLmpzIiwic291cmNlcyI6WyJDOi9Vc2Vycy9saXNvbmdlLy52c2NvZGUvdGVzdC50cyIsInNyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB2MSA9IDE7XHJcbmNvbnNvbGUubG9nKCd0ZXN0Jyk7XHJcbiIsImltcG9ydCAnLi9zdHlsZS5jc3MnO1xuLy8gaW1wb3J0IHBuZ1VybCBmcm9tICcuL2Fzc2V0L3Rlc3QucG5nJztcbi8vIGltcG9ydCBzdmdVcmwgZnJvbSAnLi9hc3NldC9mYXZpY29uLnN2Zyc7XG5pbXBvcnQgbWQ1IGZyb20gJ2JsdWVpbXAtbWQ1Jztcbi8vIGltcG9ydCAnZWxlbWVudC1wbHVzL2Rpc3QvaW5kZXguY3NzJztcbmltcG9ydCAnZWxlbWVudC1wbHVzL2Rpc3QvaW5kZXguY3NzJztcblxuLy8gY29uc29sZS5sb2coeyBjc3MgfSk7XG5pbXBvcnQgeyB2MSB9IGZyb20gJ0Q6L1VzZXIvRG9jdW1lbnRzL2xpc29uZ2UvLnZzY29kZS90ZXN0JztcbmNvbnNvbGUubG9nKHsgdjEgfSk7XG5cbmNvbnNvbGUubG9nKGBtZDUoJzExNDUxNCcpPSR7bWQ1KCcxMTQ1MTQnKX1gKTsgLy9jNGQwMzhiNGJlZDA5ZmRiMTQ3MWVmNTFlYzNhMzJjZFxuY29uc29sZS5sb2coJ2RvY3VtZW50LnJlYWR5U3RhdGUnLCBkb2N1bWVudC5yZWFkeVN0YXRlKTsgLy8gaW50ZXJhY3RpdmVcblxuaW1wb3J0IHtcbiAgR01fY29va2llLFxuICB1bnNhZmVXaW5kb3csXG4gIG1vbmtleVdpbmRvdyxcbiAgR01fYWRkRWxlbWVudCxcbiAgR01faW5mbyxcbn0gZnJvbSAnJCc7XG5cbmNvbnNvbGUubG9nKG1vbmtleVdpbmRvdyk7XG5cbi8vIHRhbXBlcm1vbmtleSBvbmx5XG4vLyBHTV9hZGRFbGVtZW50ICYmIEdNX2FkZEVsZW1lbnQoJ2RpdicsIHsgaW5uZXJIVE1MOiAnaGVsbG8nIH0pO1xuXG5pZiAodW5zYWZlV2luZG93ID09IHdpbmRvdykge1xuICBjb25zb2xlLmxvZygnc2NvcGUtPmhvc3QnKTtcbn0gZWxzZSB7XG4gIGNvbnNvbGUubG9nKCdzY29wZS0+bW9ua2V5Jyk7XG59XG5cbi8vIHRhbXBlcm1vbmtleSBvbmx5XG5HTV9jb29raWU/Lmxpc3Qoe30sIChjb29raWVzLCBlcnJvcikgPT4ge1xuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgW2Nvb2tpZV0gPSBjb29raWVzO1xuICAgIGlmIChjb29raWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNvb2tpZSk7XG4gICAgICAvLyB7XG4gICAgICAvLyAgIFwiZG9tYWluXCI6IFwiaS5zb25nZS5saVwiLFxuICAgICAgLy8gICBcImh0dHBPbmx5XCI6IGZhbHNlLFxuICAgICAgLy8gICBcInNlY3VyZVwiOiBmYWxzZSxcbiAgICAgIC8vICAgXCJuYW1lXCI6IFwia1wiLFxuICAgICAgLy8gICBcInBhdGhcIjogXCIvXCIsXG4gICAgICAvLyAgIFwic2FtZVNpdGVcIjogXCJ1bnNwZWNpZmllZFwiLFxuICAgICAgLy8gICBcInZhbHVlXCI6IFwidlwiLFxuICAgICAgLy8gICBcInNlc3Npb25cIjogdHJ1ZSxcbiAgICAgIC8vICAgXCJob3N0T25seVwiOiB0cnVlXG4gICAgICAvLyB9XG4gICAgfVxuICB9XG59KTtcblxuLy8tLS0tLS0tLS10ZXN0IGNvZGUgZm9ybWF0LS0tLS0tLS1cbi8vIGltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tICcuL2Zvcm1hdCc7XG4vLyBjb25zb2xlLmxvZygnZm9ybWF0IHRzeCBjb2RlJyk7XG4vLyBjb25zdCB0c3hDb2RlID0gYGNvbnN0IEFwcD0oKT0+e3JldHVybig8ZGl2IGNsYXNzPXtzdHlsZXMuQXBwfT5cbi8vIDxoZWFkZXIgY2xhc3M9e3N0eWxlcy5oZWFkZXJ9PlxuLy8gPGltZyBzcmM9e2xvZ299IGNsYXNzPXtzdHlsZXMubG9nb30gYWx0PVwibG9nb1wiIC8+XG4vLyA8cD5cbi8vIEVkaXQgPGNvZGU+c3JjL0FwcC50c3g8L2NvZGU+IGFuZCBzYXZlIHRvIHJlbG9hZC5cbi8vIDwvcD5cbi8vIDxhXG4vLyBjbGFzcz17c3R5bGVzLmxpbmt9XG4vLyBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL3NvbGlkanMvc29saWRcIlxuLy8gdGFyZ2V0PVwiX2JsYW5rXCJcbi8vIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuLy8gPlxuLy8gTGVhcm4gU29saWRcbi8vIDwvYT5cbi8vIDwvaGVhZGVyPlxuLy8gPC9kaXY+XG4vLyApO1xuLy8gfTtgO1xuLy8gY29uc29sZS5sb2coZm9ybWF0Q29kZSh0c3hDb2RlLCAndHN4JykpO1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iXSwibmFtZXMiOlsibWQ1IiwibW9ua2V5V2luZG93IiwidW5zYWZlV2luZG93Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU8sUUFBTSxLQUFLO0FBQ2xCLFVBQVEsSUFBSSxNQUFNO0FDUWxCLFVBQVEsSUFBSSxFQUFFLEdBQUEsQ0FBSTtBQUVsQixVQUFRLElBQUksaUJBQWlCQSxhQUFJLFFBQUEsUUFBUSxHQUFHO0FBQzVDLFVBQVEsSUFBSSx1QkFBdUIsU0FBUyxVQUFVO0FBVXRELFVBQVEsSUFBSUMsT0FBQUEsWUFBWTtBQUt4QixNQUFJQyxPQUFBQSxnQkFBZ0IsUUFBUTtBQUMxQixZQUFRLElBQUksYUFBYTtBQUFBLEVBQzNCLE9BQU87QUFDTCxZQUFRLElBQUksZUFBZTtBQUFBLEVBQzdCO0FBR0EsZUFBQSxjQUFBLG1CQUFXLEtBQUssQ0FBQSxHQUFJLENBQUMsU0FBUyxVQUFVO0FBQ3RDLFFBQUksT0FBTztBQUNULGNBQVEsSUFBSSxLQUFLO0FBQUEsSUFBQSxPQUNaO0FBQ0MsWUFBQSxDQUFDLE1BQU0sSUFBSTtBQUNqQixVQUFJLFFBQVE7QUFDVixnQkFBUSxJQUFJLE1BQU07QUFBQSxNQVlwQjtBQUFBLElBQ0Y7QUFBQSxFQUNGOzsiLCJzb3VyY2VSb290IjoiL2h0dHBzOi8vZ2l0aHViLmNvbS9saXNvbmdlL2V4YW1wbGUvIn0=
Expected behavior userscript sourcemap is mapping correct variable
Actual behavior userscript sourcemap is mapping wrong variable
Environment:
- chrome@Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36
- Violentmonkey BETA@2.13.2.5
hello, I am developing dist.user.js sourcemap
for vite-plugin-monkey
but I find Violentmonkey use wrapper function wrap userscript to run, It causes the code to offset N
line backwards
and when use @require
url, It also causes the code to offset N
line backwards
so sourcemap will not map correct position
now I add sourcemap offset
config for vite-plugin-monkey
vite-plugin-monkey/src/node/types.ts#L308-L314
but the developer must know the number of lines of code offset in advance
and I find that the number of offset that Violentmonkey
causes is different from the number of offset that Tampermonkey causes
This breaks the unity, It’s very inconvenient
so I hope Violentmonkey can automatically modify the inline sourcemap of userscript
it is very simple to modify sourcemap if you just set offset line
let userscriptCode = `xxx`;
let sourceMappingURL: string = findSourceMap(userscriptCode);
const sourceMap = JSON.parse(await (await fetch(sourceMappingURL)).text());
const wrapperOffset: number = N1;
const requireOffset: number = N2;
const othersOffset: number = N3;
// your offset line
sourceMap.mappings =
';'.repeat(wrapperOffset + requireOffset + othersOffset) + sourceMap.mappings;
sourceMappingURL = toB64DataUrl(sourceMap);
userscriptCode = replaceSourceMap(userscriptCode, sourceMappingURL);
so are you willing to support automatically modify sourcemap
?
Issue Analytics
- State:
- Created a year ago
- Comments:7 (5 by maintainers)
Top GitHub Comments
If you ever decide to convince the userscript engines we’re open to the idea.
That’s a good practical solution for now.
I am lazy
Let the developer set the offset for
userscript engine that they are using
by themselvesLet the userscript developers do this themselves
Now my plugin does not seem to need additional feature modification about sourcemap