hackmud-script-manager 0.13.0-8ac303b → 0.13.0-bdc0c8a
Sign up to get free protection for your applications and to get access to all the features.
- package/bin/hsm.js +1 -1
- package/index.js +1 -1
- package/package.json +2 -1
- package/processScript/index.js +1 -1
- package/processScript/minify.d.ts +2 -1
- package/processScript/minify.js +1 -1
- package/processScript/preprocess.d.ts +1 -3
- package/processScript/preprocess.js +1 -1
- package/processScript/shared.d.ts +3 -0
- package/processScript/shared.js +1 -0
- package/processScript/transform.d.ts +4 -1
- package/processScript/transform.js +1 -1
- package/push.js +1 -1
- package/test.js +1 -1
- package/watch.js +1 -1
package/bin/hsm.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
|
-
import o from"fs";import{resolve as e,basename as s,extname as t,dirname as r,relative as
|
2
|
+
import o from"fs";import{resolve as e,basename as s,extname as t,dirname as r,relative as i}from"path";import{c as n}from"../processScript/minify.js";import{D as a,push as l}from"../push.js";import{w as c}from"../writeFilePersistent-4e3ff264.js";import p from"chalk";import{homedir as g}from"os";import{s as m,processScript as u}from"../processScript/index.js";import{generateTypings as f}from"../generateTypings.js";import{pull as b}from"../pull.js";import{syncMacros as d}from"../syncMacros.js";import{test as h}from"../test.js";import{watch as k}from"../watch.js";import"@babel/generator";import"@babel/traverse";import"@babel/types";import"../assert-1b7dada8.js";import"../spliceString-2c6f214f.js";import"acorn";import"terser";import"../processScript/shared.js";import"@babel/parser";import"@babel/plugin-proposal-class-properties";import"@babel/plugin-proposal-class-static-block";import"@babel/plugin-proposal-decorators";import"@babel/plugin-proposal-do-expressions";import"@babel/plugin-proposal-function-bind";import"@babel/plugin-proposal-function-sent";import"@babel/plugin-proposal-json-strings";import"@babel/plugin-proposal-logical-assignment-operators";import"@babel/plugin-proposal-nullish-coalescing-operator";import"@babel/plugin-proposal-numeric-separator";import"@babel/plugin-proposal-object-rest-spread";import"@babel/plugin-proposal-optional-catch-binding";import"@babel/plugin-proposal-optional-chaining";import"@babel/plugin-proposal-partial-application";import"@babel/plugin-proposal-pipeline-operator";import"@babel/plugin-proposal-private-property-in-object";import"@babel/plugin-proposal-record-and-tuple";import"@babel/plugin-proposal-throw-expressions";import"@babel/plugin-transform-exponentiation-operator";import"@babel/plugin-transform-typescript";import"@rollup/plugin-babel";import"@rollup/plugin-commonjs";import"@rollup/plugin-json";import"@rollup/plugin-node-resolve";import"perf_hooks";import"prettier";import"rollup";import"../processScript/postprocess.js";import"../processScript/preprocess.js";import"../processScript/transform.js";import"chokidar";const{readFile:w,rmdir:y,writeFile:j,mkdir:$}=o.promises,v=e(g(),".config"),S=e(v,"hsm.json"),P=new Map,C=[];let x;const N=p.rgb(255,244,4),O=p.rgb(243,249,152),L=p.rgb(179,255,155),T=p.rgb(255,150,224),E=p.rgb(30,255,0),F=p.rgb(202,202,202),I=new a((o=>{let e=0;for(const s of o)e+=(e>>1)+e+"xi1_8ratvsw9hlbgm02y5zpdcn7uekof463qj".indexOf(s)+1;return[N,O,L,T,E,F][e%6](o)}));for(const o of process.argv.slice(2))if("-"==o[0]){const[e,s]=o.split("=");let t=s;if(t)if("true"==t)t=!0;else if("false"==t)t=!1;else{const o=Number(t);isFinite(o)&&(t=o)}else t=!0;if("-"==o[1])P.set(e.slice(2),t);else for(const o of e.slice(1))P.set(o,t)}else C.push(o);function help(){switch(C[0]){case"config":switch(C[1]){case"get":console.log("hsm config get <key>");break;case"set":console.log("hsm config set <key> <value>");break;case"delete":console.log("hsm config delete <key>");break;default:console.log("hsm config <get, delete, set>")}break;case"push":console.log('hsm push [<dir> [..."<script user>.<script name>"]]');break;case"watch":console.log("hsm watch [dir]");break;case"pull":console.log("hsm pull <script user>.<script name>");break;case"minify":case"golf":console.log(`${s(process.argv[1])} ${C[0]} <target> [output]`);break;default:console.log("hsm <push, watch, pull, config, golf>")}}async function version(){console.log("0.13.0-bdc0c8a")}async function getConfig(){return x||(x=await w(S,{encoding:"utf-8"}).then((o=>{let e;try{e=JSON.parse(o)}catch{return console.log("config file was corrupted, resetting"),{}}return e&&"object"==typeof e?e:(console.log("config file was corrupted, resetting"),{})}),(()=>(console.log(`creating config file at ${S}`),{}))))}function exploreObject(o,e,s=!1){for(const r of e){var t;o=s?"object"==typeof o[r]?o[r]:o[r]={}:null===(t=o)||void 0===t?void 0:t[r]}return o}function updateConfig(){if(x){const o=JSON.stringify(x);j(S,o).catch((async e=>{switch(e.code){case"EISDIR":await y(S);break;case"ENOENT":await $(v);break;default:throw e}j(S,o)}))}}function onPushLogger({file:o,users:r,srcLength:i,minLength:n,error:a}){r.length&&(a?console.log(`error "${p.bold(a.message)}" in ${p.bold(o)}`):console.log(`pushed ${p.bold(o)} to ${r.map((o=>p.bold(I.get(o)))).join(", ")} | ${p.bold(String(n))} chars from ${p.bold(String(i))} | saved ${p.bold(String(i-n))} (${p.bold(`${Math.round(100*(1-n/i))}%`)}) | ${p.bold(`${e(x.hackmudPath,r[0],"scripts",s(o,t(o)))}.js`)}`))}(async()=>{if(P.get("version")||P.get("v"))version();else if(P.get("help")||P.get("h"))help();else{switch(C[0]){case"push":{const o=await getConfig();if(!o.hackmudPath){console.log("you need to set hackmudPath in config before you can use this command");break}const e=C[1]||".",s=o.hackmudPath,t=C.slice(2);t.length||t.push("*.*");(await l(e,s,{scripts:t,onPush:onPushLogger,minify:!P.get("skip-minify")})).length||console.warn("couldn't find any scripts to push"),updateConfig()}break;case"dev":case"watch":{var o,a,g;const e=await getConfig();if(!e.hackmudPath){console.log("you need to set hackmudPath in config before you can use this command");break}const s=C[1]||".",t=e.hackmudPath,r=(null===(o=P.get("users"))||void 0===o?void 0:o.toString().split(","))||[],i=(null===(a=P.get("scripts"))||void 0===a?void 0:a.toString().split(","))||[],n=null===(g=P.get("gen-types"))||void 0===g?void 0:g.toString();k(s,t,r,i,onPushLogger,{genTypes:n})}break;case"pull":{const o=await getConfig();if(!o.hackmudPath){console.log("you need to set hackmudPath in config before you can use this command");break}const e=C[1];if(!e){help();break}const s=C[2]||".",t=o.hackmudPath;try{await b(s,t,e)}catch(o){console.log("something went wrong, did you forget to #down the script?")}}break;case"sync-macros":{const{hackmudPath:o}=await getConfig();if(!o){console.log("you need to set hackmudPath in config before you can use this command");break}const{macrosSynced:e,usersSynced:s}=await d(o);console.log(`synced ${e} macros to ${s} users`)}break;case"test":{const o=e(C[1]||".");let s=0;console.log(`testing scripts in ${p.bold(o)}\n`);for(const{file:e,line:t,message:r}of await h(o))console.log(`error "${p.bold(r)}" in ${p.bold(e)} on line ${p.bold(String(t))}`),s++;if(!s){console.log("no errors found");break}if(s){process.exitCode=1,console.log(`\nencountered ${p.bold(String(s))} errors`);break}console.log("no errors found")}break;case"gen-types":{const o=e(C[1]||".");let s;s=C[2]?e(C[2]):e(o,"../player.d.ts"),f(o,s,(await getConfig()).hackmudPath)}break;case"config":switch(C[1]){case"get":console.log(exploreObject(await getConfig(),C[2].split(".")));break;case"delete":{var y;const o=C[2].split(".");if(!o.length){help();break}const e=await getConfig();null===(y=exploreObject(e,o))||void 0===y||delete y[C[3]],console.log(e)}break;case"set":{const o=C[2].split(".");if(!o.length){help();break}const s=await getConfig();let t=s;for(let e of o.slice(0,-1))t="object"==typeof t[e]?t[e]:t[e]={};t[o.slice(-1)[0]]=C[3],s.hackmudPath&&(s.hackmudPath=e(s.hackmudPath)),console.log(s)}break;default:C[1]&&console.log("unknown command"),help()}break;case"help":case"h":help();break;case"version":case"v":version();break;case"golf":case"minify":{if(!C[1]){console.log(`Target required\nUsage: ${s(process.argv[1])} ${C[0]} <target> [output]`);break}const o=t(C[1]);if(!m.includes(o)){console.log(`Unsupported file extension "${p.bold(o)}"\nSupported extensions are "${m.map((o=>p.bold(o))).join('", "')}"`);break}await w(C[1],{encoding:"utf-8"}).then((async t=>{const a=s(C[1],o),l=a.endsWith(".src"),g=l?a.slice(0,-4):a;let m="UNKNOWN";"scripts"==s(e(C[1],".."))&&"hackmud"==s(e(C[1],"../../.."))&&(m=s(e(C[1],"../..")));const f=!P.get("skip-minify"),b=Boolean(P.get("mangle-names"));!f&&b&&console.warn("warning: `--mangle-names` has no effect while `--skip-minify` is active");const{script:d,srcLength:h,warnings:k,timeTook:w}=await u(t,{minify:f,scriptUser:m,scriptName:g,filePath:C[1],mangleNames:b});for(const{message:o,line:e}of k)console.log(`warning "${p.bold(o)}" on line ${p.bold(String(e))}`);let y;y=C[2]?C[2]:e(r(C[1]),l?`${g}.js`:".js"==o?`${a}.min.js`:`${a}.js`);const j=n(d);await c(y,d).catch((async t=>{if(!C[2]||"EISDIR"!=t.code)throw t;y=e(y,`${s(C[1],o)}.js`),await c(y,d)})).then((()=>console.log(`wrote ${p.bold(j)} chars to ${p.bold(i(".",y))} | saved ${p.bold(h-j)} chars | took ${Math.round(100*w)/100}ms`)),(o=>console.log(o.message)))}),(o=>console.log(o.message)))}break;default:C[0]&&console.log("unknown command"),help()}updateConfig()}})();
|
package/index.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export{processScript,s as supportedExtensions}from"./processScript/index.js";export{generateTypings}from"./generateTypings.js";export{pull}from"./pull.js";export{push}from"./push.js";export{syncMacros}from"./syncMacros.js";export{test}from"./test.js";export{watch}from"./watch.js";import"@babel/generator";import"@babel/parser";import"@babel/plugin-proposal-class-properties";import"@babel/plugin-proposal-class-static-block";import"@babel/plugin-proposal-decorators";import"@babel/plugin-proposal-do-expressions";import"@babel/plugin-proposal-function-bind";import"@babel/plugin-proposal-function-sent";import"@babel/plugin-proposal-json-strings";import"@babel/plugin-proposal-logical-assignment-operators";import"@babel/plugin-proposal-nullish-coalescing-operator";import"@babel/plugin-proposal-numeric-separator";import"@babel/plugin-proposal-object-rest-spread";import"@babel/plugin-proposal-optional-catch-binding";import"@babel/plugin-proposal-optional-chaining";import"@babel/plugin-proposal-partial-application";import"@babel/plugin-proposal-pipeline-operator";import"@babel/plugin-proposal-private-property-in-object";import"@babel/plugin-proposal-record-and-tuple";import"@babel/plugin-proposal-throw-expressions";import"@babel/plugin-transform-exponentiation-operator";import"@babel/plugin-transform-typescript";import"@babel/traverse";import"@babel/types";import"@rollup/plugin-babel";import"@rollup/plugin-commonjs";import"@rollup/plugin-json";import"@rollup/plugin-node-resolve";import"./assert-1b7dada8.js";import"path";import"./processScript/minify.js";import"./spliceString-2c6f214f.js";import"acorn";import"terser";import"perf_hooks";import"prettier";import"rollup";import"./processScript/postprocess.js";import"./processScript/preprocess.js";import"./processScript/transform.js";import"fs";import"./writeFilePersistent-4e3ff264.js";import"chokidar";
|
1
|
+
export{processScript,s as supportedExtensions}from"./processScript/index.js";export{generateTypings}from"./generateTypings.js";export{pull}from"./pull.js";export{push}from"./push.js";export{syncMacros}from"./syncMacros.js";export{test}from"./test.js";export{watch}from"./watch.js";import"@babel/generator";import"@babel/parser";import"@babel/plugin-proposal-class-properties";import"@babel/plugin-proposal-class-static-block";import"@babel/plugin-proposal-decorators";import"@babel/plugin-proposal-do-expressions";import"@babel/plugin-proposal-function-bind";import"@babel/plugin-proposal-function-sent";import"@babel/plugin-proposal-json-strings";import"@babel/plugin-proposal-logical-assignment-operators";import"@babel/plugin-proposal-nullish-coalescing-operator";import"@babel/plugin-proposal-numeric-separator";import"@babel/plugin-proposal-object-rest-spread";import"@babel/plugin-proposal-optional-catch-binding";import"@babel/plugin-proposal-optional-chaining";import"@babel/plugin-proposal-partial-application";import"@babel/plugin-proposal-pipeline-operator";import"@babel/plugin-proposal-private-property-in-object";import"@babel/plugin-proposal-record-and-tuple";import"@babel/plugin-proposal-throw-expressions";import"@babel/plugin-transform-exponentiation-operator";import"@babel/plugin-transform-typescript";import"@babel/traverse";import"@babel/types";import"@rollup/plugin-babel";import"@rollup/plugin-commonjs";import"@rollup/plugin-json";import"@rollup/plugin-node-resolve";import"./assert-1b7dada8.js";import"path";import"./processScript/minify.js";import"./spliceString-2c6f214f.js";import"acorn";import"terser";import"./processScript/shared.js";import"perf_hooks";import"prettier";import"rollup";import"./processScript/postprocess.js";import"./processScript/preprocess.js";import"./processScript/transform.js";import"fs";import"./writeFilePersistent-4e3ff264.js";import"chokidar";
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "hackmud-script-manager",
|
3
|
-
"version": "0.13.0-
|
3
|
+
"version": "0.13.0-bdc0c8a",
|
4
4
|
"description": "Script manager for game hackmud, with minification, TypeScript support, and player script type definition generation.",
|
5
5
|
"keywords": [
|
6
6
|
"api",
|
@@ -99,6 +99,7 @@
|
|
99
99
|
"./processScript/minify": "./processScript/minify.js",
|
100
100
|
"./processScript/postprocess": "./processScript/postprocess.js",
|
101
101
|
"./processScript/preprocess": "./processScript/preprocess.js",
|
102
|
+
"./processScript/shared": "./processScript/shared.js",
|
102
103
|
"./processScript/transform": "./processScript/transform.js",
|
103
104
|
"./pull": "./pull.js",
|
104
105
|
"./push": "./push.js",
|
package/processScript/index.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
import
|
1
|
+
import e from"@babel/generator";import{parse as o}from"@babel/parser";import r from"@babel/plugin-proposal-class-properties";import t from"@babel/plugin-proposal-class-static-block";import s from"@babel/plugin-proposal-decorators";import a from"@babel/plugin-proposal-do-expressions";import p from"@babel/plugin-proposal-function-bind";import l from"@babel/plugin-proposal-function-sent";import i from"@babel/plugin-proposal-json-strings";import n from"@babel/plugin-proposal-logical-assignment-operators";import m from"@babel/plugin-proposal-nullish-coalescing-operator";import c from"@babel/plugin-proposal-numeric-separator";import f from"@babel/plugin-proposal-object-rest-spread";import u from"@babel/plugin-proposal-optional-catch-binding";import b from"@babel/plugin-proposal-optional-chaining";import d from"@babel/plugin-proposal-partial-application";import g from"@babel/plugin-proposal-pipeline-operator";import h from"@babel/plugin-proposal-private-property-in-object";import w from"@babel/plugin-proposal-record-and-tuple";import y from"@babel/plugin-proposal-throw-expressions";import j from"@babel/plugin-transform-exponentiation-operator";import x from"@babel/plugin-transform-typescript";import S from"@babel/traverse";import k from"@babel/types";import v from"@rollup/plugin-babel";import N from"@rollup/plugin-commonjs";import E from"@rollup/plugin-json";import L from"@rollup/plugin-node-resolve";import{a as _}from"../assert-1b7dada8.js";import{resolve as C}from"path";import{c as I,minify as U}from"./minify.js";export{minify}from"./minify.js";import{performance as $}from"perf_hooks";import D from"prettier";import{rollup as M}from"rollup";import{postprocess as W}from"./postprocess.js";export{postprocess}from"./postprocess.js";import{preprocess as q}from"./preprocess.js";export{preprocess}from"./preprocess.js";import{transform as T}from"./transform.js";export{transform as compile}from"./transform.js";import"../spliceString-2c6f214f.js";import"acorn";import"terser";import"./shared.js";const F=[".js",".ts"],{default:H}=v,{format:O}=D,{default:P}=e,{default:K}=S;async function processScript(e,{minify:S=!0,uniqueID:v=Math.floor(Math.random()*2**52).toString(36).padStart(11,"0"),scriptUser:D="UNKNOWN",scriptName:B="UNKNOWN",filePath:G,mangleNames:z=!1}={}){_(v.match(/^\w{11}$/)),G=G?C(G):"script";const A=$.now(),J=e;let Q,R;const V=e.match(/^function\s*\((?:.+\/\/(.+)|)/);if(V)e=`export default ${e}`,Q=V[1];else for(const o of e.split("\n")){const e=o.match(/^\s*\/\/(.+)/);if(!e)break;const r=e[1].trim();if(r.startsWith("@autocomplete "))Q=r.slice(14).trimStart();else if(r.startsWith("@seclevel ")){const e=r.slice(10).trimStart().toLowerCase();switch(e){case"fullsec":case"full":case"fs":case"4s":case"f":case"4":R=4;break;case"highsec":case"high":case"hs":case"3s":case"h":case"3":R=3;break;case"midsec":case"mid":case"ms":case"2s":case"m":case"2":R=2;break;case"lowsec":case"low":case"ls":case"1s":case"l":case"1":R=1;break;case"nullsec":case"null":case"ns":case"0s":case"n":case"0":R=0;break;default:throw new Error(`unrecognised seclevel "${e}"`)}}}_(v.match(/^\w{11}$/));const X=G?C(G):"script";let Y=4;const Z=await M({plugins:[{name:"emit script",buildStart(){this.emitFile({type:"chunk",id:X})},load:o=>o==X?e:null,transform(e){const{code:o,seclevel:r}=q(e,{uniqueID:v});return Y=Math.min(Y,r),o}},H({babelHelpers:"bundled",plugins:[[x.default],[s.default,{decoratorsBeforeExport:!0}],[a.default],[p.default],[l.default],[d.default],[g.default,{proposal:"hack",topicToken:"%"}],[y.default],[w.default,{syntaxType:"hash",importPolyfill:!0}],[r.default],[t.default],[h.default],[n.default],[c.default],[m.default],[b.default],[u.default],[i.default],[f.default],[j.default]],configFile:!1,extensions:F}),N(),L({extensions:F}),E()],treeshake:{moduleSideEffects:"no-external"}}),ee=["NULLSEC","LOWSEC","MIDSEC","HIGHSEC","FULLSEC"];let oe;if(e=(await Z.generate({})).output[0].code,({file:oe,seclevel:Y}=await T(o(e,{sourceType:"module"}),J,{uniqueID:v,scriptUser:D,scriptName:B,seclevel:Y})),null!=R&&Y<R)throw new Error(`detected seclevel ${ee[Y]} is lower than stated seclevel ${ee[R]}`);e=P(oe).code;let re=I(e.replace(/^function\s*\w+\(/,"function("));return S?e=await U(oe,Q,{uniqueID:v,mangleNames:z}):(K(oe,{MemberExpression({node:e}){e.computed||(_("Identifier"==e.property.type),"prototype"==e.property.name?(e.computed=!0,e.property=k.stringLiteral("prototype")):"__proto__"==e.property.name&&(e.computed=!0,e.property=k.stringLiteral("__proto__")))}}),e=O(P(oe).code,{parser:"babel",arrowParens:"avoid",semi:!1,trailingComma:"none"})),{srcLength:re,script:e=W(e,Y,v),warnings:[],timeTook:$.now()-A}}export{processScript as default,processScript,F as s};
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { File } from "@babel/types";
|
1
2
|
declare type MinifyOptions = {
|
2
3
|
/** 11 a-z 0-9 characters */
|
3
4
|
uniqueID: string;
|
@@ -9,5 +10,5 @@ declare type MinifyOptions = {
|
|
9
10
|
* @param autocomplete the comment inserted after the function signature
|
10
11
|
* @param options {@link MinifyOptions details}
|
11
12
|
*/
|
12
|
-
export declare function minify(
|
13
|
+
export declare function minify(file: File, autocomplete?: string, { uniqueID, mangleNames }?: Partial<MinifyOptions>): Promise<string>;
|
13
14
|
export default minify;
|
package/processScript/minify.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
import e from"@babel/generator";import
|
1
|
+
import e from"@babel/generator";import t from"@babel/traverse";import r from"@babel/types";import{a as i}from"../assert-1b7dada8.js";import{s as n}from"../spliceString-2c6f214f.js";import{tokenizer as a,tokTypes as s}from"acorn";import*as o from"terser";import{getReferencePathsToGlobal as p}from"./shared.js";function countHackmudCharacters(e){return e.replace(/\/\/.*/g,"").replace(/[ \t\n\r\u00a0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000]/g,"").length}const{default:l}=e,{default:u}=t;async function minify(e,t,{uniqueID:a="00000000000",mangleNames:s=!1}={}){let c;i(a.match(/^\w{11}$/)),u(e,{Program(e){c=e,e.skip()}});const f=c.get("body.0");for(const e of[...f.node.params].reverse()){if("Identifier"==e.type){if(!f.scope.getBinding(e.name).referenced){f.node.params.pop();continue}}break}for(const e in c.scope.globals){if("arguments"==e||e.startsWith(`$${a}`))continue;const t=p(e,c);if(!(5+e.length+t.length>=e.length*t.length)){for(const i of t)i.replaceWith(r.identifier(`_GLOBAL_${e}_${a}_`));f.node.body.body.unshift(r.variableDeclaration("let",[r.variableDeclarator(r.identifier(`_GLOBAL_${e}_${a}_`),r.identifier(e))]))}}const d=[];let m,_=!1;u(e,{MemberExpression({node:e}){e.computed||(i("Identifier"==e.property.type),"prototype"==e.property.name?(e.computed=!0,e.property=r.identifier(`_PROTOTYPE_PROPERTY_${a}_`)):"__proto__"==e.property.name&&(e.computed=!0,e.property=r.identifier(`_PROTO_PROPERTY_${a}_`)))}}),m=(await o.minify(l(e).code,{ecma:2015,compress:{passes:1/0,unsafe:!0,unsafe_arrows:!0,unsafe_comps:!0,unsafe_symbols:!0,unsafe_methods:!0,unsafe_proto:!0,unsafe_regexp:!0,unsafe_undefined:!0,sequences:!1},format:{semicolons:!1},keep_classnames:!s,keep_fnames:!s})).code.replace(new RegExp(`_PROTOTYPE_PROPERTY_${a}_`,"g"),'"prototype"').replace(new RegExp(`_PROTO_PROPERTY_${a}_`,"g"),'"__proto__"');let y,E=null,$=!1;{const t=[];u(e,{FunctionDeclaration(e){e.traverse({Function(e){"CallExpression"!=e.parent.type&&"callee"!=e.parentKey&&e.skip()},Loop(e){e.skip()},ObjectExpression(e){const t={};parseObjectExpression(e.node,t)&&e.replaceWith(r.identifier(`_JSON_VALUE_${d.push(t)-1}_${a}_`))},ArrayExpression(e){const t=[];parseArrayExpression(e.node,t)&&e.replaceWith(r.identifier(`_JSON_VALUE_${d.push(t)-1}_${a}_`))}}),e.traverse({TemplateLiteral(e){const t=e.node;let i=r.stringLiteral(t.quasis[0].value.cooked);for(let e=0;e<t.expressions.length;e++){const n=t.expressions[e],a=t.quasis[e+1];i=r.binaryExpression("+",i,n),a.value.cooked&&(i=r.binaryExpression("+",i,r.stringLiteral(a.value.cooked)))}e.replaceWith(i)},MemberExpression({node:e}){e.computed||(i("Identifier"==e.property.type),e.property.name.length<3||(e.computed=!0,e.property=r.stringLiteral(e.property.name)))},UnaryExpression(e){if("void"==e.node.operator)"NumericLiteral"!=e.node.argument.type||e.node.argument.value||(e.replaceWith(r.identifier(`_UNDEFINED_${a}_`)),_=!0);else if("-"==e.node.operator&&"NumericLiteral"==e.node.argument.type){const i=-e.node.argument.value;t.push((async()=>{if((await minifyNumber(i)).length<=3)return;"key"==e.parentKey&&"ObjectProperty"==e.parent.type&&(e.parent.computed=!0);let t=d.indexOf(i);-1==t&&(t+=d.push(i)),e.replaceWith(r.identifier(`_JSON_VALUE_${t}_${a}_`))})()),e.skip()}},NullLiteral(e){let t=d.indexOf(null);-1==t&&(t+=d.push(null)),e.replaceWith(r.identifier(`_JSON_VALUE_${t}_${a}_`))},BooleanLiteral(e){let t=d.indexOf(e.node.value);-1==t&&(t+=d.push(e.node.value)),e.replaceWith(r.identifier(`_JSON_VALUE_${t}_${a}_`))},NumericLiteral(e){t.push((async()=>{if((await minifyNumber(e.node.value)).length<=3)return;"key"==e.parentKey&&"ObjectProperty"==e.parent.type&&(e.parent.computed=!0);let t=d.indexOf(e.node.value);-1==t&&(t+=d.push(e.node.value)),e.replaceWith(r.identifier(`_JSON_VALUE_${t}_${a}_`))})())},StringLiteral(e){if(e.node.value.includes("\0")||e.toString().length<4)return;"key"==e.parentKey&&"ObjectProperty"==e.parent.type&&(e.parent.computed=!0);let t=d.indexOf(e.node.value);-1==t&&(t+=d.push(e.node.value)),e.replaceWith(r.identifier(`_JSON_VALUE_${t}_${a}_`))},ObjectProperty({node:e}){if(e.computed||"Identifier"!=e.key.type||e.key.name.length<4)return;let t=d.indexOf(e.key.name);-1==t&&(t+=d.push(e.key.name)),e.computed=!0,e.key=r.identifier(`_JSON_VALUE_${t}_${a}_`)}}),e.skip()}}),await Promise.all(t);const[n]=e.program.body;if(i("FunctionDeclaration"==n.type),d.length)if($=!0,1==d.length)if("string"!=typeof d[0]||d[0].includes("\n")||d[0].includes("\t")){const e=r.variableDeclaration("let",[r.variableDeclarator(r.identifier(`_JSON_VALUE_0_${a}_`),r.callExpression(r.memberExpression(r.identifier("JSON"),r.identifier("parse")),[r.memberExpression(r.taggedTemplateExpression(r.memberExpression(r.callExpression(r.identifier(`$${a}$SUBSCRIPT$scripts$quine`),[]),r.identifier("split")),r.templateLiteral([r.templateElement({raw:"\t",cooked:"\t"},!0)],[])),r.identifier(`$${a}$SPLIT_INDEX`),!0)]))]);_&&e.declarations.push(r.variableDeclarator(r.identifier(`_UNDEFINED_${a}_`))),n.body.body.unshift(e),E=JSON.stringify(d[0])}else{const e=r.variableDeclaration("let",[r.variableDeclarator(r.identifier(`_JSON_VALUE_0_${a}_`),r.memberExpression(r.taggedTemplateExpression(r.memberExpression(r.callExpression(r.identifier(`$${a}$SUBSCRIPT$scripts$quine`),[]),r.identifier("split")),r.templateLiteral([r.templateElement({raw:"\t",cooked:"\t"},!0)],[])),r.identifier(`$${a}$SPLIT_INDEX`),!0))]);_&&e.declarations.push(r.variableDeclarator(r.identifier(`_UNDEFINED_${a}_`))),n.body.body.unshift(e),E=d[0]}else{const e=r.variableDeclaration("let",[r.variableDeclarator(r.arrayPattern(d.map(((e,t)=>r.identifier(`_JSON_VALUE_${t}_${a}_`)))),r.callExpression(r.memberExpression(r.identifier("JSON"),r.identifier("parse")),[r.memberExpression(r.taggedTemplateExpression(r.memberExpression(r.callExpression(r.identifier(`$${a}$SUBSCRIPT$scripts$quine`),[]),r.identifier("split")),r.templateLiteral([r.templateElement({raw:"\t",cooked:"\t"},!0)],[])),r.identifier(`$${a}$SPLIT_INDEX`),!0)]))]);_&&e.declarations.push(r.variableDeclarator(r.identifier(`_UNDEFINED_${a}_`))),n.body.body.unshift(e),E=JSON.stringify(d)}else _&&n.body.body.unshift(r.variableDeclaration("let",[r.variableDeclarator(r.identifier(`_UNDEFINED_${a}_`))]));y=l(e).code}if(y=(await o.minify(y,{ecma:2015,compress:{passes:1/0,unsafe:!0,unsafe_arrows:!0,unsafe_comps:!0,unsafe_symbols:!0,unsafe_methods:!0,unsafe_proto:!0,unsafe_regexp:!0,unsafe_undefined:!0,sequences:!1},format:{semicolons:!1},keep_classnames:!s,keep_fnames:!s})).code||"",null!=E){y=n(y,`${t?`//${t}\n`:""}\n//\t${E}\t\n`,getFunctionBodyStart(y)+1);for(const[e,t]of y.split("\t").entries())if(t==E){y=y.replace(`$${a}$SPLIT_INDEX`,await minifyNumber(e));break}}return countHackmudCharacters(m)<=countHackmudCharacters(y)+Number($)&&(y=m,t&&(y=n(y,`//${t}\n`,getFunctionBodyStart(y)+1))),y}function parseObjectExpression(e,t){if(!e.properties.length)return!1;for(const r of e.properties){if("ObjectProperty"!=r.type||r.computed)return!1;if(i("Identifier"==r.key.type||"NumericLiteral"==r.key.type||"StringLiteral"==r.key.type),"ArrayExpression"==r.value.type){const e=[];if(!parseArrayExpression(r.value,e))return!1;t["Identifier"==r.key.type?r.key.name:r.key.value]=e}else if("ObjectExpression"==r.value.type){const e={};if(!parseObjectExpression(r.value,e))return!1;t["Identifier"==r.key.type?r.key.name:r.key.value]=e}else if("NullLiteral"==r.value.type)t["Identifier"==r.key.type?r.key.name:r.key.value]=null;else{if("BooleanLiteral"!=r.value.type&&"NumericLiteral"!=r.value.type&&"StringLiteral"!=r.value.type)return!1;t["Identifier"==r.key.type?r.key.name:r.key.value]=r.value.value}}return!0}function parseArrayExpression(e,t){if(!e.elements.length)return!1;for(const r of e.elements){if(!r)return!1;if("ArrayExpression"==r.type){const e=[];if(!parseArrayExpression(r,e))return!1;e.push(e)}else if("ObjectExpression"==r.type){const e={};if(!parseObjectExpression(r,e))return!1;t.push(e)}else if("NullLiteral"==r.type)t.push(null);else{if("BooleanLiteral"!=r.type&&"NumericLiteral"!=r.type&&"StringLiteral"!=r.type)return!1;t.push(r.value)}}return!0}async function minifyNumber(e){return(await o.minify(`$(${e})`,{ecma:2015})).code.match(/\$\((.+)\)/)[1]}function getFunctionBodyStart(e){const t=a(e,{ecmaVersion:2015});t.getToken(),t.getToken(),t.getToken();let r=1;for(;r;){const e=t.getToken();e.type==s.parenL?r++:e.type==s.parenR&&r--}return t.getToken().start}export{countHackmudCharacters as c,minify as default,minify};
|
@@ -7,9 +7,7 @@ export declare type PreprocessOptions = {
|
|
7
7
|
* @param options {@link PreprocessOptions details}
|
8
8
|
*/
|
9
9
|
export declare function preprocess(code: string, { uniqueID }?: Partial<PreprocessOptions>): {
|
10
|
-
semicolons: number;
|
11
|
-
autocomplete: string;
|
12
|
-
seclevel: number;
|
13
10
|
code: string;
|
11
|
+
seclevel: number;
|
14
12
|
};
|
15
13
|
export default preprocess;
|
@@ -1 +1 @@
|
|
1
|
-
import e from"@babel/generator";import{parse as
|
1
|
+
import e from"@babel/generator";import{parse as r}from"@babel/parser";import o from"@babel/traverse";import i from"@babel/types";import{a as t}from"../assert-1b7dada8.js";import{s}from"../spliceString-2c6f214f.js";const{default:a}=o,{default:p}=e;function preprocess(e,{uniqueID:o="00000000000"}={}){if(t(o.match(/^\w{11}$/)),e.match(/(?:SC|DB)\$/))throw new Error("SC$ and DB$ are protected and cannot appear in a script");const n=e;e=e.replace(/^function\s*\(/,"export default function (");const l={f:4,h:3,m:2,l:1,n:0,4:4,3:3,2:2,1:1,0:0};let c,f,d=4;for(;;){let i;try{c=r(e,{plugins:["typescript",["decorators",{decoratorsBeforeExport:!0}],"doExpressions","functionBind","functionSent","partialApplication",["pipelineOperator",{proposal:"hack",topicToken:"%"}],"throwExpressions",["recordAndTuple",{syntaxType:"hash"}],"classProperties","classPrivateProperties","classPrivateMethods","logicalAssignment","numericSeparator","nullishCoalescingOperator","optionalChaining","optionalCatchBinding","objectRestSpread"],sourceType:"module"});break}catch(e){t(e instanceof SyntaxError),i=e}var m;if("BABEL_PARSER_SYNTAX_ERROR"!=i.code||"PrivateInExpectedIn"!=i.reasonCode)throw console.log(null===(m=e.slice(i.pos).match(/.+/))||void 0===m?void 0:m[0]),i;const a=e.slice(i.pos);let p;if(p=a.match(/^#[fhmln43210]s\.scripts\.quine\(\)/))e=s(e,JSON.stringify(n),i.pos,p[0].length);else if(p=a.match(/^#([fhmln43210])?s\.([a-z_][a-z_0-9]{0,24})\.([a-z_][a-z_0-9]{0,24})\(/))p[1]&&(d=Math.min(d,l[p[1]])),e=s(e,`$${o}$SUBSCRIPT$${p[2]}$${p[3]}(`,i.pos,p[0].length);else if(p=a.match(/^#D\(/))e=s(e,`$${o}$DEBUG(`,i.pos,p[0].length);else if(p=a.match(/^#FMCL/))e=s(e,`$${o}$FMCL`,i.pos,p[0].length);else if(p=a.match(/^#G/))e=s(e,`$${o}$GLOBAL`,i.pos,p[0].length);else{if(!(p=a.match(/^#db\.(i|r|f|u|u1|us|ObjectId)\(/)))throw i;e=s(e,`$${o}$DB$${p[1]}(`,i.pos,p[0].length)}}a(c,{Program(e){f=e,e.skip()}});const h=f.scope.hasGlobal("Record"),u=f.scope.hasGlobal("Tuple");return(h||u)&&c.program.body.unshift(i.importDeclaration(h?u?[i.importSpecifier(i.identifier("Record"),i.identifier("Record")),i.importSpecifier(i.identifier("Tuple"),i.identifier("Tuple"))]:[i.importSpecifier(i.identifier("Record"),i.identifier("Record"))]:[i.importSpecifier(i.identifier("Tuple"),i.identifier("Tuple"))],i.stringLiteral("@bloomberg/record-tuple-polyfill"))),f.scope.hasGlobal("Proxy")&&c.program.body.unshift(i.importDeclaration([i.importDefaultSpecifier(i.identifier("Proxy"))],i.stringLiteral("proxy-polyfill/src/proxy.js"))),{code:p(c).code,seclevel:d}}export{preprocess as default,preprocess};
|
@@ -0,0 +1 @@
|
|
1
|
+
import e from"@babel/types";import{e as r}from"../assert-1b7dada8.js";function getReferencePathsToGlobal(t,a){const[o]=a.unshiftContainer("body",e.variableDeclaration("let",[e.variableDeclarator(e.identifier(t))]));a.scope.crawl();const n=r(a.scope.getBinding(t));return o.remove(),n.referencePaths}export{getReferencePathsToGlobal};
|
@@ -15,5 +15,8 @@ export declare type TransformOptions = {
|
|
15
15
|
*
|
16
16
|
* @param options {@link TransformOptions details}
|
17
17
|
*/
|
18
|
-
export declare function transform(file: File, sourceCode: string, { uniqueID, scriptUser, scriptName, seclevel }?: Partial<TransformOptions>): Promise<
|
18
|
+
export declare function transform(file: File, sourceCode: string, { uniqueID, scriptUser, scriptName, seclevel }?: Partial<TransformOptions>): Promise<{
|
19
|
+
file: t.File;
|
20
|
+
seclevel: number;
|
21
|
+
}>;
|
19
22
|
export default transform;
|
@@ -1 +1 @@
|
|
1
|
-
import e from"@babel/traverse";import t from"@babel/types";import{a as i,e as r}from"../assert-1b7dada8.js";function clearObject(e,t=Object.prototype){for(const t of Object.getOwnPropertyNames(e))delete e[t];for(const t of Object.getOwnPropertySymbols(e))delete e[t];return Object.setPrototypeOf(e,t),e}const{default:n}=e,o=["Map","Set","Date","JSON","Math","Array","Error","isNaN","Number","Object","RegExp","String","Symbol","BigInt"];async function transform(e,r,{uniqueID:a="00000000000",scriptUser:s="UNKNOWN",scriptName:l="UNKNOWN",seclevel:c=-1}={}){const p=`_SCRIPT_${a}_`,d=new Map,f=new Map;let b;if(n(e,{Program(e){b=e,e.skip()}}),b.scope.hasGlobal("_START"))for(const e of getReferencePathsToGlobal("_START",b))e.replaceWith(t.identifier("_ST"));if(b.scope.hasGlobal("_TIMEOUT"))for(const e of getReferencePathsToGlobal("_START",b))e.replaceWith(t.identifier("_TO"));if(b.scope.hasGlobal("_SOURCE"))for(const e of getReferencePathsToGlobal("_SOURCE",b))e.replaceWith(t.stringLiteral(r));if(b.scope.hasGlobal("_BUILD_DATE"))for(const e of getReferencePathsToGlobal("_BUILD_DATE",b))e.replaceWith(t.numericLiteral(Date.now()));if(b.scope.hasGlobal("_SCRIPT_USER"))for(const e of getReferencePathsToGlobal("_SCRIPT_USER",b))1==s?e.replaceWith(t.stringLiteral(`$${a}$SCRIPT_USER`)):e.replaceWith(t.stringLiteral(s));if(b.scope.hasGlobal("_SCRIPT_NAME"))for(const e of getReferencePathsToGlobal("_SCRIPT_NAME",b))1==l?e.replaceWith(t.stringLiteral(`$${a}$SCRIPT_NAME`)):e.replaceWith(t.stringLiteral(l));if(b.scope.hasGlobal("_FULL_SCRIPT_NAME"))for(const e of getReferencePathsToGlobal("_FULL_SCRIPT_NAME",b))1==s||1==l?e.replaceWith(t.stringLiteral(`$${a}$FULL_SCRIPT_NAME`)):e.replaceWith(t.stringLiteral(`${s}.${l}`));let y=!1;if(b.scope.hasGlobal("Function")){const e=getReferencePathsToGlobal("Function",b);if(1==e.length){const[t]=e;i("MemberExpression"==t.parent.type,"`Function` isn't available in hackmud, only `Function.prototype` is accessible"),i("Identifier"==t.parent.property.type,"`Function` isn't available in hackmud, only `Function.prototype` is accessible"),i("prototype"==t.parent.property.name,"`Function` isn't available in hackmud, only `Function.prototype` is accessible"),t.parentPath.replaceWith(createGetFunctionPrototypeNode())}else{for(const r of e)i("MemberExpression"==r.parent.type,"`Function` isn't available in hackmud, only `Function.prototype` is accessible"),i("Identifier"==r.parent.property.type,"`Function` isn't available in hackmud, only `Function.prototype` is accessible"),i("prototype"==r.parent.property.name,"`Function` isn't available in hackmud, only `Function.prototype` is accessible"),y=!0,r.parentPath.replaceWith(t.identifier(`$${a}$FUNCTION_DOT_PROTOTYPE`));y=!0}}for(const e of["$fs","$hs","$ms","$ls","$ns","$4s","$3s","$2s","$1s","$0s"])if(b.scope.hasGlobal(e))for(const r of getReferencePathsToGlobal(e,b)){var h,m;i("MemberExpression"==r.parent.type),i("Identifier"==r.parent.property.type),i("MemberExpression"==(null===(h=r.parentPath.parentPath)||void 0===h?void 0:h.node.type)),i("Identifier"==(null===(m=r.parentPath.parentPath)||void 0===m?void 0:m.node.property.type)),r.parentPath.parentPath.replaceWith(t.identifier(`$${a}$SUBSCRIPT$${r.parent.property.name}$${r.parentPath.parentPath.node.property.name}`))}if(b.scope.hasGlobal("$db"))for(const e of getReferencePathsToGlobal("$db",b))i("MemberExpression"==e.parentPath.node.type),i("Identifier"==e.parentPath.node.property.type),e.parentPath.replaceWith(t.identifier(`$${a}$DB$${e.parentPath.node.property.name}`));if(b.scope.hasGlobal("$D"))for(const e of getReferencePathsToGlobal("$D",b))e.replaceWith(t.identifier(`$${a}$DEBUG`));if(b.scope.hasGlobal("$FMCL"))for(const e of getReferencePathsToGlobal("$FMCL",b))e.replaceWith(t.identifier(`$${a}$FMCL`));if(b.scope.hasGlobal("$G"))for(const e of getReferencePathsToGlobal("$G",b))e.replaceWith(t.identifier(`$${a}$GLOBAL`));if(b.scope.hasGlobal("_SECLEVEL"))for(const e of getReferencePathsToGlobal("_SECLEVEL",b))e.replaceWith(c<0?t.unaryExpression("-",t.numericLiteral(-c)):t.numericLiteral(c));let u=!1,$=!1;if(b.scope.hasGlobal("Object"))for(const e of getReferencePathsToGlobal("Object",b))"MemberExpression"!=e.parent.type||e.parent.computed||(i("Identifier"==e.parent.property.type),"getPrototypeOf"==e.parent.property.name?(e.parentPath.replaceWith(t.identifier(`$${a}$GET_PROTOTYPE_OF`)),u=!0):"setPrototypeOf"==e.parent.property.name&&(e.parentPath.replaceWith(t.identifier(`$${a}$SET_PROTOTYPE_OF`)),$=!0));const E=t.blockStatement([]);let _;const T=[];for(const e of b.node.body)if("ExportDefaultDeclaration"==e.type)"FunctionDeclaration"==e.declaration.type||"FunctionExpression"==e.declaration.type||"ArrowFunctionExpression"==e.declaration.type?_=t.functionDeclaration(t.identifier(p),e.declaration.params,"BlockStatement"==e.declaration.body.type?e.declaration.body:t.blockStatement([t.returnStatement(e.declaration.body)])):(i(t.isExpression(e.declaration)),_=t.functionDeclaration(t.identifier(p),[t.identifier("context"),t.identifier("args")],t.blockStatement([t.returnStatement(t.callExpression(e.declaration,[]))])));else if("ExportNamedDeclaration"==e.type){if(e.declaration)if("VariableDeclaration"==e.declaration.type)for(const i of e.declaration.declarations){for(const r in t.getBindingIdentifiers(i.id))"const"==e.declaration.kind?d.set(r,r):f.set(r,r),E.body.push(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(r))]));i.init&&E.body.push(t.expressionStatement(t.assignmentExpression("=",i.id,i.init)))}else{i("id"in e.declaration&&e.declaration.id,`unsupported export type "${e.declaration.type}"`);const t="Identifier"==e.declaration.id.type?e.declaration.id.name:e.declaration.id.value;d.set(t,t),E.body.push(e.declaration)}else if(e.specifiers)for(const r of e.specifiers){i("ExportSpecifier"==r.type,`${r.type} is currently unsupported`);const e="Identifier"==r.exported.type?r.exported.name:r.exported.value;"default"==e?_=t.functionDeclaration(t.identifier(p),[t.identifier("context"),t.identifier("args")],t.blockStatement([t.returnStatement(t.callExpression(r.local,[]))])):T.includes(r.local.name)?f.set(r.local.name,e):d.set(r.local.name,e)}}else if("VariableDeclaration"==e.type)for(const i of e.declarations){for(const r in t.getBindingIdentifiers(i.id))"const"!=e.kind&&(d.has(r)?(f.set(r,d.get(r)),d.delete(r)):T.push(r)),E.body.push(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(r))]));i.init&&E.body.push(t.expressionStatement(t.assignmentExpression("=",i.id,i.init)))}else"FunctionDeclaration"==e.type?E.body.push(t.variableDeclaration("let",[t.variableDeclarator(e.id,t.functionExpression(null,e.params,e.body,e.generator,e.async))])):E.body.push(e);if(_||(_=t.functionDeclaration(t.identifier(p),[t.identifier("context"),t.identifier("args")],t.blockStatement([]))),b.node.body=[_],E.body.length){(d.size||f.size)&&_.body.body.push(t.returnStatement(t.objectExpression([...[...d].map((([e,i])=>t.objectProperty(t.identifier(i),t.identifier(e)))),...[...f].map((([e,i])=>t.objectMethod("get",t.identifier(i),[],t.blockStatement([t.returnStatement(t.identifier(e))]))))]))),b.scope.crawl();const e=new Set;let r=0;for(const[n,o]of[...E.body.entries()].reverse())if("VariableDeclaration"==o.type){i(1==o.declarations.length);const s=o.declarations[0];if(i("Identifier"==s.id.type,`declarator.id.type was "${s.id.type}"`),b.scope.crawl(),b.scope.hasGlobal(s.id.name)){E.body.splice(n,1);const[l]=b.unshiftContainer("body",E),[c]=b.unshiftContainer("body",o);if(b.scope.crawl(),!s.init||"FunctionExpression"!=s.init.type&&"ArrowFunctionExpression"!=s.init.type||Object.keys(b.scope.globals).find((t=>e.has(t)))){const e=b.scope.getBinding(s.id.name);i(e);for(const r of e.referencePaths)i("Identifier"==r.node.type),r.replaceWith(t.memberExpression(t.identifier(`$${a}$GLOBAL`),t.identifier(r.node.name)));for(const r of e.constantViolations){i("AssignmentExpression"==r.node.type);for(const[e,i]of Object.entries(t.getBindingIdentifiers(r.node)))e==s.id.name&&Object.assign(clearObject(i),t.memberExpression(t.identifier(`$${a}$GLOBAL`),t.identifier(e)))}l.remove(),c.remove(),s.init&&E.body.splice(n,0,t.expressionStatement(t.assignmentExpression("=",t.memberExpression(t.identifier(`$${a}$GLOBAL`),t.identifier(s.id.name)),s.init)))}else l.remove(),c.remove(),_.body.body.unshift(o),r++}else e.add(s.id.name)}else if("ClassDeclaration"==o.type&&(b.scope.crawl(),b.scope.hasGlobal(o.id.name))){E.body.splice(n,1);const[e]=b.unshiftContainer("body",E),[r]=b.unshiftContainer("body",o);b.scope.crawl();const s=b.scope.getBinding(o.id.name);i(s);for(const e of s.referencePaths)i("Identifier"==e.node.type),e.replaceWith(t.memberExpression(t.identifier(`$${a}$GLOBAL`),t.identifier(e.node.name)));e.remove(),r.remove(),E.body.splice(n,0,t.expressionStatement(t.assignmentExpression("=",t.memberExpression(t.identifier(`$${a}$GLOBAL`),t.identifier(o.id.name)),t.classExpression(null,o.superClass,o.body,o.decorators))))}if(b.scope.hasGlobal("_EXPORTS"))for(const e of getReferencePathsToGlobal("_EXPORTS",b))e.replaceWith(t.arrayExpression([...d.keys(),...f.keys()].map((e=>t.stringLiteral(e)))));E.body.length&&_.body.body.splice(r,0,t.ifStatement(t.unaryExpression("!",t.identifier(`$${a}$FMCL`)),E))}y&&_.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`$${a}$FUNCTION_DOT_PROTOTYPE`),createGetFunctionPrototypeNode())])),$&&_.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`$${a}$SET_PROTOTYPE_OF`),t.callExpression(t.memberExpression(t.memberExpression(t.identifier("Object"),t.identifier("call")),t.identifier("bind")),[t.identifier(`$${a}$DUNDER_PROTO_SETTER`)]))])),u&&_.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`$${a}$GET_PROTOTYPE_OF`),t.callExpression(t.memberExpression(t.memberExpression(t.identifier("Object"),t.identifier("call")),t.identifier("bind")),[t.identifier(`$${a}$DUNDER_PROTO_GETTER`)]))])),(u||$)&&_.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.objectPattern(u?$?[t.objectProperty(t.identifier("get"),t.identifier(`$${a}$DUNDER_PROTO_GETTER`)),t.objectProperty(t.identifier("set"),t.identifier(`$${a}$DUNDER_PROTO_SETTER`))]:[t.objectProperty(t.identifier("get"),t.identifier(`$${a}$DUNDER_PROTO_GETTER`))]:[t.objectProperty(t.identifier("set"),t.identifier(`$${a}$DUNDER_PROTO_SETTER`))]),t.callExpression(t.memberExpression(t.identifier("Object"),t.identifier("getOwnPropertyDescriptor")),[t.memberExpression(t.identifier("Object"),t.identifier("prototype")),t.stringLiteral("__proto__")]))])),n(e,{BlockStatement({node:e}){for(const[i,r]of e.body.entries())"FunctionDeclaration"!=r.type||r.generator||(e.body.splice(i,1),e.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(r.id,t.arrowFunctionExpression(r.params,r.body,r.async))])))},ClassBody({node:e,scope:r,parent:o}){i(t.isClass(o));let s=!1;for(const i of e.body){if("ClassMethod"!=i.type)continue;let e=!1;if(n(i.body,{ThisExpression(i){e=!0,s=!0,i.replaceWith(t.identifier(`_THIS_${a}_`))},Function(e){e.skip()}},r),e)if("constructor"!=i.kind)i.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`_THIS_${a}_`),t.callExpression(t.memberExpression(t.super(),t.identifier("valueOf")),[]))]));else{const e=[];if(n(i.body,{CallExpression(t){"Super"==t.node.callee.type&&e.push(t)}},r),e.length)if(1==e.length&&"ExpressionStatement"==e[0].parent.type&&e[0].parentPath.parentPath.parent==i)e[0].parentPath.replaceWith(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`_THIS_${a}_`),e[0].node)]));else{for(const i of e)i.replaceWith(t.assignmentExpression("=",t.identifier(`_THIS_${a}_`),i.node));i.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`_THIS_${a}_`))]))}else i.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`_THIS_${a}_`),t.callExpression(t.super(),[]))]))}}!o.superClass&&s&&(o.superClass=t.identifier("Object"))},VariableDeclaration({node:e}){"const"==e.kind&&(e.kind="let")},ThisExpression(e){e.replaceWith(t.identifier("undefined"))},BigIntLiteral(e){const i=Number(e.node.value);BigInt(i)==BigInt(e.node.value)?e.replaceWith(t.callExpression(t.identifier("BigInt"),[t.numericLiteral(i)])):e.replaceWith(t.callExpression(t.identifier("BigInt"),[t.stringLiteral(e.node.value)]))}});const P=b.get("body.0").scope;for(const e of[..._.params].reverse()){if("Identifier"==e.type){if(!P.getBinding(e.name).referenced){_.params.pop();continue}}break}for(const e in b.scope.globals){if("arguments"==e||e.startsWith(`$${a}`))continue;const i=getReferencePathsToGlobal(e,b);if(!(5+e.length+i.length>=e.length*i.length)){for(const r of i)r.replaceWith(t.identifier(`_GLOBAL_${e}_${a}_`));_.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`_GLOBAL_${e}_${a}_`),t.identifier(e))]))}}return e;function createGetFunctionPrototypeNode(){for(const e of o)if(!b.scope.hasOwnBinding(e))return t.memberExpression(t.memberExpression(t.identifier(e),t.identifier("constructor")),t.identifier("prototype"));return t.memberExpression(t.memberExpression(t.arrowFunctionExpression([t.identifier("_")],t.identifier("_")),t.identifier("constructor")),t.identifier("prototype"))}}function getReferencePathsToGlobal(e,i){const[n]=i.unshiftContainer("body",t.variableDeclaration("let",[t.variableDeclarator(t.identifier(e))]));i.scope.crawl();const o=r(i.scope.getBinding(e));return n.remove(),o.referencePaths}export{transform as default,transform};
|
1
|
+
import e from"@babel/traverse";import t from"@babel/types";import{a as i}from"../assert-1b7dada8.js";import{getReferencePathsToGlobal as r}from"./shared.js";function clearObject(e,t=Object.prototype){for(const t of Object.getOwnPropertyNames(e))delete e[t];for(const t of Object.getOwnPropertySymbols(e))delete e[t];return Object.setPrototypeOf(e,t),e}const{default:n}=e,o=["Map","Set","Date","JSON","Math","Array","Error","isNaN","Number","Object","RegExp","String","Symbol","BigInt"];async function transform(e,a,{uniqueID:s="00000000000",scriptUser:p="UNKNOWN",scriptName:l="UNKNOWN",seclevel:c=4}={}){const d=`_SCRIPT_${s}_`,f=new Map,b=new Map;let y;if(n(e,{Program(e){y=e,e.skip()}}),y.scope.hasGlobal("_START"))for(const e of r("_START",y))e.replaceWith(t.identifier("_ST"));if(y.scope.hasGlobal("_TIMEOUT"))for(const e of r("_START",y))e.replaceWith(t.identifier("_TO"));if(y.scope.hasGlobal("_SOURCE"))for(const e of r("_SOURCE",y))e.replaceWith(t.stringLiteral(a));if(y.scope.hasGlobal("_BUILD_DATE"))for(const e of r("_BUILD_DATE",y))e.replaceWith(t.numericLiteral(Date.now()));if(y.scope.hasGlobal("_SCRIPT_USER"))for(const e of r("_SCRIPT_USER",y))1==p?e.replaceWith(t.stringLiteral(`$${s}$SCRIPT_USER`)):e.replaceWith(t.stringLiteral(p));if(y.scope.hasGlobal("_SCRIPT_NAME"))for(const e of r("_SCRIPT_NAME",y))1==l?e.replaceWith(t.stringLiteral(`$${s}$SCRIPT_NAME`)):e.replaceWith(t.stringLiteral(l));if(y.scope.hasGlobal("_FULL_SCRIPT_NAME"))for(const e of r("_FULL_SCRIPT_NAME",y))1==p||1==l?e.replaceWith(t.stringLiteral(`$${s}$FULL_SCRIPT_NAME`)):e.replaceWith(t.stringLiteral(`${p}.${l}`));let h=!1;if(y.scope.hasGlobal("Function")){const e=r("Function",y);if(1==e.length){const[t]=e;i("MemberExpression"==t.parent.type,"`Function` isn't available in hackmud, only `Function.prototype` is accessible"),i("Identifier"==t.parent.property.type,"`Function` isn't available in hackmud, only `Function.prototype` is accessible"),i("prototype"==t.parent.property.name,"`Function` isn't available in hackmud, only `Function.prototype` is accessible"),t.parentPath.replaceWith(createGetFunctionPrototypeNode())}else{for(const r of e)i("MemberExpression"==r.parent.type,"`Function` isn't available in hackmud, only `Function.prototype` is accessible"),i("Identifier"==r.parent.property.type,"`Function` isn't available in hackmud, only `Function.prototype` is accessible"),i("prototype"==r.parent.property.name,"`Function` isn't available in hackmud, only `Function.prototype` is accessible"),h=!0,r.parentPath.replaceWith(t.identifier(`$${s}$FUNCTION_DOT_PROTOTYPE`));h=!0}}let $=4;for(const e of["$fs","$4s","$s"])if(y.scope.hasGlobal(e))for(const n of r(e,y)){var m,E;i("MemberExpression"==n.parent.type),i("Identifier"==n.parent.property.type),i("MemberExpression"==(null===(m=n.parentPath.parentPath)||void 0===m?void 0:m.node.type)),i("Identifier"==(null===(E=n.parentPath.parentPath)||void 0===E?void 0:E.node.property.type)),n.parentPath.parentPath.replaceWith(t.identifier(`$${s}$SUBSCRIPT$${n.parent.property.name}$${n.parentPath.parentPath.node.property.name}`))}for(const e of["$hs","$3s"])if(y.scope.hasGlobal(e)){$=3;for(const n of r(e,y)){var u,P;i("MemberExpression"==n.parent.type),i("Identifier"==n.parent.property.type),i("MemberExpression"==(null===(u=n.parentPath.parentPath)||void 0===u?void 0:u.node.type)),i("Identifier"==(null===(P=n.parentPath.parentPath)||void 0===P?void 0:P.node.property.type)),n.parentPath.parentPath.replaceWith(t.identifier(`$${s}$SUBSCRIPT$${n.parent.property.name}$${n.parentPath.parentPath.node.property.name}`))}}for(const e of["$ms","$2s"])if(y.scope.hasGlobal(e)){$=2;for(const n of r(e,y)){var _,T;i("MemberExpression"==n.parent.type),i("Identifier"==n.parent.property.type),i("MemberExpression"==(null===(_=n.parentPath.parentPath)||void 0===_?void 0:_.node.type)),i("Identifier"==(null===(T=n.parentPath.parentPath)||void 0===T?void 0:T.node.property.type)),n.parentPath.parentPath.replaceWith(t.identifier(`$${s}$SUBSCRIPT$${n.parent.property.name}$${n.parentPath.parentPath.node.property.name}`))}}for(const e of["$ls","$1s"])if(y.scope.hasGlobal(e)){$=1;for(const n of r(e,y)){var O,x;i("MemberExpression"==n.parent.type),i("Identifier"==n.parent.property.type),i("MemberExpression"==(null===(O=n.parentPath.parentPath)||void 0===O?void 0:O.node.type)),i("Identifier"==(null===(x=n.parentPath.parentPath)||void 0===x?void 0:x.node.property.type)),n.parentPath.parentPath.replaceWith(t.identifier(`$${s}$SUBSCRIPT$${n.parent.property.name}$${n.parentPath.parentPath.node.property.name}`))}}for(const e of["$ns","$0s"])if(y.scope.hasGlobal(e)){$=0;for(const n of r(e,y)){var v,S;i("MemberExpression"==n.parent.type),i("Identifier"==n.parent.property.type),i("MemberExpression"==(null===(v=n.parentPath.parentPath)||void 0===v?void 0:v.node.type)),i("Identifier"==(null===(S=n.parentPath.parentPath)||void 0===S?void 0:S.node.property.type)),n.parentPath.parentPath.replaceWith(t.identifier(`$${s}$SUBSCRIPT$${n.parent.property.name}$${n.parentPath.parentPath.node.property.name}`))}}if(c=Math.min(c,$),y.scope.hasGlobal("$db"))for(const e of r("$db",y))i("MemberExpression"==e.parentPath.node.type),i("Identifier"==e.parentPath.node.property.type),e.parentPath.replaceWith(t.identifier(`$${s}$DB$${e.parentPath.node.property.name}`));if(y.scope.hasGlobal("$D"))for(const e of r("$D",y))e.replaceWith(t.identifier(`$${s}$DEBUG`));if(y.scope.hasGlobal("$FMCL"))for(const e of r("$FMCL",y))e.replaceWith(t.identifier(`$${s}$FMCL`));if(y.scope.hasGlobal("$G"))for(const e of r("$G",y))e.replaceWith(t.identifier(`$${s}$GLOBAL`));if(y.scope.hasGlobal("_SECLEVEL"))for(const e of r("_SECLEVEL",y))e.replaceWith(t.numericLiteral(c));let D=!1,g=!1;if(y.scope.hasGlobal("Object"))for(const e of r("Object",y))"MemberExpression"!=e.parent.type||e.parent.computed||(i("Identifier"==e.parent.property.type),"getPrototypeOf"==e.parent.property.name?(e.parentPath.replaceWith(t.identifier(`$${s}$GET_PROTOTYPE_OF`)),D=!0):"setPrototypeOf"==e.parent.property.name&&(e.parentPath.replaceWith(t.identifier(`$${s}$SET_PROTOTYPE_OF`)),g=!0));const I=y.node.body[y.node.body.length-1];let R;if("ExportNamedDeclaration"==I.type){y.node.body.pop();for(const e of I.specifiers){i("ExportSpecifier"==e.type,`${e.type} is currently unsupported`);const t="Identifier"==e.exported.type?e.exported.name:e.exported.value;"default"==t?R=e.local.name:f.set(e.local.name,t)}}const L=t.blockStatement([]);let F;for(const e of y.node.body)if("VariableDeclaration"==e.type)for(const i of e.declarations)if("Identifier"!=i.id.type||!i.init||"FunctionExpression"!=i.init.type&&"ArrowFunctionExpression"!=i.init.type||i.init.async||i.init.generator){for(const r in t.getBindingIdentifiers(i.id))r==R&&(F=t.functionDeclaration(t.identifier(d),[t.identifier("context"),t.identifier("args")],t.blockStatement([t.returnStatement(t.callExpression(t.identifier(R),[]))]))),"const"!=e.kind&&f.has(r)&&(b.set(r,f.get(r)),f.delete(r)),L.body.push(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(r))]));i.init&&L.body.push(t.expressionStatement(t.assignmentExpression("=",i.id,i.init)))}else F=t.functionDeclaration(t.identifier(d),i.init.params,"BlockStatement"==i.init.body.type?i.init.body:t.blockStatement([t.returnStatement(i.init.body)]));else"FunctionDeclaration"==e.type?e.id.name==R?F=e:L.body.push(t.variableDeclaration("let",[t.variableDeclarator(e.id,t.functionExpression(null,e.params,e.body,e.generator,e.async))])):L.body.push(e);if(F||(F=t.functionDeclaration(t.identifier(d),[t.identifier("context"),t.identifier("args")],t.blockStatement([]))),y.node.body=[F],L.body.length){(f.size||b.size)&&F.body.body.push(t.returnStatement(t.objectExpression([...[...f].map((([e,i])=>t.objectProperty(t.identifier(i),t.identifier(e)))),...[...b].map((([e,i])=>t.objectMethod("get",t.identifier(i),[],t.blockStatement([t.returnStatement(t.identifier(e))]))))]))),y.scope.crawl();const e=new Set;let n=0;for(const[r,o]of[...L.body.entries()].reverse())if("VariableDeclaration"==o.type){i(1==o.declarations.length);const a=o.declarations[0];if(i("Identifier"==a.id.type,`declarator.id.type was "${a.id.type}"`),y.scope.crawl(),y.scope.hasGlobal(a.id.name)){L.body.splice(r,1);const[p]=y.unshiftContainer("body",L),[l]=y.unshiftContainer("body",o);if(y.scope.crawl(),!a.init||"FunctionExpression"!=a.init.type&&"ArrowFunctionExpression"!=a.init.type||Object.keys(y.scope.globals).find((t=>e.has(t)))){const e=y.scope.getBinding(a.id.name);i(e);for(const r of e.referencePaths)i("Identifier"==r.node.type),r.replaceWith(t.memberExpression(t.identifier(`$${s}$GLOBAL`),t.identifier(r.node.name)));for(const i of e.constantViolations)if("AssignmentExpression"==i.node.type)for(const[e,r]of Object.entries(t.getBindingIdentifiers(i.node)))e==a.id.name&&Object.assign(clearObject(r),t.memberExpression(t.identifier(`$${s}$GLOBAL`),t.identifier(e)));p.remove(),l.remove(),a.init&&L.body.splice(r,0,t.expressionStatement(t.assignmentExpression("=",t.memberExpression(t.identifier(`$${s}$GLOBAL`),t.identifier(a.id.name)),a.init)))}else p.remove(),l.remove(),F.body.body.unshift(o),n++}else e.add(a.id.name)}else if("ClassDeclaration"==o.type&&(y.scope.crawl(),y.scope.hasGlobal(o.id.name))){L.body.splice(r,1);const[e]=y.unshiftContainer("body",L),[n]=y.unshiftContainer("body",o);y.scope.crawl();const a=y.scope.getBinding(o.id.name);i(a);for(const e of a.referencePaths)i("Identifier"==e.node.type),e.replaceWith(t.memberExpression(t.identifier(`$${s}$GLOBAL`),t.identifier(e.node.name)));e.remove(),n.remove(),L.body.splice(r,0,t.expressionStatement(t.assignmentExpression("=",t.memberExpression(t.identifier(`$${s}$GLOBAL`),t.identifier(o.id.name)),t.classExpression(null,o.superClass,o.body,o.decorators))))}if(y.scope.hasGlobal("_EXPORTS"))for(const e of r("_EXPORTS",y))e.replaceWith(t.arrayExpression([...f.keys(),...b.keys()].map((e=>t.stringLiteral(e)))));L.body.length&&F.body.body.splice(n,0,t.ifStatement(t.unaryExpression("!",t.identifier(`$${s}$FMCL`)),L))}return h&&F.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`$${s}$FUNCTION_DOT_PROTOTYPE`),createGetFunctionPrototypeNode())])),g&&F.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`$${s}$SET_PROTOTYPE_OF`),t.callExpression(t.memberExpression(t.memberExpression(t.identifier("Object"),t.identifier("call")),t.identifier("bind")),[t.identifier(`$${s}$DUNDER_PROTO_SETTER`)]))])),D&&F.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`$${s}$GET_PROTOTYPE_OF`),t.callExpression(t.memberExpression(t.memberExpression(t.identifier("Object"),t.identifier("call")),t.identifier("bind")),[t.identifier(`$${s}$DUNDER_PROTO_GETTER`)]))])),(D||g)&&F.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.objectPattern(D?g?[t.objectProperty(t.identifier("get"),t.identifier(`$${s}$DUNDER_PROTO_GETTER`)),t.objectProperty(t.identifier("set"),t.identifier(`$${s}$DUNDER_PROTO_SETTER`))]:[t.objectProperty(t.identifier("get"),t.identifier(`$${s}$DUNDER_PROTO_GETTER`))]:[t.objectProperty(t.identifier("set"),t.identifier(`$${s}$DUNDER_PROTO_SETTER`))]),t.callExpression(t.memberExpression(t.identifier("Object"),t.identifier("getOwnPropertyDescriptor")),[t.memberExpression(t.identifier("Object"),t.identifier("prototype")),t.stringLiteral("__proto__")]))])),n(e,{BlockStatement({node:e}){for(const[i,r]of e.body.entries())"FunctionDeclaration"!=r.type||r.generator||(e.body.splice(i,1),e.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(r.id,t.arrowFunctionExpression(r.params,r.body,r.async))])))},ClassBody({node:e,scope:r,parent:o}){i(t.isClass(o));let a=!1;for(const i of e.body){if("ClassMethod"!=i.type)continue;let e=!1;if(n(i.body,{ThisExpression(i){e=!0,a=!0,i.replaceWith(t.identifier(`_THIS_${s}_`))},Function(e){e.skip()}},r),e)if("constructor"!=i.kind)i.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`_THIS_${s}_`),t.callExpression(t.memberExpression(t.super(),t.identifier("valueOf")),[]))]));else{const e=[];if(n(i.body,{CallExpression(t){"Super"==t.node.callee.type&&e.push(t)}},r),e.length)if(1==e.length&&"ExpressionStatement"==e[0].parent.type&&e[0].parentPath.parentPath.parent==i)e[0].parentPath.replaceWith(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`_THIS_${s}_`),e[0].node)]));else{for(const i of e)i.replaceWith(t.assignmentExpression("=",t.identifier(`_THIS_${s}_`),i.node));i.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`_THIS_${s}_`))]))}else i.body.body.unshift(t.variableDeclaration("let",[t.variableDeclarator(t.identifier(`_THIS_${s}_`),t.callExpression(t.super(),[]))]))}}!o.superClass&&a&&(o.superClass=t.identifier("Object"))},VariableDeclaration({node:e}){"const"==e.kind&&(e.kind="let")},ThisExpression(e){e.replaceWith(t.identifier("undefined"))},BigIntLiteral(e){const i=Number(e.node.value);BigInt(i)==BigInt(e.node.value)?e.replaceWith(t.callExpression(t.identifier("BigInt"),[t.numericLiteral(i)])):e.replaceWith(t.callExpression(t.identifier("BigInt"),[t.stringLiteral(e.node.value)]))}}),{file:e,seclevel:c};function createGetFunctionPrototypeNode(){for(const e of o)if(!y.scope.hasOwnBinding(e))return t.memberExpression(t.memberExpression(t.identifier(e),t.identifier("constructor")),t.identifier("prototype"));return t.memberExpression(t.memberExpression(t.arrowFunctionExpression([t.identifier("_")],t.identifier("_")),t.identifier("constructor")),t.identifier("prototype"))}}export{transform as default,transform};
|
package/push.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
import r from"fs";import{resolve as e,extname as a,basename as t}from"path";import{c as i}from"./processScript/minify.js";import{w as
|
1
|
+
import r from"fs";import{resolve as e,extname as a,basename as t}from"path";import{c as i}from"./processScript/minify.js";import{w as s}from"./writeFilePersistent-4e3ff264.js";import{s as o,processScript as p}from"./processScript/index.js";import"@babel/generator";import"@babel/traverse";import"@babel/types";import"./assert-1b7dada8.js";import"./spliceString-2c6f214f.js";import"acorn";import"terser";import"./processScript/shared.js";import"@babel/parser";import"@babel/plugin-proposal-class-properties";import"@babel/plugin-proposal-class-static-block";import"@babel/plugin-proposal-decorators";import"@babel/plugin-proposal-do-expressions";import"@babel/plugin-proposal-function-bind";import"@babel/plugin-proposal-function-sent";import"@babel/plugin-proposal-json-strings";import"@babel/plugin-proposal-logical-assignment-operators";import"@babel/plugin-proposal-nullish-coalescing-operator";import"@babel/plugin-proposal-numeric-separator";import"@babel/plugin-proposal-object-rest-spread";import"@babel/plugin-proposal-optional-catch-binding";import"@babel/plugin-proposal-optional-chaining";import"@babel/plugin-proposal-partial-application";import"@babel/plugin-proposal-pipeline-operator";import"@babel/plugin-proposal-private-property-in-object";import"@babel/plugin-proposal-record-and-tuple";import"@babel/plugin-proposal-throw-expressions";import"@babel/plugin-transform-exponentiation-operator";import"@babel/plugin-transform-typescript";import"@rollup/plugin-babel";import"@rollup/plugin-commonjs";import"@rollup/plugin-json";import"@rollup/plugin-node-resolve";import"perf_hooks";import"prettier";import"rollup";import"./processScript/postprocess.js";import"./processScript/preprocess.js";import"./processScript/transform.js";class DynamicMap extends Map{constructor(r){super(),this.fallbackHandler=r}get(r){if(super.has(r))return super.get(r);const e=this.fallbackHandler(r);return super.set(r,e),e}}function forEachParallel(r,e){const a=[];for(const t of r)a.push(e(t));return Promise.all(a)}const{readFile:n,readdir:l}=r.promises;async function push(r,c,{scripts:m="*.*",onPush:f=(r=>{}),minify:u=!0,mangleNames:g=!1}={}){"string"==typeof m&&(m=[m]);const b=new DynamicMap((r=>new Set)),h=new Set,d=new Set;let w=!1;for(const r of m){const[e,a]=r.split(".");e&&"*"!=e?a&&"*"!=a?b.get(e).add(a):h.add(e):a&&"*"!=a?d.add(a):w=!0}const y=new DynamicMap((r=>new Set)),$=[],S=new DynamicMap((r=>new Set));let P;if(d.size||w){const t=await l(e(c),{withFileTypes:!0}),i=new Set([...(P=await l(e(r),{withFileTypes:!0})).filter((r=>r.isDirectory())).map((r=>r.name)),...t.filter((r=>r.isDirectory())).map((r=>r.name)),...t.filter((r=>r.isFile()&&".key"==a(r.name))).map((r=>r.name.slice(0,-4))),...b.keys(),...h]);if(w)for(const r of i)h.add(r);else for(const r of i){const e=b.get(r);for(const r of d)e.add(r)}}return await forEachParallel(h,(async m=>{await l(e(r,m),{withFileTypes:!0}).then((async l=>{await forEachParallel(l,(async l=>{const b=a(l.name);if(l.isFile()&&o.includes(b)){const a=t(l.name,b),o=e(r,m,l.name),{srcLength:h,script:d}=await p(await n(o,{encoding:"utf-8"}),{minify:u,scriptUser:m,scriptName:a,filePath:o,mangleNames:g}),w={file:`${m}/${l.name}`,users:[m],minLength:i(d),error:null,srcLength:h};S.get(m).add(a),$.push(w),await s(e(c,m,`scripts/${a}.js`),d),f(w)}}))}),(r=>{if("ENOENT"!=r.code)throw r}))})),await forEachParallel(b,(async([a,t])=>{h.has(a)||await forEachParallel(t,(async t=>{let l,m,b;for(const i of o)try{m=`${t}${i}`,l=await n(b=e(r,a,m),{encoding:"utf-8"});break}catch{}if(l){const{srcLength:r,script:o}=await p(l,{minify:u,scriptUser:a,scriptName:t,filePath:b,mangleNames:g}),n={file:`${a}/${m}`,users:[a],minLength:i(o),error:null,srcLength:r};$.push(n),await s(e(c,a,"scripts",`${t}.js`),o),f(n)}else y.get(t).add(a)}))})),h.size?await forEachParallel(P||await l(e(r),{withFileTypes:!0}),(async l=>{const m=a(l.name);if(!l.isFile()||!o.includes(m))return;const b=t(l.name,m),d=[...h,...y.get(b)].filter((r=>!S.get(r).has(b)));if(!d.length)return;const w=Math.floor(Math.random()*2**52).toString(36).padStart(11,"0"),P=e(r,l.name),{srcLength:E,script:j}=await p(await n(P,{encoding:"utf-8"}),{minify:u,scriptUser:!0,scriptName:b,uniqueID:w,filePath:P,mangleNames:g}),L={file:l.name,users:d,minLength:i(j),error:null,srcLength:E};await forEachParallel(d,(r=>s(e(c,r,`scripts/${b}.js`),j.replace(new RegExp(`$${w}$SCRIPT_USER`,"g"),r).replace(new RegExp(`$${w}$FULL_SCRIPT_NAME`,"g"),`${r}.${b}`)))),$.push(L),f(L)})):await forEachParallel(y,(async([a,t])=>{let l,m,b;for(const t of o)try{m=`${a}${t}`,l=await n(b=e(r,m),{encoding:"utf-8"});break}catch{}if(l){const r=Math.floor(Math.random()*2**52).toString(36).padStart(11,"0"),{srcLength:o,script:n}=await p(l,{minify:u,scriptUser:!0,scriptName:a,uniqueID:r,filePath:b,mangleNames:g}),h={file:m,users:[...t],minLength:i(n),error:null,srcLength:o};await forEachParallel(t,(t=>s(e(c,t,`scripts/${a}.js`),n.replace(new RegExp(`$${r}$SCRIPT_USER`,"g"),t).replace(new RegExp(`$${r}$FULL_SCRIPT_NAME`,"g"),`${t}.${a}`)))),$.push(h),f(h)}})),$}export{DynamicMap as D,push as default,push};
|
package/test.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
import p from"fs";import{resolve as o,extname as r}from"path";import{s as i,processScript as e}from"./processScript/index.js";import"@babel/generator";import"@babel/parser";import"@babel/plugin-proposal-class-properties";import"@babel/plugin-proposal-class-static-block";import"@babel/plugin-proposal-decorators";import"@babel/plugin-proposal-do-expressions";import"@babel/plugin-proposal-function-bind";import"@babel/plugin-proposal-function-sent";import"@babel/plugin-proposal-json-strings";import"@babel/plugin-proposal-logical-assignment-operators";import"@babel/plugin-proposal-nullish-coalescing-operator";import"@babel/plugin-proposal-numeric-separator";import"@babel/plugin-proposal-object-rest-spread";import"@babel/plugin-proposal-optional-catch-binding";import"@babel/plugin-proposal-optional-chaining";import"@babel/plugin-proposal-partial-application";import"@babel/plugin-proposal-pipeline-operator";import"@babel/plugin-proposal-private-property-in-object";import"@babel/plugin-proposal-record-and-tuple";import"@babel/plugin-proposal-throw-expressions";import"@babel/plugin-transform-exponentiation-operator";import"@babel/plugin-transform-typescript";import"@babel/traverse";import"@babel/types";import"@rollup/plugin-babel";import"@rollup/plugin-commonjs";import"@rollup/plugin-json";import"@rollup/plugin-node-resolve";import"./assert-1b7dada8.js";import"./processScript/minify.js";import"./spliceString-2c6f214f.js";import"acorn";import"terser";import"perf_hooks";import"prettier";import"rollup";import"./processScript/postprocess.js";import"./processScript/preprocess.js";import"./processScript/transform.js";const{readFile:s,readdir:t}=p.promises;async function test(p){const l=[],a=[];for(const n of await t(p,{withFileTypes:!0}))n.isDirectory()?l.push(t(o(p,n.name),{withFileTypes:!0}).then((t=>{const l=[];for(const m of t)m.isFile()&&i.includes(r(m.name))&&l.push(s(o(p,n.name,m.name),{encoding:"utf-8"}).then(e).then((({warnings:p})=>a.push(...p.map((({message:p,line:o})=>({file:`${n.name}/${m.name}`,message:p,line:o})))))));return Promise.all(l)}))):n.isFile()&&i.includes(r(n.name))&&l.push(s(o(p,n.name),{encoding:"utf-8"}).then(e).then((({warnings:p})=>a.push(...p.map((({message:p,line:o})=>({file:n.name,message:p,line:o})))))));return await Promise.all(l),a}export{test as default,test};
|
1
|
+
import p from"fs";import{resolve as o,extname as r}from"path";import{s as i,processScript as e}from"./processScript/index.js";import"@babel/generator";import"@babel/parser";import"@babel/plugin-proposal-class-properties";import"@babel/plugin-proposal-class-static-block";import"@babel/plugin-proposal-decorators";import"@babel/plugin-proposal-do-expressions";import"@babel/plugin-proposal-function-bind";import"@babel/plugin-proposal-function-sent";import"@babel/plugin-proposal-json-strings";import"@babel/plugin-proposal-logical-assignment-operators";import"@babel/plugin-proposal-nullish-coalescing-operator";import"@babel/plugin-proposal-numeric-separator";import"@babel/plugin-proposal-object-rest-spread";import"@babel/plugin-proposal-optional-catch-binding";import"@babel/plugin-proposal-optional-chaining";import"@babel/plugin-proposal-partial-application";import"@babel/plugin-proposal-pipeline-operator";import"@babel/plugin-proposal-private-property-in-object";import"@babel/plugin-proposal-record-and-tuple";import"@babel/plugin-proposal-throw-expressions";import"@babel/plugin-transform-exponentiation-operator";import"@babel/plugin-transform-typescript";import"@babel/traverse";import"@babel/types";import"@rollup/plugin-babel";import"@rollup/plugin-commonjs";import"@rollup/plugin-json";import"@rollup/plugin-node-resolve";import"./assert-1b7dada8.js";import"./processScript/minify.js";import"./spliceString-2c6f214f.js";import"acorn";import"terser";import"./processScript/shared.js";import"perf_hooks";import"prettier";import"rollup";import"./processScript/postprocess.js";import"./processScript/preprocess.js";import"./processScript/transform.js";const{readFile:s,readdir:t}=p.promises;async function test(p){const l=[],a=[];for(const n of await t(p,{withFileTypes:!0}))n.isDirectory()?l.push(t(o(p,n.name),{withFileTypes:!0}).then((t=>{const l=[];for(const m of t)m.isFile()&&i.includes(r(m.name))&&l.push(s(o(p,n.name,m.name),{encoding:"utf-8"}).then(e).then((({warnings:p})=>a.push(...p.map((({message:p,line:o})=>({file:`${n.name}/${m.name}`,message:p,line:o})))))));return Promise.all(l)}))):n.isFile()&&i.includes(r(n.name))&&l.push(s(o(p,n.name),{encoding:"utf-8"}).then(e).then((({warnings:p})=>a.push(...p.map((({message:p,line:o})=>({file:n.name,message:p,line:o})))))));return await Promise.all(l),a}export{test as default,test};
|
package/watch.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
import r from"fs";import{extname as o,basename as i,resolve as p}from"path";import{c as t}from"./processScript/minify.js";import{w as e}from"./writeFilePersistent-4e3ff264.js";import{watch as s}from"chokidar";import{s as n,processScript as a}from"./processScript/index.js";import{generateTypings as l}from"./generateTypings.js";import"@babel/generator";import"@babel/
|
1
|
+
import r from"fs";import{extname as o,basename as i,resolve as p}from"path";import{c as t}from"./processScript/minify.js";import{w as e}from"./writeFilePersistent-4e3ff264.js";import{watch as s}from"chokidar";import{s as n,processScript as a}from"./processScript/index.js";import{generateTypings as l}from"./generateTypings.js";import"@babel/generator";import"@babel/traverse";import"@babel/types";import"./assert-1b7dada8.js";import"./spliceString-2c6f214f.js";import"acorn";import"terser";import"./processScript/shared.js";import"@babel/parser";import"@babel/plugin-proposal-class-properties";import"@babel/plugin-proposal-class-static-block";import"@babel/plugin-proposal-decorators";import"@babel/plugin-proposal-do-expressions";import"@babel/plugin-proposal-function-bind";import"@babel/plugin-proposal-function-sent";import"@babel/plugin-proposal-json-strings";import"@babel/plugin-proposal-logical-assignment-operators";import"@babel/plugin-proposal-nullish-coalescing-operator";import"@babel/plugin-proposal-numeric-separator";import"@babel/plugin-proposal-object-rest-spread";import"@babel/plugin-proposal-optional-catch-binding";import"@babel/plugin-proposal-optional-chaining";import"@babel/plugin-proposal-partial-application";import"@babel/plugin-proposal-pipeline-operator";import"@babel/plugin-proposal-private-property-in-object";import"@babel/plugin-proposal-record-and-tuple";import"@babel/plugin-proposal-throw-expressions";import"@babel/plugin-transform-exponentiation-operator";import"@babel/plugin-transform-typescript";import"@rollup/plugin-babel";import"@rollup/plugin-commonjs";import"@rollup/plugin-json";import"@rollup/plugin-node-resolve";import"perf_hooks";import"prettier";import"rollup";import"./processScript/postprocess.js";import"./processScript/preprocess.js";import"./processScript/transform.js";const{readFile:c,readdir:m}=r.promises;function watch(r,b,u,g,h,{genTypes:f}={}){const d=s("",{depth:1,cwd:r,awaitWriteFinish:{stabilityThreshold:100}}).on("change",(async s=>{const l=o(s);if(n.includes(l)){const f=i(s,l);if(s==i(s)){if(!g.length||g.includes(f)){const l=await c(p(r,s),{encoding:"utf-8"}),g=new Map,d=[];for(const t of await m(r,{withFileTypes:!0}))t.isDirectory()&&d.push(m(p(r,t.name),{withFileTypes:!0}).then((r=>{for(const p of r){if(!p.isFile())continue;const r=o(p.name);if(!n.includes(r))continue;const e=i(p.name,r),s=g.get(e);s?s.push(t.name):g.set(e,[t.name])}})));await Promise.all(d);let w=null;const{script:j,srcLength:y}=await a(l).catch((r=>(w=r,{script:"",srcLength:0}))),L={file:s,users:[],minLength:0,error:w,srcLength:y},F=[];if(!w)if(j){const r=g.get(f)||[];L.minLength=t(j),u.length||(u=(await m(b,{withFileTypes:!0})).filter((r=>r.isFile()&&".key"==o(r.name))).map((r=>i(r.name,".key"))));for(const o of u)r.includes(o)||(L.users.push(o),F.push(e(p(b,o,"scripts",`${f}.js`),j)))}else L.error=new Error("processed script was empty");h&&(await Promise.all(F),h(L))}}else{const o=i(p(s,".."));if((!u.length||u.includes(o))&&(!g.length||g.includes(f))){const i=await c(p(r,s),{encoding:"utf-8"});let n=null;const{script:l,srcLength:m}=await a(i).catch((r=>(n=r,{script:"",srcLength:0}))),u={file:s,users:[o],minLength:0,error:n,srcLength:m};n||(l?(u.minLength=t(l),await e(p(b,o,"scripts",`${f}.js`),l)):u.error=new Error("processed script was empty")),null==h||h(u)}}}}));f&&(l(r,p(r,f),b),d.on("add",(()=>l(r,p(r,f),b))),d.on("unlink",(()=>l(r,p(r,f),b))))}export{watch as default,watch};
|