obsidian-dev-utils 2.27.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/dist/lib/@types/compare-versions.d.ts +2 -2
- package/dist/lib/@types.cjs +11 -2
- package/dist/lib/Async.cjs +18 -7
- package/dist/lib/Async.d.ts +2 -2
- package/dist/lib/Blob.cjs +21 -6
- package/dist/lib/DocumentFragment.cjs +11 -2
- package/dist/lib/Error.cjs +20 -6
- package/dist/lib/Error.d.ts +7 -0
- package/dist/lib/Object.cjs +38 -5
- package/dist/lib/Object.d.ts +21 -0
- package/dist/lib/Path.cjs +14 -6
- package/dist/lib/Path.d.ts +1 -1
- package/dist/lib/RegExp.cjs +11 -2
- package/dist/lib/String.cjs +14 -4
- package/dist/lib/String.d.ts +4 -1
- package/dist/lib/ValueProvider.cjs +11 -2
- package/dist/lib/ValueProvider.d.ts +1 -1
- package/dist/lib/_dependencies.cjs +7734 -1266
- package/dist/lib/_dependencies.d.ts +4 -6
- package/dist/lib/index.cjs +14 -23
- package/dist/lib/index.d.ts +13 -19
- package/dist/lib/obsidian/App.cjs +13 -3
- package/dist/lib/obsidian/App.d.ts +1 -1
- package/dist/lib/obsidian/AttachmentPath.cjs +13 -4
- package/dist/lib/obsidian/AttachmentPath.d.ts +2 -2
- package/dist/lib/obsidian/Backlink.cjs +16 -6
- package/dist/lib/obsidian/Backlink.d.ts +7 -7
- package/dist/lib/obsidian/Callout.cjs +14 -4
- package/dist/lib/obsidian/Callout.d.ts +4 -4
- package/dist/lib/obsidian/Dataview.cjs +20 -9
- package/dist/lib/obsidian/Dataview.d.ts +22 -16
- package/dist/lib/obsidian/DataviewLink.cjs +12 -4
- package/dist/lib/obsidian/DataviewLink.d.ts +2 -2
- package/dist/lib/obsidian/FrontMatter.cjs +17 -7
- package/dist/lib/obsidian/FrontMatter.d.ts +31 -7
- package/dist/lib/obsidian/Link.cjs +19 -10
- package/dist/lib/obsidian/Link.d.ts +25 -13
- package/dist/lib/obsidian/MarkdownCodeBlockProcessor.cjs +14 -4
- package/dist/lib/obsidian/MarkdownCodeBlockProcessor.d.ts +1 -1
- package/dist/lib/obsidian/MetadataCache.cjs +16 -5
- package/dist/lib/obsidian/MetadataCache.d.ts +5 -5
- package/dist/lib/obsidian/Modal/Alert.cjs +14 -3
- package/dist/lib/obsidian/Modal/Alert.d.ts +1 -1
- package/dist/lib/obsidian/Modal/Prompt.cjs +14 -3
- package/dist/lib/obsidian/Modal/Prompt.d.ts +3 -3
- package/dist/lib/obsidian/Modal/SelectItem.cjs +11 -2
- package/dist/lib/obsidian/Modal/SelectItem.d.ts +4 -4
- package/dist/lib/obsidian/Modal/index.cjs +11 -2
- package/dist/lib/obsidian/Modal/index.d.ts +3 -3
- package/dist/lib/obsidian/ObsidianSettings.cjs +11 -2
- package/dist/lib/obsidian/ObsidianSettings.d.ts +1 -1
- package/dist/lib/obsidian/Plugin/ObsidianPluginRepoPaths.cjs +11 -2
- package/dist/lib/obsidian/Plugin/Plugin.cjs +11 -2
- package/dist/lib/obsidian/Plugin/Plugin.d.ts +1 -1
- package/dist/lib/obsidian/Plugin/PluginBase.cjs +37 -23
- package/dist/lib/obsidian/Plugin/PluginBase.d.ts +8 -9
- package/dist/lib/obsidian/Plugin/PluginSettings.cjs +11 -2
- package/dist/lib/obsidian/Plugin/PluginSettingsTabBase.cjs +11 -2
- package/dist/lib/obsidian/Plugin/PluginSettingsTabBase.d.ts +2 -2
- package/dist/lib/obsidian/Plugin/UIComponent.cjs +11 -2
- package/dist/lib/obsidian/Plugin/UIComponent.d.ts +2 -2
- package/dist/lib/obsidian/Plugin/index.cjs +11 -2
- package/dist/lib/obsidian/Plugin/index.d.ts +6 -6
- package/dist/lib/obsidian/ResourceUrl.cjs +11 -2
- package/dist/lib/obsidian/ResourceUrl.d.ts +1 -1
- package/dist/lib/obsidian/TAbstractFile.cjs +12 -3
- package/dist/lib/obsidian/TAbstractFile.d.ts +1 -1
- package/dist/lib/obsidian/TFile.cjs +11 -2
- package/dist/lib/obsidian/TFile.d.ts +1 -1
- package/dist/lib/obsidian/TFolder.cjs +11 -2
- package/dist/lib/obsidian/TFolder.d.ts +2 -1
- package/dist/lib/obsidian/Vault.cjs +23 -15
- package/dist/lib/obsidian/Vault.d.ts +21 -7
- package/dist/lib/obsidian/index.cjs +11 -2
- package/dist/lib/obsidian/index.d.ts +18 -18
- package/dist/lib/scripts/CliUtils.cjs +170 -0
- package/dist/lib/{cli.d.ts → scripts/CliUtils.d.ts} +1 -1
- package/dist/lib/scripts/CodeGenerator.cjs +56 -0
- package/dist/lib/{bin → scripts}/ESLint/@types/@guardian__eslint-plugin-tsdoc-required.d.ts +3 -2
- package/dist/lib/{bin → scripts}/ESLint/@types/eslint-plugin-modules-newlines.d.ts +3 -2
- package/dist/lib/{bin → scripts}/ESLint/@types/eslint-plugin-verify-tsdoc.d.ts +3 -2
- package/dist/lib/scripts/ESLint/ESLint.cjs +92 -0
- package/dist/lib/{bin → scripts}/ESLint/ESLint.d.ts +2 -2
- package/dist/lib/scripts/ESLint/eslint.config.cjs +170 -0
- package/dist/lib/scripts/ESLint/eslint.config.d.ts +16 -0
- package/dist/lib/scripts/ESLint/index.cjs +62 -0
- package/dist/lib/scripts/ESLint/index.d.ts +2 -0
- package/dist/lib/scripts/Fs.cjs +98 -0
- package/dist/lib/{Fs.d.ts → scripts/Fs.d.ts} +3 -3
- package/dist/lib/scripts/JSON.cjs +71 -0
- package/dist/lib/{JSON.d.ts → scripts/JSON.d.ts} +3 -24
- package/dist/lib/scripts/NodeModules.cjs +87 -0
- package/dist/lib/scripts/NodeModules.d.ts +9 -0
- package/dist/lib/scripts/Npm.cjs +97 -0
- package/dist/lib/{Npm.d.ts → scripts/Npm.d.ts} +3 -3
- package/dist/lib/scripts/ObsidianDevUtilsRepoPaths.cjs +76 -0
- package/dist/lib/{bin → scripts}/ObsidianDevUtilsRepoPaths.d.ts +4 -0
- package/dist/lib/scripts/Root.cjs +142 -0
- package/dist/lib/{Root.d.ts → scripts/Root.d.ts} +4 -4
- package/dist/lib/scripts/build.cjs +67 -0
- package/dist/lib/scripts/cli.cjs +80 -0
- package/dist/lib/scripts/esbuild/Dependency.cjs +135 -0
- package/dist/lib/scripts/esbuild/ObsidianPluginBuilder.cjs +167 -0
- package/dist/lib/{bin → scripts}/esbuild/ObsidianPluginBuilder.d.ts +5 -5
- package/dist/lib/scripts/esbuild/copyToObsidianPluginsFolderPlugin.cjs +67 -0
- package/dist/lib/{bin → scripts}/esbuild/copyToObsidianPluginsFolderPlugin.d.ts +1 -1
- package/dist/lib/scripts/esbuild/fixSourceMapsPlugin.cjs +83 -0
- package/dist/lib/{bin → scripts}/esbuild/fixSourceMapsPlugin.d.ts +1 -1
- package/dist/lib/{bin → scripts}/esbuild/index.cjs +11 -2
- package/dist/lib/scripts/esbuild/index.d.ts +7 -0
- package/dist/lib/scripts/esbuild/lintPlugin.cjs +64 -0
- package/dist/lib/{bin → scripts}/esbuild/lintPlugin.d.ts +1 -1
- package/dist/lib/scripts/esbuild/preprocessPlugin.cjs +95 -0
- package/dist/lib/{bin → scripts}/esbuild/preprocessPlugin.d.ts +1 -1
- package/dist/lib/scripts/esbuild/renameToCjsPlugin.cjs +85 -0
- package/dist/lib/{bin → scripts}/esbuild/renameToCjsPlugin.d.ts +1 -1
- package/dist/lib/scripts/index.cjs +98 -0
- package/dist/lib/scripts/index.d.ts +14 -0
- package/dist/lib/scripts/spellcheck.cjs +67 -0
- package/dist/lib/{bin → scripts}/spellcheck.d.ts +1 -1
- package/dist/lib/scripts/version.cjs +349 -0
- package/dist/lib/{bin → scripts}/version.d.ts +7 -8
- package/dist/lib/url.cjs +11 -2
- package/package.json +136 -131
- package/dist/lib/CodeGenerator.cjs +0 -47
- package/dist/lib/Fs.cjs +0 -89
- package/dist/lib/JSON.cjs +0 -85
- package/dist/lib/Npm.cjs +0 -88
- package/dist/lib/Root.cjs +0 -145
- package/dist/lib/bin/ESLint/@types/@stylistic__eslint-plugin.d.ts +0 -10
- package/dist/lib/bin/ESLint/@types/@typescript-eslint__eslint-plugin.d.ts +0 -21
- package/dist/lib/bin/ESLint/@types/@typescript-eslint__parser.d.ts +0 -10
- package/dist/lib/bin/ESLint/@types/eslint-plugin-deprecation.d.ts +0 -11
- package/dist/lib/bin/ESLint/@types/eslint-plugin-import.d.ts +0 -10
- package/dist/lib/bin/ESLint/@types/globals.d.ts +0 -16
- package/dist/lib/bin/ESLint/ESLint.cjs +0 -84
- package/dist/lib/bin/ESLint/eslint.config.cjs +0 -114
- package/dist/lib/bin/ESLint/eslint.config.d.ts +0 -20
- package/dist/lib/bin/ESLint/index.cjs +0 -53
- package/dist/lib/bin/ESLint/index.d.ts +0 -2
- package/dist/lib/bin/ObsidianDevUtilsRepoPaths.cjs +0 -66
- package/dist/lib/bin/build.cjs +0 -58
- package/dist/lib/bin/cli.cjs +0 -81
- package/dist/lib/bin/esbuild/Dependency.cjs +0 -125
- package/dist/lib/bin/esbuild/ObsidianPluginBuilder.cjs +0 -160
- package/dist/lib/bin/esbuild/copyToObsidianPluginsFolderPlugin.cjs +0 -59
- package/dist/lib/bin/esbuild/fixSourceMapsPlugin.cjs +0 -74
- package/dist/lib/bin/esbuild/index.d.ts +0 -7
- package/dist/lib/bin/esbuild/lintPlugin.cjs +0 -55
- package/dist/lib/bin/esbuild/preprocessPlugin.cjs +0 -89
- package/dist/lib/bin/esbuild/renameToCjsPlugin.cjs +0 -75
- package/dist/lib/bin/index.cjs +0 -68
- package/dist/lib/bin/index.d.ts +0 -7
- package/dist/lib/bin/spellcheck.cjs +0 -58
- package/dist/lib/bin/version.cjs +0 -352
- package/dist/lib/cli.cjs +0 -170
- /package/dist/lib/{CodeGenerator.d.ts → scripts/CodeGenerator.d.ts} +0 -0
- /package/dist/lib/{bin → scripts}/build.d.ts +0 -0
- /package/dist/lib/{bin → scripts}/cli.d.ts +0 -0
- /package/dist/lib/{bin → scripts}/esbuild/Dependency.d.ts +0 -0
package/dist/lib/bin/index.cjs
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
3
|
-
if you want to view the source, please visit the github repository of this plugin
|
4
|
-
*/
|
5
|
-
|
6
|
-
"use strict";
|
7
|
-
var __create = Object.create;
|
8
|
-
var __defProp = Object.defineProperty;
|
9
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
10
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
11
|
-
var __getProtoOf = Object.getPrototypeOf;
|
12
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
13
|
-
var __export = (target, all) => {
|
14
|
-
for (var name in all)
|
15
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
16
|
-
};
|
17
|
-
var __copyProps = (to, from, except, desc) => {
|
18
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
19
|
-
for (let key of __getOwnPropNames(from))
|
20
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
21
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
22
|
-
}
|
23
|
-
return to;
|
24
|
-
};
|
25
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
26
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
27
|
-
// file that has been converted to a CommonJS file using a Babel-
|
28
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
29
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
30
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
31
|
-
mod
|
32
|
-
));
|
33
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
34
|
-
var bin_exports = {};
|
35
|
-
__export(bin_exports, {
|
36
|
-
ESLint: () => ESLint,
|
37
|
-
ObsidianDevUtilsRepoPaths: () => ObsidianDevUtilsRepoPaths,
|
38
|
-
build: () => build,
|
39
|
-
cli: () => cli,
|
40
|
-
esbuild: () => esbuild,
|
41
|
-
spellcheck: () => spellcheck,
|
42
|
-
version: () => version
|
43
|
-
});
|
44
|
-
module.exports = __toCommonJS(bin_exports);
|
45
|
-
var build = __toESM(require("./build.cjs"), 1);
|
46
|
-
var cli = __toESM(require("./cli.cjs"), 1);
|
47
|
-
var esbuild = __toESM(require("./esbuild/index.cjs"), 1);
|
48
|
-
var ESLint = __toESM(require("./ESLint/index.cjs"), 1);
|
49
|
-
var ObsidianDevUtilsRepoPaths = __toESM(require("./ObsidianDevUtilsRepoPaths.cjs"), 1);
|
50
|
-
var spellcheck = __toESM(require("./spellcheck.cjs"), 1);
|
51
|
-
var version = __toESM(require("./version.cjs"), 1);
|
52
|
-
var __import_meta_url = globalThis["import.meta.url"] ?? (() => require("node:url").pathToFileURL(__filename))();
|
53
|
-
var __process = globalThis["process"] ?? {
|
54
|
-
"cwd": () => "/",
|
55
|
-
"env": {},
|
56
|
-
"platform": "android"
|
57
|
-
};
|
58
|
-
// Annotate the CommonJS export names for ESM import in node:
|
59
|
-
0 && (module.exports = {
|
60
|
-
ESLint,
|
61
|
-
ObsidianDevUtilsRepoPaths,
|
62
|
-
build,
|
63
|
-
cli,
|
64
|
-
esbuild,
|
65
|
-
spellcheck,
|
66
|
-
version
|
67
|
-
});
|
68
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Jpbi9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1tcImltcG9ydC5tZXRhLnVybFwiXSA/PyAoKCk9PnJlcXVpcmUoXCJub2RlOnVybFwiKS5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpKSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbXCJwcm9jZXNzXCJdID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyBidWlsZCBmcm9tIFwiLi9idWlsZC50c1wiO1xuZXhwb3J0ICogYXMgY2xpIGZyb20gXCIuL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZXNidWlsZCBmcm9tIFwiLi9lc2J1aWxkL2luZGV4LnRzXCI7XG5leHBvcnQgKiBhcyBFU0xpbnQgZnJvbSBcIi4vRVNMaW50L2luZGV4LnRzXCI7XG5leHBvcnQgKiBhcyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIGZyb20gXCIuL09ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMudHNcIjtcbmV4cG9ydCAqIGFzIHNwZWxsY2hlY2sgZnJvbSBcIi4vc3BlbGxjaGVjay50c1wiO1xuZXhwb3J0ICogYXMgdmVyc2lvbiBmcm9tIFwiLi92ZXJzaW9uLnRzXCI7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsWUFBdUI7QUFDdkIsVUFBcUI7QUFDckIsY0FBeUI7QUFDekIsYUFBd0I7QUFDeEIsZ0NBQTJDO0FBQzNDLGlCQUE0QjtBQUM1QixjQUF5QjtBQWR6QixJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUksUUFBUSxVQUFVLEVBQUUsY0FBYyxVQUFVLEdBQUc7QUFDN0csSUFBSSxZQUFZLFdBQVcsU0FBUyxLQUFLO0FBQUEsRUFDdkMsT0FBTyxNQUFJO0FBQUEsRUFDWCxPQUFPLENBQUM7QUFBQSxFQUNSLFlBQVk7QUFDZDsiLAogICJuYW1lcyI6IFtdCn0K
|
package/dist/lib/bin/index.d.ts
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
export * as build from "./build.ts";
|
2
|
-
export * as cli from "./cli.ts";
|
3
|
-
export * as esbuild from "./esbuild/index.ts";
|
4
|
-
export * as ESLint from "./ESLint/index.ts";
|
5
|
-
export * as ObsidianDevUtilsRepoPaths from "./ObsidianDevUtilsRepoPaths.ts";
|
6
|
-
export * as spellcheck from "./spellcheck.ts";
|
7
|
-
export * as version from "./version.ts";
|
@@ -1,58 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
3
|
-
if you want to view the source, please visit the github repository of this plugin
|
4
|
-
*/
|
5
|
-
|
6
|
-
"use strict";
|
7
|
-
var __defProp = Object.defineProperty;
|
8
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
9
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
10
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
11
|
-
var __export = (target, all) => {
|
12
|
-
for (var name in all)
|
13
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
14
|
-
};
|
15
|
-
var __copyProps = (to, from, except, desc) => {
|
16
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
17
|
-
for (let key of __getOwnPropNames(from))
|
18
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
19
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
20
|
-
}
|
21
|
-
return to;
|
22
|
-
};
|
23
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
24
|
-
var spellcheck_exports = {};
|
25
|
-
__export(spellcheck_exports, {
|
26
|
-
spellcheck: () => spellcheck
|
27
|
-
});
|
28
|
-
module.exports = __toCommonJS(spellcheck_exports);
|
29
|
-
var import_cspell = require("./../_dependencies.cjs").cspell.default ?? require("./../_dependencies.cjs").cspell;
|
30
|
-
var import_Root = require("../Root.cjs");
|
31
|
-
var import_node_url = require("node:url");
|
32
|
-
var import_cli = require("../cli.cjs");
|
33
|
-
var __import_meta_url = globalThis["import.meta.url"] ?? (() => require("node:url").pathToFileURL(__filename))();
|
34
|
-
var __process = globalThis["process"] ?? {
|
35
|
-
"cwd": () => "/",
|
36
|
-
"env": {},
|
37
|
-
"platform": "android"
|
38
|
-
};
|
39
|
-
async function spellcheck() {
|
40
|
-
let isSuccess = true;
|
41
|
-
await (0, import_cspell.lint)(["."], {}, {
|
42
|
-
issue: (issue) => {
|
43
|
-
if (!issue.uri) {
|
44
|
-
return;
|
45
|
-
}
|
46
|
-
const path = (0, import_node_url.fileURLToPath)(issue.uri);
|
47
|
-
const relativePath = (0, import_Root.toRelativeFromRoot)(path);
|
48
|
-
console.log(`${relativePath}:${issue.row}:${issue.col} - ${issue.text}`);
|
49
|
-
isSuccess = false;
|
50
|
-
}
|
51
|
-
});
|
52
|
-
return import_cli.CliTaskResult.Success(isSuccess);
|
53
|
-
}
|
54
|
-
// Annotate the CommonJS export names for ESM import in node:
|
55
|
-
0 && (module.exports = {
|
56
|
-
spellcheck
|
57
|
-
});
|
58
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Jpbi9zcGVsbGNoZWNrLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzW1wiaW1wb3J0Lm1ldGEudXJsXCJdID8/ICgoKT0+cmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkpKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1tcInByb2Nlc3NcIl0gPz8ge1xuICBcImN3ZFwiOiAoKT0+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb24gc3BlbGxjaGVja1xuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmdW5jdGlvbiBmb3IgcnVubmluZyBhIHNwZWxsY2hlY2sgb24gdGhlIGNvZGViYXNlIHVzaW5nIHRoZSBgY3NwZWxsYCBsaWJyYXJ5LlxuICogSXQgcmVwb3J0cyBhbnkgc3BlbGxpbmcgaXNzdWVzIGZvdW5kIGluIHRoZSBjb2RlIGFuZCByZXR1cm5zIGEgYFRhc2tSZXN1bHRgIGluZGljYXRpbmcgd2hldGhlciB0aGUgc3BlbGxjaGVjayB3YXMgc3VjY2Vzc2Z1bC5cbiAqL1xuXG5pbXBvcnQgeyBsaW50IH0gZnJvbSBcImNzcGVsbFwiO1xuaW1wb3J0IHsgdG9SZWxhdGl2ZUZyb21Sb290IH0gZnJvbSBcIi4uL1Jvb3QudHNcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB7IENsaVRhc2tSZXN1bHQgfSBmcm9tIFwiLi4vY2xpLnRzXCI7XG5cbi8qKlxuICogUnVucyBhIHNwZWxsY2hlY2sgb24gdGhlIGVudGlyZSBjb2RlYmFzZSB1c2luZyBgY3NwZWxsYC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gY2hlY2tzIGFsbCBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGl0cyBzdWJkaXJlY3RvcmllcyBmb3Igc3BlbGxpbmcgaXNzdWVzLlxuICogSWYgaXNzdWVzIGFyZSBmb3VuZCwgdGhleSBhcmUgbG9nZ2VkIHRvIHRoZSBjb25zb2xlIHdpdGggdGhlaXIgZmlsZSBwYXRoLCBsaW5lLCBhbmQgY29sdW1uIG51bWJlci5cbiAqXG4gKiBAcmV0dXJucyBBIGBQcm9taXNlYCB0aGF0IHJlc29sdmVzIHRvIGEgYFRhc2tSZXN1bHRgLCBpbmRpY2F0aW5nIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIHNwZWxsY2hlY2suXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzcGVsbGNoZWNrKCk6IFByb21pc2U8Q2xpVGFza1Jlc3VsdD4ge1xuICBsZXQgaXNTdWNjZXNzID0gdHJ1ZTtcblxuICBhd2FpdCBsaW50KFtcIi5cIl0sIHt9LCB7XG4gICAgaXNzdWU6IChpc3N1ZSkgPT4ge1xuICAgICAgaWYgKCFpc3N1ZS51cmkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXRoID0gZmlsZVVSTFRvUGF0aChpc3N1ZS51cmkpO1xuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gdG9SZWxhdGl2ZUZyb21Sb290KHBhdGgpO1xuICAgICAgY29uc29sZS5sb2coYCR7cmVsYXRpdmVQYXRofToke2lzc3VlLnJvd306JHtpc3N1ZS5jb2x9IC0gJHtpc3N1ZS50ZXh0fWApO1xuICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gQ2xpVGFza1Jlc3VsdC5TdWNjZXNzKGlzU3VjY2Vzcyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZQSxvQkFBcUI7QUFDckIsa0JBQW1DO0FBQ25DLHNCQUE4QjtBQUM5QixpQkFBOEI7QUFmOUIsSUFBSSxvQkFBb0IsV0FBVyxpQkFBaUIsTUFBTSxNQUFJLFFBQVEsVUFBVSxFQUFFLGNBQWMsVUFBVSxHQUFHO0FBQzdHLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7QUFvQkEsZUFBc0IsYUFBcUM7QUFDekQsTUFBSSxZQUFZO0FBRWhCLFlBQU0sb0JBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHO0FBQUEsSUFDcEIsT0FBTyxDQUFDLFVBQVU7QUFDaEIsVUFBSSxDQUFDLE1BQU0sS0FBSztBQUNkO0FBQUEsTUFDRjtBQUVBLFlBQU0sV0FBTywrQkFBYyxNQUFNLEdBQUc7QUFDcEMsWUFBTSxtQkFBZSxnQ0FBbUIsSUFBSTtBQUM1QyxjQUFRLElBQUksR0FBRyxZQUFZLElBQUksTUFBTSxHQUFHLElBQUksTUFBTSxHQUFHLE1BQU0sTUFBTSxJQUFJLEVBQUU7QUFDdkUsa0JBQVk7QUFBQSxJQUNkO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FBTyx5QkFBYyxRQUFRLFNBQVM7QUFDeEM7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/dist/lib/bin/version.cjs
DELETED
@@ -1,352 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
3
|
-
if you want to view the source, please visit the github repository of this plugin
|
4
|
-
*/
|
5
|
-
|
6
|
-
"use strict";
|
7
|
-
var __create = Object.create;
|
8
|
-
var __defProp = Object.defineProperty;
|
9
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
10
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
11
|
-
var __getProtoOf = Object.getPrototypeOf;
|
12
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
13
|
-
var __export = (target, all) => {
|
14
|
-
for (var name in all)
|
15
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
16
|
-
};
|
17
|
-
var __copyProps = (to, from, except, desc) => {
|
18
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
19
|
-
for (let key of __getOwnPropNames(from))
|
20
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
21
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
22
|
-
}
|
23
|
-
return to;
|
24
|
-
};
|
25
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
26
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
27
|
-
// file that has been converted to a CommonJS file using a Babel-
|
28
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
29
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
30
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
31
|
-
mod
|
32
|
-
));
|
33
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
34
|
-
var version_exports = {};
|
35
|
-
__export(version_exports, {
|
36
|
-
VersionUpdateType: () => VersionUpdateType,
|
37
|
-
addGitTag: () => addGitTag,
|
38
|
-
addUpdatedFilesToGit: () => addUpdatedFilesToGit,
|
39
|
-
checkGitHubCliInstalled: () => checkGitHubCliInstalled,
|
40
|
-
checkGitInstalled: () => checkGitInstalled,
|
41
|
-
checkGitRepoClean: () => checkGitRepoClean,
|
42
|
-
copyUpdatedManifest: () => copyUpdatedManifest,
|
43
|
-
getNewVersion: () => getNewVersion,
|
44
|
-
getReleaseNotes: () => getReleaseNotes,
|
45
|
-
getVersionUpdateType: () => getVersionUpdateType,
|
46
|
-
gitPush: () => gitPush,
|
47
|
-
publishGitHubRelease: () => publishGitHubRelease,
|
48
|
-
updateChangelog: () => updateChangelog,
|
49
|
-
updateVersion: () => updateVersion,
|
50
|
-
updateVersionInFiles: () => updateVersionInFiles,
|
51
|
-
validate: () => validate
|
52
|
-
});
|
53
|
-
module.exports = __toCommonJS(version_exports);
|
54
|
-
var import_cli = require("../cli.cjs");
|
55
|
-
var import_Root = require("../Root.cjs");
|
56
|
-
var import_spellcheck = require("./spellcheck.cjs");
|
57
|
-
var import_ESLint = require("./ESLint/ESLint.cjs");
|
58
|
-
var import_Npm = require("../Npm.cjs");
|
59
|
-
var import_JSON = require("../JSON.cjs");
|
60
|
-
var import_node_fs = require("node:fs");
|
61
|
-
var import_promises = require("node:fs/promises");
|
62
|
-
var import_promises2 = require("node:readline/promises");
|
63
|
-
var import_Fs = require("../Fs.cjs");
|
64
|
-
var import_Path = require("../Path.cjs");
|
65
|
-
var import_ObsidianPluginRepoPaths = require("../obsidian/Plugin/ObsidianPluginRepoPaths.cjs");
|
66
|
-
var import_ObsidianDevUtilsRepoPaths = require("./ObsidianDevUtilsRepoPaths.cjs");
|
67
|
-
var import_adm_zip = __toESM(require("adm-zip"), 1);
|
68
|
-
var __import_meta_url = globalThis["import.meta.url"] ?? (() => require("node:url").pathToFileURL(__filename))();
|
69
|
-
var __process = globalThis["process"] ?? {
|
70
|
-
"cwd": () => "/",
|
71
|
-
"env": {},
|
72
|
-
"platform": "android"
|
73
|
-
};
|
74
|
-
var VersionUpdateType = /* @__PURE__ */ ((VersionUpdateType2) => {
|
75
|
-
VersionUpdateType2["Major"] = "major";
|
76
|
-
VersionUpdateType2["Minor"] = "minor";
|
77
|
-
VersionUpdateType2["Patch"] = "patch";
|
78
|
-
VersionUpdateType2["Beta"] = "beta";
|
79
|
-
VersionUpdateType2["Manual"] = "manual";
|
80
|
-
VersionUpdateType2["Invalid"] = "invalid";
|
81
|
-
return VersionUpdateType2;
|
82
|
-
})(VersionUpdateType || {});
|
83
|
-
async function updateVersion(versionUpdateType) {
|
84
|
-
if (!versionUpdateType) {
|
85
|
-
const npmOldVersion = __process.env["npm_old_version"];
|
86
|
-
const npmNewVersion = __process.env["npm_new_version"];
|
87
|
-
if (npmOldVersion && npmNewVersion) {
|
88
|
-
await updateVersionInFiles(npmOldVersion, false);
|
89
|
-
return updateVersion(npmNewVersion);
|
90
|
-
}
|
91
|
-
}
|
92
|
-
const isObsidianPlugin = (0, import_node_fs.existsSync)((0, import_Root.resolvePathFromRoot)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ManifestJson));
|
93
|
-
return await import_cli.CliTaskResult.chain([
|
94
|
-
async () => {
|
95
|
-
validate(versionUpdateType);
|
96
|
-
await checkGitInstalled();
|
97
|
-
await checkGitRepoClean();
|
98
|
-
await checkGitHubCliInstalled();
|
99
|
-
},
|
100
|
-
() => (0, import_spellcheck.spellcheck)(),
|
101
|
-
async () => {
|
102
|
-
await (0, import_Root.execFromRoot)("npm run build");
|
103
|
-
},
|
104
|
-
() => (0, import_ESLint.lint)(),
|
105
|
-
async () => {
|
106
|
-
const newVersion = await getNewVersion(versionUpdateType);
|
107
|
-
await updateVersionInFiles(newVersion, isObsidianPlugin);
|
108
|
-
await updateChangelog(newVersion);
|
109
|
-
await addUpdatedFilesToGit(newVersion);
|
110
|
-
await addGitTag(newVersion);
|
111
|
-
await gitPush();
|
112
|
-
if (isObsidianPlugin) {
|
113
|
-
await copyUpdatedManifest();
|
114
|
-
}
|
115
|
-
await publishGitHubRelease(newVersion, isObsidianPlugin);
|
116
|
-
}
|
117
|
-
]);
|
118
|
-
}
|
119
|
-
function validate(versionUpdateType) {
|
120
|
-
if (getVersionUpdateType(versionUpdateType) === "invalid" /* Invalid */) {
|
121
|
-
throw new Error("Invalid version update type. Please use 'major', 'minor', 'patch', or 'x.y.z[-suffix]' format.");
|
122
|
-
}
|
123
|
-
}
|
124
|
-
async function checkGitInstalled() {
|
125
|
-
try {
|
126
|
-
await (0, import_Root.execFromRoot)("git --version", { quiet: true });
|
127
|
-
} catch {
|
128
|
-
throw new Error("Git is not installed. Please install it from https://git-scm.com/");
|
129
|
-
}
|
130
|
-
}
|
131
|
-
async function checkGitHubCliInstalled() {
|
132
|
-
try {
|
133
|
-
await (0, import_Root.execFromRoot)("gh --version", { quiet: true });
|
134
|
-
} catch {
|
135
|
-
throw new Error("GitHub CLI is not installed. Please install it from https://cli.github.com/");
|
136
|
-
}
|
137
|
-
}
|
138
|
-
async function checkGitRepoClean() {
|
139
|
-
try {
|
140
|
-
const stdout = await (0, import_Root.execFromRoot)("git status --porcelain --untracked-files=all", { quiet: true });
|
141
|
-
if (stdout) {
|
142
|
-
throw new Error();
|
143
|
-
}
|
144
|
-
} catch {
|
145
|
-
throw new Error("Git repository is not clean. Please commit or stash your changes before releasing a new version.");
|
146
|
-
}
|
147
|
-
}
|
148
|
-
function getVersionUpdateType(versionUpdateType) {
|
149
|
-
const versionUpdateTypeEnum = versionUpdateType;
|
150
|
-
switch (versionUpdateTypeEnum) {
|
151
|
-
case "major" /* Major */:
|
152
|
-
case "minor" /* Minor */:
|
153
|
-
case "patch" /* Patch */:
|
154
|
-
case "beta" /* Beta */:
|
155
|
-
return versionUpdateTypeEnum;
|
156
|
-
default:
|
157
|
-
if (/^\d+\.\d+\.\d+(-[\w\d.-]+)?$/.test(versionUpdateType)) {
|
158
|
-
return "manual" /* Manual */;
|
159
|
-
}
|
160
|
-
return "invalid" /* Invalid */;
|
161
|
-
}
|
162
|
-
}
|
163
|
-
async function updateVersionInFiles(newVersion, isObsidianPlugin) {
|
164
|
-
await (0, import_Npm.editNpmPackage)((npmPackage) => {
|
165
|
-
npmPackage.version = newVersion;
|
166
|
-
});
|
167
|
-
await (0, import_Npm.editNpmPackageLock)((npmPackageLock) => {
|
168
|
-
npmPackageLock.version = newVersion;
|
169
|
-
const defaultPackage = npmPackageLock.packages?.[""];
|
170
|
-
if (defaultPackage) {
|
171
|
-
defaultPackage.version = newVersion;
|
172
|
-
}
|
173
|
-
}, { skipIfMissing: true });
|
174
|
-
if (isObsidianPlugin) {
|
175
|
-
const latestObsidianVersion = await getLatestObsidianVersion();
|
176
|
-
await (0, import_JSON.editJson)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ManifestJson, (manifest) => {
|
177
|
-
manifest.minAppVersion = latestObsidianVersion;
|
178
|
-
manifest.version = newVersion;
|
179
|
-
});
|
180
|
-
await (0, import_JSON.editJson)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.VersionsJson, (versions) => {
|
181
|
-
versions[newVersion] = latestObsidianVersion;
|
182
|
-
});
|
183
|
-
}
|
184
|
-
}
|
185
|
-
async function getNewVersion(versionUpdateType) {
|
186
|
-
const versionType = getVersionUpdateType(versionUpdateType);
|
187
|
-
if (versionType === "manual" /* Manual */) {
|
188
|
-
return versionUpdateType;
|
189
|
-
}
|
190
|
-
const npmPackage = await (0, import_Npm.readNpmPackage)();
|
191
|
-
const currentVersion = npmPackage.version;
|
192
|
-
const match = currentVersion.match(/^(\d+)\.(\d+)\.(\d+)(-beta.(\d+))?/);
|
193
|
-
if (!match) {
|
194
|
-
throw new Error(`Invalid current version format: ${currentVersion}`);
|
195
|
-
}
|
196
|
-
let major = Number(match[1]);
|
197
|
-
let minor = Number(match[2]);
|
198
|
-
let patch = Number(match[3]);
|
199
|
-
let beta = match[5] ? Number(match[5]) : 0;
|
200
|
-
switch (versionType) {
|
201
|
-
case "major" /* Major */:
|
202
|
-
major++;
|
203
|
-
minor = 0;
|
204
|
-
patch = 0;
|
205
|
-
beta = 0;
|
206
|
-
break;
|
207
|
-
case "minor" /* Minor */:
|
208
|
-
minor++;
|
209
|
-
patch = 0;
|
210
|
-
beta = 0;
|
211
|
-
break;
|
212
|
-
case "patch" /* Patch */:
|
213
|
-
patch++;
|
214
|
-
beta = 0;
|
215
|
-
break;
|
216
|
-
case "beta" /* Beta */:
|
217
|
-
beta++;
|
218
|
-
break;
|
219
|
-
}
|
220
|
-
return `${major}.${minor}.${patch}${beta > 0 ? `-beta.${beta}` : ""}`;
|
221
|
-
}
|
222
|
-
async function getLatestObsidianVersion() {
|
223
|
-
const response = await fetch("https://api.github.com/repos/obsidianmd/obsidian-releases/releases/latest");
|
224
|
-
const obsidianReleasesJson = await response.json();
|
225
|
-
return obsidianReleasesJson.name;
|
226
|
-
}
|
227
|
-
async function updateChangelog(newVersion) {
|
228
|
-
const changelogPath = (0, import_Root.resolvePathFromRoot)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ChangelogMd);
|
229
|
-
let previousChangelogLines;
|
230
|
-
if (!(0, import_node_fs.existsSync)(changelogPath)) {
|
231
|
-
previousChangelogLines = [];
|
232
|
-
} else {
|
233
|
-
const content = await (0, import_promises.readFile)(changelogPath, "utf-8");
|
234
|
-
previousChangelogLines = content.split("\n").slice(2);
|
235
|
-
if (previousChangelogLines.at(-1) === "") {
|
236
|
-
previousChangelogLines.pop();
|
237
|
-
}
|
238
|
-
}
|
239
|
-
const lastTag = previousChangelogLines[0]?.replace("## ", "");
|
240
|
-
const commitRange = lastTag ? `${lastTag}..HEAD` : "HEAD";
|
241
|
-
const commitMessages = (await (0, import_Root.execFromRoot)(`git log ${commitRange} --format=%s --first-parent`, { quiet: true })).split(/\r?\n/);
|
242
|
-
let newChangeLog = `# CHANGELOG
|
243
|
-
|
244
|
-
## ${newVersion}
|
245
|
-
|
246
|
-
`;
|
247
|
-
for (const message of commitMessages) {
|
248
|
-
newChangeLog += `- ${message}
|
249
|
-
`;
|
250
|
-
}
|
251
|
-
if (previousChangelogLines.length > 0) {
|
252
|
-
newChangeLog += "\n";
|
253
|
-
for (const line of previousChangelogLines) {
|
254
|
-
newChangeLog += `${line}
|
255
|
-
`;
|
256
|
-
}
|
257
|
-
}
|
258
|
-
await (0, import_promises.writeFile)(changelogPath, newChangeLog, "utf-8");
|
259
|
-
await (0, import_promises2.createInterface)(__process.stdin, __process.stdout).question(`Please update the ${import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ChangelogMd} file. Press Enter when you are done...`);
|
260
|
-
}
|
261
|
-
async function addUpdatedFilesToGit(newVersion) {
|
262
|
-
const files = [
|
263
|
-
import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ManifestJson,
|
264
|
-
import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.PackageJson,
|
265
|
-
import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.PackageLockJson,
|
266
|
-
import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.VersionsJson,
|
267
|
-
import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ChangelogMd
|
268
|
-
].filter((file) => (0, import_node_fs.existsSync)((0, import_Root.resolvePathFromRoot)(file)));
|
269
|
-
await (0, import_Root.execFromRoot)(["git", "add", ...files], { quiet: true });
|
270
|
-
await (0, import_Root.execFromRoot)(`git commit -m ${newVersion}`, { quiet: true });
|
271
|
-
}
|
272
|
-
async function addGitTag(newVersion) {
|
273
|
-
await (0, import_Root.execFromRoot)(`git tag -a ${newVersion} -m ${newVersion}`, { quiet: true });
|
274
|
-
}
|
275
|
-
async function gitPush() {
|
276
|
-
await (0, import_Root.execFromRoot)("git push --follow-tags", { quiet: true });
|
277
|
-
}
|
278
|
-
async function copyUpdatedManifest() {
|
279
|
-
await (0, import_promises.cp)((0, import_Root.resolvePathFromRoot)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ManifestJson), (0, import_Root.resolvePathFromRoot)((0, import_Path.join)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.DistBuild, import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ManifestJson)), { force: true });
|
280
|
-
}
|
281
|
-
async function getReleaseNotes(newVersion) {
|
282
|
-
const changelogPath = (0, import_Root.resolvePathFromRoot)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ChangelogMd);
|
283
|
-
const content = await (0, import_promises.readFile)(changelogPath, "utf-8");
|
284
|
-
const newVersionEscaped = newVersion.replaceAll(".", "\\.");
|
285
|
-
const match = content.match(new RegExp(`
|
286
|
-
## ${newVersionEscaped}
|
287
|
-
|
288
|
-
((.|
|
289
|
-
)+?)
|
290
|
-
|
291
|
-
##`));
|
292
|
-
let releaseNotes = match ? match[1] + "\n\n" : "";
|
293
|
-
const tags = (await (0, import_Root.execFromRoot)("git tag --sort=-creatordate", { quiet: true })).split(/\r?\n/);
|
294
|
-
const previousVersion = tags[1];
|
295
|
-
let changesUrl = "";
|
296
|
-
const repoUrl = await (0, import_Root.execFromRoot)("gh repo view --json url -q .url", { quiet: true });
|
297
|
-
if (previousVersion) {
|
298
|
-
changesUrl = `${repoUrl}/compare/${previousVersion}...${newVersion}`;
|
299
|
-
} else {
|
300
|
-
changesUrl = `${repoUrl}/commits/${newVersion}`;
|
301
|
-
}
|
302
|
-
releaseNotes += `**Full Changelog**: ${changesUrl}`;
|
303
|
-
return releaseNotes;
|
304
|
-
}
|
305
|
-
async function publishGitHubRelease(newVersion, isObsidianPlugin) {
|
306
|
-
let filePaths;
|
307
|
-
if (isObsidianPlugin) {
|
308
|
-
const buildDir = (0, import_Root.resolvePathFromRoot)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.DistBuild);
|
309
|
-
const fileNames = await (0, import_Fs.readdirPosix)(buildDir);
|
310
|
-
filePaths = fileNames.map((fileName) => (0, import_Path.join)(buildDir, fileName));
|
311
|
-
} else {
|
312
|
-
const zip = new import_adm_zip.default();
|
313
|
-
zip.addLocalFolder((0, import_Root.resolvePathFromRoot)(import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.Dist), import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.Dist, (filename) => !filename.endsWith(".zip"));
|
314
|
-
const files = [
|
315
|
-
import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.ChangelogMd,
|
316
|
-
import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.License,
|
317
|
-
import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.ReadmeMd,
|
318
|
-
import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.PackageJson
|
319
|
-
];
|
320
|
-
for (const file of files) {
|
321
|
-
zip.addLocalFile((0, import_Root.resolvePathFromRoot)(file));
|
322
|
-
}
|
323
|
-
const npmPackage = await (0, import_Npm.readNpmPackage)();
|
324
|
-
const distZipPath = (0, import_Root.resolvePathFromRoot)((0, import_Path.join)(import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.Dist, `${npmPackage.name}-${newVersion}.zip`));
|
325
|
-
zip.writeZip(distZipPath);
|
326
|
-
filePaths = [distZipPath];
|
327
|
-
}
|
328
|
-
await (0, import_Root.execFromRoot)(["gh", "release", "create", newVersion, ...filePaths, "--title", `v${newVersion}`, "--notes-file", "-"], {
|
329
|
-
quiet: true,
|
330
|
-
stdin: await getReleaseNotes(newVersion)
|
331
|
-
});
|
332
|
-
}
|
333
|
-
// Annotate the CommonJS export names for ESM import in node:
|
334
|
-
0 && (module.exports = {
|
335
|
-
VersionUpdateType,
|
336
|
-
addGitTag,
|
337
|
-
addUpdatedFilesToGit,
|
338
|
-
checkGitHubCliInstalled,
|
339
|
-
checkGitInstalled,
|
340
|
-
checkGitRepoClean,
|
341
|
-
copyUpdatedManifest,
|
342
|
-
getNewVersion,
|
343
|
-
getReleaseNotes,
|
344
|
-
getVersionUpdateType,
|
345
|
-
gitPush,
|
346
|
-
publishGitHubRelease,
|
347
|
-
updateChangelog,
|
348
|
-
updateVersion,
|
349
|
-
updateVersionInFiles,
|
350
|
-
validate
|
351
|
-
});
|
352
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Jpbi92ZXJzaW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzW1wiaW1wb3J0Lm1ldGEudXJsXCJdID8/ICgoKT0+cmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkpKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1tcInByb2Nlc3NcIl0gPz8ge1xuICBcImN3ZFwiOiAoKT0+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb24gdmVyc2lvblxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB2ZXJzaW9uIHVwZGF0ZXMgaW4gYSBwcm9qZWN0LlxuICogSXQgaW5jbHVkZXMgdGFza3Mgc3VjaCBhcyB2YWxpZGF0aW5nIHZlcnNpb24gdXBkYXRlIHR5cGVzLCBjaGVja2luZyB0aGUgc3RhdGVcbiAqIG9mIEdpdCBhbmQgR2l0SHViIENMSSwgdXBkYXRpbmcgdmVyc2lvbiBudW1iZXJzIGluIGZpbGVzLCBhbmQgcGVyZm9ybWluZ1xuICogR2l0IG9wZXJhdGlvbnMgc3VjaCBhcyB0YWdnaW5nIGFuZCBwdXNoaW5nLlxuICpcbiAqIFRoZSBtYWluIGZ1bmN0aW9uLCBgdXBkYXRlVmVyc2lvbmAsIGNvb3JkaW5hdGVzIHRoZXNlIHRhc2tzIHRvIGVuc3VyZSB0aGF0XG4gKiB2ZXJzaW9uIHVwZGF0ZXMgYXJlIGhhbmRsZWQgY29uc2lzdGVudGx5IGFuZCBjb3JyZWN0bHkuIEl0IGFsc28gaW50ZWdyYXRlc1xuICogd2l0aCBPYnNpZGlhbiBwbHVnaW5zLCBpZiBhcHBsaWNhYmxlLCBieSB1cGRhdGluZyByZWxldmFudCBmaWxlcyBhbmQgcmVsZWFzaW5nXG4gKiBuZXcgdmVyc2lvbnMgb24gR2l0SHViLlxuICovXG5cbmltcG9ydCB7IENsaVRhc2tSZXN1bHQgfSBmcm9tIFwiLi4vY2xpLnRzXCI7XG5pbXBvcnQge1xuICBleGVjRnJvbVJvb3QsXG4gIHJlc29sdmVQYXRoRnJvbVJvb3Rcbn0gZnJvbSBcIi4uL1Jvb3QudHNcIjtcbmltcG9ydCB7IHNwZWxsY2hlY2sgfSBmcm9tIFwiLi9zcGVsbGNoZWNrLnRzXCI7XG5pbXBvcnQgeyBsaW50IH0gZnJvbSBcIi4vRVNMaW50L0VTTGludC50c1wiO1xuaW1wb3J0IHtcbiAgZWRpdE5wbVBhY2thZ2UsXG4gIGVkaXROcG1QYWNrYWdlTG9jayxcbiAgcmVhZE5wbVBhY2thZ2Vcbn0gZnJvbSBcIi4uL05wbS50c1wiO1xuaW1wb3J0IHsgZWRpdEpzb24gfSBmcm9tIFwiLi4vSlNPTi50c1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQge1xuICBjcCxcbiAgcmVhZEZpbGUsXG4gIHdyaXRlRmlsZVxufSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgY3JlYXRlSW50ZXJmYWNlIH0gZnJvbSBcIm5vZGU6cmVhZGxpbmUvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHJlYWRkaXJQb3NpeCB9IGZyb20gXCIuLi9Gcy50c1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCIuLi9QYXRoLnRzXCI7XG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gXCIuLi9vYnNpZGlhbi9QbHVnaW4vT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMudHNcIjtcbmltcG9ydCB7IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMgfSBmcm9tIFwiLi9PYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLnRzXCI7XG5pbXBvcnQgQWRtWmlwIGZyb20gXCJhZG0temlwXCI7XG5cbi8qKlxuICogRW51bSByZXByZXNlbnRpbmcgZGlmZmVyZW50IHR5cGVzIG9mIHZlcnNpb24gdXBkYXRlcy5cbiAqL1xuZXhwb3J0IGVudW0gVmVyc2lvblVwZGF0ZVR5cGUge1xuICBNYWpvciA9IFwibWFqb3JcIixcbiAgTWlub3IgPSBcIm1pbm9yXCIsXG4gIFBhdGNoID0gXCJwYXRjaFwiLFxuICBCZXRhID0gXCJiZXRhXCIsXG4gIE1hbnVhbCA9IFwibWFudWFsXCIsXG4gIEludmFsaWQgPSBcImludmFsaWRcIlxufVxuXG4vKipcbiAqIFR5cGUgcmVwcmVzZW50aW5nIHRoZSBtYW5pZmVzdCBmaWxlIGZvcm1hdCBmb3IgT2JzaWRpYW4gcGx1Z2lucy5cbiAqL1xuZXhwb3J0IHR5cGUgTWFuaWZlc3QgPSB7XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBPYnNpZGlhbiB2ZXJzaW9uIHJlcXVpcmVkIGZvciB0aGUgcGx1Z2luLlxuICAgKi9cbiAgbWluQXBwVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgcGx1Z2luLlxuICAgKi9cbiAgdmVyc2lvbjogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBUeXBlIHJlcHJlc2VudGluZyB0aGUgc3RydWN0dXJlIG9mIE9ic2lkaWFuIHJlbGVhc2VzIEpTT04uXG4gKi9cbmV4cG9ydCB0eXBlIE9ic2lkaWFuUmVsZWFzZXNKc29uID0ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIE9ic2lkaWFuIHJlbGVhc2UuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHZlcnNpb24gb2YgdGhlIHByb2plY3QgYmFzZWQgb24gdGhlIHNwZWNpZmllZCB1cGRhdGUgdHlwZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgc2VyaWVzIG9mIHRhc2tzIHRvIGhhbmRsZSB2ZXJzaW9uIHVwZGF0ZXM6XG4gKiAxLiBWYWxpZGF0ZXMgdGhlIHZlcnNpb24gdXBkYXRlIHR5cGUuXG4gKiAyLiBDaGVja3MgaWYgR2l0IGFuZCBHaXRIdWIgQ0xJIGFyZSBpbnN0YWxsZWQuXG4gKiAzLiBWZXJpZmllcyB0aGF0IHRoZSBHaXQgcmVwb3NpdG9yeSBpcyBjbGVhbi5cbiAqIDQuIFJ1bnMgc3BlbGxjaGVjayBhbmQgbGludGluZy5cbiAqIDUuIEJ1aWxkcyB0aGUgcHJvamVjdC5cbiAqIDYuIFVwZGF0ZXMgdmVyc2lvbiBpbiBmaWxlcyBhbmQgY2hhbmdlbG9nLlxuICogNy4gQWRkcyB1cGRhdGVkIGZpbGVzIHRvIEdpdCwgdGFncyB0aGUgY29tbWl0LCBhbmQgcHVzaGVzIHRvIHRoZSByZXBvc2l0b3J5LlxuICogOC4gSWYgYW4gT2JzaWRpYW4gcGx1Z2luLCBjb3BpZXMgdGhlIHVwZGF0ZWQgbWFuaWZlc3QgYW5kIHB1Ymxpc2hlcyBhIEdpdEh1YiByZWxlYXNlLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uVXBkYXRlVHlwZSAtIFRoZSB0eXBlIG9mIHZlcnNpb24gdXBkYXRlIHRvIHBlcmZvcm0gKG1ham9yLCBtaW5vciwgcGF0Y2gsIGJldGEsIG9yIG1hbnVhbCkuXG4gKiBAcmV0dXJucyBBIGBQcm9taXNlYCB0aGF0IHJlc29sdmVzIHRvIGEgYFRhc2tSZXN1bHRgIGluZGljYXRpbmcgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgdmVyc2lvbiB1cGRhdGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVWZXJzaW9uKHZlcnNpb25VcGRhdGVUeXBlOiBzdHJpbmcpOiBQcm9taXNlPENsaVRhc2tSZXN1bHQgfCB2b2lkPiB7XG4gIGlmICghdmVyc2lvblVwZGF0ZVR5cGUpIHtcbiAgICBjb25zdCBucG1PbGRWZXJzaW9uID0gcHJvY2Vzcy5lbnZbXCJucG1fb2xkX3ZlcnNpb25cIl07XG4gICAgY29uc3QgbnBtTmV3VmVyc2lvbiA9IHByb2Nlc3MuZW52W1wibnBtX25ld192ZXJzaW9uXCJdO1xuXG4gICAgaWYgKG5wbU9sZFZlcnNpb24gJiYgbnBtTmV3VmVyc2lvbikge1xuICAgICAgYXdhaXQgdXBkYXRlVmVyc2lvbkluRmlsZXMobnBtT2xkVmVyc2lvbiwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVZlcnNpb24obnBtTmV3VmVyc2lvbik7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaXNPYnNpZGlhblBsdWdpbiA9IGV4aXN0c1N5bmMocmVzb2x2ZVBhdGhGcm9tUm9vdChPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYW5pZmVzdEpzb24pKTtcbiAgcmV0dXJuIGF3YWl0IENsaVRhc2tSZXN1bHQuY2hhaW4oW1xuICAgIGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIHZhbGlkYXRlKHZlcnNpb25VcGRhdGVUeXBlKTtcbiAgICAgIGF3YWl0IGNoZWNrR2l0SW5zdGFsbGVkKCk7XG4gICAgICBhd2FpdCBjaGVja0dpdFJlcG9DbGVhbigpO1xuICAgICAgYXdhaXQgY2hlY2tHaXRIdWJDbGlJbnN0YWxsZWQoKTtcbiAgICB9LFxuICAgICgpOiBQcm9taXNlPENsaVRhc2tSZXN1bHQ+ID0+IHNwZWxsY2hlY2soKSxcbiAgICBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBhd2FpdCBleGVjRnJvbVJvb3QoXCJucG0gcnVuIGJ1aWxkXCIpO1xuICAgIH0sXG4gICAgKCk6IFByb21pc2U8Q2xpVGFza1Jlc3VsdD4gPT4gbGludCgpLFxuICAgIGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IG5ld1ZlcnNpb24gPSBhd2FpdCBnZXROZXdWZXJzaW9uKHZlcnNpb25VcGRhdGVUeXBlKTtcbiAgICAgIGF3YWl0IHVwZGF0ZVZlcnNpb25JbkZpbGVzKG5ld1ZlcnNpb24sIGlzT2JzaWRpYW5QbHVnaW4pO1xuICAgICAgYXdhaXQgdXBkYXRlQ2hhbmdlbG9nKG5ld1ZlcnNpb24pO1xuICAgICAgYXdhaXQgYWRkVXBkYXRlZEZpbGVzVG9HaXQobmV3VmVyc2lvbik7XG4gICAgICBhd2FpdCBhZGRHaXRUYWcobmV3VmVyc2lvbik7XG4gICAgICBhd2FpdCBnaXRQdXNoKCk7XG4gICAgICBpZiAoaXNPYnNpZGlhblBsdWdpbikge1xuICAgICAgICBhd2FpdCBjb3B5VXBkYXRlZE1hbmlmZXN0KCk7XG4gICAgICB9XG4gICAgICBhd2FpdCBwdWJsaXNoR2l0SHViUmVsZWFzZShuZXdWZXJzaW9uLCBpc09ic2lkaWFuUGx1Z2luKTtcbiAgICB9XG4gIF0pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgdmVyc2lvbiB1cGRhdGUgdHlwZSB0byBlbnN1cmUgaXQgaXMgZWl0aGVyIGEgcmVjb2duaXplZCB0eXBlXG4gKiBvciBhIHZhbGlkIG1hbnVhbCB2ZXJzaW9uIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvblVwZGF0ZVR5cGUgLSBUaGUgdmVyc2lvbiB1cGRhdGUgdHlwZSB0byB2YWxpZGF0ZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHZlcnNpb24gdXBkYXRlIHR5cGUgaXMgaW52YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlKHZlcnNpb25VcGRhdGVUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGdldFZlcnNpb25VcGRhdGVUeXBlKHZlcnNpb25VcGRhdGVUeXBlKSA9PT0gVmVyc2lvblVwZGF0ZVR5cGUuSW52YWxpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmVyc2lvbiB1cGRhdGUgdHlwZS4gUGxlYXNlIHVzZSAnbWFqb3InLCAnbWlub3InLCAncGF0Y2gnLCBvciAneC55LnpbLXN1ZmZpeF0nIGZvcm1hdC5cIik7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgR2l0IGlzIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtLlxuICpcbiAqIFRocm93cyBhbiBlcnJvciBpZiBHaXQgaXMgbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAdGhyb3dzIEVycm9yIGlmIEdpdCBpcyBub3QgaW5zdGFsbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tHaXRJbnN0YWxsZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlY0Zyb21Sb290KFwiZ2l0IC0tdmVyc2lvblwiLCB7IHF1aWV0OiB0cnVlIH0pO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHaXQgaXMgbm90IGluc3RhbGxlZC4gUGxlYXNlIGluc3RhbGwgaXQgZnJvbSBodHRwczovL2dpdC1zY20uY29tL1wiKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgR2l0SHViIENMSSBpcyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS5cbiAqXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIEdpdEh1YiBDTEkgaXMgbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBHaXRIdWIgQ0xJIGlzIG5vdCBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0dpdEh1YkNsaUluc3RhbGxlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjRnJvbVJvb3QoXCJnaCAtLXZlcnNpb25cIiwgeyBxdWlldDogdHJ1ZSB9KTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR2l0SHViIENMSSBpcyBub3QgaW5zdGFsbGVkLiBQbGVhc2UgaW5zdGFsbCBpdCBmcm9tIGh0dHBzOi8vY2xpLmdpdGh1Yi5jb20vXCIpO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBHaXQgcmVwb3NpdG9yeSBpcyBjbGVhbiwgbWVhbmluZyB0aGVyZSBhcmUgbm8gdW5jb21taXR0ZWQgY2hhbmdlcy5cbiAqXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIEdpdCByZXBvc2l0b3J5IGlzIG5vdCBjbGVhbi5cbiAqXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBHaXQgcmVwb3NpdG9yeSBpcyBub3QgY2xlYW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0dpdFJlcG9DbGVhbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBleGVjRnJvbVJvb3QoXCJnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0tdW50cmFja2VkLWZpbGVzPWFsbFwiLCB7IHF1aWV0OiB0cnVlIH0pO1xuICAgIGlmIChzdGRvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR2l0IHJlcG9zaXRvcnkgaXMgbm90IGNsZWFuLiBQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBiZWZvcmUgcmVsZWFzaW5nIGEgbmV3IHZlcnNpb24uXCIpO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB2ZXJzaW9uIHVwZGF0ZSBiYXNlZCBvbiB0aGUgaW5wdXQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uVXBkYXRlVHlwZSAtIFRoZSBpbnB1dCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2ZXJzaW9uIHVwZGF0ZSB0eXBlLlxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgYFZlcnNpb25VcGRhdGVUeXBlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZlcnNpb25VcGRhdGVUeXBlKHZlcnNpb25VcGRhdGVUeXBlOiBzdHJpbmcpOiBWZXJzaW9uVXBkYXRlVHlwZSB7XG4gIGNvbnN0IHZlcnNpb25VcGRhdGVUeXBlRW51bSA9IHZlcnNpb25VcGRhdGVUeXBlIGFzIFZlcnNpb25VcGRhdGVUeXBlO1xuICBzd2l0Y2ggKHZlcnNpb25VcGRhdGVUeXBlRW51bSkge1xuICAgIGNhc2UgVmVyc2lvblVwZGF0ZVR5cGUuTWFqb3I6XG4gICAgY2FzZSBWZXJzaW9uVXBkYXRlVHlwZS5NaW5vcjpcbiAgICBjYXNlIFZlcnNpb25VcGRhdGVUeXBlLlBhdGNoOlxuICAgIGNhc2UgVmVyc2lvblVwZGF0ZVR5cGUuQmV0YTpcbiAgICAgIHJldHVybiB2ZXJzaW9uVXBkYXRlVHlwZUVudW07XG5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKC9eXFxkK1xcLlxcZCtcXC5cXGQrKC1bXFx3XFxkLi1dKyk/JC8udGVzdCh2ZXJzaW9uVXBkYXRlVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIFZlcnNpb25VcGRhdGVUeXBlLk1hbnVhbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFZlcnNpb25VcGRhdGVUeXBlLkludmFsaWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB2ZXJzaW9uIGluIHZhcmlvdXMgZmlsZXMsIGluY2x1ZGluZyBgcGFja2FnZS5qc29uYCwgYHBhY2thZ2UtbG9jay5qc29uYCxcbiAqIGFuZCBPYnNpZGlhbiBwbHVnaW4gbWFuaWZlc3RzIGlmIGFwcGxpY2FibGUuXG4gKlxuICogQHBhcmFtIG5ld1ZlcnNpb24gLSBUaGUgbmV3IHZlcnNpb24gc3RyaW5nIHRvIHVwZGF0ZSBpbiB0aGUgZmlsZXMuXG4gKiBAcGFyYW0gaXNPYnNpZGlhblBsdWdpbiAtIFdoZXRoZXIgdGhlIHByb2plY3QgaXMgYW4gT2JzaWRpYW4gcGx1Z2luLlxuICogQHJldHVybnMgQSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB1cGRhdGUgaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVWZXJzaW9uSW5GaWxlcyhuZXdWZXJzaW9uOiBzdHJpbmcsIGlzT2JzaWRpYW5QbHVnaW46IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZWRpdE5wbVBhY2thZ2UoKG5wbVBhY2thZ2UpID0+IHtcbiAgICBucG1QYWNrYWdlLnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICB9KTtcblxuICBhd2FpdCBlZGl0TnBtUGFja2FnZUxvY2soKG5wbVBhY2thZ2VMb2NrKSA9PiB7XG4gICAgbnBtUGFja2FnZUxvY2sudmVyc2lvbiA9IG5ld1ZlcnNpb247XG4gICAgY29uc3QgZGVmYXVsdFBhY2thZ2UgPSBucG1QYWNrYWdlTG9jay5wYWNrYWdlcz8uW1wiXCJdO1xuICAgIGlmIChkZWZhdWx0UGFja2FnZSkge1xuICAgICAgZGVmYXVsdFBhY2thZ2UudmVyc2lvbiA9IG5ld1ZlcnNpb247XG4gICAgfVxuICB9LCB7IHNraXBJZk1pc3Npbmc6IHRydWUgfSk7XG5cbiAgaWYgKGlzT2JzaWRpYW5QbHVnaW4pIHtcbiAgICBjb25zdCBsYXRlc3RPYnNpZGlhblZlcnNpb24gPSBhd2FpdCBnZXRMYXRlc3RPYnNpZGlhblZlcnNpb24oKTtcblxuICAgIGF3YWl0IGVkaXRKc29uPE1hbmlmZXN0PihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYW5pZmVzdEpzb24sIChtYW5pZmVzdCkgPT4ge1xuICAgICAgbWFuaWZlc3QubWluQXBwVmVyc2lvbiA9IGxhdGVzdE9ic2lkaWFuVmVyc2lvbjtcbiAgICAgIG1hbmlmZXN0LnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgZWRpdEpzb248UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuVmVyc2lvbnNKc29uLCAodmVyc2lvbnMpID0+IHtcbiAgICAgIHZlcnNpb25zW25ld1ZlcnNpb25dID0gbGF0ZXN0T2JzaWRpYW5WZXJzaW9uO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbmV3IHZlcnNpb24gc3RyaW5nIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZlcnNpb24gYW5kIHRoZSBzcGVjaWZpZWQgdXBkYXRlIHR5cGUuXG4gKlxuICogQHBhcmFtIHZlcnNpb25VcGRhdGVUeXBlIC0gVGhlIHR5cGUgb2YgdmVyc2lvbiB1cGRhdGUgKG1ham9yLCBtaW5vciwgcGF0Y2gsIGJldGEsIG9yIG1hbnVhbCkuXG4gKiBAcmV0dXJucyBBIGBQcm9taXNlYCB0aGF0IHJlc29sdmVzIHRvIHRoZSBuZXcgdmVyc2lvbiBzdHJpbmcuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBjdXJyZW50IHZlcnNpb24gZm9ybWF0IGlzIGludmFsaWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXROZXdWZXJzaW9uKHZlcnNpb25VcGRhdGVUeXBlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB2ZXJzaW9uVHlwZSA9IGdldFZlcnNpb25VcGRhdGVUeXBlKHZlcnNpb25VcGRhdGVUeXBlKTtcbiAgaWYgKHZlcnNpb25UeXBlID09PSBWZXJzaW9uVXBkYXRlVHlwZS5NYW51YWwpIHtcbiAgICByZXR1cm4gdmVyc2lvblVwZGF0ZVR5cGU7XG4gIH1cblxuICBjb25zdCBucG1QYWNrYWdlID0gYXdhaXQgcmVhZE5wbVBhY2thZ2UoKTtcbiAgY29uc3QgY3VycmVudFZlcnNpb24gPSBucG1QYWNrYWdlLnZlcnNpb247XG5cbiAgY29uc3QgbWF0Y2ggPSBjdXJyZW50VmVyc2lvbi5tYXRjaCgvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSgtYmV0YS4oXFxkKykpPy8pO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGN1cnJlbnQgdmVyc2lvbiBmb3JtYXQ6ICR7Y3VycmVudFZlcnNpb259YCk7XG4gIH1cblxuICBsZXQgbWFqb3IgPSBOdW1iZXIobWF0Y2hbMV0pO1xuICBsZXQgbWlub3IgPSBOdW1iZXIobWF0Y2hbMl0pO1xuICBsZXQgcGF0Y2ggPSBOdW1iZXIobWF0Y2hbM10pO1xuICBsZXQgYmV0YSA9IG1hdGNoWzVdID8gTnVtYmVyKG1hdGNoWzVdKSA6IDA7XG5cbiAgc3dpdGNoICh2ZXJzaW9uVHlwZSkge1xuICAgIGNhc2UgVmVyc2lvblVwZGF0ZVR5cGUuTWFqb3I6XG4gICAgICBtYWpvcisrO1xuICAgICAgbWlub3IgPSAwO1xuICAgICAgcGF0Y2ggPSAwO1xuICAgICAgYmV0YSA9IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFZlcnNpb25VcGRhdGVUeXBlLk1pbm9yOlxuICAgICAgbWlub3IrKztcbiAgICAgIHBhdGNoID0gMDtcbiAgICAgIGJldGEgPSAwO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBWZXJzaW9uVXBkYXRlVHlwZS5QYXRjaDpcbiAgICAgIHBhdGNoKys7XG4gICAgICBiZXRhID0gMDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVmVyc2lvblVwZGF0ZVR5cGUuQmV0YTpcbiAgICAgIGJldGErKztcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNofSR7YmV0YSA+IDAgPyBgLWJldGEuJHtiZXRhfWAgOiBcIlwifWA7XG59XG5cbi8qKlxuICogRmV0Y2hlcyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgT2JzaWRpYW4gZnJvbSB0aGUgR2l0SHViIHJlbGVhc2VzIEFQSS5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgT2JzaWRpYW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdE9ic2lkaWFuVmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2xhdGVzdFwiKTtcbiAgY29uc3Qgb2JzaWRpYW5SZWxlYXNlc0pzb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgT2JzaWRpYW5SZWxlYXNlc0pzb247XG4gIHJldHVybiBvYnNpZGlhblJlbGVhc2VzSnNvbi5uYW1lO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGNoYW5nZWxvZyBmaWxlIHdpdGggbmV3IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGNvbW1pdCBtZXNzYWdlcy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBjdXJyZW50IGNoYW5nZWxvZywgYXBwZW5kcyBuZXcgZW50cmllcyBmb3IgdGhlIGxhdGVzdCB2ZXJzaW9uLFxuICogYW5kIHByb21wdHMgdGhlIHVzZXIgdG8gcmV2aWV3IHRoZSBjaGFuZ2VzLlxuICpcbiAqIEBwYXJhbSBuZXdWZXJzaW9uIC0gVGhlIG5ldyB2ZXJzaW9uIG51bWJlciB0byBiZSBhZGRlZCB0byB0aGUgY2hhbmdlbG9nLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY2hhbmdlbG9nIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUNoYW5nZWxvZyhuZXdWZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2hhbmdlbG9nUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3QoT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQ2hhbmdlbG9nTWQpO1xuICBsZXQgcHJldmlvdXNDaGFuZ2Vsb2dMaW5lczogc3RyaW5nW107XG4gIGlmICghZXhpc3RzU3luYyhjaGFuZ2Vsb2dQYXRoKSkge1xuICAgIHByZXZpb3VzQ2hhbmdlbG9nTGluZXMgPSBbXTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoY2hhbmdlbG9nUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICBwcmV2aW91c0NoYW5nZWxvZ0xpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKS5zbGljZSgyKTtcbiAgICBpZiAocHJldmlvdXNDaGFuZ2Vsb2dMaW5lcy5hdCgtMSkgPT09IFwiXCIpIHtcbiAgICAgIHByZXZpb3VzQ2hhbmdlbG9nTGluZXMucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbGFzdFRhZyA9IHByZXZpb3VzQ2hhbmdlbG9nTGluZXNbMF0/LnJlcGxhY2UoXCIjIyBcIiwgXCJcIik7XG4gIGNvbnN0IGNvbW1pdFJhbmdlID0gbGFzdFRhZyA/IGAke2xhc3RUYWd9Li5IRUFEYCA6IFwiSEVBRFwiO1xuICBjb25zdCBjb21taXRNZXNzYWdlcyA9IChhd2FpdCBleGVjRnJvbVJvb3QoYGdpdCBsb2cgJHtjb21taXRSYW5nZX0gLS1mb3JtYXQ9JXMgLS1maXJzdC1wYXJlbnRgLCB7IHF1aWV0OiB0cnVlIH0pKS5zcGxpdCgvXFxyP1xcbi8pO1xuXG4gIGxldCBuZXdDaGFuZ2VMb2cgPSBgIyBDSEFOR0VMT0dcXG5cXG4jIyAke25ld1ZlcnNpb259XFxuXFxuYDtcblxuICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgY29tbWl0TWVzc2FnZXMpIHtcbiAgICBuZXdDaGFuZ2VMb2cgKz0gYC0gJHttZXNzYWdlfVxcbmA7XG4gIH1cblxuICBpZiAocHJldmlvdXNDaGFuZ2Vsb2dMaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgbmV3Q2hhbmdlTG9nICs9IFwiXFxuXCI7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIHByZXZpb3VzQ2hhbmdlbG9nTGluZXMpIHtcbiAgICAgIG5ld0NoYW5nZUxvZyArPSBgJHtsaW5lfVxcbmA7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgd3JpdGVGaWxlKGNoYW5nZWxvZ1BhdGgsIG5ld0NoYW5nZUxvZywgXCJ1dGYtOFwiKTtcblxuICBhd2FpdCBjcmVhdGVJbnRlcmZhY2UocHJvY2Vzcy5zdGRpbiwgcHJvY2Vzcy5zdGRvdXQpLnF1ZXN0aW9uKGBQbGVhc2UgdXBkYXRlIHRoZSAke09ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkNoYW5nZWxvZ01kfSBmaWxlLiBQcmVzcyBFbnRlciB3aGVuIHlvdSBhcmUgZG9uZS4uLmApO1xufVxuXG4vKipcbiAqIEFkZHMgdXBkYXRlZCBmaWxlcyB0byB0aGUgR2l0IHN0YWdpbmcgYXJlYSBhbmQgY29tbWl0cyB0aGVtIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG5ld1ZlcnNpb24gLSBUaGUgbmV3IHZlcnNpb24gbnVtYmVyIHVzZWQgYXMgdGhlIGNvbW1pdCBtZXNzYWdlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZXMgaGF2ZSBiZWVuIGFkZGVkIGFuZCBjb21taXR0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRVcGRhdGVkRmlsZXNUb0dpdChuZXdWZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZmlsZXMgPSBbXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFuaWZlc3RKc29uLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlBhY2thZ2VKc29uLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlBhY2thZ2VMb2NrSnNvbixcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5WZXJzaW9uc0pzb24sXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQ2hhbmdlbG9nTWRcbiAgXS5maWx0ZXIoKGZpbGUpID0+IGV4aXN0c1N5bmMocmVzb2x2ZVBhdGhGcm9tUm9vdChmaWxlKSkpO1xuICBhd2FpdCBleGVjRnJvbVJvb3QoW1wiZ2l0XCIsIFwiYWRkXCIsIC4uLmZpbGVzXSwgeyBxdWlldDogdHJ1ZSB9KTtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KGBnaXQgY29tbWl0IC1tICR7bmV3VmVyc2lvbn1gLCB7IHF1aWV0OiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBHaXQgdGFnIGZvciB0aGUgbmV3IHZlcnNpb24uXG4gKlxuICogQHBhcmFtIG5ld1ZlcnNpb24gLSBUaGUgbmV3IHZlcnNpb24gbnVtYmVyIHRvIHVzZSBmb3IgdGhlIHRhZy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRhZyBoYXMgYmVlbiBjcmVhdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkR2l0VGFnKG5ld1ZlcnNpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoYGdpdCB0YWcgLWEgJHtuZXdWZXJzaW9ufSAtbSAke25ld1ZlcnNpb259YCwgeyBxdWlldDogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBQdXNoZXMgY29tbWl0cyBhbmQgdGFncyB0byB0aGUgcmVtb3RlIEdpdCByZXBvc2l0b3J5LlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHB1c2ggb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2l0UHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFwiZ2l0IHB1c2ggLS1mb2xsb3ctdGFnc1wiLCB7IHF1aWV0OiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIENvcGllcyB0aGUgdXBkYXRlZCBtYW5pZmVzdCBmaWxlIHRvIHRoZSBkaXN0cmlidXRpb24gYnVpbGQgZGlyZWN0b3J5LlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvcHkgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weVVwZGF0ZWRNYW5pZmVzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgY3AocmVzb2x2ZVBhdGhGcm9tUm9vdChPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYW5pZmVzdEpzb24pLCByZXNvbHZlUGF0aEZyb21Sb290KGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGlzdEJ1aWxkLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYW5pZmVzdEpzb24pKSwgeyBmb3JjZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIGEgc3BlY2lmaWMgdmVyc2lvbiBmcm9tIHRoZSBjaGFuZ2Vsb2cuXG4gKlxuICogQHBhcmFtIG5ld1ZlcnNpb24gLSBUaGUgbmV3IHZlcnNpb24gbnVtYmVyIGZvciB3aGljaCB0byBnZXQgdGhlIHJlbGVhc2Ugbm90ZXMuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIHNwZWNpZmllZCB2ZXJzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UmVsZWFzZU5vdGVzKG5ld1ZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGNoYW5nZWxvZ1BhdGggPSByZXNvbHZlUGF0aEZyb21Sb290KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkNoYW5nZWxvZ01kKTtcbiAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGNoYW5nZWxvZ1BhdGgsIFwidXRmLThcIik7XG4gIGNvbnN0IG5ld1ZlcnNpb25Fc2NhcGVkID0gbmV3VmVyc2lvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIlxcXFwuXCIpO1xuICBjb25zdCBtYXRjaCA9IGNvbnRlbnQubWF0Y2gobmV3IFJlZ0V4cChgXFxuIyMgJHtuZXdWZXJzaW9uRXNjYXBlZH1cXG5cXG4oKC58XFxuKSs/KVxcblxcbiMjYCkpO1xuICBsZXQgcmVsZWFzZU5vdGVzID0gbWF0Y2ggPyBtYXRjaFsxXSArIFwiXFxuXFxuXCIgOiBcIlwiO1xuXG4gIGNvbnN0IHRhZ3MgPSAoYXdhaXQgZXhlY0Zyb21Sb290KFwiZ2l0IHRhZyAtLXNvcnQ9LWNyZWF0b3JkYXRlXCIsIHsgcXVpZXQ6IHRydWUgfSkpLnNwbGl0KC9cXHI/XFxuLyk7XG4gIGNvbnN0IHByZXZpb3VzVmVyc2lvbiA9IHRhZ3NbMV07XG4gIGxldCBjaGFuZ2VzVXJsID0gXCJcIjtcblxuICBjb25zdCByZXBvVXJsID0gYXdhaXQgZXhlY0Zyb21Sb290KFwiZ2ggcmVwbyB2aWV3IC0tanNvbiB1cmwgLXEgLnVybFwiLCB7IHF1aWV0OiB0cnVlIH0pO1xuXG4gIGlmIChwcmV2aW91c1ZlcnNpb24pIHtcbiAgICBjaGFuZ2VzVXJsID0gYCR7cmVwb1VybH0vY29tcGFyZS8ke3ByZXZpb3VzVmVyc2lvbn0uLi4ke25ld1ZlcnNpb259YDtcbiAgfSBlbHNlIHtcbiAgICBjaGFuZ2VzVXJsID0gYCR7cmVwb1VybH0vY29tbWl0cy8ke25ld1ZlcnNpb259YDtcbiAgfVxuXG4gIHJlbGVhc2VOb3RlcyArPSBgKipGdWxsIENoYW5nZWxvZyoqOiAke2NoYW5nZXNVcmx9YDtcbiAgcmV0dXJuIHJlbGVhc2VOb3Rlcztcbn1cblxuLyoqXG4gKiBQdWJsaXNoZXMgYSBHaXRIdWIgcmVsZWFzZSBmb3IgdGhlIG5ldyB2ZXJzaW9uLlxuICpcbiAqIEhhbmRsZXMgdGhlIGNyZWF0aW9uIG9mIGEgcmVsZWFzZSBhbmQgdXBsb2FkaW5nIGZpbGVzIGZvciBlaXRoZXIgYW4gT2JzaWRpYW4gcGx1Z2luIG9yIGFub3RoZXIgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gbmV3VmVyc2lvbiAtIFRoZSBuZXcgdmVyc2lvbiBudW1iZXIgZm9yIHRoZSByZWxlYXNlLlxuICogQHBhcmFtIGlzT2JzaWRpYW5QbHVnaW4gLSBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgcHJvamVjdCBpcyBhbiBPYnNpZGlhbiBwbHVnaW4uXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSByZWxlYXNlIGhhcyBiZWVuIHB1Ymxpc2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1Ymxpc2hHaXRIdWJSZWxlYXNlKG5ld1ZlcnNpb246IHN0cmluZywgaXNPYnNpZGlhblBsdWdpbjogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgZmlsZVBhdGhzOiBzdHJpbmdbXTtcblxuICBpZiAoaXNPYnNpZGlhblBsdWdpbikge1xuICAgIGNvbnN0IGJ1aWxkRGlyID0gcmVzb2x2ZVBhdGhGcm9tUm9vdChPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EaXN0QnVpbGQpO1xuICAgIGNvbnN0IGZpbGVOYW1lcyA9IGF3YWl0IHJlYWRkaXJQb3NpeChidWlsZERpcik7XG4gICAgZmlsZVBhdGhzID0gZmlsZU5hbWVzLm1hcCgoZmlsZU5hbWUpID0+IGpvaW4oYnVpbGREaXIsIGZpbGVOYW1lKSk7XG4gIH0gZWxzZSB7XG5cbiAgICBjb25zdCB6aXAgPSBuZXcgQWRtWmlwKCk7XG4gICAgemlwLmFkZExvY2FsRm9sZGVyKHJlc29sdmVQYXRoRnJvbVJvb3QoT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0KSwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0LCAoZmlsZW5hbWUpID0+ICFmaWxlbmFtZS5lbmRzV2l0aChcIi56aXBcIikpO1xuXG4gICAgY29uc3QgZmlsZXMgPSBbXG4gICAgICBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkNoYW5nZWxvZ01kLFxuICAgICAgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5MaWNlbnNlLFxuICAgICAgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5SZWFkbWVNZCxcbiAgICAgIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUGFja2FnZUpzb25cbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICB6aXAuYWRkTG9jYWxGaWxlKHJlc29sdmVQYXRoRnJvbVJvb3QoZmlsZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IG5wbVBhY2thZ2UgPSBhd2FpdCByZWFkTnBtUGFja2FnZSgpO1xuICAgIGNvbnN0IGRpc3RaaXBQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdChqb2luKE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdCwgYCR7bnBtUGFja2FnZS5uYW1lfS0ke25ld1ZlcnNpb259LnppcGApKTtcbiAgICB6aXAud3JpdGVaaXAoZGlzdFppcFBhdGgpO1xuICAgIGZpbGVQYXRocyA9IFtkaXN0WmlwUGF0aF07XG4gIH1cblxuICBhd2FpdCBleGVjRnJvbVJvb3QoW1wiZ2hcIiwgXCJyZWxlYXNlXCIsIFwiY3JlYXRlXCIsIG5ld1ZlcnNpb24sIC4uLmZpbGVQYXRocywgXCItLXRpdGxlXCIsIGB2JHtuZXdWZXJzaW9ufWAsIFwiLS1ub3Rlcy1maWxlXCIsIFwiLVwiXSwge1xuICAgIHF1aWV0OiB0cnVlLFxuICAgIHN0ZGluOiBhd2FpdCBnZXRSZWxl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
|