@lukaskj/xmonkey 2.2.7 → 2.2.8

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.
Files changed (59) hide show
  1. package/dist/build.js +18 -40
  2. package/dist/esm/build.d.ts +2 -0
  3. package/dist/esm/build.js +10 -0
  4. package/dist/esm/console-script/console-script.decorator.js +10 -0
  5. package/dist/esm/console-script/console-script.interface.js +4 -0
  6. package/dist/esm/console-script/index.js +3 -0
  7. package/dist/esm/esbuild/build.js +29 -0
  8. package/dist/esm/esbuild/plugins/xmonkey-output-stats-plugin.js +18 -0
  9. package/dist/esm/esbuild/plugins/xmonkey-strip-metadata-plugin.js +77 -0
  10. package/dist/esm/esbuild/plugins/xmonkey-styles-plugin.js +36 -0
  11. package/dist/esm/hooks/index.js +30 -0
  12. package/dist/esm/index.js +1 -0
  13. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  14. package/dist/esm/types.js +2 -0
  15. package/dist/esm/ui-script/index.js +3 -0
  16. package/dist/esm/ui-script/ui-script.decorator.js +20 -0
  17. package/dist/esm/ui-script/ui-script.interface.js +2 -0
  18. package/dist/esm/utils/get-storage-key-id-from-string.js +4 -0
  19. package/dist/esm/utils/is-null-or-undefined.js +5 -0
  20. package/dist/esm/utils/sleep.js +4 -0
  21. package/dist/esm/x-monkey-window-component.js +17 -0
  22. package/dist/styles/_colors.scss +4 -1
  23. package/dist/styles/_xmonkey-wrapper.scss +15 -13
  24. package/package.json +37 -38
  25. package/dist/build.d.ts +0 -1
  26. package/dist/console-script/console-script.decorator.js +0 -9
  27. package/dist/console-script/console-script.interface.js +0 -3
  28. package/dist/console-script/index.js +0 -2
  29. package/dist/esbuild/build.js +0 -28
  30. package/dist/esbuild/plugins/xmonkey-output-stats-plugin.js +0 -17
  31. package/dist/esbuild/plugins/xmonkey-strip-metadata-plugin.js +0 -76
  32. package/dist/esbuild/plugins/xmonkey-styles-plugin.js +0 -34
  33. package/dist/hooks/index.js +0 -29
  34. package/dist/index.js +0 -0
  35. package/dist/types.js +0 -1
  36. package/dist/ui-script/index.js +0 -2
  37. package/dist/ui-script/ui-script.decorator.js +0 -19
  38. package/dist/ui-script/ui-script.interface.js +0 -1
  39. package/dist/utils/get-storage-key-id-from-string.js +0 -3
  40. package/dist/utils/is-null-or-undefined.js +0 -4
  41. package/dist/utils/sleep.js +0 -3
  42. package/dist/x-monkey-window-component.js +0 -16
  43. /package/dist/{console-script → esm/console-script}/console-script.decorator.d.ts +0 -0
  44. /package/dist/{console-script → esm/console-script}/console-script.interface.d.ts +0 -0
  45. /package/dist/{console-script → esm/console-script}/index.d.ts +0 -0
  46. /package/dist/{esbuild → esm/esbuild}/build.d.ts +0 -0
  47. /package/dist/{esbuild → esm/esbuild}/plugins/xmonkey-output-stats-plugin.d.ts +0 -0
  48. /package/dist/{esbuild → esm/esbuild}/plugins/xmonkey-strip-metadata-plugin.d.ts +0 -0
  49. /package/dist/{esbuild → esm/esbuild}/plugins/xmonkey-styles-plugin.d.ts +0 -0
  50. /package/dist/{hooks → esm/hooks}/index.d.ts +0 -0
  51. /package/dist/{index.d.ts → esm/index.d.ts} +0 -0
  52. /package/dist/{types.d.ts → esm/types.d.ts} +0 -0
  53. /package/dist/{ui-script → esm/ui-script}/index.d.ts +0 -0
  54. /package/dist/{ui-script → esm/ui-script}/ui-script.decorator.d.ts +0 -0
  55. /package/dist/{ui-script → esm/ui-script}/ui-script.interface.d.ts +0 -0
  56. /package/dist/{utils → esm/utils}/get-storage-key-id-from-string.d.ts +0 -0
  57. /package/dist/{utils → esm/utils}/is-null-or-undefined.d.ts +0 -0
  58. /package/dist/{utils → esm/utils}/sleep.d.ts +0 -0
  59. /package/dist/{x-monkey-window-component.d.ts → esm/x-monkey-window-component.d.ts} +0 -0
package/dist/build.js CHANGED
@@ -1,33 +1,12 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __copyProps = (to, from, except, desc) => {
8
- if (from && typeof from === "object" || typeof from === "function") {
9
- for (let key of __getOwnPropNames(from))
10
- if (!__hasOwnProp.call(to, key) && key !== except)
11
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
12
- }
13
- return to;
14
- };
15
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
16
- // If the importer is in node compatibility mode or this is not an ESM
17
- // file that has been converted to a CommonJS file using a Babel-
18
- // compatible transform (i.e. "__esModule" has not been set), then set
19
- // "default" to the CommonJS "module.exports" for node compatibility.
20
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
- mod
22
- ));
1
+ #!/usr/bin/env node
23
2
 
24
3
  // src/esbuild/build.ts
25
- var esbuild = __toESM(require("esbuild"));
26
- var import_esbuild_sass_plugin = require("esbuild-sass-plugin");
4
+ import * as esbuild from "esbuild";
5
+ import { sassPlugin } from "esbuild-sass-plugin";
27
6
 
28
7
  // src/esbuild/plugins/xmonkey-strip-metadata-plugin.ts
29
- var import_promises = require("fs/promises");
30
- var import_json5 = __toESM(require("json5"));
8
+ import { readFile, writeFile } from "fs/promises";
9
+ import JSON5 from "json5";
31
10
  function xMonkeyStripMetadataPlugin() {
32
11
  return {
33
12
  name: "xmonkey-strip-metadata-plugin",
@@ -36,7 +15,7 @@ function xMonkeyStripMetadataPlugin() {
36
15
  let metadataContent = "";
37
16
  build2.onLoad({ filter: /.(ts|tsx)/, namespace: "file" }, async (args) => {
38
17
  if (foundMetadata) return;
39
- const source = await (0, import_promises.readFile)(args.path, "utf8");
18
+ const source = await readFile(args.path, "utf8");
40
19
  const scriptMetadataIndex = source.match(/@(ConsoleScript|UiScript)\(/)?.index;
41
20
  if (!scriptMetadataIndex || scriptMetadataIndex < 0) return;
42
21
  foundMetadata = true;
@@ -67,9 +46,9 @@ function xMonkeyStripMetadataPlugin() {
67
46
  console.error("Error building. Script Metadata cannot be added to final script.");
68
47
  return;
69
48
  }
70
- const fileContents = await (0, import_promises.readFile)(build2.initialOptions.outfile);
49
+ const fileContents = await readFile(build2.initialOptions.outfile);
71
50
  const scriptMetadataString = getScriptMetadataString(metadataContent);
72
- await (0, import_promises.writeFile)(build2.initialOptions.outfile, `${scriptMetadataString}
51
+ await writeFile(build2.initialOptions.outfile, `${scriptMetadataString}
73
52
 
74
53
  ${fileContents.toString()}`);
75
54
  });
@@ -87,7 +66,7 @@ function getScriptMetadataString(scriptMetadataFunctionCallString) {
87
66
  startJsonMetadataIndex,
88
67
  endJsonMetadataIndex + 1
89
68
  );
90
- const metadataObject = import_json5.default.parse(jsonMetadataString);
69
+ const metadataObject = JSON5.parse(jsonMetadataString);
91
70
  const tag = "// ==UserScript==";
92
71
  const tagEnd = "// ==/UserScript==";
93
72
  const headersArr = [];
@@ -108,7 +87,7 @@ ${tagEnd}`;
108
87
  }
109
88
 
110
89
  // src/esbuild/plugins/xmonkey-styles-plugin.ts
111
- var import_promises2 = require("fs/promises");
90
+ import { appendFile, readFile as readFile2 } from "fs/promises";
112
91
  function xMonkeyStylesPlugin() {
113
92
  return {
114
93
  name: "xmonkey-styles-plugin",
@@ -136,10 +115,11 @@ function xMonkeyStylesPlugin() {
136
115
  return;
137
116
  }
138
117
  const jsOutFile = build2.initialOptions.outfile;
139
- const cssContents = (await (0, import_promises2.readFile)(cssFilePath)).toString();
140
- (0, import_promises2.appendFile)(jsOutFile, `
118
+ const cssContents = (await readFile2(cssFilePath)).toString();
119
+ const cssContentsWithtoutNewlines = cssContents.replace(/\n/g, "").replace(/\r/g, "");
120
+ appendFile(jsOutFile, `
141
121
  GM.addStyle("\\
142
- ${cssContents.trim()}\\
122
+ ${cssContentsWithtoutNewlines.trim()}\\
143
123
  ");`);
144
124
  });
145
125
  }
@@ -177,15 +157,13 @@ async function buildXmonkeyScript(scriptBasePath) {
177
157
  minify: process.env.DEBUG ? false : true,
178
158
  platform: "browser",
179
159
  format: "iife",
180
- // target: "esnext",
181
- sourcemap: false,
160
+ sourcemap: process.env.DEBUG ? "inline" : false,
182
161
  keepNames: true,
183
162
  logLevel: "info",
184
163
  metafile: true,
185
164
  plugins: [
186
165
  xMonkeyStripMetadataPlugin(),
187
- // xMonkeyDevPlugin(),
188
- (0, import_esbuild_sass_plugin.sassPlugin)({ style: "compressed" }),
166
+ sassPlugin({ style: "compressed" }),
189
167
  xMonkeyStylesPlugin(),
190
168
  xMonkeyOutputStatsPlugin()
191
169
  ]
@@ -196,8 +174,8 @@ async function buildXmonkeyScript(scriptBasePath) {
196
174
  var entryFile = process.argv[2];
197
175
  if (!entryFile) {
198
176
  console.error(`No entryfile specified. Try adding the script to build in the argument.`);
199
- console.error(`Example: npm run build src/example-script.ts`);
177
+ console.error(`Example: npx xmonkey src/example-script.ts`);
200
178
  process.exit(1);
201
179
  }
202
180
  buildXmonkeyScript(entryFile);
203
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2VzYnVpbGQvYnVpbGQudHMiLCAiLi4vc3JjL2VzYnVpbGQvcGx1Z2lucy94bW9ua2V5LXN0cmlwLW1ldGFkYXRhLXBsdWdpbi50cyIsICIuLi9zcmMvZXNidWlsZC9wbHVnaW5zL3htb25rZXktc3R5bGVzLXBsdWdpbi50cyIsICIuLi9zcmMvZXNidWlsZC9wbHVnaW5zL3htb25rZXktb3V0cHV0LXN0YXRzLXBsdWdpbi50cyIsICIuLi9zcmMvYnVpbGQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCAqIGFzIGVzYnVpbGQgZnJvbSBcImVzYnVpbGRcIjtcbmltcG9ydCB7IHNhc3NQbHVnaW4gfSBmcm9tIFwiZXNidWlsZC1zYXNzLXBsdWdpblwiO1xuaW1wb3J0IHsgeE1vbmtleVN0cmlwTWV0YWRhdGFQbHVnaW4gfSBmcm9tIFwiLi9wbHVnaW5zL3htb25rZXktc3RyaXAtbWV0YWRhdGEtcGx1Z2luLmpzXCI7XG5pbXBvcnQgeyB4TW9ua2V5U3R5bGVzUGx1Z2luIH0gZnJvbSBcIi4vcGx1Z2lucy94bW9ua2V5LXN0eWxlcy1wbHVnaW4uanNcIjtcbmltcG9ydCB7IHhNb25rZXlPdXRwdXRTdGF0c1BsdWdpbiB9IGZyb20gXCIuL3BsdWdpbnMveG1vbmtleS1vdXRwdXQtc3RhdHMtcGx1Z2luLmpzXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFhtb25rZXlTY3JpcHQoc2NyaXB0QmFzZVBhdGg6IHN0cmluZykge1xuICAvLyBsZXQgZW50cnlGaWxlID0gcHJvY2Vzcy5hcmd2WzJdO1xuICBjb25zdCBlbnRyeUZpbGUgPSBzY3JpcHRCYXNlUGF0aDtcbiAgY29uc29sZS5pbmZvKGBCdWlsZGluZyBmaWxlOiAnJHtlbnRyeUZpbGV9J2ApO1xuXG4gIGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgIGVudHJ5UG9pbnRzOiBbZW50cnlGaWxlXSxcbiAgICBvdXRmaWxlOiBcImRpc3QvaW5kZXguanNcIixcbiAgICBidW5kbGU6IHRydWUsXG4gICAgdHJlZVNoYWtpbmc6IHRydWUsXG4gICAgbWluaWZ5OiBwcm9jZXNzLmVudi5ERUJVRyA/IGZhbHNlIDogdHJ1ZSxcbiAgICBwbGF0Zm9ybTogXCJicm93c2VyXCIsXG4gICAgZm9ybWF0OiBcImlpZmVcIixcbiAgICAvLyB0YXJnZXQ6IFwiZXNuZXh0XCIsXG4gICAgc291cmNlbWFwOiBmYWxzZSxcbiAgICBrZWVwTmFtZXM6IHRydWUsXG4gICAgbG9nTGV2ZWw6IFwiaW5mb1wiLFxuICAgIG1ldGFmaWxlOiB0cnVlLFxuICAgIHBsdWdpbnM6IFtcbiAgICAgIHhNb25rZXlTdHJpcE1ldGFkYXRhUGx1Z2luKCksXG4gICAgICAvLyB4TW9ua2V5RGV2UGx1Z2luKCksXG4gICAgICBzYXNzUGx1Z2luKHsgc3R5bGU6IFwiY29tcHJlc3NlZFwiIH0pLFxuICAgICAgeE1vbmtleVN0eWxlc1BsdWdpbigpLFxuICAgICAgeE1vbmtleU91dHB1dFN0YXRzUGx1Z2luKCksXG4gICAgXSxcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSBcImVzYnVpbGRcIjtcbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBKU09ONSBmcm9tIFwianNvbjVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHhNb25rZXlTdHJpcE1ldGFkYXRhUGx1Z2luKCk6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJ4bW9ua2V5LXN0cmlwLW1ldGFkYXRhLXBsdWdpblwiLFxuICAgIHNldHVwKGJ1aWxkKSB7XG4gICAgICBsZXQgZm91bmRNZXRhZGF0YSA9IGZhbHNlO1xuICAgICAgbGV0IG1ldGFkYXRhQ29udGVudCA9IFwiXCI7XG5cbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogLy4odHN8dHN4KS8sIG5hbWVzcGFjZTogXCJmaWxlXCIgfSwgYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGZvdW5kTWV0YWRhdGEpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc291cmNlID0gYXdhaXQgcmVhZEZpbGUoYXJncy5wYXRoLCBcInV0ZjhcIik7XG4gICAgICAgIGNvbnN0IHNjcmlwdE1ldGFkYXRhSW5kZXggPSBzb3VyY2UubWF0Y2goL0AoQ29uc29sZVNjcmlwdHxVaVNjcmlwdClcXCgvKT8uaW5kZXg7XG5cbiAgICAgICAgaWYgKCFzY3JpcHRNZXRhZGF0YUluZGV4IHx8IHNjcmlwdE1ldGFkYXRhSW5kZXggPCAwKSByZXR1cm47XG4gICAgICAgIGZvdW5kTWV0YWRhdGEgPSB0cnVlO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgICAgICAgY29uc3QgcmVnZXggPSAvXFxAKENvbnNvbGVTY3JpcHR8VWlTY3JpcHQpXFwoW15cXCldKlxcKShcXC5bXlxcKV0qXFwpKT8vZ2k7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhRGVjb3JhdG9yTWF0Y2hlciA9IHNvdXJjZS5tYXRjaChyZWdleCk7XG4gICAgICAgIGlmIChtZXRhZGF0YURlY29yYXRvck1hdGNoZXIpIHtcbiAgICAgICAgICBtZXRhZGF0YUNvbnRlbnQgPSBtZXRhZGF0YURlY29yYXRvck1hdGNoZXIuYXQoMCkgYXMgc3RyaW5nO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwibWV0YWRhdGFDb250ZW50XCIsIG1ldGFkYXRhQ29udGVudCk7XG4gICAgICAgICAgY29uc3Qgc3RhcnRKc29uTWV0YWRhdGFJbmRleCA9IG1ldGFkYXRhQ29udGVudC5pbmRleE9mKFwie1wiKTtcbiAgICAgICAgICBjb25zdCBlbmRKc29uTWV0YWRhdGFJbmRleCA9IG1ldGFkYXRhQ29udGVudC5sYXN0SW5kZXhPZihcIn1cIik7XG4gICAgICAgICAgY29uc3QgbWV0YWRhdGFKc29uU3RyaW5nID0gbWV0YWRhdGFDb250ZW50LnN1YnN0cmluZyhzdGFydEpzb25NZXRhZGF0YUluZGV4LCBlbmRKc29uTWV0YWRhdGFJbmRleCArIDEpO1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gc291cmNlLnJlcGxhY2UobWV0YWRhdGFKc29uU3RyaW5nLCBcIlwiKTsgLy8gcmVtb3ZlIHRoZSBqc29uIG1ldGFkYXRhIGZyb20gc291cmNlXG4gICAgICAgICAgLy8gY29uc3QgY29udGVudHMgPSBzb3VyY2UucmVwbGFjZShyZWdleCwgXCJcIik7IC8vIHJlbW92ZSBAQ29uc29sZVNjcmlwdCh7Li4uLn0pIGZyb20gc291cmNlXG5cbiAgICAgICAgICAvLyBjb25zdCBjb250ZW50cyA9IHNvdXJjZS5yZXBsYWNlKHJlZ2V4LCBcIlwiKTtcbiAgICAgICAgICBjb25zdCBleHRlbnNpb24gPSBhcmdzLnBhdGguc3BsaXQoXCIuXCIpLnBvcCgpO1xuXG4gICAgICAgICAgY29uc3QgbG9hZGVyID0gZXh0ZW5zaW9uID09PSBcInRzeFwiID8gXCJ0c3hcIiA6IFwidHNcIjtcblxuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnRzLCBsb2FkZXIgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH0pO1xuXG4gICAgICBidWlsZC5vbkVuZChhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmICghYnVpbGQuaW5pdGlhbE9wdGlvbnM/Lm91dGZpbGUgfHwgIWJ1aWxkLmluaXRpYWxPcHRpb25zPy5idW5kbGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV3JvbmcgYnVpbGQgY29uZmlndXJhdGlvbi4gT3B0aW9ucyAnYnVuZGxlJyBtdXN0IGJlIGVuYWJsZWQgYW5kICdvdXRmaWxlJyBtdXN0IGJlIHNldC5cIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmb3VuZE1ldGFkYXRhKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlNjcmlwdE1ldGFkYXRhIGRlY29yYXRvciBub3QgZm91bmQuXCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBidWlsZGluZy4gU2NyaXB0IE1ldGFkYXRhIGNhbm5vdCBiZSBhZGRlZCB0byBmaW5hbCBzY3JpcHQuXCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IHJlYWRGaWxlKGJ1aWxkLmluaXRpYWxPcHRpb25zLm91dGZpbGUpO1xuICAgICAgICBjb25zdCBzY3JpcHRNZXRhZGF0YVN0cmluZyA9IGdldFNjcmlwdE1ldGFkYXRhU3RyaW5nKG1ldGFkYXRhQ29udGVudCk7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShidWlsZC5pbml0aWFsT3B0aW9ucy5vdXRmaWxlLCBgJHtzY3JpcHRNZXRhZGF0YVN0cmluZ31cXG5cXG4ke2ZpbGVDb250ZW50cy50b1N0cmluZygpfWApO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2NyaXB0TWV0YWRhdGFTdHJpbmcoc2NyaXB0TWV0YWRhdGFGdW5jdGlvbkNhbGxTdHJpbmc6IHN0cmluZykge1xuICBzY3JpcHRNZXRhZGF0YUZ1bmN0aW9uQ2FsbFN0cmluZyA9IHNjcmlwdE1ldGFkYXRhRnVuY3Rpb25DYWxsU3RyaW5nLnRyaW0oKTtcbiAgY29uc3Qgc3RhcnRKc29uTWV0YWRhdGFJbmRleCA9IHNjcmlwdE1ldGFkYXRhRnVuY3Rpb25DYWxsU3RyaW5nLmluZGV4T2YoXCJ7XCIpO1xuICBjb25zdCBlbmRKc29uTWV0YWRhdGFJbmRleCA9IHNjcmlwdE1ldGFkYXRhRnVuY3Rpb25DYWxsU3RyaW5nLmxhc3RJbmRleE9mKFwifVwiKTtcbiAgaWYgKHN0YXJ0SnNvbk1ldGFkYXRhSW5kZXggPCAwIHx8IGVuZEpzb25NZXRhZGF0YUluZGV4IDwgMCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3QganNvbk1ldGFkYXRhU3RyaW5nID0gc2NyaXB0TWV0YWRhdGFGdW5jdGlvbkNhbGxTdHJpbmcuc3Vic3RyaW5nKFxuICAgIHN0YXJ0SnNvbk1ldGFkYXRhSW5kZXgsXG4gICAgZW5kSnNvbk1ldGFkYXRhSW5kZXggKyAxLFxuICApO1xuXG4gIGNvbnN0IG1ldGFkYXRhT2JqZWN0ID0gSlNPTjUucGFyc2UoanNvbk1ldGFkYXRhU3RyaW5nKTtcblxuICBjb25zdCB0YWcgPSBcIi8vID09VXNlclNjcmlwdD09XCI7XG4gIGNvbnN0IHRhZ0VuZCA9IFwiLy8gPT0vVXNlclNjcmlwdD09XCI7XG4gIGNvbnN0IGhlYWRlcnNBcnIgPSBbXTtcblxuICBjb25zdCBzcGFjZXMgPSAxMztcbiAgZm9yIChjb25zdCBrZXkgaW4gbWV0YWRhdGFPYmplY3QpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtZXRhZGF0YU9iamVjdFtrZXldKSkge1xuICAgICAgbWV0YWRhdGFPYmplY3Rba2V5XS5mb3JFYWNoKChpdGVtOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGhlYWRlcnNBcnIucHVzaChgJHtrZXkucGFkRW5kKHNwYWNlcywgXCIgXCIpfSR7aXRlbX1gKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXJzQXJyLnB1c2goYCR7a2V5LnBhZEVuZChzcGFjZXMsIFwiIFwiKX0ke21ldGFkYXRhT2JqZWN0W2tleV19YCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGVhZGVycyA9IGhlYWRlcnNBcnIubWFwKChoKSA9PiBgLy8gJHtofWApLmpvaW4oXCJcXG5cIik7XG4gIHJldHVybiBgJHt0YWd9XFxuJHtoZWFkZXJzfVxcbiR7dGFnRW5kfWA7XG59XG4iLCAiaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSBcImVzYnVpbGRcIjtcbmltcG9ydCB7IGFwcGVuZEZpbGUsIHJlYWRGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB4TW9ua2V5U3R5bGVzUGx1Z2luKCk6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJ4bW9ua2V5LXN0eWxlcy1wbHVnaW5cIixcbiAgICBzZXR1cChidWlsZCkge1xuICAgICAgYnVpbGQub25FbmQoYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAoIWJ1aWxkLmluaXRpYWxPcHRpb25zPy5vdXRmaWxlIHx8ICFidWlsZC5pbml0aWFsT3B0aW9ucz8uYnVuZGxlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIldyb25nIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE9wdGlvbnMgJ2J1bmRsZScgbXVzdCBiZSBlbmFibGVkIGFuZCAnb3V0ZmlsZScgbXVzdCBiZSBzZXQuXCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVzdWx0Lm1ldGFmaWxlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiRVNCdWlsZCBtZXRhZmlsZSBub3QgZW5hYmxlZC4gU3R5bGUgYnVuZGxlIHNraXBwZWQuXCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdXRwdXRzID0gcmVzdWx0Lm1ldGFmaWxlLm91dHB1dHM7XG4gICAgICAgIGxldCBjc3NGaWxlUGF0aCA9IFwiXCI7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBpbiBvdXRwdXRzKSB7XG4gICAgICAgICAgY29uc3QgZXh0ID0gZmlsZS5zcGxpdChcIi5cIikucG9wKCk7XG4gICAgICAgICAgaWYgKGV4dCA9PT0gXCJjc3NcIikge1xuICAgICAgICAgICAgY3NzRmlsZVBhdGggPSBmaWxlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjc3NGaWxlUGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbLV0gU3R5bGVTaGVldCBvdXRwdXQgc2tpcHBlZC5cIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QganNPdXRGaWxlID0gYnVpbGQuaW5pdGlhbE9wdGlvbnMub3V0ZmlsZTtcblxuICAgICAgICBjb25zdCBjc3NDb250ZW50cyA9IChhd2FpdCByZWFkRmlsZShjc3NGaWxlUGF0aCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIGFwcGVuZEZpbGUoanNPdXRGaWxlLCBgXFxuR00uYWRkU3R5bGUoXCJcXFxcXFxuJHtjc3NDb250ZW50cy50cmltKCl9XFxcXFxcblwiKTtgKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSBcImVzYnVpbGRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHhNb25rZXlPdXRwdXRTdGF0c1BsdWdpbigpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IFwieG1vbmtleS1vdXRwdXQtc3RhdHMtcGx1Z2luXCIsXG4gICAgc2V0dXAoYnVpbGQpIHtcbiAgICAgIGJ1aWxkLm9uRW5kKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IHJlc3VsdC5tZXRhZmlsZT8ub3V0cHV0cyBhcyBhbnk7XG4gICAgICAgIGNvbnN0IG91dHB1dFRvdGFsID0gT2JqZWN0LmtleXMob3V0cHV0cykucmVkdWNlKChwcmV2LCBjdXIpID0+IHByZXYgKyBvdXRwdXRzW2N1cl0uYnl0ZXMsIDApO1xuICAgICAgICBjb25zdCBidW5kbGVUb3RhbCA9IGh1bWFuRmlsZVNpemUob3V0cHV0VG90YWwpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIlsqXSBCdW5kbGUgdG90YWw6XCIsIGJ1bmRsZVRvdGFsKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGh1bWFuRmlsZVNpemUoc2l6ZTogbnVtYmVyKSB7XG4gIGNvbnN0IGkgPSBzaXplID09IDAgPyAwIDogTWF0aC5mbG9vcihNYXRoLmxvZyhzaXplKSAvIE1hdGgubG9nKDEwMjQpKTtcbiAgcmV0dXJuIChzaXplIC8gTWF0aC5wb3coMTAyNCwgaSkpLnRvRml4ZWQoMSkgKyBcIlwiICsgW1wiYlwiLCBcImtCXCIsIFwiTUJcIiwgXCJHQlwiLCBcIlRCXCJdW2ldO1xufVxuIiwgImltcG9ydCB7IGJ1aWxkWG1vbmtleVNjcmlwdCB9IGZyb20gXCIuL2VzYnVpbGQvYnVpbGQuanNcIjtcblxuY29uc3QgZW50cnlGaWxlID0gcHJvY2Vzcy5hcmd2WzJdO1xuXG5pZiAoIWVudHJ5RmlsZSkge1xuICBjb25zb2xlLmVycm9yKGBObyBlbnRyeWZpbGUgc3BlY2lmaWVkLiBUcnkgYWRkaW5nIHRoZSBzY3JpcHQgdG8gYnVpbGQgaW4gdGhlIGFyZ3VtZW50LmApO1xuICBjb25zb2xlLmVycm9yKGBFeGFtcGxlOiBucG0gcnVuIGJ1aWxkIHNyYy9leGFtcGxlLXNjcmlwdC50c2ApO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbmJ1aWxkWG1vbmtleVNjcmlwdChlbnRyeUZpbGUpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsY0FBeUI7QUFDekIsaUNBQTJCOzs7QUNBM0Isc0JBQW9DO0FBQ3BDLG1CQUFrQjtBQUVYLFNBQVMsNkJBQXFDO0FBQ25ELFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLE1BQU1BLFFBQU87QUFDWCxVQUFJLGdCQUFnQjtBQUNwQixVQUFJLGtCQUFrQjtBQUV0QixNQUFBQSxPQUFNLE9BQU8sRUFBRSxRQUFRLGFBQWEsV0FBVyxPQUFPLEdBQUcsT0FBTyxTQUFTO0FBQ3ZFLFlBQUksY0FBZTtBQUNuQixjQUFNLFNBQVMsVUFBTSwwQkFBUyxLQUFLLE1BQU0sTUFBTTtBQUMvQyxjQUFNLHNCQUFzQixPQUFPLE1BQU0sNkJBQTZCLEdBQUc7QUFFekUsWUFBSSxDQUFDLHVCQUF1QixzQkFBc0IsRUFBRztB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QU8sS0FBSyxJQUFJLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLE1BQU0sTUFBTSxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ3JGOzs7QUhkQSxlQUFzQixtQkFBbUIsZ0JBQXdCO0FBRS9ELFFBQU1DLGFBQVk7QUFDbEIsVUFBUSxLQUFLLG1CQUFtQkEsVUFBUyxHQUFHO0FBRTVDLFFBQWMsY0FBTTtBQUFBLElBQ2xCLGFBQWEsQ0FBQ0EsVUFBUztBQUFBLElBQ3ZCLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLGFBQWE7QUFBQSxJQUNiLFFBQVEsUUFBUSxJQUFJLFFBQVEsUUFBUTtBQUFBLElBQ3BDLFVBQVU7QUFBQSxJQUNWLFFBQVE7QUFBQTtBQUFBLElBRVIsV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLE1BQ1AsMkJBQTJCO0FBQUE7QUFBQSxVQUUzQix1Q0FBVyxFQUFFLE9BQU8sYUFBYSxDQUFDO0FBQUEsTUFDbEMsb0JBQW9CO0FBQUEsTUFDcEIseUJBQXlCO0FBQUEsSUFDM0I7QUFBQSxFQUNGLENBQUM7QUFDSDs7O0FJOUJBLElBQU0sWUFBWSxRQUFRLEtBQUssQ0FBQztBQUVoQyxJQUFJLENBQUMsV0FBVztBQUNkLFVBQVEsTUFBTSx5RUFBeUU7QUFDdkYsVUFBUSxNQUFNLDhDQUE4QztBQUM1RCxVQUFRLEtBQUssQ0FBQztBQUNoQjtBQUVBLG1CQUFtQixTQUFTOyIsCiAgIm5hbWVzIjogWyJidWlsZCIsICJKU09ONSIsICJpbXBvcnRfcHJvbWlzZXMiLCAiYnVpbGQiLCAiYnVpbGQiLCAiZW50cnlGaWxlIl0KfQo=
181
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2VzYnVpbGQvYnVpbGQudHMiLCAiLi4vc3JjL2VzYnVpbGQvcGx1Z2lucy94bW9ua2V5LXN0cmlwLW1ldGFkYXRhLXBsdWdpbi50cyIsICIuLi9zcmMvZXNidWlsZC9wbHVnaW5zL3htb25rZXktc3R5bGVzLXBsdWdpbi50cyIsICIuLi9zcmMvZXNidWlsZC9wbHVnaW5zL3htb25rZXktb3V0cHV0LXN0YXRzLXBsdWdpbi50cyIsICIuLi9zcmMvYnVpbGQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCAqIGFzIGVzYnVpbGQgZnJvbSBcImVzYnVpbGRcIjtcbmltcG9ydCB7IHNhc3NQbHVnaW4gfSBmcm9tIFwiZXNidWlsZC1zYXNzLXBsdWdpblwiO1xuaW1wb3J0IHsgeE1vbmtleVN0cmlwTWV0YWRhdGFQbHVnaW4gfSBmcm9tIFwiLi9wbHVnaW5zL3htb25rZXktc3RyaXAtbWV0YWRhdGEtcGx1Z2luLmpzXCI7XG5pbXBvcnQgeyB4TW9ua2V5U3R5bGVzUGx1Z2luIH0gZnJvbSBcIi4vcGx1Z2lucy94bW9ua2V5LXN0eWxlcy1wbHVnaW4uanNcIjtcbmltcG9ydCB7IHhNb25rZXlPdXRwdXRTdGF0c1BsdWdpbiB9IGZyb20gXCIuL3BsdWdpbnMveG1vbmtleS1vdXRwdXQtc3RhdHMtcGx1Z2luLmpzXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFhtb25rZXlTY3JpcHQoc2NyaXB0QmFzZVBhdGg6IHN0cmluZykge1xuICBjb25zdCBlbnRyeUZpbGUgPSBzY3JpcHRCYXNlUGF0aDtcbiAgY29uc29sZS5pbmZvKGBCdWlsZGluZyBmaWxlOiAnJHtlbnRyeUZpbGV9J2ApO1xuXG4gIGF3YWl0IGVzYnVpbGQuYnVpbGQoe1xuICAgIGVudHJ5UG9pbnRzOiBbZW50cnlGaWxlXSxcbiAgICBvdXRmaWxlOiBcImRpc3QvaW5kZXguanNcIixcbiAgICBidW5kbGU6IHRydWUsXG4gICAgdHJlZVNoYWtpbmc6IHRydWUsXG4gICAgbWluaWZ5OiBwcm9jZXNzLmVudi5ERUJVRyA/IGZhbHNlIDogdHJ1ZSxcbiAgICBwbGF0Zm9ybTogXCJicm93c2VyXCIsXG4gICAgZm9ybWF0OiBcImlpZmVcIixcbiAgICBzb3VyY2VtYXA6IHByb2Nlc3MuZW52LkRFQlVHID8gXCJpbmxpbmVcIiA6IGZhbHNlLFxuICAgIGtlZXBOYW1lczogdHJ1ZSxcbiAgICBsb2dMZXZlbDogXCJpbmZvXCIsXG4gICAgbWV0YWZpbGU6IHRydWUsXG4gICAgcGx1Z2luczogW1xuICAgICAgeE1vbmtleVN0cmlwTWV0YWRhdGFQbHVnaW4oKSxcbiAgICAgIHNhc3NQbHVnaW4oeyBzdHlsZTogXCJjb21wcmVzc2VkXCIgfSksXG4gICAgICB4TW9ua2V5U3R5bGVzUGx1Z2luKCksXG4gICAgICB4TW9ua2V5T3V0cHV0U3RhdHNQbHVnaW4oKSxcbiAgICBdLFxuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tIFwiZXNidWlsZFwiO1xuaW1wb3J0IHsgcmVhZEZpbGUsIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IEpTT041IGZyb20gXCJqc29uNVwiO1xuXG5leHBvcnQgZnVuY3Rpb24geE1vbmtleVN0cmlwTWV0YWRhdGFQbHVnaW4oKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcInhtb25rZXktc3RyaXAtbWV0YWRhdGEtcGx1Z2luXCIsXG4gICAgc2V0dXAoYnVpbGQpIHtcbiAgICAgIGxldCBmb3VuZE1ldGFkYXRhID0gZmFsc2U7XG4gICAgICBsZXQgbWV0YWRhdGFDb250ZW50ID0gXCJcIjtcblxuICAgICAgYnVpbGQub25Mb2FkKHsgZmlsdGVyOiAvLih0c3x0c3gpLywgbmFtZXNwYWNlOiBcImZpbGVcIiB9LCBhc3luYyAoYXJncykgPT4ge1xuICAgICAgICBpZiAoZm91bmRNZXRhZGF0YSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCByZWFkRmlsZShhcmdzLnBhdGgsIFwidXRmOFwiKTtcbiAgICAgICAgY29uc3Qgc2NyaXB0TWV0YWRhdGFJbmRleCA9IHNvdXJjZS5tYXRjaCgvQChDb25zb2xlU2NyaXB0fFVpU2NyaXB0KVxcKC8pPy5pbmRleDtcblxuICAgICAgICBpZiAoIXNjcmlwdE1ldGFkYXRhSW5kZXggfHwgc2NyaXB0TWV0YWRhdGFJbmRleCA8IDApIHJldHVybjtcbiAgICAgICAgZm91bmRNZXRhZGF0YSA9IHRydWU7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICAgICAgICBjb25zdCByZWdleCA9IC9cXEAoQ29uc29sZVNjcmlwdHxVaVNjcmlwdClcXChbXlxcKV0qXFwpKFxcLlteXFwpXSpcXCkpPy9naTtcbiAgICAgICAgY29uc3QgbWV0YWRhdGFEZWNvcmF0b3JNYXRjaGVyID0gc291cmNlLm1hdGNoKHJlZ2V4KTtcbiAgICAgICAgaWYgKG1ldGFkYXRhRGVjb3JhdG9yTWF0Y2hlcikge1xuICAgICAgICAgIG1ldGFkYXRhQ29udGVudCA9IG1ldGFkYXRhRGVjb3JhdG9yTWF0Y2hlci5hdCgwKSBhcyBzdHJpbmc7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJtZXRhZGF0YUNvbnRlbnRcIiwgbWV0YWRhdGFDb250ZW50KTtcbiAgICAgICAgICBjb25zdCBzdGFydEpzb25NZXRhZGF0YUluZGV4ID0gbWV0YWRhdGFDb250ZW50LmluZGV4T2YoXCJ7XCIpO1xuICAgICAgICAgIGNvbnN0IGVuZEpzb25NZXRhZGF0YUluZGV4ID0gbWV0YWRhdGFDb250ZW50Lmxhc3RJbmRleE9mKFwifVwiKTtcbiAgICAgICAgICBjb25zdCBtZXRhZGF0YUpzb25TdHJpbmcgPSBtZXRhZGF0YUNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0SnNvbk1ldGFkYXRhSW5kZXgsIGVuZEpzb25NZXRhZGF0YUluZGV4ICsgMSk7XG4gICAgICAgICAgY29uc3QgY29udGVudHMgPSBzb3VyY2UucmVwbGFjZShtZXRhZGF0YUpzb25TdHJpbmcsIFwiXCIpOyAvLyByZW1vdmUgdGhlIGpzb24gbWV0YWRhdGEgZnJvbSBzb3VyY2VcbiAgICAgICAgICAvLyBjb25zdCBjb250ZW50cyA9IHNvdXJjZS5yZXBsYWNlKHJlZ2V4LCBcIlwiKTsgLy8gcmVtb3ZlIEBDb25zb2xlU2NyaXB0KHsuLi4ufSkgZnJvbSBzb3VyY2VcblxuICAgICAgICAgIC8vIGNvbnN0IGNvbnRlbnRzID0gc291cmNlLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGFyZ3MucGF0aC5zcGxpdChcIi5cIikucG9wKCk7XG5cbiAgICAgICAgICBjb25zdCBsb2FkZXIgPSBleHRlbnNpb24gPT09IFwidHN4XCIgPyBcInRzeFwiIDogXCJ0c1wiO1xuXG4gICAgICAgICAgcmV0dXJuIHsgY29udGVudHMsIGxvYWRlciB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSk7XG5cbiAgICAgIGJ1aWxkLm9uRW5kKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKCFidWlsZC5pbml0aWFsT3B0aW9ucz8ub3V0ZmlsZSB8fCAhYnVpbGQuaW5pdGlhbE9wdGlvbnM/LmJ1bmRsZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXcm9uZyBidWlsZCBjb25maWd1cmF0aW9uLiBPcHRpb25zICdidW5kbGUnIG11c3QgYmUgZW5hYmxlZCBhbmQgJ291dGZpbGUnIG11c3QgYmUgc2V0LlwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZvdW5kTWV0YWRhdGEpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiU2NyaXB0TWV0YWRhdGEgZGVjb3JhdG9yIG5vdCBmb3VuZC5cIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdC5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGJ1aWxkaW5nLiBTY3JpcHQgTWV0YWRhdGEgY2Fubm90IGJlIGFkZGVkIHRvIGZpbmFsIHNjcmlwdC5cIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgcmVhZEZpbGUoYnVpbGQuaW5pdGlhbE9wdGlvbnMub3V0ZmlsZSk7XG4gICAgICAgIGNvbnN0IHNjcmlwdE1ldGFkYXRhU3RyaW5nID0gZ2V0U2NyaXB0TWV0YWRhdGFTdHJpbmcobWV0YWRhdGFDb250ZW50KTtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGJ1aWxkLmluaXRpYWxPcHRpb25zLm91dGZpbGUsIGAke3NjcmlwdE1ldGFkYXRhU3RyaW5nfVxcblxcbiR7ZmlsZUNvbnRlbnRzLnRvU3RyaW5nKCl9YCk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRTY3JpcHRNZXRhZGF0YVN0cmluZyhzY3JpcHRNZXRhZGF0YUZ1bmN0aW9uQ2FsbFN0cmluZzogc3RyaW5nKSB7XG4gIHNjcmlwdE1ldGFkYXRhRnVuY3Rpb25DYWxsU3RyaW5nID0gc2NyaXB0TWV0YWRhdGFGdW5jdGlvbkNhbGxTdHJpbmcudHJpbSgpO1xuICBjb25zdCBzdGFydEpzb25NZXRhZGF0YUluZGV4ID0gc2NyaXB0TWV0YWRhdGFGdW5jdGlvbkNhbGxTdHJpbmcuaW5kZXhPZihcIntcIik7XG4gIGNvbnN0IGVuZEpzb25NZXRhZGF0YUluZGV4ID0gc2NyaXB0TWV0YWRhdGFGdW5jdGlvbkNhbGxTdHJpbmcubGFzdEluZGV4T2YoXCJ9XCIpO1xuICBpZiAoc3RhcnRKc29uTWV0YWRhdGFJbmRleCA8IDAgfHwgZW5kSnNvbk1ldGFkYXRhSW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCBqc29uTWV0YWRhdGFTdHJpbmcgPSBzY3JpcHRNZXRhZGF0YUZ1bmN0aW9uQ2FsbFN0cmluZy5zdWJzdHJpbmcoXG4gICAgc3RhcnRKc29uTWV0YWRhdGFJbmRleCxcbiAgICBlbmRKc29uTWV0YWRhdGFJbmRleCArIDEsXG4gICk7XG5cbiAgY29uc3QgbWV0YWRhdGFPYmplY3QgPSBKU09ONS5wYXJzZShqc29uTWV0YWRhdGFTdHJpbmcpO1xuXG4gIGNvbnN0IHRhZyA9IFwiLy8gPT1Vc2VyU2NyaXB0PT1cIjtcbiAgY29uc3QgdGFnRW5kID0gXCIvLyA9PS9Vc2VyU2NyaXB0PT1cIjtcbiAgY29uc3QgaGVhZGVyc0FyciA9IFtdO1xuXG4gIGNvbnN0IHNwYWNlcyA9IDEzO1xuICBmb3IgKGNvbnN0IGtleSBpbiBtZXRhZGF0YU9iamVjdCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG1ldGFkYXRhT2JqZWN0W2tleV0pKSB7XG4gICAgICBtZXRhZGF0YU9iamVjdFtrZXldLmZvckVhY2goKGl0ZW06IHVua25vd24pID0+IHtcbiAgICAgICAgaGVhZGVyc0Fyci5wdXNoKGAke2tleS5wYWRFbmQoc3BhY2VzLCBcIiBcIil9JHtpdGVtfWApO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlcnNBcnIucHVzaChgJHtrZXkucGFkRW5kKHNwYWNlcywgXCIgXCIpfSR7bWV0YWRhdGFPYmplY3Rba2V5XX1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBoZWFkZXJzID0gaGVhZGVyc0Fyci5tYXAoKGgpID0+IGAvLyAke2h9YCkuam9pbihcIlxcblwiKTtcbiAgcmV0dXJuIGAke3RhZ31cXG4ke2hlYWRlcnN9XFxuJHt0YWdFbmR9YDtcbn1cbiIsICJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tIFwiZXNidWlsZFwiO1xuaW1wb3J0IHsgYXBwZW5kRmlsZSwgcmVhZEZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHhNb25rZXlTdHlsZXNQbHVnaW4oKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcInhtb25rZXktc3R5bGVzLXBsdWdpblwiLFxuICAgIHNldHVwKGJ1aWxkKSB7XG4gICAgICBidWlsZC5vbkVuZChhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmICghYnVpbGQuaW5pdGlhbE9wdGlvbnM/Lm91dGZpbGUgfHwgIWJ1aWxkLmluaXRpYWxPcHRpb25zPy5idW5kbGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV3JvbmcgYnVpbGQgY29uZmlndXJhdGlvbi4gT3B0aW9ucyAnYnVuZGxlJyBtdXN0IGJlIGVuYWJsZWQgYW5kICdvdXRmaWxlJyBtdXN0IGJlIHNldC5cIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXN1bHQubWV0YWZpbGUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJFU0J1aWxkIG1ldGFmaWxlIG5vdCBlbmFibGVkLiBTdHlsZSBidW5kbGUgc2tpcHBlZC5cIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG91dHB1dHMgPSByZXN1bHQubWV0YWZpbGUub3V0cHV0cztcbiAgICAgICAgbGV0IGNzc0ZpbGVQYXRoID0gXCJcIjtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIGluIG91dHB1dHMpIHtcbiAgICAgICAgICBjb25zdCBleHQgPSBmaWxlLnNwbGl0KFwiLlwiKS5wb3AoKTtcbiAgICAgICAgICBpZiAoZXh0ID09PSBcImNzc1wiKSB7XG4gICAgICAgICAgICBjc3NGaWxlUGF0aCA9IGZpbGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNzc0ZpbGVQYXRoLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIlstXSBTdHlsZVNoZWV0IG91dHB1dCBza2lwcGVkLlwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBqc091dEZpbGUgPSBidWlsZC5pbml0aWFsT3B0aW9ucy5vdXRmaWxlO1xuXG4gICAgICAgIGNvbnN0IGNzc0NvbnRlbnRzID0gKGF3YWl0IHJlYWRGaWxlKGNzc0ZpbGVQYXRoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgY3NzQ29udGVudHNXaXRodG91dE5ld2xpbmVzID0gY3NzQ29udGVudHMucmVwbGFjZSgvXFxuL2csIFwiXCIpLnJlcGxhY2UoL1xcci9nLCBcIlwiKTtcbiAgICAgICAgYXBwZW5kRmlsZShqc091dEZpbGUsIGBcXG5HTS5hZGRTdHlsZShcIlxcXFxcXG4ke2Nzc0NvbnRlbnRzV2l0aHRvdXROZXdsaW5lcy50cmltKCl9XFxcXFxcblwiKTtgKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSBcImVzYnVpbGRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHhNb25rZXlPdXRwdXRTdGF0c1BsdWdpbigpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IFwieG1vbmtleS1vdXRwdXQtc3RhdHMtcGx1Z2luXCIsXG4gICAgc2V0dXAoYnVpbGQpIHtcbiAgICAgIGJ1aWxkLm9uRW5kKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IHJlc3VsdC5tZXRhZmlsZT8ub3V0cHV0cyBhcyBhbnk7XG4gICAgICAgIGNvbnN0IG91dHB1dFRvdGFsID0gT2JqZWN0LmtleXMob3V0cHV0cykucmVkdWNlKChwcmV2LCBjdXIpID0+IHByZXYgKyBvdXRwdXRzW2N1cl0uYnl0ZXMsIDApO1xuICAgICAgICBjb25zdCBidW5kbGVUb3RhbCA9IGh1bWFuRmlsZVNpemUob3V0cHV0VG90YWwpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIlsqXSBCdW5kbGUgdG90YWw6XCIsIGJ1bmRsZVRvdGFsKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGh1bWFuRmlsZVNpemUoc2l6ZTogbnVtYmVyKSB7XG4gIGNvbnN0IGkgPSBzaXplID09IDAgPyAwIDogTWF0aC5mbG9vcihNYXRoLmxvZyhzaXplKSAvIE1hdGgubG9nKDEwMjQpKTtcbiAgcmV0dXJuIChzaXplIC8gTWF0aC5wb3coMTAyNCwgaSkpLnRvRml4ZWQoMSkgKyBcIlwiICsgW1wiYlwiLCBcImtCXCIsIFwiTUJcIiwgXCJHQlwiLCBcIlRCXCJdW2ldO1xufVxuIiwgIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IGJ1aWxkWG1vbmtleVNjcmlwdCB9IGZyb20gXCIuL2VzYnVpbGQvYnVpbGQuanNcIjtcblxuY29uc3QgZW50cnlGaWxlID0gcHJvY2Vzcy5hcmd2WzJdO1xuXG5pZiAoIWVudHJ5RmlsZSkge1xuICBjb25zb2xlLmVycm9yKGBObyBlbnRyeWZpbGUgc3BlY2lmaWVkLiBUcnkgYWRkaW5nIHRoZSBzY3JpcHQgdG8gYnVpbGQgaW4gdGhlIGFyZ3VtZW50LmApO1xuICBjb25zb2xlLmVycm9yKGBFeGFtcGxlOiBucHggeG1vbmtleSBzcmMvZXhhbXBsZS1zY3JpcHQudHNgKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuXG5idWlsZFhtb25rZXlTY3JpcHQoZW50cnlGaWxlKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7OztBQUFBLFlBQVksYUFBYTtBQUN6QixTQUFTLGtCQUFrQjs7O0FDQTNCLFNBQVMsVUFBVSxpQkFBaUI7QUFDcEMsT0FBTyxXQUFXO0FBRVgsU0FBUyw2QkFBcUM7QUFDbkQsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sTUFBTUEsUUFBTztBQUNYLFVBQUksZ0JBQWdCO0FBQ3BCLFVBQUksa0JBQWtCO0FBRXRCLE1BQUFBLE9BQU0sT0FBTyxFQUFFLFFBQVEsYUFBYSxXQUFXLE9BQU8sR0FBRyxPQUFPLFNBQVM7QUFDdkUsWUFBSSxjQUFlO0FBQ25CLGNBQU0sU0FBUyxNQUFNLFNBQVMsS0FBSyxNQUFNLE1BQU07QUFD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
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import { buildXmonkeyScript } from "./esbuild/build.js";
3
+ const entryFile = process.argv[2];
4
+ if (!entryFile) {
5
+ console.error(`No entryfile specified. Try adding the script to build in the argument.`);
6
+ console.error(`Example: npx xmonkey src/example-script.ts`);
7
+ process.exit(1);
8
+ }
9
+ buildXmonkeyScript(entryFile);
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFbEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO0lBQ3pGLE9BQU8sQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUM1RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUM7QUFFRCxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyJ9
@@ -0,0 +1,10 @@
1
+ export function ConsoleScript(_metadata) {
2
+ return function (target) {
3
+ if (!target) {
4
+ throw new Error("Script not defined.");
5
+ }
6
+ const scriptObject = new target();
7
+ scriptObject.execute();
8
+ };
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc29sZS1zY3JpcHQuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnNvbGUtc2NyaXB0L2NvbnNvbGUtc2NyaXB0LmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLFVBQVUsYUFBYSxDQUEyQixTQUFxQjtJQUMzRSxPQUFPLFVBQVUsTUFBMkI7UUFDMUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBRWxDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN6QixDQUFDLENBQUM7QUFDSixDQUFDIn0=
@@ -0,0 +1,4 @@
1
+ class CScript {
2
+ }
3
+ export {};
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc29sZS1zY3JpcHQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnNvbGUtc2NyaXB0L2NvbnNvbGUtc2NyaXB0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU87Q0FBRyJ9
@@ -0,0 +1,3 @@
1
+ export * from "./console-script.decorator.js";
2
+ export * from "./console-script.interface.js";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29uc29sZS1zY3JpcHQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLCtCQUErQixDQUFDIn0=
@@ -0,0 +1,29 @@
1
+ import * as esbuild from "esbuild";
2
+ import { sassPlugin } from "esbuild-sass-plugin";
3
+ import { xMonkeyStripMetadataPlugin } from "./plugins/xmonkey-strip-metadata-plugin.js";
4
+ import { xMonkeyStylesPlugin } from "./plugins/xmonkey-styles-plugin.js";
5
+ import { xMonkeyOutputStatsPlugin } from "./plugins/xmonkey-output-stats-plugin.js";
6
+ export async function buildXmonkeyScript(scriptBasePath) {
7
+ const entryFile = scriptBasePath;
8
+ console.info(`Building file: '${entryFile}'`);
9
+ await esbuild.build({
10
+ entryPoints: [entryFile],
11
+ outfile: "dist/index.js",
12
+ bundle: true,
13
+ treeShaking: true,
14
+ minify: process.env.DEBUG ? false : true,
15
+ platform: "browser",
16
+ format: "iife",
17
+ sourcemap: process.env.DEBUG ? "inline" : false,
18
+ keepNames: true,
19
+ logLevel: "info",
20
+ metafile: true,
21
+ plugins: [
22
+ xMonkeyStripMetadataPlugin(),
23
+ sassPlugin({ style: "compressed" }),
24
+ xMonkeyStylesPlugin(),
25
+ xMonkeyOutputStatsPlugin(),
26
+ ],
27
+ });
28
+ }
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZXNidWlsZC9idWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDeEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFcEYsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxjQUFzQjtJQUM3RCxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUU5QyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDbEIsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ3hCLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLE1BQU0sRUFBRSxJQUFJO1FBQ1osV0FBVyxFQUFFLElBQUk7UUFDakIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDeEMsUUFBUSxFQUFFLFNBQVM7UUFDbkIsTUFBTSxFQUFFLE1BQU07UUFDZCxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSztRQUMvQyxTQUFTLEVBQUUsSUFBSTtRQUNmLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLFFBQVEsRUFBRSxJQUFJO1FBQ2QsT0FBTyxFQUFFO1lBQ1AsMEJBQTBCLEVBQUU7WUFDNUIsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQ25DLG1CQUFtQixFQUFFO1lBQ3JCLHdCQUF3QixFQUFFO1NBQzNCO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
@@ -0,0 +1,18 @@
1
+ export function xMonkeyOutputStatsPlugin() {
2
+ return {
3
+ name: "xmonkey-output-stats-plugin",
4
+ setup(build) {
5
+ build.onEnd(async (result) => {
6
+ const outputs = result.metafile?.outputs;
7
+ const outputTotal = Object.keys(outputs).reduce((prev, cur) => prev + outputs[cur].bytes, 0);
8
+ const bundleTotal = humanFileSize(outputTotal);
9
+ console.log("[*] Bundle total:", bundleTotal);
10
+ });
11
+ },
12
+ };
13
+ }
14
+ function humanFileSize(size) {
15
+ const i = size == 0 ? 0 : Math.floor(Math.log(size) / Math.log(1024));
16
+ return (size / Math.pow(1024, i)).toFixed(1) + "" + ["b", "kB", "MB", "GB", "TB"][i];
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1vbmtleS1vdXRwdXQtc3RhdHMtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VzYnVpbGQvcGx1Z2lucy94bW9ua2V5LW91dHB1dC1zdGF0cy1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLHdCQUF3QjtJQUN0QyxPQUFPO1FBQ0wsSUFBSSxFQUFFLDZCQUE2QjtRQUNuQyxLQUFLLENBQUMsS0FBSztZQUNULEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUUzQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQWMsQ0FBQztnQkFDaEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDN0YsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsSUFBWTtJQUNqQyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEUsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkYsQ0FBQyJ9
@@ -0,0 +1,77 @@
1
+ import { readFile, writeFile } from "fs/promises";
2
+ import JSON5 from "json5";
3
+ export function xMonkeyStripMetadataPlugin() {
4
+ return {
5
+ name: "xmonkey-strip-metadata-plugin",
6
+ setup(build) {
7
+ let foundMetadata = false;
8
+ let metadataContent = "";
9
+ build.onLoad({ filter: /.(ts|tsx)/, namespace: "file" }, async (args) => {
10
+ if (foundMetadata)
11
+ return;
12
+ const source = await readFile(args.path, "utf8");
13
+ const scriptMetadataIndex = source.match(/@(ConsoleScript|UiScript)\(/)?.index;
14
+ if (!scriptMetadataIndex || scriptMetadataIndex < 0)
15
+ return;
16
+ foundMetadata = true;
17
+ const regex = /\@(ConsoleScript|UiScript)\([^\)]*\)(\.[^\)]*\))?/gi;
18
+ const metadataDecoratorMatcher = source.match(regex);
19
+ if (metadataDecoratorMatcher) {
20
+ metadataContent = metadataDecoratorMatcher.at(0);
21
+ const startJsonMetadataIndex = metadataContent.indexOf("{");
22
+ const endJsonMetadataIndex = metadataContent.lastIndexOf("}");
23
+ const metadataJsonString = metadataContent.substring(startJsonMetadataIndex, endJsonMetadataIndex + 1);
24
+ const contents = source.replace(metadataJsonString, "");
25
+ const extension = args.path.split(".").pop();
26
+ const loader = extension === "tsx" ? "tsx" : "ts";
27
+ return { contents, loader };
28
+ }
29
+ return;
30
+ });
31
+ build.onEnd(async (result) => {
32
+ if (!build.initialOptions?.outfile || !build.initialOptions?.bundle) {
33
+ console.error("Wrong build configuration. Options 'bundle' must be enabled and 'outfile' must be set.");
34
+ return;
35
+ }
36
+ if (!foundMetadata) {
37
+ console.error("ScriptMetadata decorator not found.");
38
+ return;
39
+ }
40
+ if (result.errors.length) {
41
+ console.error("Error building. Script Metadata cannot be added to final script.");
42
+ return;
43
+ }
44
+ const fileContents = await readFile(build.initialOptions.outfile);
45
+ const scriptMetadataString = getScriptMetadataString(metadataContent);
46
+ await writeFile(build.initialOptions.outfile, `${scriptMetadataString}\n\n${fileContents.toString()}`);
47
+ });
48
+ },
49
+ };
50
+ }
51
+ function getScriptMetadataString(scriptMetadataFunctionCallString) {
52
+ scriptMetadataFunctionCallString = scriptMetadataFunctionCallString.trim();
53
+ const startJsonMetadataIndex = scriptMetadataFunctionCallString.indexOf("{");
54
+ const endJsonMetadataIndex = scriptMetadataFunctionCallString.lastIndexOf("}");
55
+ if (startJsonMetadataIndex < 0 || endJsonMetadataIndex < 0) {
56
+ return "";
57
+ }
58
+ const jsonMetadataString = scriptMetadataFunctionCallString.substring(startJsonMetadataIndex, endJsonMetadataIndex + 1);
59
+ const metadataObject = JSON5.parse(jsonMetadataString);
60
+ const tag = "// ==UserScript==";
61
+ const tagEnd = "// ==/UserScript==";
62
+ const headersArr = [];
63
+ const spaces = 13;
64
+ for (const key in metadataObject) {
65
+ if (Array.isArray(metadataObject[key])) {
66
+ metadataObject[key].forEach((item) => {
67
+ headersArr.push(`${key.padEnd(spaces, " ")}${item}`);
68
+ });
69
+ }
70
+ else {
71
+ headersArr.push(`${key.padEnd(spaces, " ")}${metadataObject[key]}`);
72
+ }
73
+ }
74
+ const headers = headersArr.map((h) => `// ${h}`).join("\n");
75
+ return `${tag}\n${headers}\n${tagEnd}`;
76
+ }
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1vbmtleS1zdHJpcC1tZXRhZGF0YS1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZXNidWlsZC9wbHVnaW5zL3htb25rZXktc3RyaXAtbWV0YWRhdGEtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixNQUFNLFVBQVUsMEJBQTBCO0lBQ3hDLE9BQU87UUFDTCxJQUFJLEVBQUUsK0JBQStCO1FBQ3JDLEtBQUssQ0FBQyxLQUFLO1lBQ1QsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUV6QixLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUN0RSxJQUFJLGFBQWE7b0JBQUUsT0FBTztnQkFDMUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDakQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLEVBQUUsS0FBSyxDQUFDO2dCQUUvRSxJQUFJLENBQUMsbUJBQW1CLElBQUksbUJBQW1CLEdBQUcsQ0FBQztvQkFBRSxPQUFPO2dCQUM1RCxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUVyQixNQUFNLEtBQUssR0FBRyxxREFBcUQsQ0FBQztnQkFDcEUsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLHdCQUF3QixFQUFFLENBQUM7b0JBQzdCLGVBQWUsR0FBRyx3QkFBd0IsQ0FBQyxF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
@@ -0,0 +1,36 @@
1
+ import { appendFile, readFile } from "fs/promises";
2
+ export function xMonkeyStylesPlugin() {
3
+ return {
4
+ name: "xmonkey-styles-plugin",
5
+ setup(build) {
6
+ build.onEnd(async (result) => {
7
+ if (!build.initialOptions?.outfile || !build.initialOptions?.bundle) {
8
+ console.error("Wrong build configuration. Options 'bundle' must be enabled and 'outfile' must be set.");
9
+ return;
10
+ }
11
+ if (!result.metafile) {
12
+ console.warn("ESBuild metafile not enabled. Style bundle skipped.");
13
+ return;
14
+ }
15
+ const outputs = result.metafile.outputs;
16
+ let cssFilePath = "";
17
+ for (const file in outputs) {
18
+ const ext = file.split(".").pop();
19
+ if (ext === "css") {
20
+ cssFilePath = file;
21
+ break;
22
+ }
23
+ }
24
+ if (!cssFilePath.length) {
25
+ console.warn("[-] StyleSheet output skipped.");
26
+ return;
27
+ }
28
+ const jsOutFile = build.initialOptions.outfile;
29
+ const cssContents = (await readFile(cssFilePath)).toString();
30
+ const cssContentsWithtoutNewlines = cssContents.replace(/\n/g, "").replace(/\r/g, "");
31
+ appendFile(jsOutFile, `\nGM.addStyle("\\\n${cssContentsWithtoutNewlines.trim()}\\\n");`);
32
+ });
33
+ },
34
+ };
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1vbmtleS1zdHlsZXMtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VzYnVpbGQvcGx1Z2lucy94bW9ua2V5LXN0eWxlcy1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkQsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPO1FBQ0wsSUFBSSxFQUFFLHVCQUF1QjtRQUM3QixLQUFLLENBQUMsS0FBSztZQUNULEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUNwRSxPQUFPLENBQUMsS0FBSyxDQUFDLHdGQUF3RixDQUFDLENBQUM7b0JBQ3hHLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxDQUFDLENBQUM7b0JBQ3BFLE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztnQkFDeEMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUNyQixLQUFLLE1BQU0sSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNsQyxJQUFJLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQzt3QkFDbEIsV0FBVyxHQUFHLElBQUksQ0FBQzt3QkFDbkIsTUFBTTtvQkFDUixDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO29CQUMvQyxPQUFPO2dCQUNULENBQUM7Z0JBRUQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7Z0JBRS9DLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDN0QsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RixVQUFVLENBQUMsU0FBUyxFQUFFLHNCQUFzQiwyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDM0YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMifQ==
@@ -0,0 +1,30 @@
1
+ import { useCallback, useState, useEffect } from "preact/hooks";
2
+ export function useLocalStorage(key, defaultValue) {
3
+ return useStorage(key, defaultValue, window.localStorage);
4
+ }
5
+ export function useSessionStorage(key, defaultValue) {
6
+ return useStorage(key, defaultValue, window.sessionStorage);
7
+ }
8
+ function useStorage(key, defaultValue, storageObject) {
9
+ const [value, setValue] = useState(() => {
10
+ const jsonValue = storageObject.getItem(key);
11
+ if (jsonValue != null)
12
+ return JSON.parse(jsonValue);
13
+ if (typeof defaultValue === "function") {
14
+ return defaultValue();
15
+ }
16
+ else {
17
+ return defaultValue;
18
+ }
19
+ });
20
+ useEffect(() => {
21
+ if (value === undefined)
22
+ return storageObject.removeItem(key);
23
+ storageObject.setItem(key, JSON.stringify(value));
24
+ }, [key, value, storageObject]);
25
+ const remove = useCallback(() => {
26
+ setValue(undefined);
27
+ }, []);
28
+ return [value, setValue, remove];
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWhFLE1BQU0sVUFBVSxlQUFlLENBQUMsR0FBVyxFQUFFLFlBQXFCO0lBQ2hFLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsR0FBVyxFQUFFLFlBQXFCO0lBQ2xFLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxHQUFXLEVBQUUsWUFBcUIsRUFBRSxhQUFzQjtJQUM1RSxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDdEMsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxJQUFJLFNBQVMsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELElBQUksT0FBTyxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdkMsT0FBTyxZQUFZLEVBQUUsQ0FBQztRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsT0FBTyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlELGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFFaEMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUM5QixRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkMsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9