@frontmcp/uipack 0.6.1 → 0.6.3
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/CLAUDE.md +88 -105
- package/README.md +1 -0
- package/adapters/index.d.ts +1 -1
- package/adapters/index.d.ts.map +1 -1
- package/adapters/index.js +35 -2
- package/adapters/platform-meta.d.ts +29 -0
- package/adapters/platform-meta.d.ts.map +1 -1
- package/base-template/default-base-template.d.ts +0 -1
- package/base-template/default-base-template.d.ts.map +1 -1
- package/base-template/index.js +32 -37
- package/build/builders/base-builder.d.ts +124 -0
- package/build/builders/base-builder.d.ts.map +1 -0
- package/build/builders/esbuild-config.d.ts +94 -0
- package/build/builders/esbuild-config.d.ts.map +1 -0
- package/build/builders/hybrid-builder.d.ts +93 -0
- package/build/builders/hybrid-builder.d.ts.map +1 -0
- package/build/builders/index.d.ts +17 -0
- package/build/builders/index.d.ts.map +1 -0
- package/build/builders/inline-builder.d.ts +83 -0
- package/build/builders/inline-builder.d.ts.map +1 -0
- package/build/builders/static-builder.d.ts +78 -0
- package/build/builders/static-builder.d.ts.map +1 -0
- package/build/builders/types.d.ts +341 -0
- package/build/builders/types.d.ts.map +1 -0
- package/build/cdn-resources.d.ts +3 -2
- package/build/cdn-resources.d.ts.map +1 -1
- package/build/hybrid-data.d.ts +127 -0
- package/build/hybrid-data.d.ts.map +1 -0
- package/build/index.d.ts +4 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1901 -173
- package/build/ui-components-browser.d.ts +64 -0
- package/build/ui-components-browser.d.ts.map +1 -0
- package/build/widget-manifest.d.ts.map +1 -1
- package/bundler/file-cache/component-builder.d.ts.map +1 -1
- package/bundler/file-cache/storage/redis.d.ts.map +1 -1
- package/bundler/index.js +11 -6
- package/dependency/cdn-registry.d.ts +1 -1
- package/dependency/cdn-registry.d.ts.map +1 -1
- package/dependency/import-map.d.ts.map +1 -1
- package/dependency/index.js +93 -121
- package/dependency/resolver.d.ts.map +1 -1
- package/esm/adapters/{index.js → index.mjs} +34 -2
- package/esm/base-template/{index.js → index.mjs} +32 -37
- package/esm/build/{index.js → index.mjs} +1872 -173
- package/esm/bundler/{index.js → index.mjs} +12 -7
- package/esm/dependency/{index.js → index.mjs} +93 -121
- package/esm/handlebars/{index.js → index.mjs} +0 -1
- package/esm/{index.js → index.mjs} +2532 -827
- package/esm/package.json +15 -16
- package/esm/registry/{index.js → index.mjs} +200 -265
- package/esm/renderers/{index.js → index.mjs} +110 -201
- package/esm/runtime/{index.js → index.mjs} +44 -35
- package/esm/styles/{index.js → index.mjs} +6 -6
- package/esm/theme/{index.js → index.mjs} +90 -42
- package/esm/tool-template/{index.js → index.mjs} +35 -28
- package/esm/typings/{index.js → index.mjs} +157 -1
- package/esm/utils/{index.js → index.mjs} +24 -0
- package/esm/validation/{index.js → index.mjs} +0 -1
- package/handlebars/expression-extractor.d.ts.map +1 -1
- package/handlebars/index.d.ts.map +1 -1
- package/handlebars/index.js +0 -1
- package/index.d.ts +2 -1
- package/index.d.ts.map +1 -1
- package/index.js +2560 -831
- package/package.json +7 -6
- package/preview/claude-preview.d.ts +67 -0
- package/preview/claude-preview.d.ts.map +1 -0
- package/preview/generic-preview.d.ts +67 -0
- package/preview/generic-preview.d.ts.map +1 -0
- package/preview/index.d.ts +36 -0
- package/preview/index.d.ts.map +1 -0
- package/preview/openai-preview.d.ts +70 -0
- package/preview/openai-preview.d.ts.map +1 -0
- package/preview/types.d.ts +185 -0
- package/preview/types.d.ts.map +1 -0
- package/registry/index.js +200 -265
- package/registry/render-template.d.ts.map +1 -1
- package/renderers/index.d.ts +2 -2
- package/renderers/index.d.ts.map +1 -1
- package/renderers/index.js +114 -205
- package/renderers/mdx-client.renderer.d.ts +124 -0
- package/renderers/mdx-client.renderer.d.ts.map +1 -0
- package/renderers/registry.d.ts +2 -2
- package/renderers/registry.d.ts.map +1 -1
- package/renderers/types.d.ts +3 -2
- package/renderers/types.d.ts.map +1 -1
- package/renderers/utils/transpiler.d.ts +8 -27
- package/renderers/utils/transpiler.d.ts.map +1 -1
- package/runtime/index.js +44 -35
- package/runtime/mcp-bridge.d.ts.map +1 -1
- package/runtime/renderer-runtime.d.ts.map +1 -1
- package/runtime/wrapper.d.ts.map +1 -1
- package/styles/index.js +6 -6
- package/styles/variants.d.ts +1 -1
- package/styles/variants.d.ts.map +1 -1
- package/theme/cdn.d.ts.map +1 -1
- package/theme/css-to-theme.d.ts +91 -0
- package/theme/css-to-theme.d.ts.map +1 -0
- package/theme/index.d.ts +2 -1
- package/theme/index.d.ts.map +1 -1
- package/theme/index.js +92 -43
- package/theme/platforms.d.ts +1 -6
- package/theme/platforms.d.ts.map +1 -1
- package/theme/theme.d.ts.map +1 -1
- package/tool-template/builder.d.ts.map +1 -1
- package/tool-template/index.js +35 -28
- package/typings/index.d.ts +4 -4
- package/typings/index.d.ts.map +1 -1
- package/typings/index.js +162 -1
- package/typings/schemas.d.ts +30 -0
- package/typings/schemas.d.ts.map +1 -1
- package/typings/type-fetcher.d.ts +74 -1
- package/typings/type-fetcher.d.ts.map +1 -1
- package/typings/types.d.ts +72 -1
- package/typings/types.d.ts.map +1 -1
- package/utils/escape-html.d.ts +44 -0
- package/utils/escape-html.d.ts.map +1 -1
- package/utils/index.d.ts +1 -1
- package/utils/index.d.ts.map +1 -1
- package/utils/index.js +26 -0
- package/validation/index.js +0 -1
- package/validation/template-validator.d.ts.map +1 -1
- package/esm/adapters/index.d.ts +0 -13
- package/esm/adapters/index.d.ts.map +0 -1
- package/esm/adapters/platform-meta.d.ts +0 -166
- package/esm/adapters/platform-meta.d.ts.map +0 -1
- package/esm/adapters/response-builder.d.ts +0 -108
- package/esm/adapters/response-builder.d.ts.map +0 -1
- package/esm/adapters/serving-mode.d.ts +0 -107
- package/esm/adapters/serving-mode.d.ts.map +0 -1
- package/esm/base-template/bridge.d.ts +0 -90
- package/esm/base-template/bridge.d.ts.map +0 -1
- package/esm/base-template/default-base-template.d.ts +0 -92
- package/esm/base-template/default-base-template.d.ts.map +0 -1
- package/esm/base-template/index.d.ts +0 -15
- package/esm/base-template/index.d.ts.map +0 -1
- package/esm/base-template/polyfills.d.ts +0 -31
- package/esm/base-template/polyfills.d.ts.map +0 -1
- package/esm/base-template/theme-styles.d.ts +0 -74
- package/esm/base-template/theme-styles.d.ts.map +0 -1
- package/esm/bridge-runtime/iife-generator.d.ts +0 -62
- package/esm/bridge-runtime/iife-generator.d.ts.map +0 -1
- package/esm/bridge-runtime/index.d.ts +0 -10
- package/esm/bridge-runtime/index.d.ts.map +0 -1
- package/esm/build/cdn-resources.d.ts +0 -243
- package/esm/build/cdn-resources.d.ts.map +0 -1
- package/esm/build/index.d.ts +0 -295
- package/esm/build/index.d.ts.map +0 -1
- package/esm/build/widget-manifest.d.ts +0 -362
- package/esm/build/widget-manifest.d.ts.map +0 -1
- package/esm/bundler/cache.d.ts +0 -173
- package/esm/bundler/cache.d.ts.map +0 -1
- package/esm/bundler/file-cache/component-builder.d.ts +0 -167
- package/esm/bundler/file-cache/component-builder.d.ts.map +0 -1
- package/esm/bundler/file-cache/hash-calculator.d.ts +0 -155
- package/esm/bundler/file-cache/hash-calculator.d.ts.map +0 -1
- package/esm/bundler/file-cache/index.d.ts +0 -12
- package/esm/bundler/file-cache/index.d.ts.map +0 -1
- package/esm/bundler/file-cache/storage/filesystem.d.ts +0 -149
- package/esm/bundler/file-cache/storage/filesystem.d.ts.map +0 -1
- package/esm/bundler/file-cache/storage/index.d.ts +0 -11
- package/esm/bundler/file-cache/storage/index.d.ts.map +0 -1
- package/esm/bundler/file-cache/storage/interface.d.ts +0 -152
- package/esm/bundler/file-cache/storage/interface.d.ts.map +0 -1
- package/esm/bundler/file-cache/storage/redis.d.ts +0 -139
- package/esm/bundler/file-cache/storage/redis.d.ts.map +0 -1
- package/esm/bundler/index.d.ts +0 -35
- package/esm/bundler/index.d.ts.map +0 -1
- package/esm/bundler/sandbox/enclave-adapter.d.ts +0 -121
- package/esm/bundler/sandbox/enclave-adapter.d.ts.map +0 -1
- package/esm/bundler/sandbox/executor.d.ts +0 -14
- package/esm/bundler/sandbox/executor.d.ts.map +0 -1
- package/esm/bundler/sandbox/policy.d.ts +0 -62
- package/esm/bundler/sandbox/policy.d.ts.map +0 -1
- package/esm/bundler/types.d.ts +0 -702
- package/esm/bundler/types.d.ts.map +0 -1
- package/esm/dependency/cdn-registry.d.ts +0 -98
- package/esm/dependency/cdn-registry.d.ts.map +0 -1
- package/esm/dependency/import-map.d.ts +0 -186
- package/esm/dependency/import-map.d.ts.map +0 -1
- package/esm/dependency/import-parser.d.ts +0 -82
- package/esm/dependency/import-parser.d.ts.map +0 -1
- package/esm/dependency/index.d.ts +0 -17
- package/esm/dependency/index.d.ts.map +0 -1
- package/esm/dependency/resolver.d.ts +0 -164
- package/esm/dependency/resolver.d.ts.map +0 -1
- package/esm/dependency/schemas.d.ts +0 -486
- package/esm/dependency/schemas.d.ts.map +0 -1
- package/esm/dependency/template-loader.d.ts +0 -204
- package/esm/dependency/template-loader.d.ts.map +0 -1
- package/esm/dependency/template-processor.d.ts +0 -118
- package/esm/dependency/template-processor.d.ts.map +0 -1
- package/esm/dependency/types.d.ts +0 -739
- package/esm/dependency/types.d.ts.map +0 -1
- package/esm/handlebars/expression-extractor.d.ts +0 -147
- package/esm/handlebars/expression-extractor.d.ts.map +0 -1
- package/esm/handlebars/helpers.d.ts +0 -339
- package/esm/handlebars/helpers.d.ts.map +0 -1
- package/esm/handlebars/index.d.ts +0 -195
- package/esm/handlebars/index.d.ts.map +0 -1
- package/esm/index.d.ts +0 -50
- package/esm/index.d.ts.map +0 -1
- package/esm/registry/index.d.ts +0 -46
- package/esm/registry/index.d.ts.map +0 -1
- package/esm/registry/render-template.d.ts +0 -91
- package/esm/registry/render-template.d.ts.map +0 -1
- package/esm/registry/tool-ui.registry.d.ts +0 -294
- package/esm/registry/tool-ui.registry.d.ts.map +0 -1
- package/esm/registry/uri-utils.d.ts +0 -56
- package/esm/registry/uri-utils.d.ts.map +0 -1
- package/esm/renderers/cache.d.ts +0 -145
- package/esm/renderers/cache.d.ts.map +0 -1
- package/esm/renderers/html.renderer.d.ts +0 -123
- package/esm/renderers/html.renderer.d.ts.map +0 -1
- package/esm/renderers/index.d.ts +0 -36
- package/esm/renderers/index.d.ts.map +0 -1
- package/esm/renderers/mdx.renderer.d.ts +0 -120
- package/esm/renderers/mdx.renderer.d.ts.map +0 -1
- package/esm/renderers/registry.d.ts +0 -133
- package/esm/renderers/registry.d.ts.map +0 -1
- package/esm/renderers/types.d.ts +0 -342
- package/esm/renderers/types.d.ts.map +0 -1
- package/esm/renderers/utils/detect.d.ts +0 -107
- package/esm/renderers/utils/detect.d.ts.map +0 -1
- package/esm/renderers/utils/hash.d.ts +0 -40
- package/esm/renderers/utils/hash.d.ts.map +0 -1
- package/esm/renderers/utils/index.d.ts +0 -9
- package/esm/renderers/utils/index.d.ts.map +0 -1
- package/esm/renderers/utils/transpiler.d.ts +0 -89
- package/esm/renderers/utils/transpiler.d.ts.map +0 -1
- package/esm/runtime/adapters/html.adapter.d.ts +0 -59
- package/esm/runtime/adapters/html.adapter.d.ts.map +0 -1
- package/esm/runtime/adapters/index.d.ts +0 -26
- package/esm/runtime/adapters/index.d.ts.map +0 -1
- package/esm/runtime/adapters/mdx.adapter.d.ts +0 -73
- package/esm/runtime/adapters/mdx.adapter.d.ts.map +0 -1
- package/esm/runtime/adapters/types.d.ts +0 -95
- package/esm/runtime/adapters/types.d.ts.map +0 -1
- package/esm/runtime/csp.d.ts +0 -48
- package/esm/runtime/csp.d.ts.map +0 -1
- package/esm/runtime/index.d.ts +0 -17
- package/esm/runtime/index.d.ts.map +0 -1
- package/esm/runtime/mcp-bridge.d.ts +0 -101
- package/esm/runtime/mcp-bridge.d.ts.map +0 -1
- package/esm/runtime/renderer-runtime.d.ts +0 -133
- package/esm/runtime/renderer-runtime.d.ts.map +0 -1
- package/esm/runtime/sanitizer.d.ts +0 -172
- package/esm/runtime/sanitizer.d.ts.map +0 -1
- package/esm/runtime/types.d.ts +0 -415
- package/esm/runtime/types.d.ts.map +0 -1
- package/esm/runtime/wrapper.d.ts +0 -421
- package/esm/runtime/wrapper.d.ts.map +0 -1
- package/esm/styles/index.d.ts +0 -8
- package/esm/styles/index.d.ts.map +0 -1
- package/esm/styles/variants.d.ts +0 -51
- package/esm/styles/variants.d.ts.map +0 -1
- package/esm/theme/cdn.d.ts +0 -195
- package/esm/theme/cdn.d.ts.map +0 -1
- package/esm/theme/index.d.ts +0 -18
- package/esm/theme/index.d.ts.map +0 -1
- package/esm/theme/platforms.d.ts +0 -107
- package/esm/theme/platforms.d.ts.map +0 -1
- package/esm/theme/presets/github-openai.d.ts +0 -50
- package/esm/theme/presets/github-openai.d.ts.map +0 -1
- package/esm/theme/presets/index.d.ts +0 -11
- package/esm/theme/presets/index.d.ts.map +0 -1
- package/esm/theme/theme.d.ts +0 -396
- package/esm/theme/theme.d.ts.map +0 -1
- package/esm/tool-template/builder.d.ts +0 -213
- package/esm/tool-template/builder.d.ts.map +0 -1
- package/esm/tool-template/index.d.ts +0 -16
- package/esm/tool-template/index.d.ts.map +0 -1
- package/esm/types/index.d.ts +0 -14
- package/esm/types/index.d.ts.map +0 -1
- package/esm/types/ui-config.d.ts +0 -641
- package/esm/types/ui-config.d.ts.map +0 -1
- package/esm/types/ui-runtime.d.ts +0 -1008
- package/esm/types/ui-runtime.d.ts.map +0 -1
- package/esm/typings/cache/cache-adapter.d.ts +0 -125
- package/esm/typings/cache/cache-adapter.d.ts.map +0 -1
- package/esm/typings/cache/index.d.ts +0 -10
- package/esm/typings/cache/index.d.ts.map +0 -1
- package/esm/typings/cache/memory-cache.d.ts +0 -92
- package/esm/typings/cache/memory-cache.d.ts.map +0 -1
- package/esm/typings/dts-parser.d.ts +0 -90
- package/esm/typings/dts-parser.d.ts.map +0 -1
- package/esm/typings/index.d.ts +0 -48
- package/esm/typings/index.d.ts.map +0 -1
- package/esm/typings/schemas.d.ts +0 -232
- package/esm/typings/schemas.d.ts.map +0 -1
- package/esm/typings/type-fetcher.d.ts +0 -89
- package/esm/typings/type-fetcher.d.ts.map +0 -1
- package/esm/typings/types.d.ts +0 -320
- package/esm/typings/types.d.ts.map +0 -1
- package/esm/utils/escape-html.d.ts +0 -58
- package/esm/utils/escape-html.d.ts.map +0 -1
- package/esm/utils/index.d.ts +0 -10
- package/esm/utils/index.d.ts.map +0 -1
- package/esm/utils/safe-stringify.d.ts +0 -30
- package/esm/utils/safe-stringify.d.ts.map +0 -1
- package/esm/validation/error-box.d.ts +0 -56
- package/esm/validation/error-box.d.ts.map +0 -1
- package/esm/validation/index.d.ts +0 -13
- package/esm/validation/index.d.ts.map +0 -1
- package/esm/validation/schema-paths.d.ts +0 -118
- package/esm/validation/schema-paths.d.ts.map +0 -1
- package/esm/validation/template-validator.d.ts +0 -143
- package/esm/validation/template-validator.d.ts.map +0 -1
- package/esm/validation/wrapper.d.ts +0 -97
- package/esm/validation/wrapper.d.ts.map +0 -1
- package/renderers/mdx.renderer.d.ts +0 -120
- package/renderers/mdx.renderer.d.ts.map +0 -1
- /package/esm/bridge-runtime/{index.js → index.mjs} +0 -0
- /package/esm/types/{index.js → index.mjs} +0 -0
|
@@ -1429,7 +1429,7 @@ async function calculateComponentHash(options) {
|
|
|
1429
1429
|
const {
|
|
1430
1430
|
entryPath,
|
|
1431
1431
|
baseDir = dirname2(entryPath),
|
|
1432
|
-
externals = [],
|
|
1432
|
+
externals: _externals = [],
|
|
1433
1433
|
dependencies = {},
|
|
1434
1434
|
bundleOptions = {},
|
|
1435
1435
|
maxDepth = 10
|
|
@@ -1546,7 +1546,7 @@ function buildIdFromHash(hash) {
|
|
|
1546
1546
|
// libs/uipack/src/bundler/file-cache/component-builder.ts
|
|
1547
1547
|
import { readFile as readFile3 } from "fs/promises";
|
|
1548
1548
|
import { existsSync as existsSync3 } from "fs";
|
|
1549
|
-
import { resolve as resolve2, extname } from "path";
|
|
1549
|
+
import { resolve as resolve2, extname, basename } from "path";
|
|
1550
1550
|
import { randomUUID } from "crypto";
|
|
1551
1551
|
|
|
1552
1552
|
// libs/uipack/src/dependency/cdn-registry.ts
|
|
@@ -2054,7 +2054,7 @@ function getPackagePeerDependencies(packageName, registry = DEFAULT_CDN_REGISTRY
|
|
|
2054
2054
|
}
|
|
2055
2055
|
return [];
|
|
2056
2056
|
}
|
|
2057
|
-
function resolveAllDependencies(packageNames,
|
|
2057
|
+
function resolveAllDependencies(packageNames, _platform = "unknown", registry = DEFAULT_CDN_REGISTRY) {
|
|
2058
2058
|
const resolved = /* @__PURE__ */ new Set();
|
|
2059
2059
|
const queue = [...packageNames];
|
|
2060
2060
|
while (queue.length > 0) {
|
|
@@ -2617,7 +2617,7 @@ var ComponentBuilder = class {
|
|
|
2617
2617
|
} = options;
|
|
2618
2618
|
const absoluteEntryPath = resolve2(entryPath);
|
|
2619
2619
|
if (!existsSync3(absoluteEntryPath)) {
|
|
2620
|
-
throw new Error(`Entry file not found: ${absoluteEntryPath}`);
|
|
2620
|
+
throw new Error(`Entry file not found: ${basename(absoluteEntryPath)}`);
|
|
2621
2621
|
}
|
|
2622
2622
|
const hashResult = await calculateComponentHash({
|
|
2623
2623
|
entryPath: absoluteEntryPath,
|
|
@@ -2791,7 +2791,10 @@ var ComponentBuilder = class {
|
|
|
2791
2791
|
bundlerVersion: this.esbuild.version
|
|
2792
2792
|
};
|
|
2793
2793
|
} catch (error) {
|
|
2794
|
-
|
|
2794
|
+
const fileName = basename(entryPath);
|
|
2795
|
+
const rawMessage = error instanceof Error ? error.message : String(error);
|
|
2796
|
+
const sanitizedMessage = rawMessage.replace(/(?:\/[\w./-]+|[A-Z]:\\[\w.\\-]+)/g, (match) => basename(match));
|
|
2797
|
+
throw new Error(`Bundle failed for ${fileName}: ${sanitizedMessage}`);
|
|
2795
2798
|
}
|
|
2796
2799
|
}
|
|
2797
2800
|
/**
|
|
@@ -2804,8 +2807,10 @@ var ComponentBuilder = class {
|
|
|
2804
2807
|
return void 0;
|
|
2805
2808
|
}
|
|
2806
2809
|
try {
|
|
2807
|
-
const
|
|
2808
|
-
const
|
|
2810
|
+
const reactPkg = "react";
|
|
2811
|
+
const reactDomServerPkg = "react-dom/server";
|
|
2812
|
+
const React = await import(reactPkg);
|
|
2813
|
+
const ReactDOMServer = await import(reactDomServerPkg);
|
|
2809
2814
|
const exports = {};
|
|
2810
2815
|
const module = { exports };
|
|
2811
2816
|
if (executeCode2) {
|
|
@@ -787,7 +787,7 @@ function getPackagePeerDependencies(packageName, registry = DEFAULT_CDN_REGISTRY
|
|
|
787
787
|
}
|
|
788
788
|
return [];
|
|
789
789
|
}
|
|
790
|
-
function resolveAllDependencies(packageNames,
|
|
790
|
+
function resolveAllDependencies(packageNames, _platform = "unknown", registry = DEFAULT_CDN_REGISTRY) {
|
|
791
791
|
const resolved = /* @__PURE__ */ new Set();
|
|
792
792
|
const queue = [...packageNames];
|
|
793
793
|
while (queue.length > 0) {
|
|
@@ -1085,6 +1085,12 @@ function escapeHtml(str) {
|
|
|
1085
1085
|
function escapeHtmlAttr(str) {
|
|
1086
1086
|
return str.replace(/&/g, "&").replace(/"/g, """);
|
|
1087
1087
|
}
|
|
1088
|
+
function escapeJsString(str) {
|
|
1089
|
+
return str.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/"/g, '\\"').replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
1090
|
+
}
|
|
1091
|
+
function escapeScriptClose(jsonString) {
|
|
1092
|
+
return jsonString.replace(/<\//g, "<\\/");
|
|
1093
|
+
}
|
|
1088
1094
|
|
|
1089
1095
|
// libs/uipack/src/dependency/import-map.ts
|
|
1090
1096
|
function createImportMap(dependencies) {
|
|
@@ -1883,7 +1889,6 @@ var PATH_REGEX = /\b(output|input|structuredContent)(\.[a-zA-Z_$][a-zA-Z0-9_$]*|
|
|
|
1883
1889
|
var KEYWORDS = /* @__PURE__ */ new Set(["this", "else", "@index", "@key", "@first", "@last", "@root"]);
|
|
1884
1890
|
function extractExpressions(template) {
|
|
1885
1891
|
const expressions = [];
|
|
1886
|
-
const lines = template.split("\n");
|
|
1887
1892
|
const positionMap = buildPositionMap(template);
|
|
1888
1893
|
let match;
|
|
1889
1894
|
EXPRESSION_REGEX.lastIndex = 0;
|
|
@@ -2371,35 +2376,24 @@ var ComponentCache = class {
|
|
|
2371
2376
|
};
|
|
2372
2377
|
var componentCache = new ComponentCache();
|
|
2373
2378
|
|
|
2374
|
-
// libs/uipack/src/renderers/mdx.renderer.ts
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2379
|
+
// libs/uipack/src/renderers/mdx-client.renderer.ts
|
|
2380
|
+
function buildReactCdnUrls(version = "19") {
|
|
2381
|
+
return {
|
|
2382
|
+
react: `https://esm.sh/react@${version}`,
|
|
2383
|
+
reactDom: `https://esm.sh/react-dom@${version}/client`,
|
|
2384
|
+
jsxRuntime: `https://esm.sh/react@${version}/jsx-runtime`
|
|
2385
|
+
};
|
|
2386
|
+
}
|
|
2387
|
+
var DEFAULT_CDN = {
|
|
2388
|
+
mdx: "https://esm.sh/@mdx-js/mdx@3",
|
|
2389
|
+
...buildReactCdnUrls("19")
|
|
2378
2390
|
};
|
|
2379
|
-
var
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
`;
|
|
2384
|
-
var MdxRenderer = class {
|
|
2385
|
-
type = "mdx";
|
|
2386
|
-
priority = 10;
|
|
2387
|
-
// Between HTML (0) and React (20)
|
|
2388
|
-
/**
|
|
2389
|
-
* Lazy-loaded modules.
|
|
2390
|
-
*/
|
|
2391
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2392
|
-
React = null;
|
|
2393
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2394
|
-
ReactDOMServer = null;
|
|
2395
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2396
|
-
jsxRuntime = null;
|
|
2397
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2398
|
-
mdxEvaluate = null;
|
|
2391
|
+
var MdxClientRenderer = class {
|
|
2392
|
+
type = "mdx-client";
|
|
2393
|
+
priority = 8;
|
|
2394
|
+
// Lower than server-side MDX (10)
|
|
2399
2395
|
/**
|
|
2400
2396
|
* Check if this renderer can handle the given template.
|
|
2401
|
-
*
|
|
2402
|
-
* Accepts strings containing MDX syntax (Markdown + JSX).
|
|
2403
2397
|
*/
|
|
2404
2398
|
canHandle(template) {
|
|
2405
2399
|
if (typeof template !== "string") {
|
|
@@ -2408,11 +2402,9 @@ var MdxRenderer = class {
|
|
|
2408
2402
|
return containsMdxSyntax(template);
|
|
2409
2403
|
}
|
|
2410
2404
|
/**
|
|
2411
|
-
*
|
|
2412
|
-
*
|
|
2413
|
-
*
|
|
2414
|
-
* Note: For MDX, we use evaluate() which combines compile + run,
|
|
2415
|
-
* so this method just returns the source hash for caching purposes.
|
|
2405
|
+
* Prepare MDX template for rendering.
|
|
2406
|
+
* Caches the template hash for deduplication. Actual MDX compilation
|
|
2407
|
+
* happens client-side via CDN-loaded @mdx-js/mdx in the browser.
|
|
2416
2408
|
*/
|
|
2417
2409
|
async transpile(template, _options) {
|
|
2418
2410
|
const hash = hashString(template);
|
|
@@ -2422,7 +2414,6 @@ var MdxRenderer = class {
|
|
|
2422
2414
|
}
|
|
2423
2415
|
const transpileResult = {
|
|
2424
2416
|
code: template,
|
|
2425
|
-
// Store original MDX for evaluate()
|
|
2426
2417
|
hash,
|
|
2427
2418
|
cached: false
|
|
2428
2419
|
};
|
|
@@ -2430,37 +2421,20 @@ var MdxRenderer = class {
|
|
|
2430
2421
|
return transpileResult;
|
|
2431
2422
|
}
|
|
2432
2423
|
/**
|
|
2433
|
-
* Render MDX template to HTML
|
|
2424
|
+
* Render MDX template to HTML with CDN scripts.
|
|
2434
2425
|
*
|
|
2435
|
-
*
|
|
2436
|
-
*
|
|
2426
|
+
* The returned HTML includes:
|
|
2427
|
+
* - A container div for the rendered content
|
|
2428
|
+
* - Script tags that load React and MDX from CDN
|
|
2429
|
+
* - Inline script that compiles and renders the MDX
|
|
2437
2430
|
*/
|
|
2438
2431
|
async render(template, context, options) {
|
|
2439
|
-
|
|
2440
|
-
|
|
2441
|
-
|
|
2442
|
-
|
|
2443
|
-
|
|
2444
|
-
|
|
2445
|
-
const cacheKey = `mdx-component:${templateHash}`;
|
|
2446
|
-
let Content = componentCache.get(cacheKey);
|
|
2447
|
-
if (!Content) {
|
|
2448
|
-
const result = await this.mdxEvaluate(template, {
|
|
2449
|
-
...this.jsxRuntime,
|
|
2450
|
-
Fragment: this.React.Fragment,
|
|
2451
|
-
development: false
|
|
2452
|
-
});
|
|
2453
|
-
Content = result.default;
|
|
2454
|
-
componentCache.set(cacheKey, Content);
|
|
2455
|
-
}
|
|
2456
|
-
const mdxComponents = {
|
|
2457
|
-
// User-provided components from tool config
|
|
2458
|
-
...options?.mdxComponents,
|
|
2459
|
-
// Wrapper that provides context to the content
|
|
2460
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2461
|
-
wrapper: ({ children }) => {
|
|
2462
|
-
return this.React.createElement("div", { className: "mdx-content" }, children);
|
|
2463
|
-
}
|
|
2432
|
+
const containerId = options?.containerId || "mdx-content";
|
|
2433
|
+
const showLoading = options?.showLoading !== false;
|
|
2434
|
+
const loadingMessage = options?.loadingMessage || "Loading...";
|
|
2435
|
+
const cdn = {
|
|
2436
|
+
...DEFAULT_CDN,
|
|
2437
|
+
...options?.cdn
|
|
2464
2438
|
};
|
|
2465
2439
|
const props = {
|
|
2466
2440
|
input: context.input,
|
|
@@ -2468,82 +2442,80 @@ var MdxRenderer = class {
|
|
|
2468
2442
|
structuredContent: context.structuredContent,
|
|
2469
2443
|
helpers: context.helpers
|
|
2470
2444
|
};
|
|
2445
|
+
const reservedProps = /* @__PURE__ */ new Set(["input", "output", "structuredContent", "helpers", "components"]);
|
|
2446
|
+
const outputProps = typeof context.output === "object" && context.output !== null ? Object.fromEntries(Object.entries(context.output).filter(([key]) => !reservedProps.has(key))) : {};
|
|
2471
2447
|
const spreadProps = {
|
|
2472
|
-
...
|
|
2473
|
-
...
|
|
2448
|
+
...outputProps,
|
|
2449
|
+
...props
|
|
2474
2450
|
};
|
|
2475
|
-
const
|
|
2476
|
-
|
|
2477
|
-
|
|
2451
|
+
const escapedMdx = escapeScriptClose(JSON.stringify(template));
|
|
2452
|
+
const escapedProps = escapeScriptClose(JSON.stringify(spreadProps));
|
|
2453
|
+
const safeContainerId = escapeJsString(containerId);
|
|
2454
|
+
const loadingHtml = showLoading ? `<div class="mdx-loading">${escapeHtml(loadingMessage)}</div>` : "";
|
|
2455
|
+
return `
|
|
2456
|
+
<div id="${escapeHtml(containerId)}">${loadingHtml}</div>
|
|
2457
|
+
<script type="module">
|
|
2458
|
+
(async function() {
|
|
2459
|
+
try {
|
|
2460
|
+
// Load dependencies from CDN
|
|
2461
|
+
const [
|
|
2462
|
+
{ evaluate },
|
|
2463
|
+
runtime,
|
|
2464
|
+
React,
|
|
2465
|
+
{ createRoot }
|
|
2466
|
+
] = await Promise.all([
|
|
2467
|
+
import('${cdn.mdx}'),
|
|
2468
|
+
import('${cdn.jsxRuntime}'),
|
|
2469
|
+
import('${cdn.react}'),
|
|
2470
|
+
import('${cdn.reactDom}')
|
|
2471
|
+
]);
|
|
2472
|
+
|
|
2473
|
+
// MDX content and props
|
|
2474
|
+
const mdxSource = ${escapedMdx};
|
|
2475
|
+
const props = ${escapedProps};
|
|
2476
|
+
|
|
2477
|
+
// Compile and evaluate MDX
|
|
2478
|
+
const { default: Content } = await evaluate(mdxSource, {
|
|
2479
|
+
...runtime,
|
|
2480
|
+
Fragment: React.Fragment,
|
|
2481
|
+
development: false
|
|
2478
2482
|
});
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
+
|
|
2484
|
+
// Render to DOM
|
|
2485
|
+
const container = document.getElementById('${safeContainerId}');
|
|
2486
|
+
if (container) {
|
|
2487
|
+
const root = createRoot(container);
|
|
2488
|
+
root.render(React.createElement(Content, props));
|
|
2489
|
+
}
|
|
2490
|
+
} catch (error) {
|
|
2491
|
+
console.error('[FrontMCP] MDX client rendering failed:', error);
|
|
2492
|
+
const container = document.getElementById('${safeContainerId}');
|
|
2493
|
+
if (container) {
|
|
2494
|
+
container.innerHTML = '<div class="mdx-error">Failed to render MDX content</div>';
|
|
2483
2495
|
}
|
|
2484
|
-
|
|
2496
|
+
}
|
|
2497
|
+
})();
|
|
2498
|
+
</script>
|
|
2499
|
+
`;
|
|
2485
2500
|
}
|
|
2486
2501
|
/**
|
|
2487
|
-
* Get runtime scripts for client
|
|
2502
|
+
* Get runtime scripts - not needed for client renderer since scripts are inline.
|
|
2488
2503
|
*/
|
|
2489
2504
|
getRuntimeScripts(platform) {
|
|
2490
2505
|
if (platform.networkMode === "blocked") {
|
|
2491
2506
|
return {
|
|
2492
2507
|
headScripts: "",
|
|
2493
|
-
inlineScripts:
|
|
2508
|
+
inlineScripts: `console.warn('[FrontMCP] Client-side MDX rendering requires network access. Use @frontmcp/ui for SSR.');`,
|
|
2494
2509
|
isInline: true
|
|
2495
2510
|
};
|
|
2496
2511
|
}
|
|
2497
2512
|
return {
|
|
2498
|
-
headScripts:
|
|
2499
|
-
<script crossorigin src="${REACT_CDN.react}"></script>
|
|
2500
|
-
<script crossorigin src="${REACT_CDN.reactDom}"></script>
|
|
2501
|
-
`,
|
|
2513
|
+
headScripts: "",
|
|
2502
2514
|
isInline: false
|
|
2503
2515
|
};
|
|
2504
2516
|
}
|
|
2505
|
-
/**
|
|
2506
|
-
* Load React and ReactDOMServer modules.
|
|
2507
|
-
*/
|
|
2508
|
-
async loadReact() {
|
|
2509
|
-
if (this.React && this.ReactDOMServer && this.jsxRuntime) {
|
|
2510
|
-
return;
|
|
2511
|
-
}
|
|
2512
|
-
try {
|
|
2513
|
-
const [react, reactDomServer, jsxRuntime] = await Promise.all([
|
|
2514
|
-
import("react"),
|
|
2515
|
-
import("react-dom/server"),
|
|
2516
|
-
import("react/jsx-runtime")
|
|
2517
|
-
]);
|
|
2518
|
-
this.React = react;
|
|
2519
|
-
this.ReactDOMServer = reactDomServer;
|
|
2520
|
-
this.jsxRuntime = jsxRuntime;
|
|
2521
|
-
} catch {
|
|
2522
|
-
throw new Error("React is required for MdxRenderer. Install react and react-dom: npm install react react-dom");
|
|
2523
|
-
}
|
|
2524
|
-
}
|
|
2525
|
-
/**
|
|
2526
|
-
* Load @mdx-js/mdx evaluate function.
|
|
2527
|
-
*
|
|
2528
|
-
* evaluate() is the cleanest way to run MDX - it combines
|
|
2529
|
-
* compile and run in a single step, handling all the runtime
|
|
2530
|
-
* injection automatically.
|
|
2531
|
-
*/
|
|
2532
|
-
async loadMdx() {
|
|
2533
|
-
if (this.mdxEvaluate) {
|
|
2534
|
-
return;
|
|
2535
|
-
}
|
|
2536
|
-
try {
|
|
2537
|
-
const mdx = await import("@mdx-js/mdx");
|
|
2538
|
-
this.mdxEvaluate = mdx.evaluate;
|
|
2539
|
-
} catch {
|
|
2540
|
-
console.warn(
|
|
2541
|
-
"[@frontmcp/ui] @mdx-js/mdx not available. MDX rendering disabled. Install @mdx-js/mdx to enable: npm install @mdx-js/mdx"
|
|
2542
|
-
);
|
|
2543
|
-
}
|
|
2544
|
-
}
|
|
2545
2517
|
};
|
|
2546
|
-
var
|
|
2518
|
+
var mdxClientRenderer = new MdxClientRenderer();
|
|
2547
2519
|
|
|
2548
2520
|
// libs/uipack/src/validation/schema-paths.ts
|
|
2549
2521
|
import { z as z2 } from "zod";
|
|
@@ -2939,7 +2911,7 @@ async function processTemplate(resolved, options) {
|
|
|
2939
2911
|
structuredContent: context.structuredContent,
|
|
2940
2912
|
helpers: defaultHelpers
|
|
2941
2913
|
};
|
|
2942
|
-
const html = await
|
|
2914
|
+
const html = await mdxClientRenderer.render(processedContent, templateContext);
|
|
2943
2915
|
return {
|
|
2944
2916
|
html,
|
|
2945
2917
|
format: "mdx"
|
|
@@ -3007,7 +2979,7 @@ async function processMdxTemplate(content, context, helpers) {
|
|
|
3007
2979
|
structuredContent: context.structuredContent,
|
|
3008
2980
|
helpers: defaultHelpers
|
|
3009
2981
|
};
|
|
3010
|
-
return
|
|
2982
|
+
return mdxClientRenderer.render(processed, templateContext);
|
|
3011
2983
|
}
|
|
3012
2984
|
export {
|
|
3013
2985
|
CDN_PROVIDER_PRIORITY,
|
|
@@ -229,7 +229,6 @@ var PATH_REGEX = /\b(output|input|structuredContent)(\.[a-zA-Z_$][a-zA-Z0-9_$]*|
|
|
|
229
229
|
var KEYWORDS = /* @__PURE__ */ new Set(["this", "else", "@index", "@key", "@first", "@last", "@root"]);
|
|
230
230
|
function extractExpressions(template) {
|
|
231
231
|
const expressions = [];
|
|
232
|
-
const lines = template.split("\n");
|
|
233
232
|
const positionMap = buildPositionMap(template);
|
|
234
233
|
let match;
|
|
235
234
|
EXPRESSION_REGEX.lastIndex = 0;
|