@mastra/playground-ui 37.0.0-alpha.5 → 37.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +127 -0
- package/dist/components/Columns.cjs.js +1 -1
- package/dist/components/Columns.es.js +1 -1
- package/dist/components/RuleBuilder.cjs.js +10 -0
- package/dist/components/RuleBuilder.cjs.js.map +1 -0
- package/dist/components/RuleBuilder.d.ts +2 -0
- package/dist/components/RuleBuilder.es.js +2 -0
- package/dist/components/RuleBuilder.es.js.map +1 -0
- package/dist/index.cjs.js +65 -908
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +18 -842
- package/dist/index.es.js.map +1 -1
- package/dist/{multi-column-B9TVKcLl.cjs → multi-column-BLp7eL6P.cjs} +1 -2
- package/dist/{multi-column-B9TVKcLl.cjs.map → multi-column-BLp7eL6P.cjs.map} +1 -1
- package/dist/{multi-column-p8sEagdM.js → multi-column-DeSb1YDE.js} +1 -2
- package/dist/{multi-column-p8sEagdM.js.map → multi-column-DeSb1YDE.js.map} +1 -1
- package/dist/rule-builder-Zs6Ywp5-.js +563 -0
- package/dist/rule-builder-Zs6Ywp5-.js.map +1 -0
- package/dist/rule-builder-vwKEUlZU.cjs +594 -0
- package/dist/rule-builder-vwKEUlZU.cjs.map +1 -0
- package/dist/src/ds/components/RuleBuilder/index.d.ts +2 -0
- package/dist/src/utils/colors.d.ts +1 -0
- package/dist/src/utils/errors.d.ts +2 -0
- package/dist/src/utils/file.d.ts +1 -0
- package/dist/src/utils/formatting.d.ts +1 -0
- package/dist/src/utils/json-schema.d.ts +1 -0
- package/dist/src/utils/number.d.ts +1 -0
- package/dist/src/utils/query-utils.d.ts +1 -0
- package/dist/src/utils/rule-engine.d.ts +2 -0
- package/dist/src/utils/string.d.ts +1 -0
- package/dist/src/utils/truncate-string.d.ts +1 -0
- package/dist/utils/colors.cjs.js +15 -0
- package/dist/utils/colors.cjs.js.map +1 -0
- package/dist/utils/colors.d.ts +2 -0
- package/dist/utils/colors.es.js +11 -0
- package/dist/utils/colors.es.js.map +1 -0
- package/dist/utils/errors.cjs.js +33 -0
- package/dist/utils/errors.cjs.js.map +1 -0
- package/dist/utils/errors.d.ts +2 -0
- package/dist/utils/errors.es.js +22 -0
- package/dist/utils/errors.es.js.map +1 -0
- package/dist/utils/file.cjs.js +113 -0
- package/dist/utils/file.cjs.js.map +1 -0
- package/dist/utils/file.d.ts +2 -0
- package/dist/utils/file.es.js +100 -0
- package/dist/utils/file.es.js.map +1 -0
- package/dist/utils/formatting.cjs.js +47 -0
- package/dist/utils/formatting.cjs.js.map +1 -0
- package/dist/utils/formatting.d.ts +2 -0
- package/dist/utils/formatting.es.js +41 -0
- package/dist/utils/formatting.es.js.map +1 -0
- package/dist/utils/json-schema.cjs.js +3 -0
- package/dist/utils/json-schema.cjs.js.map +1 -0
- package/dist/utils/json-schema.d.ts +2 -0
- package/dist/utils/json-schema.es.js +2 -0
- package/dist/utils/json-schema.es.js.map +1 -0
- package/dist/utils/number.cjs.js +10 -0
- package/dist/utils/number.cjs.js.map +1 -0
- package/dist/utils/number.d.ts +2 -0
- package/dist/utils/number.es.js +6 -0
- package/dist/utils/number.es.js.map +1 -0
- package/dist/utils/query-utils.cjs.js +98 -0
- package/dist/utils/query-utils.cjs.js.map +1 -0
- package/dist/utils/query-utils.d.ts +2 -0
- package/dist/utils/query-utils.es.js +88 -0
- package/dist/utils/query-utils.es.js.map +1 -0
- package/dist/utils/rule-engine.cjs.js +29 -0
- package/dist/utils/rule-engine.cjs.js.map +1 -0
- package/dist/utils/rule-engine.d.ts +2 -0
- package/dist/utils/rule-engine.es.js +21 -0
- package/dist/utils/rule-engine.es.js.map +1 -0
- package/dist/utils/string.cjs.js +11 -0
- package/dist/utils/string.cjs.js.map +1 -0
- package/dist/utils/string.d.ts +2 -0
- package/dist/utils/string.es.js +7 -0
- package/dist/utils/string.es.js.map +1 -0
- package/dist/utils/truncate-string.cjs.js +11 -0
- package/dist/utils/truncate-string.cjs.js.map +1 -0
- package/dist/utils/truncate-string.d.ts +2 -0
- package/dist/utils/truncate-string.es.js +7 -0
- package/dist/utils/truncate-string.es.js.map +1 -0
- package/package.json +8 -8
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
let prettierModules;
|
|
2
|
+
const loadPrettier = () => prettierModules ??= Promise.all([
|
|
3
|
+
import('prettier/standalone'),
|
|
4
|
+
import('prettier/plugins/babel'),
|
|
5
|
+
import('prettier/plugins/estree')
|
|
6
|
+
]).catch((error) => {
|
|
7
|
+
prettierModules = void 0;
|
|
8
|
+
throw error;
|
|
9
|
+
});
|
|
10
|
+
const formatJSON = async (code) => {
|
|
11
|
+
const [prettier, prettierPluginBabel, prettierPluginEstree] = await loadPrettier();
|
|
12
|
+
const formatted = await prettier.format(code, {
|
|
13
|
+
semi: false,
|
|
14
|
+
parser: "json",
|
|
15
|
+
printWidth: 80,
|
|
16
|
+
tabWidth: 2,
|
|
17
|
+
plugins: [prettierPluginBabel, prettierPluginEstree]
|
|
18
|
+
});
|
|
19
|
+
return formatted;
|
|
20
|
+
};
|
|
21
|
+
const formatTypeScript = async (code) => {
|
|
22
|
+
const [prettier, prettierPluginBabel, prettierPluginEstree] = await loadPrettier();
|
|
23
|
+
const formatted = await prettier.format(code, {
|
|
24
|
+
parser: "babel-ts",
|
|
25
|
+
printWidth: 80,
|
|
26
|
+
tabWidth: 2,
|
|
27
|
+
plugins: [prettierPluginBabel, prettierPluginEstree]
|
|
28
|
+
});
|
|
29
|
+
return formatted;
|
|
30
|
+
};
|
|
31
|
+
const isValidJson = (str) => {
|
|
32
|
+
try {
|
|
33
|
+
const obj = JSON.parse(str);
|
|
34
|
+
return !!obj && typeof obj === "object";
|
|
35
|
+
} catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export { formatJSON, formatTypeScript, isValidJson };
|
|
41
|
+
//# sourceMappingURL=formatting.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.es.js","sources":["../../src/lib/formatting.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/consistent-type-imports */\n\nlet prettierModules:\n | Promise<\n [\n typeof import('prettier/standalone'),\n typeof import('prettier/plugins/babel'),\n typeof import('prettier/plugins/estree'),\n ]\n >\n | undefined;\n\nconst loadPrettier = () =>\n (prettierModules ??= Promise.all([\n import('prettier/standalone'),\n import('prettier/plugins/babel'),\n import('prettier/plugins/estree'),\n ]).catch(error => {\n prettierModules = undefined;\n throw error;\n }));\n\nexport const formatJSON = async (code: string) => {\n const [prettier, prettierPluginBabel, prettierPluginEstree] = await loadPrettier();\n\n const formatted = await prettier.format(code, {\n semi: false,\n parser: 'json',\n printWidth: 80,\n tabWidth: 2,\n plugins: [prettierPluginBabel, prettierPluginEstree],\n });\n\n return formatted;\n};\n\nexport const formatTypeScript = async (code: string) => {\n const [prettier, prettierPluginBabel, prettierPluginEstree] = await loadPrettier();\n\n const formatted = await prettier.format(code, {\n parser: 'babel-ts',\n printWidth: 80,\n tabWidth: 2,\n plugins: [prettierPluginBabel, prettierPluginEstree],\n });\n\n return formatted;\n};\n\nexport const isValidJson = (str: string) => {\n try {\n // Attempt to parse the string as JSON\n const obj = JSON.parse(str);\n\n // Additionally check if the parsed result is an object\n return !!obj && typeof obj === 'object';\n } catch {\n // If parsing throws an error, it's not valid JSON\n return false;\n }\n};\n"],"names":[],"mappings":"AAEA,IAAI,eAAA;AAUJ,MAAM,YAAA,GAAe,MAClB,eAAA,KAAoB,OAAA,CAAQ,GAAA,CAAI;AAAA,EAC/B,OAAO,qBAAqB,CAAA;AAAA,EAC5B,OAAO,wBAAwB,CAAA;AAAA,EAC/B,OAAO,yBAAyB;AAClC,CAAC,CAAA,CAAE,MAAM,CAAA,KAAA,KAAS;AAChB,EAAA,eAAA,GAAkB,MAAA;AAClB,EAAA,MAAM,KAAA;AACR,CAAC,CAAA;AAEI,MAAM,UAAA,GAAa,OAAO,IAAA,KAAiB;AAChD,EAAA,MAAM,CAAC,QAAA,EAAU,mBAAA,EAAqB,oBAAoB,CAAA,GAAI,MAAM,YAAA,EAAa;AAEjF,EAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM;AAAA,IAC5C,IAAA,EAAM,KAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EAAS,CAAC,mBAAA,EAAqB,oBAAoB;AAAA,GACpD,CAAA;AAED,EAAA,OAAO,SAAA;AACT;AAEO,MAAM,gBAAA,GAAmB,OAAO,IAAA,KAAiB;AACtD,EAAA,MAAM,CAAC,QAAA,EAAU,mBAAA,EAAqB,oBAAoB,CAAA,GAAI,MAAM,YAAA,EAAa;AAEjF,EAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM;AAAA,IAC5C,MAAA,EAAQ,UAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EAAS,CAAC,mBAAA,EAAqB,oBAAoB;AAAA,GACpD,CAAA;AAED,EAAA,OAAO,SAAA;AACT;AAEO,MAAM,WAAA,GAAc,CAAC,GAAA,KAAgB;AAC1C,EAAA,IAAI;AAEF,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAG1B,IAAA,OAAO,CAAC,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA;AAAA,EACjC,CAAA,CAAA,MAAQ;AAEN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.cjs.js","sources":["../../src/lib/number.ts"],"sourcesContent":["export const toSigFigs = (num: number, sigFigs: number) => {\n // toPrecision returns significant digits formatted with potentially exponential notation\n // Number() converts the exponential notation to a regular number\n return Number(num.toPrecision(sigFigs));\n};\n"],"names":[],"mappings":";;;;AAAO,MAAM,SAAA,GAAY,CAAC,GAAA,EAAa,OAAA,KAAoB;AAGzD,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,WAAA,CAAY,OAAO,CAAC,CAAA;AACxC;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.es.js","sources":["../../src/lib/number.ts"],"sourcesContent":["export const toSigFigs = (num: number, sigFigs: number) => {\n // toPrecision returns significant digits formatted with potentially exponential notation\n // Number() converts the exponential notation to a regular number\n return Number(num.toPrecision(sigFigs));\n};\n"],"names":[],"mappings":"AAAO,MAAM,SAAA,GAAY,CAAC,GAAA,EAAa,OAAA,KAAoB;AAGzD,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,WAAA,CAAY,OAAO,CAAC,CAAA;AACxC;;;;"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const HTTP_NO_RETRY_STATUSES = [400, 401, 403, 404];
|
|
6
|
+
function is401UnauthorizedError(error) {
|
|
7
|
+
if (!error || typeof error !== "object") return false;
|
|
8
|
+
if ("status" in error && error.status === 401) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
if ("statusCode" in error && error.statusCode === 401) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
if ("message" in error) {
|
|
15
|
+
const message = error.message;
|
|
16
|
+
if (typeof message === "string") {
|
|
17
|
+
return /\bstatus:\s*401\b/.test(message);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
function is403ForbiddenError(error) {
|
|
23
|
+
if (!error || typeof error !== "object") return false;
|
|
24
|
+
if ("status" in error && error.status === 403) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
if ("statusCode" in error && error.statusCode === 403) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
if ("message" in error) {
|
|
31
|
+
const message = error.message;
|
|
32
|
+
if (typeof message === "string") {
|
|
33
|
+
return /\bstatus:\s*403\b/.test(message);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
function is404NotFoundError(error) {
|
|
39
|
+
if (!error || typeof error !== "object") return false;
|
|
40
|
+
if ("status" in error && error.status === 404) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
if ("statusCode" in error && error.statusCode === 404) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
if ("message" in error) {
|
|
47
|
+
const message = error.message;
|
|
48
|
+
if (typeof message === "string") {
|
|
49
|
+
return /\bstatus:\s*404\b/.test(message);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
function isBranchesNotSupportedError(error) {
|
|
55
|
+
if (!error || typeof error !== "object" || !("message" in error)) return false;
|
|
56
|
+
const message = error.message;
|
|
57
|
+
if (typeof message !== "string") return false;
|
|
58
|
+
return message.includes("does not support listing trace branches");
|
|
59
|
+
}
|
|
60
|
+
function isUnsupportedObservabilityOperationError(error, operation) {
|
|
61
|
+
if (!error || typeof error !== "object" || !("message" in error)) return false;
|
|
62
|
+
const message = error.message;
|
|
63
|
+
if (typeof message !== "string") return false;
|
|
64
|
+
return message.includes(`does not support listing ${operation}`);
|
|
65
|
+
}
|
|
66
|
+
function isNonRetryableError(error) {
|
|
67
|
+
if (!error || typeof error !== "object") return false;
|
|
68
|
+
if ("status" in error) {
|
|
69
|
+
const status = error.status;
|
|
70
|
+
return HTTP_NO_RETRY_STATUSES.includes(status);
|
|
71
|
+
}
|
|
72
|
+
if ("statusCode" in error) {
|
|
73
|
+
const statusCode = error.statusCode;
|
|
74
|
+
return HTTP_NO_RETRY_STATUSES.includes(statusCode);
|
|
75
|
+
}
|
|
76
|
+
if ("message" in error) {
|
|
77
|
+
const message = error.message;
|
|
78
|
+
if (typeof message === "string") {
|
|
79
|
+
return HTTP_NO_RETRY_STATUSES.some((code) => new RegExp(`\\bstatus:\\s*${code}\\b`).test(message));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
function shouldRetryQuery(failureCount, error) {
|
|
85
|
+
if (isNonRetryableError(error)) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
return failureCount < 3;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
exports.is401UnauthorizedError = is401UnauthorizedError;
|
|
92
|
+
exports.is403ForbiddenError = is403ForbiddenError;
|
|
93
|
+
exports.is404NotFoundError = is404NotFoundError;
|
|
94
|
+
exports.isBranchesNotSupportedError = isBranchesNotSupportedError;
|
|
95
|
+
exports.isNonRetryableError = isNonRetryableError;
|
|
96
|
+
exports.isUnsupportedObservabilityOperationError = isUnsupportedObservabilityOperationError;
|
|
97
|
+
exports.shouldRetryQuery = shouldRetryQuery;
|
|
98
|
+
//# sourceMappingURL=query-utils.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-utils.cjs.js","sources":["../../src/lib/query-utils.ts"],"sourcesContent":["/**\n * HTTP status codes that should not be retried.\n * - 400: Bad Request (client error, won't change)\n * - 401: Unauthorized (needs re-auth, not retry)\n * - 403: Forbidden (RBAC permission denied)\n * - 404: Not Found (resource doesn't exist)\n */\nconst HTTP_NO_RETRY_STATUSES = [400, 401, 403, 404];\n\n/**\n * Check if error is a 401 Unauthorized response.\n * Indicates the user's session has expired or token is invalid.\n * Handles both direct status property and client-js error message format.\n */\nexport function is401UnauthorizedError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 401) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 401) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 401\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*401\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 403 Forbidden response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is403ForbiddenError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 403) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 403) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 403\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*403\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 404 Not Found response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is404NotFoundError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n if ('status' in error && (error as { status: number }).status === 404) {\n return true;\n }\n\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return true;\n }\n\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*404\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if an error came from a storage provider that does not implement `listBranches`.\n *\n * The server's `handleError` strips the original MastraError's `code`/`id` before serializing,\n * so we can't match on the ID `OBSERVABILITY_STORAGE_LIST_BRANCHES_NOT_IMPLEMENTED` directly —\n * we match on the message text from `core/.../observability/base.ts` instead.\n */\nexport function isBranchesNotSupportedError(error: unknown): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes('does not support listing trace branches');\n}\n\nexport type UnsupportedObservabilityOperation = 'logs' | 'metrics' | 'scores' | 'feedback';\n\n/**\n * Check if an error came from an observability storage provider that does not\n * implement a list operation. These are capability gaps, not transient failures.\n *\n * The server serializes these as plain HTTP errors, so the original MastraError\n * ID is not available in the browser. Match the stable base-storage message text\n * instead, like the trace branch support check above.\n */\nexport function isUnsupportedObservabilityOperationError(\n error: unknown,\n operation: UnsupportedObservabilityOperation,\n): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes(`does not support listing ${operation}`);\n}\n\n/**\n * Check if error has a status code that shouldn't be retried.\n * Used to prevent retrying client errors that won't resolve.\n */\nexport function isNonRetryableError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property\n if ('status' in error) {\n const status = (error as { status: number }).status;\n return HTTP_NO_RETRY_STATUSES.includes(status);\n }\n\n // Check for statusCode property\n if ('statusCode' in error) {\n const statusCode = (error as { statusCode: number }).statusCode;\n return HTTP_NO_RETRY_STATUSES.includes(statusCode);\n }\n\n // Check error message for client-js pattern\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return HTTP_NO_RETRY_STATUSES.some(code => new RegExp(`\\\\bstatus:\\\\s*${code}\\\\b`).test(message));\n }\n }\n\n return false;\n}\n\n/**\n * Default retry function for TanStack Query.\n * Does not retry 4xx client errors (400, 401, 403, 404).\n * Retries other errors up to 3 times.\n */\nexport function shouldRetryQuery(failureCount: number, error: unknown): boolean {\n // Don't retry client errors - they won't resolve with retries\n if (isNonRetryableError(error)) {\n return false;\n }\n // Default: retry up to 3 times for transient errors\n return failureCount < 3;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
const HTTP_NO_RETRY_STATUSES = [400, 401, 403, 404];
|
|
2
|
+
function is401UnauthorizedError(error) {
|
|
3
|
+
if (!error || typeof error !== "object") return false;
|
|
4
|
+
if ("status" in error && error.status === 401) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
if ("statusCode" in error && error.statusCode === 401) {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
if ("message" in error) {
|
|
11
|
+
const message = error.message;
|
|
12
|
+
if (typeof message === "string") {
|
|
13
|
+
return /\bstatus:\s*401\b/.test(message);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
function is403ForbiddenError(error) {
|
|
19
|
+
if (!error || typeof error !== "object") return false;
|
|
20
|
+
if ("status" in error && error.status === 403) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
if ("statusCode" in error && error.statusCode === 403) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
if ("message" in error) {
|
|
27
|
+
const message = error.message;
|
|
28
|
+
if (typeof message === "string") {
|
|
29
|
+
return /\bstatus:\s*403\b/.test(message);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
function is404NotFoundError(error) {
|
|
35
|
+
if (!error || typeof error !== "object") return false;
|
|
36
|
+
if ("status" in error && error.status === 404) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
if ("statusCode" in error && error.statusCode === 404) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
if ("message" in error) {
|
|
43
|
+
const message = error.message;
|
|
44
|
+
if (typeof message === "string") {
|
|
45
|
+
return /\bstatus:\s*404\b/.test(message);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
function isBranchesNotSupportedError(error) {
|
|
51
|
+
if (!error || typeof error !== "object" || !("message" in error)) return false;
|
|
52
|
+
const message = error.message;
|
|
53
|
+
if (typeof message !== "string") return false;
|
|
54
|
+
return message.includes("does not support listing trace branches");
|
|
55
|
+
}
|
|
56
|
+
function isUnsupportedObservabilityOperationError(error, operation) {
|
|
57
|
+
if (!error || typeof error !== "object" || !("message" in error)) return false;
|
|
58
|
+
const message = error.message;
|
|
59
|
+
if (typeof message !== "string") return false;
|
|
60
|
+
return message.includes(`does not support listing ${operation}`);
|
|
61
|
+
}
|
|
62
|
+
function isNonRetryableError(error) {
|
|
63
|
+
if (!error || typeof error !== "object") return false;
|
|
64
|
+
if ("status" in error) {
|
|
65
|
+
const status = error.status;
|
|
66
|
+
return HTTP_NO_RETRY_STATUSES.includes(status);
|
|
67
|
+
}
|
|
68
|
+
if ("statusCode" in error) {
|
|
69
|
+
const statusCode = error.statusCode;
|
|
70
|
+
return HTTP_NO_RETRY_STATUSES.includes(statusCode);
|
|
71
|
+
}
|
|
72
|
+
if ("message" in error) {
|
|
73
|
+
const message = error.message;
|
|
74
|
+
if (typeof message === "string") {
|
|
75
|
+
return HTTP_NO_RETRY_STATUSES.some((code) => new RegExp(`\\bstatus:\\s*${code}\\b`).test(message));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
function shouldRetryQuery(failureCount, error) {
|
|
81
|
+
if (isNonRetryableError(error)) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
return failureCount < 3;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export { is401UnauthorizedError, is403ForbiddenError, is404NotFoundError, isBranchesNotSupportedError, isNonRetryableError, isUnsupportedObservabilityOperationError, shouldRetryQuery };
|
|
88
|
+
//# sourceMappingURL=query-utils.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-utils.es.js","sources":["../../src/lib/query-utils.ts"],"sourcesContent":["/**\n * HTTP status codes that should not be retried.\n * - 400: Bad Request (client error, won't change)\n * - 401: Unauthorized (needs re-auth, not retry)\n * - 403: Forbidden (RBAC permission denied)\n * - 404: Not Found (resource doesn't exist)\n */\nconst HTTP_NO_RETRY_STATUSES = [400, 401, 403, 404];\n\n/**\n * Check if error is a 401 Unauthorized response.\n * Indicates the user's session has expired or token is invalid.\n * Handles both direct status property and client-js error message format.\n */\nexport function is401UnauthorizedError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 401) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 401) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 401\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*401\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 403 Forbidden response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is403ForbiddenError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 403) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 403) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 403\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*403\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 404 Not Found response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is404NotFoundError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n if ('status' in error && (error as { status: number }).status === 404) {\n return true;\n }\n\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return true;\n }\n\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*404\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if an error came from a storage provider that does not implement `listBranches`.\n *\n * The server's `handleError` strips the original MastraError's `code`/`id` before serializing,\n * so we can't match on the ID `OBSERVABILITY_STORAGE_LIST_BRANCHES_NOT_IMPLEMENTED` directly —\n * we match on the message text from `core/.../observability/base.ts` instead.\n */\nexport function isBranchesNotSupportedError(error: unknown): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes('does not support listing trace branches');\n}\n\nexport type UnsupportedObservabilityOperation = 'logs' | 'metrics' | 'scores' | 'feedback';\n\n/**\n * Check if an error came from an observability storage provider that does not\n * implement a list operation. These are capability gaps, not transient failures.\n *\n * The server serializes these as plain HTTP errors, so the original MastraError\n * ID is not available in the browser. Match the stable base-storage message text\n * instead, like the trace branch support check above.\n */\nexport function isUnsupportedObservabilityOperationError(\n error: unknown,\n operation: UnsupportedObservabilityOperation,\n): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes(`does not support listing ${operation}`);\n}\n\n/**\n * Check if error has a status code that shouldn't be retried.\n * Used to prevent retrying client errors that won't resolve.\n */\nexport function isNonRetryableError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property\n if ('status' in error) {\n const status = (error as { status: number }).status;\n return HTTP_NO_RETRY_STATUSES.includes(status);\n }\n\n // Check for statusCode property\n if ('statusCode' in error) {\n const statusCode = (error as { statusCode: number }).statusCode;\n return HTTP_NO_RETRY_STATUSES.includes(statusCode);\n }\n\n // Check error message for client-js pattern\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return HTTP_NO_RETRY_STATUSES.some(code => new RegExp(`\\\\bstatus:\\\\s*${code}\\\\b`).test(message));\n }\n }\n\n return false;\n}\n\n/**\n * Default retry function for TanStack Query.\n * Does not retry 4xx client errors (400, 401, 403, 404).\n * Retries other errors up to 3 times.\n */\nexport function shouldRetryQuery(failureCount: number, error: unknown): boolean {\n // Don't retry client errors - they won't resolve with retries\n if (isNonRetryableError(error)) {\n return false;\n }\n // Default: retry up to 3 times for transient errors\n return failureCount < 3;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const isRule = (condition) => "field" in condition;
|
|
6
|
+
const isRuleGroup = (condition) => "conditions" in condition;
|
|
7
|
+
const countLeafRules = (group) => {
|
|
8
|
+
if (!group) return 0;
|
|
9
|
+
return group.conditions.reduce((count, condition) => {
|
|
10
|
+
if (isRule(condition)) return count + 1;
|
|
11
|
+
return count + countLeafRules(condition);
|
|
12
|
+
}, 0);
|
|
13
|
+
};
|
|
14
|
+
const createDefaultRule = () => ({
|
|
15
|
+
field: "",
|
|
16
|
+
operator: "equals",
|
|
17
|
+
value: ""
|
|
18
|
+
});
|
|
19
|
+
const createDefaultRuleGroup = (operator = "AND") => ({
|
|
20
|
+
operator,
|
|
21
|
+
conditions: [createDefaultRule()]
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
exports.countLeafRules = countLeafRules;
|
|
25
|
+
exports.createDefaultRule = createDefaultRule;
|
|
26
|
+
exports.createDefaultRuleGroup = createDefaultRuleGroup;
|
|
27
|
+
exports.isRule = isRule;
|
|
28
|
+
exports.isRuleGroup = isRuleGroup;
|
|
29
|
+
//# sourceMappingURL=rule-engine.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-engine.cjs.js","sources":["../../src/lib/rule-engine/utils/index.ts"],"sourcesContent":["import type { Rule, RuleGroup } from '../types';\n\n/**\n * Type guard: checks if a condition is a leaf Rule\n */\nexport const isRule = (condition: Rule | RuleGroup): condition is Rule => 'field' in condition;\n\n/**\n * Type guard: checks if a condition is a nested RuleGroup\n */\nexport const isRuleGroup = (condition: Rule | RuleGroup): condition is RuleGroup => 'conditions' in condition;\n\n/**\n * Recursively counts the number of leaf Rule nodes in a RuleGroup\n */\nexport const countLeafRules = (group: RuleGroup | undefined): number => {\n if (!group) return 0;\n return group.conditions.reduce((count, condition) => {\n if (isRule(condition)) return count + 1;\n return count + countLeafRules(condition);\n }, 0);\n};\n\n/**\n * Creates a default empty rule\n */\nexport const createDefaultRule = (): Rule => ({\n field: '',\n operator: 'equals',\n value: '',\n});\n\n/**\n * Creates a default empty rule group\n */\nexport const createDefaultRuleGroup = (operator: 'AND' | 'OR' = 'AND'): RuleGroup => ({\n operator,\n conditions: [createDefaultRule()],\n});\n"],"names":[],"mappings":";;;;AAKO,MAAM,MAAA,GAAS,CAAC,SAAA,KAAmD,OAAA,IAAW;AAK9E,MAAM,WAAA,GAAc,CAAC,SAAA,KAAwD,YAAA,IAAgB;AAK7F,MAAM,cAAA,GAAiB,CAAC,KAAA,KAAyC;AACtE,EAAA,IAAI,CAAC,OAAO,OAAO,CAAA;AACnB,EAAA,OAAO,KAAA,CAAM,UAAA,CAAW,MAAA,CAAO,CAAC,OAAO,SAAA,KAAc;AACnD,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG,OAAO,KAAA,GAAQ,CAAA;AACtC,IAAA,OAAO,KAAA,GAAQ,eAAe,SAAS,CAAA;AAAA,EACzC,GAAG,CAAC,CAAA;AACN;AAKO,MAAM,oBAAoB,OAAa;AAAA,EAC5C,KAAA,EAAO,EAAA;AAAA,EACP,QAAA,EAAU,QAAA;AAAA,EACV,KAAA,EAAO;AACT,CAAA;AAKO,MAAM,sBAAA,GAAyB,CAAC,QAAA,GAAyB,KAAA,MAAsB;AAAA,EACpF,QAAA;AAAA,EACA,UAAA,EAAY,CAAC,iBAAA,EAAmB;AAClC,CAAA;;;;;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const isRule = (condition) => "field" in condition;
|
|
2
|
+
const isRuleGroup = (condition) => "conditions" in condition;
|
|
3
|
+
const countLeafRules = (group) => {
|
|
4
|
+
if (!group) return 0;
|
|
5
|
+
return group.conditions.reduce((count, condition) => {
|
|
6
|
+
if (isRule(condition)) return count + 1;
|
|
7
|
+
return count + countLeafRules(condition);
|
|
8
|
+
}, 0);
|
|
9
|
+
};
|
|
10
|
+
const createDefaultRule = () => ({
|
|
11
|
+
field: "",
|
|
12
|
+
operator: "equals",
|
|
13
|
+
value: ""
|
|
14
|
+
});
|
|
15
|
+
const createDefaultRuleGroup = (operator = "AND") => ({
|
|
16
|
+
operator,
|
|
17
|
+
conditions: [createDefaultRule()]
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export { countLeafRules, createDefaultRule, createDefaultRuleGroup, isRule, isRuleGroup };
|
|
21
|
+
//# sourceMappingURL=rule-engine.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-engine.es.js","sources":["../../src/lib/rule-engine/utils/index.ts"],"sourcesContent":["import type { Rule, RuleGroup } from '../types';\n\n/**\n * Type guard: checks if a condition is a leaf Rule\n */\nexport const isRule = (condition: Rule | RuleGroup): condition is Rule => 'field' in condition;\n\n/**\n * Type guard: checks if a condition is a nested RuleGroup\n */\nexport const isRuleGroup = (condition: Rule | RuleGroup): condition is RuleGroup => 'conditions' in condition;\n\n/**\n * Recursively counts the number of leaf Rule nodes in a RuleGroup\n */\nexport const countLeafRules = (group: RuleGroup | undefined): number => {\n if (!group) return 0;\n return group.conditions.reduce((count, condition) => {\n if (isRule(condition)) return count + 1;\n return count + countLeafRules(condition);\n }, 0);\n};\n\n/**\n * Creates a default empty rule\n */\nexport const createDefaultRule = (): Rule => ({\n field: '',\n operator: 'equals',\n value: '',\n});\n\n/**\n * Creates a default empty rule group\n */\nexport const createDefaultRuleGroup = (operator: 'AND' | 'OR' = 'AND'): RuleGroup => ({\n operator,\n conditions: [createDefaultRule()],\n});\n"],"names":[],"mappings":"AAKO,MAAM,MAAA,GAAS,CAAC,SAAA,KAAmD,OAAA,IAAW;AAK9E,MAAM,WAAA,GAAc,CAAC,SAAA,KAAwD,YAAA,IAAgB;AAK7F,MAAM,cAAA,GAAiB,CAAC,KAAA,KAAyC;AACtE,EAAA,IAAI,CAAC,OAAO,OAAO,CAAA;AACnB,EAAA,OAAO,KAAA,CAAM,UAAA,CAAW,MAAA,CAAO,CAAC,OAAO,SAAA,KAAc;AACnD,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG,OAAO,KAAA,GAAQ,CAAA;AACtC,IAAA,OAAO,KAAA,GAAQ,eAAe,SAAS,CAAA;AAAA,EACzC,GAAG,CAAC,CAAA;AACN;AAKO,MAAM,oBAAoB,OAAa;AAAA,EAC5C,KAAA,EAAO,EAAA;AAAA,EACP,QAAA,EAAU,QAAA;AAAA,EACV,KAAA,EAAO;AACT,CAAA;AAKO,MAAM,sBAAA,GAAyB,CAAC,QAAA,GAAyB,KAAA,MAAsB;AAAA,EACpF,QAAA;AAAA,EACA,UAAA,EAAY,CAAC,iBAAA,EAAmB;AAClC,CAAA;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const lodashTitleCase = (str) => {
|
|
6
|
+
const camelCased = str.replace(/[-_\s]+(.)?/g, (_, char) => char ? char.toUpperCase() : "").replace(/^(.)/, (char) => char.toLowerCase());
|
|
7
|
+
return camelCased.replace(/([A-Z])/g, " $1").replace(/^./, (str2) => str2.toUpperCase()).trim();
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
exports.lodashTitleCase = lodashTitleCase;
|
|
11
|
+
//# sourceMappingURL=string.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.cjs.js","sources":["../../src/lib/string.ts"],"sourcesContent":["export const lodashTitleCase = (str: string): string => {\n // First convert to camel case (handles various separators like spaces, hyphens, underscores)\n const camelCased = str\n .replace(/[-_\\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ''))\n .replace(/^(.)/, char => char.toLowerCase());\n\n // Then convert to start case (capitalize first letter of each word)\n return camelCased\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, str => str.toUpperCase())\n .trim();\n};\n"],"names":["str"],"mappings":";;;;AAAO,MAAM,eAAA,GAAkB,CAAC,GAAA,KAAwB;AAEtD,EAAA,MAAM,aAAa,GAAA,CAChB,OAAA,CAAQ,gBAAgB,CAAC,CAAA,EAAG,SAAU,IAAA,GAAO,IAAA,CAAK,WAAA,EAAY,GAAI,EAAG,CAAA,CACrE,OAAA,CAAQ,QAAQ,CAAA,IAAA,KAAQ,IAAA,CAAK,aAAa,CAAA;AAG7C,EAAA,OAAO,UAAA,CACJ,OAAA,CAAQ,UAAA,EAAY,KAAK,CAAA,CACzB,OAAA,CAAQ,IAAA,EAAM,CAAAA,IAAAA,KAAOA,IAAAA,CAAI,WAAA,EAAa,EACtC,IAAA,EAAK;AACV;;;;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const lodashTitleCase = (str) => {
|
|
2
|
+
const camelCased = str.replace(/[-_\s]+(.)?/g, (_, char) => char ? char.toUpperCase() : "").replace(/^(.)/, (char) => char.toLowerCase());
|
|
3
|
+
return camelCased.replace(/([A-Z])/g, " $1").replace(/^./, (str2) => str2.toUpperCase()).trim();
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export { lodashTitleCase };
|
|
7
|
+
//# sourceMappingURL=string.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.es.js","sources":["../../src/lib/string.ts"],"sourcesContent":["export const lodashTitleCase = (str: string): string => {\n // First convert to camel case (handles various separators like spaces, hyphens, underscores)\n const camelCased = str\n .replace(/[-_\\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ''))\n .replace(/^(.)/, char => char.toLowerCase());\n\n // Then convert to start case (capitalize first letter of each word)\n return camelCased\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, str => str.toUpperCase())\n .trim();\n};\n"],"names":["str"],"mappings":"AAAO,MAAM,eAAA,GAAkB,CAAC,GAAA,KAAwB;AAEtD,EAAA,MAAM,aAAa,GAAA,CAChB,OAAA,CAAQ,gBAAgB,CAAC,CAAA,EAAG,SAAU,IAAA,GAAO,IAAA,CAAK,WAAA,EAAY,GAAI,EAAG,CAAA,CACrE,OAAA,CAAQ,QAAQ,CAAA,IAAA,KAAQ,IAAA,CAAK,aAAa,CAAA;AAG7C,EAAA,OAAO,UAAA,CACJ,OAAA,CAAQ,UAAA,EAAY,KAAK,CAAA,CACzB,OAAA,CAAQ,IAAA,EAAM,CAAAA,IAAAA,KAAOA,IAAAA,CAAI,WAAA,EAAa,EACtC,IAAA,EAAK;AACV;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
function truncateString(str, maxLength) {
|
|
6
|
+
if (str.length <= maxLength) return str;
|
|
7
|
+
return str.slice(0, maxLength) + "…";
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
exports.truncateString = truncateString;
|
|
11
|
+
//# sourceMappingURL=truncate-string.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncate-string.cjs.js","sources":["../../src/lib/truncate-string.ts"],"sourcesContent":["export function truncateString(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.slice(0, maxLength) + '…';\n}\n"],"names":[],"mappings":";;;;AAAO,SAAS,cAAA,CAAe,KAAa,SAAA,EAA2B;AACrE,EAAA,IAAI,GAAA,CAAI,MAAA,IAAU,SAAA,EAAW,OAAO,GAAA;AACpC,EAAA,OAAO,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,GAAI,GAAA;AACnC;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncate-string.es.js","sources":["../../src/lib/truncate-string.ts"],"sourcesContent":["export function truncateString(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.slice(0, maxLength) + '…';\n}\n"],"names":[],"mappings":"AAAO,SAAS,cAAA,CAAe,KAAa,SAAA,EAA2B;AACrE,EAAA,IAAI,GAAA,CAAI,MAAA,IAAU,SAAA,EAAW,OAAO,GAAA;AACpC,EAAA,OAAO,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,GAAI,GAAA;AACnC;;;;"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/playground-ui",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "37.0.0
|
|
4
|
+
"version": "37.0.0",
|
|
5
5
|
"description": "Mastra Playground components",
|
|
6
6
|
"main": "dist/index.umd.js",
|
|
7
7
|
"module": "dist/index.es.js",
|
|
@@ -119,8 +119,8 @@
|
|
|
119
119
|
"react": ">=19.0.0",
|
|
120
120
|
"react-dom": ">=19.0.0",
|
|
121
121
|
"tailwindcss": "^4.0.0",
|
|
122
|
-
"@mastra/client-js": "^1.28.0
|
|
123
|
-
"@mastra/react": "1.
|
|
122
|
+
"@mastra/client-js": "^1.28.0",
|
|
123
|
+
"@mastra/react": "1.2.0"
|
|
124
124
|
},
|
|
125
125
|
"devDependencies": {
|
|
126
126
|
"@storybook/addon-a11y": "^10.4.1",
|
|
@@ -157,11 +157,11 @@
|
|
|
157
157
|
"vite-plugin-dts": "^4.5.4",
|
|
158
158
|
"vite-plugin-lib-inject-css": "^2.2.2",
|
|
159
159
|
"vitest": "4.1.8",
|
|
160
|
-
"@
|
|
161
|
-
"@mastra/memory": "1.21.2
|
|
162
|
-
"@
|
|
163
|
-
"@mastra/
|
|
164
|
-
"@mastra/
|
|
160
|
+
"@mastra/client-js": "^1.28.0",
|
|
161
|
+
"@mastra/memory": "1.21.2",
|
|
162
|
+
"@internal/lint": "0.0.109",
|
|
163
|
+
"@mastra/react": "1.2.0",
|
|
164
|
+
"@mastra/core": "1.47.0"
|
|
165
165
|
},
|
|
166
166
|
"homepage": "https://mastra.ai",
|
|
167
167
|
"repository": {
|