@mnaoumov/obsidian-dev-toolkit 2.1.0 → 3.1.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 +6 -2
- 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/demo-vault-helper/main.js +6 -442
- package/dist/integration-test-plugin/main.js +918 -4912
- 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 +104 -5
- 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
|
@@ -0,0 +1,181 @@
|
|
|
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 patchObsidianRequire() {
|
|
6
|
+
const originalRequire = require;
|
|
7
|
+
if (!originalRequire || originalRequire.__isPatched) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
require = Object.assign(
|
|
12
|
+
(id) => requirePatched(id),
|
|
13
|
+
originalRequire,
|
|
14
|
+
{
|
|
15
|
+
__isPatched: true
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
function extractDefault(module) {
|
|
20
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
24
|
+
'@codemirror/autocomplete',
|
|
25
|
+
'@codemirror/collab',
|
|
26
|
+
'@codemirror/commands',
|
|
27
|
+
'@codemirror/language',
|
|
28
|
+
'@codemirror/lint',
|
|
29
|
+
'@codemirror/search',
|
|
30
|
+
'@codemirror/state',
|
|
31
|
+
'@codemirror/text',
|
|
32
|
+
'@codemirror/view',
|
|
33
|
+
'@lezer/common',
|
|
34
|
+
'@lezer/highlight',
|
|
35
|
+
'@lezer/lr',
|
|
36
|
+
'obsidian']
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
40
|
+
'@codemirror/closebrackets',
|
|
41
|
+
'@codemirror/comment',
|
|
42
|
+
'@codemirror/fold',
|
|
43
|
+
'@codemirror/gutter',
|
|
44
|
+
'@codemirror/highlight',
|
|
45
|
+
'@codemirror/history',
|
|
46
|
+
'@codemirror/matchbrackets',
|
|
47
|
+
'@codemirror/panel',
|
|
48
|
+
'@codemirror/rangeset',
|
|
49
|
+
'@codemirror/rectangular-selection',
|
|
50
|
+
'@codemirror/stream-parser',
|
|
51
|
+
'@codemirror/tooltip']
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
function requirePatched(id) {
|
|
55
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
|
|
56
|
+
return originalRequire?.(id);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
|
|
60
|
+
if (globalThis.app.isMobile) {
|
|
61
|
+
if (id === 'process' || id === 'node:process') {
|
|
62
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
63
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
64
|
+
|
|
65
|
+
return process;
|
|
66
|
+
}
|
|
67
|
+
} else {
|
|
68
|
+
const module = originalRequire?.(id);
|
|
69
|
+
if (module) {
|
|
70
|
+
return extractDefault(module);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
75
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
76
|
+
return {};
|
|
77
|
+
}
|
|
78
|
+
})();
|
|
79
|
+
|
|
80
|
+
"use strict";
|
|
81
|
+
var __defProp = Object.defineProperty;
|
|
82
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
83
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
84
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
85
|
+
var __export = (target, all) => {
|
|
86
|
+
for (var name in all)
|
|
87
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
88
|
+
};
|
|
89
|
+
var __copyProps = (to, from, except, desc) => {
|
|
90
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
91
|
+
for (let key of __getOwnPropNames(from))
|
|
92
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
93
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
94
|
+
}
|
|
95
|
+
return to;
|
|
96
|
+
};
|
|
97
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
98
|
+
var rollup_compatible_features_exports = {};
|
|
99
|
+
__export(rollup_compatible_features_exports, {
|
|
100
|
+
createRollupCompatibleFeaturePlugin: () => createRollupCompatibleFeaturePlugin,
|
|
101
|
+
createUnpluginVuePlugin: () => createUnpluginVuePlugin
|
|
102
|
+
});
|
|
103
|
+
module.exports = __toCommonJS(rollup_compatible_features_exports);
|
|
104
|
+
var import_promises = require('node:fs/promises');
|
|
105
|
+
var import_obsidian_plugin_repo_paths = require('../obsidian-plugin-repo-paths.cjs');
|
|
106
|
+
var import_obsidian_plugin_features = require('./obsidian-plugin-features.cjs');
|
|
107
|
+
var import_obsidian_plugin_transforms = require('./obsidian-plugin-transforms.cjs');
|
|
108
|
+
function createRollupCompatibleFeaturePlugin(params) {
|
|
109
|
+
const { features, isProductionBuild, shouldCompileStylesheets, shouldReplaceDefines } = params;
|
|
110
|
+
async function transformFeatureFile(context, code, id) {
|
|
111
|
+
const [filePath = id] = id.split("?", 1);
|
|
112
|
+
switch ((0, import_obsidian_plugin_features.getFeatureFileKind)(id)) {
|
|
113
|
+
case "jsx": {
|
|
114
|
+
return features.framework === "solid" ? await (0, import_obsidian_plugin_transforms.transformSolid)({ code, filePath, isProductionBuild: isProductionBuild() }) : null;
|
|
115
|
+
}
|
|
116
|
+
case "stylesheet": {
|
|
117
|
+
if (!shouldCompileStylesheets || !features.styles) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
const result = await (0, import_obsidian_plugin_transforms.transformCss)({
|
|
121
|
+
filePath,
|
|
122
|
+
isCssModuleScoped: true,
|
|
123
|
+
isProductionBuild: isProductionBuild(),
|
|
124
|
+
source: code,
|
|
125
|
+
styles: features.styles
|
|
126
|
+
});
|
|
127
|
+
for (const dependency of result.dependencies) {
|
|
128
|
+
context.addWatchFile(dependency);
|
|
129
|
+
}
|
|
130
|
+
context.emitFile({ name: import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.StylesCss, source: result.css, type: "asset" });
|
|
131
|
+
return { code: result.moduleExports ? (0, import_obsidian_plugin_transforms.getCssModuleCode)(result.moduleExports) : "export default undefined;\n" };
|
|
132
|
+
}
|
|
133
|
+
case "svelte": {
|
|
134
|
+
return features.framework === "svelte" ? await (0, import_obsidian_plugin_transforms.transformSvelte)({ code, filePath, isProductionBuild: isProductionBuild() }) : null;
|
|
135
|
+
}
|
|
136
|
+
default: {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
load: {
|
|
143
|
+
async handler(id) {
|
|
144
|
+
return !features.wasm || (0, import_obsidian_plugin_features.getFeatureFileKind)(id) !== "wasm" ? null : (0, import_obsidian_plugin_transforms.getWasmModuleCode)(await (0, import_promises.readFile)(id));
|
|
145
|
+
},
|
|
146
|
+
order: "pre"
|
|
147
|
+
},
|
|
148
|
+
name: "obsidian-plugin-features",
|
|
149
|
+
transform: {
|
|
150
|
+
async handler(code, id) {
|
|
151
|
+
const transformed = await transformFeatureFile(this, code, id);
|
|
152
|
+
if (!shouldReplaceDefines) {
|
|
153
|
+
return transformed;
|
|
154
|
+
}
|
|
155
|
+
const defines = (0, import_obsidian_plugin_features.getFrameworkDefines)({ framework: features.framework, isProductionBuild: isProductionBuild() });
|
|
156
|
+
const source = transformed?.code ?? code;
|
|
157
|
+
const replaced = (0, import_obsidian_plugin_features.replaceDefines)(source, defines);
|
|
158
|
+
return replaced === source ? transformed : { code: replaced, map: transformed?.map };
|
|
159
|
+
},
|
|
160
|
+
order: "pre"
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
async function createUnpluginVuePlugin(params) {
|
|
165
|
+
const { bundler, features } = params;
|
|
166
|
+
if (features.framework !== "vue") {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
const unpluginVue = await (0, import_obsidian_plugin_features.importOptionalPeer)({
|
|
170
|
+
feature: "framework: 'vue'",
|
|
171
|
+
packageName: "unplugin-vue",
|
|
172
|
+
specifier: `unplugin-vue/${bundler}`
|
|
173
|
+
});
|
|
174
|
+
return unpluginVue.default();
|
|
175
|
+
}
|
|
176
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
177
|
+
0 && (module.exports = {
|
|
178
|
+
createRollupCompatibleFeaturePlugin,
|
|
179
|
+
createUnpluginVuePlugin
|
|
180
|
+
});
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9yb2xsdXAtY29tcGF0aWJsZS1mZWF0dXJlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGJ1aWxkIGZlYXR1cmVzIG9mIHRoZSByb2xsdXAgYW5kIHZpdGUgYWRhcHRlcnM6IG9uZSBwbHVnaW4sIHR5cGVkIGJ5IHRoZSBzaGFwZSBib3RoIGJ1bmRsZXJzIGFjY2VwdCwgdGhhdCBydW5zXG4gKiB0aGUgc2hhcmVkIHRyYW5zZm9ybXMgKFNvbGlkLCBTdmVsdGUsIHN0eWxlc2hlZXRzLCBXZWJBc3NlbWJseSkgYW5kIHJlcGxhY2VzIHRoZSBmcmFtZXdvcmsncyBjb21waWxlLXRpbWUgY29uc3RhbnRzLFxuICogcGx1cyB0aGUgYHVucGx1Z2luLXZ1ZWAgcGx1Z2luIGZvciBWdWUuXG4gKi9cblxuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblBsdWdpbkZlYXR1cmVPcHRpb25zIH0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tZmVhdHVyZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBTb3VyY2VNYXBMaWtlIH0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tdHJhbnNmb3Jtcy50cyc7XG5cbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4tcGx1Z2luLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmVhdHVyZUZpbGVLaW5kLFxuICBnZXRGcmFtZXdvcmtEZWZpbmVzLFxuICBpbXBvcnRPcHRpb25hbFBlZXIsXG4gIHJlcGxhY2VEZWZpbmVzXG59IGZyb20gJy4vb2JzaWRpYW4tcGx1Z2luLWZlYXR1cmVzLnRzJztcbmltcG9ydCB7XG4gIGdldENzc01vZHVsZUNvZGUsXG4gIGdldFdhc21Nb2R1bGVDb2RlLFxuICB0cmFuc2Zvcm1Dc3MsXG4gIHRyYW5zZm9ybVNvbGlkLFxuICB0cmFuc2Zvcm1TdmVsdGVcbn0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tdHJhbnNmb3Jtcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZVJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2lufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVSb2xsdXBDb21wYXRpYmxlRmVhdHVyZVBsdWdpblBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYnVpbGQgZmVhdHVyZXMuXG4gICAqL1xuICByZWFkb25seSBmZWF0dXJlczogT2JzaWRpYW5QbHVnaW5GZWF0dXJlT3B0aW9ucztcblxuICAvKipcbiAgICogVGVsbHMgd2hldGhlciB0aGUgYnVpbGQgaXMgYSBwcm9kdWN0aW9uIG9uZS4gQ2FsbGVkIGZyb20gdGhlIGhvb2tzLCBhZnRlciB0aGUgYWRhcHRlciByZXNvbHZlZCBpdHMgYnVpbGQgbW9kZS5cbiAgICovXG4gIHJlYWRvbmx5IGlzUHJvZHVjdGlvbkJ1aWxkOiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcGx1Z2luIGNvbXBpbGVzIHN0eWxlc2hlZXRzLiBWaXRlIGNvbXBpbGVzIHRoZW0gaXRzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQ29tcGlsZVN0eWxlc2hlZXRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcGx1Z2luIHJlcGxhY2VzIHRoZSBmcmFtZXdvcmsncyBjb21waWxlLXRpbWUgY29uc3RhbnRzIGluIHRoZSBjb2RlLiBWaXRlIGRvZXMgaXQgdGhyb3VnaCBpdHMgb3duXG4gICAqIGBkZWZpbmVgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmVwbGFjZURlZmluZXM6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZVVucGx1Z2luVnVlUGx1Z2lufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVVbnBsdWdpblZ1ZVBsdWdpblBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYnVuZGxlciwgd2hpY2ggbmFtZXMgdGhlIGB1bnBsdWdpbi12dWVgIGVudHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgYnVuZGxlcjogJ3JvbGx1cCcgfCAndml0ZSc7XG5cbiAgLyoqXG4gICAqIFRoZSBidWlsZCBmZWF0dXJlcy5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmVzOiBPYnNpZGlhblBsdWdpbkZlYXR1cmVPcHRpb25zO1xufVxuXG4vKipcbiAqIFRoZSBwYXJ0IG9mIGEgcm9sbHVwIG9yIHJvbGxkb3duIHBsdWdpbiBjb250ZXh0IHRoZSBmZWF0dXJlIHBsdWdpbiB1c2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVQbHVnaW5Db250ZXh0IHtcbiAgLyoqXG4gICAqIEFkZHMgYSBmaWxlIHRvIHdhdGNoIGluIGEgd2F0Y2ggYnVpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBmaWxlJ3MgcGF0aC5cbiAgICovXG4gIGFkZFdhdGNoRmlsZTogKGlkOiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFuIGFzc2V0IGludG8gdGhlIGJ1bmRsZS5cbiAgICpcbiAgICogQHBhcmFtIGVtaXR0ZWRGaWxlIC0gVGhlIGFzc2V0IHRvIGVtaXQuXG4gICAqIEByZXR1cm5zIFRoZSByZWZlcmVuY2UgaWQgb2YgdGhlIGVtaXR0ZWQgZmlsZS5cbiAgICovXG4gIGVtaXRGaWxlOiAoZW1pdHRlZEZpbGU6IEVtaXR0ZWRBc3NldCkgPT4gc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwbHVnaW4ge0BsaW5rIGNyZWF0ZVJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2lufSBjcmVhdGVzLCBpbiB0aGUgc2hhcGUgcm9sbHVwIGFuZCB2aXRlIGJvdGggYWNjZXB0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2luIHtcbiAgLyoqXG4gICAqIExvYWRzIGEgYC53YXNtYCBtb2R1bGUgYXMgaXRzIGJ5dGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZDogRmVhdHVyZVBsdWdpbkhvb2s8KHRoaXM6IEZlYXR1cmVQbHVnaW5Db250ZXh0LCBpZDogc3RyaW5nKSA9PiBQcm9taXNlPG51bGwgfCBzdHJpbmc+PjtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbXBpbGVzIGEgbW9kdWxlIHRoZSBmZWF0dXJlcyB0cmFuc2Zvcm0sIHRoZW4gcmVwbGFjZXMgdGhlIGNvbXBpbGUtdGltZSBjb25zdGFudHMuXG4gICAqL1xuICByZWFkb25seSB0cmFuc2Zvcm06IEZlYXR1cmVQbHVnaW5Ib29rPCh0aGlzOiBGZWF0dXJlUGx1Z2luQ29udGV4dCwgY29kZTogc3RyaW5nLCBpZDogc3RyaW5nKSA9PiBQcm9taXNlPG51bGwgfCBUcmFuc2Zvcm1SZXN1bHRMaWtlPj47XG59XG5cbi8qKlxuICogVGhlIGFzc2V0IHRoZSBmZWF0dXJlIHBsdWdpbiBlbWl0cyBmb3IgYSBzdHlsZXNoZWV0LlxuICovXG5pbnRlcmZhY2UgRW1pdHRlZEFzc2V0IHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZTogJ2Fzc2V0Jztcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiBob29rIHdpdGggaXRzIG9yZGVyLlxuICpcbiAqIEB0eXBlUGFyYW0gSGFuZGxlciAtIFRoZSBob29rJ3MgaGFuZGxlci5cbiAqL1xuaW50ZXJmYWNlIEZlYXR1cmVQbHVnaW5Ib29rPEhhbmRsZXI+IHtcbiAgcmVhZG9ubHkgaGFuZGxlcjogSGFuZGxlcjtcbiAgcmVhZG9ubHkgb3JkZXI6ICdwcmUnO1xufVxuXG4vKipcbiAqIEEgdHJhbnNmb3JtIGhvb2sncyByZXN1bHQuXG4gKi9cbmludGVyZmFjZSBUcmFuc2Zvcm1SZXN1bHRMaWtlIHtcbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuICByZWFkb25seSBtYXA/OiBTb3VyY2VNYXBMaWtlIHwgdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgVW5wbHVnaW5WdWVNb2R1bGUge1xuICByZWFkb25seSBkZWZhdWx0OiAob3B0aW9ucz86IG9iamVjdCkgPT4gdW5rbm93bjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBwbHVnaW4gdGhhdCBydW5zIHRoZSBzaGFyZWQgdHJhbnNmb3JtcyBpbiBhIHJvbGx1cCBvciB2aXRlIGJ1aWxkLlxuICpcbiAqIC0gYGZyYW1ld29yazogJ3NvbGlkJ2AgY29tcGlsZXMgYC5qc3hgIC8gYC50c3hgIHdpdGggYGJhYmVsLXByZXNldC1zb2xpZGAsIGJlZm9yZSB0aGUgcHJvamVjdCdzIFR5cGVTY3JpcHQgcGx1Z2luLlxuICogLSBgZnJhbWV3b3JrOiAnc3ZlbHRlJ2AgY29tcGlsZXMgYC5zdmVsdGVgIGNvbXBvbmVudHMgYW5kIGAuc3ZlbHRlLnRzYCAvIGAuc3ZlbHRlLmpzYCBtb2R1bGVzLlxuICogLSBgc3R5bGVzYCwgd2hlcmUge0BsaW5rIENyZWF0ZVJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2luUGFyYW1zLnNob3VsZENvbXBpbGVTdHlsZXNoZWV0c30gc2F5cyBzbywgcnVucyBldmVyeVxuICogICBzdHlsZXNoZWV0IHRocm91Z2ggUG9zdENTUywgVGFpbHdpbmQgYW5kIENTUy1tb2R1bGUgc2NvcGluZyBhbmQgZW1pdHMgaXQgYXMgYW4gYXNzZXQsIHdoaWNoIGVuZHMgdXAgaW5cbiAqICAgYHN0eWxlcy5jc3NgLlxuICogLSBgd2FzbWAgbG9hZHMgYSBgLndhc21gIG1vZHVsZSBhcyBpdHMgYnl0ZXMuXG4gKiAtIEEgZnJhbWV3b3JrJ3MgY29tcGlsZS10aW1lIGNvbnN0YW50cyBhcmUgcmVwbGFjZWQgd2hlcmVcbiAqICAge0BsaW5rIENyZWF0ZVJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2luUGFyYW1zLnNob3VsZFJlcGxhY2VEZWZpbmVzfSBzYXlzIHNvLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIENyZWF0ZVJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBwbHVnaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSb2xsdXBDb21wYXRpYmxlRmVhdHVyZVBsdWdpbihwYXJhbXM6IENyZWF0ZVJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2luUGFyYW1zKTogUm9sbHVwQ29tcGF0aWJsZUZlYXR1cmVQbHVnaW4ge1xuICBjb25zdCB7IGZlYXR1cmVzLCBpc1Byb2R1Y3Rpb25CdWlsZCwgc2hvdWxkQ29tcGlsZVN0eWxlc2hlZXRzLCBzaG91bGRSZXBsYWNlRGVmaW5lcyB9ID0gcGFyYW1zO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHRyYW5zZm9ybUZlYXR1cmVGaWxlKGNvbnRleHQ6IEZlYXR1cmVQbHVnaW5Db250ZXh0LCBjb2RlOiBzdHJpbmcsIGlkOiBzdHJpbmcpOiBQcm9taXNlPG51bGwgfCBUcmFuc2Zvcm1SZXN1bHRMaWtlPiB7XG4gICAgY29uc3QgW2ZpbGVQYXRoID0gaWRdID0gaWQuc3BsaXQoJz8nLCAxKTtcbiAgICBzd2l0Y2ggKGdldEZlYXR1cmVGaWxlS2luZChpZCkpIHtcbiAgICAgIGNhc2UgJ2pzeCc6IHtcbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzLmZyYW1ld29yayA9PT0gJ3NvbGlkJyA/IGF3YWl0IHRyYW5zZm9ybVNvbGlkKHsgY29kZSwgZmlsZVBhdGgsIGlzUHJvZHVjdGlvbkJ1aWxkOiBpc1Byb2R1Y3Rpb25CdWlsZCgpIH0pIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3N0eWxlc2hlZXQnOiB7XG4gICAgICAgIGlmICghc2hvdWxkQ29tcGlsZVN0eWxlc2hlZXRzIHx8ICFmZWF0dXJlcy5zdHlsZXMpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFuc2Zvcm1Dc3Moe1xuICAgICAgICAgIGZpbGVQYXRoLFxuICAgICAgICAgIGlzQ3NzTW9kdWxlU2NvcGVkOiB0cnVlLFxuICAgICAgICAgIGlzUHJvZHVjdGlvbkJ1aWxkOiBpc1Byb2R1Y3Rpb25CdWlsZCgpLFxuICAgICAgICAgIHNvdXJjZTogY29kZSxcbiAgICAgICAgICBzdHlsZXM6IGZlYXR1cmVzLnN0eWxlc1xuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHJlc3VsdC5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmFkZFdhdGNoRmlsZShkZXBlbmRlbmN5KTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmVtaXRGaWxlKHsgbmFtZTogT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3R5bGVzQ3NzLCBzb3VyY2U6IHJlc3VsdC5jc3MsIHR5cGU6ICdhc3NldCcgfSk7XG4gICAgICAgIHJldHVybiB7IGNvZGU6IHJlc3VsdC5tb2R1bGVFeHBvcnRzID8gZ2V0Q3NzTW9kdWxlQ29kZShyZXN1bHQubW9kdWxlRXhwb3J0cykgOiAnZXhwb3J0IGRlZmF1bHQgdW5kZWZpbmVkO1xcbicgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3N2ZWx0ZSc6IHtcbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzLmZyYW1ld29yayA9PT0gJ3N2ZWx0ZScgPyBhd2FpdCB0cmFuc2Zvcm1TdmVsdGUoeyBjb2RlLCBmaWxlUGF0aCwgaXNQcm9kdWN0aW9uQnVpbGQ6IGlzUHJvZHVjdGlvbkJ1aWxkKCkgfSkgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvYWQ6IHtcbiAgICAgIGFzeW5jIGhhbmRsZXIoaWQpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuICFmZWF0dXJlcy53YXNtIHx8IGdldEZlYXR1cmVGaWxlS2luZChpZCkgIT09ICd3YXNtJyA/IG51bGwgOiBnZXRXYXNtTW9kdWxlQ29kZShhd2FpdCByZWFkRmlsZShpZCkpO1xuICAgICAgfSxcbiAgICAgIG9yZGVyOiAncHJlJ1xuICAgIH0sXG4gICAgbmFtZTogJ29ic2lkaWFuLXBsdWdpbi1mZWF0dXJlcycsXG4gICAgdHJhbnNmb3JtOiB7XG4gICAgICBhc3luYyBoYW5kbGVyKGNvZGUsIGlkKTogUHJvbWlzZTxudWxsIHwgVHJhbnNmb3JtUmVzdWx0TGlrZT4ge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IGF3YWl0IHRyYW5zZm9ybUZlYXR1cmVGaWxlKHRoaXMsIGNvZGUsIGlkKTtcbiAgICAgICAgaWYgKCFzaG91bGRSZXBsYWNlRGVmaW5lcykge1xuICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZpbmVzID0gZ2V0RnJhbWV3b3JrRGVmaW5lcyh7IGZyYW1ld29yazogZmVhdHVyZXMuZnJhbWV3b3JrLCBpc1Byb2R1Y3Rpb25CdWlsZDogaXNQcm9kdWN0aW9uQnVpbGQoKSB9KTtcbiAgICAgICAgY29uc3Qgc291cmNlID0gdHJhbnNmb3JtZWQ/LmNvZGUgPz8gY29kZTtcbiAgICAgICAgY29uc3QgcmVwbGFjZWQgPSByZXBsYWNlRGVmaW5lcyhzb3VyY2UsIGRlZmluZXMpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZWQgPT09IHNvdXJjZSA/IHRyYW5zZm9ybWVkIDogeyBjb2RlOiByZXBsYWNlZCwgbWFwOiB0cmFuc2Zvcm1lZD8ubWFwIH07XG4gICAgICB9LFxuICAgICAgb3JkZXI6ICdwcmUnXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGB1bnBsdWdpbi12dWVgIHBsdWdpbiBvZiBvbmUgYnVuZGxlciB3aGVuIHRoZSBmcmFtZXdvcmsgaXMgVnVlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIENyZWF0ZVVucGx1Z2luVnVlUGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHBsdWdpbiwgb3IgYG51bGxgIHdoZW4gdGhlIGZyYW1ld29yayBpcyBub3QgVnVlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVW5wbHVnaW5WdWVQbHVnaW4ocGFyYW1zOiBDcmVhdGVVbnBsdWdpblZ1ZVBsdWdpblBhcmFtcyk6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCB7IGJ1bmRsZXIsIGZlYXR1cmVzIH0gPSBwYXJhbXM7XG4gIGlmIChmZWF0dXJlcy5mcmFtZXdvcmsgIT09ICd2dWUnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgdW5wbHVnaW5WdWUgPSBhd2FpdCBpbXBvcnRPcHRpb25hbFBlZXI8VW5wbHVnaW5WdWVNb2R1bGU+KHtcbiAgICBmZWF0dXJlOiAnZnJhbWV3b3JrOiBcXCd2dWVcXCcnLFxuICAgIHBhY2thZ2VOYW1lOiAndW5wbHVnaW4tdnVlJyxcbiAgICBzcGVjaWZpZXI6IGB1bnBsdWdpbi12dWUvJHtidW5kbGVyfWBcbiAgfSk7XG4gIHJldHVybiB1bnBsdWdpblZ1ZS5kZWZhdWx0KCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxzQkFBeUI7QUFLekIsd0NBQXdDO0FBQ3hDLHNDQUtPO0FBQ1Asd0NBTU87QUFpSUEsU0FBUyxvQ0FBb0MsUUFBa0Y7QUFDcEksUUFBTSxFQUFFLFVBQVUsbUJBQW1CLDBCQUEwQixxQkFBcUIsSUFBSTtBQUV4RixpQkFBZSxxQkFBcUIsU0FBK0IsTUFBYyxJQUFpRDtBQUNoSSxVQUFNLENBQUMsV0FBVyxFQUFFLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN2QyxnQkFBUSxvREFBbUIsRUFBRSxHQUFHO0FBQUEsTUFDOUIsS0FBSyxPQUFPO0FBQ1YsZUFBTyxTQUFTLGNBQWMsVUFBVSxVQUFNLGtEQUFlLEVBQUUsTUFBTSxVQUFVLG1CQUFtQixrQkFBa0IsRUFBRSxDQUFDLElBQUk7QUFBQSxNQUM3SDtBQUFBLE1BQ0EsS0FBSyxjQUFjO0FBQ2pCLFlBQUksQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLFFBQVE7QUFDakQsaUJBQU87QUFBQSxRQUNUO0FBQ0EsY0FBTSxTQUFTLFVBQU0sZ0RBQWE7QUFBQSxVQUNoQztBQUFBLFVBQ0EsbUJBQW1CO0FBQUEsVUFDbkIsbUJBQW1CLGtCQUFrQjtBQUFBLFVBQ3JDLFFBQVE7QUFBQSxVQUNSLFFBQVEsU0FBUztBQUFBLFFBQ25CLENBQUM7QUFDRCxtQkFBVyxjQUFjLE9BQU8sY0FBYztBQUM1QyxrQkFBUSxhQUFhLFVBQVU7QUFBQSxRQUNqQztBQUNBLGdCQUFRLFNBQVMsRUFBRSxNQUFNLDBEQUF3QixXQUFXLFFBQVEsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDO0FBQy9GLGVBQU8sRUFBRSxNQUFNLE9BQU8sb0JBQWdCLG9EQUFpQixPQUFPLGFBQWEsSUFBSSw4QkFBOEI7QUFBQSxNQUMvRztBQUFBLE1BQ0EsS0FBSyxVQUFVO0FBQ2IsZUFBTyxTQUFTLGNBQWMsV0FBVyxVQUFNLG1EQUFnQixFQUFFLE1BQU0sVUFBVSxtQkFBbUIsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJO0FBQUEsTUFDL0g7QUFBQSxNQUNBLFNBQVM7QUFDUCxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLE1BQ0osTUFBTSxRQUFRLElBQTRCO0FBQ3hDLGVBQU8sQ0FBQyxTQUFTLFlBQVEsb0RBQW1CLEVBQUUsTUFBTSxTQUFTLFdBQU8scURBQWtCLFVBQU0sMEJBQVMsRUFBRSxDQUFDO0FBQUEsTUFDMUc7QUFBQSxNQUNBLE9BQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxNQUFNO0FBQUEsSUFDTixXQUFXO0FBQUEsTUFDVCxNQUFNLFFBQVEsTUFBTSxJQUF5QztBQUMzRCxjQUFNLGNBQWMsTUFBTSxxQkFBcUIsTUFBTSxNQUFNLEVBQUU7QUFDN0QsWUFBSSxDQUFDLHNCQUFzQjtBQUN6QixpQkFBTztBQUFBLFFBQ1Q7QUFDQSxjQUFNLGNBQVUscURBQW9CLEVBQUUsV0FBVyxTQUFTLFdBQVcsbUJBQW1CLGtCQUFrQixFQUFFLENBQUM7QUFDN0csY0FBTSxTQUFTLGFBQWEsUUFBUTtBQUNwQyxjQUFNLGVBQVcsZ0RBQWUsUUFBUSxPQUFPO0FBQy9DLGVBQU8sYUFBYSxTQUFTLGNBQWMsRUFBRSxNQUFNLFVBQVUsS0FBSyxhQUFhLElBQUk7QUFBQSxNQUNyRjtBQUFBLE1BQ0EsT0FBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBQ0Y7QUFRQSxlQUFzQix3QkFBd0IsUUFBeUQ7QUFDckcsUUFBTSxFQUFFLFNBQVMsU0FBUyxJQUFJO0FBQzlCLE1BQUksU0FBUyxjQUFjLE9BQU87QUFDaEMsV0FBTztBQUFBLEVBQ1Q7QUFDQSxRQUFNLGNBQWMsVUFBTSxvREFBc0M7QUFBQSxJQUM5RCxTQUFTO0FBQUEsSUFDVCxhQUFhO0FBQUEsSUFDYixXQUFXLGdCQUFnQixPQUFPO0FBQUEsRUFDcEMsQ0FBQztBQUNELFNBQU8sWUFBWSxRQUFRO0FBQzdCOyIsIm5hbWVzIjpbXX0=
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* The build features of the rollup and vite adapters: one plugin, typed by the shape both bundlers accept, that runs
|
|
6
|
+
* the shared transforms (Solid, Svelte, stylesheets, WebAssembly) and replaces the framework's compile-time constants,
|
|
7
|
+
* plus the `unplugin-vue` plugin for Vue.
|
|
8
|
+
*/
|
|
9
|
+
import type { ObsidianPluginFeatureOptions } from './obsidian-plugin-features.cjs';
|
|
10
|
+
import type { SourceMapLike } from './obsidian-plugin-transforms.cjs';
|
|
11
|
+
/**
|
|
12
|
+
* Parameters for {@link createRollupCompatibleFeaturePlugin}.
|
|
13
|
+
*/
|
|
14
|
+
export interface CreateRollupCompatibleFeaturePluginParams {
|
|
15
|
+
/**
|
|
16
|
+
* The build features.
|
|
17
|
+
*/
|
|
18
|
+
readonly features: ObsidianPluginFeatureOptions;
|
|
19
|
+
/**
|
|
20
|
+
* Tells whether the build is a production one. Called from the hooks, after the adapter resolved its build mode.
|
|
21
|
+
*/
|
|
22
|
+
readonly isProductionBuild: () => boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Whether this plugin compiles stylesheets. Vite compiles them itself.
|
|
25
|
+
*/
|
|
26
|
+
readonly shouldCompileStylesheets: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Whether this plugin replaces the framework's compile-time constants in the code. Vite does it through its own
|
|
29
|
+
* `define`.
|
|
30
|
+
*/
|
|
31
|
+
readonly shouldReplaceDefines: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Parameters for {@link createUnpluginVuePlugin}.
|
|
35
|
+
*/
|
|
36
|
+
export interface CreateUnpluginVuePluginParams {
|
|
37
|
+
/**
|
|
38
|
+
* The bundler, which names the `unplugin-vue` entry.
|
|
39
|
+
*/
|
|
40
|
+
readonly bundler: 'rollup' | 'vite';
|
|
41
|
+
/**
|
|
42
|
+
* The build features.
|
|
43
|
+
*/
|
|
44
|
+
readonly features: ObsidianPluginFeatureOptions;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The part of a rollup or rolldown plugin context the feature plugin uses.
|
|
48
|
+
*/
|
|
49
|
+
export interface FeaturePluginContext {
|
|
50
|
+
/**
|
|
51
|
+
* Adds a file to watch in a watch build.
|
|
52
|
+
*
|
|
53
|
+
* @param id - The file's path.
|
|
54
|
+
*/
|
|
55
|
+
addWatchFile: (id: string) => void;
|
|
56
|
+
/**
|
|
57
|
+
* Emits an asset into the bundle.
|
|
58
|
+
*
|
|
59
|
+
* @param emittedFile - The asset to emit.
|
|
60
|
+
* @returns The reference id of the emitted file.
|
|
61
|
+
*/
|
|
62
|
+
emitFile: (emittedFile: EmittedAsset) => string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The plugin {@link createRollupCompatibleFeaturePlugin} creates, in the shape rollup and vite both accept.
|
|
66
|
+
*/
|
|
67
|
+
export interface RollupCompatibleFeaturePlugin {
|
|
68
|
+
/**
|
|
69
|
+
* Loads a `.wasm` module as its bytes.
|
|
70
|
+
*/
|
|
71
|
+
readonly load: FeaturePluginHook<(this: FeaturePluginContext, id: string) => Promise<null | string>>;
|
|
72
|
+
/**
|
|
73
|
+
* The plugin's name.
|
|
74
|
+
*/
|
|
75
|
+
readonly name: string;
|
|
76
|
+
/**
|
|
77
|
+
* Compiles a module the features transform, then replaces the compile-time constants.
|
|
78
|
+
*/
|
|
79
|
+
readonly transform: FeaturePluginHook<(this: FeaturePluginContext, code: string, id: string) => Promise<null | TransformResultLike>>;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The asset the feature plugin emits for a stylesheet.
|
|
83
|
+
*/
|
|
84
|
+
interface EmittedAsset {
|
|
85
|
+
readonly name: string;
|
|
86
|
+
readonly source: string;
|
|
87
|
+
readonly type: 'asset';
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* A plugin hook with its order.
|
|
91
|
+
*
|
|
92
|
+
* @typeParam Handler - The hook's handler.
|
|
93
|
+
*/
|
|
94
|
+
interface FeaturePluginHook<Handler> {
|
|
95
|
+
readonly handler: Handler;
|
|
96
|
+
readonly order: 'pre';
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* A transform hook's result.
|
|
100
|
+
*/
|
|
101
|
+
interface TransformResultLike {
|
|
102
|
+
readonly code: string;
|
|
103
|
+
readonly map?: SourceMapLike | undefined;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Creates the plugin that runs the shared transforms in a rollup or vite build.
|
|
107
|
+
*
|
|
108
|
+
* - `framework: 'solid'` compiles `.jsx` / `.tsx` with `babel-preset-solid`, before the project's TypeScript plugin.
|
|
109
|
+
* - `framework: 'svelte'` compiles `.svelte` components and `.svelte.ts` / `.svelte.js` modules.
|
|
110
|
+
* - `styles`, where {@link CreateRollupCompatibleFeaturePluginParams.shouldCompileStylesheets} says so, runs every
|
|
111
|
+
* stylesheet through PostCSS, Tailwind and CSS-module scoping and emits it as an asset, which ends up in
|
|
112
|
+
* `styles.css`.
|
|
113
|
+
* - `wasm` loads a `.wasm` module as its bytes.
|
|
114
|
+
* - A framework's compile-time constants are replaced where
|
|
115
|
+
* {@link CreateRollupCompatibleFeaturePluginParams.shouldReplaceDefines} says so.
|
|
116
|
+
*
|
|
117
|
+
* @param params - The {@link CreateRollupCompatibleFeaturePluginParams}.
|
|
118
|
+
* @returns The plugin.
|
|
119
|
+
*/
|
|
120
|
+
export declare function createRollupCompatibleFeaturePlugin(params: CreateRollupCompatibleFeaturePluginParams): RollupCompatibleFeaturePlugin;
|
|
121
|
+
/**
|
|
122
|
+
* Creates the `unplugin-vue` plugin of one bundler when the framework is Vue.
|
|
123
|
+
*
|
|
124
|
+
* @param params - The {@link CreateUnpluginVuePluginParams}.
|
|
125
|
+
* @returns A {@link Promise} that resolves to the plugin, or `null` when the framework is not Vue.
|
|
126
|
+
*/
|
|
127
|
+
export declare function createUnpluginVuePlugin(params: CreateUnpluginVuePluginParams): Promise<unknown>;
|
|
128
|
+
export {};
|
|
@@ -0,0 +1,138 @@
|
|
|
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 patchObsidianRequire() {
|
|
6
|
+
const originalRequire = require;
|
|
7
|
+
if (!originalRequire || originalRequire.__isPatched) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
require = Object.assign(
|
|
12
|
+
(id) => requirePatched(id),
|
|
13
|
+
originalRequire,
|
|
14
|
+
{
|
|
15
|
+
__isPatched: true
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
function extractDefault(module) {
|
|
20
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
24
|
+
'@codemirror/autocomplete',
|
|
25
|
+
'@codemirror/collab',
|
|
26
|
+
'@codemirror/commands',
|
|
27
|
+
'@codemirror/language',
|
|
28
|
+
'@codemirror/lint',
|
|
29
|
+
'@codemirror/search',
|
|
30
|
+
'@codemirror/state',
|
|
31
|
+
'@codemirror/text',
|
|
32
|
+
'@codemirror/view',
|
|
33
|
+
'@lezer/common',
|
|
34
|
+
'@lezer/highlight',
|
|
35
|
+
'@lezer/lr',
|
|
36
|
+
'obsidian']
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
40
|
+
'@codemirror/closebrackets',
|
|
41
|
+
'@codemirror/comment',
|
|
42
|
+
'@codemirror/fold',
|
|
43
|
+
'@codemirror/gutter',
|
|
44
|
+
'@codemirror/highlight',
|
|
45
|
+
'@codemirror/history',
|
|
46
|
+
'@codemirror/matchbrackets',
|
|
47
|
+
'@codemirror/panel',
|
|
48
|
+
'@codemirror/rangeset',
|
|
49
|
+
'@codemirror/rectangular-selection',
|
|
50
|
+
'@codemirror/stream-parser',
|
|
51
|
+
'@codemirror/tooltip']
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
function requirePatched(id) {
|
|
55
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
|
|
56
|
+
return originalRequire?.(id);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
|
|
60
|
+
if (globalThis.app.isMobile) {
|
|
61
|
+
if (id === 'process' || id === 'node:process') {
|
|
62
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
63
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
64
|
+
|
|
65
|
+
return process;
|
|
66
|
+
}
|
|
67
|
+
} else {
|
|
68
|
+
const module = originalRequire?.(id);
|
|
69
|
+
if (module) {
|
|
70
|
+
return extractDefault(module);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
75
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
76
|
+
return {};
|
|
77
|
+
}
|
|
78
|
+
})();
|
|
79
|
+
|
|
80
|
+
"use strict";
|
|
81
|
+
var __defProp = Object.defineProperty;
|
|
82
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
83
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
84
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
85
|
+
var __export = (target, all) => {
|
|
86
|
+
for (var name in all)
|
|
87
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
88
|
+
};
|
|
89
|
+
var __copyProps = (to, from, except, desc) => {
|
|
90
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
91
|
+
for (let key of __getOwnPropNames(from))
|
|
92
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
93
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
94
|
+
}
|
|
95
|
+
return to;
|
|
96
|
+
};
|
|
97
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
98
|
+
var rollup_compatible_exports = {};
|
|
99
|
+
__export(rollup_compatible_exports, {
|
|
100
|
+
combineExternal: () => combineExternal,
|
|
101
|
+
renameCssAssets: () => renameCssAssets
|
|
102
|
+
});
|
|
103
|
+
module.exports = __toCommonJS(rollup_compatible_exports);
|
|
104
|
+
var import_obsidian_plugin_repo_paths = require('../obsidian-plugin-repo-paths.cjs');
|
|
105
|
+
var import_obsidian_plugin_build = require('./obsidian-plugin-build.cjs');
|
|
106
|
+
function combineExternal(external) {
|
|
107
|
+
return (source, importer, isResolved) => (0, import_obsidian_plugin_build.isObsidianPluginExternal)(source) || isMatchingExternal(external, source, importer, isResolved);
|
|
108
|
+
}
|
|
109
|
+
function renameCssAssets(assetEmitter, bundle) {
|
|
110
|
+
const cssAssets = Object.values(bundle).filter((output) => output.type === "asset" && (0, import_obsidian_plugin_build.isCssFileName)(output.fileName)).map((asset) => ({
|
|
111
|
+
fileName: asset.fileName,
|
|
112
|
+
source: typeof asset.source === "string" ? asset.source : new TextDecoder().decode(asset.source)
|
|
113
|
+
}));
|
|
114
|
+
const { fileNamesToRemove, stylesCss } = (0, import_obsidian_plugin_build.mergeCssAssets)(cssAssets);
|
|
115
|
+
if (stylesCss === void 0) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
for (const fileName of fileNamesToRemove) {
|
|
119
|
+
delete bundle[fileName];
|
|
120
|
+
}
|
|
121
|
+
assetEmitter.emitFile({ fileName: import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.StylesCss, source: stylesCss, type: "asset" });
|
|
122
|
+
}
|
|
123
|
+
function isMatchingExternal(external, source, importer, isResolved) {
|
|
124
|
+
if (external === void 0) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
if (typeof external === "function") {
|
|
128
|
+
return Boolean(external(source, importer, isResolved));
|
|
129
|
+
}
|
|
130
|
+
const patterns = typeof external === "string" || external instanceof RegExp ? [external] : external;
|
|
131
|
+
return patterns.some((pattern) => typeof pattern === "string" ? pattern === source : pattern.test(source));
|
|
132
|
+
}
|
|
133
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
134
|
+
0 && (module.exports = {
|
|
135
|
+
combineExternal,
|
|
136
|
+
renameCssAssets
|
|
137
|
+
});
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9yb2xsdXAtY29tcGF0aWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHBpZWNlcyB0aGUgcm9sbHVwIGFuZCB2aXRlIGFkYXB0ZXJzIHNoYXJlLiBWaXRlIDggYnVpbGRzIHdpdGggcm9sbGRvd24sIHdob3NlIHBsdWdpbiBBUEkgaXNcbiAqIHJvbGx1cCdzIGJ1dCB3aG9zZSB0eXBlcyBhcmUgaXRzIG93biwgc28gdGhlc2UgYXJlIHR5cGVkIGJ5IHRoZSBzaGFwZSBib3RoIGFjY2VwdCByYXRoZXIgdGhhbiBieSBlaXRoZXJcbiAqIHBhY2thZ2UncyBkZWNsYXJhdGlvbnMuXG4gKi9cblxuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tICcuLi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQge1xuICBpc0Nzc0ZpbGVOYW1lLFxuICBpc09ic2lkaWFuUGx1Z2luRXh0ZXJuYWwsXG4gIG1lcmdlQ3NzQXNzZXRzXG59IGZyb20gJy4vb2JzaWRpYW4tcGx1Z2luLWJ1aWxkLnRzJztcblxuLyoqXG4gKiBUaGUgcGFydCBvZiBhIHJvbGx1cCBvciByb2xsZG93biBwbHVnaW4gY29udGV4dCB7QGxpbmsgcmVuYW1lQ3NzQXNzZXRzfSB1c2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0RW1pdHRlciB7XG4gIC8qKlxuICAgKiBFbWl0cyBhbiBhc3NldCBpbnRvIHRoZSBidW5kbGUuXG4gICAqXG4gICAqIEBwYXJhbSBlbWl0dGVkRmlsZSAtIFRoZSBhc3NldCB0byBlbWl0LlxuICAgKiBAcmV0dXJucyBUaGUgcmVmZXJlbmNlIGlkIG9mIHRoZSBlbWl0dGVkIGZpbGUuXG4gICAqL1xuICBlbWl0RmlsZTogKGVtaXR0ZWRGaWxlOiBFbWl0dGVkQ3NzQXNzZXQpID0+IHN0cmluZztcbn1cblxuLyoqXG4gKiBBbiBlbWl0dGVkIGZpbGUgb2YgYSByb2xsdXAgb3Igcm9sbGRvd24gYnVuZGxlLCBhcyB7QGxpbmsgcmVuYW1lQ3NzQXNzZXRzfSByZWFkcyBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVPdXRwdXRMaWtlIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIG5hbWUgcmVsYXRpdmUgdG8gdGhlIG91dHB1dCBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBhc3NldCdzIGNvbnRlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogc3RyaW5nIHwgVWludDhBcnJheTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZmlsZSBpcyBhbiBhc3NldCBvciBhIGNodW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogJ2Fzc2V0JyB8ICdjaHVuayc7XG59XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIHtAbGluayBjb21iaW5lRXh0ZXJuYWx9IHJldHVybnMsIHdoaWNoIGV2ZXJ5IGJ1bmRsZXIgb2YgdGhlIHJvbGx1cCBmYW1pbHkgYWNjZXB0cy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tYmluZWRFeHRlcm5hbEZ1bmN0aW9uID0gKHNvdXJjZTogc3RyaW5nLCBpbXBvcnRlcjogc3RyaW5nIHwgdW5kZWZpbmVkLCBpc1Jlc29sdmVkOiBib29sZWFuKSA9PiBib29sZWFuO1xuXG4vKipcbiAqIFRoZSBgc3R5bGVzLmNzc2AgYXNzZXQge0BsaW5rIHJlbmFtZUNzc0Fzc2V0c30gZW1pdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdHRlZENzc0Fzc2V0IHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIG5hbWUgcmVsYXRpdmUgdG8gdGhlIG91dHB1dCBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSdzIGNvbnRlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBraW5kIG9mIGVtaXR0ZWQgZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdhc3NldCc7XG59XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIGZvcm0gb2Yge0BsaW5rIEV4dGVybmFsTGlrZX0uIEl0cyByZXN1bHQgaXMgcmVhZCBmb3IgdHJ1dGhpbmVzcywgYXMgcm9sbHVwIGFuZCByb2xsZG93biByZWFkIGl0LlxuICovXG5leHBvcnQgdHlwZSBFeHRlcm5hbEZ1bmN0aW9uID0gKHNvdXJjZTogc3RyaW5nLCBpbXBvcnRlcjogc3RyaW5nIHwgdW5kZWZpbmVkLCBpc1Jlc29sdmVkOiBib29sZWFuKSA9PiB1bmtub3duO1xuXG4vKipcbiAqIFRoZSBgZXh0ZXJuYWxgIG9wdGlvbiBvZiByb2xsdXAgYW5kIG9mIHJvbGxkb3duLCBpbiB0aGUgc2hhcGUgYm90aCBhY2NlcHQuXG4gKi9cbmV4cG9ydCB0eXBlIEV4dGVybmFsTGlrZSA9IEV4dGVybmFsRnVuY3Rpb24gfCBFeHRlcm5hbFBhdHRlcm4gfCByZWFkb25seSBFeHRlcm5hbFBhdHRlcm5bXTtcblxuLyoqXG4gKiBPbmUgZW50cnkgb2YgdGhlIGFycmF5IGZvcm0gb2Yge0BsaW5rIEV4dGVybmFsTGlrZX0uXG4gKi9cbmV4cG9ydCB0eXBlIEV4dGVybmFsUGF0dGVybiA9IFJlZ0V4cCB8IHN0cmluZztcblxuLyoqXG4gKiBQdXRzIE9ic2lkaWFuJ3MgbW9kdWxlcyBhbmQgdGhlIE5vZGUgYnVpbHRpbnMgYmVzaWRlIHdoYXRldmVyIHRoZSBjb25zdW1lcidzIG93biBgZXh0ZXJuYWxgIG9wdGlvbiBuYW1lcy5cbiAqXG4gKiBAcGFyYW0gZXh0ZXJuYWwgLSBUaGUgY29uc3VtZXIncyBgZXh0ZXJuYWxgIG9wdGlvbi5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gZm9ybSBvZiBgZXh0ZXJuYWxgIHRoYXQga2VlcHMgYm90aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVFeHRlcm5hbChleHRlcm5hbDogRXh0ZXJuYWxMaWtlIHwgdW5kZWZpbmVkKTogQ29tYmluZWRFeHRlcm5hbEZ1bmN0aW9uIHtcbiAgcmV0dXJuIChzb3VyY2UsIGltcG9ydGVyLCBpc1Jlc29sdmVkKTogYm9vbGVhbiA9PiBpc09ic2lkaWFuUGx1Z2luRXh0ZXJuYWwoc291cmNlKSB8fCBpc01hdGNoaW5nRXh0ZXJuYWwoZXh0ZXJuYWwsIHNvdXJjZSwgaW1wb3J0ZXIsIGlzUmVzb2x2ZWQpO1xufVxuXG4vKipcbiAqIE1vdmVzIGV2ZXJ5IENTUyBhc3NldCBvZiBhIGJ1bmRsZSBpbnRvIG9uZSBgc3R5bGVzLmNzc2AsIHRoZSBvbmx5IHN0eWxlc2hlZXQgT2JzaWRpYW4gbG9hZHMuXG4gKlxuICogQHBhcmFtIGFzc2V0RW1pdHRlciAtIFRoZSBwbHVnaW4gY29udGV4dCB0byBlbWl0IGBzdHlsZXMuY3NzYCB0aHJvdWdoLlxuICogQHBhcmFtIGJ1bmRsZSAtIFRoZSBidW5kbGUgYWJvdXQgdG8gYmUgd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUNzc0Fzc2V0cyhhc3NldEVtaXR0ZXI6IEFzc2V0RW1pdHRlciwgYnVuZGxlOiBSZWNvcmQ8c3RyaW5nLCBCdW5kbGVPdXRwdXRMaWtlPik6IHZvaWQge1xuICBjb25zdCBjc3NBc3NldHMgPSBPYmplY3QudmFsdWVzKGJ1bmRsZSlcbiAgICAuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC50eXBlID09PSAnYXNzZXQnICYmIGlzQ3NzRmlsZU5hbWUob3V0cHV0LmZpbGVOYW1lKSlcbiAgICAubWFwKChhc3NldCkgPT4gKHtcbiAgICAgIGZpbGVOYW1lOiBhc3NldC5maWxlTmFtZSxcbiAgICAgIHNvdXJjZTogdHlwZW9mIGFzc2V0LnNvdXJjZSA9PT0gJ3N0cmluZycgPyBhc3NldC5zb3VyY2UgOiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYXNzZXQuc291cmNlKVxuICAgIH0pKTtcbiAgY29uc3QgeyBmaWxlTmFtZXNUb1JlbW92ZSwgc3R5bGVzQ3NzIH0gPSBtZXJnZUNzc0Fzc2V0cyhjc3NBc3NldHMpO1xuICBpZiAoc3R5bGVzQ3NzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlTmFtZXNUb1JlbW92ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gUmVtb3ZpbmcgYW4gZW50cnkgZnJvbSB0aGUgYnVuZGxlIGlzIGhvdyBhIHJvbGx1cCBwbHVnaW4gZHJvcHMgYW4gb3V0cHV0LlxuICAgIGRlbGV0ZSBidW5kbGVbZmlsZU5hbWVdO1xuICB9XG4gIGFzc2V0RW1pdHRlci5lbWl0RmlsZSh7IGZpbGVOYW1lOiBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TdHlsZXNDc3MsIHNvdXJjZTogc3R5bGVzQ3NzLCB0eXBlOiAnYXNzZXQnIH0pO1xufVxuXG5mdW5jdGlvbiBpc01hdGNoaW5nRXh0ZXJuYWwoZXh0ZXJuYWw6IEV4dGVybmFsTGlrZSB8IHVuZGVmaW5lZCwgc291cmNlOiBzdHJpbmcsIGltcG9ydGVyOiBzdHJpbmcgfCB1bmRlZmluZWQsIGlzUmVzb2x2ZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgaWYgKGV4dGVybmFsID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiBleHRlcm5hbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCb29sZWFuKGV4dGVybmFsKHNvdXJjZSwgaW1wb3J0ZXIsIGlzUmVzb2x2ZWQpKTtcbiAgfVxuICBjb25zdCBwYXR0ZXJuczogcmVhZG9ubHkgRXh0ZXJuYWxQYXR0ZXJuW10gPSB0eXBlb2YgZXh0ZXJuYWwgPT09ICdzdHJpbmcnIHx8IGV4dGVybmFsIGluc3RhbmNlb2YgUmVnRXhwID8gW2V4dGVybmFsXSA6IGV4dGVybmFsO1xuICByZXR1cm4gcGF0dGVybnMuc29tZSgocGF0dGVybikgPT4gdHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnID8gcGF0dGVybiA9PT0gc291cmNlIDogcGF0dGVybi50ZXN0KHNvdXJjZSkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsd0NBQXdDO0FBQ3hDLG1DQUlPO0FBaUZBLFNBQVMsZ0JBQWdCLFVBQThEO0FBQzVGLFNBQU8sQ0FBQyxRQUFRLFVBQVUsbUJBQXdCLHVEQUF5QixNQUFNLEtBQUssbUJBQW1CLFVBQVUsUUFBUSxVQUFVLFVBQVU7QUFDako7QUFRTyxTQUFTLGdCQUFnQixjQUE0QixRQUFnRDtBQUMxRyxRQUFNLFlBQVksT0FBTyxPQUFPLE1BQU0sRUFDbkMsT0FBTyxDQUFDLFdBQVcsT0FBTyxTQUFTLGVBQVcsNENBQWMsT0FBTyxRQUFRLENBQUMsRUFDNUUsSUFBSSxDQUFDLFdBQVc7QUFBQSxJQUNmLFVBQVUsTUFBTTtBQUFBLElBQ2hCLFFBQVEsT0FBTyxNQUFNLFdBQVcsV0FBVyxNQUFNLFNBQVMsSUFBSSxZQUFZLEVBQUUsT0FBTyxNQUFNLE1BQU07QUFBQSxFQUNqRyxFQUFFO0FBQ0osUUFBTSxFQUFFLG1CQUFtQixVQUFVLFFBQUksNkNBQWUsU0FBUztBQUNqRSxNQUFJLGNBQWMsUUFBVztBQUMzQjtBQUFBLEVBQ0Y7QUFDQSxhQUFXLFlBQVksbUJBQW1CO0FBRXhDLFdBQU8sT0FBTyxRQUFRO0FBQUEsRUFDeEI7QUFDQSxlQUFhLFNBQVMsRUFBRSxVQUFVLDBEQUF3QixXQUFXLFFBQVEsV0FBVyxNQUFNLFFBQVEsQ0FBQztBQUN6RztBQUVBLFNBQVMsbUJBQW1CLFVBQW9DLFFBQWdCLFVBQThCLFlBQThCO0FBQzFJLE1BQUksYUFBYSxRQUFXO0FBQzFCLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxPQUFPLGFBQWEsWUFBWTtBQUNsQyxXQUFPLFFBQVEsU0FBUyxRQUFRLFVBQVUsVUFBVSxDQUFDO0FBQUEsRUFDdkQ7QUFDQSxRQUFNLFdBQXVDLE9BQU8sYUFBYSxZQUFZLG9CQUFvQixTQUFTLENBQUMsUUFBUSxJQUFJO0FBQ3ZILFNBQU8sU0FBUyxLQUFLLENBQUMsWUFBWSxPQUFPLFlBQVksV0FBVyxZQUFZLFNBQVMsUUFBUSxLQUFLLE1BQU0sQ0FBQztBQUMzRzsiLCJuYW1lcyI6W119
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* The pieces the rollup and vite adapters share. Vite 8 builds with rolldown, whose plugin API is
|
|
6
|
+
* rollup's but whose types are its own, so these are typed by the shape both accept rather than by either
|
|
7
|
+
* package's declarations.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* The part of a rollup or rolldown plugin context {@link renameCssAssets} uses.
|
|
11
|
+
*/
|
|
12
|
+
export interface AssetEmitter {
|
|
13
|
+
/**
|
|
14
|
+
* Emits an asset into the bundle.
|
|
15
|
+
*
|
|
16
|
+
* @param emittedFile - The asset to emit.
|
|
17
|
+
* @returns The reference id of the emitted file.
|
|
18
|
+
*/
|
|
19
|
+
emitFile: (emittedFile: EmittedCssAsset) => string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* An emitted file of a rollup or rolldown bundle, as {@link renameCssAssets} reads it.
|
|
23
|
+
*/
|
|
24
|
+
export interface BundleOutputLike {
|
|
25
|
+
/**
|
|
26
|
+
* The file name relative to the output folder.
|
|
27
|
+
*/
|
|
28
|
+
readonly fileName: string;
|
|
29
|
+
/**
|
|
30
|
+
* An asset's contents.
|
|
31
|
+
*/
|
|
32
|
+
readonly source?: string | Uint8Array;
|
|
33
|
+
/**
|
|
34
|
+
* Whether the file is an asset or a chunk.
|
|
35
|
+
*/
|
|
36
|
+
readonly type: 'asset' | 'chunk';
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The function {@link combineExternal} returns, which every bundler of the rollup family accepts.
|
|
40
|
+
*/
|
|
41
|
+
export type CombinedExternalFunction = (source: string, importer: string | undefined, isResolved: boolean) => boolean;
|
|
42
|
+
/**
|
|
43
|
+
* The `styles.css` asset {@link renameCssAssets} emits.
|
|
44
|
+
*/
|
|
45
|
+
export interface EmittedCssAsset {
|
|
46
|
+
/**
|
|
47
|
+
* The file name relative to the output folder.
|
|
48
|
+
*/
|
|
49
|
+
readonly fileName: string;
|
|
50
|
+
/**
|
|
51
|
+
* The file's contents.
|
|
52
|
+
*/
|
|
53
|
+
readonly source: string;
|
|
54
|
+
/**
|
|
55
|
+
* The kind of emitted file.
|
|
56
|
+
*/
|
|
57
|
+
readonly type: 'asset';
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The function form of {@link ExternalLike}. Its result is read for truthiness, as rollup and rolldown read it.
|
|
61
|
+
*/
|
|
62
|
+
export type ExternalFunction = (source: string, importer: string | undefined, isResolved: boolean) => unknown;
|
|
63
|
+
/**
|
|
64
|
+
* The `external` option of rollup and of rolldown, in the shape both accept.
|
|
65
|
+
*/
|
|
66
|
+
export type ExternalLike = ExternalFunction | ExternalPattern | readonly ExternalPattern[];
|
|
67
|
+
/**
|
|
68
|
+
* One entry of the array form of {@link ExternalLike}.
|
|
69
|
+
*/
|
|
70
|
+
export type ExternalPattern = RegExp | string;
|
|
71
|
+
/**
|
|
72
|
+
* Puts Obsidian's modules and the Node builtins beside whatever the consumer's own `external` option names.
|
|
73
|
+
*
|
|
74
|
+
* @param external - The consumer's `external` option.
|
|
75
|
+
* @returns A function form of `external` that keeps both.
|
|
76
|
+
*/
|
|
77
|
+
export declare function combineExternal(external: ExternalLike | undefined): CombinedExternalFunction;
|
|
78
|
+
/**
|
|
79
|
+
* Moves every CSS asset of a bundle into one `styles.css`, the only stylesheet Obsidian loads.
|
|
80
|
+
*
|
|
81
|
+
* @param assetEmitter - The plugin context to emit `styles.css` through.
|
|
82
|
+
* @param bundle - The bundle about to be written.
|
|
83
|
+
*/
|
|
84
|
+
export declare function renameCssAssets(assetEmitter: AssetEmitter, bundle: Record<string, BundleOutputLike>): void;
|