@caelo-cms/shared 0.10.21 → 0.10.23
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/dist/ai-tools.d.ts +291 -231
- package/dist/ai-tools.d.ts.map +1 -1
- package/dist/ai-tools.js +349 -281
- package/dist/ai-tools.js.map +1 -1
- package/dist/auth-forms.d.ts.map +1 -1
- package/dist/auth-forms.js +4 -1
- package/dist/auth-forms.js.map +1 -1
- package/dist/base-css.d.ts +24 -0
- package/dist/base-css.d.ts.map +1 -0
- package/dist/base-css.js +28 -0
- package/dist/base-css.js.map +1 -0
- package/dist/build-page.d.ts +330 -0
- package/dist/build-page.d.ts.map +1 -0
- package/dist/build-page.js +282 -0
- package/dist/build-page.js.map +1 -0
- package/dist/content.d.ts +322 -9
- package/dist/content.d.ts.map +1 -1
- package/dist/content.js +354 -11
- package/dist/content.js.map +1 -1
- package/dist/css-gradient-scan.d.ts +14 -0
- package/dist/css-gradient-scan.d.ts.map +1 -0
- package/dist/css-gradient-scan.js +81 -0
- package/dist/css-gradient-scan.js.map +1 -0
- package/dist/css-var-scan.d.ts +56 -0
- package/dist/css-var-scan.d.ts.map +1 -0
- package/dist/css-var-scan.js +97 -0
- package/dist/css-var-scan.js.map +1 -0
- package/dist/design-manifest.d.ts +36 -0
- package/dist/design-manifest.d.ts.map +1 -0
- package/dist/design-manifest.js +90 -0
- package/dist/design-manifest.js.map +1 -0
- package/dist/fonts.d.ts +89 -0
- package/dist/fonts.d.ts.map +1 -0
- package/dist/fonts.js +241 -0
- package/dist/fonts.js.map +1 -0
- package/dist/genesis-inventory.d.ts +32 -0
- package/dist/genesis-inventory.d.ts.map +1 -0
- package/dist/genesis-inventory.js +186 -0
- package/dist/genesis-inventory.js.map +1 -0
- package/dist/genesis.d.ts +62 -0
- package/dist/genesis.d.ts.map +1 -0
- package/dist/genesis.js +78 -0
- package/dist/genesis.js.map +1 -0
- package/dist/i18n.d.ts +44 -1
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +72 -6
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -1
- package/dist/interactions.d.ts +23 -0
- package/dist/interactions.d.ts.map +1 -0
- package/dist/interactions.js +44 -0
- package/dist/interactions.js.map +1 -0
- package/dist/media.d.ts +101 -16
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +126 -15
- package/dist/media.js.map +1 -1
- package/dist/page-log.d.ts +94 -0
- package/dist/page-log.d.ts.map +1 -0
- package/dist/page-log.js +111 -0
- package/dist/page-log.js.map +1 -0
- package/dist/preview-compose.d.ts +79 -0
- package/dist/preview-compose.d.ts.map +1 -1
- package/dist/preview-compose.js +155 -25
- package/dist/preview-compose.js.map +1 -1
- package/dist/proposal-status.d.ts +40 -0
- package/dist/proposal-status.d.ts.map +1 -0
- package/dist/proposal-status.js +34 -0
- package/dist/proposal-status.js.map +1 -0
- package/dist/responsive-images.d.ts +64 -0
- package/dist/responsive-images.d.ts.map +1 -0
- package/dist/responsive-images.js +98 -0
- package/dist/responsive-images.js.map +1 -0
- package/dist/safe-keys.d.ts +9 -0
- package/dist/safe-keys.d.ts.map +1 -0
- package/dist/safe-keys.js +20 -0
- package/dist/safe-keys.js.map +1 -0
- package/dist/seo.d.ts +8 -0
- package/dist/seo.d.ts.map +1 -1
- package/dist/seo.js +3 -1
- package/dist/seo.js.map +1 -1
- package/dist/skills.d.ts +14 -68
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +19 -113
- package/dist/skills.js.map +1 -1
- package/dist/strip-cdata.d.ts +7 -0
- package/dist/strip-cdata.d.ts.map +1 -0
- package/dist/strip-cdata.js +48 -0
- package/dist/strip-cdata.js.map +1 -0
- package/dist/structured-sets.d.ts +6 -16
- package/dist/structured-sets.d.ts.map +1 -1
- package/dist/structured-sets.js +5 -16
- package/dist/structured-sets.js.map +1 -1
- package/dist/subagents.d.ts +105 -3
- package/dist/subagents.d.ts.map +1 -1
- package/dist/subagents.js +224 -41
- package/dist/subagents.js.map +1 -1
- package/dist/template-engine.d.ts +85 -0
- package/dist/template-engine.d.ts.map +1 -0
- package/dist/template-engine.js +403 -0
- package/dist/template-engine.js.map +1 -0
- package/dist/theme-importers/auto-detect.d.ts +26 -0
- package/dist/theme-importers/auto-detect.d.ts.map +1 -0
- package/dist/theme-importers/auto-detect.js +42 -0
- package/dist/theme-importers/auto-detect.js.map +1 -0
- package/dist/theme-importers/css-comments.d.ts +12 -0
- package/dist/theme-importers/css-comments.d.ts.map +1 -0
- package/dist/theme-importers/css-comments.js +15 -0
- package/dist/theme-importers/css-comments.js.map +1 -0
- package/dist/theme-importers/dtcg.d.ts +46 -0
- package/dist/theme-importers/dtcg.d.ts.map +1 -0
- package/dist/theme-importers/dtcg.js +111 -0
- package/dist/theme-importers/dtcg.js.map +1 -0
- package/dist/theme-importers/loose.d.ts +3 -0
- package/dist/theme-importers/loose.d.ts.map +1 -0
- package/dist/theme-importers/loose.js +76 -0
- package/dist/theme-importers/loose.js.map +1 -0
- package/dist/theme-importers/shadcn.d.ts +24 -0
- package/dist/theme-importers/shadcn.d.ts.map +1 -0
- package/dist/theme-importers/shadcn.js +135 -0
- package/dist/theme-importers/shadcn.js.map +1 -0
- package/dist/theme-importers/style-dictionary.d.ts +17 -0
- package/dist/theme-importers/style-dictionary.d.ts.map +1 -0
- package/dist/theme-importers/style-dictionary.js +125 -0
- package/dist/theme-importers/style-dictionary.js.map +1 -0
- package/dist/theme-importers/tailwind.d.ts +3 -0
- package/dist/theme-importers/tailwind.d.ts.map +1 -0
- package/dist/theme-importers/tailwind.js +218 -0
- package/dist/theme-importers/tailwind.js.map +1 -0
- package/dist/theme-literal-binding.d.ts +37 -0
- package/dist/theme-literal-binding.d.ts.map +1 -0
- package/dist/theme-literal-binding.js +138 -0
- package/dist/theme-literal-binding.js.map +1 -0
- package/dist/theme-normalize.d.ts +31 -0
- package/dist/theme-normalize.d.ts.map +1 -0
- package/dist/theme-normalize.js +587 -0
- package/dist/theme-normalize.js.map +1 -0
- package/dist/theme-ramp.d.ts +55 -0
- package/dist/theme-ramp.d.ts.map +1 -0
- package/dist/theme-ramp.js +149 -0
- package/dist/theme-ramp.js.map +1 -0
- package/dist/theme-render.d.ts +105 -0
- package/dist/theme-render.d.ts.map +1 -0
- package/dist/theme-render.js +441 -0
- package/dist/theme-render.js.map +1 -0
- package/dist/themes-errors.d.ts +109 -0
- package/dist/themes-errors.d.ts.map +1 -0
- package/dist/themes-errors.js +170 -0
- package/dist/themes-errors.js.map +1 -0
- package/dist/themes.d.ts +343 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +697 -0
- package/dist/themes.js.map +1 -0
- package/dist/version.d.ts +7 -4
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +6 -3
- package/dist/version.js.map +1 -1
- package/package.json +10 -2
- package/src/__tests__/redos-hardening.test.ts +160 -0
- package/src/ai-tools-add-module-modes.test.ts +106 -0
- package/src/ai-tools-position.test.ts +134 -0
- package/src/ai-tools.test.ts +81 -0
- package/src/ai-tools.ts +1179 -0
- package/src/auth-forms.ts +36 -0
- package/src/base-css.ts +30 -0
- package/src/build-page.test.ts +228 -0
- package/src/build-page.ts +319 -0
- package/src/cap-failures.ts +67 -0
- package/src/content.test.ts +170 -0
- package/src/content.ts +620 -0
- package/src/context.ts +43 -0
- package/src/css-gradient-scan.ts +88 -0
- package/src/css-var-scan.test.ts +96 -0
- package/src/css-var-scan.ts +144 -0
- package/src/derive-module-type.test.ts +80 -0
- package/src/design-manifest.ts +93 -0
- package/src/fonts.test.ts +157 -0
- package/src/fonts.ts +296 -0
- package/src/genesis-inventory.test.ts +86 -0
- package/src/genesis-inventory.ts +215 -0
- package/src/genesis-sanitize.test.ts +35 -0
- package/src/genesis.ts +87 -0
- package/src/i18n.test.ts +274 -0
- package/src/i18n.ts +269 -0
- package/src/index.test.ts +10 -0
- package/src/index.ts +59 -0
- package/src/interactions.ts +48 -0
- package/src/logger.ts +147 -0
- package/src/media.test.ts +160 -0
- package/src/media.ts +355 -0
- package/src/page-log.test.ts +163 -0
- package/src/page-log.ts +124 -0
- package/src/preview-compose.test.ts +602 -0
- package/src/preview-compose.ts +709 -0
- package/src/preview-scanner.test.ts +96 -0
- package/src/preview-scanner.ts +214 -0
- package/src/proposal-status.test.ts +69 -0
- package/src/proposal-status.ts +40 -0
- package/src/responsive-images.test.ts +104 -0
- package/src/responsive-images.ts +151 -0
- package/src/result.ts +29 -0
- package/src/safe-keys.ts +21 -0
- package/src/seo.test.ts +234 -0
- package/src/seo.ts +261 -0
- package/src/skills.ts +48 -0
- package/src/snapshots.test.ts +80 -0
- package/src/snapshots.ts +81 -0
- package/src/strip-cdata.test.ts +41 -0
- package/src/strip-cdata.ts +50 -0
- package/src/structured-sets.ts +180 -0
- package/src/subagents.test.ts +262 -0
- package/src/subagents.ts +432 -0
- package/src/template-engine.test.ts +379 -0
- package/src/template-engine.ts +520 -0
- package/src/theme-gradient.test.ts +92 -0
- package/src/theme-importers/__tests__/proto-pollution.test.ts +54 -0
- package/src/theme-importers/auto-detect.ts +84 -0
- package/src/theme-importers/css-comments.ts +15 -0
- package/src/theme-importers/dtcg.ts +106 -0
- package/src/theme-importers/loose.ts +76 -0
- package/src/theme-importers/shadcn.ts +133 -0
- package/src/theme-importers/style-dictionary.ts +125 -0
- package/src/theme-importers/tailwind.ts +217 -0
- package/src/theme-literal-binding.test.ts +71 -0
- package/src/theme-literal-binding.ts +159 -0
- package/src/theme-motion.test.ts +115 -0
- package/src/theme-normalize-envelope.test.ts +43 -0
- package/src/theme-normalize-gradient.test.ts +135 -0
- package/src/theme-normalize.ts +661 -0
- package/src/theme-ramp.ts +187 -0
- package/src/theme-render-sanitize.test.ts +45 -0
- package/src/theme-render.test.ts +119 -0
- package/src/theme-render.ts +487 -0
- package/src/theme-shadow.test.ts +56 -0
- package/src/themes-errors.ts +199 -0
- package/src/themes.ts +842 -0
- package/src/translation.test.ts +160 -0
- package/src/translation.ts +295 -0
- package/src/version.ts +66 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -19,16 +19,19 @@
|
|
|
19
19
|
* Format: SemVer 2.0.0. Pre-1.0 minor bumps are breaking; post-1.0
|
|
20
20
|
* follow standard SemVer.
|
|
21
21
|
*/
|
|
22
|
-
export declare const CAELO_VERSION = "0.10.
|
|
22
|
+
export declare const CAELO_VERSION = "0.10.23";
|
|
23
23
|
/**
|
|
24
24
|
* Deprecated alias for back-compat — early P17 work spelled this
|
|
25
25
|
* `CALEO_VERSION` (typo of "Caelo"). New code should import
|
|
26
|
-
* `CAELO_VERSION`. Kept as a re-export so
|
|
27
|
-
*
|
|
26
|
+
* `CAELO_VERSION`. Kept as a re-export so external consumers of this
|
|
27
|
+
* published package (plugin authors / embedders) keep compiling;
|
|
28
|
+
* removal is deferred to the next major bump. Knip flags this as a
|
|
29
|
+
* duplicate export — suppressed in `knip.json#ignoreIssues` because the
|
|
30
|
+
* alias is intentional, mirroring `subagents.ts`.
|
|
28
31
|
*
|
|
29
32
|
* @deprecated use CAELO_VERSION
|
|
30
33
|
*/
|
|
31
|
-
export declare const CALEO_VERSION = "0.10.
|
|
34
|
+
export declare const CALEO_VERSION = "0.10.23";
|
|
32
35
|
/**
|
|
33
36
|
* Parsed shape — major/minor/patch + optional pre-release tag.
|
|
34
37
|
* Stable interface for callers that need to feature-gate (rare —
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,YAAgB,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,YAAY,CAYtE"}
|
package/dist/version.js
CHANGED
|
@@ -20,12 +20,15 @@
|
|
|
20
20
|
* Format: SemVer 2.0.0. Pre-1.0 minor bumps are breaking; post-1.0
|
|
21
21
|
* follow standard SemVer.
|
|
22
22
|
*/
|
|
23
|
-
export const CAELO_VERSION = "0.10.
|
|
23
|
+
export const CAELO_VERSION = "0.10.23";
|
|
24
24
|
/**
|
|
25
25
|
* Deprecated alias for back-compat — early P17 work spelled this
|
|
26
26
|
* `CALEO_VERSION` (typo of "Caelo"). New code should import
|
|
27
|
-
* `CAELO_VERSION`. Kept as a re-export so
|
|
28
|
-
*
|
|
27
|
+
* `CAELO_VERSION`. Kept as a re-export so external consumers of this
|
|
28
|
+
* published package (plugin authors / embedders) keep compiling;
|
|
29
|
+
* removal is deferred to the next major bump. Knip flags this as a
|
|
30
|
+
* duplicate export — suppressed in `knip.json#ignoreIssues` because the
|
|
31
|
+
* alias is intentional, mirroring `subagents.ts`.
|
|
29
32
|
*
|
|
30
33
|
* @deprecated use CAELO_VERSION
|
|
31
34
|
*/
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AAEvC
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;AAgB3C,MAAM,UAAU,YAAY,CAAC,MAAc,aAAa;IACtD,MAAM,CAAC,GAAG,iCAAiC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QACvC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;QACxB,GAAG;KACJ,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@caelo-cms/shared",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.23",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "MPL-2.0",
|
|
6
6
|
"description": "Shared Zod schemas + types + the two-pass HTML composer used by every Caelo CMS workspace package. Stable enough for plugin authors and embedders to depend on directly.",
|
|
@@ -17,12 +17,15 @@
|
|
|
17
17
|
"exports": {
|
|
18
18
|
".": {
|
|
19
19
|
"types": "./dist/index.d.ts",
|
|
20
|
+
"bun": "./src/index.ts",
|
|
21
|
+
"development": "./src/index.ts",
|
|
20
22
|
"import": "./dist/index.js",
|
|
21
23
|
"default": "./dist/index.js"
|
|
22
24
|
}
|
|
23
25
|
},
|
|
24
26
|
"files": [
|
|
25
27
|
"dist/",
|
|
28
|
+
"src/",
|
|
26
29
|
"README.md",
|
|
27
30
|
"package.json"
|
|
28
31
|
],
|
|
@@ -32,7 +35,12 @@
|
|
|
32
35
|
"prepublishOnly": "tsc -b --force"
|
|
33
36
|
},
|
|
34
37
|
"dependencies": {
|
|
38
|
+
"colorjs.io": "^0.6.1",
|
|
35
39
|
"htmlparser2": "^12.0.0",
|
|
36
|
-
"
|
|
40
|
+
"mustache": "^4.2.0",
|
|
41
|
+
"zod": "4.4.3"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/mustache": "^4.2.6"
|
|
37
45
|
}
|
|
38
46
|
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Regression tests for the polynomial-ReDoS hardening (issue #113, S4).
|
|
5
|
+
* Two assertion classes per rewritten pattern:
|
|
6
|
+
* - termination bound: a pathological input completes well under a hard
|
|
7
|
+
* budget (a quadratic regex blows it by orders of magnitude, so the
|
|
8
|
+
* threshold is not flaky);
|
|
9
|
+
* - behaviour equivalence: the hardened form produces the same output as
|
|
10
|
+
* the documented intent on valid input.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { describe, expect, it } from "bun:test";
|
|
14
|
+
import { fontFamilySlug, parseFontsCss } from "../fonts.js";
|
|
15
|
+
import { trimSlashes, trimTrailingSlashes } from "../i18n.js";
|
|
16
|
+
import { renderTemplate } from "../template-engine.js";
|
|
17
|
+
import { stripCssComments } from "../theme-importers/css-comments.js";
|
|
18
|
+
|
|
19
|
+
// 250ms, not 100: under CI coverage instrumentation on a loaded runner
|
|
20
|
+
// the LINEAR 100k-char scans measured up to ~113ms (PR #170 flake). A
|
|
21
|
+
// quadratic regression blows this by orders of magnitude (seconds), so
|
|
22
|
+
// the wider bound loses no detection power — it only stops punishing
|
|
23
|
+
// slow runners for being slow.
|
|
24
|
+
const BUDGET_MS = 250;
|
|
25
|
+
|
|
26
|
+
function underBudget(fn: () => void): number {
|
|
27
|
+
const t0 = performance.now();
|
|
28
|
+
fn();
|
|
29
|
+
return performance.now() - t0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
describe("trimSlashes / trimTrailingSlashes (S4)", () => {
|
|
33
|
+
it("terminates linearly on a long slash run not at end-of-string", () => {
|
|
34
|
+
const evil = `${"/".repeat(200_000)}x`;
|
|
35
|
+
expect(underBudget(() => trimSlashes(evil))).toBeLessThan(BUDGET_MS);
|
|
36
|
+
expect(underBudget(() => trimTrailingSlashes(evil))).toBeLessThan(BUDGET_MS);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("is behaviour-equivalent to the old trims on valid input", () => {
|
|
40
|
+
expect(trimSlashes("//a/b//")).toBe("a/b");
|
|
41
|
+
expect(trimSlashes("a/b")).toBe("a/b");
|
|
42
|
+
expect(trimSlashes("///")).toBe("");
|
|
43
|
+
expect(trimSlashes("")).toBe("");
|
|
44
|
+
// base-URL case: trailing-only trim keeps the scheme's slashes.
|
|
45
|
+
expect(trimTrailingSlashes("https://example.com/")).toBe("https://example.com");
|
|
46
|
+
expect(trimTrailingSlashes("https://example.com///")).toBe("https://example.com");
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
describe("stripCssComments (S4)", () => {
|
|
51
|
+
it("terminates on a flood of unterminated comment openers", () => {
|
|
52
|
+
const evil = "/*".repeat(100_000);
|
|
53
|
+
expect(underBudget(() => stripCssComments(evil))).toBeLessThan(BUDGET_MS);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("strips real comments and leaves non-comment text", () => {
|
|
57
|
+
expect(stripCssComments("a /* x */ b")).toBe("a b");
|
|
58
|
+
expect(stripCssComments("color: red;")).toBe("color: red;");
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
describe("renderTemplate SECTION_RE (S4)", () => {
|
|
63
|
+
it("scans a large closed section body linearly (no quadratic backtracking)", () => {
|
|
64
|
+
// A closed section with a 100k-char literal body. The tempered-dot scans
|
|
65
|
+
// it in one linear pass; the old lazy [\s\S]*? + backreference close was
|
|
66
|
+
// the polynomial shape this guards against.
|
|
67
|
+
const big = "x".repeat(100_000);
|
|
68
|
+
const html = `<nav>{{#nav_items}}${big}<a href="{{href}}">{{label}}</a>{{/nav_items}}</nav>`;
|
|
69
|
+
expect(
|
|
70
|
+
underBudget(() =>
|
|
71
|
+
renderTemplate({
|
|
72
|
+
html,
|
|
73
|
+
fields: [{ name: "nav_items", kind: "link-list" }],
|
|
74
|
+
contentValues: { nav_items: [{ label: "Docs", href: "/docs" }] },
|
|
75
|
+
}),
|
|
76
|
+
),
|
|
77
|
+
).toBeLessThan(BUDGET_MS);
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it("still iterates a closed section the same way", () => {
|
|
81
|
+
const out = renderTemplate({
|
|
82
|
+
html: '<nav>{{#nav_items}}<a href="{{href}}">{{label}}</a>{{/nav_items}}</nav>',
|
|
83
|
+
fields: [{ name: "nav_items", kind: "link-list" }],
|
|
84
|
+
contentValues: {
|
|
85
|
+
nav_items: [
|
|
86
|
+
{ label: "Docs", href: "/docs" },
|
|
87
|
+
{ label: "Blog", href: "/blog" },
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
expect(out.html).toBe('<nav><a href="/docs">Docs</a><a href="/blog">Blog</a></nav>');
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
describe("fonts.ts patterns (issue #150 CodeQL follow-up)", () => {
|
|
96
|
+
it("scans a payload of unclosed @font-face starts linearly", () => {
|
|
97
|
+
// [^{}]* aborts at the next `{`; the old [^}]* rescanned to EOF per
|
|
98
|
+
// start position (quadratic across matchAll).
|
|
99
|
+
const evil = "@font-face{".repeat(30_000);
|
|
100
|
+
expect(underBudget(() => parseFontsCss(evil))).toBeLessThan(BUDGET_MS);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it("scans an ambiguous url( run linearly and rejects oversized payloads", () => {
|
|
104
|
+
const evil = `@font-face{font-family:'X';src:${"url((".repeat(20_000)};}`;
|
|
105
|
+
expect(underBudget(() => parseFontsCss(evil))).toBeLessThan(BUDGET_MS);
|
|
106
|
+
expect(parseFontsCss(`x${"y".repeat(1_000_001)}`)).toEqual([]);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it("still parses a valid css2 block identically (behaviour equivalence)", () => {
|
|
110
|
+
const faces = parseFontsCss(
|
|
111
|
+
"@font-face{font-family:'Poppins';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/a.woff2) format('woff2');unicode-range:U+0000-00FF;}",
|
|
112
|
+
);
|
|
113
|
+
expect(faces).toEqual([
|
|
114
|
+
{
|
|
115
|
+
family: "Poppins",
|
|
116
|
+
style: "normal",
|
|
117
|
+
weight: "400",
|
|
118
|
+
unicodeRange: "U+0000-00FF",
|
|
119
|
+
srcUrl: "https://fonts.gstatic.com/a.woff2",
|
|
120
|
+
},
|
|
121
|
+
]);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
it("slugs an all-dash family name linearly (no -+$ backtracking)", () => {
|
|
125
|
+
const evil = "-".repeat(200_000);
|
|
126
|
+
expect(underBudget(() => fontFamilySlug(evil))).toBeLessThan(BUDGET_MS);
|
|
127
|
+
expect(fontFamilySlug(" Playfair Display ")).toBe("playfair-display");
|
|
128
|
+
expect(fontFamilySlug("--Weird--Name--")).toBe("weird-name");
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
describe("css gradient scanner + binding decl parse (issue #164 CodeQL follow-up)", () => {
|
|
133
|
+
it("scans a wall of unclosed gradient heads linearly", async () => {
|
|
134
|
+
const { scanCssGradients } = await import("../css-gradient-scan.js");
|
|
135
|
+
const evil = "conic-gradient(".repeat(20_000);
|
|
136
|
+
expect(underBudget(() => scanCssGradients(evil))).toBeLessThan(BUDGET_MS);
|
|
137
|
+
expect(scanCssGradients(evil)).toEqual([]);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it("still extracts nested-paren gradients correctly (behaviour equivalence)", async () => {
|
|
141
|
+
const { scanCssGradients } = await import("../css-gradient-scan.js");
|
|
142
|
+
const css =
|
|
143
|
+
"a{background:linear-gradient(135deg, rgba(15,23,42,0.5), #fff)} b{x:repeating-linear-gradient(45deg, #000 0 2px)}";
|
|
144
|
+
const found = scanCssGradients(css).map((m) => m.literal);
|
|
145
|
+
expect(found).toEqual([
|
|
146
|
+
"linear-gradient(135deg, rgba(15,23,42,0.5), #fff)",
|
|
147
|
+
"repeating-linear-gradient(45deg, #000 0 2px)",
|
|
148
|
+
]);
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
it("builds the theme value map linearly on adversarial dash runs", async () => {
|
|
152
|
+
const { buildThemeValueMap } = await import("../theme-literal-binding.js");
|
|
153
|
+
const tokens = {
|
|
154
|
+
color: { primary: { $type: "color", $value: "#4f46e5" } },
|
|
155
|
+
} as unknown as import("../themes.js").ThemeDocument;
|
|
156
|
+
// The map parse consumes renderer OUTPUT, but harden the parse
|
|
157
|
+
// itself against pathological documents producing long dash names.
|
|
158
|
+
expect(underBudget(() => buildThemeValueMap(tokens))).toBeLessThan(BUDGET_MS);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* issue #159 + audit #2 — `add_module` mode gate. Two shapes: place-existing
|
|
5
|
+
* via `moduleId`, or mint via `displayName` + `html`. A call with NEITHER
|
|
6
|
+
* fails at the boundary naming both valid shapes. A `moduleId` call is
|
|
7
|
+
* placement-only and TOLERATES extra authoring fields (§1A/§11 — a placement
|
|
8
|
+
* that can succeed must not fail over an extra field); the tool handler, not
|
|
9
|
+
* the schema, surfaces an info for any carried field that was not applied. The
|
|
10
|
+
* gate is identical across every `target` (page/layout/template), so it lives
|
|
11
|
+
* once on the unified schema.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { describe, expect, it } from "bun:test";
|
|
15
|
+
import { addModuleToolInput } from "./ai-tools.js";
|
|
16
|
+
|
|
17
|
+
const BASE = {
|
|
18
|
+
target: "page" as const,
|
|
19
|
+
targetRef: "11111111-1111-4111-8111-111111111101",
|
|
20
|
+
blockName: "content",
|
|
21
|
+
position: "bottom" as const,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
describe("addModuleToolInput modes (issue #159)", () => {
|
|
25
|
+
it("accepts place mode: moduleId alone", () => {
|
|
26
|
+
const r = addModuleToolInput.safeParse({
|
|
27
|
+
...BASE,
|
|
28
|
+
moduleId: "11111111-1111-4111-8111-111111111102",
|
|
29
|
+
});
|
|
30
|
+
expect(r.success).toBe(true);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("accepts mint mode: displayName + html (+ fields carrying content)", () => {
|
|
34
|
+
// 2026-07 — a mint with declared fields must bring its content in
|
|
35
|
+
// the same call (`values` or field defaults); bare fields would
|
|
36
|
+
// render empty placeholders and are rejected.
|
|
37
|
+
const r = addModuleToolInput.safeParse({
|
|
38
|
+
...BASE,
|
|
39
|
+
displayName: "Hero",
|
|
40
|
+
html: "<h1>{{hero_title}}</h1>",
|
|
41
|
+
fields: [{ name: "hero_title", label: "Hero title", kind: "text" }],
|
|
42
|
+
values: { hero_title: "Welcome" },
|
|
43
|
+
});
|
|
44
|
+
expect(r.success).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("rejects mint mode with fields but neither values nor defaults (empty placeholders)", () => {
|
|
48
|
+
const r = addModuleToolInput.safeParse({
|
|
49
|
+
...BASE,
|
|
50
|
+
displayName: "Hero",
|
|
51
|
+
html: "<h1>{{hero_title}}</h1>",
|
|
52
|
+
fields: [{ name: "hero_title", label: "Hero title", kind: "text" }],
|
|
53
|
+
});
|
|
54
|
+
expect(r.success).toBe(false);
|
|
55
|
+
if (!r.success) {
|
|
56
|
+
expect(JSON.stringify(r.error.issues)).toContain("initial content");
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("accepts place mode against a layout target too", () => {
|
|
61
|
+
const r = addModuleToolInput.safeParse({
|
|
62
|
+
target: "layout",
|
|
63
|
+
targetRef: "site-default",
|
|
64
|
+
blockName: "footer",
|
|
65
|
+
position: "bottom",
|
|
66
|
+
moduleId: "11111111-1111-4111-8111-111111111102",
|
|
67
|
+
});
|
|
68
|
+
expect(r.success).toBe(true);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it("TOLERATES a moduleId call carrying authoring keys (incl. structural html) — placement-only, handler surfaces the ignored-authoring info", () => {
|
|
72
|
+
// §1A/§11 — a valid placement must never fail over an extra authoring
|
|
73
|
+
// field. moduleId + html passes; the tool handler (not the schema)
|
|
74
|
+
// reports that html was not applied and points at edit_module.
|
|
75
|
+
const r = addModuleToolInput.safeParse({
|
|
76
|
+
...BASE,
|
|
77
|
+
moduleId: "11111111-1111-4111-8111-111111111102",
|
|
78
|
+
html: "<p>hi</p>",
|
|
79
|
+
});
|
|
80
|
+
expect(r.success).toBe(true);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it("TOLERATES moduleId + metadata (displayName) — a harmless redundant label on a reuse", () => {
|
|
84
|
+
const r = addModuleToolInput.safeParse({
|
|
85
|
+
...BASE,
|
|
86
|
+
moduleId: "11111111-1111-4111-8111-111111111102",
|
|
87
|
+
displayName: "Site Header",
|
|
88
|
+
});
|
|
89
|
+
expect(r.success).toBe(true);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("rejects a call with neither mode, pointing at both valid shapes", () => {
|
|
93
|
+
const r = addModuleToolInput.safeParse({ ...BASE });
|
|
94
|
+
expect(r.success).toBe(false);
|
|
95
|
+
if (!r.success) {
|
|
96
|
+
const msg = r.error.issues.map((i) => i.message).join(" ");
|
|
97
|
+
expect(msg).toContain("moduleId");
|
|
98
|
+
expect(msg).toContain("displayName");
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it("rejects mint mode missing html", () => {
|
|
103
|
+
const r = addModuleToolInput.safeParse({ ...BASE, displayName: "Hero" });
|
|
104
|
+
expect(r.success).toBe(false);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* v0.6.2 — `positionInputSchema` coercion test. The AI recurrently
|
|
5
|
+
* passes JSON-quoted numbers (`"0"`, `"42"`) to the `position` field
|
|
6
|
+
* on the three `add_module_to_*` tools even though the tool
|
|
7
|
+
* description says to use bare integers. The schema now coerces
|
|
8
|
+
* digit-only strings; non-numeric strings still fail cleanly.
|
|
9
|
+
*
|
|
10
|
+
* Pins the contract so a future "harden the validator" pass doesn't
|
|
11
|
+
* silently re-introduce the AI-facing schema-rejection that v0.6.2
|
|
12
|
+
* fixed.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { describe, expect, it } from "bun:test";
|
|
16
|
+
|
|
17
|
+
import { addModuleToolInput, positionInputSchema } from "./ai-tools.js";
|
|
18
|
+
|
|
19
|
+
const UUID = "11111111-1111-4111-8111-aaaaaaaaaaaa";
|
|
20
|
+
|
|
21
|
+
describe("positionInputSchema (v0.6.2)", () => {
|
|
22
|
+
it("accepts literal 'top' / 'bottom'", () => {
|
|
23
|
+
expect(positionInputSchema.safeParse("top").success).toBe(true);
|
|
24
|
+
expect(positionInputSchema.safeParse("bottom").success).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it("accepts bare integers (0..1000)", () => {
|
|
28
|
+
expect(positionInputSchema.safeParse(0).success).toBe(true);
|
|
29
|
+
expect(positionInputSchema.safeParse(42).success).toBe(true);
|
|
30
|
+
expect(positionInputSchema.safeParse(1000).success).toBe(true);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("coerces digit-only strings to integers (the v0.6.2 ergonomic fix)", () => {
|
|
34
|
+
const r0 = positionInputSchema.safeParse("0");
|
|
35
|
+
expect(r0.success).toBe(true);
|
|
36
|
+
if (r0.success) expect(r0.data).toBe(0);
|
|
37
|
+
|
|
38
|
+
const r42 = positionInputSchema.safeParse("42");
|
|
39
|
+
expect(r42.success).toBe(true);
|
|
40
|
+
if (r42.success) expect(r42.data).toBe(42);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("rejects non-numeric strings (not 'top'/'bottom')", () => {
|
|
44
|
+
expect(positionInputSchema.safeParse("middle").success).toBe(false);
|
|
45
|
+
expect(positionInputSchema.safeParse("abc").success).toBe(false);
|
|
46
|
+
expect(positionInputSchema.safeParse("").success).toBe(false);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("rejects negative + over-range integers", () => {
|
|
50
|
+
expect(positionInputSchema.safeParse(-1).success).toBe(false);
|
|
51
|
+
expect(positionInputSchema.safeParse(1001).success).toBe(false);
|
|
52
|
+
expect(positionInputSchema.safeParse("-1").success).toBe(false);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("rejects floats + scientific notation strings", () => {
|
|
56
|
+
expect(positionInputSchema.safeParse(0.5).success).toBe(false);
|
|
57
|
+
expect(positionInputSchema.safeParse("0.5").success).toBe(false);
|
|
58
|
+
expect(positionInputSchema.safeParse("1e2").success).toBe(false);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// issue #106 (step-13 round-6) — the model sometimes OVER-quotes the
|
|
62
|
+
// literal, emitting the JSON string `"\"bottom\""` (the value WITH its
|
|
63
|
+
// surrounding quote characters) rather than `bottom`. The outer
|
|
64
|
+
// stripSurroundingQuotes preprocess unwraps one layer of matching quotes so
|
|
65
|
+
// these normalize instead of failing with a bare `Invalid input`.
|
|
66
|
+
describe("over-quoted literals (issue #106 round-6)", () => {
|
|
67
|
+
it("accepts an over-quoted 'bottom' / 'top'", () => {
|
|
68
|
+
const rb = positionInputSchema.safeParse('"bottom"');
|
|
69
|
+
expect(rb.success).toBe(true);
|
|
70
|
+
if (rb.success) expect(rb.data).toBe("bottom");
|
|
71
|
+
|
|
72
|
+
const rt = positionInputSchema.safeParse('"top"');
|
|
73
|
+
expect(rt.success).toBe(true);
|
|
74
|
+
if (rt.success) expect(rt.data).toBe("top");
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it("accepts an over-quoted digit string and still coerces it to a number", () => {
|
|
78
|
+
const r = positionInputSchema.safeParse('"0"');
|
|
79
|
+
expect(r.success).toBe(true);
|
|
80
|
+
if (r.success) expect(r.data).toBe(0);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it("unwraps single-quoted literals too", () => {
|
|
84
|
+
const r = positionInputSchema.safeParse("'bottom'");
|
|
85
|
+
expect(r.success).toBe(true);
|
|
86
|
+
if (r.success) expect(r.data).toBe("bottom");
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it("still rejects garbage even when over-quoted (no silent fallback, §2)", () => {
|
|
90
|
+
expect(positionInputSchema.safeParse('"middle"').success).toBe(false);
|
|
91
|
+
expect(positionInputSchema.safeParse('"abc"').success).toBe(false);
|
|
92
|
+
// only ONE layer is stripped — a doubly-quoted value stays invalid
|
|
93
|
+
expect(positionInputSchema.safeParse('""bottom""').success).toBe(false);
|
|
94
|
+
expect(positionInputSchema.safeParse(null).success).toBe(false);
|
|
95
|
+
expect(positionInputSchema.safeParse(undefined).success).toBe(false);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it("propagates to addModuleToolInput (target='page')", () => {
|
|
100
|
+
const r = addModuleToolInput.safeParse({
|
|
101
|
+
target: "page",
|
|
102
|
+
targetRef: UUID,
|
|
103
|
+
blockName: "content",
|
|
104
|
+
position: "0", // the AI's typical mistake
|
|
105
|
+
displayName: "x",
|
|
106
|
+
html: "<p>x</p>",
|
|
107
|
+
});
|
|
108
|
+
expect(r.success).toBe(true);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("propagates to addModuleToolInput (target='template')", () => {
|
|
112
|
+
const r = addModuleToolInput.safeParse({
|
|
113
|
+
target: "template",
|
|
114
|
+
targetRef: UUID,
|
|
115
|
+
blockName: "content",
|
|
116
|
+
position: "3",
|
|
117
|
+
displayName: "x",
|
|
118
|
+
html: "<p>x</p>",
|
|
119
|
+
});
|
|
120
|
+
expect(r.success).toBe(true);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it("propagates to addModuleToolInput (target='layout')", () => {
|
|
124
|
+
const r = addModuleToolInput.safeParse({
|
|
125
|
+
target: "layout",
|
|
126
|
+
targetRef: "site-default",
|
|
127
|
+
blockName: "header",
|
|
128
|
+
position: "0",
|
|
129
|
+
displayName: "x",
|
|
130
|
+
html: "<p>x</p>",
|
|
131
|
+
});
|
|
132
|
+
expect(r.success).toBe(true);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
2
|
+
|
|
3
|
+
import { describe, expect, it } from "bun:test";
|
|
4
|
+
import {
|
|
5
|
+
chatPublishInput,
|
|
6
|
+
chatSendMessageInput,
|
|
7
|
+
editModuleToolInput,
|
|
8
|
+
siteMemoryProposeToolInput,
|
|
9
|
+
} from "./ai-tools.js";
|
|
10
|
+
|
|
11
|
+
const UUID = "11111111-1111-4111-8111-111111111111";
|
|
12
|
+
const UUID_2 = "22222222-2222-4222-8222-222222222222";
|
|
13
|
+
|
|
14
|
+
describe("editModuleToolInput", () => {
|
|
15
|
+
it("accepts a minimal valid edit", () => {
|
|
16
|
+
const r = editModuleToolInput.safeParse({ moduleId: UUID, html: "<p>x</p>" });
|
|
17
|
+
expect(r.success).toBe(true);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it("rejects unknown keys (.strict)", () => {
|
|
21
|
+
const r = editModuleToolInput.safeParse({
|
|
22
|
+
moduleId: UUID,
|
|
23
|
+
html: "<p>x</p>",
|
|
24
|
+
pageId: UUID_2,
|
|
25
|
+
});
|
|
26
|
+
expect(r.success).toBe(false);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it("rejects oversized html", () => {
|
|
30
|
+
const r = editModuleToolInput.safeParse({
|
|
31
|
+
moduleId: UUID,
|
|
32
|
+
html: "x".repeat(300_000),
|
|
33
|
+
});
|
|
34
|
+
expect(r.success).toBe(false);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
describe("siteMemoryProposeToolInput", () => {
|
|
39
|
+
it("accepts a valid proposal", () => {
|
|
40
|
+
const r = siteMemoryProposeToolInput.safeParse({
|
|
41
|
+
slot: "brand-voice",
|
|
42
|
+
body: "terse",
|
|
43
|
+
rationale: "user repeatedly asks for brevity",
|
|
44
|
+
});
|
|
45
|
+
expect(r.success).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("rejects an unknown slot", () => {
|
|
49
|
+
const r = siteMemoryProposeToolInput.safeParse({
|
|
50
|
+
slot: "made-up-slot",
|
|
51
|
+
body: "x",
|
|
52
|
+
rationale: "y",
|
|
53
|
+
});
|
|
54
|
+
expect(r.success).toBe(false);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
describe("chatSendMessageInput", () => {
|
|
59
|
+
it("accepts a message with chips", () => {
|
|
60
|
+
const r = chatSendMessageInput.safeParse({
|
|
61
|
+
chatSessionId: UUID,
|
|
62
|
+
content: "make these green",
|
|
63
|
+
chips: [{ moduleId: UUID_2, selector: "#hero h1", label: "Hero headline" }],
|
|
64
|
+
});
|
|
65
|
+
expect(r.success).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it("defaults chips to empty array when omitted", () => {
|
|
69
|
+
const r = chatSendMessageInput.safeParse({ chatSessionId: UUID, content: "hi" });
|
|
70
|
+
expect(r.success).toBe(true);
|
|
71
|
+
if (!r.success) return;
|
|
72
|
+
expect(r.data.chips).toEqual([]);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
describe("chatPublishInput", () => {
|
|
77
|
+
it("requires uuid", () => {
|
|
78
|
+
expect(chatPublishInput.safeParse({ chatSessionId: UUID }).success).toBe(true);
|
|
79
|
+
expect(chatPublishInput.safeParse({ chatSessionId: "not-uuid" }).success).toBe(false);
|
|
80
|
+
});
|
|
81
|
+
});
|