@mnaoumov/obsidian-dev-toolkit 2.1.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/README.md +5 -1
- package/bin/archive-demo-vault.mjs +8 -0
- package/bin/generate-coverage-badge.mjs +8 -0
- package/bundlers/esbuild-impl/feature-options/package.json +6 -0
- package/bundlers/obsidian-cli-reload/package.json +6 -0
- package/bundlers/obsidian-plugin-build/package.json +6 -0
- package/bundlers/obsidian-plugin-features/package.json +6 -0
- package/bundlers/obsidian-plugin-transforms/package.json +6 -0
- package/bundlers/obsidian-plugin-webpack-loader/package.json +6 -0
- package/bundlers/obsidian-plugins-folder-deployment/package.json +6 -0
- package/bundlers/parcel/package.json +6 -0
- package/bundlers/rollup/package.json +6 -0
- package/bundlers/rollup-compatible/package.json +6 -0
- package/bundlers/rollup-compatible-features/package.json +6 -0
- package/bundlers/vite/package.json +6 -0
- package/bundlers/webpack/package.json +6 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +3 -188
- package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +2 -18
- package/dist/lib/cjs/bundlers/esbuild-impl/feature-options.cjs +173 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/feature-options.d.cts +60 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +4 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +30 -82
- package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +7 -24
- package/dist/lib/cjs/bundlers/index.cjs +39 -3
- package/dist/lib/cjs/bundlers/index.d.cts +12 -0
- package/dist/lib/cjs/bundlers/obsidian-cli-reload.cjs +182 -0
- package/dist/lib/cjs/bundlers/obsidian-cli-reload.d.cts +37 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-build.cjs +278 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-build.d.cts +217 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-features.cjs +242 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-features.d.cts +186 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-transforms.cjs +306 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-transforms.d.cts +231 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-webpack-loader.cjs +182 -0
- package/dist/lib/cjs/bundlers/obsidian-plugin-webpack-loader.d.cts +47 -0
- package/dist/lib/cjs/bundlers/obsidian-plugins-folder-deployment.cjs +320 -0
- package/dist/lib/cjs/bundlers/obsidian-plugins-folder-deployment.d.cts +44 -0
- package/dist/lib/cjs/bundlers/parcel.cjs +462 -0
- package/dist/lib/cjs/bundlers/parcel.d.cts +128 -0
- package/dist/lib/cjs/bundlers/rollup-compatible-features.cjs +181 -0
- package/dist/lib/cjs/bundlers/rollup-compatible-features.d.cts +128 -0
- package/dist/lib/cjs/bundlers/rollup-compatible.cjs +138 -0
- package/dist/lib/cjs/bundlers/rollup-compatible.d.cts +84 -0
- package/dist/lib/cjs/bundlers/rollup.cjs +218 -0
- package/dist/lib/cjs/bundlers/rollup.d.cts +99 -0
- package/dist/lib/cjs/bundlers/vite.cjs +229 -0
- package/dist/lib/cjs/bundlers/vite.d.cts +105 -0
- package/dist/lib/cjs/bundlers/webpack.cjs +354 -0
- package/dist/lib/cjs/bundlers/webpack.d.cts +133 -0
- package/dist/lib/cjs/demo-vault-cli.cjs +131 -0
- package/dist/lib/cjs/demo-vault-cli.d.cts +15 -0
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/test-runners/coverage-badge-cli.cjs +160 -0
- package/dist/lib/cjs/test-runners/coverage-badge-cli.d.cts +25 -0
- package/dist/lib/cjs/test-runners/coverage-badge.cjs +279 -0
- package/dist/lib/cjs/test-runners/coverage-badge.d.cts +143 -0
- package/dist/lib/cjs/test-runners/e2e-runner-support.cjs +170 -0
- package/dist/lib/cjs/test-runners/e2e-runner-support.d.cts +36 -0
- package/dist/lib/cjs/test-runners/index.cjs +18 -3
- package/dist/lib/cjs/test-runners/index.d.cts +5 -0
- package/dist/lib/cjs/test-runners/obsidian-test-runner.cjs +147 -0
- package/dist/lib/cjs/test-runners/obsidian-test-runner.d.cts +42 -0
- package/dist/lib/cjs/test-runners/wdio-obsidian.cjs +205 -0
- package/dist/lib/cjs/test-runners/wdio-obsidian.d.cts +199 -0
- package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +2 -18
- package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +3 -192
- package/dist/lib/esm/bundlers/esbuild-impl/feature-options.d.mts +60 -0
- package/dist/lib/esm/bundlers/esbuild-impl/feature-options.mjs +82 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +3 -1
- package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +7 -24
- package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +41 -87
- package/dist/lib/esm/bundlers/index.d.mts +12 -0
- package/dist/lib/esm/bundlers/index.mjs +26 -2
- package/dist/lib/esm/bundlers/obsidian-cli-reload.d.mts +37 -0
- package/dist/lib/esm/bundlers/obsidian-cli-reload.mjs +83 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-build.d.mts +217 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-build.mjs +166 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-features.d.mts +186 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-features.mjs +126 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-transforms.d.mts +231 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-transforms.mjs +194 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-webpack-loader.d.mts +47 -0
- package/dist/lib/esm/bundlers/obsidian-plugin-webpack-loader.mjs +89 -0
- package/dist/lib/esm/bundlers/obsidian-plugins-folder-deployment.d.mts +44 -0
- package/dist/lib/esm/bundlers/obsidian-plugins-folder-deployment.mjs +228 -0
- package/dist/lib/esm/bundlers/parcel.d.mts +128 -0
- package/dist/lib/esm/bundlers/parcel.mjs +361 -0
- package/dist/lib/esm/bundlers/rollup-compatible-features.d.mts +128 -0
- package/dist/lib/esm/bundlers/rollup-compatible-features.mjs +93 -0
- package/dist/lib/esm/bundlers/rollup-compatible.d.mts +84 -0
- package/dist/lib/esm/bundlers/rollup-compatible.mjs +43 -0
- package/dist/lib/esm/bundlers/rollup.d.mts +99 -0
- package/dist/lib/esm/bundlers/rollup.mjs +130 -0
- package/dist/lib/esm/bundlers/vite.d.mts +105 -0
- package/dist/lib/esm/bundlers/vite.mjs +144 -0
- package/dist/lib/esm/bundlers/webpack.d.mts +133 -0
- package/dist/lib/esm/bundlers/webpack.mjs +259 -0
- package/dist/lib/esm/demo-vault-cli.d.mts +15 -0
- package/dist/lib/esm/demo-vault-cli.mjs +23 -0
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/test-runners/coverage-badge-cli.d.mts +25 -0
- package/dist/lib/esm/test-runners/coverage-badge-cli.mjs +51 -0
- package/dist/lib/esm/test-runners/coverage-badge.d.mts +143 -0
- package/dist/lib/esm/test-runners/coverage-badge.mjs +181 -0
- package/dist/lib/esm/test-runners/e2e-runner-support.d.mts +36 -0
- package/dist/lib/esm/test-runners/e2e-runner-support.mjs +61 -0
- package/dist/lib/esm/test-runners/index.d.mts +5 -0
- package/dist/lib/esm/test-runners/index.mjs +12 -2
- package/dist/lib/esm/test-runners/obsidian-test-runner.d.mts +42 -0
- package/dist/lib/esm/test-runners/obsidian-test-runner.mjs +52 -0
- package/dist/lib/esm/test-runners/wdio-obsidian.d.mts +199 -0
- package/dist/lib/esm/test-runners/wdio-obsidian.mjs +110 -0
- package/package.json +102 -4
- package/test-runners/coverage-badge/package.json +6 -0
- package/test-runners/coverage-badge-cli/package.json +6 -0
- package/test-runners/e2e-runner-support/package.json +6 -0
- package/test-runners/obsidian-test-runner/package.json +6 -0
- package/test-runners/wdio-obsidian/package.json +6 -0
- package/tsconfig/preact.json +7 -0
- package/tsconfig/react.json +7 -0
- package/tsconfig/solid.json +7 -0
- package/tsconfig/svelte.json +7 -0
- package/tsconfig/vue.json +7 -0
- package/types/styles.d.ts +32 -0
- package/types/wasm.d.ts +11 -0
|
@@ -108,14 +108,50 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
108
108
|
var bundlers_exports = {};
|
|
109
109
|
__export(bundlers_exports, {
|
|
110
110
|
esbuild: () => esbuild,
|
|
111
|
-
"esbuild-impl": () => esbuild_impl
|
|
111
|
+
"esbuild-impl": () => esbuild_impl,
|
|
112
|
+
"obsidian-cli-reload": () => obsidian_cli_reload,
|
|
113
|
+
"obsidian-plugin-build": () => obsidian_plugin_build,
|
|
114
|
+
"obsidian-plugin-features": () => obsidian_plugin_features,
|
|
115
|
+
"obsidian-plugin-transforms": () => obsidian_plugin_transforms,
|
|
116
|
+
"obsidian-plugin-webpack-loader": () => obsidian_plugin_webpack_loader,
|
|
117
|
+
"obsidian-plugins-folder-deployment": () => obsidian_plugins_folder_deployment,
|
|
118
|
+
parcel: () => parcel,
|
|
119
|
+
rollup: () => rollup,
|
|
120
|
+
"rollup-compatible": () => rollup_compatible,
|
|
121
|
+
"rollup-compatible-features": () => rollup_compatible_features,
|
|
122
|
+
vite: () => vite,
|
|
123
|
+
webpack: () => webpack
|
|
112
124
|
});
|
|
113
125
|
module.exports = __toCommonJS(bundlers_exports);
|
|
114
126
|
var esbuild_impl = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./esbuild-impl/index.cjs')), 1);
|
|
115
127
|
var esbuild = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./esbuild.cjs')), 1);
|
|
128
|
+
var obsidian_cli_reload = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./obsidian-cli-reload.cjs')), 1);
|
|
129
|
+
var obsidian_plugin_build = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./obsidian-plugin-build.cjs')), 1);
|
|
130
|
+
var obsidian_plugin_features = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./obsidian-plugin-features.cjs')), 1);
|
|
131
|
+
var obsidian_plugin_transforms = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./obsidian-plugin-transforms.cjs')), 1);
|
|
132
|
+
var obsidian_plugin_webpack_loader = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./obsidian-plugin-webpack-loader.cjs')), 1);
|
|
133
|
+
var obsidian_plugins_folder_deployment = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./obsidian-plugins-folder-deployment.cjs')), 1);
|
|
134
|
+
var parcel = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./parcel.cjs')), 1);
|
|
135
|
+
var rollup_compatible_features = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./rollup-compatible-features.cjs')), 1);
|
|
136
|
+
var rollup_compatible = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./rollup-compatible.cjs')), 1);
|
|
137
|
+
var rollup = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./rollup.cjs')), 1);
|
|
138
|
+
var vite = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./vite.cjs')), 1);
|
|
139
|
+
var webpack = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./webpack.cjs')), 1);
|
|
116
140
|
// Annotate the CommonJS export names for ESM import in node:
|
|
117
141
|
0 && (module.exports = {
|
|
118
142
|
esbuild,
|
|
119
|
-
"esbuild-impl": null
|
|
143
|
+
"esbuild-impl": null,
|
|
144
|
+
"obsidian-cli-reload": null,
|
|
145
|
+
"obsidian-plugin-build": null,
|
|
146
|
+
"obsidian-plugin-features": null,
|
|
147
|
+
"obsidian-plugin-transforms": null,
|
|
148
|
+
"obsidian-plugin-webpack-loader": null,
|
|
149
|
+
"obsidian-plugins-folder-deployment": null,
|
|
150
|
+
parcel,
|
|
151
|
+
rollup,
|
|
152
|
+
"rollup-compatible": null,
|
|
153
|
+
"rollup-compatible-features": null,
|
|
154
|
+
vite,
|
|
155
|
+
webpack
|
|
120
156
|
});
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2VzYnVpbGQtaW1wbCcgZnJvbSAnLi9lc2J1aWxkLWltcGwvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2VzYnVpbGQnIGZyb20gJy4vZXNidWlsZC50cyc7XG5leHBvcnQgKiBhcyAnb2JzaWRpYW4tY2xpLXJlbG9hZCcgZnJvbSAnLi9vYnNpZGlhbi1jbGktcmVsb2FkLnRzJztcbmV4cG9ydCAqIGFzICdvYnNpZGlhbi1wbHVnaW4tYnVpbGQnIGZyb20gJy4vb2JzaWRpYW4tcGx1Z2luLWJ1aWxkLnRzJztcbmV4cG9ydCAqIGFzICdvYnNpZGlhbi1wbHVnaW4tZmVhdHVyZXMnIGZyb20gJy4vb2JzaWRpYW4tcGx1Z2luLWZlYXR1cmVzLnRzJztcbmV4cG9ydCAqIGFzICdvYnNpZGlhbi1wbHVnaW4tdHJhbnNmb3JtcycgZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tdHJhbnNmb3Jtcy50cyc7XG5leHBvcnQgKiBhcyAnb2JzaWRpYW4tcGx1Z2luLXdlYnBhY2stbG9hZGVyJyBmcm9tICcuL29ic2lkaWFuLXBsdWdpbi13ZWJwYWNrLWxvYWRlci50cyc7XG5leHBvcnQgKiBhcyAnb2JzaWRpYW4tcGx1Z2lucy1mb2xkZXItZGVwbG95bWVudCcgZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW5zLWZvbGRlci1kZXBsb3ltZW50LnRzJztcbmV4cG9ydCAqIGFzICdwYXJjZWwnIGZyb20gJy4vcGFyY2VsLnRzJztcbmV4cG9ydCAqIGFzICdyb2xsdXAtY29tcGF0aWJsZS1mZWF0dXJlcycgZnJvbSAnLi9yb2xsdXAtY29tcGF0aWJsZS1mZWF0dXJlcy50cyc7XG5leHBvcnQgKiBhcyAncm9sbHVwLWNvbXBhdGlibGUnIGZyb20gJy4vcm9sbHVwLWNvbXBhdGlibGUudHMnO1xuZXhwb3J0ICogYXMgJ3JvbGx1cCcgZnJvbSAnLi9yb2xsdXAudHMnO1xuZXhwb3J0ICogYXMgJ3ZpdGUnIGZyb20gJy4vdml0ZS50cyc7XG5leHBvcnQgKiBhcyAnd2VicGFjaycgZnJvbSAnLi93ZWJwYWNrLnRzJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQSx3QkFBQUE7QUFBQSxFQUFBLDZCQUFBQztBQUFBLEVBQUEsK0JBQUFDO0FBQUEsRUFBQSxrQ0FBQUM7QUFBQSxFQUFBLG9DQUFBQztBQUFBLEVBQUEsd0NBQUFDO0FBQUEsRUFBQSw0Q0FBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQSw2QkFBQUM7QUFBQSxFQUFBLG9DQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQSxJQUFBUixlQUFnQztBQUNoQyxjQUEyQjtBQUMzQixJQUFBQyxzQkFBdUM7QUFDdkMsSUFBQUMsd0JBQXlDO0FBQ3pDLElBQUFDLDJCQUE0QztBQUM1QyxJQUFBQyw2QkFBOEM7QUFDOUMsSUFBQUMsaUNBQWtEO0FBQ2xELElBQUFDLHFDQUFzRDtBQUN0RCxhQUEwQjtBQUMxQixJQUFBRSw2QkFBOEM7QUFDOUMsSUFBQUQsb0JBQXFDO0FBQ3JDLGFBQTBCO0FBQzFCLFdBQXdCO0FBQ3hCLGNBQTJCOyIsIm5hbWVzIjpbImVzYnVpbGQtaW1wbCIsIm9ic2lkaWFuLWNsaS1yZWxvYWQiLCJvYnNpZGlhbi1wbHVnaW4tYnVpbGQiLCJvYnNpZGlhbi1wbHVnaW4tZmVhdHVyZXMiLCJvYnNpZGlhbi1wbHVnaW4tdHJhbnNmb3JtcyIsIm9ic2lkaWFuLXBsdWdpbi13ZWJwYWNrLWxvYWRlciIsIm9ic2lkaWFuLXBsdWdpbnMtZm9sZGVyLWRlcGxveW1lbnQiLCJyb2xsdXAtY29tcGF0aWJsZSIsInJvbGx1cC1jb21wYXRpYmxlLWZlYXR1cmVzIl19
|
|
@@ -1,3 +1,15 @@
|
|
|
1
1
|
/// <reference path="../library-references.d.cts" />
|
|
2
2
|
export * as 'esbuild-impl' from './esbuild-impl/index.cjs';
|
|
3
3
|
export * as 'esbuild' from './esbuild.cjs';
|
|
4
|
+
export * as 'obsidian-cli-reload' from './obsidian-cli-reload.cjs';
|
|
5
|
+
export * as 'obsidian-plugin-build' from './obsidian-plugin-build.cjs';
|
|
6
|
+
export * as 'obsidian-plugin-features' from './obsidian-plugin-features.cjs';
|
|
7
|
+
export * as 'obsidian-plugin-transforms' from './obsidian-plugin-transforms.cjs';
|
|
8
|
+
export * as 'obsidian-plugin-webpack-loader' from './obsidian-plugin-webpack-loader.cjs';
|
|
9
|
+
export * as 'obsidian-plugins-folder-deployment' from './obsidian-plugins-folder-deployment.cjs';
|
|
10
|
+
export * as 'parcel' from './parcel.cjs';
|
|
11
|
+
export * as 'rollup-compatible-features' from './rollup-compatible-features.cjs';
|
|
12
|
+
export * as 'rollup-compatible' from './rollup-compatible.cjs';
|
|
13
|
+
export * as 'rollup' from './rollup.cjs';
|
|
14
|
+
export * as 'vite' from './vite.cjs';
|
|
15
|
+
export * as 'webpack' from './webpack.cjs';
|
|
@@ -0,0 +1,182 @@
|
|
|
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
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
(function patchObsidianRequire() {
|
|
33
|
+
const originalRequire = require;
|
|
34
|
+
if (!originalRequire || originalRequire.__isPatched) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
require = Object.assign(
|
|
39
|
+
(id) => requirePatched(id),
|
|
40
|
+
originalRequire,
|
|
41
|
+
{
|
|
42
|
+
__isPatched: true
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
function extractDefault(module) {
|
|
47
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
51
|
+
'@codemirror/autocomplete',
|
|
52
|
+
'@codemirror/collab',
|
|
53
|
+
'@codemirror/commands',
|
|
54
|
+
'@codemirror/language',
|
|
55
|
+
'@codemirror/lint',
|
|
56
|
+
'@codemirror/search',
|
|
57
|
+
'@codemirror/state',
|
|
58
|
+
'@codemirror/text',
|
|
59
|
+
'@codemirror/view',
|
|
60
|
+
'@lezer/common',
|
|
61
|
+
'@lezer/highlight',
|
|
62
|
+
'@lezer/lr',
|
|
63
|
+
'obsidian']
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
67
|
+
'@codemirror/closebrackets',
|
|
68
|
+
'@codemirror/comment',
|
|
69
|
+
'@codemirror/fold',
|
|
70
|
+
'@codemirror/gutter',
|
|
71
|
+
'@codemirror/highlight',
|
|
72
|
+
'@codemirror/history',
|
|
73
|
+
'@codemirror/matchbrackets',
|
|
74
|
+
'@codemirror/panel',
|
|
75
|
+
'@codemirror/rangeset',
|
|
76
|
+
'@codemirror/rectangular-selection',
|
|
77
|
+
'@codemirror/stream-parser',
|
|
78
|
+
'@codemirror/tooltip']
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
function requirePatched(id) {
|
|
82
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
|
|
83
|
+
return originalRequire?.(id);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
|
|
87
|
+
if (globalThis.app.isMobile) {
|
|
88
|
+
if (id === 'process' || id === 'node:process') {
|
|
89
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
90
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
91
|
+
|
|
92
|
+
return process;
|
|
93
|
+
}
|
|
94
|
+
} else {
|
|
95
|
+
const module = originalRequire?.(id);
|
|
96
|
+
if (module) {
|
|
97
|
+
return extractDefault(module);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
102
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
103
|
+
return {};
|
|
104
|
+
}
|
|
105
|
+
})();
|
|
106
|
+
|
|
107
|
+
"use strict";
|
|
108
|
+
var __defProp = Object.defineProperty;
|
|
109
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
110
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
111
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
112
|
+
var __export = (target, all) => {
|
|
113
|
+
for (var name in all)
|
|
114
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
115
|
+
};
|
|
116
|
+
var __copyProps = (to, from, except, desc) => {
|
|
117
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
118
|
+
for (let key of __getOwnPropNames(from))
|
|
119
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
120
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
121
|
+
}
|
|
122
|
+
return to;
|
|
123
|
+
};
|
|
124
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
125
|
+
var obsidian_cli_reload_exports = {};
|
|
126
|
+
__export(obsidian_cli_reload_exports, {
|
|
127
|
+
OBSIDIAN_CLI_COMMAND: () => OBSIDIAN_CLI_COMMAND,
|
|
128
|
+
reloadPluginWithObsidianCli: () => reloadPluginWithObsidianCli
|
|
129
|
+
});
|
|
130
|
+
module.exports = __toCommonJS(obsidian_cli_reload_exports);
|
|
131
|
+
var import_exec = require('@mnaoumov/typescript-dev-toolkit/exec');
|
|
132
|
+
const OBSIDIAN_CLI_COMMAND = "obsidian";
|
|
133
|
+
const OBSIDIAN_CLI_SETUP_HINT = `Turn the Obsidian CLI on in Obsidian (Settings \u2192 General \u2192 Command line interface), make sure \`${OBSIDIAN_CLI_COMMAND}\` is on PATH, and keep Obsidian running. Or build with \`reload: 'hot-reload-plugin'\` instead.`;
|
|
134
|
+
async function reloadPluginWithObsidianCli(params) {
|
|
135
|
+
const { pluginId, vaultName } = params;
|
|
136
|
+
const reloadOutput = await runObsidianCli([`vault=${vaultName}`, "plugin:reload", `id=${pluginId}`]);
|
|
137
|
+
if (!isPluginNotFoundOutput(reloadOutput)) {
|
|
138
|
+
assertObsidianCliSucceeded(reloadOutput, `reload plugin '${pluginId}' in vault '${vaultName}'`);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const enableOutput = await runObsidianCli([`vault=${vaultName}`, "eval", `code=${getEnableNewPluginCode(pluginId)}`]);
|
|
142
|
+
assertObsidianCliSucceeded(enableOutput, `enable new plugin '${pluginId}' in vault '${vaultName}'`);
|
|
143
|
+
}
|
|
144
|
+
function assertObsidianCliSucceeded(output, action) {
|
|
145
|
+
if (output === "Vault not found." || output.startsWith("Error:")) {
|
|
146
|
+
throw new Error(`The Obsidian CLI could not ${action}: ${output}
|
|
147
|
+
${OBSIDIAN_CLI_SETUP_HINT}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function formatCommandFailure(result) {
|
|
151
|
+
return [result.stderr.trim(), result.stdout.trim()].filter(Boolean).join("\n") || `exit code ${String(result.exitCode)}`;
|
|
152
|
+
}
|
|
153
|
+
function getEnableNewPluginCode(pluginId) {
|
|
154
|
+
return `app.plugins.loadManifests().then(() => app.plugins.enablePluginAndSave(${JSON.stringify(pluginId)}))`;
|
|
155
|
+
}
|
|
156
|
+
function isPluginNotFoundOutput(output) {
|
|
157
|
+
return output.startsWith("Error: Plugin ") && output.includes(" not found");
|
|
158
|
+
}
|
|
159
|
+
async function runObsidianCli(cliArguments) {
|
|
160
|
+
let result;
|
|
161
|
+
try {
|
|
162
|
+
result = await (0, import_exec.exec)([OBSIDIAN_CLI_COMMAND, ...cliArguments], {
|
|
163
|
+
isQuiet: true,
|
|
164
|
+
shouldIgnoreExitCode: true,
|
|
165
|
+
shouldIncludeDetails: true
|
|
166
|
+
});
|
|
167
|
+
} catch (error) {
|
|
168
|
+
throw new Error(`The Obsidian CLI (\`${OBSIDIAN_CLI_COMMAND}\`) could not be started.
|
|
169
|
+
${OBSIDIAN_CLI_SETUP_HINT}`, { cause: error });
|
|
170
|
+
}
|
|
171
|
+
if (result.exitCode !== 0) {
|
|
172
|
+
throw new Error(`The Obsidian CLI (\`${OBSIDIAN_CLI_COMMAND}\`) failed: ${formatCommandFailure(result)}
|
|
173
|
+
${OBSIDIAN_CLI_SETUP_HINT}`);
|
|
174
|
+
}
|
|
175
|
+
return result.stdout.trim();
|
|
176
|
+
}
|
|
177
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
178
|
+
0 && (module.exports = {
|
|
179
|
+
OBSIDIAN_CLI_COMMAND,
|
|
180
|
+
reloadPluginWithObsidianCli
|
|
181
|
+
});
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9vYnNpZGlhbi1jbGktcmVsb2FkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZWxvYWRzIGEgZGVwbG95ZWQgZGV2ZWxvcG1lbnQgYnVpbGQgdGhyb3VnaCB0aGUgT2JzaWRpYW4gQ0xJIChgb2JzaWRpYW5gLCBPYnNpZGlhbiAxLjEyIGFuZCBsYXRlciksIGluIHRoZVxuICogT2JzaWRpYW4gdGhlIGRldmVsb3BlciBhbHJlYWR5IGhhcyBvcGVuLiBJdCBpcyB0aGUgYHJlbG9hZDogJ29ic2lkaWFuLWNsaSdgIGhhbGYgb2ZcbiAqIGBvYnNpZGlhbi1wbHVnaW5zLWZvbGRlci1kZXBsb3ltZW50LnRzYC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEV4ZWNSZXN1bHQgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9leGVjJztcblxuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2V4ZWMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZWxvYWRQbHVnaW5XaXRoT2JzaWRpYW5DbGl9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbG9hZFBsdWdpbldpdGhPYnNpZGlhbkNsaVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLCBmcm9tIGl0cyBgbWFuaWZlc3QuanNvbmAuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQncyBuYW1lIGFzIE9ic2lkaWFuIGtub3dzIGl0LCB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUgdmF1bHQncyBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSB2YXVsdE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgY29tbWFuZCB0aGUgT2JzaWRpYW4gQ0xJIGlzIHJ1biBhcy5cbiAqL1xuZXhwb3J0IGNvbnN0IE9CU0lESUFOX0NMSV9DT01NQU5EID0gJ29ic2lkaWFuJztcblxuY29uc3QgT0JTSURJQU5fQ0xJX1NFVFVQX0hJTlQgPSAnVHVybiB0aGUgT2JzaWRpYW4gQ0xJIG9uIGluIE9ic2lkaWFuIChTZXR0aW5ncyDihpIgR2VuZXJhbCDihpIgQ29tbWFuZCBsaW5lIGludGVyZmFjZSksIG1ha2Ugc3VyZSAnXG4gICsgYFxcYCR7T0JTSURJQU5fQ0xJX0NPTU1BTkR9XFxgIGlzIG9uIFBBVEgsIGFuZCBrZWVwIE9ic2lkaWFuIHJ1bm5pbmcuIE9yIGJ1aWxkIHdpdGggXFxgcmVsb2FkOiAnaG90LXJlbG9hZC1wbHVnaW4nXFxgIGluc3RlYWQuYDtcblxuLyoqXG4gKiBSZWxvYWRzIGEgcGx1Z2luIGluIHRoZSBydW5uaW5nIE9ic2lkaWFuIHRocm91Z2ggdGhlIE9ic2lkaWFuIENMSSwgZW5hYmxpbmcgaXQgZmlyc3Qgd2hlbiBPYnNpZGlhbiBkb2VzIG5vdFxuICoga25vdyBpdCB5ZXQuXG4gKlxuICogVGhlIENMSSBleGl0cyB3aXRoIGNvZGUgMCBldmVuIHdoZW4gdGhlIGNvbW1hbmQgZmFpbGVkLCBhbmQgc2F5cyBzbyBpbiBpdHMgb3V0cHV0IChgVmF1bHQgbm90IGZvdW5kLmAsXG4gKiBgRXJyb3I6IC4uLmApLCBzbyB0aGUgb3V0cHV0IGlzIHdoYXQgaXMgY2hlY2tlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBSZWxvYWRQbHVnaW5XaXRoT2JzaWRpYW5DbGlQYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgcmVsb2FkZWQuXG4gKiBAdGhyb3dzIFdoZW4gdGhlIENMSSBjYW5ub3QgYmUgcnVuLCBvciByZXBvcnRzIGEgZmFpbHVyZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbG9hZFBsdWdpbldpdGhPYnNpZGlhbkNsaShwYXJhbXM6IFJlbG9hZFBsdWdpbldpdGhPYnNpZGlhbkNsaVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHBsdWdpbklkLCB2YXVsdE5hbWUgfSA9IHBhcmFtcztcbiAgY29uc3QgcmVsb2FkT3V0cHV0ID0gYXdhaXQgcnVuT2JzaWRpYW5DbGkoW2B2YXVsdD0ke3ZhdWx0TmFtZX1gLCAncGx1Z2luOnJlbG9hZCcsIGBpZD0ke3BsdWdpbklkfWBdKTtcbiAgaWYgKCFpc1BsdWdpbk5vdEZvdW5kT3V0cHV0KHJlbG9hZE91dHB1dCkpIHtcbiAgICBhc3NlcnRPYnNpZGlhbkNsaVN1Y2NlZWRlZChyZWxvYWRPdXRwdXQsIGByZWxvYWQgcGx1Z2luICcke3BsdWdpbklkfScgaW4gdmF1bHQgJyR7dmF1bHROYW1lfSdgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlbmFibGVPdXRwdXQgPSBhd2FpdCBydW5PYnNpZGlhbkNsaShbYHZhdWx0PSR7dmF1bHROYW1lfWAsICdldmFsJywgYGNvZGU9JHtnZXRFbmFibGVOZXdQbHVnaW5Db2RlKHBsdWdpbklkKX1gXSk7XG4gIGFzc2VydE9ic2lkaWFuQ2xpU3VjY2VlZGVkKGVuYWJsZU91dHB1dCwgYGVuYWJsZSBuZXcgcGx1Z2luICcke3BsdWdpbklkfScgaW4gdmF1bHQgJyR7dmF1bHROYW1lfSdgKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0T2JzaWRpYW5DbGlTdWNjZWVkZWQob3V0cHV0OiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChvdXRwdXQgPT09ICdWYXVsdCBub3QgZm91bmQuJyB8fCBvdXRwdXQuc3RhcnRzV2l0aCgnRXJyb3I6JykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBPYnNpZGlhbiBDTEkgY291bGQgbm90ICR7YWN0aW9ufTogJHtvdXRwdXR9XFxuJHtPQlNJRElBTl9DTElfU0VUVVBfSElOVH1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRDb21tYW5kRmFpbHVyZShyZXN1bHQ6IEV4ZWNSZXN1bHQpOiBzdHJpbmcge1xuICByZXR1cm4gW3Jlc3VsdC5zdGRlcnIudHJpbSgpLCByZXN1bHQuc3Rkb3V0LnRyaW0oKV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpIHx8IGBleGl0IGNvZGUgJHtTdHJpbmcocmVzdWx0LmV4aXRDb2RlKX1gO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgY29kZSB0aGF0IGxvYWRzIHRoZSBwbHVnaW4gbWFuaWZlc3RzIGZyb20gZGlzayBhbmQgZW5hYmxlcyB0aGUgcGx1Z2luLCBmb3IgYSBwbHVnaW4gT2JzaWRpYW4gaGFzIG5vdFxuICogc2VlbiB5ZXQ6IHRoZSBDTEkncyBgcGx1Z2luOnJlbG9hZGAgYW5kIGBwbHVnaW46ZW5hYmxlYCBib3RoIGFuc3dlciBgbm90IGZvdW5kYCB1bnRpbCB0aGUgbWFuaWZlc3RzIGFyZSByZS1yZWFkLFxuICogd2hpY2ggT2JzaWRpYW4gb3RoZXJ3aXNlIGRvZXMgb25seSB3aGVuIGl0cyBDb21tdW5pdHkgcGx1Z2lucyBzZXR0aW5ncyBhcmUgb3BlbmVkLlxuICpcbiAqIEBwYXJhbSBwbHVnaW5JZCAtIFRoZSBwbHVnaW4gaWQuXG4gKiBAcmV0dXJucyBUaGUgY29kZSwgZm9yIHRoZSBDTEkncyBgZXZhbGAsIHdoaWNoIGF3YWl0cyB0aGUgcHJvbWlzZSBpdCBldmFsdWF0ZXMgdG8uXG4gKi9cbmZ1bmN0aW9uIGdldEVuYWJsZU5ld1BsdWdpbkNvZGUocGx1Z2luSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgYXBwLnBsdWdpbnMubG9hZE1hbmlmZXN0cygpLnRoZW4oKCkgPT4gYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luQW5kU2F2ZSgke0pTT04uc3RyaW5naWZ5KHBsdWdpbklkKX0pKWA7XG59XG5cbmZ1bmN0aW9uIGlzUGx1Z2luTm90Rm91bmRPdXRwdXQob3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIG91dHB1dC5zdGFydHNXaXRoKCdFcnJvcjogUGx1Z2luICcpICYmIG91dHB1dC5pbmNsdWRlcygnIG5vdCBmb3VuZCcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5PYnNpZGlhbkNsaShjbGlBcmd1bWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgbGV0IHJlc3VsdDogRXhlY1Jlc3VsdDtcbiAgdHJ5IHtcbiAgICByZXN1bHQgPSBhd2FpdCBleGVjKFtPQlNJRElBTl9DTElfQ09NTUFORCwgLi4uY2xpQXJndW1lbnRzXSwge1xuICAgICAgaXNRdWlldDogdHJ1ZSxcbiAgICAgIHNob3VsZElnbm9yZUV4aXRDb2RlOiB0cnVlLFxuICAgICAgc2hvdWxkSW5jbHVkZURldGFpbHM6IHRydWVcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBPYnNpZGlhbiBDTEkgKFxcYCR7T0JTSURJQU5fQ0xJX0NPTU1BTkR9XFxgKSBjb3VsZCBub3QgYmUgc3RhcnRlZC5cXG4ke09CU0lESUFOX0NMSV9TRVRVUF9ISU5UfWAsIHsgY2F1c2U6IGVycm9yIH0pO1xuICB9XG5cbiAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIE9ic2lkaWFuIENMSSAoXFxgJHtPQlNJRElBTl9DTElfQ09NTUFORH1cXGApIGZhaWxlZDogJHtmb3JtYXRDb21tYW5kRmFpbHVyZShyZXN1bHQpfVxcbiR7T0JTSURJQU5fQ0xJX1NFVFVQX0hJTlR9YCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LnN0ZG91dC50cmltKCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQSxrQkFBcUI7QUFvQmQsTUFBTSx1QkFBdUI7QUFFcEMsTUFBTSwwQkFBMEIsNkdBQ3ZCLG9CQUFvQjtBQWE3QixlQUFzQiw0QkFBNEIsUUFBMEQ7QUFDMUcsUUFBTSxFQUFFLFVBQVUsVUFBVSxJQUFJO0FBQ2hDLFFBQU0sZUFBZSxNQUFNLGVBQWUsQ0FBQyxTQUFTLFNBQVMsSUFBSSxpQkFBaUIsTUFBTSxRQUFRLEVBQUUsQ0FBQztBQUNuRyxNQUFJLENBQUMsdUJBQXVCLFlBQVksR0FBRztBQUN6QywrQkFBMkIsY0FBYyxrQkFBa0IsUUFBUSxlQUFlLFNBQVMsR0FBRztBQUM5RjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLGVBQWUsTUFBTSxlQUFlLENBQUMsU0FBUyxTQUFTLElBQUksUUFBUSxRQUFRLHVCQUF1QixRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ3BILDZCQUEyQixjQUFjLHNCQUFzQixRQUFRLGVBQWUsU0FBUyxHQUFHO0FBQ3BHO0FBRUEsU0FBUywyQkFBMkIsUUFBZ0IsUUFBc0I7QUFDeEUsTUFBSSxXQUFXLHNCQUFzQixPQUFPLFdBQVcsUUFBUSxHQUFHO0FBQ2hFLFVBQU0sSUFBSSxNQUFNLDhCQUE4QixNQUFNLEtBQUssTUFBTTtBQUFBLEVBQUssdUJBQXVCLEVBQUU7QUFBQSxFQUMvRjtBQUNGO0FBRUEsU0FBUyxxQkFBcUIsUUFBNEI7QUFDeEQsU0FBTyxDQUFDLE9BQU8sT0FBTyxLQUFLLEdBQUcsT0FBTyxPQUFPLEtBQUssQ0FBQyxFQUFFLE9BQU8sT0FBTyxFQUFFLEtBQUssSUFBSSxLQUFLLGFBQWEsT0FBTyxPQUFPLFFBQVEsQ0FBQztBQUN4SDtBQVVBLFNBQVMsdUJBQXVCLFVBQTBCO0FBQ3hELFNBQU8sMEVBQTBFLEtBQUssVUFBVSxRQUFRLENBQUM7QUFDM0c7QUFFQSxTQUFTLHVCQUF1QixRQUF5QjtBQUN2RCxTQUFPLE9BQU8sV0FBVyxnQkFBZ0IsS0FBSyxPQUFPLFNBQVMsWUFBWTtBQUM1RTtBQUVBLGVBQWUsZUFBZSxjQUFrRDtBQUM5RSxNQUFJO0FBQ0osTUFBSTtBQUNGLGFBQVMsVUFBTSxrQkFBSyxDQUFDLHNCQUFzQixHQUFHLFlBQVksR0FBRztBQUFBLE1BQzNELFNBQVM7QUFBQSxNQUNULHNCQUFzQjtBQUFBLE1BQ3RCLHNCQUFzQjtBQUFBLElBQ3hCLENBQUM7QUFBQSxFQUNILFNBQVMsT0FBTztBQUNkLFVBQU0sSUFBSSxNQUFNLHVCQUF1QixvQkFBb0I7QUFBQSxFQUE4Qix1QkFBdUIsSUFBSSxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQUEsRUFDdEk7QUFFQSxNQUFJLE9BQU8sYUFBYSxHQUFHO0FBQ3pCLFVBQU0sSUFBSSxNQUFNLHVCQUF1QixvQkFBb0IsZUFBZSxxQkFBcUIsTUFBTSxDQUFDO0FBQUEsRUFBSyx1QkFBdUIsRUFBRTtBQUFBLEVBQ3RJO0FBRUEsU0FBTyxPQUFPLE9BQU8sS0FBSztBQUM1QjsiLCJuYW1lcyI6W119
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Reloads a deployed development build through the Obsidian CLI (`obsidian`, Obsidian 1.12 and later), in the
|
|
6
|
+
* Obsidian the developer already has open. It is the `reload: 'obsidian-cli'` half of
|
|
7
|
+
* `obsidian-plugins-folder-deployment.ts`.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Parameters for {@link reloadPluginWithObsidianCli}.
|
|
11
|
+
*/
|
|
12
|
+
export interface ReloadPluginWithObsidianCliParams {
|
|
13
|
+
/**
|
|
14
|
+
* The plugin id, from its `manifest.json`.
|
|
15
|
+
*/
|
|
16
|
+
readonly pluginId: string;
|
|
17
|
+
/**
|
|
18
|
+
* The vault's name as Obsidian knows it, which is the name of the vault's folder.
|
|
19
|
+
*/
|
|
20
|
+
readonly vaultName: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The command the Obsidian CLI is run as.
|
|
24
|
+
*/
|
|
25
|
+
export declare const OBSIDIAN_CLI_COMMAND = "obsidian";
|
|
26
|
+
/**
|
|
27
|
+
* Reloads a plugin in the running Obsidian through the Obsidian CLI, enabling it first when Obsidian does not
|
|
28
|
+
* know it yet.
|
|
29
|
+
*
|
|
30
|
+
* The CLI exits with code 0 even when the command failed, and says so in its output (`Vault not found.`,
|
|
31
|
+
* `Error: ...`), so the output is what is checked.
|
|
32
|
+
*
|
|
33
|
+
* @param params - The {@link ReloadPluginWithObsidianCliParams}.
|
|
34
|
+
* @returns A {@link Promise} that resolves once the plugin is reloaded.
|
|
35
|
+
* @throws When the CLI cannot be run, or reports a failure.
|
|
36
|
+
*/
|
|
37
|
+
export declare function reloadPluginWithObsidianCli(params: ReloadPluginWithObsidianCliParams): Promise<void>;
|
|
@@ -0,0 +1,278 @@
|
|
|
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
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
(function patchObsidianRequire() {
|
|
33
|
+
const originalRequire = require;
|
|
34
|
+
if (!originalRequire || originalRequire.__isPatched) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
require = Object.assign(
|
|
39
|
+
(id) => requirePatched(id),
|
|
40
|
+
originalRequire,
|
|
41
|
+
{
|
|
42
|
+
__isPatched: true
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
function extractDefault(module) {
|
|
47
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
51
|
+
'@codemirror/autocomplete',
|
|
52
|
+
'@codemirror/collab',
|
|
53
|
+
'@codemirror/commands',
|
|
54
|
+
'@codemirror/language',
|
|
55
|
+
'@codemirror/lint',
|
|
56
|
+
'@codemirror/search',
|
|
57
|
+
'@codemirror/state',
|
|
58
|
+
'@codemirror/text',
|
|
59
|
+
'@codemirror/view',
|
|
60
|
+
'@lezer/common',
|
|
61
|
+
'@lezer/highlight',
|
|
62
|
+
'@lezer/lr',
|
|
63
|
+
'obsidian']
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
67
|
+
'@codemirror/closebrackets',
|
|
68
|
+
'@codemirror/comment',
|
|
69
|
+
'@codemirror/fold',
|
|
70
|
+
'@codemirror/gutter',
|
|
71
|
+
'@codemirror/highlight',
|
|
72
|
+
'@codemirror/history',
|
|
73
|
+
'@codemirror/matchbrackets',
|
|
74
|
+
'@codemirror/panel',
|
|
75
|
+
'@codemirror/rangeset',
|
|
76
|
+
'@codemirror/rectangular-selection',
|
|
77
|
+
'@codemirror/stream-parser',
|
|
78
|
+
'@codemirror/tooltip']
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
function requirePatched(id) {
|
|
82
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
|
|
83
|
+
return originalRequire?.(id);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
|
|
87
|
+
if (globalThis.app.isMobile) {
|
|
88
|
+
if (id === 'process' || id === 'node:process') {
|
|
89
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
90
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
91
|
+
|
|
92
|
+
return process;
|
|
93
|
+
}
|
|
94
|
+
} else {
|
|
95
|
+
const module = originalRequire?.(id);
|
|
96
|
+
if (module) {
|
|
97
|
+
return extractDefault(module);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
102
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
103
|
+
return {};
|
|
104
|
+
}
|
|
105
|
+
})();
|
|
106
|
+
|
|
107
|
+
"use strict";
|
|
108
|
+
var __create = Object.create;
|
|
109
|
+
var __defProp = Object.defineProperty;
|
|
110
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
111
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
112
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
113
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
114
|
+
var __export = (target, all) => {
|
|
115
|
+
for (var name in all)
|
|
116
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
117
|
+
};
|
|
118
|
+
var __copyProps = (to, from, except, desc) => {
|
|
119
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
120
|
+
for (let key of __getOwnPropNames(from))
|
|
121
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
122
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
123
|
+
}
|
|
124
|
+
return to;
|
|
125
|
+
};
|
|
126
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
127
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
128
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
129
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
130
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
131
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
132
|
+
mod
|
|
133
|
+
));
|
|
134
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
135
|
+
var obsidian_plugin_build_exports = {};
|
|
136
|
+
__export(obsidian_plugin_build_exports, {
|
|
137
|
+
BuildMode: () => BuildMode,
|
|
138
|
+
OBSIDIAN_PLUGIN_EXTERNALS: () => OBSIDIAN_PLUGIN_EXTERNALS,
|
|
139
|
+
OBSIDIAN_PLUGIN_RUNTIME_MODULES: () => OBSIDIAN_PLUGIN_RUNTIME_MODULES,
|
|
140
|
+
cleanObsidianPluginDistFolder: () => cleanObsidianPluginDistFolder,
|
|
141
|
+
completeObsidianPluginDistFolder: () => completeObsidianPluginDistFolder,
|
|
142
|
+
getObsidianPluginBanner: () => getObsidianPluginBanner,
|
|
143
|
+
getObsidianPluginDistFolder: () => getObsidianPluginDistFolder,
|
|
144
|
+
getObsidianPluginEntryPoint: () => getObsidianPluginEntryPoint,
|
|
145
|
+
isCssFileName: () => isCssFileName,
|
|
146
|
+
isObsidianPluginExternal: () => isObsidianPluginExternal,
|
|
147
|
+
mergeCssAssets: () => mergeCssAssets,
|
|
148
|
+
resolveFromRoot: () => resolveFromRoot,
|
|
149
|
+
resolveObsidianPluginBuildContext: () => resolveObsidianPluginBuildContext
|
|
150
|
+
});
|
|
151
|
+
module.exports = __toCommonJS(obsidian_plugin_build_exports);
|
|
152
|
+
var import_npm = require('@mnaoumov/typescript-dev-toolkit/npm');
|
|
153
|
+
var import_root = require('@mnaoumov/typescript-dev-toolkit/root');
|
|
154
|
+
var import_path = require('@mnaoumov/typescript-lib/path');
|
|
155
|
+
var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
|
|
156
|
+
var import_node_fs = require('node:fs');
|
|
157
|
+
var import_promises = require('node:fs/promises');
|
|
158
|
+
var import_node_module = require('node:module');
|
|
159
|
+
var import_node_process = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('node:process')), 1);
|
|
160
|
+
var import_obsidian_plugin_repo_paths = require('../obsidian-plugin-repo-paths.cjs');
|
|
161
|
+
var BuildMode = /* @__PURE__ */ ((BuildMode2) => {
|
|
162
|
+
BuildMode2[BuildMode2["Development"] = 0] = "Development";
|
|
163
|
+
BuildMode2[BuildMode2["Production"] = 1] = "Production";
|
|
164
|
+
return BuildMode2;
|
|
165
|
+
})(BuildMode || {});
|
|
166
|
+
const OBSIDIAN_PLUGIN_RUNTIME_MODULES = [
|
|
167
|
+
"obsidian",
|
|
168
|
+
"electron",
|
|
169
|
+
"@codemirror/autocomplete",
|
|
170
|
+
"@codemirror/collab",
|
|
171
|
+
"@codemirror/commands",
|
|
172
|
+
"@codemirror/language",
|
|
173
|
+
"@codemirror/lint",
|
|
174
|
+
"@codemirror/search",
|
|
175
|
+
"@codemirror/state",
|
|
176
|
+
"@codemirror/view",
|
|
177
|
+
"@lezer/common",
|
|
178
|
+
"@lezer/highlight",
|
|
179
|
+
"@lezer/lr",
|
|
180
|
+
"esbuild",
|
|
181
|
+
"eslint"
|
|
182
|
+
];
|
|
183
|
+
const OBSIDIAN_PLUGIN_EXTERNALS = [
|
|
184
|
+
...OBSIDIAN_PLUGIN_RUNTIME_MODULES,
|
|
185
|
+
...import_node_module.builtinModules
|
|
186
|
+
];
|
|
187
|
+
const NODE_PREFIX = "node:";
|
|
188
|
+
const STYLES_CSS_FILE_NAME = import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.StylesCss;
|
|
189
|
+
const OBSIDIAN_PLUGIN_EXTERNALS_SET = new Set(OBSIDIAN_PLUGIN_EXTERNALS);
|
|
190
|
+
async function cleanObsidianPluginDistFolder(distFolder) {
|
|
191
|
+
if ((0, import_node_fs.existsSync)(distFolder)) {
|
|
192
|
+
await (0, import_promises.rm)(distFolder, { recursive: true });
|
|
193
|
+
}
|
|
194
|
+
await (0, import_promises.mkdir)(distFolder, { recursive: true });
|
|
195
|
+
}
|
|
196
|
+
async function completeObsidianPluginDistFolder(context) {
|
|
197
|
+
await (0, import_promises.mkdir)(context.distFolder, { recursive: true });
|
|
198
|
+
if (!context.isProductionBuild && context.reload === "hot-reload-plugin") {
|
|
199
|
+
await (0, import_promises.writeFile)((0, import_path.join)(context.distFolder, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.HotReload), "", "utf-8");
|
|
200
|
+
}
|
|
201
|
+
const manifestPath = (0, import_root.resolvePathFromRoot)({ path: import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.ManifestJson });
|
|
202
|
+
if (manifestPath && (0, import_node_fs.existsSync)(manifestPath)) {
|
|
203
|
+
await (0, import_promises.cp)(manifestPath, (0, import_path.join)(context.distFolder, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.ManifestJson));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function getObsidianPluginBanner(bundlerName) {
|
|
207
|
+
return `/*
|
|
208
|
+
THIS IS A GENERATED/BUNDLED FILE BY ${bundlerName.toUpperCase()}
|
|
209
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
210
|
+
*/
|
|
211
|
+
`;
|
|
212
|
+
}
|
|
213
|
+
function getObsidianPluginDistFolder(mode) {
|
|
214
|
+
return resolveFromRoot(mode === 1 /* Production */ ? import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.DistBuild : import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.DistDev);
|
|
215
|
+
}
|
|
216
|
+
function getObsidianPluginEntryPoint() {
|
|
217
|
+
return resolveFromRoot((0, import_path.join)(import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.Src, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.MainTs));
|
|
218
|
+
}
|
|
219
|
+
function isCssFileName(fileName) {
|
|
220
|
+
return (0, import_path.basename)(fileName).toLowerCase().endsWith(".css");
|
|
221
|
+
}
|
|
222
|
+
function isObsidianPluginExternal(moduleId) {
|
|
223
|
+
if (moduleId.startsWith(NODE_PREFIX) || OBSIDIAN_PLUGIN_EXTERNALS_SET.has(moduleId)) {
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
const SCOPED_PACKAGE_SEGMENT_COUNT = 2;
|
|
227
|
+
const packageName = moduleId.split("/").slice(0, moduleId.startsWith("@") ? SCOPED_PACKAGE_SEGMENT_COUNT : 1).join("/");
|
|
228
|
+
return packageName !== moduleId && OBSIDIAN_PLUGIN_EXTERNALS_SET.has(packageName);
|
|
229
|
+
}
|
|
230
|
+
function mergeCssAssets(cssAssets) {
|
|
231
|
+
const [firstCssAsset] = cssAssets;
|
|
232
|
+
if (firstCssAsset === void 0 || cssAssets.length === 1 && firstCssAsset.fileName === STYLES_CSS_FILE_NAME) {
|
|
233
|
+
return { fileNamesToRemove: [], stylesCss: void 0 };
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
fileNamesToRemove: cssAssets.map((asset) => asset.fileName),
|
|
237
|
+
stylesCss: cssAssets.map((asset) => asset.source).join("\n")
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
function resolveFromRoot(path) {
|
|
241
|
+
return (0, import_type_guards.ensureNonNullable)((0, import_root.resolvePathFromRoot)({ path }), `Could not resolve '${path}' against the project root`);
|
|
242
|
+
}
|
|
243
|
+
async function resolveObsidianPluginBuildContext(params) {
|
|
244
|
+
const envPath = (0, import_root.resolvePathFromRoot)({ path: ".env" });
|
|
245
|
+
if (envPath && (0, import_node_fs.existsSync)(envPath)) {
|
|
246
|
+
(0, import_node_process.loadEnvFile)(envPath);
|
|
247
|
+
}
|
|
248
|
+
const obsidianPluginBuilderEnv = import_node_process.default.env;
|
|
249
|
+
const isProductionBuild = params.mode === 1 /* Production */;
|
|
250
|
+
const distFolder = params.distFolder === void 0 ? getObsidianPluginDistFolder(params.mode) : resolveFromRoot(params.distFolder);
|
|
251
|
+
const packageJson = await (0, import_npm.readPackageJson)();
|
|
252
|
+
return {
|
|
253
|
+
distFolder,
|
|
254
|
+
entryPoint: getObsidianPluginEntryPoint(),
|
|
255
|
+
isProductionBuild,
|
|
256
|
+
mainJsPath: (0, import_path.join)(distFolder, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.MainJs),
|
|
257
|
+
obsidianConfigFolder: params.obsidianConfigFolder ?? obsidianPluginBuilderEnv.OBSIDIAN_CONFIG_FOLDER ?? "",
|
|
258
|
+
pluginName: packageJson.name ?? "(unknown)",
|
|
259
|
+
reload: params.reload ?? "hot-reload-plugin"
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
263
|
+
0 && (module.exports = {
|
|
264
|
+
BuildMode,
|
|
265
|
+
OBSIDIAN_PLUGIN_EXTERNALS,
|
|
266
|
+
OBSIDIAN_PLUGIN_RUNTIME_MODULES,
|
|
267
|
+
cleanObsidianPluginDistFolder,
|
|
268
|
+
completeObsidianPluginDistFolder,
|
|
269
|
+
getObsidianPluginBanner,
|
|
270
|
+
getObsidianPluginDistFolder,
|
|
271
|
+
getObsidianPluginEntryPoint,
|
|
272
|
+
isCssFileName,
|
|
273
|
+
isObsidianPluginExternal,
|
|
274
|
+
mergeCssAssets,
|
|
275
|
+
resolveFromRoot,
|
|
276
|
+
resolveObsidianPluginBuildContext
|
|
277
|
+
});
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9vYnNpZGlhbi1wbHVnaW4tYnVpbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBidW5kbGVyLWluZGVwZW5kZW50IGhhbGYgb2YgYnVpbGRpbmcgYW4gT2JzaWRpYW4gcGx1Z2luOiB3aGljaCBtb2R1bGVzIHN0YXkgZXh0ZXJuYWwsIHdoZXJlIHRoZVxuICogb3V0cHV0IGdvZXMsIHdoYXQgdGhlIG91dHB1dCBmb2xkZXIgaG9sZHMgYmVzaWRlcyB0aGUgYnVuZGxlLCBhbmQgaG93IGEgZGV2ZWxvcG1lbnQgYnVpbGQgcmVhY2hlcyB0aGVcbiAqIHZhdWx0LiBFdmVyeSBidW5kbGVyIGFkYXB0ZXIgaW4gdGhpcyBmb2xkZXIgKGVzYnVpbGQsIHJvbGx1cCwgdml0ZSwgd2VicGFjaywgcGFyY2VsKSBpcyBhIHRoaW4gbGF5ZXIgb3ZlclxuICogaXQsIHNvIGFsbCBvZiB0aGVtIHByb2R1Y2UgdGhlIHNhbWUgYG1haW4uanNgICsgYHN0eWxlcy5jc3NgICsgYG1hbmlmZXN0Lmpzb25gIGxheW91dC5cbiAqL1xuXG5pbXBvcnQgeyByZWFkUGFja2FnZUpzb24gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9ucG0nO1xuaW1wb3J0IHsgcmVzb2x2ZVBhdGhGcm9tUm9vdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L3Jvb3QnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIG1rZGlyLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgYnVpbHRpbk1vZHVsZXMgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgcHJvY2VzcywgeyBsb2FkRW52RmlsZSB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4tcGx1Z2luLXJlcG8tcGF0aHMudHMnO1xuXG4vKipcbiAqIEVudW1lcmF0aW9uIHJlcHJlc2VudGluZyB0aGUgYnVpbGQgbW9kZXMuXG4gKi9cbmV4cG9ydCBlbnVtIEJ1aWxkTW9kZSB7XG4gIC8qKlxuICBEZXZlbG9wbWVudCBtb2RlIGZvciBidWlsZGluZyB0aGUgcGx1Z2luXG4gICAqL1xuICBEZXZlbG9wbWVudCxcbiAgLyoqXG4gIFByb2R1Y3Rpb24gbW9kZSBmb3IgYnVpbGRpbmcgdGhlIHBsdWdpblxuICAgKi9cbiAgUHJvZHVjdGlvblxufVxuXG4vKipcbiAqIFRoZSBtb2R1bGVzIE9ic2lkaWFuIHN1cHBsaWVzIGF0IHJ1bnRpbWUuIEEgcGx1Z2luIG11c3QgbmV2ZXIgYnVuZGxlIGl0cyBvd24gY29weSBvZiB0aGVtOiBhIHNlY29uZCBjb3B5XG4gKiBvZiB0aGUgQVBJIGJyZWFrcyBgaW5zdGFuY2VvZmAgYWdhaW5zdCB0aGUgcnVubmluZyBvbmUsIGFuZCBhIHNlY29uZCBDb2RlTWlycm9yIGJyZWFrcyBldmVyeSBleHRlbnNpb24uXG4gKlxuICogYGVzYnVpbGRgIGFuZCBgZXNsaW50YCBhcmUgaGVyZSBiZWNhdXNlIGEgcGx1Z2luIHRoYXQgaW1wb3J0cyBvbmUgb2YgdGhlIHRvb2xraXQncyBidWlsZC10aW1lIG1vZHVsZXNcbiAqIHdvdWxkIG90aGVyd2lzZSBkcmFnIGVpdGhlciBpbnRvIGBtYWluLmpzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IE9CU0lESUFOX1BMVUdJTl9SVU5USU1FX01PRFVMRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnb2JzaWRpYW4nLFxuICAnZWxlY3Ryb24nLFxuICAnQGNvZGVtaXJyb3IvYXV0b2NvbXBsZXRlJyxcbiAgJ0Bjb2RlbWlycm9yL2NvbGxhYicsXG4gICdAY29kZW1pcnJvci9jb21tYW5kcycsXG4gICdAY29kZW1pcnJvci9sYW5ndWFnZScsXG4gICdAY29kZW1pcnJvci9saW50JyxcbiAgJ0Bjb2RlbWlycm9yL3NlYXJjaCcsXG4gICdAY29kZW1pcnJvci9zdGF0ZScsXG4gICdAY29kZW1pcnJvci92aWV3JyxcbiAgJ0BsZXplci9jb21tb24nLFxuICAnQGxlemVyL2hpZ2hsaWdodCcsXG4gICdAbGV6ZXIvbHInLFxuICAnZXNidWlsZCcsXG4gICdlc2xpbnQnXG5dO1xuXG4vKipcbiAqIFRoZSBtb2R1bGUgaWRzIGFuIE9ic2lkaWFuIHBsdWdpbiBidW5kbGUgbGVhdmVzIHRvIGByZXF1aXJlKClgIGF0IHJ1bnRpbWU6IHRoZVxuICoge0BsaW5rIE9CU0lESUFOX1BMVUdJTl9SVU5USU1FX01PRFVMRVN9IGFuZCB0aGUgTm9kZSBidWlsdGlucy4gRXZlcnkgYG5vZGU6YC1wcmVmaXhlZCBpZCBpcyBleHRlcm5hbCB0b28sXG4gKiB3aGljaCBhIGJ1bmRsZXIgdGFrZXMgYXMgYSBwYXR0ZXJuIChlc2J1aWxkJ3MgYG5vZGU6KmApIG9yIHRocm91Z2gge0BsaW5rIGlzT2JzaWRpYW5QbHVnaW5FeHRlcm5hbH0uXG4gKi9cbmV4cG9ydCBjb25zdCBPQlNJRElBTl9QTFVHSU5fRVhURVJOQUxTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgLi4uT0JTSURJQU5fUExVR0lOX1JVTlRJTUVfTU9EVUxFUyxcbiAgLi4uYnVpbHRpbk1vZHVsZXNcbl07XG5cbmNvbnN0IE5PREVfUFJFRklYID0gJ25vZGU6JztcbmNvbnN0IFNUWUxFU19DU1NfRklMRV9OQU1FOiBzdHJpbmcgPSBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TdHlsZXNDc3M7XG5cbmNvbnN0IE9CU0lESUFOX1BMVUdJTl9FWFRFUk5BTFNfU0VUID0gbmV3IFNldChPQlNJRElBTl9QTFVHSU5fRVhURVJOQUxTKTtcblxuLyoqXG4gKiBBIENTUyBmaWxlIGEgYnVuZGxlciBlbWl0dGVkLCBhcyB7QGxpbmsgbWVyZ2VDc3NBc3NldHN9IHNlZXMgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3NzQXNzZXQge1xuICAvKipcbiAgICogVGhlIGZpbGUgbmFtZSByZWxhdGl2ZSB0byB0aGUgb3V0cHV0IGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlJ3MgY29udGVudHMuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBXaGF0IHtAbGluayBtZXJnZUNzc0Fzc2V0c30gZGVjaWRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXJnZUNzc0Fzc2V0c1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBuYW1lcyB0byBkcm9wIGZyb20gdGhlIG91dHB1dCwgYmVjYXVzZSB0aGVpciBjb250ZW50cyBtb3ZlZCBpbnRvIGBzdHlsZXMuY3NzYC4gSW5jbHVkZXNcbiAgICogYHN0eWxlcy5jc3NgIGl0c2VsZiB3aGVuIHRoZSBidW5kbGVyIGFscmVhZHkgZW1pdHRlZCBvbmUsIHNvIGl0IGlzIGFsd2F5cyB3cml0dGVuIGFmcmVzaC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVOYW1lc1RvUmVtb3ZlOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnRzIG9mIGBzdHlsZXMuY3NzYCwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvOiB0aGUgYnVuZGxlIGhhcyBubyBDU1MgYXQgYWxsLFxuICAgKiBvciBpdHMgb25lIENTUyBmaWxlIGFscmVhZHkgaXMgYHN0eWxlcy5jc3NgLlxuICAgKi9cbiAgcmVhZG9ubHkgc3R5bGVzQ3NzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogV2hlcmUgYSBwbHVnaW4gYnVpbGQgd3JpdGVzIGl0cyBvdXRwdXQgYW5kIHdoYXQgaXQgYnVpbGRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2lkaWFuUGx1Z2luQnVpbGRDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmb2xkZXIgdGhlIGJ1aWxkIHdyaXRlcyBgbWFpbi5qc2AsIGBzdHlsZXMuY3NzYCBhbmQgYG1hbmlmZXN0Lmpzb25gIGludG8uXG4gICAqL1xuICByZWFkb25seSBkaXN0Rm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBwbHVnaW4ncyBlbnRyeSBwb2ludCwgYHNyYy9tYWluLnRzYC5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5UG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGlzIGEgcHJvZHVjdGlvbiBidWlsZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzUHJvZHVjdGlvbkJ1aWxkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZW1pdHRlZCBgbWFpbi5qc2AuXG4gICAqL1xuICByZWFkb25seSBtYWluSnNQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBjb25maWd1cmF0aW9uIGZvbGRlciBhIGRldmVsb3BtZW50IGJ1aWxkIGlzIGRlcGxveWVkIGludG8sIG9yIGFuIGVtcHR5IHN0cmluZyB3aGVuIG5vbmVcbiAgICogaXMgY29uZmlndXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuQ29uZmlnRm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBmb2xkZXIgbmFtZSBpbnNpZGUgYDx2YXVsdD4vLm9ic2lkaWFuL3BsdWdpbnNgLCB3aGljaCBpcyB0aGUgcGFja2FnZSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3cgYSBkZXZlbG9wbWVudCBidWlsZCBpcyByZWxvYWRlZCBpbiBPYnNpZGlhbiBvbmNlIGl0IGlzIGRlcGxveWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVsb2FkOiBPYnNpZGlhblBsdWdpblJlbG9hZDtcbn1cblxuLyoqXG4gKiBXaGVyZSBhIGRldmVsb3BtZW50IGJ1aWxkIGlzIGRlcGxveWVkIGFuZCBob3cgT2JzaWRpYW4gcGlja3MgaXQgdXAuIEV2ZXJ5IGJ1bmRsZXIgYWRhcHRlciB0YWtlcyB0aGVzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNpZGlhblBsdWdpbkRlcGxveW1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZm9sZGVyIGZvciBPYnNpZGlhbiBjb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byB0aGUgYE9CU0lESUFOX0NPTkZJR19GT0xERVJgIGVudmlyb25tZW50IHZhcmlhYmxlLFxuICAgKiByZWFkIGZyb20gdGhlIHByb2Nlc3Mgb3IgZnJvbSBhIGAuZW52YCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhbkNvbmZpZ0ZvbGRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogSG93IGEgZGV2ZWxvcG1lbnQgYnVpbGQgaXMgcmVsb2FkZWQgaW4gT2JzaWRpYW4gb25jZSBpdCBpcyBjb3BpZWQgaW50byB0aGUgdmF1bHQuIERlZmF1bHRzIHRvXG4gICAqIGAnaG90LXJlbG9hZC1wbHVnaW4nYC5cbiAgICovXG4gIHJlYWRvbmx5IHJlbG9hZD86IE9ic2lkaWFuUGx1Z2luUmVsb2FkO1xufVxuXG4vKipcbiAqIEhvdyBhIGRldmVsb3BtZW50IGJ1aWxkIGlzIHJlbG9hZGVkIGluIE9ic2lkaWFuIG9uY2UgaXQgaXMgY29waWVkIGludG8gdGhlIHZhdWx0LlxuICpcbiAqIC0gYCdob3QtcmVsb2FkLXBsdWdpbidgOiB0aGUgYnVpbGQgd3JpdGVzIHRoZSBgLmhvdHJlbG9hZGAgbWFya2VyLCBhbmQgYG5wbSBydW4gZGV2YCBvcGVucyB0aGUgdmF1bHQgaW4gYW5cbiAqICAgT2JzaWRpYW4gaW5zdGFuY2UgaXQgb3ducywgd2l0aCB0aGUgSG90UmVsb2FkIHBsdWdpbiBpbnN0YWxsZWQgYW5kIGVuYWJsZWQgdGhlcmUuXG4gKiAtIGAnb2JzaWRpYW4tY2xpJ2A6IGV2ZXJ5IHJlYnVpbGQgcnVucyBgb2JzaWRpYW4gcGx1Z2luOnJlbG9hZGAgYWdhaW5zdCB0aGUgT2JzaWRpYW4geW91IGFscmVhZHkgaGF2ZSBvcGVuLFxuICogICB0aHJvdWdoIHRoZSBPYnNpZGlhbiBDTEkgKFNldHRpbmdzIOKGkiBHZW5lcmFsIOKGkiBDb21tYW5kIGxpbmUgaW50ZXJmYWNlKS4gTm8gSG90UmVsb2FkLCBubyBzZWNvbmQgaW5zdGFuY2UuXG4gKiAtIGBmYWxzZWA6IHRoZSBidWlsZCBpcyBjb3BpZWQgaW50byB0aGUgdmF1bHQgYW5kIG5vdGhpbmcgcmVsb2FkcyBpdC5cbiAqL1xuZXhwb3J0IHR5cGUgT2JzaWRpYW5QbHVnaW5SZWxvYWQgPSAnaG90LXJlbG9hZC1wbHVnaW4nIHwgJ29ic2lkaWFuLWNsaScgfCBmYWxzZTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVzb2x2ZU9ic2lkaWFuUGx1Z2luQnVpbGRDb250ZXh0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlT2JzaWRpYW5QbHVnaW5CdWlsZENvbnRleHRQYXJhbXMgZXh0ZW5kcyBPYnNpZGlhblBsdWdpbkRlcGxveW1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBvdXRwdXQgZm9sZGVyLiBEZWZhdWx0cyB0byBgZGlzdC9idWlsZGAgZm9yIGEgcHJvZHVjdGlvbiBidWlsZCBhbmQgYGRpc3QvZGV2YCBmb3IgYSBkZXZlbG9wbWVudFxuICAgKiBvbmUuXG4gICAqL1xuICByZWFkb25seSBkaXN0Rm9sZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYnVpbGQgbW9kZS5cbiAgICovXG4gIHJlYWRvbmx5IG1vZGU6IEJ1aWxkTW9kZTtcbn1cblxuaW50ZXJmYWNlIE9ic2lkaWFuUGx1Z2luQnVpbGRlckVudiB7XG4gIE9CU0lESUFOX0NPTkZJR19GT0xERVI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBvdXRwdXQgZm9sZGVyIG9mIGEgYnVpbGQgYW5kIGNyZWF0ZXMgaXQgZW1wdHkgYWdhaW4uXG4gKlxuICogQHBhcmFtIGRpc3RGb2xkZXIgLSBUaGUgb3V0cHV0IGZvbGRlci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgZm9sZGVyIGV4aXN0cyBhbmQgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhbk9ic2lkaWFuUGx1Z2luRGlzdEZvbGRlcihkaXN0Rm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGV4aXN0c1N5bmMoZGlzdEZvbGRlcikpIHtcbiAgICBhd2FpdCBybShkaXN0Rm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgfVxuICBhd2FpdCBta2RpcihkaXN0Rm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBQdXRzIHRoZSBmaWxlcyBhIHBsdWdpbiBmb2xkZXIgbmVlZHMgYmVzaWRlcyB0aGUgYnVuZGxlIGludG8gdGhlIG91dHB1dCBmb2xkZXI6IGBtYW5pZmVzdC5qc29uYCwgYW5kIGZvclxuICogYSBkZXZlbG9wbWVudCBidWlsZCByZWxvYWRlZCBieSB0aGUgSG90UmVsb2FkIHBsdWdpbiB0aGUgZW1wdHkgYC5ob3RyZWxvYWRgIG1hcmtlciBpdCB3YXRjaGVzIGZvci5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCAtIFRoZSBidWlsZCBjb250ZXh0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBmaWxlcyBhcmUgd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbXBsZXRlT2JzaWRpYW5QbHVnaW5EaXN0Rm9sZGVyKGNvbnRleHQ6IE9ic2lkaWFuUGx1Z2luQnVpbGRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG1rZGlyKGNvbnRleHQuZGlzdEZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGlmICghY29udGV4dC5pc1Byb2R1Y3Rpb25CdWlsZCAmJiBjb250ZXh0LnJlbG9hZCA9PT0gJ2hvdC1yZWxvYWQtcGx1Z2luJykge1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKGNvbnRleHQuZGlzdEZvbGRlciwgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuSG90UmVsb2FkKSwgJycsICd1dGYtOCcpO1xuICB9XG5cbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdCh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbiB9KTtcbiAgaWYgKG1hbmlmZXN0UGF0aCAmJiBleGlzdHNTeW5jKG1hbmlmZXN0UGF0aCkpIHtcbiAgICBhd2FpdCBjcChtYW5pZmVzdFBhdGgsIGpvaW4oY29udGV4dC5kaXN0Rm9sZGVyLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYW5pZmVzdEpzb24pKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYmFubmVyIHBsYWNlZCBhdCB0aGUgdG9wIG9mIGBtYWluLmpzYC5cbiAqXG4gKiBAcGFyYW0gYnVuZGxlck5hbWUgLSBUaGUgYnVuZGxlcidzIG5hbWUsIGFzIHRoZSBiYW5uZXIgc3RhdGVzIGl0LlxuICogQHJldHVybnMgVGhlIGJhbm5lciwgYSBibG9jayBjb21tZW50IGZvbGxvd2VkIGJ5IGEgbmV3bGluZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9ic2lkaWFuUGx1Z2luQmFubmVyKGJ1bmRsZXJOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYC8qXG5USElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSAke2J1bmRsZXJOYW1lLnRvVXBwZXJDYXNlKCl9XG5pZiB5b3Ugd2FudCB0byB2aWV3IHRoZSBzb3VyY2UsIHBsZWFzZSB2aXNpdCB0aGUgZ2l0aHViIHJlcG9zaXRvcnkgb2YgdGhpcyBwbHVnaW5cbiovXG5gO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBkZWZhdWx0IG91dHB1dCBmb2xkZXIgb2YgYSBidWlsZDogYGRpc3QvYnVpbGRgIGZvciBhIHByb2R1Y3Rpb24gYnVpbGQsIGBkaXN0L2RldmAgZm9yIGFcbiAqIGRldmVsb3BtZW50IG9uZS5cbiAqXG4gKiBAcGFyYW0gbW9kZSAtIFRoZSBidWlsZCBtb2RlLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIG91dHB1dCBmb2xkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPYnNpZGlhblBsdWdpbkRpc3RGb2xkZXIobW9kZTogQnVpbGRNb2RlKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc29sdmVGcm9tUm9vdChtb2RlID09PSBCdWlsZE1vZGUuUHJvZHVjdGlvbiA/IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3RCdWlsZCA6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3REZXYpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBwbHVnaW4ncyBlbnRyeSBwb2ludCwgYHNyYy9tYWluLnRzYC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZW50cnkgcG9pbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPYnNpZGlhblBsdWdpbkVudHJ5UG9pbnQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc29sdmVGcm9tUm9vdChqb2luKE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlNyYywgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFpblRzKSk7XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBhIGZpbGUgbmFtZSBpcyBhIENTUyBmaWxlLlxuICpcbiAqIEBwYXJhbSBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgZm9yIGEgYC5jc3NgIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Nzc0ZpbGVOYW1lKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGJhc2VuYW1lKGZpbGVOYW1lKS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcuY3NzJyk7XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBhIG1vZHVsZSBpZCBpcyBvbmUgYW4gT2JzaWRpYW4gcGx1Z2luIGJ1bmRsZSBtdXN0IGxlYXZlIGV4dGVybmFsOiBvbmUgb2ZcbiAqIHtAbGluayBPQlNJRElBTl9QTFVHSU5fRVhURVJOQUxTfSwgYSBzdWJwYXRoIG9mIG9uZSAoYEBjb2RlbWlycm9yL3ZpZXcvZGlzdC9pbmRleC5qc2AsIGBmcy9wcm9taXNlc2ApLFxuICogb3IgYW55IGBub2RlOmAtcHJlZml4ZWQgaWQuXG4gKlxuICogQHBhcmFtIG1vZHVsZUlkIC0gVGhlIG1vZHVsZSBpZCBhcyB3cml0dGVuIGluIHRoZSBpbXBvcnRpbmcgZmlsZS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBidW5kbGUgbXVzdCBsZWF2ZSB0aGUgbW9kdWxlIHRvIGByZXF1aXJlKClgIGF0IHJ1bnRpbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09ic2lkaWFuUGx1Z2luRXh0ZXJuYWwobW9kdWxlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAobW9kdWxlSWQuc3RhcnRzV2l0aChOT0RFX1BSRUZJWCkgfHwgT0JTSURJQU5fUExVR0lOX0VYVEVSTkFMU19TRVQuaGFzKG1vZHVsZUlkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgU0NPUEVEX1BBQ0tBR0VfU0VHTUVOVF9DT1VOVCA9IDI7XG4gIGNvbnN0IHBhY2thZ2VOYW1lID0gbW9kdWxlSWQuc3BsaXQoJy8nKS5zbGljZSgwLCBtb2R1bGVJZC5zdGFydHNXaXRoKCdAJykgPyBTQ09QRURfUEFDS0FHRV9TRUdNRU5UX0NPVU5UIDogMSkuam9pbignLycpO1xuICByZXR1cm4gcGFja2FnZU5hbWUgIT09IG1vZHVsZUlkICYmIE9CU0lESUFOX1BMVUdJTl9FWFRFUk5BTFNfU0VULmhhcyhwYWNrYWdlTmFtZSk7XG59XG5cbi8qKlxuICogRGVjaWRlcyBob3cgdGhlIENTUyBhIGJ1bmRsZXIgZW1pdHRlZCBiZWNvbWVzIHRoZSBvbmUgYHN0eWxlcy5jc3NgIE9ic2lkaWFuIGxvYWRzLlxuICpcbiAqIE9ic2lkaWFuIHJlYWRzIGEgcGx1Z2luJ3Mgc3R5bGVzaGVldCBmcm9tIGBzdHlsZXMuY3NzYCBhbmQgbm90aGluZyBlbHNlLCB3aGlsZSBhIGJ1bmRsZXIgbmFtZXMgdGhlIENTU1xuICogYWZ0ZXIgdGhlIGVudHJ5IChgbWFpbi5jc3NgKSwgYWZ0ZXIgdGhlIHBhY2thZ2UsIG9yIHdpdGggYSBjb250ZW50IGhhc2guIEEgbG9uZSBDU1MgZmlsZSBpcyByZW5hbWVkOyB3aGVuXG4gKiB0aGVyZSBhcmUgc2V2ZXJhbCwgdGhleSBhcmUgY29uY2F0ZW5hdGVkIGluIHRoZSBvcmRlciBnaXZlbi5cbiAqXG4gKiBAcGFyYW0gY3NzQXNzZXRzIC0gVGhlIENTUyBmaWxlcyB0aGUgYnVuZGxlciBlbWl0dGVkLCBpbiBvdXRwdXQgb3JkZXIuXG4gKiBAcmV0dXJucyBXaGF0IHRvIHdyaXRlIGFzIGBzdHlsZXMuY3NzYCBhbmQgd2hpY2ggZW1pdHRlZCBmaWxlcyB0byBkcm9wLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDc3NBc3NldHMoY3NzQXNzZXRzOiByZWFkb25seSBDc3NBc3NldFtdKTogTWVyZ2VDc3NBc3NldHNSZXN1bHQge1xuICBjb25zdCBbZmlyc3RDc3NBc3NldF0gPSBjc3NBc3NldHM7XG4gIGlmIChmaXJzdENzc0Fzc2V0ID09PSB1bmRlZmluZWQgfHwgKGNzc0Fzc2V0cy5sZW5ndGggPT09IDEgJiYgZmlyc3RDc3NBc3NldC5maWxlTmFtZSA9PT0gU1RZTEVTX0NTU19GSUxFX05BTUUpKSB7XG4gICAgcmV0dXJuIHsgZmlsZU5hbWVzVG9SZW1vdmU6IFtdLCBzdHlsZXNDc3M6IHVuZGVmaW5lZCB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmaWxlTmFtZXNUb1JlbW92ZTogY3NzQXNzZXRzLm1hcCgoYXNzZXQpID0+IGFzc2V0LmZpbGVOYW1lKSxcbiAgICBzdHlsZXNDc3M6IGNzc0Fzc2V0cy5tYXAoKGFzc2V0KSA9PiBhc3NldC5zb3VyY2UpLmpvaW4oJ1xcbicpXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBwYXRoIGFnYWluc3QgdGhlIHByb2plY3Qgcm9vdC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290IG9yIGFic29sdXRlLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRnJvbVJvb3QocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHJlc29sdmVQYXRoRnJvbVJvb3QoeyBwYXRoIH0pLCBgQ291bGQgbm90IHJlc29sdmUgJyR7cGF0aH0nIGFnYWluc3QgdGhlIHByb2plY3Qgcm9vdGApO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHdoZXJlIGEgcGx1Z2luIGJ1aWxkIHdyaXRlcyBpdHMgb3V0cHV0LCB3aGljaCBlbnRyeSBwb2ludCBpdCBidWlsZHMgYW5kIHdoaWNoIHZhdWx0IGFcbiAqIGRldmVsb3BtZW50IGJ1aWxkIGlzIGRlcGxveWVkIGludG8uXG4gKlxuICogTG9hZHMgdGhlIHByb2plY3QncyBgLmVudmAgZmlsZSBmaXJzdCwgc28gYE9CU0lESUFOX0NPTkZJR19GT0xERVJgIGNhbiBsaXZlIHRoZXJlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFJlc29sdmVPYnNpZGlhblBsdWdpbkJ1aWxkQ29udGV4dFBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSB7QGxpbmsgT2JzaWRpYW5QbHVnaW5CdWlsZENvbnRleHR9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZU9ic2lkaWFuUGx1Z2luQnVpbGRDb250ZXh0KHBhcmFtczogUmVzb2x2ZU9ic2lkaWFuUGx1Z2luQnVpbGRDb250ZXh0UGFyYW1zKTogUHJvbWlzZTxPYnNpZGlhblBsdWdpbkJ1aWxkQ29udGV4dD4ge1xuICBjb25zdCBlbnZQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdCh7IHBhdGg6ICcuZW52JyB9KTtcbiAgaWYgKGVudlBhdGggJiYgZXhpc3RzU3luYyhlbnZQYXRoKSkge1xuICAgIGxvYWRFbnZGaWxlKGVudlBhdGgpO1xuICB9XG4gIGNvbnN0IG9ic2lkaWFuUGx1Z2luQnVpbGRlckVudiA9IHByb2Nlc3MuZW52IGFzIFBhcnRpYWw8T2JzaWRpYW5QbHVnaW5CdWlsZGVyRW52PjtcblxuICBjb25zdCBpc1Byb2R1Y3Rpb25CdWlsZCA9IHBhcmFtcy5tb2RlID09PSBCdWlsZE1vZGUuUHJvZHVjdGlvbjtcbiAgY29uc3QgZGlzdEZvbGRlciA9IHBhcmFtcy5kaXN0Rm9sZGVyID09PSB1bmRlZmluZWQgPyBnZXRPYnNpZGlhblBsdWdpbkRpc3RGb2xkZXIocGFyYW1zLm1vZGUpIDogcmVzb2x2ZUZyb21Sb290KHBhcmFtcy5kaXN0Rm9sZGVyKTtcbiAgY29uc3QgcGFja2FnZUpzb24gPSBhd2FpdCByZWFkUGFja2FnZUpzb24oKTtcblxuICByZXR1cm4ge1xuICAgIGRpc3RGb2xkZXIsXG4gICAgZW50cnlQb2ludDogZ2V0T2JzaWRpYW5QbHVnaW5FbnRyeVBvaW50KCksXG4gICAgaXNQcm9kdWN0aW9uQnVpbGQsXG4gICAgbWFpbkpzUGF0aDogam9pbihkaXN0Rm9sZGVyLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYWluSnMpLFxuICAgIG9ic2lkaWFuQ29uZmlnRm9sZGVyOiBwYXJhbXMub2JzaWRpYW5Db25maWdGb2xkZXIgPz8gb2JzaWRpYW5QbHVnaW5CdWlsZGVyRW52Lk9CU0lESUFOX0NPTkZJR19GT0xERVIgPz8gJycsXG4gICAgcGx1Z2luTmFtZTogcGFja2FnZUpzb24ubmFtZSA/PyAnKHVua25vd24pJyxcbiAgICByZWxvYWQ6IHBhcmFtcy5yZWxvYWQgPz8gJ2hvdC1yZWxvYWQtcGx1Z2luJ1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQSxpQkFBZ0M7QUFDaEMsa0JBQW9DO0FBQ3BDLGtCQUdPO0FBQ1AseUJBQWtDO0FBQ2xDLHFCQUEyQjtBQUMzQixzQkFLTztBQUNQLHlCQUErQjtBQUMvQiwwQkFBcUM7QUFFckMsd0NBQXdDO0FBS2pDLElBQUssWUFBTCxrQkFBS0EsZUFBTDtBQUlMLEVBQUFBLHNCQUFBO0FBSUEsRUFBQUEsc0JBQUE7QUFSVSxTQUFBQTtBQUFBLEdBQUE7QUFrQkwsTUFBTSxrQ0FBcUQ7QUFBQSxFQUNoRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFPTyxNQUFNLDRCQUErQztBQUFBLEVBQzFELEdBQUc7QUFBQSxFQUNILEdBQUc7QUFDTDtBQUVBLE1BQU0sY0FBYztBQUNwQixNQUFNLHVCQUErQiwwREFBd0I7QUFFN0QsTUFBTSxnQ0FBZ0MsSUFBSSxJQUFJLHlCQUF5QjtBQWlJdkUsZUFBc0IsOEJBQThCLFlBQW1DO0FBQ3JGLFVBQUksMkJBQVcsVUFBVSxHQUFHO0FBQzFCLGNBQU0sb0JBQUcsWUFBWSxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQUEsRUFDMUM7QUFDQSxZQUFNLHVCQUFNLFlBQVksRUFBRSxXQUFXLEtBQUssQ0FBQztBQUM3QztBQVNBLGVBQXNCLGlDQUFpQyxTQUFvRDtBQUN6RyxZQUFNLHVCQUFNLFFBQVEsWUFBWSxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ25ELE1BQUksQ0FBQyxRQUFRLHFCQUFxQixRQUFRLFdBQVcscUJBQXFCO0FBQ3hFLGNBQU0sK0JBQVUsa0JBQUssUUFBUSxZQUFZLDBEQUF3QixTQUFTLEdBQUcsSUFBSSxPQUFPO0FBQUEsRUFDMUY7QUFFQSxRQUFNLG1CQUFlLGlDQUFvQixFQUFFLE1BQU0sMERBQXdCLGFBQWEsQ0FBQztBQUN2RixNQUFJLG9CQUFnQiwyQkFBVyxZQUFZLEdBQUc7QUFDNUMsY0FBTSxvQkFBRyxrQkFBYyxrQkFBSyxRQUFRLFlBQVksMERBQXdCLFlBQVksQ0FBQztBQUFBLEVBQ3ZGO0FBQ0Y7QUFRTyxTQUFTLHdCQUF3QixhQUE2QjtBQUNuRSxTQUFPO0FBQUEsc0NBQzZCLFlBQVksWUFBWSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBSS9EO0FBU08sU0FBUyw0QkFBNEIsTUFBeUI7QUFDbkUsU0FBTyxnQkFBZ0IsU0FBUyxxQkFBdUIsMERBQXdCLFlBQVksMERBQXdCLE9BQU87QUFDNUg7QUFPTyxTQUFTLDhCQUFzQztBQUNwRCxTQUFPLG9CQUFnQixrQkFBSywwREFBd0IsS0FBSywwREFBd0IsTUFBTSxDQUFDO0FBQzFGO0FBUU8sU0FBUyxjQUFjLFVBQTJCO0FBQ3ZELGFBQU8sc0JBQVMsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLE1BQU07QUFDekQ7QUFVTyxTQUFTLHlCQUF5QixVQUEyQjtBQUNsRSxNQUFJLFNBQVMsV0FBVyxXQUFXLEtBQUssOEJBQThCLElBQUksUUFBUSxHQUFHO0FBQ25GLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSwrQkFBK0I7QUFDckMsUUFBTSxjQUFjLFNBQVMsTUFBTSxHQUFHLEVBQUUsTUFBTSxHQUFHLFNBQVMsV0FBVyxHQUFHLElBQUksK0JBQStCLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDdEgsU0FBTyxnQkFBZ0IsWUFBWSw4QkFBOEIsSUFBSSxXQUFXO0FBQ2xGO0FBWU8sU0FBUyxlQUFlLFdBQXNEO0FBQ25GLFFBQU0sQ0FBQyxhQUFhLElBQUk7QUFDeEIsTUFBSSxrQkFBa0IsVUFBYyxVQUFVLFdBQVcsS0FBSyxjQUFjLGFBQWEsc0JBQXVCO0FBQzlHLFdBQU8sRUFBRSxtQkFBbUIsQ0FBQyxHQUFHLFdBQVcsT0FBVTtBQUFBLEVBQ3ZEO0FBRUEsU0FBTztBQUFBLElBQ0wsbUJBQW1CLFVBQVUsSUFBSSxDQUFDLFVBQVUsTUFBTSxRQUFRO0FBQUEsSUFDMUQsV0FBVyxVQUFVLElBQUksQ0FBQyxVQUFVLE1BQU0sTUFBTSxFQUFFLEtBQUssSUFBSTtBQUFBLEVBQzdEO0FBQ0Y7QUFRTyxTQUFTLGdCQUFnQixNQUFzQjtBQUNwRCxhQUFPLDBDQUFrQixpQ0FBb0IsRUFBRSxLQUFLLENBQUMsR0FBRyxzQkFBc0IsSUFBSSw0QkFBNEI7QUFDaEg7QUFXQSxlQUFzQixrQ0FBa0MsUUFBc0Y7QUFDNUksUUFBTSxjQUFVLGlDQUFvQixFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3BELE1BQUksZUFBVywyQkFBVyxPQUFPLEdBQUc7QUFDbEMseUNBQVksT0FBTztBQUFBLEVBQ3JCO0FBQ0EsUUFBTSwyQkFBMkIsb0JBQUFDLFFBQVE7QUFFekMsUUFBTSxvQkFBb0IsT0FBTyxTQUFTO0FBQzFDLFFBQU0sYUFBYSxPQUFPLGVBQWUsU0FBWSw0QkFBNEIsT0FBTyxJQUFJLElBQUksZ0JBQWdCLE9BQU8sVUFBVTtBQUNqSSxRQUFNLGNBQWMsVUFBTSw0QkFBZ0I7QUFFMUMsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBLFlBQVksNEJBQTRCO0FBQUEsSUFDeEM7QUFBQSxJQUNBLGdCQUFZLGtCQUFLLFlBQVksMERBQXdCLE1BQU07QUFBQSxJQUMzRCxzQkFBc0IsT0FBTyx3QkFBd0IseUJBQXlCLDBCQUEwQjtBQUFBLElBQ3hHLFlBQVksWUFBWSxRQUFRO0FBQUEsSUFDaEMsUUFBUSxPQUFPLFVBQVU7QUFBQSxFQUMzQjtBQUNGOyIsIm5hbWVzIjpbIkJ1aWxkTW9kZSIsInByb2Nlc3MiXX0=
|