obsidian-dev-utils 2.27.0 → 3.0.1
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 +9 -0
- package/dist/bin/cli.cjs +1 -1
- 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
@@ -0,0 +1,349 @@
|
|
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_adm_zip = __toESM(require("adm-zip"), 1);
|
55
|
+
var import_ObsidianPluginRepoPaths = require("../obsidian/Plugin/ObsidianPluginRepoPaths.cjs");
|
56
|
+
var import_Path = require("../Path.cjs");
|
57
|
+
var import_Fs = require("./Fs.cjs");
|
58
|
+
var import_JSON = require("./JSON.cjs");
|
59
|
+
var import_NodeModules = require("./NodeModules.cjs");
|
60
|
+
var import_Npm = require("./Npm.cjs");
|
61
|
+
var import_ObsidianDevUtilsRepoPaths = require("./ObsidianDevUtilsRepoPaths.cjs");
|
62
|
+
var import_Root = require("./Root.cjs");
|
63
|
+
var __import_meta_url = globalThis["import.meta.url"] ?? (() => {
|
64
|
+
const normalizedPath = __filename.replace(/\\/g, "/");
|
65
|
+
const windowsDriveLetterMatch = /^([a-zA-Z]):/.exec(normalizedPath);
|
66
|
+
let path = normalizedPath;
|
67
|
+
if (windowsDriveLetterMatch) {
|
68
|
+
path = `/${windowsDriveLetterMatch[1].toUpperCase()}:${normalizedPath.slice(2)}`;
|
69
|
+
}
|
70
|
+
const encodedPath = encodeURIComponent(path).replace(/%2F/g, "/").replace(/%3A/g, ":");
|
71
|
+
return new URL(`file://${encodedPath}`);
|
72
|
+
})();
|
73
|
+
var __process = globalThis["process"] ?? {
|
74
|
+
"cwd": () => "/",
|
75
|
+
"env": {},
|
76
|
+
"platform": "android"
|
77
|
+
};
|
78
|
+
var VersionUpdateType = /* @__PURE__ */ ((VersionUpdateType2) => {
|
79
|
+
VersionUpdateType2["Major"] = "major";
|
80
|
+
VersionUpdateType2["Minor"] = "minor";
|
81
|
+
VersionUpdateType2["Patch"] = "patch";
|
82
|
+
VersionUpdateType2["Beta"] = "beta";
|
83
|
+
VersionUpdateType2["Manual"] = "manual";
|
84
|
+
VersionUpdateType2["Invalid"] = "invalid";
|
85
|
+
return VersionUpdateType2;
|
86
|
+
})(VersionUpdateType || {});
|
87
|
+
async function updateVersion(versionUpdateType) {
|
88
|
+
if (!versionUpdateType) {
|
89
|
+
const npmOldVersion = __process.env["npm_old_version"];
|
90
|
+
const npmNewVersion = __process.env["npm_new_version"];
|
91
|
+
if (npmOldVersion && npmNewVersion) {
|
92
|
+
await updateVersionInFiles(npmOldVersion, false);
|
93
|
+
await updateVersion(npmNewVersion);
|
94
|
+
return;
|
95
|
+
}
|
96
|
+
}
|
97
|
+
const isObsidianPlugin = (0, import_NodeModules.existsSync)((0, import_Root.resolvePathFromRoot)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ManifestJson));
|
98
|
+
validate(versionUpdateType);
|
99
|
+
await checkGitInstalled();
|
100
|
+
await checkGitRepoClean();
|
101
|
+
await checkGitHubCliInstalled();
|
102
|
+
await (0, import_Root.execFromRoot)("npm run spellcheck");
|
103
|
+
await (0, import_Root.execFromRoot)("npm run build");
|
104
|
+
await (0, import_Root.execFromRoot)("npm run lint");
|
105
|
+
const newVersion = await getNewVersion(versionUpdateType);
|
106
|
+
await updateVersionInFiles(newVersion, isObsidianPlugin);
|
107
|
+
await updateChangelog(newVersion);
|
108
|
+
await addUpdatedFilesToGit(newVersion);
|
109
|
+
await addGitTag(newVersion);
|
110
|
+
await gitPush();
|
111
|
+
if (isObsidianPlugin) {
|
112
|
+
await copyUpdatedManifest();
|
113
|
+
}
|
114
|
+
await publishGitHubRelease(newVersion, isObsidianPlugin);
|
115
|
+
}
|
116
|
+
function validate(versionUpdateType) {
|
117
|
+
if (getVersionUpdateType(versionUpdateType) === "invalid" /* Invalid */) {
|
118
|
+
throw new Error("Invalid version update type. Please use 'major', 'minor', 'patch', or 'x.y.z[-suffix]' format.");
|
119
|
+
}
|
120
|
+
}
|
121
|
+
async function checkGitInstalled() {
|
122
|
+
try {
|
123
|
+
await (0, import_Root.execFromRoot)("git --version", { quiet: true });
|
124
|
+
} catch {
|
125
|
+
throw new Error("Git is not installed. Please install it from https://git-scm.com/");
|
126
|
+
}
|
127
|
+
}
|
128
|
+
async function checkGitHubCliInstalled() {
|
129
|
+
try {
|
130
|
+
await (0, import_Root.execFromRoot)("gh --version", { quiet: true });
|
131
|
+
} catch {
|
132
|
+
throw new Error("GitHub CLI is not installed. Please install it from https://cli.github.com/");
|
133
|
+
}
|
134
|
+
}
|
135
|
+
async function checkGitRepoClean() {
|
136
|
+
try {
|
137
|
+
const stdout = await (0, import_Root.execFromRoot)("git status --porcelain --untracked-files=all", { quiet: true });
|
138
|
+
if (stdout) {
|
139
|
+
throw new Error();
|
140
|
+
}
|
141
|
+
} catch {
|
142
|
+
throw new Error("Git repository is not clean. Please commit or stash your changes before releasing a new version.");
|
143
|
+
}
|
144
|
+
}
|
145
|
+
function getVersionUpdateType(versionUpdateType) {
|
146
|
+
const versionUpdateTypeEnum = versionUpdateType;
|
147
|
+
switch (versionUpdateTypeEnum) {
|
148
|
+
case "major" /* Major */:
|
149
|
+
case "minor" /* Minor */:
|
150
|
+
case "patch" /* Patch */:
|
151
|
+
case "beta" /* Beta */:
|
152
|
+
return versionUpdateTypeEnum;
|
153
|
+
default:
|
154
|
+
if (/^\d+\.\d+\.\d+(-[\w\d.-]+)?$/.test(versionUpdateType)) {
|
155
|
+
return "manual" /* Manual */;
|
156
|
+
}
|
157
|
+
return "invalid" /* Invalid */;
|
158
|
+
}
|
159
|
+
}
|
160
|
+
async function updateVersionInFiles(newVersion, isObsidianPlugin) {
|
161
|
+
await (0, import_Npm.editNpmPackage)((npmPackage) => {
|
162
|
+
npmPackage.version = newVersion;
|
163
|
+
});
|
164
|
+
await (0, import_Npm.editNpmPackageLock)((npmPackageLock) => {
|
165
|
+
npmPackageLock.version = newVersion;
|
166
|
+
const defaultPackage = npmPackageLock.packages?.[""];
|
167
|
+
if (defaultPackage) {
|
168
|
+
defaultPackage.version = newVersion;
|
169
|
+
}
|
170
|
+
}, { skipIfMissing: true });
|
171
|
+
if (isObsidianPlugin) {
|
172
|
+
const latestObsidianVersion = await getLatestObsidianVersion();
|
173
|
+
await (0, import_JSON.editJson)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ManifestJson, (manifest) => {
|
174
|
+
manifest.minAppVersion = latestObsidianVersion;
|
175
|
+
manifest.version = newVersion;
|
176
|
+
});
|
177
|
+
await (0, import_JSON.editJson)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.VersionsJson, (versions) => {
|
178
|
+
versions[newVersion] = latestObsidianVersion;
|
179
|
+
});
|
180
|
+
}
|
181
|
+
}
|
182
|
+
async function getNewVersion(versionUpdateType) {
|
183
|
+
const versionType = getVersionUpdateType(versionUpdateType);
|
184
|
+
if (versionType === "manual" /* Manual */) {
|
185
|
+
return versionUpdateType;
|
186
|
+
}
|
187
|
+
const npmPackage = await (0, import_Npm.readNpmPackage)();
|
188
|
+
const currentVersion = npmPackage.version;
|
189
|
+
const match = /^(\d+)\.(\d+)\.(\d+)(-beta.(\d+))?/.exec(currentVersion);
|
190
|
+
if (!match) {
|
191
|
+
throw new Error(`Invalid current version format: ${currentVersion}`);
|
192
|
+
}
|
193
|
+
let major = Number(match[1]);
|
194
|
+
let minor = Number(match[2]);
|
195
|
+
let patch = Number(match[3]);
|
196
|
+
let beta = match[5] ? Number(match[5]) : 0;
|
197
|
+
switch (versionType) {
|
198
|
+
case "major" /* Major */:
|
199
|
+
major++;
|
200
|
+
minor = 0;
|
201
|
+
patch = 0;
|
202
|
+
beta = 0;
|
203
|
+
break;
|
204
|
+
case "minor" /* Minor */:
|
205
|
+
minor++;
|
206
|
+
patch = 0;
|
207
|
+
beta = 0;
|
208
|
+
break;
|
209
|
+
case "patch" /* Patch */:
|
210
|
+
patch++;
|
211
|
+
beta = 0;
|
212
|
+
break;
|
213
|
+
case "beta" /* Beta */:
|
214
|
+
beta++;
|
215
|
+
break;
|
216
|
+
}
|
217
|
+
return `${major.toString()}.${minor.toString()}.${patch.toString()}${beta > 0 ? `-beta.${beta.toString()}` : ""}`;
|
218
|
+
}
|
219
|
+
async function getLatestObsidianVersion() {
|
220
|
+
const response = await fetch("https://api.github.com/repos/obsidianmd/obsidian-releases/releases/latest");
|
221
|
+
const obsidianReleasesJson = await response.json();
|
222
|
+
return obsidianReleasesJson.name;
|
223
|
+
}
|
224
|
+
async function updateChangelog(newVersion) {
|
225
|
+
const changelogPath = (0, import_Root.resolvePathFromRoot)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ChangelogMd);
|
226
|
+
let previousChangelogLines;
|
227
|
+
if (!(0, import_NodeModules.existsSync)(changelogPath)) {
|
228
|
+
previousChangelogLines = [];
|
229
|
+
} else {
|
230
|
+
const content = await (0, import_NodeModules.readFile)(changelogPath, "utf-8");
|
231
|
+
previousChangelogLines = content.split("\n").slice(2);
|
232
|
+
if (previousChangelogLines.at(-1) === "") {
|
233
|
+
previousChangelogLines.pop();
|
234
|
+
}
|
235
|
+
}
|
236
|
+
const lastTag = previousChangelogLines[0]?.replace("## ", "");
|
237
|
+
const commitRange = lastTag ? `${lastTag}..HEAD` : "HEAD";
|
238
|
+
const commitMessages = (await (0, import_Root.execFromRoot)(`git log ${commitRange} --format=%s --first-parent`, { quiet: true })).split(/\r?\n/);
|
239
|
+
let newChangeLog = `# CHANGELOG
|
240
|
+
|
241
|
+
## ${newVersion}
|
242
|
+
|
243
|
+
`;
|
244
|
+
for (const message of commitMessages) {
|
245
|
+
newChangeLog += `- ${message}
|
246
|
+
`;
|
247
|
+
}
|
248
|
+
if (previousChangelogLines.length > 0) {
|
249
|
+
newChangeLog += "\n";
|
250
|
+
for (const line of previousChangelogLines) {
|
251
|
+
newChangeLog += `${line}
|
252
|
+
`;
|
253
|
+
}
|
254
|
+
}
|
255
|
+
await (0, import_NodeModules.writeFile)(changelogPath, newChangeLog, "utf-8");
|
256
|
+
await (0, import_NodeModules.createInterface)(__process.stdin, __process.stdout).question(`Please update the ${import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ChangelogMd} file. Press Enter when you are done...`);
|
257
|
+
}
|
258
|
+
async function addUpdatedFilesToGit(newVersion) {
|
259
|
+
const files = [
|
260
|
+
import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ManifestJson,
|
261
|
+
import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.PackageJson,
|
262
|
+
import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.PackageLockJson,
|
263
|
+
import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.VersionsJson,
|
264
|
+
import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ChangelogMd
|
265
|
+
].filter((file) => (0, import_NodeModules.existsSync)((0, import_Root.resolvePathFromRoot)(file)));
|
266
|
+
await (0, import_Root.execFromRoot)(["git", "add", ...files], { quiet: true });
|
267
|
+
await (0, import_Root.execFromRoot)(`git commit -m ${newVersion}`, { quiet: true });
|
268
|
+
}
|
269
|
+
async function addGitTag(newVersion) {
|
270
|
+
await (0, import_Root.execFromRoot)(`git tag -a ${newVersion} -m ${newVersion}`, { quiet: true });
|
271
|
+
}
|
272
|
+
async function gitPush() {
|
273
|
+
await (0, import_Root.execFromRoot)("git push --follow-tags", { quiet: true });
|
274
|
+
}
|
275
|
+
async function copyUpdatedManifest() {
|
276
|
+
await (0, import_NodeModules.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 });
|
277
|
+
}
|
278
|
+
async function getReleaseNotes(newVersion) {
|
279
|
+
const changelogPath = (0, import_Root.resolvePathFromRoot)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ChangelogMd);
|
280
|
+
const content = await (0, import_NodeModules.readFile)(changelogPath, "utf-8");
|
281
|
+
const newVersionEscaped = newVersion.replaceAll(".", "\\.");
|
282
|
+
const match = new RegExp(`
|
283
|
+
## ${newVersionEscaped}
|
284
|
+
|
285
|
+
((.|
|
286
|
+
)+?)
|
287
|
+
|
288
|
+
##`).exec(content);
|
289
|
+
let releaseNotes = match?.[1] ? match[1] + "\n\n" : "";
|
290
|
+
const tags = (await (0, import_Root.execFromRoot)("git tag --sort=-creatordate", { quiet: true })).split(/\r?\n/);
|
291
|
+
const previousVersion = tags[1];
|
292
|
+
let changesUrl = "";
|
293
|
+
const repoUrl = await (0, import_Root.execFromRoot)("gh repo view --json url -q .url", { quiet: true });
|
294
|
+
if (previousVersion) {
|
295
|
+
changesUrl = `${repoUrl}/compare/${previousVersion}...${newVersion}`;
|
296
|
+
} else {
|
297
|
+
changesUrl = `${repoUrl}/commits/${newVersion}`;
|
298
|
+
}
|
299
|
+
releaseNotes += `**Full Changelog**: ${changesUrl}`;
|
300
|
+
return releaseNotes;
|
301
|
+
}
|
302
|
+
async function publishGitHubRelease(newVersion, isObsidianPlugin) {
|
303
|
+
let filePaths;
|
304
|
+
if (isObsidianPlugin) {
|
305
|
+
const buildDir = (0, import_Root.resolvePathFromRoot)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.DistBuild);
|
306
|
+
const fileNames = await (0, import_Fs.readdirPosix)(buildDir);
|
307
|
+
filePaths = fileNames.map((fileName) => (0, import_Path.join)(buildDir, fileName));
|
308
|
+
} else {
|
309
|
+
const zip = new import_adm_zip.default();
|
310
|
+
zip.addLocalFolder((0, import_Root.resolvePathFromRoot)(import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.Dist), import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.Dist, (filename) => !filename.endsWith(".zip"));
|
311
|
+
const files = [
|
312
|
+
import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.ChangelogMd,
|
313
|
+
import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.License,
|
314
|
+
import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.ReadmeMd,
|
315
|
+
import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.PackageJson
|
316
|
+
];
|
317
|
+
for (const file of files) {
|
318
|
+
zip.addLocalFile((0, import_Root.resolvePathFromRoot)(file));
|
319
|
+
}
|
320
|
+
const npmPackage = await (0, import_Npm.readNpmPackage)();
|
321
|
+
const distZipPath = (0, import_Root.resolvePathFromRoot)((0, import_Path.join)(import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.Dist, `${npmPackage.name}-${newVersion}.zip`));
|
322
|
+
zip.writeZip(distZipPath);
|
323
|
+
filePaths = [distZipPath];
|
324
|
+
}
|
325
|
+
await (0, import_Root.execFromRoot)(["gh", "release", "create", newVersion, ...filePaths, "--title", `v${newVersion}`, "--notes-file", "-"], {
|
326
|
+
quiet: true,
|
327
|
+
stdin: await getReleaseNotes(newVersion)
|
328
|
+
});
|
329
|
+
}
|
330
|
+
// Annotate the CommonJS export names for ESM import in node:
|
331
|
+
0 && (module.exports = {
|
332
|
+
VersionUpdateType,
|
333
|
+
addGitTag,
|
334
|
+
addUpdatedFilesToGit,
|
335
|
+
checkGitHubCliInstalled,
|
336
|
+
checkGitInstalled,
|
337
|
+
checkGitRepoClean,
|
338
|
+
copyUpdatedManifest,
|
339
|
+
getNewVersion,
|
340
|
+
getReleaseNotes,
|
341
|
+
getVersionUpdateType,
|
342
|
+
gitPush,
|
343
|
+
publishGitHubRelease,
|
344
|
+
updateChangelog,
|
345
|
+
updateVersion,
|
346
|
+
updateVersionInFiles,
|
347
|
+
validate
|
348
|
+
});
|
349
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3NjcmlwdHMvdmVyc2lvbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1tcImltcG9ydC5tZXRhLnVybFwiXSA/PyAoKCk9Pntjb25zdCBub3JtYWxpemVkUGF0aD1fX2ZpbGVuYW1lLnJlcGxhY2UoL1xcXFwvZyxcIi9cIik7Y29uc3Qgd2luZG93c0RyaXZlTGV0dGVyTWF0Y2g9L14oW2EtekEtWl0pOi8uZXhlYyhub3JtYWxpemVkUGF0aCk7bGV0IHBhdGg9bm9ybWFsaXplZFBhdGg7aWYod2luZG93c0RyaXZlTGV0dGVyTWF0Y2gpe3BhdGg9YC8ke3dpbmRvd3NEcml2ZUxldHRlck1hdGNoWzFdLnRvVXBwZXJDYXNlKCl9OiR7bm9ybWFsaXplZFBhdGguc2xpY2UoMil9YH1jb25zdCBlbmNvZGVkUGF0aD1lbmNvZGVVUklDb21wb25lbnQocGF0aCkucmVwbGFjZSgvJTJGL2csXCIvXCIpLnJlcGxhY2UoLyUzQS9nLFwiOlwiKTtyZXR1cm4gbmV3IFVSTChgZmlsZTovLyR7ZW5jb2RlZFBhdGh9YCl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbXCJwcm9jZXNzXCJdID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIHZlcnNpb25cbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdmVyc2lvbiB1cGRhdGVzIGluIGEgcHJvamVjdC5cbiAqIEl0IGluY2x1ZGVzIHRhc2tzIHN1Y2ggYXMgdmFsaWRhdGluZyB2ZXJzaW9uIHVwZGF0ZSB0eXBlcywgY2hlY2tpbmcgdGhlIHN0YXRlXG4gKiBvZiBHaXQgYW5kIEdpdEh1YiBDTEksIHVwZGF0aW5nIHZlcnNpb24gbnVtYmVycyBpbiBmaWxlcywgYW5kIHBlcmZvcm1pbmdcbiAqIEdpdCBvcGVyYXRpb25zIHN1Y2ggYXMgdGFnZ2luZyBhbmQgcHVzaGluZy5cbiAqXG4gKiBUaGUgbWFpbiBmdW5jdGlvbiwgYHVwZGF0ZVZlcnNpb25gLCBjb29yZGluYXRlcyB0aGVzZSB0YXNrcyB0byBlbnN1cmUgdGhhdFxuICogdmVyc2lvbiB1cGRhdGVzIGFyZSBoYW5kbGVkIGNvbnNpc3RlbnRseSBhbmQgY29ycmVjdGx5LiBJdCBhbHNvIGludGVncmF0ZXNcbiAqIHdpdGggT2JzaWRpYW4gcGx1Z2lucywgaWYgYXBwbGljYWJsZSwgYnkgdXBkYXRpbmcgcmVsZXZhbnQgZmlsZXMgYW5kIHJlbGVhc2luZ1xuICogbmV3IHZlcnNpb25zIG9uIEdpdEh1Yi5cbiAqL1xuXG5pbXBvcnQgQWRtWmlwIGZyb20gJ2FkbS16aXAnO1xuXG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uL29ic2lkaWFuL1BsdWdpbi9PYnNpZGlhblBsdWdpblJlcG9QYXRocy50cyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgeyByZWFkZGlyUG9zaXggfSBmcm9tICcuL0ZzLnRzJztcbmltcG9ydCB7IGVkaXRKc29uIH0gZnJvbSAnLi9KU09OLnRzJztcbmltcG9ydCB7XG4gIGNwLFxuICBjcmVhdGVJbnRlcmZhY2UsXG4gIGV4aXN0c1N5bmMsXG4gIHJlYWRGaWxlLFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnLi9Ob2RlTW9kdWxlcy50cyc7XG5pbXBvcnQge1xuICBlZGl0TnBtUGFja2FnZSxcbiAgZWRpdE5wbVBhY2thZ2VMb2NrLFxuICByZWFkTnBtUGFja2FnZVxufSBmcm9tICcuL05wbS50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi9PYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFxufSBmcm9tICcuL1Jvb3QudHMnO1xuXG4vKipcbiAqIEVudW0gcmVwcmVzZW50aW5nIGRpZmZlcmVudCB0eXBlcyBvZiB2ZXJzaW9uIHVwZGF0ZXMuXG4gKi9cbmV4cG9ydCBlbnVtIFZlcnNpb25VcGRhdGVUeXBlIHtcbiAgTWFqb3IgPSAnbWFqb3InLFxuICBNaW5vciA9ICdtaW5vcicsXG4gIFBhdGNoID0gJ3BhdGNoJyxcbiAgQmV0YSA9ICdiZXRhJyxcbiAgTWFudWFsID0gJ21hbnVhbCcsXG4gIEludmFsaWQgPSAnaW52YWxpZCdcbn1cblxuLyoqXG4gKiBUeXBlIHJlcHJlc2VudGluZyB0aGUgbWFuaWZlc3QgZmlsZSBmb3JtYXQgZm9yIE9ic2lkaWFuIHBsdWdpbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFuaWZlc3Qge1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gT2JzaWRpYW4gdmVyc2lvbiByZXF1aXJlZCBmb3IgdGhlIHBsdWdpbi5cbiAgICovXG4gIG1pbkFwcFZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHBsdWdpbi5cbiAgICovXG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBUeXBlIHJlcHJlc2VudGluZyB0aGUgc3RydWN0dXJlIG9mIE9ic2lkaWFuIHJlbGVhc2VzIEpTT04uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzaWRpYW5SZWxlYXNlc0pzb24ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIE9ic2lkaWFuIHJlbGVhc2UuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvamVjdCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHVwZGF0ZSB0eXBlLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBzZXJpZXMgb2YgdGFza3MgdG8gaGFuZGxlIHZlcnNpb24gdXBkYXRlczpcbiAqIDEuIFZhbGlkYXRlcyB0aGUgdmVyc2lvbiB1cGRhdGUgdHlwZS5cbiAqIDIuIENoZWNrcyBpZiBHaXQgYW5kIEdpdEh1YiBDTEkgYXJlIGluc3RhbGxlZC5cbiAqIDMuIFZlcmlmaWVzIHRoYXQgdGhlIEdpdCByZXBvc2l0b3J5IGlzIGNsZWFuLlxuICogNC4gUnVucyBzcGVsbGNoZWNrIGFuZCBsaW50aW5nLlxuICogNS4gQnVpbGRzIHRoZSBwcm9qZWN0LlxuICogNi4gVXBkYXRlcyB2ZXJzaW9uIGluIGZpbGVzIGFuZCBjaGFuZ2Vsb2cuXG4gKiA3LiBBZGRzIHVwZGF0ZWQgZmlsZXMgdG8gR2l0LCB0YWdzIHRoZSBjb21taXQsIGFuZCBwdXNoZXMgdG8gdGhlIHJlcG9zaXRvcnkuXG4gKiA4LiBJZiBhbiBPYnNpZGlhbiBwbHVnaW4sIGNvcGllcyB0aGUgdXBkYXRlZCBtYW5pZmVzdCBhbmQgcHVibGlzaGVzIGEgR2l0SHViIHJlbGVhc2UuXG4gKlxuICogQHBhcmFtIHZlcnNpb25VcGRhdGVUeXBlIC0gVGhlIHR5cGUgb2YgdmVyc2lvbiB1cGRhdGUgdG8gcGVyZm9ybSAobWFqb3IsIG1pbm9yLCBwYXRjaCwgYmV0YSwgb3IgeC55LnpbLWJldGE6dV0pLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdmVyc2lvbiB1cGRhdGUgaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVWZXJzaW9uKHZlcnNpb25VcGRhdGVUeXBlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCF2ZXJzaW9uVXBkYXRlVHlwZSkge1xuICAgIGNvbnN0IG5wbU9sZFZlcnNpb24gPSBwcm9jZXNzLmVudlsnbnBtX29sZF92ZXJzaW9uJ107XG4gICAgY29uc3QgbnBtTmV3VmVyc2lvbiA9IHByb2Nlc3MuZW52WyducG1fbmV3X3ZlcnNpb24nXTtcblxuICAgIGlmIChucG1PbGRWZXJzaW9uICYmIG5wbU5ld1ZlcnNpb24pIHtcbiAgICAgIGF3YWl0IHVwZGF0ZVZlcnNpb25JbkZpbGVzKG5wbU9sZFZlcnNpb24sIGZhbHNlKTtcbiAgICAgIGF3YWl0IHVwZGF0ZVZlcnNpb24obnBtTmV3VmVyc2lvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaXNPYnNpZGlhblBsdWdpbiA9IGV4aXN0c1N5bmMocmVzb2x2ZVBhdGhGcm9tUm9vdChPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYW5pZmVzdEpzb24pKTtcbiAgdmFsaWRhdGUodmVyc2lvblVwZGF0ZVR5cGUpO1xuICBhd2FpdCBjaGVja0dpdEluc3RhbGxlZCgpO1xuICBhd2FpdCBjaGVja0dpdFJlcG9DbGVhbigpO1xuICBhd2FpdCBjaGVja0dpdEh1YkNsaUluc3RhbGxlZCgpO1xuICBhd2FpdCBleGVjRnJvbVJvb3QoJ25wbSBydW4gc3BlbGxjaGVjaycpO1xuICBhd2FpdCBleGVjRnJvbVJvb3QoJ25wbSBydW4gYnVpbGQnKTtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KCducG0gcnVuIGxpbnQnKTtcblxuICBjb25zdCBuZXdWZXJzaW9uID0gYXdhaXQgZ2V0TmV3VmVyc2lvbih2ZXJzaW9uVXBkYXRlVHlwZSk7XG4gIGF3YWl0IHVwZGF0ZVZlcnNpb25JbkZpbGVzKG5ld1ZlcnNpb24sIGlzT2JzaWRpYW5QbHVnaW4pO1xuICBhd2FpdCB1cGRhdGVDaGFuZ2Vsb2cobmV3VmVyc2lvbik7XG4gIGF3YWl0IGFkZFVwZGF0ZWRGaWxlc1RvR2l0KG5ld1ZlcnNpb24pO1xuICBhd2FpdCBhZGRHaXRUYWcobmV3VmVyc2lvbik7XG4gIGF3YWl0IGdpdFB1c2goKTtcbiAgaWYgKGlzT2JzaWRpYW5QbHVnaW4pIHtcbiAgICBhd2FpdCBjb3B5VXBkYXRlZE1hbmlmZXN0KCk7XG4gIH1cbiAgYXdhaXQgcHVibGlzaEdpdEh1YlJlbGVhc2UobmV3VmVyc2lvbiwgaXNPYnNpZGlhblBsdWdpbik7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSB2ZXJzaW9uIHVwZGF0ZSB0eXBlIHRvIGVuc3VyZSBpdCBpcyBlaXRoZXIgYSByZWNvZ25pemVkIHR5cGVcbiAqIG9yIGEgdmFsaWQgbWFudWFsIHZlcnNpb24gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uVXBkYXRlVHlwZSAtIFRoZSB2ZXJzaW9uIHVwZGF0ZSB0eXBlIHRvIHZhbGlkYXRlLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgdmVyc2lvbiB1cGRhdGUgdHlwZSBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUodmVyc2lvblVwZGF0ZVR5cGU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZ2V0VmVyc2lvblVwZGF0ZVR5cGUodmVyc2lvblVwZGF0ZVR5cGUpID09PSBWZXJzaW9uVXBkYXRlVHlwZS5JbnZhbGlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZlcnNpb24gdXBkYXRlIHR5cGUuIFBsZWFzZSB1c2UgXFwnbWFqb3JcXCcsIFxcJ21pbm9yXFwnLCBcXCdwYXRjaFxcJywgb3IgXFwneC55LnpbLXN1ZmZpeF1cXCcgZm9ybWF0LicpO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIEdpdCBpcyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS5cbiAqXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgR2l0IGlzIG5vdCBpbnN0YWxsZWQuXG4gKlxuICogQHRocm93cyBFcnJvciBpZiBHaXQgaXMgbm90IGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrR2l0SW5zdGFsbGVkKCk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWNGcm9tUm9vdCgnZ2l0IC0tdmVyc2lvbicsIHsgcXVpZXQ6IHRydWUgfSk7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcignR2l0IGlzIG5vdCBpbnN0YWxsZWQuIFBsZWFzZSBpbnN0YWxsIGl0IGZyb20gaHR0cHM6Ly9naXQtc2NtLmNvbS8nKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgR2l0SHViIENMSSBpcyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS5cbiAqXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIEdpdEh1YiBDTEkgaXMgbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBHaXRIdWIgQ0xJIGlzIG5vdCBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0dpdEh1YkNsaUluc3RhbGxlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjRnJvbVJvb3QoJ2doIC0tdmVyc2lvbicsIHsgcXVpZXQ6IHRydWUgfSk7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcignR2l0SHViIENMSSBpcyBub3QgaW5zdGFsbGVkLiBQbGVhc2UgaW5zdGFsbCBpdCBmcm9tIGh0dHBzOi8vY2xpLmdpdGh1Yi5jb20vJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIEdpdCByZXBvc2l0b3J5IGlzIGNsZWFuLCBtZWFuaW5nIHRoZXJlIGFyZSBubyB1bmNvbW1pdHRlZCBjaGFuZ2VzLlxuICpcbiAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgR2l0IHJlcG9zaXRvcnkgaXMgbm90IGNsZWFuLlxuICpcbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIEdpdCByZXBvc2l0b3J5IGlzIG5vdCBjbGVhbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrR2l0UmVwb0NsZWFuKCk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IGV4ZWNGcm9tUm9vdCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLXVudHJhY2tlZC1maWxlcz1hbGwnLCB7IHF1aWV0OiB0cnVlIH0pO1xuICAgIGlmIChzdGRvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdHaXQgcmVwb3NpdG9yeSBpcyBub3QgY2xlYW4uIFBsZWFzZSBjb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGJlZm9yZSByZWxlYXNpbmcgYSBuZXcgdmVyc2lvbi4nKTtcbiAgfVxufVxuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHR5cGUgb2YgdmVyc2lvbiB1cGRhdGUgYmFzZWQgb24gdGhlIGlucHV0IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvblVwZGF0ZVR5cGUgLSBUaGUgaW5wdXQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmVyc2lvbiB1cGRhdGUgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGBWZXJzaW9uVXBkYXRlVHlwZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJzaW9uVXBkYXRlVHlwZSh2ZXJzaW9uVXBkYXRlVHlwZTogc3RyaW5nKTogVmVyc2lvblVwZGF0ZVR5cGUge1xuICBjb25zdCB2ZXJzaW9uVXBkYXRlVHlwZUVudW0gPSB2ZXJzaW9uVXBkYXRlVHlwZSBhcyBWZXJzaW9uVXBkYXRlVHlwZTtcbiAgc3dpdGNoICh2ZXJzaW9uVXBkYXRlVHlwZUVudW0pIHtcbiAgICBjYXNlIFZlcnNpb25VcGRhdGVUeXBlLk1ham9yOlxuICAgIGNhc2UgVmVyc2lvblVwZGF0ZVR5cGUuTWlub3I6XG4gICAgY2FzZSBWZXJzaW9uVXBkYXRlVHlwZS5QYXRjaDpcbiAgICBjYXNlIFZlcnNpb25VcGRhdGVUeXBlLkJldGE6XG4gICAgICByZXR1cm4gdmVyc2lvblVwZGF0ZVR5cGVFbnVtO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICgvXlxcZCtcXC5cXGQrXFwuXFxkKygtW1xcd1xcZC4tXSspPyQvLnRlc3QodmVyc2lvblVwZGF0ZVR5cGUpKSB7XG4gICAgICAgIHJldHVybiBWZXJzaW9uVXBkYXRlVHlwZS5NYW51YWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBWZXJzaW9uVXBkYXRlVHlwZS5JbnZhbGlkO1xuICB9XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdmVyc2lvbiBpbiB2YXJpb3VzIGZpbGVzLCBpbmNsdWRpbmcgYHBhY2thZ2UuanNvbmAsIGBwYWNrYWdlLWxvY2suanNvbmAsXG4gKiBhbmQgT2JzaWRpYW4gcGx1Z2luIG1hbmlmZXN0cyBpZiBhcHBsaWNhYmxlLlxuICpcbiAqIEBwYXJhbSBuZXdWZXJzaW9uIC0gVGhlIG5ldyB2ZXJzaW9uIHN0cmluZyB0byB1cGRhdGUgaW4gdGhlIGZpbGVzLlxuICogQHBhcmFtIGlzT2JzaWRpYW5QbHVnaW4gLSBXaGV0aGVyIHRoZSBwcm9qZWN0IGlzIGFuIE9ic2lkaWFuIHBsdWdpbi5cbiAqIEByZXR1cm5zIEEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdXBkYXRlIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlVmVyc2lvbkluRmlsZXMobmV3VmVyc2lvbjogc3RyaW5nLCBpc09ic2lkaWFuUGx1Z2luOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGVkaXROcG1QYWNrYWdlKChucG1QYWNrYWdlKSA9PiB7XG4gICAgbnBtUGFja2FnZS52ZXJzaW9uID0gbmV3VmVyc2lvbjtcbiAgfSk7XG5cbiAgYXdhaXQgZWRpdE5wbVBhY2thZ2VMb2NrKChucG1QYWNrYWdlTG9jaykgPT4ge1xuICAgIG5wbVBhY2thZ2VMb2NrLnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgIGNvbnN0IGRlZmF1bHRQYWNrYWdlID0gbnBtUGFja2FnZUxvY2sucGFja2FnZXM/LlsnJ107XG4gICAgaWYgKGRlZmF1bHRQYWNrYWdlKSB7XG4gICAgICBkZWZhdWx0UGFja2FnZS52ZXJzaW9uID0gbmV3VmVyc2lvbjtcbiAgICB9XG4gIH0sIHsgc2tpcElmTWlzc2luZzogdHJ1ZSB9KTtcblxuICBpZiAoaXNPYnNpZGlhblBsdWdpbikge1xuICAgIGNvbnN0IGxhdGVzdE9ic2lkaWFuVmVyc2lvbiA9IGF3YWl0IGdldExhdGVzdE9ic2lkaWFuVmVyc2lvbigpO1xuXG4gICAgYXdhaXQgZWRpdEpzb248TWFuaWZlc3Q+KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbiwgKG1hbmlmZXN0KSA9PiB7XG4gICAgICBtYW5pZmVzdC5taW5BcHBWZXJzaW9uID0gbGF0ZXN0T2JzaWRpYW5WZXJzaW9uO1xuICAgICAgbWFuaWZlc3QudmVyc2lvbiA9IG5ld1ZlcnNpb247XG4gICAgfSk7XG5cbiAgICBhd2FpdCBlZGl0SnNvbjxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5WZXJzaW9uc0pzb24sICh2ZXJzaW9ucykgPT4ge1xuICAgICAgdmVyc2lvbnNbbmV3VmVyc2lvbl0gPSBsYXRlc3RPYnNpZGlhblZlcnNpb247XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBuZXcgdmVyc2lvbiBzdHJpbmcgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmVyc2lvbiBhbmQgdGhlIHNwZWNpZmllZCB1cGRhdGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvblVwZGF0ZVR5cGUgLSBUaGUgdHlwZSBvZiB2ZXJzaW9uIHVwZGF0ZSAobWFqb3IsIG1pbm9yLCBwYXRjaCwgYmV0YSwgb3IgbWFudWFsKS5cbiAqIEByZXR1cm5zIEEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG5ldyB2ZXJzaW9uIHN0cmluZy5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGN1cnJlbnQgdmVyc2lvbiBmb3JtYXQgaXMgaW52YWxpZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE5ld1ZlcnNpb24odmVyc2lvblVwZGF0ZVR5cGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHZlcnNpb25UeXBlID0gZ2V0VmVyc2lvblVwZGF0ZVR5cGUodmVyc2lvblVwZGF0ZVR5cGUpO1xuICBpZiAodmVyc2lvblR5cGUgPT09IFZlcnNpb25VcGRhdGVUeXBlLk1hbnVhbCkge1xuICAgIHJldHVybiB2ZXJzaW9uVXBkYXRlVHlwZTtcbiAgfVxuXG4gIGNvbnN0IG5wbVBhY2thZ2UgPSBhd2FpdCByZWFkTnBtUGFja2FnZSgpO1xuICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IG5wbVBhY2thZ2UudmVyc2lvbjtcblxuICBjb25zdCBtYXRjaCA9IC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspKC1iZXRhLihcXGQrKSk/Ly5leGVjKGN1cnJlbnRWZXJzaW9uKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjdXJyZW50IHZlcnNpb24gZm9ybWF0OiAke2N1cnJlbnRWZXJzaW9ufWApO1xuICB9XG5cbiAgbGV0IG1ham9yID0gTnVtYmVyKG1hdGNoWzFdKTtcbiAgbGV0IG1pbm9yID0gTnVtYmVyKG1hdGNoWzJdKTtcbiAgbGV0IHBhdGNoID0gTnVtYmVyKG1hdGNoWzNdKTtcbiAgbGV0IGJldGEgPSBtYXRjaFs1XSA/IE51bWJlcihtYXRjaFs1XSkgOiAwO1xuXG4gIHN3aXRjaCAodmVyc2lvblR5cGUpIHtcbiAgICBjYXNlIFZlcnNpb25VcGRhdGVUeXBlLk1ham9yOlxuICAgICAgbWFqb3IrKztcbiAgICAgIG1pbm9yID0gMDtcbiAgICAgIHBhdGNoID0gMDtcbiAgICAgIGJldGEgPSAwO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBWZXJzaW9uVXBkYXRlVHlwZS5NaW5vcjpcbiAgICAgIG1pbm9yKys7XG4gICAgICBwYXRjaCA9IDA7XG4gICAgICBiZXRhID0gMDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVmVyc2lvblVwZGF0ZVR5cGUuUGF0Y2g6XG4gICAgICBwYXRjaCsrO1xuICAgICAgYmV0YSA9IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFZlcnNpb25VcGRhdGVUeXBlLkJldGE6XG4gICAgICBiZXRhKys7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBgJHttYWpvci50b1N0cmluZygpfS4ke21pbm9yLnRvU3RyaW5nKCl9LiR7cGF0Y2gudG9TdHJpbmcoKX0ke2JldGEgPiAwID8gYC1iZXRhLiR7YmV0YS50b1N0cmluZygpfWAgOiAnJ31gO1xufVxuXG4vKipcbiAqIEZldGNoZXMgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE9ic2lkaWFuIGZyb20gdGhlIEdpdEh1YiByZWxlYXNlcyBBUEkuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE9ic2lkaWFuLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRMYXRlc3RPYnNpZGlhblZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2xhdGVzdCcpO1xuICBjb25zdCBvYnNpZGlhblJlbGVhc2VzSnNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBPYnNpZGlhblJlbGVhc2VzSnNvbjtcbiAgcmV0dXJuIG9ic2lkaWFuUmVsZWFzZXNKc29uLm5hbWU7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgY2hhbmdlbG9nIGZpbGUgd2l0aCBuZXcgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgY29tbWl0IG1lc3NhZ2VzLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGN1cnJlbnQgY2hhbmdlbG9nLCBhcHBlbmRzIG5ldyBlbnRyaWVzIGZvciB0aGUgbGF0ZXN0IHZlcnNpb24sXG4gKiBhbmQgcHJvbXB0cyB0aGUgdXNlciB0byByZXZpZXcgdGhlIGNoYW5nZXMuXG4gKlxuICogQHBhcmFtIG5ld1ZlcnNpb24gLSBUaGUgbmV3IHZlcnNpb24gbnVtYmVyIHRvIGJlIGFkZGVkIHRvIHRoZSBjaGFuZ2Vsb2cuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjaGFuZ2Vsb2cgdXBkYXRlIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQ2hhbmdlbG9nKG5ld1ZlcnNpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjaGFuZ2Vsb2dQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdChPYnNpZGlhblBsdWdpblJlcG9QYXRocy5DaGFuZ2Vsb2dNZCk7XG4gIGxldCBwcmV2aW91c0NoYW5nZWxvZ0xpbmVzOiBzdHJpbmdbXTtcbiAgaWYgKCFleGlzdHNTeW5jKGNoYW5nZWxvZ1BhdGgpKSB7XG4gICAgcHJldmlvdXNDaGFuZ2Vsb2dMaW5lcyA9IFtdO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShjaGFuZ2Vsb2dQYXRoLCAndXRmLTgnKTtcbiAgICBwcmV2aW91c0NoYW5nZWxvZ0xpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJykuc2xpY2UoMik7XG4gICAgaWYgKHByZXZpb3VzQ2hhbmdlbG9nTGluZXMuYXQoLTEpID09PSAnJykge1xuICAgICAgcHJldmlvdXNDaGFuZ2Vsb2dMaW5lcy5wb3AoKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBsYXN0VGFnID0gcHJldmlvdXNDaGFuZ2Vsb2dMaW5lc1swXT8ucmVwbGFjZSgnIyMgJywgJycpO1xuICBjb25zdCBjb21taXRSYW5nZSA9IGxhc3RUYWcgPyBgJHtsYXN0VGFnfS4uSEVBRGAgOiAnSEVBRCc7XG4gIGNvbnN0IGNvbW1pdE1lc3NhZ2VzID0gKGF3YWl0IGV4ZWNGcm9tUm9vdChgZ2l0IGxvZyAke2NvbW1pdFJhbmdlfSAtLWZvcm1hdD0lcyAtLWZpcnN0LXBhcmVudGAsIHsgcXVpZXQ6IHRydWUgfSkpLnNwbGl0KC9cXHI/XFxuLyk7XG5cbiAgbGV0IG5ld0NoYW5nZUxvZyA9IGAjIENIQU5HRUxPR1xcblxcbiMjICR7bmV3VmVyc2lvbn1cXG5cXG5gO1xuXG4gIGZvciAoY29uc3QgbWVzc2FnZSBvZiBjb21taXRNZXNzYWdlcykge1xuICAgIG5ld0NoYW5nZUxvZyArPSBgLSAke21lc3NhZ2V9XFxuYDtcbiAgfVxuXG4gIGlmIChwcmV2aW91c0NoYW5nZWxvZ0xpbmVzLmxlbmd0aCA+IDApIHtcbiAgICBuZXdDaGFuZ2VMb2cgKz0gJ1xcbic7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIHByZXZpb3VzQ2hhbmdlbG9nTGluZXMpIHtcbiAgICAgIG5ld0NoYW5nZUxvZyArPSBgJHtsaW5lfVxcbmA7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgd3JpdGVGaWxlKGNoYW5nZWxvZ1BhdGgsIG5ld0NoYW5nZUxvZywgJ3V0Zi04Jyk7XG5cbiAgYXdhaXQgY3JlYXRlSW50ZXJmYWNlKHByb2Nlc3Muc3RkaW4sIHByb2Nlc3Muc3Rkb3V0KS5xdWVzdGlvbihgUGxlYXNlIHVwZGF0ZSB0aGUgJHtPYnNpZGlhblBsdWdpblJlcG9QYXRocy5DaGFuZ2Vsb2dNZH0gZmlsZS4gUHJlc3MgRW50ZXIgd2hlbiB5b3UgYXJlIGRvbmUuLi5gKTtcbn1cblxuLyoqXG4gKiBBZGRzIHVwZGF0ZWQgZmlsZXMgdG8gdGhlIEdpdCBzdGFnaW5nIGFyZWEgYW5kIGNvbW1pdHMgdGhlbSB3aXRoIHRoZSBuZXcgdmVyc2lvbiBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBuZXdWZXJzaW9uIC0gVGhlIG5ldyB2ZXJzaW9uIG51bWJlciB1c2VkIGFzIHRoZSBjb21taXQgbWVzc2FnZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGVzIGhhdmUgYmVlbiBhZGRlZCBhbmQgY29tbWl0dGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkVXBkYXRlZEZpbGVzVG9HaXQobmV3VmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZpbGVzID0gW1xuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbixcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5QYWNrYWdlSnNvbixcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5QYWNrYWdlTG9ja0pzb24sXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuVmVyc2lvbnNKc29uLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkNoYW5nZWxvZ01kXG4gIF0uZmlsdGVyKChmaWxlKSA9PiBleGlzdHNTeW5jKHJlc29sdmVQYXRoRnJvbVJvb3QoZmlsZSkpKTtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsnZ2l0JywgJ2FkZCcsIC4uLmZpbGVzXSwgeyBxdWlldDogdHJ1ZSB9KTtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KGBnaXQgY29tbWl0IC1tICR7bmV3VmVyc2lvbn1gLCB7IHF1aWV0OiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBHaXQgdGFnIGZvciB0aGUgbmV3IHZlcnNpb24uXG4gKlxuICogQHBhcmFtIG5ld1ZlcnNpb24gLSBUaGUgbmV3IHZlcnNpb24gbnVtYmVyIHRvIHVzZSBmb3IgdGhlIHRhZy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRhZyBoYXMgYmVlbiBjcmVhdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkR2l0VGFnKG5ld1ZlcnNpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoYGdpdCB0YWcgLWEgJHtuZXdWZXJzaW9ufSAtbSAke25ld1ZlcnNpb259YCwgeyBxdWlldDogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBQdXNoZXMgY29tbWl0cyBhbmQgdGFncyB0byB0aGUgcmVtb3RlIEdpdCByZXBvc2l0b3J5LlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHB1c2ggb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2l0UHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KCdnaXQgcHVzaCAtLWZvbGxvdy10YWdzJywgeyBxdWlldDogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBDb3BpZXMgdGhlIHVwZGF0ZWQgbWFuaWZlc3QgZmlsZSB0byB0aGUgZGlzdHJpYnV0aW9uIGJ1aWxkIGRpcmVjdG9yeS5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb3B5IG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvcHlVcGRhdGVkTWFuaWZlc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGNwKHJlc29sdmVQYXRoRnJvbVJvb3QoT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFuaWZlc3RKc29uKSwgcmVzb2x2ZVBhdGhGcm9tUm9vdChqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3RCdWlsZCwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFuaWZlc3RKc29uKSksIHsgZm9yY2U6IHRydWUgfSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSByZWxlYXNlIG5vdGVzIGZvciBhIHNwZWNpZmljIHZlcnNpb24gZnJvbSB0aGUgY2hhbmdlbG9nLlxuICpcbiAqIEBwYXJhbSBuZXdWZXJzaW9uIC0gVGhlIG5ldyB2ZXJzaW9uIG51bWJlciBmb3Igd2hpY2ggdG8gZ2V0IHRoZSByZWxlYXNlIG5vdGVzLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSBzcGVjaWZpZWQgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFJlbGVhc2VOb3RlcyhuZXdWZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjaGFuZ2Vsb2dQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdChPYnNpZGlhblBsdWdpblJlcG9QYXRocy5DaGFuZ2Vsb2dNZCk7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShjaGFuZ2Vsb2dQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgbmV3VmVyc2lvbkVzY2FwZWQgPSBuZXdWZXJzaW9uLnJlcGxhY2VBbGwoJy4nLCAnXFxcXC4nKTtcbiAgY29uc3QgbWF0Y2ggPSBuZXcgUmVnRXhwKGBcXG4jIyAke25ld1ZlcnNpb25Fc2NhcGVkfVxcblxcbigoLnxcXG4pKz8pXFxuXFxuIyNgKS5leGVjKGNvbnRlbnQpO1xuICBsZXQgcmVsZWFzZU5vdGVzID0gbWF0Y2g/LlsxXSA/IG1hdGNoWzFdICsgJ1xcblxcbicgOiAnJztcblxuICBjb25zdCB0YWdzID0gKGF3YWl0IGV4ZWNGcm9tUm9vdCgnZ2l0IHRhZyAtLXNvcnQ9LWNyZWF0b3JkYXRlJywgeyBxdWlldDogdHJ1ZSB9KSkuc3BsaXQoL1xccj9cXG4vKTtcbiAgY29uc3QgcHJldmlvdXNWZXJzaW9uID0gdGFnc1sxXTtcbiAgbGV0IGNoYW5nZXNVcmwgPSAnJztcblxuICBjb25zdCByZXBvVXJsID0gYXdhaXQgZXhlY0Zyb21Sb290KCdnaCByZXBvIHZpZXcgLS1qc29uIHVybCAtcSAudXJsJywgeyBxdWlldDogdHJ1ZSB9KTtcblxuICBpZiAocHJldmlvdXNWZXJzaW9uKSB7XG4gICAgY2hhbmdlc1VybCA9IGAke3JlcG9Vcmx9L2NvbXBhcmUvJHtwcmV2aW91c1ZlcnNpb259Li4uJHtuZXdWZXJzaW9ufWA7XG4gIH0gZWxzZSB7XG4gICAgY2hhbmdlc1VybCA9IGAke3JlcG9Vcmx9L2NvbW1pdHMvJHtuZXdWZXJzaW9ufWA7XG4gIH1cblxuICByZWxlYXNlTm90ZXMgKz0gYCoqRnVsbCBDaGFuZ2Vsb2cqKjogJHtjaGFuZ2VzVXJsfWA7XG4gIHJldHVybiByZWxlYXNlTm90ZXM7XG59XG5cbi8qKlxuICogUHVibGlzaGVzIGEgR2l0SHViIHJlbGVhc2UgZm9yIHRoZSBuZXcgdmVyc2lvbi5cbiAqXG4gKiBIYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiBhIHJlbGVhc2UgYW5kIHVwbG9hZGluZyBmaWxlcyBmb3IgZWl0aGVyIGFuIE9ic2lkaWFuIHBsdWdpbiBvciBhbm90aGVyIHByb2plY3QuXG4gKlxuICogQHBhcmFtIG5ld1ZlcnNpb24gLSBUaGUgbmV3IHZlcnNpb24gbnVtYmVyIGZvciB0aGUgcmVsZWFzZS5cbiAqIEBwYXJhbSBpc09ic2lkaWFuUGx1Z2luIC0gQSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHByb2plY3QgaXMgYW4gT2JzaWRpYW4gcGx1Z2luLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcmVsZWFzZSBoYXMgYmVlbiBwdWJsaXNoZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWJsaXNoR2l0SHViUmVsZWFzZShuZXdWZXJzaW9uOiBzdHJpbmcsIGlzT2JzaWRpYW5QbHVnaW46IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGZpbGVQYXRoczogc3RyaW5nW107XG5cbiAgaWYgKGlzT2JzaWRpYW5QbHVnaW4pIHtcbiAgICBjb25zdCBidWlsZERpciA9IHJlc29sdmVQYXRoRnJvbVJvb3QoT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGlzdEJ1aWxkKTtcbiAgICBjb25zdCBmaWxlTmFtZXMgPSBhd2FpdCByZWFkZGlyUG9zaXgoYnVpbGREaXIpO1xuICAgIGZpbGVQYXRocyA9IGZpbGVOYW1lcy5tYXAoKGZpbGVOYW1lKSA9PiBqb2luKGJ1aWxkRGlyLCBmaWxlTmFtZSkpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHppcCA9IG5ldyBBZG1aaXAoKTtcbiAgICB6aXAuYWRkTG9jYWxGb2xkZXIocmVzb2x2ZVBhdGhGcm9tUm9vdChPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRpc3QpLCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRpc3QsIChmaWxlbmFtZSkgPT4gIWZpbGVuYW1lLmVuZHNXaXRoKCcuemlwJykpO1xuXG4gICAgY29uc3QgZmlsZXMgPSBbXG4gICAgICBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkNoYW5nZWxvZ01kLFxuICAgICAgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5MaWNlbnNlLFxuICAgICAgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5SZWFkbWVNZCxcbiAgICAgIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUGFja2FnZUpzb25cbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICB6aXAuYWRkTG9jYWxGaWxlKHJlc29sdmVQYXRoRnJvbVJvb3QoZmlsZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IG5wbVBhY2thZ2UgPSBhd2FpdCByZWFkTnBtUGFja2FnZSgpO1xuICAgIGNvbnN0IGRpc3RaaXBQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdChqb2luKE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdCwgYCR7bnBtUGFja2FnZS5uYW1lfS0ke25ld1ZlcnNpb259LnppcGApKTtcbiAgICB6aXAud3JpdGVaaXAoZGlzdFppcFBhdGgpO1xuICAgIGZpbGVQYXRocyA9IFtkaXN0WmlwUGF0aF07XG4gIH1cblxuICBhd2FpdCBleGVjRnJvbVJvb3QoWydnaCcsICdyZWxlYXNlJywgJ2NyZWF0ZScsIG5ld1ZlcnNpb24sIC4uLmZpbGVQYXRocywgJy0tdGl0bGUnLCBgdiR7bmV3VmVyc2lvbn1gLCAnLS1ub3Rlcy1maWxlJywgJy0nXSwge1xuICAgIHF1aWV0OiB0cnVlLFxuICAgIHN0ZGluOiBhd2FpdCBnZXRSZWxlYXNlTm90ZXMobmV3VmVyc2lvbilcbiAgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUJBLHFCQUFtQjtBQUVuQixxQ0FBd0M7QUFDeEMsa0JBQXFCO0FBQ3JCLGdCQUE2QjtBQUM3QixrQkFBeUI7QUFDekIseUJBTU87QUFDUCxpQkFJTztBQUNQLHVDQUEwQztBQUMxQyxrQkFHTztBQXpDUCxJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUk7QUFBQyxRQUFNLGlCQUFlLFdBQVcsUUFBUSxPQUFNLEdBQUc7QUFBRSxRQUFNLDBCQUF3QixlQUFlLEtBQUssY0FBYztBQUFFLE1BQUksT0FBSztBQUFlLE1BQUcseUJBQXdCO0FBQUMsV0FBSyxJQUFJLHdCQUF3QixDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksZUFBZSxNQUFNLENBQUMsQ0FBQztBQUFBLEVBQUU7QUFBQyxRQUFNLGNBQVksbUJBQW1CLElBQUksRUFBRSxRQUFRLFFBQU8sR0FBRyxFQUFFLFFBQVEsUUFBTyxHQUFHO0FBQUUsU0FBTyxJQUFJLElBQUksVUFBVSxXQUFXLEVBQUU7QUFBQyxHQUFHO0FBQ3BiLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7QUF5Q08sSUFBSyxvQkFBTCxrQkFBS0EsdUJBQUw7QUFDTCxFQUFBQSxtQkFBQSxXQUFRO0FBQ1IsRUFBQUEsbUJBQUEsV0FBUTtBQUNSLEVBQUFBLG1CQUFBLFdBQVE7QUFDUixFQUFBQSxtQkFBQSxVQUFPO0FBQ1AsRUFBQUEsbUJBQUEsWUFBUztBQUNULEVBQUFBLG1CQUFBLGFBQVU7QUFOQSxTQUFBQTtBQUFBLEdBQUE7QUFrRFosZUFBc0IsY0FBYyxtQkFBMEM7QUFDNUUsTUFBSSxDQUFDLG1CQUFtQjtBQUN0QixVQUFNLGdCQUFnQixVQUFRLElBQUksaUJBQWlCO0FBQ25ELFVBQU0sZ0JBQWdCLFVBQVEsSUFBSSxpQkFBaUI7QUFFbkQsUUFBSSxpQkFBaUIsZUFBZTtBQUNsQyxZQUFNLHFCQUFxQixlQUFlLEtBQUs7QUFDL0MsWUFBTSxjQUFjLGFBQWE7QUFDakM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFFBQU0sdUJBQW1CLG1DQUFXLGlDQUFvQix1REFBd0IsWUFBWSxDQUFDO0FBQzdGLFdBQVMsaUJBQWlCO0FBQzFCLFFBQU0sa0JBQWtCO0FBQ3hCLFFBQU0sa0JBQWtCO0FBQ3hCLFFBQU0sd0JBQXdCO0FBQzlCLFlBQU0sMEJBQWEsb0JBQW9CO0FBQ3ZDLFlBQU0sMEJBQWEsZUFBZTtBQUNsQyxZQUFNLDBCQUFhLGNBQWM7QUFFakMsUUFBTSxhQUFhLE1BQU0sY0FBYyxpQkFBaUI7QUFDeEQsUUFBTSxxQkFBcUIsWUFBWSxnQkFBZ0I7QUFDdkQsUUFBTSxnQkFBZ0IsVUFBVTtBQUNoQyxRQUFNLHFCQUFxQixVQUFVO0FBQ3JDLFFBQU0sVUFBVSxVQUFVO0FBQzFCLFFBQU0sUUFBUTtBQUNkLE1BQUksa0JBQWtCO0FBQ3BCLFVBQU0sb0JBQW9CO0FBQUEsRUFDNUI7QUFDQSxRQUFNLHFCQUFxQixZQUFZLGdCQUFnQjtBQUN6RDtBQVNPLFNBQVMsU0FBUyxtQkFBaUM7QUFDeEQsTUFBSSxxQkFBcUIsaUJBQWlCLE1BQU0seUJBQTJCO0FBQ3pFLFVBQU0sSUFBSSxNQUFNLGdHQUF3RztBQUFBLEVBQzFIO0FBQ0Y7QUFTQSxlQUFzQixvQkFBbUM7QUFDdkQsTUFBSTtBQUNGLGNBQU0sMEJBQWEsaUJBQWlCLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFBQSxFQUNyRCxRQUFRO0FBQ04sVUFBTSxJQUFJLE1BQU0sbUVBQW1FO0FBQUEsRUFDckY7QUFDRjtBQVNBLGVBQXNCLDBCQUF5QztBQUM3RCxNQUFJO0FBQ0YsY0FBTSwwQkFBYSxnQkFBZ0IsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3BELFFBQVE7QUFDTixVQUFNLElBQUksTUFBTSw2RUFBNkU7QUFBQSxFQUMvRjtBQUNGO0FBU0EsZUFBc0Isb0JBQW1DO0FBQ3ZELE1BQUk7QUFDRixVQUFNLFNBQVMsVUFBTSwwQkFBYSxnREFBZ0QsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNqRyxRQUFJLFFBQVE7QUFDVixZQUFNLElBQUksTUFBTTtBQUFBLElBQ2xCO0FBQUEsRUFDRixRQUFRO0FBQ04sVUFBTSxJQUFJLE1BQU0sa0dBQWtHO0FBQUEsRUFDcEg7QUFDRjtBQVFPLFNBQVMscUJBQXFCLG1CQUE4QztBQUNqRixRQUFNLHdCQUF3QjtBQUM5QixVQUFRLHVCQUF1QjtBQUFBLElBQzdCLEtBQUs7QUFBQSxJQUNMLEtBQUs7QUFBQSxJQUNMLEtBQUs7QUFBQSxJQUNMLEtBQUs7QUFDSCxhQUFPO0FBQUEsSUFFVDtBQUNFLFVBQUksK0JBQStCLEtBQUssaUJBQWlCLEdBQUc7QUFDMUQsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPO0FBQUEsRUFDWDtBQUNGO0FBVUEsZUFBc0IscUJBQXFCLFlBQW9CLGtCQUEwQztBQUN2RyxZQUFNLDJCQUFlLENBQUMsZUFBZTtBQUNuQyxlQUFXLFVBQVU7QUFBQSxFQUN2QixDQUFDO0FBRUQsWUFBTSwrQkFBbUIsQ0FBQyxtQkFBbUI7QUFDM0MsbUJBQWUsVUFBVTtBQUN6QixVQUFNLGlCQUFpQixlQUFlLFdBQVcsRUFBRTtBQUNuRCxRQUFJLGdCQUFnQjtBQUNsQixxQkFBZSxVQUFVO0FBQUEsSUFDM0I7QUFBQSxFQUNGLEdBQUcsRUFBRSxlQUFlLEtBQUssQ0FBQztBQUUxQixNQUFJLGtCQUFrQjtBQUNwQixVQUFNLHdCQUF3QixNQUFNLHlCQUF5QjtBQUU3RCxjQUFNLHNCQUFtQix1REFBd0IsY0FBYyxDQUFDLGFBQWE7QUFDM0UsZUFBUyxnQkFBZ0I7QUFDekIsZUFBUyxVQUFVO0FBQUEsSUFDckIsQ0FBQztBQUVELGNBQU0sc0JBQWlDLHVEQUF3QixjQUFjLENBQUMsYUFBYTtBQUN6RixlQUFTLFVBQVUsSUFBSTtBQUFBLElBQ3pCLENBQUM7QUFBQSxFQUNIO0FBQ0Y7QUFTQSxlQUFzQixjQUFjLG1CQUE0QztBQUM5RSxRQUFNLGNBQWMscUJBQXFCLGlCQUFpQjtBQUMxRCxNQUFJLGdCQUFnQix1QkFBMEI7QUFDNUMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGFBQWEsVUFBTSwyQkFBZTtBQUN4QyxRQUFNLGlCQUFpQixXQUFXO0FBRWxDLFFBQU0sUUFBUSxxQ0FBcUMsS0FBSyxjQUFjO0FBQ3RFLE1BQUksQ0FBQyxPQUFPO0FBQ1YsVUFBTSxJQUFJLE1BQU0sbUNBQW1DLGNBQWMsRUFBRTtBQUFBLEVBQ3JFO0FBRUEsTUFBSSxRQUFRLE9BQU8sTUFBTSxDQUFDLENBQUM7QUFDM0IsTUFBSSxRQUFRLE9BQU8sTUFBTSxDQUFDLENBQUM7QUFDM0IsTUFBSSxRQUFRLE9BQU8sTUFBTSxDQUFDLENBQUM7QUFDM0IsTUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsSUFBSTtBQUV6QyxVQUFRLGFBQWE7QUFBQSxJQUNuQixLQUFLO0FBQ0g7QUFDQSxjQUFRO0FBQ1IsY0FBUTtBQUNSLGFBQU87QUFDUDtBQUFBLElBQ0YsS0FBSztBQUNIO0FBQ0EsY0FBUTtBQUNSLGFBQU87QUFDUDtBQUFBLElBQ0YsS0FBSztBQUNIO0FBQ0EsYUFBTztBQUNQO0FBQUEsSUFDRixLQUFLO0FBQ0g7QUFDQTtBQUFBLEVBQ0o7QUFFQSxTQUFPLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxNQUFNLFNBQVMsQ0FBQyxJQUFJLE1BQU0sU0FBUyxDQUFDLEdBQUcsT0FBTyxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQ2pIO0FBT0EsZUFBZSwyQkFBNEM7QUFDekQsUUFBTSxXQUFXLE1BQU0sTUFBTSwyRUFBMkU7QUFDeEcsUUFBTSx1QkFBdUIsTUFBTSxTQUFTLEtBQUs7QUFDakQsU0FBTyxxQkFBcUI7QUFDOUI7QUFXQSxlQUFzQixnQkFBZ0IsWUFBbUM7QUFDdkUsUUFBTSxvQkFBZ0IsaUNBQW9CLHVEQUF3QixXQUFXO0FBQzdFLE1BQUk7QUFDSixNQUFJLEtBQUMsK0JBQVcsYUFBYSxHQUFHO0FBQzlCLDZCQUF5QixDQUFDO0FBQUEsRUFDNUIsT0FBTztBQUNMLFVBQU0sVUFBVSxVQUFNLDZCQUFTLGVBQWUsT0FBTztBQUNyRCw2QkFBeUIsUUFBUSxNQUFNLElBQUksRUFBRSxNQUFNLENBQUM7QUFDcEQsUUFBSSx1QkFBdUIsR0FBRyxFQUFFLE1BQU0sSUFBSTtBQUN4Qyw2QkFBdUIsSUFBSTtBQUFBLElBQzdCO0FBQUEsRUFDRjtBQUVBLFFBQU0sVUFBVSx1QkFBdUIsQ0FBQyxHQUFHLFFBQVEsT0FBTyxFQUFFO0FBQzVELFFBQU0sY0FBYyxVQUFVLEdBQUcsT0FBTyxXQUFXO0FBQ25ELFFBQU0sa0JBQWtCLFVBQU0sMEJBQWEsV0FBVyxXQUFXLCtCQUErQixFQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsTUFBTSxPQUFPO0FBRS9ILE1BQUksZUFBZTtBQUFBO0FBQUEsS0FBcUIsVUFBVTtBQUFBO0FBQUE7QUFFbEQsYUFBVyxXQUFXLGdCQUFnQjtBQUNwQyxvQkFBZ0IsS0FBSyxPQUFPO0FBQUE7QUFBQSxFQUM5QjtBQUVBLE1BQUksdUJBQXVCLFNBQVMsR0FBRztBQUNyQyxvQkFBZ0I7QUFDaEIsZUFBVyxRQUFRLHdCQUF3QjtBQUN6QyxzQkFBZ0IsR0FBRyxJQUFJO0FBQUE7QUFBQSxJQUN6QjtBQUFBLEVBQ0Y7QUFFQSxZQUFNLDhCQUFVLGVBQWUsY0FBYyxPQUFPO0FBRXBELFlBQU0sb0NBQWdCLFVBQVEsT0FBTyxVQUFRLE1BQU0sRUFBRSxTQUFTLHFCQUFxQix1REFBd0IsV0FBVyx5Q0FBeUM7QUFDaks7QUFRQSxlQUFzQixxQkFBcUIsWUFBbUM7QUFDNUUsUUFBTSxRQUFRO0FBQUEsSUFDWix1REFBd0I7QUFBQSxJQUN4Qix1REFBd0I7QUFBQSxJQUN4Qix1REFBd0I7QUFBQSxJQUN4Qix1REFBd0I7QUFBQSxJQUN4Qix1REFBd0I7QUFBQSxFQUMxQixFQUFFLE9BQU8sQ0FBQyxhQUFTLG1DQUFXLGlDQUFvQixJQUFJLENBQUMsQ0FBQztBQUN4RCxZQUFNLDBCQUFhLENBQUMsT0FBTyxPQUFPLEdBQUcsS0FBSyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDNUQsWUFBTSwwQkFBYSxpQkFBaUIsVUFBVSxJQUFJLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDbkU7QUFRQSxlQUFzQixVQUFVLFlBQW1DO0FBQ2pFLFlBQU0sMEJBQWEsY0FBYyxVQUFVLE9BQU8sVUFBVSxJQUFJLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDakY7QUFPQSxlQUFzQixVQUF5QjtBQUM3QyxZQUFNLDBCQUFhLDBCQUEwQixFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzlEO0FBT0EsZUFBc0Isc0JBQXFDO0FBQ3pELFlBQU0sMkJBQUcsaUNBQW9CLHVEQUF3QixZQUFZLE9BQUcscUNBQW9CLGtCQUFLLHVEQUF3QixXQUFXLHVEQUF3QixZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ3pMO0FBUUEsZUFBc0IsZ0JBQWdCLFlBQXFDO0FBQ3pFLFFBQU0sb0JBQWdCLGlDQUFvQix1REFBd0IsV0FBVztBQUM3RSxRQUFNLFVBQVUsVUFBTSw2QkFBUyxlQUFlLE9BQU87QUFDckQsUUFBTSxvQkFBb0IsV0FBVyxXQUFXLEtBQUssS0FBSztBQUMxRCxRQUFNLFFBQVEsSUFBSSxPQUFPO0FBQUEsS0FBUSxpQkFBaUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQXNCLEVBQUUsS0FBSyxPQUFPO0FBQ3RGLE1BQUksZUFBZSxRQUFRLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxTQUFTO0FBRXBELFFBQU0sUUFBUSxVQUFNLDBCQUFhLCtCQUErQixFQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsTUFBTSxPQUFPO0FBQy9GLFFBQU0sa0JBQWtCLEtBQUssQ0FBQztBQUM5QixNQUFJLGFBQWE7QUFFakIsUUFBTSxVQUFVLFVBQU0sMEJBQWEsbUNBQW1DLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFFckYsTUFBSSxpQkFBaUI7QUFDbkIsaUJBQWEsR0FBRyxPQUFPLFlBQVksZUFBZSxNQUFNLFVBQVU7QUFBQSxFQUNwRSxPQUFPO0FBQ0wsaUJBQWEsR0FBRyxPQUFPLFlBQVksVUFBVTtBQUFBLEVBQy9DO0FBRUEsa0JBQWdCLHVCQUF1QixVQUFVO0FBQ2pELFNBQU87QUFDVDtBQVdBLGVBQXNCLHFCQUFxQixZQUFvQixrQkFBMEM7QUFDdkcsTUFBSTtBQUVKLE1BQUksa0JBQWtCO0FBQ3BCLFVBQU0sZUFBVyxpQ0FBb0IsdURBQXdCLFNBQVM7QUFDdEUsVUFBTSxZQUFZLFVBQU0sd0JBQWEsUUFBUTtBQUM3QyxnQkFBWSxVQUFVLElBQUksQ0FBQyxpQkFBYSxrQkFBSyxVQUFVLFFBQVEsQ0FBQztBQUFBLEVBQ2xFLE9BQU87QUFDTCxVQUFNLE1BQU0sSUFBSSxlQUFBQyxRQUFPO0FBQ3ZCLFFBQUksbUJBQWUsaUNBQW9CLDJEQUEwQixJQUFJLEdBQUcsMkRBQTBCLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxTQUFTLE1BQU0sQ0FBQztBQUVoSixVQUFNLFFBQVE7QUFBQSxNQUNaLDJEQUEwQjtBQUFBLE1BQzFCLDJEQUEwQjtBQUFBLE1BQzFCLDJEQUEwQjtBQUFBLE1BQzFCLDJEQUEwQjtBQUFBLElBQzVCO0FBRUEsZUFBVyxRQUFRLE9BQU87QUFDeEIsVUFBSSxpQkFBYSxpQ0FBb0IsSUFBSSxDQUFDO0FBQUEsSUFDNUM7QUFFQSxVQUFNLGFBQWEsVUFBTSwyQkFBZTtBQUN4QyxVQUFNLGtCQUFjLHFDQUFvQixrQkFBSywyREFBMEIsTUFBTSxHQUFHLFdBQVcsSUFBSSxJQUFJLFVBQVUsTUFBTSxDQUFDO0FBQ3BILFFBQUksU0FBUyxXQUFXO0FBQ3hCLGdCQUFZLENBQUMsV0FBVztBQUFBLEVBQzFCO0FBRUEsWUFBTSwwQkFBYSxDQUFDLE1BQU0sV0FBVyxVQUFVLFlBQVksR0FBRyxXQUFXLFdBQVcsSUFBSSxVQUFVLElBQUksZ0JBQWdCLEdBQUcsR0FBRztBQUFBLElBQzFILE9BQU87QUFBQSxJQUNQLE9BQU8sTUFBTSxnQkFBZ0IsVUFBVTtBQUFBLEVBQ3pDLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFsiVmVyc2lvblVwZGF0ZVR5cGUiLCAiQWRtWmlwIl0KfQo=
|
@@ -10,7 +10,6 @@
|
|
10
10
|
* with Obsidian plugins, if applicable, by updating relevant files and releasing
|
11
11
|
* new versions on GitHub.
|
12
12
|
*/
|
13
|
-
import { CliTaskResult } from "../cli.ts";
|
14
13
|
/**
|
15
14
|
* Enum representing different types of version updates.
|
16
15
|
*/
|
@@ -25,7 +24,7 @@ export declare enum VersionUpdateType {
|
|
25
24
|
/**
|
26
25
|
* Type representing the manifest file format for Obsidian plugins.
|
27
26
|
*/
|
28
|
-
export
|
27
|
+
export interface Manifest {
|
29
28
|
/**
|
30
29
|
* The minimum Obsidian version required for the plugin.
|
31
30
|
*/
|
@@ -34,16 +33,16 @@ export type Manifest = {
|
|
34
33
|
* The version of the plugin.
|
35
34
|
*/
|
36
35
|
version: string;
|
37
|
-
}
|
36
|
+
}
|
38
37
|
/**
|
39
38
|
* Type representing the structure of Obsidian releases JSON.
|
40
39
|
*/
|
41
|
-
export
|
40
|
+
export interface ObsidianReleasesJson {
|
42
41
|
/**
|
43
42
|
* The name of the Obsidian release.
|
44
43
|
*/
|
45
44
|
name: string;
|
46
|
-
}
|
45
|
+
}
|
47
46
|
/**
|
48
47
|
* Updates the version of the project based on the specified update type.
|
49
48
|
*
|
@@ -57,10 +56,10 @@ export type ObsidianReleasesJson = {
|
|
57
56
|
* 7. Adds updated files to Git, tags the commit, and pushes to the repository.
|
58
57
|
* 8. If an Obsidian plugin, copies the updated manifest and publishes a GitHub release.
|
59
58
|
*
|
60
|
-
* @param versionUpdateType - The type of version update to perform (major, minor, patch, beta, or
|
61
|
-
* @returns A
|
59
|
+
* @param versionUpdateType - The type of version update to perform (major, minor, patch, beta, or x.y.z[-beta:u]).
|
60
|
+
* @returns A promise that resolves when the version update is complete.
|
62
61
|
*/
|
63
|
-
export declare function updateVersion(versionUpdateType: string): Promise<
|
62
|
+
export declare function updateVersion(versionUpdateType: string): Promise<void>;
|
64
63
|
/**
|
65
64
|
* Validates the version update type to ensure it is either a recognized type
|
66
65
|
* or a valid manual version string.
|
package/dist/lib/url.cjs
CHANGED
@@ -26,7 +26,16 @@ __export(url_exports, {
|
|
26
26
|
isUrl: () => isUrl
|
27
27
|
});
|
28
28
|
module.exports = __toCommonJS(url_exports);
|
29
|
-
var __import_meta_url = globalThis["import.meta.url"] ?? (() =>
|
29
|
+
var __import_meta_url = globalThis["import.meta.url"] ?? (() => {
|
30
|
+
const normalizedPath = __filename.replace(/\\/g, "/");
|
31
|
+
const windowsDriveLetterMatch = /^([a-zA-Z]):/.exec(normalizedPath);
|
32
|
+
let path = normalizedPath;
|
33
|
+
if (windowsDriveLetterMatch) {
|
34
|
+
path = `/${windowsDriveLetterMatch[1].toUpperCase()}:${normalizedPath.slice(2)}`;
|
35
|
+
}
|
36
|
+
const encodedPath = encodeURIComponent(path).replace(/%2F/g, "/").replace(/%3A/g, ":");
|
37
|
+
return new URL(`file://${encodedPath}`);
|
38
|
+
})();
|
30
39
|
var __process = globalThis["process"] ?? {
|
31
40
|
"cwd": () => "/",
|
32
41
|
"env": {},
|
@@ -44,4 +53,4 @@ function isUrl(str) {
|
|
44
53
|
0 && (module.exports = {
|
45
54
|
isUrl
|
46
55
|
});
|
47
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3VybC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1tcImltcG9ydC5tZXRhLnVybFwiXSA/
|
56
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3VybC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1tcImltcG9ydC5tZXRhLnVybFwiXSA/PyAoKCk9Pntjb25zdCBub3JtYWxpemVkUGF0aD1fX2ZpbGVuYW1lLnJlcGxhY2UoL1xcXFwvZyxcIi9cIik7Y29uc3Qgd2luZG93c0RyaXZlTGV0dGVyTWF0Y2g9L14oW2EtekEtWl0pOi8uZXhlYyhub3JtYWxpemVkUGF0aCk7bGV0IHBhdGg9bm9ybWFsaXplZFBhdGg7aWYod2luZG93c0RyaXZlTGV0dGVyTWF0Y2gpe3BhdGg9YC8ke3dpbmRvd3NEcml2ZUxldHRlck1hdGNoWzFdLnRvVXBwZXJDYXNlKCl9OiR7bm9ybWFsaXplZFBhdGguc2xpY2UoMil9YH1jb25zdCBlbmNvZGVkUGF0aD1lbmNvZGVVUklDb21wb25lbnQocGF0aCkucmVwbGFjZSgvJTJGL2csXCIvXCIpLnJlcGxhY2UoLyUzQS9nLFwiOlwiKTtyZXR1cm4gbmV3IFVSTChgZmlsZTovLyR7ZW5jb2RlZFBhdGh9YCl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbXCJwcm9jZXNzXCJdID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIHVybFxuICogQ29udGFpbnMgYSB1dGlsaXR5IGZ1bmN0aW9uIGZvciB2YWxpZGF0aW5nIFVSTHMuXG4gKi9cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBVUkwsIGV4Y2x1ZGluZyBmaWxlIFVSTHMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gdmFsaWRhdGUgYXMgYSBVUkwuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIFVSTCBhbmQgbm90IGEgZmlsZSBVUkwsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVcmwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHN0cik7XG4gICAgcmV0dXJuIHVybC5wcm90b2NvbCAhPT0gJ2ZpbGU6JztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUk7QUFBQyxRQUFNLGlCQUFlLFdBQVcsUUFBUSxPQUFNLEdBQUc7QUFBRSxRQUFNLDBCQUF3QixlQUFlLEtBQUssY0FBYztBQUFFLE1BQUksT0FBSztBQUFlLE1BQUcseUJBQXdCO0FBQUMsV0FBSyxJQUFJLHdCQUF3QixDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksZUFBZSxNQUFNLENBQUMsQ0FBQztBQUFBLEVBQUU7QUFBQyxRQUFNLGNBQVksbUJBQW1CLElBQUksRUFBRSxRQUFRLFFBQU8sR0FBRyxFQUFFLFFBQVEsUUFBTyxHQUFHO0FBQUUsU0FBTyxJQUFJLElBQUksVUFBVSxXQUFXLEVBQUU7QUFBQyxHQUFHO0FBQ3BiLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7QUFZTyxTQUFTLE1BQU0sS0FBc0I7QUFDMUMsTUFBSTtBQUNGLFVBQU0sTUFBTSxJQUFJLElBQUksR0FBRztBQUN2QixXQUFPLElBQUksYUFBYTtBQUFBLEVBQzFCLFFBQVE7QUFDTixXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|