@frontmcp/uipack 0.6.3 → 0.7.2
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 +0 -14
- package/adapters/index.js +50 -47
- package/adapters/platform-meta.d.ts.map +1 -1
- package/adapters/response-builder.d.ts +16 -3
- package/adapters/response-builder.d.ts.map +1 -1
- package/bridge-runtime/iife-generator.d.ts.map +1 -1
- package/bridge-runtime/index.js +4 -0
- package/build/index.d.ts +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +61 -69
- package/bundler/index.js +35 -34
- package/dependency/import-map.d.ts.map +1 -1
- package/dependency/index.js +22 -29
- package/esm/adapters/index.mjs +52 -42
- package/esm/bridge-runtime/index.mjs +4 -0
- package/esm/build/index.mjs +30 -32
- package/esm/bundler/index.mjs +19 -11
- package/esm/dependency/index.mjs +18 -18
- package/esm/handlebars/index.mjs +9 -8
- package/esm/index.mjs +107 -126
- package/esm/package.json +3 -2
- package/esm/registry/index.mjs +53 -49
- package/esm/renderers/index.mjs +15 -21
- package/esm/runtime/index.mjs +16 -15
- package/esm/theme/index.mjs +8 -0
- package/esm/tool-template/index.mjs +23 -15
- package/esm/typings/index.mjs +4 -0
- package/esm/utils/index.mjs +9 -56
- package/esm/validation/index.mjs +9 -8
- package/handlebars/index.js +4 -10
- package/index.js +186 -211
- package/package.json +3 -2
- package/preview/generic-preview.d.ts +4 -5
- package/preview/generic-preview.d.ts.map +1 -1
- package/preview/types.d.ts +15 -1
- package/preview/types.d.ts.map +1 -1
- package/registry/index.js +61 -63
- package/registry/render-template.d.ts.map +1 -1
- package/renderers/index.js +16 -28
- package/renderers/utils/detect.d.ts.map +1 -1
- package/runtime/index.js +20 -25
- package/runtime/sanitizer.d.ts.map +1 -1
- package/theme/css-to-theme.d.ts +0 -27
- package/theme/css-to-theme.d.ts.map +1 -1
- package/theme/index.js +8 -0
- package/tool-template/index.js +30 -28
- package/typings/dts-parser.d.ts.map +1 -1
- package/typings/index.js +4 -0
- package/utils/index.d.ts +2 -3
- package/utils/index.d.ts.map +1 -1
- package/utils/index.js +7 -63
- package/validation/index.js +6 -12
- package/utils/escape-html.d.ts +0 -102
- package/utils/escape-html.d.ts.map +0 -1
- package/utils/safe-stringify.d.ts +0 -30
- package/utils/safe-stringify.d.ts.map +0 -1
package/esm/renderers/index.mjs
CHANGED
|
@@ -8,31 +8,18 @@ var __export = (target, all) => {
|
|
|
8
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
// libs/uipack/src/utils/escape-html.ts
|
|
12
|
-
function escapeHtml(str) {
|
|
13
|
-
if (str === null || str === void 0) {
|
|
14
|
-
return "";
|
|
15
|
-
}
|
|
16
|
-
const s = String(str);
|
|
17
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
18
|
-
}
|
|
19
|
-
function escapeJsString(str) {
|
|
20
|
-
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");
|
|
21
|
-
}
|
|
22
|
-
function escapeScriptClose(jsonString) {
|
|
23
|
-
return jsonString.replace(/<\//g, "<\\/");
|
|
24
|
-
}
|
|
25
|
-
var init_escape_html = __esm({
|
|
26
|
-
"libs/uipack/src/utils/escape-html.ts"() {
|
|
27
|
-
"use strict";
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
|
|
31
11
|
// libs/uipack/src/utils/index.ts
|
|
12
|
+
import {
|
|
13
|
+
safeStringify,
|
|
14
|
+
escapeHtml,
|
|
15
|
+
escapeHtmlAttr,
|
|
16
|
+
escapeJsString,
|
|
17
|
+
escapeScriptClose,
|
|
18
|
+
safeJsonForScript
|
|
19
|
+
} from "@frontmcp/utils";
|
|
32
20
|
var init_utils = __esm({
|
|
33
21
|
"libs/uipack/src/utils/index.ts"() {
|
|
34
22
|
"use strict";
|
|
35
|
-
init_escape_html();
|
|
36
23
|
}
|
|
37
24
|
});
|
|
38
25
|
|
|
@@ -881,6 +868,7 @@ var CLAUDE_PLATFORM = {
|
|
|
881
868
|
};
|
|
882
869
|
|
|
883
870
|
// libs/uipack/src/renderers/utils/detect.ts
|
|
871
|
+
var MAX_TEMPLATE_LENGTH = 5e4;
|
|
884
872
|
function isReactComponent(value) {
|
|
885
873
|
if (typeof value !== "function") {
|
|
886
874
|
return false;
|
|
@@ -909,6 +897,9 @@ function isTemplateBuilderFunction(fn) {
|
|
|
909
897
|
return true;
|
|
910
898
|
}
|
|
911
899
|
function containsJsx(source) {
|
|
900
|
+
if (source.length > MAX_TEMPLATE_LENGTH) {
|
|
901
|
+
return false;
|
|
902
|
+
}
|
|
912
903
|
if (/<[A-Z][a-zA-Z0-9]*(\s|>|\/)/.test(source)) {
|
|
913
904
|
return true;
|
|
914
905
|
}
|
|
@@ -933,6 +924,9 @@ function containsJsx(source) {
|
|
|
933
924
|
return false;
|
|
934
925
|
}
|
|
935
926
|
function containsMdxSyntax(source) {
|
|
927
|
+
if (source.length > MAX_TEMPLATE_LENGTH) {
|
|
928
|
+
return false;
|
|
929
|
+
}
|
|
936
930
|
if (/<[A-Z][a-zA-Z0-9]*/.test(source)) {
|
|
937
931
|
return true;
|
|
938
932
|
}
|
package/esm/runtime/index.mjs
CHANGED
|
@@ -8,25 +8,18 @@ var __export = (target, all) => {
|
|
|
8
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
// libs/uipack/src/utils/escape-html.ts
|
|
12
|
-
function escapeHtml(str) {
|
|
13
|
-
if (str === null || str === void 0) {
|
|
14
|
-
return "";
|
|
15
|
-
}
|
|
16
|
-
const s = String(str);
|
|
17
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
18
|
-
}
|
|
19
|
-
var init_escape_html = __esm({
|
|
20
|
-
"libs/uipack/src/utils/escape-html.ts"() {
|
|
21
|
-
"use strict";
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
|
|
25
11
|
// libs/uipack/src/utils/index.ts
|
|
12
|
+
import {
|
|
13
|
+
safeStringify,
|
|
14
|
+
escapeHtml,
|
|
15
|
+
escapeHtmlAttr,
|
|
16
|
+
escapeJsString,
|
|
17
|
+
escapeScriptClose,
|
|
18
|
+
safeJsonForScript
|
|
19
|
+
} from "@frontmcp/utils";
|
|
26
20
|
var init_utils = __esm({
|
|
27
21
|
"libs/uipack/src/utils/index.ts"() {
|
|
28
22
|
"use strict";
|
|
29
|
-
init_escape_html();
|
|
30
23
|
}
|
|
31
24
|
});
|
|
32
25
|
|
|
@@ -1756,7 +1749,11 @@ FrontMcpBridge.prototype._setupDataToolCallHandler = function() {
|
|
|
1756
1749
|
};
|
|
1757
1750
|
`.trim();
|
|
1758
1751
|
}
|
|
1752
|
+
var MAX_MINIFY_CODE_LENGTH = 5e5;
|
|
1759
1753
|
function minifyJS(code) {
|
|
1754
|
+
if (code.length > MAX_MINIFY_CODE_LENGTH) {
|
|
1755
|
+
return code;
|
|
1756
|
+
}
|
|
1760
1757
|
return code.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\/\/.*$/gm, "").replace(/\s+/g, " ").replace(/\s*([{};,:()[\]])\s*/g, "$1").replace(/;\}/g, "}").trim();
|
|
1761
1758
|
}
|
|
1762
1759
|
function generatePlatformBundle(platform, options = {}) {
|
|
@@ -2910,7 +2907,11 @@ function detectPIIType(value) {
|
|
|
2910
2907
|
if (isIPv4(value)) return "IP";
|
|
2911
2908
|
return null;
|
|
2912
2909
|
}
|
|
2910
|
+
var MAX_PII_TEXT_LENGTH = 1e5;
|
|
2913
2911
|
function redactPIIFromText(text) {
|
|
2912
|
+
if (text.length > MAX_PII_TEXT_LENGTH) {
|
|
2913
|
+
return text;
|
|
2914
|
+
}
|
|
2914
2915
|
let result = text;
|
|
2915
2916
|
result = result.replace(PII_PATTERNS.creditCardInText, REDACTION_TOKENS.CARD);
|
|
2916
2917
|
result = result.replace(PII_PATTERNS.ssnInText, REDACTION_TOKENS.ID);
|
package/esm/theme/index.mjs
CHANGED
|
@@ -679,7 +679,15 @@ function buildStyleBlock(theme) {
|
|
|
679
679
|
|
|
680
680
|
// libs/uipack/src/theme/css-to-theme.ts
|
|
681
681
|
var COLOR_VAR_REGEX = /--(color-[\w-]+):\s*([^;]+);/g;
|
|
682
|
+
var MAX_CSS_INPUT_LENGTH = 1e5;
|
|
682
683
|
function cssToTailwindTheme(userCss) {
|
|
684
|
+
if (userCss.length > MAX_CSS_INPUT_LENGTH) {
|
|
685
|
+
return {
|
|
686
|
+
themeBlock: "",
|
|
687
|
+
remainingCss: userCss,
|
|
688
|
+
colorVars: /* @__PURE__ */ new Map()
|
|
689
|
+
};
|
|
690
|
+
}
|
|
683
691
|
const colorVars = /* @__PURE__ */ new Map();
|
|
684
692
|
const regex = new RegExp(COLOR_VAR_REGEX.source, "g");
|
|
685
693
|
let match;
|
|
@@ -8,25 +8,18 @@ var __export = (target, all) => {
|
|
|
8
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
// libs/uipack/src/utils/escape-html.ts
|
|
12
|
-
function escapeHtml(str) {
|
|
13
|
-
if (str === null || str === void 0) {
|
|
14
|
-
return "";
|
|
15
|
-
}
|
|
16
|
-
const s = String(str);
|
|
17
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
18
|
-
}
|
|
19
|
-
var init_escape_html = __esm({
|
|
20
|
-
"libs/uipack/src/utils/escape-html.ts"() {
|
|
21
|
-
"use strict";
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
|
|
25
11
|
// libs/uipack/src/utils/index.ts
|
|
12
|
+
import {
|
|
13
|
+
safeStringify,
|
|
14
|
+
escapeHtml,
|
|
15
|
+
escapeHtmlAttr,
|
|
16
|
+
escapeJsString,
|
|
17
|
+
escapeScriptClose,
|
|
18
|
+
safeJsonForScript
|
|
19
|
+
} from "@frontmcp/utils";
|
|
26
20
|
var init_utils = __esm({
|
|
27
21
|
"libs/uipack/src/utils/index.ts"() {
|
|
28
22
|
"use strict";
|
|
29
|
-
init_escape_html();
|
|
30
23
|
}
|
|
31
24
|
});
|
|
32
25
|
|
|
@@ -1456,7 +1449,11 @@ FrontMcpBridge.prototype._setupDataToolCallHandler = function() {
|
|
|
1456
1449
|
};
|
|
1457
1450
|
`.trim();
|
|
1458
1451
|
}
|
|
1452
|
+
var MAX_MINIFY_CODE_LENGTH = 5e5;
|
|
1459
1453
|
function minifyJS(code) {
|
|
1454
|
+
if (code.length > MAX_MINIFY_CODE_LENGTH) {
|
|
1455
|
+
return code;
|
|
1456
|
+
}
|
|
1460
1457
|
return code.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\/\/.*$/gm, "").replace(/\s+/g, " ").replace(/\s*([{};,:()[\]])\s*/g, "$1").replace(/;\}/g, "}").trim();
|
|
1461
1458
|
}
|
|
1462
1459
|
function generatePlatformBundle(platform, options = {}) {
|
|
@@ -2581,7 +2578,11 @@ function detectPIIType(value) {
|
|
|
2581
2578
|
if (isIPv4(value)) return "IP";
|
|
2582
2579
|
return null;
|
|
2583
2580
|
}
|
|
2581
|
+
var MAX_PII_TEXT_LENGTH = 1e5;
|
|
2584
2582
|
function redactPIIFromText(text) {
|
|
2583
|
+
if (text.length > MAX_PII_TEXT_LENGTH) {
|
|
2584
|
+
return text;
|
|
2585
|
+
}
|
|
2585
2586
|
let result = text;
|
|
2586
2587
|
result = result.replace(PII_PATTERNS.creditCardInText, REDACTION_TOKENS.CARD);
|
|
2587
2588
|
result = result.replace(PII_PATTERNS.ssnInText, REDACTION_TOKENS.ID);
|
|
@@ -2873,6 +2874,7 @@ function buildDataInjectionScript(options) {
|
|
|
2873
2874
|
init_utils();
|
|
2874
2875
|
|
|
2875
2876
|
// libs/uipack/src/renderers/utils/detect.ts
|
|
2877
|
+
var MAX_TEMPLATE_LENGTH = 5e4;
|
|
2876
2878
|
function isReactComponent(value) {
|
|
2877
2879
|
if (typeof value !== "function") {
|
|
2878
2880
|
return false;
|
|
@@ -2901,6 +2903,9 @@ function isTemplateBuilderFunction(fn) {
|
|
|
2901
2903
|
return true;
|
|
2902
2904
|
}
|
|
2903
2905
|
function containsJsx(source) {
|
|
2906
|
+
if (source.length > MAX_TEMPLATE_LENGTH) {
|
|
2907
|
+
return false;
|
|
2908
|
+
}
|
|
2904
2909
|
if (/<[A-Z][a-zA-Z0-9]*(\s|>|\/)/.test(source)) {
|
|
2905
2910
|
return true;
|
|
2906
2911
|
}
|
|
@@ -2925,6 +2930,9 @@ function containsJsx(source) {
|
|
|
2925
2930
|
return false;
|
|
2926
2931
|
}
|
|
2927
2932
|
function containsMdxSyntax(source) {
|
|
2933
|
+
if (source.length > MAX_TEMPLATE_LENGTH) {
|
|
2934
|
+
return false;
|
|
2935
|
+
}
|
|
2928
2936
|
if (/<[A-Z][a-zA-Z0-9]*/.test(source)) {
|
|
2929
2937
|
return true;
|
|
2930
2938
|
}
|
package/esm/typings/index.mjs
CHANGED
|
@@ -358,7 +358,11 @@ function getSubpathFromSpecifier(specifier) {
|
|
|
358
358
|
}
|
|
359
359
|
return void 0;
|
|
360
360
|
}
|
|
361
|
+
var MAX_IMPORT_STATEMENT_LENGTH = 2e3;
|
|
361
362
|
function parseImportStatement(statement) {
|
|
363
|
+
if (statement.length > MAX_IMPORT_STATEMENT_LENGTH) {
|
|
364
|
+
return null;
|
|
365
|
+
}
|
|
362
366
|
const namedMatch = /import\s+(?:\{[^}]*\}|\*\s+as\s+\w+|\w+)\s+from\s+['"]([^'"]+)['"]/.exec(statement);
|
|
363
367
|
if (namedMatch) {
|
|
364
368
|
return namedMatch[1];
|
package/esm/utils/index.mjs
CHANGED
|
@@ -1,59 +1,12 @@
|
|
|
1
|
-
// libs/uipack/src/utils/
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
seen.add(val);
|
|
11
|
-
}
|
|
12
|
-
return val;
|
|
13
|
-
},
|
|
14
|
-
space
|
|
15
|
-
);
|
|
16
|
-
} catch {
|
|
17
|
-
return JSON.stringify({ error: "Output could not be serialized" });
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// libs/uipack/src/utils/escape-html.ts
|
|
22
|
-
function escapeHtml(str) {
|
|
23
|
-
if (str === null || str === void 0) {
|
|
24
|
-
return "";
|
|
25
|
-
}
|
|
26
|
-
const s = String(str);
|
|
27
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
28
|
-
}
|
|
29
|
-
function escapeHtmlAttr(str) {
|
|
30
|
-
return str.replace(/&/g, "&").replace(/"/g, """);
|
|
31
|
-
}
|
|
32
|
-
function escapeJsString(str) {
|
|
33
|
-
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");
|
|
34
|
-
}
|
|
35
|
-
function escapeScriptClose(jsonString) {
|
|
36
|
-
return jsonString.replace(/<\//g, "<\\/");
|
|
37
|
-
}
|
|
38
|
-
function safeJsonForScript(value) {
|
|
39
|
-
if (value === void 0) {
|
|
40
|
-
return "null";
|
|
41
|
-
}
|
|
42
|
-
try {
|
|
43
|
-
const jsonString = JSON.stringify(value, (_key, val) => {
|
|
44
|
-
if (typeof val === "bigint") {
|
|
45
|
-
return val.toString();
|
|
46
|
-
}
|
|
47
|
-
return val;
|
|
48
|
-
});
|
|
49
|
-
if (jsonString === void 0) {
|
|
50
|
-
return "null";
|
|
51
|
-
}
|
|
52
|
-
return escapeScriptClose(jsonString);
|
|
53
|
-
} catch {
|
|
54
|
-
return '{"error":"Value could not be serialized"}';
|
|
55
|
-
}
|
|
56
|
-
}
|
|
1
|
+
// libs/uipack/src/utils/index.ts
|
|
2
|
+
import {
|
|
3
|
+
safeStringify,
|
|
4
|
+
escapeHtml,
|
|
5
|
+
escapeHtmlAttr,
|
|
6
|
+
escapeJsString,
|
|
7
|
+
escapeScriptClose,
|
|
8
|
+
safeJsonForScript
|
|
9
|
+
} from "@frontmcp/utils";
|
|
57
10
|
export {
|
|
58
11
|
escapeHtml,
|
|
59
12
|
escapeHtmlAttr,
|
package/esm/validation/index.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
// libs/uipack/src/utils/
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
// libs/uipack/src/utils/index.ts
|
|
2
|
+
import {
|
|
3
|
+
safeStringify,
|
|
4
|
+
escapeHtml,
|
|
5
|
+
escapeHtmlAttr,
|
|
6
|
+
escapeJsString,
|
|
7
|
+
escapeScriptClose,
|
|
8
|
+
safeJsonForScript
|
|
9
|
+
} from "@frontmcp/utils";
|
|
9
10
|
|
|
10
11
|
// libs/uipack/src/validation/error-box.ts
|
|
11
12
|
var errorIcon = `<svg class="w-5 h-5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
package/handlebars/index.js
CHANGED
|
@@ -39,7 +39,7 @@ __export(handlebars_exports, {
|
|
|
39
39
|
createHandlebarsRenderer: () => createHandlebarsRenderer,
|
|
40
40
|
defaultValue: () => defaultValue,
|
|
41
41
|
eq: () => eq,
|
|
42
|
-
escapeHtml: () => escapeHtml,
|
|
42
|
+
escapeHtml: () => import_utils.escapeHtml,
|
|
43
43
|
extractAll: () => extractAll,
|
|
44
44
|
extractExpressions: () => extractExpressions,
|
|
45
45
|
extractInputPaths: () => extractInputPaths,
|
|
@@ -76,14 +76,8 @@ __export(handlebars_exports, {
|
|
|
76
76
|
});
|
|
77
77
|
module.exports = __toCommonJS(handlebars_exports);
|
|
78
78
|
|
|
79
|
-
// libs/uipack/src/utils/
|
|
80
|
-
|
|
81
|
-
if (str === null || str === void 0) {
|
|
82
|
-
return "";
|
|
83
|
-
}
|
|
84
|
-
const s = String(str);
|
|
85
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
86
|
-
}
|
|
79
|
+
// libs/uipack/src/utils/index.ts
|
|
80
|
+
var import_utils = require("@frontmcp/utils");
|
|
87
81
|
|
|
88
82
|
// libs/uipack/src/handlebars/helpers.ts
|
|
89
83
|
function formatDate(date, format) {
|
|
@@ -266,7 +260,7 @@ function classNames(...classes) {
|
|
|
266
260
|
}
|
|
267
261
|
var builtinHelpers = {
|
|
268
262
|
// Escaping
|
|
269
|
-
escapeHtml,
|
|
263
|
+
escapeHtml: import_utils.escapeHtml,
|
|
270
264
|
// Formatting
|
|
271
265
|
formatDate,
|
|
272
266
|
formatCurrency,
|