sliftutils 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/.gitignore +38 -0
  2. package/assets/icon128.png +0 -0
  3. package/assets/icon16.png +0 -0
  4. package/assets/icon48.png +0 -0
  5. package/build-electron/assets/icon128.png +0 -0
  6. package/build-electron/assets/icon16.png +0 -0
  7. package/build-electron/assets/icon48.png +0 -0
  8. package/build-electron/electron/electronIndex.html +12 -0
  9. package/build-electron/electronMain.js +5185 -0
  10. package/build-electron/electronRenderer.js +20852 -0
  11. package/build-extension/assets/icon128.png +0 -0
  12. package/build-extension/assets/icon16.png +0 -0
  13. package/build-extension/assets/icon48.png +0 -0
  14. package/build-extension/extBackground.js +5246 -0
  15. package/build-extension/extContentScript.js +5243 -0
  16. package/build-extension/manifest.json +29 -0
  17. package/build-nodejs/server.js +198610 -0
  18. package/build-web/assets/icon128.png +0 -0
  19. package/build-web/assets/icon16.png +0 -0
  20. package/build-web/assets/icon48.png +0 -0
  21. package/build-web/browser.js +199266 -0
  22. package/build-web/web/index.html +32 -0
  23. package/builders/dist/electronBuild.ts.cache +105 -0
  24. package/builders/dist/extensionBuild.ts.cache +146 -0
  25. package/builders/dist/generateIndexDts.ts.cache +74 -0
  26. package/builders/dist/hotReload.ts.cache +93 -0
  27. package/builders/dist/nodeJSBuild.ts.cache +29 -0
  28. package/builders/dist/watch.ts.cache +163 -0
  29. package/builders/dist/webBuild.ts.cache +81 -0
  30. package/bundler/dist/bundleEntry.ts.cache +48 -0
  31. package/bundler/dist/bundleEntryCaller.ts.cache +18 -0
  32. package/bundler/dist/bundleRequire.ts.cache +246 -0
  33. package/bundler/dist/bundleWrapper.ts.cache +101 -0
  34. package/bundler/dist/bundler.ts.cache +66 -0
  35. package/bundler/dist/sourceMaps.ts.cache +210 -0
  36. package/dist/electronMain.ts.cache +27 -0
  37. package/dist/electronRenderer.tsx.cache +62 -0
  38. package/electron/dist/electronMain.ts.cache +26 -0
  39. package/electron/dist/electronRenderer.tsx.cache +64 -0
  40. package/extension/dist/extBackground.ts.cache +20 -0
  41. package/extension/dist/extContentScript.ts.cache +17 -0
  42. package/misc/dist/environment.ts.cache +50 -0
  43. package/misc/dist/fs.ts.cache +29 -0
  44. package/nodejs/dist/exampleFile.ts.cache +11 -0
  45. package/nodejs/dist/server.ts.cache +15 -0
  46. package/package.json +5 -1
  47. package/render-utils/dist/observer.tsx.cache +33 -0
  48. package/storage/dist/CachedStorage.ts.cache +31 -0
  49. package/storage/dist/DelayedStorage.ts.cache +35 -0
  50. package/storage/dist/DiskCollection.ts.cache +241 -0
  51. package/storage/dist/FileFolderAPI.tsx.cache +345 -0
  52. package/storage/dist/IndexedDBFileFolderAPI.ts.cache +142 -0
  53. package/storage/dist/JSONStorage.ts.cache +38 -0
  54. package/storage/dist/PendingManager.tsx.cache +73 -0
  55. package/storage/dist/PendingStorage.ts.cache +49 -0
  56. package/storage/dist/PrivateFileSystemStorage.ts.cache +178 -0
  57. package/storage/dist/StorageObservable.ts.cache +120 -0
  58. package/storage/dist/TransactionStorage.ts.cache +421 -0
  59. package/storage/dist/fileSystemPointer.ts.cache +77 -0
  60. package/web/dist/browser.tsx.cache +66 -0
  61. package/yarn.lock +1752 -0
@@ -0,0 +1,32 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Web App</title>
6
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
7
+ <style>
8
+ * {
9
+ box-sizing: border-box;
10
+ overflow-wrap: break-word;
11
+ word-wrap: break-word;
12
+ word-break: break-word;
13
+ }
14
+ body {
15
+ margin: 0px;
16
+ padding: 0px;
17
+ background: hsl(0, 0%, 7%);
18
+ color: hsl(0, 0%, 100%);
19
+ font-family: 'Inter', system-ui, -apple-system, Segoe UI, Roboto, 'Helvetica Neue', Arial, 'Noto Sans', 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', sans-serif;
20
+ }
21
+ body, button, textarea {
22
+ font-family: Inter;
23
+ font-size: 12px;
24
+ }
25
+ </style>
26
+ </head>
27
+ <body>
28
+ <div id="app"></div>
29
+ <script src="../browser.js"></script>
30
+ </body>
31
+ </html>
32
+
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const batching_1 = require("socket-function/src/batching");
8
+ const bundleEntryCaller_1 = require("../bundler/bundleEntryCaller");
9
+ const yargs_1 = __importDefault(require("yargs"));
10
+ const format_1 = require("socket-function/src/formatting/format");
11
+ const path_1 = __importDefault(require("path"));
12
+ const fs_2 = require("../misc/fs");
13
+ const logColors_1 = require("socket-function/src/formatting/logColors");
14
+ async function main() {
15
+ // Check if Electron is installed
16
+ try {
17
+ require.resolve("electron");
18
+ }
19
+ catch (error) {
20
+ console.error("ERROR: Electron is not installed.");
21
+ console.error("");
22
+ console.error("Electron is too heavy to be included by default for non-electron projects. Please run:");
23
+ console.error((0, logColors_1.green)("yarn add electron"));
24
+ process.exit(1);
25
+ }
26
+ let time = Date.now();
27
+ let yargObj = (0, yargs_1.default)(process.argv)
28
+ .option("mainEntry", { type: "string", default: "./electron/electronMain.ts", desc: `Path to the main process entry point` })
29
+ .option("rendererEntry", { type: "string", default: "./electron/electronRenderer.tsx", desc: `Path to the renderer process entry point` })
30
+ .option("indexHtml", { type: "string", default: "./electron/electronIndex.html", desc: `Path to the index.html file` })
31
+ .option("assetsFolder", { type: "string", default: "./assets", desc: `Path to the assets folder` })
32
+ .option("outputFolder", { type: "string", default: "./build-electron", desc: `Output folder` })
33
+ .argv || {};
34
+ // Wait for any async functions to load.
35
+ await (0, batching_1.delay)(0);
36
+ let hasMainEntry = fs_1.default.existsSync(yargObj.mainEntry);
37
+ let hasRendererEntry = fs_1.default.existsSync(yargObj.rendererEntry);
38
+ let hasIndexHtml = fs_1.default.existsSync(yargObj.indexHtml);
39
+ let hasAssets = fs_1.default.existsSync(yargObj.assetsFolder);
40
+ if (!hasMainEntry) {
41
+ throw new Error(`Main process entry point not found at ${yargObj.mainEntry}. Please specify with the --mainEntry option.`);
42
+ }
43
+ if (!hasRendererEntry) {
44
+ throw new Error(`Renderer process entry point not found at ${yargObj.rendererEntry}. Please specify with the --rendererEntry option.`);
45
+ }
46
+ await fs_1.default.promises.mkdir(yargObj.outputFolder, { recursive: true });
47
+ // Build main and renderer processes in parallel
48
+ await Promise.all([
49
+ (0, bundleEntryCaller_1.bundleEntryCaller)({
50
+ entryPoint: yargObj.mainEntry,
51
+ outputFolder: yargObj.outputFolder,
52
+ }),
53
+ (0, bundleEntryCaller_1.bundleEntryCaller)({
54
+ entryPoint: yargObj.rendererEntry,
55
+ outputFolder: yargObj.outputFolder,
56
+ })
57
+ ]);
58
+ // Collect all files to copy
59
+ let filesToCopy = [];
60
+ if (hasIndexHtml) {
61
+ filesToCopy.push(yargObj.indexHtml);
62
+ }
63
+ // Add assets folder files if it exists
64
+ if (hasAssets) {
65
+ for await (const file of (0, fs_2.getAllFiles)(yargObj.assetsFolder)) {
66
+ filesToCopy.push(file);
67
+ }
68
+ }
69
+ // Copy all files with timestamp checking
70
+ async function getTimestamp(filePath) {
71
+ try {
72
+ const stats = await fs_1.default.promises.stat(filePath);
73
+ return stats.mtimeMs;
74
+ }
75
+ catch (error) {
76
+ return 0;
77
+ }
78
+ }
79
+ let filesCopied = 0;
80
+ let root = path_1.default.resolve(".");
81
+ for (const file of filesToCopy) {
82
+ let sourcePath = path_1.default.resolve(file);
83
+ if (!fs_1.default.existsSync(sourcePath)) {
84
+ console.warn(`Warning: File not found: ${file}`);
85
+ continue;
86
+ }
87
+ let relativePath = path_1.default.relative(root, sourcePath);
88
+ let destPath = path_1.default.join(yargObj.outputFolder, relativePath);
89
+ let sourceTimestamp = await getTimestamp(sourcePath);
90
+ let destTimestamp = await getTimestamp(destPath);
91
+ if (sourceTimestamp > destTimestamp) {
92
+ await fs_1.default.promises.mkdir(path_1.default.dirname(destPath), { recursive: true });
93
+ await fs_1.default.promises.cp(sourcePath, destPath);
94
+ filesCopied++;
95
+ }
96
+ }
97
+ if (filesCopied > 0) {
98
+ console.log(`Copied ${filesCopied} changed files`);
99
+ }
100
+ let duration = Date.now() - time;
101
+ console.log(`Electron build completed in ${(0, format_1.formatTime)(duration)}`);
102
+ }
103
+ main().catch(console.error).finally(() => process.exit());
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlY3Ryb25CdWlsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVsZWN0cm9uQnVpbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsMkRBQXFEO0FBQ3JELG9FQUFpRTtBQUNqRSxrREFBMEI7QUFDMUIsa0VBQW1FO0FBQ25FLGdEQUF3QjtBQUN4QixtQ0FBeUM7QUFDekMsd0VBQWlFO0FBRWpFLEtBQUssVUFBVSxJQUFJO0lBQ2YsaUNBQWlDO0lBQ2pDLElBQUksQ0FBQztRQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDbkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLHdGQUF3RixDQUFDLENBQUM7UUFDeEcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLGlCQUFLLEVBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN0QixJQUFJLE9BQU8sR0FBRyxJQUFBLGVBQUssRUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQzVCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQztTQUM1SCxNQUFNLENBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsSUFBSSxFQUFFLDBDQUEwQyxFQUFFLENBQUM7U0FDekksTUFBTSxDQUFD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QyxPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFDRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7IGJ1bmRsZUVudHJ5Q2FsbGVyIH0gZnJvbSBcIi4uL2J1bmRsZXIvYnVuZGxlRW50cnlDYWxsZXJcIjtcbmltcG9ydCB5YXJncyBmcm9tIFwieWFyZ3NcIjtcbmltcG9ydCB7IGZvcm1hdFRpbWUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9mb3JtYXR0aW5nL2Zvcm1hdFwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGdldEFsbEZpbGVzIH0gZnJvbSBcIi4uL21pc2MvZnNcIjtcbmltcG9ydCB7IGdyZWVuIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9sb2dDb2xvcnNcIjtcblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgICAvLyBDaGVjayBpZiBFbGVjdHJvbiBpcyBpbnN0YWxsZWRcbiAgICB0cnkge1xuICAgICAgICByZXF1aXJlLnJlc29sdmUoXCJlbGVjdHJvblwiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRVJST1I6IEVsZWN0cm9uIGlzIG5vdCBpbnN0YWxsZWQuXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRWxlY3Ryb24gaXMgdG9vIGhlYXZ5IHRvIGJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQgZm9yIG5vbi1lbGVjdHJvbiBwcm9qZWN0cy4gUGxlYXNlIHJ1bjpcIik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZ3JlZW4oXCJ5YXJuIGFkZCBlbGVjdHJvblwiKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBsZXQgdGltZSA9IERhdGUubm93KCk7XG4gICAgbGV0IHlhcmdPYmogPSB5YXJncyhwcm9jZXNzLmFyZ3YpXG4gICAgICAgIC5vcHRpb24oXCJtYWluRW50cnlcIiwgeyB0eXBlOiBcInN0cmluZ1wiLCBkZWZhdWx0OiBcIi4vZWxlY3Ryb24vZWxlY3Ryb25NYWluLnRzXCIsIGRlc2M6IGBQYXRoIHRvIHRoZSBtYWluIHByb2Nlc3MgZW50cnkgcG9pbnRgIH0pXG4gICAgICAgIC5vcHRpb24oXCJyZW5kZXJlckVudHJ5XCIsIHsgdHlwZTogXCJzdHJpbmdcIiwgZGVmYXVsdDogXCIuL2VsZWN0cm9uL2VsZWN0cm9uUmVuZGVyZXIudHN4XCIsIGRlc2M6IGBQYXRoIHRvIHRoZSByZW5kZXJlciBwcm9jZXNzIGVudHJ5IHBvaW50YCB9KVxuICAgICAgICAub3B0aW9uKFwiaW5kZXhIdG1sXCIsIHsgdHlwZTogXCJzdHJpbmdcIiwgZGVmYXVsdDogXCIuL2VsZWN0cm9uL2VsZWN0cm9uSW5kZXguaHRtbFwiLCBkZXNjOiBgUGF0aCB0byB0aGUgaW5kZXguaHRtbCBmaWxlYCB9KVxuICAgICAgICAub3B0aW9uKFwiYXNzZXRzRm9sZGVyXCIsIHsgdHlwZTogXCJzdHJpbmdcIiwgZGVmYXVsdDogXCIuL2Fzc2V0c1wiLCBkZXNjOiBgUGF0aCB0byB0aGUgYXNzZXRzIGZvbGRlcmAgfSlcbiAgICAgICAgLm9wdGlvbihcIm91dHB1dEZvbGRlclwiLCB7IHR5cGU6IFwic3RyaW5nXCIsIGRlZmF1bHQ6IFwiLi9idWlsZC1lbGVjdHJvblwiLCBkZXNjOiBgT3V0cHV0IGZvbGRlcmAgfSlcbiAgICAgICAgLmFyZ3YgfHwge31cbiAgICAgICAgO1xuXG5cbiAgICAvLyBXYWl0IGZvciBhbnkgYXN5bmMgZnVuY3Rpb25zIHRvIGxvYWQuIFxuICAgIGF3YWl0IGRlbGF5KDApO1xuXG4gICAgbGV0IGhhc01haW5FbnRyeSA9IGZzLmV4aXN0c1N5bmMoeWFyZ09iai5tYWluRW50cnkpO1xuICAgIGxldCBoYXNSZW5kZXJlckVudHJ5ID0gZnMuZXhpc3RzU3luYyh5YXJnT2JqLnJlbmRlcmVyRW50cnkpO1xuICAgIGxldCBoYXNJbmRleEh0bWwgPSBmcy5leGlzdHNTeW5jKHlhcmdPYmouaW5kZXhIdG1sKTtcbiAgICBsZXQgaGFzQXNzZXRzID0gZnMuZXhpc3RzU3luYyh5YXJnT2JqLmFzc2V0c0ZvbGRlcik7XG5cbiAgICBpZiAoIWhhc01haW5FbnRyeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1haW4gcHJvY2VzcyBlbnRyeSBwb2ludCBub3QgZm91bmQgYXQgJHt5YXJnT2JqLm1haW5FbnRyeX0uIFBsZWFzZSBzcGVjaWZ5IHdpdGggdGhlIC0tbWFpbkVudHJ5IG9wdGlvbi5gKTtcbiAgICB9XG4gICAgaWYgKCFoYXNSZW5kZXJlckVudHJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVuZGVyZXIgcHJvY2VzcyBlbnRyeSBwb2ludCBub3QgZm91bmQgYXQgJHt5YXJnT2JqLnJlbmRlcmVyRW50cnl9LiBQbGVhc2Ugc3BlY2lmeSB3aXRoIHRoZSAtLXJlbmRlcmVyRW50cnkgb3B0aW9uLmApO1xuICAgIH1cblxuICAgIGF3YWl0IGZzLnByb21pc2VzLm1rZGlyKHlhcmdPYmoub3V0cHV0Rm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIC8vIEJ1aWxkIG1haW4gYW5kIHJlbmRlcmVyIHByb2Nlc3NlcyBpbiBwYXJhbGxlbFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgYnVuZGxlRW50cnlDYWxsZXIoe1xuICAgICAgICAgICAgZW50cnlQb2ludDogeWFyZ09iai5tYWluRW50cnksXG4gICAgICAgICAgICBvdXRwdXRGb2xkZXI6IHlhcmdPYmoub3V0cHV0Rm9sZGVyLFxuICAgICAgICB9KSxcbiAgICAgICAgYnVuZGxlRW50cnlDYWxsZXIoe1xuICAgICAgICAgICAgZW50cnlQb2ludDogeWFyZ09iai5yZW5kZXJlckVudHJ5LFxuICAgICAgICAgICAgb3V0cHV0Rm9sZGVyOiB5YXJnT2JqLm91dHB1dEZvbGRlcixcbiAgICAgICAgfSlcbiAgICBdKTtcblxuICAgIC8vIENvbGxlY3QgYWxsIGZpbGVzIHRvIGNvcHlcbiAgICBsZXQgZmlsZXNUb0NvcHk6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoaGFzSW5kZXhIdG1sKSB7XG4gICAgICAgIGZpbGVzVG9Db3B5LnB1c2goeWFyZ09iai5pbmRleEh0bWwpO1xuICAgIH1cblxuICAgIC8vIEFkZCBhc3NldHMgZm9sZGVyIGZpbGVzIGlmIGl0IGV4aXN0c1xuICAgIGlmIChoYXNBc3NldHMpIHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBmaWxlIG9mIGdldEFsbEZpbGVzKHlhcmdPYmouYXNzZXRzRm9sZGVyKSkge1xuICAgICAgICAgICAgZmlsZXNUb0NvcHkucHVzaChmaWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvcHkgYWxsIGZpbGVzIHdpdGggdGltZXN0YW1wIGNoZWNraW5nXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0VGltZXN0YW1wKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5wcm9taXNlcy5zdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiBzdGF0cy5tdGltZU1zO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZmlsZXNDb3BpZWQgPSAwO1xuICAgIGxldCByb290ID0gcGF0aC5yZXNvbHZlKFwiLlwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXNUb0NvcHkpIHtcbiAgICAgICAgbGV0IHNvdXJjZVBhdGggPSBwYXRoLnJlc29sdmUoZmlsZSk7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhzb3VyY2VQYXRoKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBGaWxlIG5vdCBmb3VuZDogJHtmaWxlfWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUocm9vdCwgc291cmNlUGF0aCk7XG4gICAgICAgIGxldCBkZXN0UGF0aCA9IHBhdGguam9pbih5YXJnT2JqLm91dHB1dEZvbGRlciwgcmVsYXRpdmVQYXRoKTtcblxuICAgICAgICBsZXQgc291cmNlVGltZXN0YW1wID0gYXdhaXQgZ2V0VGltZXN0YW1wKHNvdXJjZVBhdGgpO1xuICAgICAgICBsZXQgZGVzdFRpbWVzdGFtcCA9IGF3YWl0IGdldFRpbWVzdGFtcChkZXN0UGF0aCk7XG4gICAgICAgIGlmIChzb3VyY2VUaW1lc3RhbXAgPiBkZXN0VGltZXN0YW1wKSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy5ta2RpcihwYXRoLmRpcm5hbWUoZGVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLmNwKHNvdXJjZVBhdGgsIGRlc3RQYXRoKTtcbiAgICAgICAgICAgIGZpbGVzQ29waWVkKys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpbGVzQ29waWVkID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQ29waWVkICR7ZmlsZXNDb3BpZWR9IGNoYW5nZWQgZmlsZXNgKTtcbiAgICB9XG5cbiAgICBsZXQgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gdGltZTtcbiAgICBjb25zb2xlLmxvZyhgRWxlY3Ryb24gYnVpbGQgY29tcGxldGVkIGluICR7Zm9ybWF0VGltZShkdXJhdGlvbil9YCk7XG59XG5tYWluKCkuY2F0Y2goY29uc29sZS5lcnJvcikuZmluYWxseSgoKSA9PiBwcm9jZXNzLmV4aXQoKSk7XG5cbiJdfQ=//=
105
+ /* _JS_SOURCE_HASH = "c198b9f3055795f50d284069a0f26ef42cc4ff468b064cfe78076e0fefcadd28"; */
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const batching_1 = require("socket-function/src/batching");
8
+ const bundleEntryCaller_1 = require("../bundler/bundleEntryCaller");
9
+ const yargs_1 = __importDefault(require("yargs"));
10
+ const format_1 = require("socket-function/src/formatting/format");
11
+ const path_1 = __importDefault(require("path"));
12
+ const fs_2 = require("../misc/fs");
13
+ async function main() {
14
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
15
+ let time = Date.now();
16
+ //todonext
17
+ // We need to build both the extBackground.ts and extContentScript.ts
18
+ // And copy the manifest.json
19
+ // AND copy everything in ./assets which has updated
20
+ let yargObj = (0, yargs_1.default)(process.argv)
21
+ .option("backgroundEntry", { type: "string", default: "./extension/extBackground.ts", desc: `Path to the entry point file` })
22
+ .option("contentEntry", { type: "string", default: "./extension/extContentScript.ts", desc: `Path to the entry point file` })
23
+ .option("manifestPath", { type: "string", default: "./extension/manifest.json", desc: `Path to the manifest.json file` })
24
+ .option("assetsFolder", { type: "string", default: "./assets", desc: `Path to the assets folder` })
25
+ .option("outputFolder", { type: "string", default: "./build-extension", desc: `Output folder` })
26
+ .argv || {};
27
+ // Wait for any async functions to load.
28
+ await (0, batching_1.delay)(0);
29
+ let hasBackgroundEntry = fs_1.default.existsSync(yargObj.backgroundEntry);
30
+ let hasContentEntry = fs_1.default.existsSync(yargObj.contentEntry);
31
+ let hasManifest = fs_1.default.existsSync(yargObj.manifestPath);
32
+ let hasAssets = fs_1.default.existsSync(yargObj.assetsFolder);
33
+ if (!hasBackgroundEntry && !hasContentEntry) {
34
+ throw new Error("No extension entry points found. Please specify at least one entry point with the --backgroundEntry or --contentEntry option. Or, create the default file at ./extBackground.ts or ./extContentScript.ts.");
35
+ }
36
+ if (!hasManifest) {
37
+ throw new Error("No manifest file found. Please specify the manifest file with the --manifestPath option. Or, create the default file at ./manifest.json.");
38
+ }
39
+ await fs_1.default.promises.mkdir("./build-extension", { recursive: true });
40
+ // Build background and content scripts in parallel
41
+ let bundlePromises = [];
42
+ if (hasBackgroundEntry) {
43
+ bundlePromises.push((0, bundleEntryCaller_1.bundleEntryCaller)({
44
+ entryPoint: yargObj.backgroundEntry,
45
+ outputFolder: yargObj.outputFolder,
46
+ }));
47
+ }
48
+ if (hasContentEntry) {
49
+ bundlePromises.push((0, bundleEntryCaller_1.bundleEntryCaller)({
50
+ entryPoint: yargObj.contentEntry,
51
+ outputFolder: yargObj.outputFolder,
52
+ }));
53
+ }
54
+ await Promise.all([
55
+ ...bundlePromises,
56
+ fs_1.default.promises.cp(yargObj.manifestPath, path_1.default.join(yargObj.outputFolder, "manifest.json"))
57
+ ]);
58
+ // Parse manifest and collect referenced files
59
+ let manifestContent = await fs_1.default.promises.readFile(yargObj.manifestPath, "utf-8");
60
+ let manifest = JSON.parse(manifestContent);
61
+ // Collect all files to copy
62
+ let filesToCopy = [];
63
+ // Helper to add icons (can be string or object of strings)
64
+ function addIconPaths(icon) {
65
+ if (!icon)
66
+ return;
67
+ if (typeof icon === "string") {
68
+ filesToCopy.push(icon);
69
+ }
70
+ else if (typeof icon === "object") {
71
+ for (const iconPath of Object.values(icon)) {
72
+ if (typeof iconPath === "string") {
73
+ filesToCopy.push(iconPath);
74
+ }
75
+ }
76
+ }
77
+ }
78
+ // Add manifest-referenced files
79
+ if ((_a = manifest.action) === null || _a === void 0 ? void 0 : _a.default_popup)
80
+ filesToCopy.push(manifest.action.default_popup);
81
+ if ((_b = manifest.browser_action) === null || _b === void 0 ? void 0 : _b.default_popup)
82
+ filesToCopy.push(manifest.browser_action.default_popup);
83
+ if ((_c = manifest.page_action) === null || _c === void 0 ? void 0 : _c.default_popup)
84
+ filesToCopy.push(manifest.page_action.default_popup);
85
+ if (manifest.options_page)
86
+ filesToCopy.push(manifest.options_page);
87
+ if ((_d = manifest.options_ui) === null || _d === void 0 ? void 0 : _d.page)
88
+ filesToCopy.push(manifest.options_ui.page);
89
+ if (manifest.devtools_page)
90
+ filesToCopy.push(manifest.devtools_page);
91
+ if ((_e = manifest.sidebar_action) === null || _e === void 0 ? void 0 : _e.default_panel)
92
+ filesToCopy.push(manifest.sidebar_action.default_panel);
93
+ if ((_f = manifest.chrome_url_overrides) === null || _f === void 0 ? void 0 : _f.newtab)
94
+ filesToCopy.push(manifest.chrome_url_overrides.newtab);
95
+ if ((_g = manifest.chrome_url_overrides) === null || _g === void 0 ? void 0 : _g.bookmarks)
96
+ filesToCopy.push(manifest.chrome_url_overrides.bookmarks);
97
+ if ((_h = manifest.chrome_url_overrides) === null || _h === void 0 ? void 0 : _h.history)
98
+ filesToCopy.push(manifest.chrome_url_overrides.history);
99
+ // Add icons
100
+ addIconPaths(manifest.icons);
101
+ addIconPaths((_j = manifest.action) === null || _j === void 0 ? void 0 : _j.default_icon);
102
+ addIconPaths((_k = manifest.browser_action) === null || _k === void 0 ? void 0 : _k.default_icon);
103
+ addIconPaths((_l = manifest.page_action) === null || _l === void 0 ? void 0 : _l.default_icon);
104
+ // Add assets folder files if it exists
105
+ if (hasAssets) {
106
+ for await (const file of (0, fs_2.getAllFiles)(yargObj.assetsFolder)) {
107
+ filesToCopy.push(file);
108
+ }
109
+ }
110
+ // Copy all files with timestamp checking
111
+ async function getTimestamp(filePath) {
112
+ try {
113
+ const stats = await fs_1.default.promises.stat(filePath);
114
+ return stats.mtimeMs;
115
+ }
116
+ catch (error) {
117
+ return 0;
118
+ }
119
+ }
120
+ let filesCopied = 0;
121
+ let root = path_1.default.resolve(".");
122
+ for (const file of filesToCopy) {
123
+ let sourcePath = path_1.default.resolve(file);
124
+ if (!fs_1.default.existsSync(sourcePath)) {
125
+ console.warn(`Warning: File not found: ${file}`);
126
+ continue;
127
+ }
128
+ let relativePath = path_1.default.relative(root, sourcePath);
129
+ let destPath = path_1.default.join(yargObj.outputFolder, relativePath);
130
+ let sourceTimestamp = await getTimestamp(sourcePath);
131
+ let destTimestamp = await getTimestamp(destPath);
132
+ if (sourceTimestamp > destTimestamp) {
133
+ await fs_1.default.promises.mkdir(path_1.default.dirname(destPath), { recursive: true });
134
+ await fs_1.default.promises.cp(sourcePath, destPath);
135
+ filesCopied++;
136
+ }
137
+ }
138
+ if (filesCopied > 0) {
139
+ console.log(`Copied ${filesCopied} changed assets`);
140
+ }
141
+ let duration = Date.now() - time;
142
+ console.log(`Extension build completed in ${(0, format_1.formatTime)(duration)}`);
143
+ }
144
+ main().catch(console.error).finally(() => process.exit());
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9uQnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHRlbnNpb25CdWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRDQUFvQjtBQUNwQiwyREFBcUQ7QUFDckQsb0VBQWlFO0FBQ2pFLGtEQUEwQjtBQUMxQixrRUFBbUU7QUFDbkUsZ0RBQXdCO0FBQ3hCLG1DQUF5QztBQUV6QyxLQUFLLFVBQVUsSUFBSTs7SUFDZixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdEIsVUFBVTtJQUNWLHFFQUFxRTtJQUNyRSw2QkFBNkI7SUFDN0Isb0RBQW9EO0lBQ3BELElBQUksT0FBTyxHQUFHLElBQUEsZUFBSyxFQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDNUIsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsSUFBSSxFQUFFLDhCQUE4QixFQUFFLENBQUM7U0FDNUgsTUFBTSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLElBQUksRUFBRSw4QkFBOEIsRUFBRSxDQUFDO1NBQzVILE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxJQUFJLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQztTQUN4SCxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSwyQkFBMkIsRUFBRSxDQUFDO1NBQ2xHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUM7U0FDL0YsSUFBSSxJQUFJLEVBQUUsQ0FD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TyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2JhdGNoaW5nXCI7XG5pbXBvcnQgeyBidW5kbGVFbnRyeUNhbGxlciB9IGZyb20gXCIuLi9idW5kbGVyL2J1bmRsZUVudHJ5Q2FsbGVyXCI7XG5pbXBvcnQgeWFyZ3MgZnJvbSBcInlhcmdzXCI7XG5pbXBvcnQgeyBmb3JtYXRUaW1lIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBnZXRBbGxGaWxlcyB9IGZyb20gXCIuLi9taXNjL2ZzXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gICAgbGV0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgIC8vdG9kb25leHRcbiAgICAvLyBXZSBuZWVkIHRvIGJ1aWxkIGJvdGggdGhlIGV4dEJhY2tncm91bmQudHMgYW5kIGV4dENvbnRlbnRTY3JpcHQudHNcbiAgICAvLyBBbmQgY29weSB0aGUgbWFuaWZlc3QuanNvblxuICAgIC8vIEFORCBjb3B5IGV2ZXJ5dGhpbmcgaW4gLi9hc3NldHMgd2hpY2ggaGFzIHVwZGF0ZWRcbiAgICBsZXQgeWFyZ09iaiA9IHlhcmdzKHByb2Nlc3MuYXJndilcbiAgICAgICAgLm9wdGlvbihcImJhY2tncm91bmRFbnRyeVwiLCB7IHR5cGU6IFwic3RyaW5nXCIsIGRlZmF1bHQ6IFwiLi9leHRlbnNpb24vZXh0QmFja2dyb3VuZC50c1wiLCBkZXNjOiBgUGF0aCB0byB0aGUgZW50cnkgcG9pbnQgZmlsZWAgfSlcbiAgICAgICAgLm9wdGlvbihcImNvbnRlbnRFbnRyeVwiLCB7IHR5cGU6IFwic3RyaW5nXCIsIGRlZmF1bHQ6IFwiLi9leHRlbnNpb24vZXh0Q29udGVudFNjcmlwdC50c1wiLCBkZXNjOiBgUGF0aCB0byB0aGUgZW50cnkgcG9pbnQgZmlsZWAgfSlcbiAgICAgICAgLm9wdGlvbihcIm1hbmlmZXN0UGF0aFwiLCB7IHR5cGU6IFwic3RyaW5nXCIsIGRlZmF1bHQ6IFwiLi9leHRlbnNpb24vbWFuaWZlc3QuanNvblwiLCBkZXNjOiBgUGF0aCB0byB0aGUgbWFuaWZlc3QuanNvbiBmaWxlYCB9KVxuICAgICAgICAub3B0aW9uKFwiYXNzZXRzRm9sZGVyXCIsIHsgdHlwZTogXCJzdHJpbmdcIiwgZGVmYXVsdDogXCIuL2Fzc2V0c1wiLCBkZXNjOiBgUGF0aCB0byB0aGUgYXNzZXRzIGZvbGRlcmAgfSlcbiAgICAgICAgLm9wdGlvbihcIm91dHB1dEZvbGRlclwiLCB7IHR5cGU6IFwic3RyaW5nXCIsIGRlZmF1bHQ6IFwiLi9idWlsZC1leHRlbnNpb25cIiwgZGVzYzogYE91dHB1dCBmb2xkZXJgIH0pXG4gICAgICAgIC5hcmd2IHx8IHt9XG4gICAgICAgIDtcblxuXG4gICAgLy8gV2FpdCBmb3IgYW55IGFzeW5jIGZ1bmN0aW9ucyB0byBsb2FkLiBcbiAgICBhd2FpdCBkZWxheSgwKTtcblxuICAgIGxldCBoYXNCYWNrZ3JvdW5kRW50cnkgPSBmcy5leGlzdHNTeW5jKHlhcmdPYmouYmFja2dyb3VuZEVudHJ5KTtcbiAgICBsZXQgaGFzQ29udGVudEVudHJ5ID0gZnMuZXhpc3RzU3luYyh5YXJnT2JqLmNvbnRlbnRFbnRyeSk7XG4gICAgbGV0IGhhc01hbmlmZXN0ID0gZnMuZXhpc3RzU3luYyh5YXJnT2JqLm1hbmlmZXN0UGF0aCk7XG4gICAgbGV0IGhhc0Fzc2V0cyA9IGZzLmV4aXN0c1N5bmMoeWFyZ09iai5hc3NldHNGb2xkZXIpO1xuXG4gICAgaWYgKCFoYXNCYWNrZ3JvdW5kRW50cnkgJiYgIWhhc0NvbnRlbnRFbnRyeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBleHRlbnNpb24gZW50cnkgcG9pbnRzIGZvdW5kLiBQbGVhc2Ugc3BlY2lmeSBhdCBsZWFzdCBvbmUgZW50cnkgcG9pbnQgd2l0aCB0aGUgLS1iYWNrZ3JvdW5kRW50cnkgb3IgLS1jb250ZW50RW50cnkgb3B0aW9uLiBPciwgY3JlYXRlIHRoZSBkZWZhdWx0IGZpbGUgYXQgLi9leHRCYWNrZ3JvdW5kLnRzIG9yIC4vZXh0Q29udGVudFNjcmlwdC50cy5cIik7XG4gICAgfVxuICAgIGlmICghaGFzTWFuaWZlc3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbWFuaWZlc3QgZmlsZSBmb3VuZC4gUGxlYXNlIHNwZWNpZnkgdGhlIG1hbmlmZXN0IGZpbGUgd2l0aCB0aGUgLS1tYW5pZmVzdFBhdGggb3B0aW9uLiBPciwgY3JlYXRlIHRoZSBkZWZhdWx0IGZpbGUgYXQgLi9tYW5pZmVzdC5qc29uLlwiKTtcbiAgICB9XG5cbiAgICBhd2FpdCBmcy5wcm9taXNlcy5ta2RpcihcIi4vYnVpbGQtZXh0ZW5zaW9uXCIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgLy8gQnVpbGQgYmFja2dyb3VuZCBhbmQgY29udGVudCBzY3JpcHRzIGluIHBhcmFsbGVsXG4gICAgbGV0IGJ1bmRsZVByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcbiAgICBpZiAoaGFzQmFja2dyb3VuZEVudHJ5KSB7XG4gICAgICAgIGJ1bmRsZVByb21pc2VzLnB1c2goYnVuZGxlRW50cnlDYWxsZXIoe1xuICAgICAgICAgICAgZW50cnlQb2ludDogeWFyZ09iai5iYWNrZ3JvdW5kRW50cnksXG4gICAgICAgICAgICBvdXRwdXRGb2xkZXI6IHlhcmdPYmoub3V0cHV0Rm9sZGVyLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGlmIChoYXNDb250ZW50RW50cnkpIHtcbiAgICAgICAgYnVuZGxlUHJvbWlzZXMucHVzaChidW5kbGVFbnRyeUNhbGxlcih7XG4gICAgICAgICAgICBlbnRyeVBvaW50OiB5YXJnT2JqLmNvbnRlbnRFbnRyeSxcbiAgICAgICAgICAgIG91dHB1dEZvbGRlcjogeWFyZ09iai5vdXRwdXRGb2xkZXIsXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIC4uLmJ1bmRsZVByb21pc2VzLFxuICAgICAgICBmcy5wcm9taXNlcy5jcCh5YXJnT2JqLm1hbmlmZXN0UGF0aCwgcGF0aC5qb2luKHlhcmdPYmoub3V0cHV0Rm9sZGVyLCBcIm1hbmlmZXN0Lmpzb25cIikpXG4gICAgXSk7XG5cbiAgICAvLyBQYXJzZSBtYW5pZmVzdCBhbmQgY29sbGVjdCByZWZlcmVuY2VkIGZpbGVzXG4gICAgbGV0IG1hbmlmZXN0Q29udGVudCA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKHlhcmdPYmoubWFuaWZlc3RQYXRoLCBcInV0Zi04XCIpO1xuICAgIGxldCBtYW5pZmVzdCA9IEpTT04ucGFyc2UobWFuaWZlc3RDb250ZW50KTtcblxuICAgIC8vIENvbGxlY3QgYWxsIGZpbGVzIHRvIGNvcHlcbiAgICBsZXQgZmlsZXNUb0NvcHk6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBIZWxwZXIgdG8gYWRkIGljb25zIChjYW4gYmUgc3RyaW5nIG9yIG9iamVjdCBvZiBzdHJpbmdzKVxuICAgIGZ1bmN0aW9uIGFkZEljb25QYXRocyhpY29uOiBzdHJpbmcgfCBvYmplY3QgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCFpY29uKSByZXR1cm47XG4gICAgICAgIGlmICh0eXBlb2YgaWNvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgZmlsZXNUb0NvcHkucHVzaChpY29uKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaWNvbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpY29uUGF0aCBvZiBPYmplY3QudmFsdWVzKGljb24pKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpY29uUGF0aCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBmaWxlc1RvQ29weS5wdXNoKGljb25QYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgbWFuaWZlc3QtcmVmZXJlbmNlZCBmaWxlc1xuICAgIGlmIChtYW5pZmVzdC5hY3Rpb24/LmRlZmF1bHRfcG9wdXApIGZpbGVzVG9Db3B5LnB1c2gobWFuaWZlc3QuYWN0aW9uLmRlZmF1bHRfcG9wdXApO1xuICAgIGlmIChtYW5pZmVzdC5icm93c2VyX2FjdGlvbj8uZGVmYXVsdF9wb3B1cCkgZmlsZXNUb0NvcHkucHVzaChtYW5pZmVzdC5icm93c2VyX2FjdGlvbi5kZWZhdWx0X3BvcHVwKTtcbiAgICBpZiAobWFuaWZlc3QucGFnZV9hY3Rpb24/LmRlZmF1bHRfcG9wdXApIGZpbGVzVG9Db3B5LnB1c2gobWFuaWZlc3QucGFnZV9hY3Rpb24uZGVmYXVsdF9wb3B1cCk7XG4gICAgaWYgKG1hbmlmZXN0Lm9wdGlvbnNfcGFnZSkgZmlsZXNUb0NvcHkucHVzaChtYW5pZmVzdC5vcHRpb25zX3BhZ2UpO1xuICAgIGlmIChtYW5pZmVzdC5vcHRpb25zX3VpPy5wYWdlKSBmaWxlc1RvQ29weS5wdXNoKG1hbmlmZXN0Lm9wdGlvbnNfdWkucGFnZSk7XG4gICAgaWYgKG1hbmlmZXN0LmRldnRvb2xzX3BhZ2UpIGZpbGVzVG9Db3B5LnB1c2gobWFuaWZlc3QuZGV2dG9vbHNfcGFnZSk7XG4gICAgaWYgKG1hbmlmZXN0LnNpZGViYXJfYWN0aW9uPy5kZWZhdWx0X3BhbmVsKSBmaWxlc1RvQ29weS5wdXNoKG1hbmlmZXN0LnNpZGViYXJfYWN0aW9uLmRlZmF1bHRfcGFuZWwpO1xuICAgIGlmIChtYW5pZmVzdC5jaHJvbWVfdXJsX292ZXJyaWRlcz8ubmV3dGFiKSBmaWxlc1RvQ29weS5wdXNoKG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzLm5ld3RhYik7XG4gICAgaWYgKG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzPy5ib29rbWFya3MpIGZpbGVzVG9Db3B5LnB1c2gobWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMuYm9va21hcmtzKTtcbiAgICBpZiAobWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXM/Lmhpc3RvcnkpIGZpbGVzVG9Db3B5LnB1c2gobWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMuaGlzdG9yeSk7XG5cbiAgICAvLyBBZGQgaWNvbnNcbiAgICBhZGRJY29uUGF0aHMobWFuaWZlc3QuaWNvbnMpO1xuICAgIGFkZEljb25QYXRocyhtYW5pZmVzdC5hY3Rpb24/LmRlZmF1bHRfaWNvbik7XG4gICAgYWRkSWNvblBhdGhzKG1hbmlmZXN0LmJyb3dzZXJfYWN0aW9uPy5kZWZhdWx0X2ljb24pO1xuICAgIGFkZEljb25QYXRocyhtYW5pZmVzdC5wYWdlX2FjdGlvbj8uZGVmYXVsdF9pY29uKTtcblxuICAgIC8vIEFkZCBhc3NldHMgZm9sZGVyIGZpbGVzIGlmIGl0IGV4aXN0c1xuICAgIGlmIChoYXNBc3NldHMpIHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBmaWxlIG9mIGdldEFsbEZpbGVzKHlhcmdPYmouYXNzZXRzRm9sZGVyKSkge1xuICAgICAgICAgICAgZmlsZXNUb0NvcHkucHVzaChmaWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvcHkgYWxsIGZpbGVzIHdpdGggdGltZXN0YW1wIGNoZWNraW5nXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0VGltZXN0YW1wKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5wcm9taXNlcy5zdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiBzdGF0cy5tdGltZU1zO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZmlsZXNDb3BpZWQgPSAwO1xuICAgIGxldCByb290ID0gcGF0aC5yZXNvbHZlKFwiLlwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXNUb0NvcHkpIHtcbiAgICAgICAgbGV0IHNvdXJjZVBhdGggPSBwYXRoLnJlc29sdmUoZmlsZSk7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhzb3VyY2VQYXRoKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBGaWxlIG5vdCBmb3VuZDogJHtmaWxlfWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUocm9vdCwgc291cmNlUGF0aCk7XG4gICAgICAgIGxldCBkZXN0UGF0aCA9IHBhdGguam9pbih5YXJnT2JqLm91dHB1dEZvbGRlciwgcmVsYXRpdmVQYXRoKTtcblxuICAgICAgICBsZXQgc291cmNlVGltZXN0YW1wID0gYXdhaXQgZ2V0VGltZXN0YW1wKHNvdXJjZVBhdGgpO1xuICAgICAgICBsZXQgZGVzdFRpbWVzdGFtcCA9IGF3YWl0IGdldFRpbWVzdGFtcChkZXN0UGF0aCk7XG4gICAgICAgIGlmIChzb3VyY2VUaW1lc3RhbXAgPiBkZXN0VGltZXN0YW1wKSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy5ta2RpcihwYXRoLmRpcm5hbWUoZGVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLmNwKHNvdXJjZVBhdGgsIGRlc3RQYXRoKTtcbiAgICAgICAgICAgIGZpbGVzQ29waWVkKys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpbGVzQ29waWVkID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQ29waWVkICR7ZmlsZXNDb3BpZWR9IGNoYW5nZWQgYXNzZXRzYCk7XG4gICAgfVxuXG4gICAgbGV0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHRpbWU7XG4gICAgY29uc29sZS5sb2coYEV4dGVuc2lvbiBidWlsZCBjb21wbGV0ZWQgaW4gJHtmb3JtYXRUaW1lKGR1cmF0aW9uKX1gKTtcbn1cbm1haW4oKS5jYXRjaChjb25zb2xlLmVycm9yKS5maW5hbGx5KCgpID0+IHByb2Nlc3MuZXhpdCgpKTsiXX0//=
146
+ /* _JS_SOURCE_HASH = "9a2ad461ccf4b8c8b3ad7052b4a38d002f5b1c97389602f23186edfd1211aba6"; */
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
26
+ const fs = __importStar(require("fs"));
27
+ const path = __importStar(require("path"));
28
+ const FOLDERS_TO_INCLUDE = ["render-utils", "misc"];
29
+ function getAllDtsFiles(dir, fileList = []) {
30
+ const files = fs.readdirSync(dir);
31
+ for (const file of files) {
32
+ const filePath = path.join(dir, file);
33
+ const stat = fs.statSync(filePath);
34
+ if (stat.isDirectory()) {
35
+ getAllDtsFiles(filePath, fileList);
36
+ }
37
+ else if (file.endsWith(".d.ts")) {
38
+ fileList.push(filePath);
39
+ }
40
+ }
41
+ return fileList;
42
+ }
43
+ function generateIndexDts() {
44
+ const allModules = [];
45
+ for (const folderName of FOLDERS_TO_INCLUDE) {
46
+ const folderPath = path.join(__dirname, "..", folderName);
47
+ if (!fs.existsSync(folderPath)) {
48
+ console.log(`Warning: Folder ${folderName} does not exist, skipping...`);
49
+ continue;
50
+ }
51
+ const dtsFiles = getAllDtsFiles(folderPath);
52
+ const modules = dtsFiles
53
+ .map(filePath => {
54
+ const relativePath = path.relative(folderPath, filePath);
55
+ const withoutExt = relativePath.replace(/\.d\.ts$/, "");
56
+ const modulePath = "sliftutils/" + folderName + "/" + withoutExt.replace(/\\/g, "/");
57
+ const content = fs.readFileSync(filePath, "utf8");
58
+ const indentedContent = content
59
+ .split("\n")
60
+ .map(line => line ? " " + line : line)
61
+ .join("\n");
62
+ return `declare module "${modulePath}" {\n${indentedContent}\n}`;
63
+ });
64
+ allModules.push(...modules);
65
+ }
66
+ const sortedModules = allModules.sort().join("\n\n");
67
+ const outputPath = path.join(__dirname, "..", "index.d.ts");
68
+ const header = `// Auto-generated file. Do not edit manually.\n// Generated by: yarn generate-index-dts\n\n`;
69
+ fs.writeFileSync(outputPath, header + sortedModules + "\n", "utf8");
70
+ console.log(`Generated ${outputPath} with ${allModules.length} module declarations`);
71
+ }
72
+ generateIndexDts();
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVJbmRleER0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImdlbmVyYXRlSW5kZXhEdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0IsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUVwRCxTQUFTLGNBQWMsQ0FBQyxHQUFXLEVBQUUsV0FBcUIsRUFBRTtJQUN4RCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWxDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVuQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkMsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDO0FBRUQsU0FBUyxnQkFBZ0I7SUFDckIsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDO0lBRWhDLEtBQUssTUFBTSxVQUFVLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixVQUFVLDhCQUE4QixDQUFDLENBQUM7WUFDekUsU0FBUztRQUNiLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUMsTUFBTSxPQUFPLEdBQUcsUUFBUTthQUNuQixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDWixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN6RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RCxNQUFNLFVBQVUsR0FBRyxhQUFhLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUVyRixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNsRCxNQUFNLGVBQWUsR0FBRyxPQUFPO2lCQUMxQixLQUFLLENBQUMsSUFBSSxDQUFDO2lCQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFaEIsT0FBTyxtQkFBbUIsVUFBVSxRQUFRLGVBQWUsS0FBSyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBRVAsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM1RCxNQUFNLE1BQU0sR0FBRyw2RkFBNkYsQ0FBQztJQUU3RyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsYUFBYSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRSxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsVUFBVSxTQUFTLFVBQVUsQ0FBQyxNQUFNLHNCQUFzQixDQUFDLENBQUM7QUFDekYsQ0FBQztBQUVELGdCQUFnQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuY29uc3QgRk9MREVSU19UT19JTkNMVURFID0gW1wicmVuZGVyLXV0aWxzXCIsIFwibWlzY1wiXTtcblxuZnVuY3Rpb24gZ2V0QWxsRHRzRmlsZXMoZGlyOiBzdHJpbmcsIGZpbGVMaXN0OiBzdHJpbmdbXSA9IFtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoZGlyKTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkaXIsIGZpbGUpO1xuICAgICAgICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmMoZmlsZVBhdGgpO1xuXG4gICAgICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIGdldEFsbER0c0ZpbGVzKGZpbGVQYXRoLCBmaWxlTGlzdCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZS5lbmRzV2l0aChcIi5kLnRzXCIpKSB7XG4gICAgICAgICAgICBmaWxlTGlzdC5wdXNoKGZpbGVQYXRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaWxlTGlzdDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVJbmRleER0cygpIHtcbiAgICBjb25zdCBhbGxNb2R1bGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXJOYW1lIG9mIEZPTERFUlNfVE9fSU5DTFVERSkge1xuICAgICAgICBjb25zdCBmb2xkZXJQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBmb2xkZXJOYW1lKTtcblxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZm9sZGVyUGF0aCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBXYXJuaW5nOiBGb2xkZXIgJHtmb2xkZXJOYW1lfSBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmcuLi5gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHRzRmlsZXMgPSBnZXRBbGxEdHNGaWxlcyhmb2xkZXJQYXRoKTtcblxuICAgICAgICBjb25zdCBtb2R1bGVzID0gZHRzRmlsZXNcbiAgICAgICAgICAgIC5tYXAoZmlsZVBhdGggPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZm9sZGVyUGF0aCwgZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdpdGhvdXRFeHQgPSByZWxhdGl2ZVBhdGgucmVwbGFjZSgvXFwuZFxcLnRzJC8sIFwiXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZVBhdGggPSBcInNsaWZ0dXRpbHMvXCIgKyBmb2xkZXJOYW1lICsgXCIvXCIgKyB3aXRob3V0RXh0LnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGVudGVkQ29udGVudCA9IGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAobGluZSA9PiBsaW5lID8gXCIgICAgXCIgKyBsaW5lIDogbGluZSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYGRlY2xhcmUgbW9kdWxlIFwiJHttb2R1bGVQYXRofVwiIHtcXG4ke2luZGVudGVkQ29udGVudH1cXG59YDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGFsbE1vZHVsZXMucHVzaCguLi5tb2R1bGVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0ZWRNb2R1bGVzID0gYWxsTW9kdWxlcy5zb3J0KCkuam9pbihcIlxcblxcblwiKTtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcImluZGV4LmQudHNcIik7XG4gICAgY29uc3QgaGVhZGVyID0gYC8vIEF1dG8tZ2VuZXJhdGVkIGZpbGUuIERvIG5vdCBlZGl0IG1hbnVhbGx5Llxcbi8vIEdlbmVyYXRlZCBieTogeWFybiBnZW5lcmF0ZS1pbmRleC1kdHNcXG5cXG5gO1xuXG4gICAgZnMud3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCBoZWFkZXIgKyBzb3J0ZWRNb2R1bGVzICsgXCJcXG5cIiwgXCJ1dGY4XCIpO1xuICAgIGNvbnNvbGUubG9nKGBHZW5lcmF0ZWQgJHtvdXRwdXRQYXRofSB3aXRoICR7YWxsTW9kdWxlcy5sZW5ndGh9IG1vZHVsZSBkZWNsYXJhdGlvbnNgKTtcbn1cblxuZ2VuZXJhdGVJbmRleER0cygpO1xuXG4iXX0=
74
+ /* _JS_SOURCE_HASH = "7aa0476717e0d99e8ee6eb241bcad9def77971b4a515d5c677dcfe761fb019dc"; */
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
+ //exports.enableHotReloading = void 0;
4
+ const HotReloadController_1 = require("socket-function/hot/HotReloadController");
5
+ const environment_1 = require("../misc/environment");
6
+ const DEFAULT_WATCH_PORT = 9876;
7
+ async function enableHotReloading(config) {
8
+ if ((0, environment_1.isInChromeExtensionBackground)()) {
9
+ chromeExtensionBackgroundHotReload(config === null || config === void 0 ? void 0 : config.port);
10
+ }
11
+ else if ((0, environment_1.isInChromeExtensionContentScript)()) {
12
+ chromeExtensionContentScriptHotReload();
13
+ }
14
+ else if (typeof window !== "undefined" && typeof window.location && typeof window.location.reload === "function") {
15
+ // For most reloadable environments, just refresh
16
+ watchPortHotReload(config === null || config === void 0 ? void 0 : config.port, () => {
17
+ window.location.reload();
18
+ });
19
+ }
20
+ else {
21
+ (0, HotReloadController_1.watchFilesAndTriggerHotReloading)();
22
+ }
23
+ }
24
+ exports.enableHotReloading = enableHotReloading;
25
+ function watchPortHotReload(port = DEFAULT_WATCH_PORT, onReload) {
26
+ let reconnectTimer;
27
+ let ws;
28
+ let everConnected = false;
29
+ function connect() {
30
+ try {
31
+ ws = new WebSocket(`ws://localhost:${port}`);
32
+ ws.onopen = () => {
33
+ console.log(`[Hot Reload] Connected to watch server on port ${port}`);
34
+ everConnected = true;
35
+ };
36
+ ws.onmessage = (event) => {
37
+ try {
38
+ let data = JSON.parse(event.data);
39
+ if (data.type === "build-complete" && data.success) {
40
+ console.log("[Hot Reload] Build complete, reloading page...");
41
+ onReload();
42
+ }
43
+ }
44
+ catch (error) {
45
+ console.error("[Hot Reload] Failed to parse message:", error);
46
+ }
47
+ };
48
+ ws.onerror = (error) => {
49
+ console.warn(`[Hot Reload] WebSocket error. Use the watch script to enable watching.`);
50
+ };
51
+ ws.onclose = () => {
52
+ if (everConnected) {
53
+ console.log("[Hot Reload] Disconnected from watch server, reconnecting in 2s...");
54
+ if (reconnectTimer) {
55
+ clearTimeout(reconnectTimer);
56
+ }
57
+ reconnectTimer = setTimeout(() => {
58
+ connect();
59
+ }, 2000);
60
+ }
61
+ };
62
+ }
63
+ catch (error) {
64
+ console.error("[Hot Reload] Failed to connect:", error);
65
+ }
66
+ }
67
+ connect();
68
+ }
69
+ function chromeExtensionBackgroundHotReload(port = DEFAULT_WATCH_PORT) {
70
+ chrome.runtime.onConnect.addListener((port) => {
71
+ if (port.name === "hotReload") {
72
+ // Keep the port open so content scripts can detect when we disconnect
73
+ }
74
+ });
75
+ watchPortHotReload(port, () => {
76
+ chrome.runtime.reload();
77
+ });
78
+ }
79
+ function chromeExtensionContentScriptHotReload() {
80
+ let port = chrome.runtime.connect({ name: "hotReload" });
81
+ let startTime = Date.now();
82
+ port.onDisconnect.addListener(() => {
83
+ let timeToFail = Date.now() - startTime;
84
+ if (timeToFail > 10000) {
85
+ console.warn("[Hot Reload] Could not connect to background script. Make sure the background script calls enableHotReloading().");
86
+ return;
87
+ }
88
+ console.log("[Hot Reload] Extension reloaded, refreshing page...");
89
+ window.location.reload();
90
+ });
91
+ }
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90UmVsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG90UmVsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlGQUEyRjtBQUMzRixxREFBd0k7QUFFeEksTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFFekIsS0FBSyxVQUFVLGtCQUFrQixDQUFDLE1BRXhDO0lBQ0csSUFBSSxJQUFBLDJDQUE2QixHQUFFLEVBQUUsQ0FBQztRQUNsQyxrQ0FBa0MsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztTQUFNLElBQUksSUFBQSw4Q0FBZ0MsR0FBRSxFQUFFLENBQUM7UUFDNUMscUNBQXFDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO1NBQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDakgsaURBQWlEO1FBQ2pELGtCQUFrQixDQUFDLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ2xDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO1NBQU0sQ0FBQztRQUNKLElBQUEsc0RBQWdDLEdBQUUsQ0FBQztJQUN2QyxDQUFDO0FBQ0wsQ0FBQztBQWZELGdEQWVDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLEVBQUUsUUFBb0I7SUFDdkUsSUFBSSxjQUFrQyxDQUFDO0lBQ3ZDLElBQUksRUFBeUIsQ0FBQztJQUU5QixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFMUIsU0FBUyxPQUFPO1FBQ1osSUFBSSxDQUFDO1lBQ0QsRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLGtC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LENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2F0Y2hGaWxlc0FuZFRyaWdnZXJIb3RSZWxvYWRpbmcgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL2hvdC9Ib3RSZWxvYWRDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBpc0luQnJvd3NlciwgaXNJbkNocm9tZUV4dGVuc2lvbiwgaXNJbkNocm9tZUV4dGVuc2lvbkJhY2tncm91bmQsIGlzSW5DaHJvbWVFeHRlbnNpb25Db250ZW50U2NyaXB0IH0gZnJvbSBcIi4uL21pc2MvZW52aXJvbm1lbnRcIjtcblxuY29uc3QgREVGQVVMVF9XQVRDSF9QT1JUID0gOTg3NjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuYWJsZUhvdFJlbG9hZGluZyhjb25maWc/OiB7XG4gICAgcG9ydD86IG51bWJlcjtcbn0pIHtcbiAgICBpZiAoaXNJbkNocm9tZUV4dGVuc2lvbkJhY2tncm91bmQoKSkge1xuICAgICAgICBjaHJvbWVFeHRlbnNpb25CYWNrZ3JvdW5kSG90UmVsb2FkKGNvbmZpZz8ucG9ydCk7XG4gICAgfSBlbHNlIGlmIChpc0luQ2hyb21lRXh0ZW5zaW9uQ29udGVudFNjcmlwdCgpKSB7XG4gICAgICAgIGNocm9tZUV4dGVuc2lvbkNvbnRlbnRTY3JpcHRIb3RSZWxvYWQoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5sb2NhdGlvbiAmJiB0eXBlb2Ygd2luZG93LmxvY2F0aW9uLnJlbG9hZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIC8vIEZvciBtb3N0IHJlbG9hZGFibGUgZW52aXJvbm1lbnRzLCBqdXN0IHJlZnJlc2hcbiAgICAgICAgd2F0Y2hQb3J0SG90UmVsb2FkKGNvbmZpZz8ucG9ydCwgKCkgPT4ge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB3YXRjaEZpbGVzQW5kVHJpZ2dlckhvdFJlbG9hZGluZygpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gd2F0Y2hQb3J0SG90UmVsb2FkKHBvcnQgPSBERUZBVUxUX1dBVENIX1BPUlQsIG9uUmVsb2FkOiAoKSA9PiB2b2lkKSB7XG4gICAgbGV0IHJlY29ubmVjdFRpbWVyOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHdzOiBXZWJTb2NrZXQgfCB1bmRlZmluZWQ7XG5cbiAgICBsZXQgZXZlckNvbm5lY3RlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gY29ubmVjdCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdzID0gbmV3IFdlYlNvY2tldChgd3M6Ly9sb2NhbGhvc3Q6JHtwb3J0fWApO1xuXG4gICAgICAgICAgICB3cy5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtIb3QgUmVsb2FkXSBDb25uZWN0ZWQgdG8gd2F0Y2ggc2VydmVyIG9uIHBvcnQgJHtwb3J0fWApO1xuICAgICAgICAgICAgICAgIGV2ZXJDb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgd3Mub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSBcImJ1aWxkLWNvbXBsZXRlXCIgJiYgZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIltIb3QgUmVsb2FkXSBCdWlsZCBjb21wbGV0ZSwgcmVsb2FkaW5nIHBhZ2UuLi5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBvblJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltIb3QgUmVsb2FkXSBGYWlsZWQgdG8gcGFyc2UgbWVzc2FnZTpcIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHdzLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFtIb3QgUmVsb2FkXSBXZWJTb2NrZXQgZXJyb3IuIFVzZSB0aGUgd2F0Y2ggc2NyaXB0IHRvIGVuYWJsZSB3YXRjaGluZy5gKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHdzLm9uY2xvc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZXJDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJbSG90IFJlbG9hZF0gRGlzY29ubmVjdGVkIGZyb20gd2F0Y2ggc2VydmVyLCByZWNvbm5lY3RpbmcgaW4gMnMuLi5cIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWNvbm5lY3RUaW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlY29ubmVjdFRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZWNvbm5lY3RUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbSG90IFJlbG9hZF0gRmFpbGVkIHRvIGNvbm5lY3Q6XCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbm5lY3QoKTtcbn1cblxuZnVuY3Rpb24gY2hyb21lRXh0ZW5zaW9uQmFja2dyb3VuZEhvdFJlbG9hZChwb3J0ID0gREVGQVVMVF9XQVRDSF9QT1JUKSB7XG4gICAgY2hyb21lLnJ1bnRpbWUub25Db25uZWN0LmFkZExpc3RlbmVyKChwb3J0KSA9PiB7XG4gICAgICAgIGlmIChwb3J0Lm5hbWUgPT09IFwiaG90UmVsb2FkXCIpIHtcbiAgICAgICAgICAgIC8vIEtlZXAgdGhlIHBvcnQgb3BlbiBzbyBjb250ZW50IHNjcmlwdHMgY2FuIGRldGVjdCB3aGVuIHdlIGRpc2Nvbm5lY3RcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgd2F0Y2hQb3J0SG90UmVsb2FkKHBvcnQsICgpID0+IHtcbiAgICAgICAgY2hyb21lLnJ1bnRpbWUucmVsb2FkKCk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGNocm9tZUV4dGVuc2lvbkNvbnRlbnRTY3JpcHRIb3RSZWxvYWQoKSB7XG4gICAgbGV0IHBvcnQgPSBjaHJvbWUucnVudGltZS5jb25uZWN0KHsgbmFtZTogXCJob3RSZWxvYWRcIiB9KTtcblxuICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgcG9ydC5vbkRpc2Nvbm5lY3QuYWRkTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgICBsZXQgdGltZVRvRmFpbCA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgIGlmICh0aW1lVG9GYWlsID4gMTAwMDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIltIb3QgUmVsb2FkXSBDb3VsZCBub3QgY29ubmVjdCB0byBiYWNrZ3JvdW5kIHNjcmlwdC4gTWFrZSBzdXJlIHRoZSBiYWNrZ3JvdW5kIHNjcmlwdCBjYWxscyBlbmFibGVIb3RSZWxvYWRpbmcoKS5cIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coXCJbSG90IFJlbG9hZF0gRXh0ZW5zaW9uIHJlbG9hZGVkLCByZWZyZXNoaW5nIHBhZ2UuLi5cIik7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9KTtcbn0iXX0=
93
+ /* _JS_SOURCE_HASH = "f5fb4d27159854e9af81d26046814c288cd00447b65fd189e9db57ee849baaf2"; */
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const batching_1 = require("socket-function/src/batching");
8
+ const bundleEntryCaller_1 = require("../bundler/bundleEntryCaller");
9
+ const yargs_1 = __importDefault(require("yargs"));
10
+ const format_1 = require("socket-function/src/formatting/format");
11
+ async function main() {
12
+ let time = Date.now();
13
+ let yargObj = (0, yargs_1.default)(process.argv)
14
+ .option("entryPoint", { type: "string", default: "./nodejs/server.ts", desc: `Path to the entry point file` })
15
+ .option("outputFolder", { type: "string", default: "./build-nodejs", desc: `Output folder` })
16
+ .argv || {};
17
+ // Wait for any async functions to load.
18
+ await (0, batching_1.delay)(0);
19
+ await fs_1.default.promises.mkdir("./build-nodejs", { recursive: true });
20
+ await (0, bundleEntryCaller_1.bundleEntryCaller)({
21
+ entryPoint: yargObj.entryPoint,
22
+ outputFolder: yargObj.outputFolder,
23
+ });
24
+ let duration = Date.now() - time;
25
+ console.log(`NodeJS build completed in ${(0, format_1.formatTime)(duration)}`);
26
+ }
27
+ main().catch(console.error).finally(() => process.exit());
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZUpTQnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJub2RlSlNCdWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRDQUFvQjtBQUNwQiwyREFBcUQ7QUFDckQsb0VBQWlFO0FBQ2pFLGtEQUEwQjtBQUMxQixrRUFBbUU7QUFFbkUsS0FBSyxVQUFVLElBQUk7SUFDZixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdEIsSUFBSSxPQUFPLEdBQUcsSUFBQSxlQUFLLEVBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztTQUM1QixNQUFNLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLDhCQUE4QixFQUFFLENBQUM7U0FDN0csTUFBTSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQztTQUM1RixJQUFJLElBQUksRUFBRSxDQUNWO0lBR0wseUNBQXlDO0lBQ3pDLE1BQU0sSUFBQSxnQkFBSyxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWYsTUFBTSxZQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sSUFBQSxxQ0FBaUIsRUFBQztRQUNwQixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7UUFDOUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO0tBQ3JDLENBQUMsQ0FBQztJQUVILElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBQ0QsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2JhdGNoaW5nXCI7XG5pbXBvcnQgeyBidW5kbGVFbnRyeUNhbGxlciB9IGZyb20gXCIuLi9idW5kbGVyL2J1bmRsZUVudHJ5Q2FsbGVyXCI7XG5pbXBvcnQgeWFyZ3MgZnJvbSBcInlhcmdzXCI7XG5pbXBvcnQgeyBmb3JtYXRUaW1lIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgICBsZXQgdGltZSA9IERhdGUubm93KCk7XG4gICAgbGV0IHlhcmdPYmogPSB5YXJncyhwcm9jZXNzLmFyZ3YpXG4gICAgICAgIC5vcHRpb24oXCJlbnRyeVBvaW50XCIsIHsgdHlwZTogXCJzdHJpbmdcIiwgZGVmYXVsdDogXCIuL25vZGVqcy9zZXJ2ZXIudHNcIiwgZGVzYzogYFBhdGggdG8gdGhlIGVudHJ5IHBvaW50IGZpbGVgIH0pXG4gICAgICAgIC5vcHRpb24oXCJvdXRwdXRGb2xkZXJcIiwgeyB0eXBlOiBcInN0cmluZ1wiLCBkZWZhdWx0OiBcIi4vYnVpbGQtbm9kZWpzXCIsIGRlc2M6IGBPdXRwdXQgZm9sZGVyYCB9KVxuICAgICAgICAuYXJndiB8fCB7fVxuICAgICAgICA7XG5cblxuICAgIC8vIFdhaXQgZm9yIGFueSBhc3luYyBmdW5jdGlvbnMgdG8gbG9hZC4gXG4gICAgYXdhaXQgZGVsYXkoMCk7XG5cbiAgICBhd2FpdCBmcy5wcm9taXNlcy5ta2RpcihcIi4vYnVpbGQtbm9kZWpzXCIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgYXdhaXQgYnVuZGxlRW50cnlDYWxsZXIoe1xuICAgICAgICBlbnRyeVBvaW50OiB5YXJnT2JqLmVudHJ5UG9pbnQsXG4gICAgICAgIG91dHB1dEZvbGRlcjogeWFyZ09iai5vdXRwdXRGb2xkZXIsXG4gICAgfSk7XG5cbiAgICBsZXQgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gdGltZTtcbiAgICBjb25zb2xlLmxvZyhgTm9kZUpTIGJ1aWxkIGNvbXBsZXRlZCBpbiAke2Zvcm1hdFRpbWUoZHVyYXRpb24pfWApO1xufVxubWFpbigpLmNhdGNoKGNvbnNvbGUuZXJyb3IpLmZpbmFsbHkoKCkgPT4gcHJvY2Vzcy5leGl0KCkpOyJdfQ=//=
29
+ /* _JS_SOURCE_HASH = "f90af51dd8c3ad3f23ef4090178a331552cc3fc96ab7a839a5ac8972b37229fc"; */