@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.
Files changed (129) hide show
  1. package/README.md +5 -1
  2. package/bin/archive-demo-vault.mjs +8 -0
  3. package/bin/generate-coverage-badge.mjs +8 -0
  4. package/bundlers/esbuild-impl/feature-options/package.json +6 -0
  5. package/bundlers/obsidian-cli-reload/package.json +6 -0
  6. package/bundlers/obsidian-plugin-build/package.json +6 -0
  7. package/bundlers/obsidian-plugin-features/package.json +6 -0
  8. package/bundlers/obsidian-plugin-transforms/package.json +6 -0
  9. package/bundlers/obsidian-plugin-webpack-loader/package.json +6 -0
  10. package/bundlers/obsidian-plugins-folder-deployment/package.json +6 -0
  11. package/bundlers/parcel/package.json +6 -0
  12. package/bundlers/rollup/package.json +6 -0
  13. package/bundlers/rollup-compatible/package.json +6 -0
  14. package/bundlers/rollup-compatible-features/package.json +6 -0
  15. package/bundlers/vite/package.json +6 -0
  16. package/bundlers/webpack/package.json +6 -0
  17. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +3 -188
  18. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +2 -18
  19. package/dist/lib/cjs/bundlers/esbuild-impl/feature-options.cjs +173 -0
  20. package/dist/lib/cjs/bundlers/esbuild-impl/feature-options.d.cts +60 -0
  21. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +4 -1
  22. package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -0
  23. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +30 -82
  24. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +7 -24
  25. package/dist/lib/cjs/bundlers/index.cjs +39 -3
  26. package/dist/lib/cjs/bundlers/index.d.cts +12 -0
  27. package/dist/lib/cjs/bundlers/obsidian-cli-reload.cjs +182 -0
  28. package/dist/lib/cjs/bundlers/obsidian-cli-reload.d.cts +37 -0
  29. package/dist/lib/cjs/bundlers/obsidian-plugin-build.cjs +278 -0
  30. package/dist/lib/cjs/bundlers/obsidian-plugin-build.d.cts +217 -0
  31. package/dist/lib/cjs/bundlers/obsidian-plugin-features.cjs +242 -0
  32. package/dist/lib/cjs/bundlers/obsidian-plugin-features.d.cts +186 -0
  33. package/dist/lib/cjs/bundlers/obsidian-plugin-transforms.cjs +306 -0
  34. package/dist/lib/cjs/bundlers/obsidian-plugin-transforms.d.cts +231 -0
  35. package/dist/lib/cjs/bundlers/obsidian-plugin-webpack-loader.cjs +182 -0
  36. package/dist/lib/cjs/bundlers/obsidian-plugin-webpack-loader.d.cts +47 -0
  37. package/dist/lib/cjs/bundlers/obsidian-plugins-folder-deployment.cjs +320 -0
  38. package/dist/lib/cjs/bundlers/obsidian-plugins-folder-deployment.d.cts +44 -0
  39. package/dist/lib/cjs/bundlers/parcel.cjs +462 -0
  40. package/dist/lib/cjs/bundlers/parcel.d.cts +128 -0
  41. package/dist/lib/cjs/bundlers/rollup-compatible-features.cjs +181 -0
  42. package/dist/lib/cjs/bundlers/rollup-compatible-features.d.cts +128 -0
  43. package/dist/lib/cjs/bundlers/rollup-compatible.cjs +138 -0
  44. package/dist/lib/cjs/bundlers/rollup-compatible.d.cts +84 -0
  45. package/dist/lib/cjs/bundlers/rollup.cjs +218 -0
  46. package/dist/lib/cjs/bundlers/rollup.d.cts +99 -0
  47. package/dist/lib/cjs/bundlers/vite.cjs +229 -0
  48. package/dist/lib/cjs/bundlers/vite.d.cts +105 -0
  49. package/dist/lib/cjs/bundlers/webpack.cjs +354 -0
  50. package/dist/lib/cjs/bundlers/webpack.d.cts +133 -0
  51. package/dist/lib/cjs/demo-vault-cli.cjs +131 -0
  52. package/dist/lib/cjs/demo-vault-cli.d.cts +15 -0
  53. package/dist/lib/cjs/index.cjs +4 -1
  54. package/dist/lib/cjs/index.d.cts +1 -0
  55. package/dist/lib/cjs/test-runners/coverage-badge-cli.cjs +160 -0
  56. package/dist/lib/cjs/test-runners/coverage-badge-cli.d.cts +25 -0
  57. package/dist/lib/cjs/test-runners/coverage-badge.cjs +279 -0
  58. package/dist/lib/cjs/test-runners/coverage-badge.d.cts +143 -0
  59. package/dist/lib/cjs/test-runners/e2e-runner-support.cjs +170 -0
  60. package/dist/lib/cjs/test-runners/e2e-runner-support.d.cts +36 -0
  61. package/dist/lib/cjs/test-runners/index.cjs +18 -3
  62. package/dist/lib/cjs/test-runners/index.d.cts +5 -0
  63. package/dist/lib/cjs/test-runners/obsidian-test-runner.cjs +147 -0
  64. package/dist/lib/cjs/test-runners/obsidian-test-runner.d.cts +42 -0
  65. package/dist/lib/cjs/test-runners/wdio-obsidian.cjs +205 -0
  66. package/dist/lib/cjs/test-runners/wdio-obsidian.d.cts +199 -0
  67. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +2 -18
  68. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +3 -192
  69. package/dist/lib/esm/bundlers/esbuild-impl/feature-options.d.mts +60 -0
  70. package/dist/lib/esm/bundlers/esbuild-impl/feature-options.mjs +82 -0
  71. package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -0
  72. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +3 -1
  73. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +7 -24
  74. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +41 -87
  75. package/dist/lib/esm/bundlers/index.d.mts +12 -0
  76. package/dist/lib/esm/bundlers/index.mjs +26 -2
  77. package/dist/lib/esm/bundlers/obsidian-cli-reload.d.mts +37 -0
  78. package/dist/lib/esm/bundlers/obsidian-cli-reload.mjs +83 -0
  79. package/dist/lib/esm/bundlers/obsidian-plugin-build.d.mts +217 -0
  80. package/dist/lib/esm/bundlers/obsidian-plugin-build.mjs +166 -0
  81. package/dist/lib/esm/bundlers/obsidian-plugin-features.d.mts +186 -0
  82. package/dist/lib/esm/bundlers/obsidian-plugin-features.mjs +126 -0
  83. package/dist/lib/esm/bundlers/obsidian-plugin-transforms.d.mts +231 -0
  84. package/dist/lib/esm/bundlers/obsidian-plugin-transforms.mjs +194 -0
  85. package/dist/lib/esm/bundlers/obsidian-plugin-webpack-loader.d.mts +47 -0
  86. package/dist/lib/esm/bundlers/obsidian-plugin-webpack-loader.mjs +89 -0
  87. package/dist/lib/esm/bundlers/obsidian-plugins-folder-deployment.d.mts +44 -0
  88. package/dist/lib/esm/bundlers/obsidian-plugins-folder-deployment.mjs +228 -0
  89. package/dist/lib/esm/bundlers/parcel.d.mts +128 -0
  90. package/dist/lib/esm/bundlers/parcel.mjs +361 -0
  91. package/dist/lib/esm/bundlers/rollup-compatible-features.d.mts +128 -0
  92. package/dist/lib/esm/bundlers/rollup-compatible-features.mjs +93 -0
  93. package/dist/lib/esm/bundlers/rollup-compatible.d.mts +84 -0
  94. package/dist/lib/esm/bundlers/rollup-compatible.mjs +43 -0
  95. package/dist/lib/esm/bundlers/rollup.d.mts +99 -0
  96. package/dist/lib/esm/bundlers/rollup.mjs +130 -0
  97. package/dist/lib/esm/bundlers/vite.d.mts +105 -0
  98. package/dist/lib/esm/bundlers/vite.mjs +144 -0
  99. package/dist/lib/esm/bundlers/webpack.d.mts +133 -0
  100. package/dist/lib/esm/bundlers/webpack.mjs +259 -0
  101. package/dist/lib/esm/demo-vault-cli.d.mts +15 -0
  102. package/dist/lib/esm/demo-vault-cli.mjs +23 -0
  103. package/dist/lib/esm/index.d.mts +1 -0
  104. package/dist/lib/esm/index.mjs +3 -1
  105. package/dist/lib/esm/test-runners/coverage-badge-cli.d.mts +25 -0
  106. package/dist/lib/esm/test-runners/coverage-badge-cli.mjs +51 -0
  107. package/dist/lib/esm/test-runners/coverage-badge.d.mts +143 -0
  108. package/dist/lib/esm/test-runners/coverage-badge.mjs +181 -0
  109. package/dist/lib/esm/test-runners/e2e-runner-support.d.mts +36 -0
  110. package/dist/lib/esm/test-runners/e2e-runner-support.mjs +61 -0
  111. package/dist/lib/esm/test-runners/index.d.mts +5 -0
  112. package/dist/lib/esm/test-runners/index.mjs +12 -2
  113. package/dist/lib/esm/test-runners/obsidian-test-runner.d.mts +42 -0
  114. package/dist/lib/esm/test-runners/obsidian-test-runner.mjs +52 -0
  115. package/dist/lib/esm/test-runners/wdio-obsidian.d.mts +199 -0
  116. package/dist/lib/esm/test-runners/wdio-obsidian.mjs +110 -0
  117. package/package.json +102 -4
  118. package/test-runners/coverage-badge/package.json +6 -0
  119. package/test-runners/coverage-badge-cli/package.json +6 -0
  120. package/test-runners/e2e-runner-support/package.json +6 -0
  121. package/test-runners/obsidian-test-runner/package.json +6 -0
  122. package/test-runners/wdio-obsidian/package.json +6 -0
  123. package/tsconfig/preact.json +7 -0
  124. package/tsconfig/react.json +7 -0
  125. package/tsconfig/solid.json +7 -0
  126. package/tsconfig/svelte.json +7 -0
  127. package/tsconfig/vue.json +7 -0
  128. package/types/styles.d.ts +32 -0
  129. package/types/wasm.d.ts +11 -0
@@ -0,0 +1,93 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ import { readFile } from "node:fs/promises";
7
+ import { ObsidianPluginRepoPaths } from "../obsidian-plugin-repo-paths.mjs";
8
+ import {
9
+ getFeatureFileKind,
10
+ getFrameworkDefines,
11
+ importOptionalPeer,
12
+ replaceDefines
13
+ } from "./obsidian-plugin-features.mjs";
14
+ import {
15
+ getCssModuleCode,
16
+ getWasmModuleCode,
17
+ transformCss,
18
+ transformSolid,
19
+ transformSvelte
20
+ } from "./obsidian-plugin-transforms.mjs";
21
+ function createRollupCompatibleFeaturePlugin(params) {
22
+ const { features, isProductionBuild, shouldCompileStylesheets, shouldReplaceDefines } = params;
23
+ async function transformFeatureFile(context, code, id) {
24
+ const [filePath = id] = id.split("?", 1);
25
+ switch (getFeatureFileKind(id)) {
26
+ case "jsx": {
27
+ return features.framework === "solid" ? await transformSolid({ code, filePath, isProductionBuild: isProductionBuild() }) : null;
28
+ }
29
+ case "stylesheet": {
30
+ if (!shouldCompileStylesheets || !features.styles) {
31
+ return null;
32
+ }
33
+ const result = await transformCss({
34
+ filePath,
35
+ isCssModuleScoped: true,
36
+ isProductionBuild: isProductionBuild(),
37
+ source: code,
38
+ styles: features.styles
39
+ });
40
+ for (const dependency of result.dependencies) {
41
+ context.addWatchFile(dependency);
42
+ }
43
+ context.emitFile({ name: ObsidianPluginRepoPaths.StylesCss, source: result.css, type: "asset" });
44
+ return { code: result.moduleExports ? getCssModuleCode(result.moduleExports) : "export default undefined;\n" };
45
+ }
46
+ case "svelte": {
47
+ return features.framework === "svelte" ? await transformSvelte({ code, filePath, isProductionBuild: isProductionBuild() }) : null;
48
+ }
49
+ default: {
50
+ return null;
51
+ }
52
+ }
53
+ }
54
+ return {
55
+ load: {
56
+ async handler(id) {
57
+ return !features.wasm || getFeatureFileKind(id) !== "wasm" ? null : getWasmModuleCode(await readFile(id));
58
+ },
59
+ order: "pre"
60
+ },
61
+ name: "obsidian-plugin-features",
62
+ transform: {
63
+ async handler(code, id) {
64
+ const transformed = await transformFeatureFile(this, code, id);
65
+ if (!shouldReplaceDefines) {
66
+ return transformed;
67
+ }
68
+ const defines = getFrameworkDefines({ framework: features.framework, isProductionBuild: isProductionBuild() });
69
+ const source = transformed?.code ?? code;
70
+ const replaced = replaceDefines(source, defines);
71
+ return replaced === source ? transformed : { code: replaced, map: transformed?.map };
72
+ },
73
+ order: "pre"
74
+ }
75
+ };
76
+ }
77
+ async function createUnpluginVuePlugin(params) {
78
+ const { bundler, features } = params;
79
+ if (features.framework !== "vue") {
80
+ return null;
81
+ }
82
+ const unpluginVue = await importOptionalPeer({
83
+ feature: "framework: 'vue'",
84
+ packageName: "unplugin-vue",
85
+ specifier: `unplugin-vue/${bundler}`
86
+ });
87
+ return unpluginVue.default();
88
+ }
89
+ export {
90
+ createRollupCompatibleFeaturePlugin,
91
+ createUnpluginVuePlugin
92
+ };
93
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL3JvbGx1cC1jb21wYXRpYmxlLWZlYXR1cmVzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGJ1aWxkIGZlYXR1cmVzIG9mIHRoZSByb2xsdXAgYW5kIHZpdGUgYWRhcHRlcnM6IG9uZSBwbHVnaW4sIHR5cGVkIGJ5IHRoZSBzaGFwZSBib3RoIGJ1bmRsZXJzIGFjY2VwdCwgdGhhdCBydW5zXG4gKiB0aGUgc2hhcmVkIHRyYW5zZm9ybXMgKFNvbGlkLCBTdmVsdGUsIHN0eWxlc2hlZXRzLCBXZWJBc3NlbWJseSkgYW5kIHJlcGxhY2VzIHRoZSBmcmFtZXdvcmsncyBjb21waWxlLXRpbWUgY29uc3RhbnRzLFxuICogcGx1cyB0aGUgYHVucGx1Z2luLXZ1ZWAgcGx1Z2luIGZvciBWdWUuXG4gKi9cblxuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblBsdWdpbkZlYXR1cmVPcHRpb25zIH0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tZmVhdHVyZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBTb3VyY2VNYXBMaWtlIH0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tdHJhbnNmb3Jtcy50cyc7XG5cbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4tcGx1Z2luLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmVhdHVyZUZpbGVLaW5kLFxuICBnZXRGcmFtZXdvcmtEZWZpbmVzLFxuICBpbXBvcnRPcHRpb25hbFBlZXIsXG4gIHJlcGxhY2VEZWZpbmVzXG59IGZyb20gJy4vb2JzaWRpYW4tcGx1Z2luLWZlYXR1cmVzLnRzJztcbmltcG9ydCB7XG4gIGdldENzc01vZHVsZUNvZGUsXG4gIGdldFdhc21Nb2R1bGVDb2RlLFxuICB0cmFuc2Zvcm1Dc3MsXG4gIHRyYW5zZm9ybVNvbGlkLFxuICB0cmFuc2Zvcm1TdmVsdGVcbn0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tdHJhbnNmb3Jtcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZVJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2lufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVSb2xsdXBDb21wYXRpYmxlRmVhdHVyZVBsdWdpblBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYnVpbGQgZmVhdHVyZXMuXG4gICAqL1xuICByZWFkb25seSBmZWF0dXJlczogT2JzaWRpYW5QbHVnaW5GZWF0dXJlT3B0aW9ucztcblxuICAvKipcbiAgICogVGVsbHMgd2hldGhlciB0aGUgYnVpbGQgaXMgYSBwcm9kdWN0aW9uIG9uZS4gQ2FsbGVkIGZyb20gdGhlIGhvb2tzLCBhZnRlciB0aGUgYWRhcHRlciByZXNvbHZlZCBpdHMgYnVpbGQgbW9kZS5cbiAgICovXG4gIHJlYWRvbmx5IGlzUHJvZHVjdGlvbkJ1aWxkOiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcGx1Z2luIGNvbXBpbGVzIHN0eWxlc2hlZXRzLiBWaXRlIGNvbXBpbGVzIHRoZW0gaXRzZWxmLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQ29tcGlsZVN0eWxlc2hlZXRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcGx1Z2luIHJlcGxhY2VzIHRoZSBmcmFtZXdvcmsncyBjb21waWxlLXRpbWUgY29uc3RhbnRzIGluIHRoZSBjb2RlLiBWaXRlIGRvZXMgaXQgdGhyb3VnaCBpdHMgb3duXG4gICAqIGBkZWZpbmVgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmVwbGFjZURlZmluZXM6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZVVucGx1Z2luVnVlUGx1Z2lufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVVbnBsdWdpblZ1ZVBsdWdpblBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYnVuZGxlciwgd2hpY2ggbmFtZXMgdGhlIGB1bnBsdWdpbi12dWVgIGVudHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgYnVuZGxlcjogJ3JvbGx1cCcgfCAndml0ZSc7XG5cbiAgLyoqXG4gICAqIFRoZSBidWlsZCBmZWF0dXJlcy5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmVzOiBPYnNpZGlhblBsdWdpbkZlYXR1cmVPcHRpb25zO1xufVxuXG4vKipcbiAqIFRoZSBwYXJ0IG9mIGEgcm9sbHVwIG9yIHJvbGxkb3duIHBsdWdpbiBjb250ZXh0IHRoZSBmZWF0dXJlIHBsdWdpbiB1c2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVQbHVnaW5Db250ZXh0IHtcbiAgLyoqXG4gICAqIEFkZHMgYSBmaWxlIHRvIHdhdGNoIGluIGEgd2F0Y2ggYnVpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBmaWxlJ3MgcGF0aC5cbiAgICovXG4gIGFkZFdhdGNoRmlsZTogKGlkOiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFuIGFzc2V0IGludG8gdGhlIGJ1bmRsZS5cbiAgICpcbiAgICogQHBhcmFtIGVtaXR0ZWRGaWxlIC0gVGhlIGFzc2V0IHRvIGVtaXQuXG4gICAqIEByZXR1cm5zIFRoZSByZWZlcmVuY2UgaWQgb2YgdGhlIGVtaXR0ZWQgZmlsZS5cbiAgICovXG4gIGVtaXRGaWxlOiAoZW1pdHRlZEZpbGU6IEVtaXR0ZWRBc3NldCkgPT4gc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwbHVnaW4ge0BsaW5rIGNyZWF0ZVJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2lufSBjcmVhdGVzLCBpbiB0aGUgc2hhcGUgcm9sbHVwIGFuZCB2aXRlIGJvdGggYWNjZXB0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2luIHtcbiAgLyoqXG4gICAqIExvYWRzIGEgYC53YXNtYCBtb2R1bGUgYXMgaXRzIGJ5dGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZDogRmVhdHVyZVBsdWdpbkhvb2s8KHRoaXM6IEZlYXR1cmVQbHVnaW5Db250ZXh0LCBpZDogc3RyaW5nKSA9PiBQcm9taXNlPG51bGwgfCBzdHJpbmc+PjtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbXBpbGVzIGEgbW9kdWxlIHRoZSBmZWF0dXJlcyB0cmFuc2Zvcm0sIHRoZW4gcmVwbGFjZXMgdGhlIGNvbXBpbGUtdGltZSBjb25zdGFudHMuXG4gICAqL1xuICByZWFkb25seSB0cmFuc2Zvcm06IEZlYXR1cmVQbHVnaW5Ib29rPCh0aGlzOiBGZWF0dXJlUGx1Z2luQ29udGV4dCwgY29kZTogc3RyaW5nLCBpZDogc3RyaW5nKSA9PiBQcm9taXNlPG51bGwgfCBUcmFuc2Zvcm1SZXN1bHRMaWtlPj47XG59XG5cbi8qKlxuICogVGhlIGFzc2V0IHRoZSBmZWF0dXJlIHBsdWdpbiBlbWl0cyBmb3IgYSBzdHlsZXNoZWV0LlxuICovXG5pbnRlcmZhY2UgRW1pdHRlZEFzc2V0IHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZTogJ2Fzc2V0Jztcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiBob29rIHdpdGggaXRzIG9yZGVyLlxuICpcbiAqIEB0eXBlUGFyYW0gSGFuZGxlciAtIFRoZSBob29rJ3MgaGFuZGxlci5cbiAqL1xuaW50ZXJmYWNlIEZlYXR1cmVQbHVnaW5Ib29rPEhhbmRsZXI+IHtcbiAgcmVhZG9ubHkgaGFuZGxlcjogSGFuZGxlcjtcbiAgcmVhZG9ubHkgb3JkZXI6ICdwcmUnO1xufVxuXG4vKipcbiAqIEEgdHJhbnNmb3JtIGhvb2sncyByZXN1bHQuXG4gKi9cbmludGVyZmFjZSBUcmFuc2Zvcm1SZXN1bHRMaWtlIHtcbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuICByZWFkb25seSBtYXA/OiBTb3VyY2VNYXBMaWtlIHwgdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgVW5wbHVnaW5WdWVNb2R1bGUge1xuICByZWFkb25seSBkZWZhdWx0OiAob3B0aW9ucz86IG9iamVjdCkgPT4gdW5rbm93bjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBwbHVnaW4gdGhhdCBydW5zIHRoZSBzaGFyZWQgdHJhbnNmb3JtcyBpbiBhIHJvbGx1cCBvciB2aXRlIGJ1aWxkLlxuICpcbiAqIC0gYGZyYW1ld29yazogJ3NvbGlkJ2AgY29tcGlsZXMgYC5qc3hgIC8gYC50c3hgIHdpdGggYGJhYmVsLXByZXNldC1zb2xpZGAsIGJlZm9yZSB0aGUgcHJvamVjdCdzIFR5cGVTY3JpcHQgcGx1Z2luLlxuICogLSBgZnJhbWV3b3JrOiAnc3ZlbHRlJ2AgY29tcGlsZXMgYC5zdmVsdGVgIGNvbXBvbmVudHMgYW5kIGAuc3ZlbHRlLnRzYCAvIGAuc3ZlbHRlLmpzYCBtb2R1bGVzLlxuICogLSBgc3R5bGVzYCwgd2hlcmUge0BsaW5rIENyZWF0ZVJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2luUGFyYW1zLnNob3VsZENvbXBpbGVTdHlsZXNoZWV0c30gc2F5cyBzbywgcnVucyBldmVyeVxuICogICBzdHlsZXNoZWV0IHRocm91Z2ggUG9zdENTUywgVGFpbHdpbmQgYW5kIENTUy1tb2R1bGUgc2NvcGluZyBhbmQgZW1pdHMgaXQgYXMgYW4gYXNzZXQsIHdoaWNoIGVuZHMgdXAgaW5cbiAqICAgYHN0eWxlcy5jc3NgLlxuICogLSBgd2FzbWAgbG9hZHMgYSBgLndhc21gIG1vZHVsZSBhcyBpdHMgYnl0ZXMuXG4gKiAtIEEgZnJhbWV3b3JrJ3MgY29tcGlsZS10aW1lIGNvbnN0YW50cyBhcmUgcmVwbGFjZWQgd2hlcmVcbiAqICAge0BsaW5rIENyZWF0ZVJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2luUGFyYW1zLnNob3VsZFJlcGxhY2VEZWZpbmVzfSBzYXlzIHNvLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIENyZWF0ZVJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBwbHVnaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSb2xsdXBDb21wYXRpYmxlRmVhdHVyZVBsdWdpbihwYXJhbXM6IENyZWF0ZVJvbGx1cENvbXBhdGlibGVGZWF0dXJlUGx1Z2luUGFyYW1zKTogUm9sbHVwQ29tcGF0aWJsZUZlYXR1cmVQbHVnaW4ge1xuICBjb25zdCB7IGZlYXR1cmVzLCBpc1Byb2R1Y3Rpb25CdWlsZCwgc2hvdWxkQ29tcGlsZVN0eWxlc2hlZXRzLCBzaG91bGRSZXBsYWNlRGVmaW5lcyB9ID0gcGFyYW1zO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHRyYW5zZm9ybUZlYXR1cmVGaWxlKGNvbnRleHQ6IEZlYXR1cmVQbHVnaW5Db250ZXh0LCBjb2RlOiBzdHJpbmcsIGlkOiBzdHJpbmcpOiBQcm9taXNlPG51bGwgfCBUcmFuc2Zvcm1SZXN1bHRMaWtlPiB7XG4gICAgY29uc3QgW2ZpbGVQYXRoID0gaWRdID0gaWQuc3BsaXQoJz8nLCAxKTtcbiAgICBzd2l0Y2ggKGdldEZlYXR1cmVGaWxlS2luZChpZCkpIHtcbiAgICAgIGNhc2UgJ2pzeCc6IHtcbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzLmZyYW1ld29yayA9PT0gJ3NvbGlkJyA/IGF3YWl0IHRyYW5zZm9ybVNvbGlkKHsgY29kZSwgZmlsZVBhdGgsIGlzUHJvZHVjdGlvbkJ1aWxkOiBpc1Byb2R1Y3Rpb25CdWlsZCgpIH0pIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3N0eWxlc2hlZXQnOiB7XG4gICAgICAgIGlmICghc2hvdWxkQ29tcGlsZVN0eWxlc2hlZXRzIHx8ICFmZWF0dXJlcy5zdHlsZXMpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFuc2Zvcm1Dc3Moe1xuICAgICAgICAgIGZpbGVQYXRoLFxuICAgICAgICAgIGlzQ3NzTW9kdWxlU2NvcGVkOiB0cnVlLFxuICAgICAgICAgIGlzUHJvZHVjdGlvbkJ1aWxkOiBpc1Byb2R1Y3Rpb25CdWlsZCgpLFxuICAgICAgICAgIHNvdXJjZTogY29kZSxcbiAgICAgICAgICBzdHlsZXM6IGZlYXR1cmVzLnN0eWxlc1xuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHJlc3VsdC5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmFkZFdhdGNoRmlsZShkZXBlbmRlbmN5KTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmVtaXRGaWxlKHsgbmFtZTogT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuU3R5bGVzQ3NzLCBzb3VyY2U6IHJlc3VsdC5jc3MsIHR5cGU6ICdhc3NldCcgfSk7XG4gICAgICAgIHJldHVybiB7IGNvZGU6IHJlc3VsdC5tb2R1bGVFeHBvcnRzID8gZ2V0Q3NzTW9kdWxlQ29kZShyZXN1bHQubW9kdWxlRXhwb3J0cykgOiAnZXhwb3J0IGRlZmF1bHQgdW5kZWZpbmVkO1xcbicgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3N2ZWx0ZSc6IHtcbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzLmZyYW1ld29yayA9PT0gJ3N2ZWx0ZScgPyBhd2FpdCB0cmFuc2Zvcm1TdmVsdGUoeyBjb2RlLCBmaWxlUGF0aCwgaXNQcm9kdWN0aW9uQnVpbGQ6IGlzUHJvZHVjdGlvbkJ1aWxkKCkgfSkgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvYWQ6IHtcbiAgICAgIGFzeW5jIGhhbmRsZXIoaWQpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuICFmZWF0dXJlcy53YXNtIHx8IGdldEZlYXR1cmVGaWxlS2luZChpZCkgIT09ICd3YXNtJyA/IG51bGwgOiBnZXRXYXNtTW9kdWxlQ29kZShhd2FpdCByZWFkRmlsZShpZCkpO1xuICAgICAgfSxcbiAgICAgIG9yZGVyOiAncHJlJ1xuICAgIH0sXG4gICAgbmFtZTogJ29ic2lkaWFuLXBsdWdpbi1mZWF0dXJlcycsXG4gICAgdHJhbnNmb3JtOiB7XG4gICAgICBhc3luYyBoYW5kbGVyKGNvZGUsIGlkKTogUHJvbWlzZTxudWxsIHwgVHJhbnNmb3JtUmVzdWx0TGlrZT4ge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IGF3YWl0IHRyYW5zZm9ybUZlYXR1cmVGaWxlKHRoaXMsIGNvZGUsIGlkKTtcbiAgICAgICAgaWYgKCFzaG91bGRSZXBsYWNlRGVmaW5lcykge1xuICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZpbmVzID0gZ2V0RnJhbWV3b3JrRGVmaW5lcyh7IGZyYW1ld29yazogZmVhdHVyZXMuZnJhbWV3b3JrLCBpc1Byb2R1Y3Rpb25CdWlsZDogaXNQcm9kdWN0aW9uQnVpbGQoKSB9KTtcbiAgICAgICAgY29uc3Qgc291cmNlID0gdHJhbnNmb3JtZWQ/LmNvZGUgPz8gY29kZTtcbiAgICAgICAgY29uc3QgcmVwbGFjZWQgPSByZXBsYWNlRGVmaW5lcyhzb3VyY2UsIGRlZmluZXMpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZWQgPT09IHNvdXJjZSA/IHRyYW5zZm9ybWVkIDogeyBjb2RlOiByZXBsYWNlZCwgbWFwOiB0cmFuc2Zvcm1lZD8ubWFwIH07XG4gICAgICB9LFxuICAgICAgb3JkZXI6ICdwcmUnXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGB1bnBsdWdpbi12dWVgIHBsdWdpbiBvZiBvbmUgYnVuZGxlciB3aGVuIHRoZSBmcmFtZXdvcmsgaXMgVnVlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIENyZWF0ZVVucGx1Z2luVnVlUGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHBsdWdpbiwgb3IgYG51bGxgIHdoZW4gdGhlIGZyYW1ld29yayBpcyBub3QgVnVlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVW5wbHVnaW5WdWVQbHVnaW4ocGFyYW1zOiBDcmVhdGVVbnBsdWdpblZ1ZVBsdWdpblBhcmFtcyk6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCB7IGJ1bmRsZXIsIGZlYXR1cmVzIH0gPSBwYXJhbXM7XG4gIGlmIChmZWF0dXJlcy5mcmFtZXdvcmsgIT09ICd2dWUnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgdW5wbHVnaW5WdWUgPSBhd2FpdCBpbXBvcnRPcHRpb25hbFBlZXI8VW5wbHVnaW5WdWVNb2R1bGU+KHtcbiAgICBmZWF0dXJlOiAnZnJhbWV3b3JrOiBcXCd2dWVcXCcnLFxuICAgIHBhY2thZ2VOYW1lOiAndW5wbHVnaW4tdnVlJyxcbiAgICBzcGVjaWZpZXI6IGB1bnBsdWdpbi12dWUvJHtidW5kbGVyfWBcbiAgfSk7XG4gIHJldHVybiB1bnBsdWdpblZ1ZS5kZWZhdWx0KCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQVFBLFNBQVMsZ0JBQWdCO0FBS3pCLFNBQVMsK0JBQStCO0FBQ3hDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQWlJQSxTQUFTLG9DQUFvQyxRQUFrRjtBQUNwSSxRQUFNLEVBQUUsVUFBVSxtQkFBbUIsMEJBQTBCLHFCQUFxQixJQUFJO0FBRXhGLGlCQUFlLHFCQUFxQixTQUErQixNQUFjLElBQWlEO0FBQ2hJLFVB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
@@ -0,0 +1,84 @@
1
+ /// <reference path="../library-references.d.mts" />
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;
@@ -0,0 +1,43 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ import { ObsidianPluginRepoPaths } from "../obsidian-plugin-repo-paths.mjs";
7
+ import {
8
+ isCssFileName,
9
+ isObsidianPluginExternal,
10
+ mergeCssAssets
11
+ } from "./obsidian-plugin-build.mjs";
12
+ function combineExternal(external) {
13
+ return (source, importer, isResolved) => isObsidianPluginExternal(source) || isMatchingExternal(external, source, importer, isResolved);
14
+ }
15
+ function renameCssAssets(assetEmitter, bundle) {
16
+ const cssAssets = Object.values(bundle).filter((output) => output.type === "asset" && isCssFileName(output.fileName)).map((asset) => ({
17
+ fileName: asset.fileName,
18
+ source: typeof asset.source === "string" ? asset.source : new TextDecoder().decode(asset.source)
19
+ }));
20
+ const { fileNamesToRemove, stylesCss } = mergeCssAssets(cssAssets);
21
+ if (stylesCss === void 0) {
22
+ return;
23
+ }
24
+ for (const fileName of fileNamesToRemove) {
25
+ delete bundle[fileName];
26
+ }
27
+ assetEmitter.emitFile({ fileName: ObsidianPluginRepoPaths.StylesCss, source: stylesCss, type: "asset" });
28
+ }
29
+ function isMatchingExternal(external, source, importer, isResolved) {
30
+ if (external === void 0) {
31
+ return false;
32
+ }
33
+ if (typeof external === "function") {
34
+ return Boolean(external(source, importer, isResolved));
35
+ }
36
+ const patterns = typeof external === "string" || external instanceof RegExp ? [external] : external;
37
+ return patterns.some((pattern) => typeof pattern === "string" ? pattern === source : pattern.test(source));
38
+ }
39
+ export {
40
+ combineExternal,
41
+ renameCssAssets
42
+ };
43
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL3JvbGx1cC1jb21wYXRpYmxlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHBpZWNlcyB0aGUgcm9sbHVwIGFuZCB2aXRlIGFkYXB0ZXJzIHNoYXJlLiBWaXRlIDggYnVpbGRzIHdpdGggcm9sbGRvd24sIHdob3NlIHBsdWdpbiBBUEkgaXNcbiAqIHJvbGx1cCdzIGJ1dCB3aG9zZSB0eXBlcyBhcmUgaXRzIG93biwgc28gdGhlc2UgYXJlIHR5cGVkIGJ5IHRoZSBzaGFwZSBib3RoIGFjY2VwdCByYXRoZXIgdGhhbiBieSBlaXRoZXJcbiAqIHBhY2thZ2UncyBkZWNsYXJhdGlvbnMuXG4gKi9cblxuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tICcuLi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5pbXBvcnQge1xuICBpc0Nzc0ZpbGVOYW1lLFxuICBpc09ic2lkaWFuUGx1Z2luRXh0ZXJuYWwsXG4gIG1lcmdlQ3NzQXNzZXRzXG59IGZyb20gJy4vb2JzaWRpYW4tcGx1Z2luLWJ1aWxkLnRzJztcblxuLyoqXG4gKiBUaGUgcGFydCBvZiBhIHJvbGx1cCBvciByb2xsZG93biBwbHVnaW4gY29udGV4dCB7QGxpbmsgcmVuYW1lQ3NzQXNzZXRzfSB1c2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0RW1pdHRlciB7XG4gIC8qKlxuICAgKiBFbWl0cyBhbiBhc3NldCBpbnRvIHRoZSBidW5kbGUuXG4gICAqXG4gICAqIEBwYXJhbSBlbWl0dGVkRmlsZSAtIFRoZSBhc3NldCB0byBlbWl0LlxuICAgKiBAcmV0dXJucyBUaGUgcmVmZXJlbmNlIGlkIG9mIHRoZSBlbWl0dGVkIGZpbGUuXG4gICAqL1xuICBlbWl0RmlsZTogKGVtaXR0ZWRGaWxlOiBFbWl0dGVkQ3NzQXNzZXQpID0+IHN0cmluZztcbn1cblxuLyoqXG4gKiBBbiBlbWl0dGVkIGZpbGUgb2YgYSByb2xsdXAgb3Igcm9sbGRvd24gYnVuZGxlLCBhcyB7QGxpbmsgcmVuYW1lQ3NzQXNzZXRzfSByZWFkcyBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVPdXRwdXRMaWtlIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIG5hbWUgcmVsYXRpdmUgdG8gdGhlIG91dHB1dCBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBhc3NldCdzIGNvbnRlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogc3RyaW5nIHwgVWludDhBcnJheTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZmlsZSBpcyBhbiBhc3NldCBvciBhIGNodW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogJ2Fzc2V0JyB8ICdjaHVuayc7XG59XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIHtAbGluayBjb21iaW5lRXh0ZXJuYWx9IHJldHVybnMsIHdoaWNoIGV2ZXJ5IGJ1bmRsZXIgb2YgdGhlIHJvbGx1cCBmYW1pbHkgYWNjZXB0cy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tYmluZWRFeHRlcm5hbEZ1bmN0aW9uID0gKHNvdXJjZTogc3RyaW5nLCBpbXBvcnRlcjogc3RyaW5nIHwgdW5kZWZpbmVkLCBpc1Jlc29sdmVkOiBib29sZWFuKSA9PiBib29sZWFuO1xuXG4vKipcbiAqIFRoZSBgc3R5bGVzLmNzc2AgYXNzZXQge0BsaW5rIHJlbmFtZUNzc0Fzc2V0c30gZW1pdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdHRlZENzc0Fzc2V0IHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIG5hbWUgcmVsYXRpdmUgdG8gdGhlIG91dHB1dCBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSdzIGNvbnRlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBraW5kIG9mIGVtaXR0ZWQgZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdhc3NldCc7XG59XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIGZvcm0gb2Yge0BsaW5rIEV4dGVybmFsTGlrZX0uIEl0cyByZXN1bHQgaXMgcmVhZCBmb3IgdHJ1dGhpbmVzcywgYXMgcm9sbHVwIGFuZCByb2xsZG93biByZWFkIGl0LlxuICovXG5leHBvcnQgdHlwZSBFeHRlcm5hbEZ1bmN0aW9uID0gKHNvdXJjZTogc3RyaW5nLCBpbXBvcnRlcjogc3RyaW5nIHwgdW5kZWZpbmVkLCBpc1Jlc29sdmVkOiBib29sZWFuKSA9PiB1bmtub3duO1xuXG4vKipcbiAqIFRoZSBgZXh0ZXJuYWxgIG9wdGlvbiBvZiByb2xsdXAgYW5kIG9mIHJvbGxkb3duLCBpbiB0aGUgc2hhcGUgYm90aCBhY2NlcHQuXG4gKi9cbmV4cG9ydCB0eXBlIEV4dGVybmFsTGlrZSA9IEV4dGVybmFsRnVuY3Rpb24gfCBFeHRlcm5hbFBhdHRlcm4gfCByZWFkb25seSBFeHRlcm5hbFBhdHRlcm5bXTtcblxuLyoqXG4gKiBPbmUgZW50cnkgb2YgdGhlIGFycmF5IGZvcm0gb2Yge0BsaW5rIEV4dGVybmFsTGlrZX0uXG4gKi9cbmV4cG9ydCB0eXBlIEV4dGVybmFsUGF0dGVybiA9IFJlZ0V4cCB8IHN0cmluZztcblxuLyoqXG4gKiBQdXRzIE9ic2lkaWFuJ3MgbW9kdWxlcyBhbmQgdGhlIE5vZGUgYnVpbHRpbnMgYmVzaWRlIHdoYXRldmVyIHRoZSBjb25zdW1lcidzIG93biBgZXh0ZXJuYWxgIG9wdGlvbiBuYW1lcy5cbiAqXG4gKiBAcGFyYW0gZXh0ZXJuYWwgLSBUaGUgY29uc3VtZXIncyBgZXh0ZXJuYWxgIG9wdGlvbi5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gZm9ybSBvZiBgZXh0ZXJuYWxgIHRoYXQga2VlcHMgYm90aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVFeHRlcm5hbChleHRlcm5hbDogRXh0ZXJuYWxMaWtlIHwgdW5kZWZpbmVkKTogQ29tYmluZWRFeHRlcm5hbEZ1bmN0aW9uIHtcbiAgcmV0dXJuIChzb3VyY2UsIGltcG9ydGVyLCBpc1Jlc29sdmVkKTogYm9vbGVhbiA9PiBpc09ic2lkaWFuUGx1Z2luRXh0ZXJuYWwoc291cmNlKSB8fCBpc01hdGNoaW5nRXh0ZXJuYWwoZXh0ZXJuYWwsIHNvdXJjZSwgaW1wb3J0ZXIsIGlzUmVzb2x2ZWQpO1xufVxuXG4vKipcbiAqIE1vdmVzIGV2ZXJ5IENTUyBhc3NldCBvZiBhIGJ1bmRsZSBpbnRvIG9uZSBgc3R5bGVzLmNzc2AsIHRoZSBvbmx5IHN0eWxlc2hlZXQgT2JzaWRpYW4gbG9hZHMuXG4gKlxuICogQHBhcmFtIGFzc2V0RW1pdHRlciAtIFRoZSBwbHVnaW4gY29udGV4dCB0byBlbWl0IGBzdHlsZXMuY3NzYCB0aHJvdWdoLlxuICogQHBhcmFtIGJ1bmRsZSAtIFRoZSBidW5kbGUgYWJvdXQgdG8gYmUgd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUNzc0Fzc2V0cyhhc3NldEVtaXR0ZXI6IEFzc2V0RW1pdHRlciwgYnVuZGxlOiBSZWNvcmQ8c3RyaW5nLCBCdW5kbGVPdXRwdXRMaWtlPik6IHZvaWQge1xuICBjb25zdCBjc3NBc3NldHMgPSBPYmplY3QudmFsdWVzKGJ1bmRsZSlcbiAgICAuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC50eXBlID09PSAnYXNzZXQnICYmIGlzQ3NzRmlsZU5hbWUob3V0cHV0LmZpbGVOYW1lKSlcbiAgICAubWFwKChhc3NldCkgPT4gKHtcbiAgICAgIGZpbGVOYW1lOiBhc3NldC5maWxlTmFtZSxcbiAgICAgIHNvdXJjZTogdHlwZW9mIGFzc2V0LnNvdXJjZSA9PT0gJ3N0cmluZycgPyBhc3NldC5zb3VyY2UgOiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYXNzZXQuc291cmNlKVxuICAgIH0pKTtcbiAgY29uc3QgeyBmaWxlTmFtZXNUb1JlbW92ZSwgc3R5bGVzQ3NzIH0gPSBtZXJnZUNzc0Fzc2V0cyhjc3NBc3NldHMpO1xuICBpZiAoc3R5bGVzQ3NzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlTmFtZXNUb1JlbW92ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gUmVtb3ZpbmcgYW4gZW50cnkgZnJvbSB0aGUgYnVuZGxlIGlzIGhvdyBhIHJvbGx1cCBwbHVnaW4gZHJvcHMgYW4gb3V0cHV0LlxuICAgIGRlbGV0ZSBidW5kbGVbZmlsZU5hbWVdO1xuICB9XG4gIGFzc2V0RW1pdHRlci5lbWl0RmlsZSh7IGZpbGVOYW1lOiBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TdHlsZXNDc3MsIHNvdXJjZTogc3R5bGVzQ3NzLCB0eXBlOiAnYXNzZXQnIH0pO1xufVxuXG5mdW5jdGlvbiBpc01hdGNoaW5nRXh0ZXJuYWwoZXh0ZXJuYWw6IEV4dGVybmFsTGlrZSB8IHVuZGVmaW5lZCwgc291cmNlOiBzdHJpbmcsIGltcG9ydGVyOiBzdHJpbmcgfCB1bmRlZmluZWQsIGlzUmVzb2x2ZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgaWYgKGV4dGVybmFsID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiBleHRlcm5hbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCb29sZWFuKGV4dGVybmFsKHNvdXJjZSwgaW1wb3J0ZXIsIGlzUmVzb2x2ZWQpKTtcbiAgfVxuICBjb25zdCBwYXR0ZXJuczogcmVhZG9ubHkgRXh0ZXJuYWxQYXR0ZXJuW10gPSB0eXBlb2YgZXh0ZXJuYWwgPT09ICdzdHJpbmcnIHx8IGV4dGVybmFsIGluc3RhbmNlb2YgUmVnRXhwID8gW2V4dGVybmFsXSA6IGV4dGVybmFsO1xuICByZXR1cm4gcGF0dGVybnMuc29tZSgocGF0dGVybikgPT4gdHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnID8gcGF0dGVybiA9PT0gc291cmNlIDogcGF0dGVybi50ZXN0KHNvdXJjZSkpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFRQSxTQUFTLCtCQUErQjtBQUN4QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFpRkEsU0FBUyxnQkFBZ0IsVUFBOEQ7QUFDNUYsU0FBTyxDQUFDLFFBQVEsVUFBVSxlQUF3Qix5QkFBeUIsTUFBTSxLQUFLLG1CQUFtQixVQUFVLFFBQVEsVUFBVSxVQUFVO0FBQ2pKO0FBUU8sU0FBUyxnQkFBZ0IsY0FBNEIsUUFBZ0Q7QUFDMUcsUUFBTSxZQUFZLE9BQU8sT0FBTyxNQUFNLEVBQ25DLE9BQU8sQ0FBQyxXQUFXLE9BQU8sU0FBUyxXQUFXLGNBQWMsT0FBTyxRQUFRLENBQUMsRUFDNUUsSUFBSSxDQUFDLFdBQVc7QUFBQSxJQUNmLFVBQVUsTUFBTTtBQUFBLElBQ2hCLFFBQVEsT0FBTyxNQUFNLFdBQVcsV0FBVyxNQUFNLFNBQVMsSUFBSSxZQUFZLEVBQUUsT0FBTyxNQUFNLE1BQU07QUFBQSxFQUNqRyxFQUFFO0FBQ0osUUFBTSxFQUFFLG1CQUFtQixVQUFVLElBQUksZUFBZSxTQUFTO0FBQ2pFLE1BQUksY0FBYyxRQUFXO0FBQzNCO0FBQUEsRUFDRjtBQUNBLGFBQVcsWUFBWSxtQkFBbUI7QUFFeEMsV0FBTyxPQUFPLFFBQVE7QUFBQSxFQUN4QjtBQUNBLGVBQWEsU0FBUyxFQUFFLFVBQVUsd0JBQXdCLFdBQVcsUUFBUSxXQUFXLE1BQU0sUUFBUSxDQUFDO0FBQ3pHO0FBRUEsU0FBUyxtQkFBbUIsVUFBb0MsUUFBZ0IsVUFBOEIsWUFBOEI7QUFDMUksTUFBSSxhQUFhLFFBQVc7QUFDMUIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ2xDLFdBQU8sUUFBUSxTQUFTLFFBQVEsVUFBVSxVQUFVLENBQUM7QUFBQSxFQUN2RDtBQUNBLFFBQU0sV0FBdUMsT0FBTyxhQUFhLFlBQVksb0JBQW9CLFNBQVMsQ0FBQyxRQUFRLElBQUk7QUFDdkgsU0FBTyxTQUFTLEtBQUssQ0FBQyxZQUFZLE9BQU8sWUFBWSxXQUFXLFlBQVksU0FBUyxRQUFRLEtBQUssTUFBTSxDQUFDO0FBQzNHOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,99 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Builds an Obsidian plugin with rollup: a rollup plugin that gives a build the same `main.js` +
6
+ * `styles.css` + `manifest.json` layout the esbuild builder produces, deploys a watch build into the vault,
7
+ * and fills in only the options the consumer's own `rollup.config` leaves unset.
8
+ *
9
+ * `rollup` is an optional peer dependency and this module only imports its types, so a plugin built with
10
+ * esbuild installs nothing extra.
11
+ */
12
+ import type { InputOptions, InputPluginOption, OutputOptions } from 'rollup';
13
+ import type { ObsidianPluginBuildContext, ObsidianPluginDeploymentOptions } from './obsidian-plugin-build.mjs';
14
+ import type { ObsidianPluginFeatureOptions } from './obsidian-plugin-features.mjs';
15
+ import { BuildMode } from './obsidian-plugin-build.mjs';
16
+ /**
17
+ * Parameters for {@link applyRollupInputDefaults}.
18
+ */
19
+ export interface ApplyRollupInputDefaultsParams {
20
+ /**
21
+ * The build context.
22
+ */
23
+ readonly buildContext: ObsidianPluginBuildContext;
24
+ /**
25
+ * The build features.
26
+ */
27
+ readonly features?: ObsidianPluginFeatureOptions;
28
+ /**
29
+ * The consumer's input options.
30
+ */
31
+ readonly inputOptions: InputOptions;
32
+ }
33
+ /**
34
+ * Parameters for {@link applyRollupOutputDefaults}.
35
+ */
36
+ export interface ApplyRollupOutputDefaultsParams {
37
+ /**
38
+ * The build context.
39
+ */
40
+ readonly buildContext: ObsidianPluginBuildContext;
41
+ /**
42
+ * The consumer's output options.
43
+ */
44
+ readonly outputOptions: OutputOptions;
45
+ }
46
+ /**
47
+ * Options for {@link obsidianPluginRollup}.
48
+ */
49
+ export interface ObsidianPluginRollupOptions extends ObsidianPluginDeploymentOptions, ObsidianPluginFeatureOptions {
50
+ /**
51
+ * The build mode. Defaults to {@link BuildMode.Development} in watch mode (`rollup --watch`) and
52
+ * {@link BuildMode.Production} otherwise.
53
+ */
54
+ readonly mode?: BuildMode;
55
+ }
56
+ /**
57
+ * Fills in the rollup input options the consumer left unset.
58
+ *
59
+ * @param params - The {@link ApplyRollupInputDefaultsParams}.
60
+ * @returns The input options with the plugin's defaults applied.
61
+ */
62
+ export declare function applyRollupInputDefaults(params: ApplyRollupInputDefaultsParams): InputOptions;
63
+ /**
64
+ * Fills in the rollup output options the consumer left unset.
65
+ *
66
+ * @param params - The {@link ApplyRollupOutputDefaultsParams}.
67
+ * @returns The output options with the plugin's defaults applied.
68
+ */
69
+ export declare function applyRollupOutputDefaults(params: ApplyRollupOutputDefaultsParams): OutputOptions;
70
+ /**
71
+ * Creates a rollup plugin that builds an Obsidian plugin.
72
+ *
73
+ * What it does, each only when the consumer's config has not said otherwise:
74
+ *
75
+ * - `input` is `src/main.ts`.
76
+ * - The output is one CommonJS `main.js` in `dist/build` (`dist/dev` in watch mode), with dynamic imports
77
+ * inlined, the generated-file banner, and an inline source map in development.
78
+ *
79
+ * And always: Obsidian's own modules (`obsidian`, `electron`, CodeMirror, Lezer) and the Node builtins are
80
+ * external beside the consumer's own `external`, the output folder is emptied before the first write,
81
+ * every emitted CSS file ends up in `styles.css`, `manifest.json` (and in development `.hotreload`) is
82
+ * copied beside it, and a development build is deployed into the vault named by `OBSIDIAN_CONFIG_FOLDER`.
83
+ *
84
+ * TypeScript, dependency resolution and minification stay the consumer's choice of rollup plugins, as they would be
85
+ * without this one. The build features ({@link ObsidianPluginFeatureOptions}) are the plugin's:
86
+ *
87
+ * - `framework: 'react' | 'preact'` sets rollup's `jsx` option to the automatic runtime (unless set), and the
88
+ * TypeScript plugin reads the same from the toolkit's tsconfig preset.
89
+ * - `framework: 'solid' | 'svelte'` compiles the components with the toolkit's shared transforms, and `'vue'` adds
90
+ * `unplugin-vue`.
91
+ * - Any framework replaces `process.env.NODE_ENV` (and Vue's feature flags) in the bundled code.
92
+ * - `styles` compiles every stylesheet itself (PostCSS, Tailwind, CSS modules), so rollup needs no CSS plugin; leave
93
+ * it out. `styles: {}` compiles plain CSS.
94
+ * - `wasm` imports a `.wasm` module as its bytes.
95
+ *
96
+ * @param options - The {@link ObsidianPluginRollupOptions}.
97
+ * @returns The rollup plugins, which rollup takes as one entry of its `plugins`.
98
+ */
99
+ export declare function obsidianPluginRollup(options?: ObsidianPluginRollupOptions): InputPluginOption[];
@@ -0,0 +1,130 @@
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
+
33
+ import { dirname } from "@mnaoumov/typescript-lib/path";
34
+ import {
35
+ BuildMode,
36
+ cleanObsidianPluginDistFolder,
37
+ completeObsidianPluginDistFolder,
38
+ getObsidianPluginBanner,
39
+ resolveObsidianPluginBuildContext
40
+ } from "./obsidian-plugin-build.mjs";
41
+ import { getJsxImportSource } from "./obsidian-plugin-features.mjs";
42
+ import { deployToObsidianPluginsFolder } from "./obsidian-plugins-folder-deployment.mjs";
43
+ import {
44
+ createRollupCompatibleFeaturePlugin,
45
+ createUnpluginVuePlugin
46
+ } from "./rollup-compatible-features.mjs";
47
+ import {
48
+ combineExternal,
49
+ renameCssAssets
50
+ } from "./rollup-compatible.mjs";
51
+ function applyRollupInputDefaults(params) {
52
+ const { buildContext, inputOptions } = params;
53
+ const jsxImportSource = getJsxImportSource(params.features?.framework);
54
+ return {
55
+ ...inputOptions,
56
+ external: combineExternal(inputOptions.external),
57
+ input: inputOptions.input ?? buildContext.entryPoint,
58
+ ...jsxImportSource !== void 0 && inputOptions.jsx === void 0 && { jsx: { jsxImportSource, mode: "automatic" } }
59
+ };
60
+ }
61
+ function applyRollupOutputDefaults(params) {
62
+ const { buildContext, outputOptions } = params;
63
+ const hasOutputLocation = outputOptions.file !== void 0 || outputOptions.dir !== void 0;
64
+ return {
65
+ ...outputOptions,
66
+ banner: outputOptions.banner ?? getObsidianPluginBanner("rollup"),
67
+ format: outputOptions.format ?? "cjs",
68
+ ...!hasOutputLocation && { file: buildContext.mainJsPath },
69
+ // An Obsidian plugin is one file: the manifest names `main.js` and nothing loads a second chunk.
70
+ inlineDynamicImports: outputOptions.inlineDynamicImports ?? true,
71
+ sourcemap: outputOptions.sourcemap ?? (!buildContext.isProductionBuild && "inline")
72
+ };
73
+ }
74
+ function obsidianPluginRollup(options = {}) {
75
+ const state = {
76
+ buildContext: void 0,
77
+ isDistFolderCleaned: false
78
+ };
79
+ function getBuildContext() {
80
+ if (!state.buildContext) {
81
+ throw new Error("The obsidian-plugin rollup plugin has not resolved its build context: its `options` hook did not run.");
82
+ }
83
+ return state.buildContext;
84
+ }
85
+ const featurePlugin = createRollupCompatibleFeaturePlugin({
86
+ features: options,
87
+ isProductionBuild: () => getBuildContext().isProductionBuild,
88
+ shouldCompileStylesheets: true,
89
+ shouldReplaceDefines: true
90
+ });
91
+ const plugin = {
92
+ generateBundle: {
93
+ handler(_outputOptions, bundle) {
94
+ renameCssAssets(this, bundle);
95
+ },
96
+ order: "post"
97
+ },
98
+ name: "obsidian-plugin",
99
+ async options(inputOptions) {
100
+ const mode = options.mode ?? (this.meta.watchMode ? BuildMode.Development : BuildMode.Production);
101
+ state.buildContext = await resolveObsidianPluginBuildContext({ ...options, mode });
102
+ return applyRollupInputDefaults({ buildContext: state.buildContext, features: options, inputOptions });
103
+ },
104
+ outputOptions(outputOptions) {
105
+ return applyRollupOutputDefaults({ buildContext: getBuildContext(), outputOptions });
106
+ },
107
+ async renderStart(outputOptions) {
108
+ if (state.isDistFolderCleaned) {
109
+ return;
110
+ }
111
+ state.isDistFolderCleaned = true;
112
+ await cleanObsidianPluginDistFolder(getOutputFolder(outputOptions));
113
+ },
114
+ async writeBundle(outputOptions) {
115
+ const buildContext = { ...getBuildContext(), distFolder: getOutputFolder(outputOptions) };
116
+ await completeObsidianPluginDistFolder(buildContext);
117
+ await deployToObsidianPluginsFolder(buildContext);
118
+ }
119
+ };
120
+ return [plugin, featurePlugin, createUnpluginVuePlugin({ bundler: "rollup", features: options })];
121
+ }
122
+ function getOutputFolder(outputOptions) {
123
+ return outputOptions.dir ?? dirname(outputOptions.file ?? "");
124
+ }
125
+ export {
126
+ applyRollupInputDefaults,
127
+ applyRollupOutputDefaults,
128
+ obsidianPluginRollup
129
+ };
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9yb2xsdXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEJ1aWxkcyBhbiBPYnNpZGlhbiBwbHVnaW4gd2l0aCByb2xsdXA6IGEgcm9sbHVwIHBsdWdpbiB0aGF0IGdpdmVzIGEgYnVpbGQgdGhlIHNhbWUgYG1haW4uanNgICtcbiAqIGBzdHlsZXMuY3NzYCArIGBtYW5pZmVzdC5qc29uYCBsYXlvdXQgdGhlIGVzYnVpbGQgYnVpbGRlciBwcm9kdWNlcywgZGVwbG95cyBhIHdhdGNoIGJ1aWxkIGludG8gdGhlIHZhdWx0LFxuICogYW5kIGZpbGxzIGluIG9ubHkgdGhlIG9wdGlvbnMgdGhlIGNvbnN1bWVyJ3Mgb3duIGByb2xsdXAuY29uZmlnYCBsZWF2ZXMgdW5zZXQuXG4gKlxuICogYHJvbGx1cGAgaXMgYW4gb3B0aW9uYWwgcGVlciBkZXBlbmRlbmN5IGFuZCB0aGlzIG1vZHVsZSBvbmx5IGltcG9ydHMgaXRzIHR5cGVzLCBzbyBhIHBsdWdpbiBidWlsdCB3aXRoXG4gKiBlc2J1aWxkIGluc3RhbGxzIG5vdGhpbmcgZXh0cmEuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBJbnB1dE9wdGlvbnMsXG4gIElucHV0UGx1Z2luT3B0aW9uLFxuICBOb3JtYWxpemVkT3V0cHV0T3B0aW9ucyxcbiAgT3V0cHV0T3B0aW9ucyxcbiAgUGx1Z2luXG59IGZyb20gJ3JvbGx1cCc7XG5cbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5QbHVnaW5CdWlsZENvbnRleHQsXG4gIE9ic2lkaWFuUGx1Z2luRGVwbG95bWVudE9wdGlvbnNcbn0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tYnVpbGQudHMnO1xuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblBsdWdpbkZlYXR1cmVPcHRpb25zIH0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tZmVhdHVyZXMudHMnO1xuXG5pbXBvcnQge1xuICBCdWlsZE1vZGUsXG4gIGNsZWFuT2JzaWRpYW5QbHVnaW5EaXN0Rm9sZGVyLFxuICBjb21wbGV0ZU9ic2lkaWFuUGx1Z2luRGlzdEZvbGRlcixcbiAgZ2V0T2JzaWRpYW5QbHVnaW5CYW5uZXIsXG4gIHJlc29sdmVPYnNpZGlhblBsdWdpbkJ1aWxkQ29udGV4dFxufSBmcm9tICcuL29ic2lkaWFuLXBsdWdpbi1idWlsZC50cyc7XG5pbXBvcnQgeyBnZXRKc3hJbXBvcnRTb3VyY2UgfSBmcm9tICcuL29ic2lkaWFuLXBsdWdpbi1mZWF0dXJlcy50cyc7XG5pbXBvcnQgeyBkZXBsb3lUb09ic2lkaWFuUGx1Z2luc0ZvbGRlciB9IGZyb20gJy4vb2JzaWRpYW4tcGx1Z2lucy1mb2xkZXItZGVwbG95bWVudC50cyc7XG5pbXBvcnQge1xuICBjcmVhdGVSb2xsdXBDb21wYXRpYmxlRmVhdHVyZVBsdWdpbixcbiAgY3JlYXRlVW5wbHVnaW5WdWVQbHVnaW5cbn0gZnJvbSAnLi9yb2xsdXAtY29tcGF0aWJsZS1mZWF0dXJlcy50cyc7XG5pbXBvcnQge1xuICBjb21iaW5lRXh0ZXJuYWwsXG4gIHJlbmFtZUNzc0Fzc2V0c1xufSBmcm9tICcuL3JvbGx1cC1jb21wYXRpYmxlLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYXBwbHlSb2xsdXBJbnB1dERlZmF1bHRzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBseVJvbGx1cElucHV0RGVmYXVsdHNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGJ1aWxkIGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBidWlsZENvbnRleHQ6IE9ic2lkaWFuUGx1Z2luQnVpbGRDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgYnVpbGQgZmVhdHVyZXMuXG4gICAqL1xuICByZWFkb25seSBmZWF0dXJlcz86IE9ic2lkaWFuUGx1Z2luRmVhdHVyZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25zdW1lcidzIGlucHV0IG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBpbnB1dE9wdGlvbnM6IElucHV0T3B0aW9ucztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYXBwbHlSb2xsdXBPdXRwdXREZWZhdWx0c30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbHlSb2xsdXBPdXRwdXREZWZhdWx0c1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYnVpbGQgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQ29udGV4dDogT2JzaWRpYW5QbHVnaW5CdWlsZENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25zdW1lcidzIG91dHB1dCBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0T3B0aW9uczogT3V0cHV0T3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgb2JzaWRpYW5QbHVnaW5Sb2xsdXB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2lkaWFuUGx1Z2luUm9sbHVwT3B0aW9ucyBleHRlbmRzIE9ic2lkaWFuUGx1Z2luRGVwbG95bWVudE9wdGlvbnMsIE9ic2lkaWFuUGx1Z2luRmVhdHVyZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGJ1aWxkIG1vZGUuIERlZmF1bHRzIHRvIHtAbGluayBCdWlsZE1vZGUuRGV2ZWxvcG1lbnR9IGluIHdhdGNoIG1vZGUgKGByb2xsdXAgLS13YXRjaGApIGFuZFxuICAgKiB7QGxpbmsgQnVpbGRNb2RlLlByb2R1Y3Rpb259IG90aGVyd2lzZS5cbiAgICovXG4gIHJlYWRvbmx5IG1vZGU/OiBCdWlsZE1vZGU7XG59XG5cbi8qKlxuICogVGhlIHN0YXRlIG9uZSB7QGxpbmsgb2JzaWRpYW5QbHVnaW5Sb2xsdXB9IGluc3RhbmNlIGtlZXBzIGFjcm9zcyB0aGUgaG9va3Mgb2YgYSBidWlsZCwgYW5kIGFjcm9zcyB0aGVcbiAqIHJlYnVpbGRzIG9mIGEgd2F0Y2guXG4gKi9cbmludGVyZmFjZSBPYnNpZGlhblBsdWdpblJvbGx1cFN0YXRlIHtcbiAgYnVpbGRDb250ZXh0OiBPYnNpZGlhblBsdWdpbkJ1aWxkQ29udGV4dCB8IHVuZGVmaW5lZDtcbiAgaXNEaXN0Rm9sZGVyQ2xlYW5lZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBGaWxscyBpbiB0aGUgcm9sbHVwIGlucHV0IG9wdGlvbnMgdGhlIGNvbnN1bWVyIGxlZnQgdW5zZXQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQXBwbHlSb2xsdXBJbnB1dERlZmF1bHRzUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBpbnB1dCBvcHRpb25zIHdpdGggdGhlIHBsdWdpbidzIGRlZmF1bHRzIGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVJvbGx1cElucHV0RGVmYXVsdHMocGFyYW1zOiBBcHBseVJvbGx1cElucHV0RGVmYXVsdHNQYXJhbXMpOiBJbnB1dE9wdGlvbnMge1xuICBjb25zdCB7IGJ1aWxkQ29udGV4dCwgaW5wdXRPcHRpb25zIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGpzeEltcG9ydFNvdXJjZSA9IGdldEpzeEltcG9ydFNvdXJjZShwYXJhbXMuZmVhdHVyZXM/LmZyYW1ld29yayk7XG4gIHJldHVybiB7XG4gICAgLi4uaW5wdXRPcHRpb25zLFxuICAgIGV4dGVybmFsOiBjb21iaW5lRXh0ZXJuYWwoaW5wdXRPcHRpb25zLmV4dGVybmFsKSxcbiAgICBpbnB1dDogaW5wdXRPcHRpb25zLmlucHV0ID8/IGJ1aWxkQ29udGV4dC5lbnRyeVBvaW50LFxuICAgIC4uLihqc3hJbXBvcnRTb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBpbnB1dE9wdGlvbnMuanN4ID09PSB1bmRlZmluZWQgJiYgeyBqc3g6IHsganN4SW1wb3J0U291cmNlLCBtb2RlOiAnYXV0b21hdGljJyB9IH0pXG4gIH07XG59XG5cbi8qKlxuICogRmlsbHMgaW4gdGhlIHJvbGx1cCBvdXRwdXQgb3B0aW9ucyB0aGUgY29uc3VtZXIgbGVmdCB1bnNldC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBBcHBseVJvbGx1cE91dHB1dERlZmF1bHRzUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBvdXRwdXQgb3B0aW9ucyB3aXRoIHRoZSBwbHVnaW4ncyBkZWZhdWx0cyBhcHBsaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlSb2xsdXBPdXRwdXREZWZhdWx0cyhwYXJhbXM6IEFwcGx5Um9sbHVwT3V0cHV0RGVmYXVsdHNQYXJhbXMpOiBPdXRwdXRPcHRpb25zIHtcbiAgY29uc3QgeyBidWlsZENvbnRleHQsIG91dHB1dE9wdGlvbnMgfSA9IHBhcmFtcztcbiAgY29uc3QgaGFzT3V0cHV0TG9jYXRpb24gPSBvdXRwdXRPcHRpb25zLmZpbGUgIT09IHVuZGVmaW5lZCB8fCBvdXRwdXRPcHRpb25zLmRpciAhPT0gdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIC4uLm91dHB1dE9wdGlvbnMsXG4gICAgYmFubmVyOiBvdXRwdXRPcHRpb25zLmJhbm5lciA/PyBnZXRPYnNpZGlhblBsdWdpbkJhbm5lcigncm9sbHVwJyksXG4gICAgZm9ybWF0OiBvdXRwdXRPcHRpb25zLmZvcm1hdCA/PyAnY2pzJyxcbiAgICAuLi4oIWhhc091dHB1dExvY2F0aW9uICYmIHsgZmlsZTogYnVpbGRDb250ZXh0Lm1haW5Kc1BhdGggfSksXG4gICAgLy8gQW4gT2JzaWRpYW4gcGx1Z2luIGlzIG9uZSBmaWxlOiB0aGUgbWFuaWZlc3QgbmFtZXMgYG1haW4uanNgIGFuZCBub3RoaW5nIGxvYWRzIGEgc2Vjb25kIGNodW5rLlxuICAgIGlubGluZUR5bmFtaWNJbXBvcnRzOiBvdXRwdXRPcHRpb25zLmlubGluZUR5bmFtaWNJbXBvcnRzID8/IHRydWUsXG4gICAgc291cmNlbWFwOiBvdXRwdXRPcHRpb25zLnNvdXJjZW1hcCA/PyAoIWJ1aWxkQ29udGV4dC5pc1Byb2R1Y3Rpb25CdWlsZCAmJiAnaW5saW5lJylcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcm9sbHVwIHBsdWdpbiB0aGF0IGJ1aWxkcyBhbiBPYnNpZGlhbiBwbHVnaW4uXG4gKlxuICogV2hhdCBpdCBkb2VzLCBlYWNoIG9ubHkgd2hlbiB0aGUgY29uc3VtZXIncyBjb25maWcgaGFzIG5vdCBzYWlkIG90aGVyd2lzZTpcbiAqXG4gKiAtIGBpbnB1dGAgaXMgYHNyYy9tYWluLnRzYC5cbiAqIC0gVGhlIG91dHB1dCBpcyBvbmUgQ29tbW9uSlMgYG1haW4uanNgIGluIGBkaXN0L2J1aWxkYCAoYGRpc3QvZGV2YCBpbiB3YXRjaCBtb2RlKSwgd2l0aCBkeW5hbWljIGltcG9ydHNcbiAqICAgaW5saW5lZCwgdGhlIGdlbmVyYXRlZC1maWxlIGJhbm5lciwgYW5kIGFuIGlubGluZSBzb3VyY2UgbWFwIGluIGRldmVsb3BtZW50LlxuICpcbiAqIEFuZCBhbHdheXM6IE9ic2lkaWFuJ3Mgb3duIG1vZHVsZXMgKGBvYnNpZGlhbmAsIGBlbGVjdHJvbmAsIENvZGVNaXJyb3IsIExlemVyKSBhbmQgdGhlIE5vZGUgYnVpbHRpbnMgYXJlXG4gKiBleHRlcm5hbCBiZXNpZGUgdGhlIGNvbnN1bWVyJ3Mgb3duIGBleHRlcm5hbGAsIHRoZSBvdXRwdXQgZm9sZGVyIGlzIGVtcHRpZWQgYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSxcbiAqIGV2ZXJ5IGVtaXR0ZWQgQ1NTIGZpbGUgZW5kcyB1cCBpbiBgc3R5bGVzLmNzc2AsIGBtYW5pZmVzdC5qc29uYCAoYW5kIGluIGRldmVsb3BtZW50IGAuaG90cmVsb2FkYCkgaXNcbiAqIGNvcGllZCBiZXNpZGUgaXQsIGFuZCBhIGRldmVsb3BtZW50IGJ1aWxkIGlzIGRlcGxveWVkIGludG8gdGhlIHZhdWx0IG5hbWVkIGJ5IGBPQlNJRElBTl9DT05GSUdfRk9MREVSYC5cbiAqXG4gKiBUeXBlU2NyaXB0LCBkZXBlbmRlbmN5IHJlc29sdXRpb24gYW5kIG1pbmlmaWNhdGlvbiBzdGF5IHRoZSBjb25zdW1lcidzIGNob2ljZSBvZiByb2xsdXAgcGx1Z2lucywgYXMgdGhleSB3b3VsZCBiZVxuICogd2l0aG91dCB0aGlzIG9uZS4gVGhlIGJ1aWxkIGZlYXR1cmVzICh7QGxpbmsgT2JzaWRpYW5QbHVnaW5GZWF0dXJlT3B0aW9uc30pIGFyZSB0aGUgcGx1Z2luJ3M6XG4gKlxuICogLSBgZnJhbWV3b3JrOiAncmVhY3QnIHwgJ3ByZWFjdCdgIHNldHMgcm9sbHVwJ3MgYGpzeGAgb3B0aW9uIHRvIHRoZSBhdXRvbWF0aWMgcnVudGltZSAodW5sZXNzIHNldCksIGFuZCB0aGVcbiAqICAgVHlwZVNjcmlwdCBwbHVnaW4gcmVhZHMgdGhlIHNhbWUgZnJvbSB0aGUgdG9vbGtpdCdzIHRzY29uZmlnIHByZXNldC5cbiAqIC0gYGZyYW1ld29yazogJ3NvbGlkJyB8ICdzdmVsdGUnYCBjb21waWxlcyB0aGUgY29tcG9uZW50cyB3aXRoIHRoZSB0b29sa2l0J3Mgc2hhcmVkIHRyYW5zZm9ybXMsIGFuZCBgJ3Z1ZSdgIGFkZHNcbiAqICAgYHVucGx1Z2luLXZ1ZWAuXG4gKiAtIEFueSBmcmFtZXdvcmsgcmVwbGFjZXMgYHByb2Nlc3MuZW52Lk5PREVfRU5WYCAoYW5kIFZ1ZSdzIGZlYXR1cmUgZmxhZ3MpIGluIHRoZSBidW5kbGVkIGNvZGUuXG4gKiAtIGBzdHlsZXNgIGNvbXBpbGVzIGV2ZXJ5IHN0eWxlc2hlZXQgaXRzZWxmIChQb3N0Q1NTLCBUYWlsd2luZCwgQ1NTIG1vZHVsZXMpLCBzbyByb2xsdXAgbmVlZHMgbm8gQ1NTIHBsdWdpbjsgbGVhdmVcbiAqICAgaXQgb3V0LiBgc3R5bGVzOiB7fWAgY29tcGlsZXMgcGxhaW4gQ1NTLlxuICogLSBgd2FzbWAgaW1wb3J0cyBhIGAud2FzbWAgbW9kdWxlIGFzIGl0cyBieXRlcy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgT2JzaWRpYW5QbHVnaW5Sb2xsdXBPcHRpb25zfS5cbiAqIEByZXR1cm5zIFRoZSByb2xsdXAgcGx1Z2lucywgd2hpY2ggcm9sbHVwIHRha2VzIGFzIG9uZSBlbnRyeSBvZiBpdHMgYHBsdWdpbnNgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb2JzaWRpYW5QbHVnaW5Sb2xsdXAob3B0aW9uczogT2JzaWRpYW5QbHVnaW5Sb2xsdXBPcHRpb25zID0ge30pOiBJbnB1dFBsdWdpbk9wdGlvbltdIHtcbiAgY29uc3Qgc3RhdGU6IE9ic2lkaWFuUGx1Z2luUm9sbHVwU3RhdGUgPSB7XG4gICAgYnVpbGRDb250ZXh0OiB1bmRlZmluZWQsXG4gICAgaXNEaXN0Rm9sZGVyQ2xlYW5lZDogZmFsc2VcbiAgfTtcblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gUm9sbHVwIGhvb2tzOyBleGVyY2lzZWQgYnkgdGhlIGJ1bmRsZXIgaW50ZWdyYXRpb24gdGVzdCBhZ2FpbnN0IGEgcmVhbCByb2xsdXAgYnVpbGQuICovXG4gIGZ1bmN0aW9uIGdldEJ1aWxkQ29udGV4dCgpOiBPYnNpZGlhblBsdWdpbkJ1aWxkQ29udGV4dCB7XG4gICAgaWYgKCFzdGF0ZS5idWlsZENvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIG9ic2lkaWFuLXBsdWdpbiByb2xsdXAgcGx1Z2luIGhhcyBub3QgcmVzb2x2ZWQgaXRzIGJ1aWxkIGNvbnRleHQ6IGl0cyBgb3B0aW9uc2AgaG9vayBkaWQgbm90IHJ1bi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlLmJ1aWxkQ29udGV4dDtcbiAgfVxuXG4gIGNvbnN0IGZlYXR1cmVQbHVnaW4gPSBjcmVhdGVSb2xsdXBDb21wYXRpYmxlRmVhdHVyZVBsdWdpbih7XG4gICAgZmVhdHVyZXM6IG9wdGlvbnMsXG4gICAgaXNQcm9kdWN0aW9uQnVpbGQ6ICgpID0+IGdldEJ1aWxkQ29udGV4dCgpLmlzUHJvZHVjdGlvbkJ1aWxkLFxuICAgIHNob3VsZENvbXBpbGVTdHlsZXNoZWV0czogdHJ1ZSxcbiAgICBzaG91bGRSZXBsYWNlRGVmaW5lczogdHJ1ZVxuICB9KTtcblxuICBjb25zdCBwbHVnaW46IFBsdWdpbiA9IHtcbiAgICBnZW5lcmF0ZUJ1bmRsZToge1xuICAgICAgaGFuZGxlcihfb3V0cHV0T3B0aW9ucywgYnVuZGxlKTogdm9pZCB7XG4gICAgICAgIHJlbmFtZUNzc0Fzc2V0cyh0aGlzLCBidW5kbGUpO1xuICAgICAgfSxcbiAgICAgIG9yZGVyOiAncG9zdCdcbiAgICB9LFxuICAgIG5hbWU6ICdvYnNpZGlhbi1wbHVnaW4nLFxuICAgIGFzeW5jIG9wdGlvbnMoaW5wdXRPcHRpb25zKTogUHJvbWlzZTxJbnB1dE9wdGlvbnM+IHtcbiAgICAgIGNvbnN0IG1vZGUgPSBvcHRpb25zLm1vZGUgPz8gKHRoaXMubWV0YS53YXRjaE1vZGUgPyBCdWlsZE1vZGUuRGV2ZWxvcG1lbnQgOiBCdWlsZE1vZGUuUHJvZHVjdGlvbik7XG4gICAgICBzdGF0ZS5idWlsZENvbnRleHQgPSBhd2FpdCByZXNvbHZlT2JzaWRpYW5QbHVnaW5CdWlsZENvbnRleHQoeyAuLi5vcHRpb25zLCBtb2RlIH0pO1xuICAgICAgcmV0dXJuIGFwcGx5Um9sbHVwSW5wdXREZWZhdWx0cyh7IGJ1aWxkQ29udGV4dDogc3RhdGUuYnVpbGRDb250ZXh0LCBmZWF0dXJlczogb3B0aW9ucywgaW5wdXRPcHRpb25zIH0pO1xuICAgIH0sXG4gICAgb3V0cHV0T3B0aW9ucyhvdXRwdXRPcHRpb25zKTogT3V0cHV0T3B0aW9ucyB7XG4gICAgICByZXR1cm4gYXBwbHlSb2xsdXBPdXRwdXREZWZhdWx0cyh7IGJ1aWxkQ29udGV4dDogZ2V0QnVpbGRDb250ZXh0KCksIG91dHB1dE9wdGlvbnMgfSk7XG4gICAgfSxcbiAgICBhc3luYyByZW5kZXJTdGFydChvdXRwdXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBpZiAoc3RhdGUuaXNEaXN0Rm9sZGVyQ2xlYW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzdGF0ZS5pc0Rpc3RGb2xkZXJDbGVhbmVkID0gdHJ1ZTtcbiAgICAgIGF3YWl0IGNsZWFuT2JzaWRpYW5QbHVnaW5EaXN0Rm9sZGVyKGdldE91dHB1dEZvbGRlcihvdXRwdXRPcHRpb25zKSk7XG4gICAgfSxcbiAgICBhc3luYyB3cml0ZUJ1bmRsZShvdXRwdXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBidWlsZENvbnRleHQgPSB7IC4uLmdldEJ1aWxkQ29udGV4dCgpLCBkaXN0Rm9sZGVyOiBnZXRPdXRwdXRGb2xkZXIob3V0cHV0T3B0aW9ucykgfTtcbiAgICAgIGF3YWl0IGNvbXBsZXRlT2JzaWRpYW5QbHVnaW5EaXN0Rm9sZGVyKGJ1aWxkQ29udGV4dCk7XG4gICAgICBhd2FpdCBkZXBsb3lUb09ic2lkaWFuUGx1Z2luc0ZvbGRlcihidWlsZENvbnRleHQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIFtwbHVnaW4sIGZlYXR1cmVQbHVnaW4gYXMgUGx1Z2luLCBjcmVhdGVVbnBsdWdpblZ1ZVBsdWdpbih7IGJ1bmRsZXI6ICdyb2xsdXAnLCBmZWF0dXJlczogb3B0aW9ucyB9KSBhcyBQcm9taXNlPG51bGwgfCBQbHVnaW4+XTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIFBhcnQgb2YgdGhlIHJvbGx1cCBob29rcyBhYm92ZS4gKi9cbmZ1bmN0aW9uIGdldE91dHB1dEZvbGRlcihvdXRwdXRPcHRpb25zOiBOb3JtYWxpemVkT3V0cHV0T3B0aW9ucyk6IHN0cmluZyB7XG4gIHJldHVybiBvdXRwdXRPcHRpb25zLmRpciA/PyBkaXJuYW1lKG91dHB1dE9wdGlvbnMuZmlsZSA/PyAnJyk7XG59XG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxTQUFTLGVBQWU7QUFReEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLHFDQUFx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
@@ -0,0 +1,105 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Builds an Obsidian plugin with vite: a vite plugin that turns `vite build` into a library build of
6
+ * `src/main.ts` with the same `main.js` + `styles.css` + `manifest.json` layout the esbuild builder
7
+ * produces, deploys a `vite build --watch` build into the vault, and fills in only the options the
8
+ * consumer's own `vite.config` leaves unset.
9
+ *
10
+ * `vite` is an optional peer dependency and this module only imports its types, so a plugin built with
11
+ * esbuild installs nothing extra.
12
+ */
13
+ import type { ConfigEnv, PluginOption, UserConfig } from 'vite';
14
+ import type { ObsidianPluginBuildContext, ObsidianPluginDeploymentOptions } from './obsidian-plugin-build.mjs';
15
+ import type { ObsidianPluginFeatureOptions } from './obsidian-plugin-features.mjs';
16
+ import type { PostcssConfig } from './obsidian-plugin-transforms.mjs';
17
+ import { BuildMode } from './obsidian-plugin-build.mjs';
18
+ /**
19
+ * Parameters for {@link getViteFeatureConfig}.
20
+ */
21
+ export interface GetViteFeatureConfigParams {
22
+ /**
23
+ * The build features.
24
+ */
25
+ readonly features: ObsidianPluginFeatureOptions;
26
+ /**
27
+ * Whether this is a production build.
28
+ */
29
+ readonly isProductionBuild: boolean;
30
+ /**
31
+ * The PostCSS plugins of the `styles` option, or `undefined` when it needs none.
32
+ */
33
+ readonly postcssConfig: PostcssConfig | undefined;
34
+ /**
35
+ * The consumer's vite config.
36
+ */
37
+ readonly userConfig: UserConfig;
38
+ }
39
+ /**
40
+ * Options for {@link obsidianPluginVite}.
41
+ */
42
+ export interface ObsidianPluginViteOptions extends ObsidianPluginDeploymentOptions, ObsidianPluginFeatureOptions {
43
+ /**
44
+ * The build mode. Defaults to {@link BuildMode.Development} for `vite build --watch` (or
45
+ * `--mode development`) and {@link BuildMode.Production} otherwise.
46
+ */
47
+ readonly mode?: BuildMode;
48
+ }
49
+ /**
50
+ * Decides the build mode of a vite build from the consumer's config: development for a watch build or for
51
+ * `--mode development`, production otherwise.
52
+ *
53
+ * @param userConfig - The consumer's vite config.
54
+ * @param env - The vite config environment.
55
+ * @returns The build mode.
56
+ */
57
+ export declare function getViteBuildMode(userConfig: UserConfig, env: Pick<ConfigEnv, 'mode'>): BuildMode;
58
+ /**
59
+ * Builds the part of the vite config the plugin contributes: only the options the consumer left unset.
60
+ *
61
+ * @param userConfig - The consumer's vite config.
62
+ * @param buildContext - The build context.
63
+ * @returns The config vite merges into the consumer's.
64
+ */
65
+ export declare function getViteConfigDefaults(userConfig: UserConfig, buildContext: ObsidianPluginBuildContext): UserConfig;
66
+ /**
67
+ * Builds the part of the vite config the build features contribute, each only where the consumer's config left it
68
+ * unset: the framework's compile-time constants (`define`), the automatic JSX runtime for React and Preact
69
+ * (`oxc.jsx`), and the PostCSS plugins of the `styles` option (`css.postcss`).
70
+ *
71
+ * @param params - The {@link GetViteFeatureConfigParams}.
72
+ * @returns The config vite merges into the consumer's.
73
+ */
74
+ export declare function getViteFeatureConfig(params: GetViteFeatureConfigParams): UserConfig;
75
+ /**
76
+ * Creates a vite plugin that builds an Obsidian plugin.
77
+ *
78
+ * What it does, each only when the consumer's config has not said otherwise:
79
+ *
80
+ * - `build.lib` builds `src/main.ts` as one CommonJS `main.js`, with its CSS in `styles.css`.
81
+ * - `build.outDir` is `dist/build` (`dist/dev` in development).
82
+ * - `build.minify` is on in production only, and `build.sourcemap` is inline in development only.
83
+ * - Every asset is inlined, because an Obsidian release ships `main.js` and `styles.css` and nothing else.
84
+ * - Dynamic imports are inlined into `main.js`, and the generated-file banner heads it.
85
+ *
86
+ * And always: Obsidian's own modules (`obsidian`, `electron`, CodeMirror, Lezer) and the Node builtins are
87
+ * external beside the consumer's own `external`, the output folder is emptied once before the first write
88
+ * (`build.emptyOutDir` is turned off, since this plugin does it), every emitted CSS file ends up in
89
+ * `styles.css`, `manifest.json` (and in development `.hotreload`) is copied beside it, and a development
90
+ * build is deployed into the vault named by `OBSIDIAN_CONFIG_FOLDER`.
91
+ *
92
+ * The build features ({@link ObsidianPluginFeatureOptions}):
93
+ *
94
+ * - `framework: 'react' | 'preact'` sets `oxc.jsx` to the automatic runtime (unless set).
95
+ * - `framework: 'solid' | 'svelte'` compiles the components with the toolkit's shared transforms, and `'vue'` adds
96
+ * `unplugin-vue`.
97
+ * - Any framework defines `process.env.NODE_ENV` (and Vue's feature flags), which a library build leaves alone.
98
+ * - `styles.postcss` and `styles.tailwind` set `css.postcss` (unless set); vite scopes `*.module.css` itself, so
99
+ * `styles.cssModules` changes nothing here.
100
+ * - `wasm` imports a `.wasm` module as its bytes.
101
+ *
102
+ * @param options - The {@link ObsidianPluginViteOptions}.
103
+ * @returns The vite plugins, which vite takes as one entry of its `plugins`.
104
+ */
105
+ export declare function obsidianPluginVite(options?: ObsidianPluginViteOptions): PluginOption[];