@wootsup/yt-builder-mcp 1.12.0 → 2.1.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/README.md +139 -40
- package/bin/node-floor.d.ts +28 -0
- package/bin/node-floor.js +150 -0
- package/bin/yt-builder-mcp.js +51 -10
- package/dist/auth.d.ts +3 -121
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +44 -174
- package/dist/auth.js.map +1 -1
- package/dist/catalog/build-catalog.d.ts +4 -49
- package/dist/catalog/build-catalog.d.ts.map +1 -1
- package/dist/catalog/build-catalog.js +15 -126
- package/dist/catalog/build-catalog.js.map +1 -1
- package/dist/catalog/json-schema.d.ts +3 -0
- package/dist/catalog/json-schema.d.ts.map +1 -0
- package/dist/catalog/json-schema.js +68 -0
- package/dist/catalog/json-schema.js.map +1 -0
- package/dist/catalog/output-shapes.d.ts +6 -0
- package/dist/catalog/output-shapes.d.ts.map +1 -0
- package/dist/catalog/output-shapes.js +89 -0
- package/dist/catalog/output-shapes.js.map +1 -0
- package/dist/catalog/tool-catalog-markdown.d.ts +1 -37
- package/dist/catalog/tool-catalog-markdown.d.ts.map +1 -1
- package/dist/catalog/tool-catalog-markdown.js +8 -52
- package/dist/catalog/tool-catalog-markdown.js.map +1 -1
- package/dist/cli/doctor-command.d.ts +2 -7
- package/dist/cli/doctor-command.d.ts.map +1 -1
- package/dist/cli/doctor-command.js +21 -62
- package/dist/cli/doctor-command.js.map +1 -1
- package/dist/cli/invocation-decision.d.ts +4 -52
- package/dist/cli/invocation-decision.d.ts.map +1 -1
- package/dist/cli/invocation-decision.js +46 -55
- package/dist/cli/invocation-decision.js.map +1 -1
- package/dist/client.d.ts +3 -107
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +34 -115
- package/dist/client.js.map +1 -1
- package/dist/clients/claude-code.d.ts +0 -15
- package/dist/clients/claude-code.d.ts.map +1 -1
- package/dist/clients/claude-code.js +1 -23
- package/dist/clients/claude-code.js.map +1 -1
- package/dist/clients/claude-desktop.d.ts +0 -16
- package/dist/clients/claude-desktop.d.ts.map +1 -1
- package/dist/clients/claude-desktop.js +1 -19
- package/dist/clients/claude-desktop.js.map +1 -1
- package/dist/clients/cline.d.ts +0 -23
- package/dist/clients/cline.d.ts.map +1 -1
- package/dist/clients/cline.js +1 -34
- package/dist/clients/cline.js.map +1 -1
- package/dist/clients/codex-cli.d.ts +0 -39
- package/dist/clients/codex-cli.d.ts.map +1 -1
- package/dist/clients/codex-cli.js +12 -147
- package/dist/clients/codex-cli.js.map +1 -1
- package/dist/clients/config-file.d.ts +15 -0
- package/dist/clients/config-file.d.ts.map +1 -0
- package/dist/clients/config-file.js +86 -0
- package/dist/clients/config-file.js.map +1 -0
- package/dist/clients/continue.d.ts +0 -10
- package/dist/clients/continue.d.ts.map +1 -1
- package/dist/clients/continue.js +3 -30
- package/dist/clients/continue.js.map +1 -1
- package/dist/clients/cursor.d.ts +0 -9
- package/dist/clients/cursor.d.ts.map +1 -1
- package/dist/clients/cursor.js +1 -12
- package/dist/clients/cursor.js.map +1 -1
- package/dist/clients/gemini-cli.d.ts +0 -15
- package/dist/clients/gemini-cli.d.ts.map +1 -1
- package/dist/clients/gemini-cli.js +1 -18
- package/dist/clients/gemini-cli.js.map +1 -1
- package/dist/clients/home.d.ts +0 -12
- package/dist/clients/home.d.ts.map +1 -1
- package/dist/clients/home.js +0 -12
- package/dist/clients/home.js.map +1 -1
- package/dist/clients/index.d.ts +2 -153
- package/dist/clients/index.d.ts.map +1 -1
- package/dist/clients/index.js +3 -153
- package/dist/clients/index.js.map +1 -1
- package/dist/clients/roo-code.d.ts +0 -20
- package/dist/clients/roo-code.d.ts.map +1 -1
- package/dist/clients/roo-code.js +1 -23
- package/dist/clients/roo-code.js.map +1 -1
- package/dist/clients/zed.d.ts +0 -9
- package/dist/clients/zed.d.ts.map +1 -1
- package/dist/clients/zed.js +1 -19
- package/dist/clients/zed.js.map +1 -1
- package/dist/compat-floor.d.ts +35 -0
- package/dist/compat-floor.d.ts.map +1 -0
- package/dist/compat-floor.js +84 -0
- package/dist/compat-floor.js.map +1 -0
- package/dist/compat-probe.d.ts +6 -0
- package/dist/compat-probe.d.ts.map +1 -0
- package/dist/compat-probe.js +20 -0
- package/dist/compat-probe.js.map +1 -0
- package/dist/diagnostics/ca-reexec.d.ts +0 -30
- package/dist/diagnostics/ca-reexec.d.ts.map +1 -1
- package/dist/diagnostics/ca-reexec.js +0 -62
- package/dist/diagnostics/ca-reexec.js.map +1 -1
- package/dist/diagnostics/ca-trust.d.ts +0 -22
- package/dist/diagnostics/ca-trust.d.ts.map +1 -1
- package/dist/diagnostics/ca-trust.js +3 -42
- package/dist/diagnostics/ca-trust.js.map +1 -1
- package/dist/diagnostics/diagnose-network-error.d.ts +1 -38
- package/dist/diagnostics/diagnose-network-error.d.ts.map +1 -1
- package/dist/diagnostics/diagnose-network-error.js +27 -38
- package/dist/diagnostics/diagnose-network-error.js.map +1 -1
- package/dist/diagnostics/doctor.d.ts +1 -85
- package/dist/diagnostics/doctor.d.ts.map +1 -1
- package/dist/diagnostics/doctor.js +7 -92
- package/dist/diagnostics/doctor.js.map +1 -1
- package/dist/diagnostics/startup-self-probe.d.ts +3 -25
- package/dist/diagnostics/startup-self-probe.d.ts.map +1 -1
- package/dist/diagnostics/startup-self-probe.js +11 -48
- package/dist/diagnostics/startup-self-probe.js.map +1 -1
- package/dist/errors/hints.d.ts +0 -44
- package/dist/errors/hints.d.ts.map +1 -1
- package/dist/errors/hints.js +1 -33
- package/dist/errors/hints.js.map +1 -1
- package/dist/errors/mask.d.ts +0 -31
- package/dist/errors/mask.d.ts.map +1 -1
- package/dist/errors/mask.js +0 -32
- package/dist/errors/mask.js.map +1 -1
- package/dist/errors/redact-credentials.d.ts +2 -0
- package/dist/errors/redact-credentials.d.ts.map +1 -0
- package/dist/errors/redact-credentials.js +13 -0
- package/dist/errors/redact-credentials.js.map +1 -0
- package/dist/errors/sanitize.d.ts +0 -29
- package/dist/errors/sanitize.d.ts.map +1 -1
- package/dist/errors/sanitize.js +0 -40
- package/dist/errors/sanitize.js.map +1 -1
- package/dist/errors.d.ts +6 -17
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +16 -21
- package/dist/errors.js.map +1 -1
- package/dist/gateway/advanced-read-tool.d.ts +0 -32
- package/dist/gateway/advanced-read-tool.d.ts.map +1 -1
- package/dist/gateway/advanced-read-tool.js +43 -111
- package/dist/gateway/advanced-read-tool.js.map +1 -1
- package/dist/gateway/advanced-tool/discovery.d.ts +1 -12
- package/dist/gateway/advanced-tool/discovery.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/discovery.js +15 -24
- package/dist/gateway/advanced-tool/discovery.js.map +1 -1
- package/dist/gateway/advanced-tool/domains.d.ts +7 -66
- package/dist/gateway/advanced-tool/domains.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/domains.js +36 -80
- package/dist/gateway/advanced-tool/domains.js.map +1 -1
- package/dist/gateway/advanced-tool/execute.d.ts +0 -25
- package/dist/gateway/advanced-tool/execute.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/execute.js +13 -49
- package/dist/gateway/advanced-tool/execute.js.map +1 -1
- package/dist/gateway/advanced-tool/index.d.ts +1 -32
- package/dist/gateway/advanced-tool/index.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/index.js +1 -35
- package/dist/gateway/advanced-tool/index.js.map +1 -1
- package/dist/gateway/advanced-tool/register.d.ts +0 -14
- package/dist/gateway/advanced-tool/register.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/register.js +22 -58
- package/dist/gateway/advanced-tool/register.js.map +1 -1
- package/dist/gateway/advanced-tool.d.ts +0 -11
- package/dist/gateway/advanced-tool.d.ts.map +1 -1
- package/dist/gateway/advanced-tool.js +0 -11
- package/dist/gateway/advanced-tool.js.map +1 -1
- package/dist/gateway/capturing-server.d.ts +3 -88
- package/dist/gateway/capturing-server.d.ts.map +1 -1
- package/dist/gateway/capturing-server.js +0 -77
- package/dist/gateway/capturing-server.js.map +1 -1
- package/dist/gateway/essentials.d.ts +1 -63
- package/dist/gateway/essentials.d.ts.map +1 -1
- package/dist/gateway/essentials.js +9 -178
- package/dist/gateway/essentials.js.map +1 -1
- package/dist/gateway/test-support.d.ts +0 -28
- package/dist/gateway/test-support.d.ts.map +1 -1
- package/dist/gateway/test-support.js +0 -29
- package/dist/gateway/test-support.js.map +1 -1
- package/dist/health-response.d.ts +2 -0
- package/dist/health-response.d.ts.map +1 -0
- package/dist/health-response.js +7 -0
- package/dist/health-response.js.map +1 -0
- package/dist/icon-data.js +0 -3
- package/dist/icon-data.js.map +1 -1
- package/dist/index.d.ts +7 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +46 -130
- package/dist/index.js.map +1 -1
- package/dist/install-skill.d.ts +0 -44
- package/dist/install-skill.d.ts.map +1 -1
- package/dist/install-skill.js +8 -48
- package/dist/install-skill.js.map +1 -1
- package/dist/net/extra-headers.d.ts +0 -58
- package/dist/net/extra-headers.d.ts.map +1 -1
- package/dist/net/extra-headers.js +0 -67
- package/dist/net/extra-headers.js.map +1 -1
- package/dist/net/internal-host.d.ts +0 -31
- package/dist/net/internal-host.d.ts.map +1 -1
- package/dist/net/internal-host.js +7 -65
- package/dist/net/internal-host.js.map +1 -1
- package/dist/net/proxy-dispatcher.d.ts +0 -37
- package/dist/net/proxy-dispatcher.d.ts.map +1 -1
- package/dist/net/proxy-dispatcher.js +0 -40
- package/dist/net/proxy-dispatcher.js.map +1 -1
- package/dist/net/public-fetch.d.ts +53 -0
- package/dist/net/public-fetch.d.ts.map +1 -0
- package/dist/net/public-fetch.js +143 -0
- package/dist/net/public-fetch.js.map +1 -0
- package/dist/net/public-page-report.d.ts +26 -0
- package/dist/net/public-page-report.d.ts.map +1 -0
- package/dist/net/public-page-report.js +145 -0
- package/dist/net/public-page-report.js.map +1 -0
- package/dist/net/redirect-safe-fetch.d.ts +14 -0
- package/dist/net/redirect-safe-fetch.d.ts.map +1 -0
- package/dist/net/redirect-safe-fetch.js +61 -0
- package/dist/net/redirect-safe-fetch.js.map +1 -0
- package/dist/net/session-recovery-fetch.d.ts +7 -0
- package/dist/net/session-recovery-fetch.d.ts.map +1 -0
- package/dist/net/session-recovery-fetch.js +139 -0
- package/dist/net/session-recovery-fetch.js.map +1 -0
- package/dist/net/site-basic-auth.d.ts +1 -59
- package/dist/net/site-basic-auth.d.ts.map +1 -1
- package/dist/net/site-basic-auth.js +5 -94
- package/dist/net/site-basic-auth.js.map +1 -1
- package/dist/package-version.d.ts +2 -0
- package/dist/package-version.d.ts.map +1 -0
- package/dist/package-version.js +15 -0
- package/dist/package-version.js.map +1 -0
- package/dist/platform/detect.d.ts +0 -54
- package/dist/platform/detect.d.ts.map +1 -1
- package/dist/platform/detect.js +0 -53
- package/dist/platform/detect.js.map +1 -1
- package/dist/platform/index.d.ts +0 -100
- package/dist/platform/index.d.ts.map +1 -1
- package/dist/platform/index.js +0 -106
- package/dist/platform/index.js.map +1 -1
- package/dist/platform/joomla.d.ts +0 -35
- package/dist/platform/joomla.d.ts.map +1 -1
- package/dist/platform/joomla.js +0 -35
- package/dist/platform/joomla.js.map +1 -1
- package/dist/product-name.d.ts +2 -0
- package/dist/product-name.d.ts.map +1 -0
- package/dist/product-name.js +2 -0
- package/dist/product-name.js.map +1 -0
- package/dist/proxy/bridge.d.ts +36 -76
- package/dist/proxy/bridge.d.ts.map +1 -1
- package/dist/proxy/bridge.js +443 -136
- package/dist/proxy/bridge.js.map +1 -1
- package/dist/proxy/confirm-elicitation.d.ts +22 -0
- package/dist/proxy/confirm-elicitation.d.ts.map +1 -0
- package/dist/proxy/confirm-elicitation.js +170 -0
- package/dist/proxy/confirm-elicitation.js.map +1 -0
- package/dist/proxy/confirm-question-contract.d.ts +6 -0
- package/dist/proxy/confirm-question-contract.d.ts.map +1 -0
- package/dist/proxy/confirm-question-contract.js +9 -0
- package/dist/proxy/confirm-question-contract.js.map +1 -0
- package/dist/proxy/confirm-question.d.ts +2 -0
- package/dist/proxy/confirm-question.d.ts.map +1 -0
- package/dist/proxy/confirm-question.js +125 -0
- package/dist/proxy/confirm-question.js.map +1 -0
- package/dist/proxy/instructions.d.ts +4 -0
- package/dist/proxy/instructions.d.ts.map +1 -0
- package/dist/proxy/instructions.js +12 -0
- package/dist/proxy/instructions.js.map +1 -0
- package/dist/proxy/mode.d.ts +14 -9
- package/dist/proxy/mode.d.ts.map +1 -1
- package/dist/proxy/mode.js +58 -34
- package/dist/proxy/mode.js.map +1 -1
- package/dist/proxy/multi-site.d.ts +42 -0
- package/dist/proxy/multi-site.d.ts.map +1 -0
- package/dist/proxy/multi-site.js +134 -0
- package/dist/proxy/multi-site.js.map +1 -0
- package/dist/proxy/request-headers.d.ts +9 -0
- package/dist/proxy/request-headers.d.ts.map +1 -0
- package/dist/proxy/request-headers.js +17 -0
- package/dist/proxy/request-headers.js.map +1 -0
- package/dist/proxy/shadow-tools.d.ts +9 -0
- package/dist/proxy/shadow-tools.d.ts.map +1 -0
- package/dist/proxy/shadow-tools.js +42 -0
- package/dist/proxy/shadow-tools.js.map +1 -0
- package/dist/proxy/tools-list-cap.d.ts +7 -0
- package/dist/proxy/tools-list-cap.d.ts.map +1 -0
- package/dist/proxy/tools-list-cap.js +14 -0
- package/dist/proxy/tools-list-cap.js.map +1 -0
- package/dist/proxy/transport-uncertainty.d.ts +2 -0
- package/dist/proxy/transport-uncertainty.d.ts.map +1 -0
- package/dist/proxy/transport-uncertainty.js +8 -0
- package/dist/proxy/transport-uncertainty.js.map +1 -0
- package/dist/proxy/upstream-error.d.ts +7 -0
- package/dist/proxy/upstream-error.d.ts.map +1 -0
- package/dist/proxy/upstream-error.js +35 -0
- package/dist/proxy/upstream-error.js.map +1 -0
- package/dist/proxy/wire-dialect.d.ts +5 -0
- package/dist/proxy/wire-dialect.d.ts.map +1 -0
- package/dist/proxy/wire-dialect.js +33 -0
- package/dist/proxy/wire-dialect.js.map +1 -0
- package/dist/server.d.ts +14 -82
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +109 -204
- package/dist/server.js.map +1 -1
- package/dist/setup/banner-color.d.ts +13 -0
- package/dist/setup/banner-color.d.ts.map +1 -0
- package/dist/setup/banner-color.js +93 -0
- package/dist/setup/banner-color.js.map +1 -0
- package/dist/setup/banner.d.ts +22 -0
- package/dist/setup/banner.d.ts.map +1 -0
- package/dist/setup/banner.js +120 -0
- package/dist/setup/banner.js.map +1 -0
- package/dist/setup/ca-recovery.d.ts +20 -0
- package/dist/setup/ca-recovery.d.ts.map +1 -0
- package/dist/setup/ca-recovery.js +92 -0
- package/dist/setup/ca-recovery.js.map +1 -0
- package/dist/setup/closing.d.ts +15 -0
- package/dist/setup/closing.d.ts.map +1 -0
- package/dist/setup/closing.js +43 -0
- package/dist/setup/closing.js.map +1 -0
- package/dist/setup/corporate-ca.d.ts +16 -0
- package/dist/setup/corporate-ca.d.ts.map +1 -0
- package/dist/setup/corporate-ca.js +32 -0
- package/dist/setup/corporate-ca.js.map +1 -0
- package/dist/setup/host-platform.d.ts +8 -0
- package/dist/setup/host-platform.d.ts.map +1 -0
- package/dist/setup/host-platform.js +21 -0
- package/dist/setup/host-platform.js.map +1 -0
- package/dist/setup/install-configs.d.ts +18 -0
- package/dist/setup/install-configs.d.ts.map +1 -0
- package/dist/setup/install-configs.js +95 -0
- package/dist/setup/install-configs.js.map +1 -0
- package/dist/setup/multi-site-loop.d.ts +14 -0
- package/dist/setup/multi-site-loop.d.ts.map +1 -0
- package/dist/setup/multi-site-loop.js +20 -0
- package/dist/setup/multi-site-loop.js.map +1 -0
- package/dist/setup/phases.d.ts +18 -0
- package/dist/setup/phases.d.ts.map +1 -0
- package/dist/setup/phases.js +55 -0
- package/dist/setup/phases.js.map +1 -0
- package/dist/setup/registry-remedy.d.ts +12 -0
- package/dist/setup/registry-remedy.d.ts.map +1 -0
- package/dist/setup/registry-remedy.js +37 -0
- package/dist/setup/registry-remedy.js.map +1 -0
- package/dist/setup/resume.d.ts +28 -0
- package/dist/setup/resume.d.ts.map +1 -0
- package/dist/setup/resume.js +99 -0
- package/dist/setup/resume.js.map +1 -0
- package/dist/setup-ca-env.d.ts +0 -30
- package/dist/setup-ca-env.d.ts.map +1 -1
- package/dist/setup-ca-env.js +0 -28
- package/dist/setup-ca-env.js.map +1 -1
- package/dist/setup-ca-reprobe.d.ts +0 -25
- package/dist/setup-ca-reprobe.d.ts.map +1 -1
- package/dist/setup-ca-reprobe.js +0 -34
- package/dist/setup-ca-reprobe.js.map +1 -1
- package/dist/setup-cli-confirm.d.ts +0 -34
- package/dist/setup-cli-confirm.d.ts.map +1 -1
- package/dist/setup-cli-confirm.js +0 -36
- package/dist/setup-cli-confirm.js.map +1 -1
- package/dist/setup-cli.d.ts +6 -167
- package/dist/setup-cli.d.ts.map +1 -1
- package/dist/setup-cli.js +165 -177
- package/dist/setup-cli.js.map +1 -1
- package/dist/setup-npx-spec.d.ts +0 -36
- package/dist/setup-npx-spec.d.ts.map +1 -1
- package/dist/setup-npx-spec.js +0 -38
- package/dist/setup-npx-spec.js.map +1 -1
- package/dist/setup-prompts.d.ts +5 -70
- package/dist/setup-prompts.d.ts.map +1 -1
- package/dist/setup-prompts.js +67 -107
- package/dist/setup-prompts.js.map +1 -1
- package/dist/setup-token.d.ts +0 -34
- package/dist/setup-token.d.ts.map +1 -1
- package/dist/setup-token.js +0 -40
- package/dist/setup-token.js.map +1 -1
- package/dist/setup-wizard-defaults.d.ts +2 -37
- package/dist/setup-wizard-defaults.d.ts.map +1 -1
- package/dist/setup-wizard-defaults.js +28 -93
- package/dist/setup-wizard-defaults.js.map +1 -1
- package/dist/setup-wizard-handshake.d.ts +1 -19
- package/dist/setup-wizard-handshake.d.ts.map +1 -1
- package/dist/setup-wizard-handshake.js +8 -45
- package/dist/setup-wizard-handshake.js.map +1 -1
- package/dist/setup-wizard-types.d.ts +18 -217
- package/dist/setup-wizard-types.d.ts.map +1 -1
- package/dist/setup-wizard-types.js +0 -9
- package/dist/setup-wizard-types.js.map +1 -1
- package/dist/setup-wizard-write-types.d.ts +19 -0
- package/dist/setup-wizard-write-types.d.ts.map +1 -0
- package/dist/setup-wizard-write-types.js +2 -0
- package/dist/setup-wizard-write-types.js.map +1 -0
- package/dist/setup-wizard.d.ts +0 -28
- package/dist/setup-wizard.d.ts.map +1 -1
- package/dist/setup-wizard.js +167 -412
- package/dist/setup-wizard.js.map +1 -1
- package/dist/setup.d.ts +0 -15
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +0 -15
- package/dist/setup.js.map +1 -1
- package/dist/sites/bootstrap.d.ts +0 -38
- package/dist/sites/bootstrap.d.ts.map +1 -1
- package/dist/sites/bootstrap.js +0 -44
- package/dist/sites/bootstrap.js.map +1 -1
- package/dist/sites/cli/add-site.d.ts +0 -76
- package/dist/sites/cli/add-site.d.ts.map +1 -1
- package/dist/sites/cli/add-site.js +0 -71
- package/dist/sites/cli/add-site.js.map +1 -1
- package/dist/sites/cli/list-sites.d.ts +0 -31
- package/dist/sites/cli/list-sites.d.ts.map +1 -1
- package/dist/sites/cli/list-sites.js +0 -45
- package/dist/sites/cli/list-sites.js.map +1 -1
- package/dist/sites/cli/remove-site.d.ts +0 -37
- package/dist/sites/cli/remove-site.d.ts.map +1 -1
- package/dist/sites/cli/remove-site.js +0 -37
- package/dist/sites/cli/remove-site.js.map +1 -1
- package/dist/sites/cli/set-default.d.ts +0 -25
- package/dist/sites/cli/set-default.d.ts.map +1 -1
- package/dist/sites/cli/set-default.js +0 -22
- package/dist/sites/cli/set-default.js.map +1 -1
- package/dist/sites/cli/test-site.d.ts +0 -44
- package/dist/sites/cli/test-site.d.ts.map +1 -1
- package/dist/sites/cli/test-site.js +0 -39
- package/dist/sites/cli/test-site.js.map +1 -1
- package/dist/sites/client-pool.d.ts +11 -164
- package/dist/sites/client-pool.d.ts.map +1 -1
- package/dist/sites/client-pool.js +73 -194
- package/dist/sites/client-pool.js.map +1 -1
- package/dist/sites/config-problem.d.ts +2 -0
- package/dist/sites/config-problem.d.ts.map +1 -0
- package/dist/sites/config-problem.js +13 -0
- package/dist/sites/config-problem.js.map +1 -0
- package/dist/sites/env-bridge.d.ts +0 -69
- package/dist/sites/env-bridge.d.ts.map +1 -1
- package/dist/sites/env-bridge.js +2 -71
- package/dist/sites/env-bridge.js.map +1 -1
- package/dist/sites/op-inject.d.ts +23 -0
- package/dist/sites/op-inject.d.ts.map +1 -0
- package/dist/sites/op-inject.js +131 -0
- package/dist/sites/op-inject.js.map +1 -0
- package/dist/sites/paths.d.ts +0 -19
- package/dist/sites/paths.d.ts.map +1 -1
- package/dist/sites/paths.js +0 -19
- package/dist/sites/paths.js.map +1 -1
- package/dist/sites/probe.d.ts +1 -47
- package/dist/sites/probe.d.ts.map +1 -1
- package/dist/sites/probe.js +4 -46
- package/dist/sites/probe.js.map +1 -1
- package/dist/sites/registry.d.ts +4 -135
- package/dist/sites/registry.d.ts.map +1 -1
- package/dist/sites/registry.js +4 -98
- package/dist/sites/registry.js.map +1 -1
- package/dist/sites/schema.d.ts +3 -51
- package/dist/sites/schema.d.ts.map +1 -1
- package/dist/sites/schema.js +6 -52
- package/dist/sites/schema.js.map +1 -1
- package/dist/sites/secret-resolver.d.ts +6 -76
- package/dist/sites/secret-resolver.d.ts.map +1 -1
- package/dist/sites/secret-resolver.js +39 -104
- package/dist/sites/secret-resolver.js.map +1 -1
- package/dist/sites/store.d.ts +12 -69
- package/dist/sites/store.d.ts.map +1 -1
- package/dist/sites/store.js +37 -86
- package/dist/sites/store.js.map +1 -1
- package/dist/sites/substituted-registry.d.ts +11 -0
- package/dist/sites/substituted-registry.d.ts.map +1 -0
- package/dist/sites/substituted-registry.js +13 -0
- package/dist/sites/substituted-registry.js.map +1 -0
- package/dist/sites/tools/fetch-public-url.d.ts +4 -0
- package/dist/sites/tools/fetch-public-url.d.ts.map +1 -0
- package/dist/sites/tools/fetch-public-url.js +231 -0
- package/dist/sites/tools/fetch-public-url.js.map +1 -0
- package/dist/sites/tools/index.d.ts +2 -26
- package/dist/sites/tools/index.d.ts.map +1 -1
- package/dist/sites/tools/index.js +5 -28
- package/dist/sites/tools/index.js.map +1 -1
- package/dist/sites/tools/sites-list.d.ts +3 -47
- package/dist/sites/tools/sites-list.d.ts.map +1 -1
- package/dist/sites/tools/sites-list.js +65 -79
- package/dist/sites/tools/sites-list.js.map +1 -1
- package/dist/sites/tools/sites-overview.d.ts +4 -0
- package/dist/sites/tools/sites-overview.d.ts.map +1 -0
- package/dist/sites/tools/sites-overview.js +209 -0
- package/dist/sites/tools/sites-overview.js.map +1 -0
- package/dist/sites/tools/sites-test.d.ts +2 -45
- package/dist/sites/tools/sites-test.d.ts.map +1 -1
- package/dist/sites/tools/sites-test.js +2 -56
- package/dist/sites/tools/sites-test.js.map +1 -1
- package/dist/sites/tools/use-site.d.ts +2 -45
- package/dist/sites/tools/use-site.d.ts.map +1 -1
- package/dist/sites/tools/use-site.js +31 -79
- package/dist/sites/tools/use-site.js.map +1 -1
- package/dist/sites/unknown-name-result.d.ts +10 -0
- package/dist/sites/unknown-name-result.d.ts.map +1 -0
- package/dist/sites/unknown-name-result.js +13 -0
- package/dist/sites/unknown-name-result.js.map +1 -0
- package/dist/skill-instructions.d.ts +7 -0
- package/dist/skill-instructions.d.ts.map +1 -0
- package/dist/skill-instructions.js +85 -0
- package/dist/skill-instructions.js.map +1 -0
- package/dist/skill-loader.d.ts +1 -103
- package/dist/skill-loader.d.ts.map +1 -1
- package/dist/skill-loader.js +6 -143
- package/dist/skill-loader.js.map +1 -1
- package/dist/skill-manifest.d.ts +0 -20
- package/dist/skill-manifest.d.ts.map +1 -1
- package/dist/skill-manifest.js +1 -21
- package/dist/skill-manifest.js.map +1 -1
- package/dist/skill-topics.d.ts +19 -0
- package/dist/skill-topics.d.ts.map +1 -0
- package/dist/skill-topics.js +181 -0
- package/dist/skill-topics.js.map +1 -0
- package/dist/tools/active-site.d.ts +16 -0
- package/dist/tools/active-site.d.ts.map +1 -0
- package/dist/tools/active-site.js +55 -0
- package/dist/tools/active-site.js.map +1 -0
- package/dist/tools/bind-guidance.d.ts +2 -72
- package/dist/tools/bind-guidance.d.ts.map +1 -1
- package/dist/tools/bind-guidance.js +2 -72
- package/dist/tools/bind-guidance.js.map +1 -1
- package/dist/tools/budgeted-table.d.ts +14 -19
- package/dist/tools/budgeted-table.d.ts.map +1 -1
- package/dist/tools/budgeted-table.js +171 -105
- package/dist/tools/budgeted-table.js.map +1 -1
- package/dist/tools/elements/bind-output-schema.d.ts +69 -0
- package/dist/tools/elements/bind-output-schema.d.ts.map +1 -0
- package/dist/tools/elements/bind-output-schema.js +64 -0
- package/dist/tools/elements/bind-output-schema.js.map +1 -0
- package/dist/tools/elements/builders.d.ts +1 -22
- package/dist/tools/elements/builders.d.ts.map +1 -1
- package/dist/tools/elements/builders.js +147 -133
- package/dist/tools/elements/builders.js.map +1 -1
- package/dist/tools/elements/index.d.ts +0 -26
- package/dist/tools/elements/index.d.ts.map +1 -1
- package/dist/tools/elements/index.js +0 -25
- package/dist/tools/elements/index.js.map +1 -1
- package/dist/tools/elements/read-output-schemas.d.ts +121 -0
- package/dist/tools/elements/read-output-schemas.d.ts.map +1 -0
- package/dist/tools/elements/read-output-schemas.js +225 -0
- package/dist/tools/elements/read-output-schemas.js.map +1 -0
- package/dist/tools/elements/write-output-schemas.d.ts +185 -0
- package/dist/tools/elements/write-output-schemas.d.ts.map +1 -0
- package/dist/tools/elements/write-output-schemas.js +98 -0
- package/dist/tools/elements/write-output-schemas.js.map +1 -0
- package/dist/tools/elements.d.ts +0 -11
- package/dist/tools/elements.d.ts.map +1 -1
- package/dist/tools/elements.js +0 -11
- package/dist/tools/elements.js.map +1 -1
- package/dist/tools/format/health-format.d.ts +26 -43
- package/dist/tools/format/health-format.d.ts.map +1 -1
- package/dist/tools/format/health-format.js +32 -63
- package/dist/tools/format/health-format.js.map +1 -1
- package/dist/tools/format/inspection-format.d.ts +2 -54
- package/dist/tools/format/inspection-format.d.ts.map +1 -1
- package/dist/tools/format/inspection-format.js +33 -119
- package/dist/tools/format/inspection-format.js.map +1 -1
- package/dist/tools/format/pages-format.d.ts +32 -69
- package/dist/tools/format/pages-format.d.ts.map +1 -1
- package/dist/tools/format/pages-format.js +114 -139
- package/dist/tools/format/pages-format.js.map +1 -1
- package/dist/tools/format/sources-format.d.ts +5 -39
- package/dist/tools/format/sources-format.d.ts.map +1 -1
- package/dist/tools/format/sources-format.js +57 -87
- package/dist/tools/format/sources-format.js.map +1 -1
- package/dist/tools/health-output-schemas.d.ts +84 -0
- package/dist/tools/health-output-schemas.d.ts.map +1 -0
- package/dist/tools/health-output-schemas.js +132 -0
- package/dist/tools/health-output-schemas.js.map +1 -0
- package/dist/tools/health.d.ts +2 -20
- package/dist/tools/health.d.ts.map +1 -1
- package/dist/tools/health.js +47 -233
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/index.d.ts +1 -26
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +12 -39
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inspection.d.ts +4 -34
- package/dist/tools/inspection.d.ts.map +1 -1
- package/dist/tools/inspection.js +164 -536
- package/dist/tools/inspection.js.map +1 -1
- package/dist/tools/library.d.ts +115 -127
- package/dist/tools/library.d.ts.map +1 -1
- package/dist/tools/library.js +707 -455
- package/dist/tools/library.js.map +1 -1
- package/dist/tools/local-content/builders.d.ts +1 -17
- package/dist/tools/local-content/builders.d.ts.map +1 -1
- package/dist/tools/local-content/builders.js +103 -46
- package/dist/tools/local-content/builders.js.map +1 -1
- package/dist/tools/local-content/index.d.ts +0 -15
- package/dist/tools/local-content/index.d.ts.map +1 -1
- package/dist/tools/local-content/index.js +0 -14
- package/dist/tools/local-content/index.js.map +1 -1
- package/dist/tools/local-content/schemas.d.ts +31 -47
- package/dist/tools/local-content/schemas.d.ts.map +1 -1
- package/dist/tools/local-content/schemas.js +33 -62
- package/dist/tools/local-content/schemas.js.map +1 -1
- package/dist/tools/modules/builders.d.ts +4 -0
- package/dist/tools/modules/builders.d.ts.map +1 -0
- package/dist/tools/modules/builders.js +58 -0
- package/dist/tools/modules/builders.js.map +1 -0
- package/dist/tools/modules/index.d.ts +2 -0
- package/dist/tools/modules/index.d.ts.map +1 -0
- package/dist/tools/modules/index.js +2 -0
- package/dist/tools/modules/index.js.map +1 -0
- package/dist/tools/modules/module-id-schema.d.ts +4 -0
- package/dist/tools/modules/module-id-schema.d.ts.map +1 -0
- package/dist/tools/modules/module-id-schema.js +14 -0
- package/dist/tools/modules/module-id-schema.js.map +1 -0
- package/dist/tools/modules/module-type-fields.d.ts +10 -0
- package/dist/tools/modules/module-type-fields.d.ts.map +1 -0
- package/dist/tools/modules/module-type-fields.js +34 -0
- package/dist/tools/modules/module-type-fields.js.map +1 -0
- package/dist/tools/modules/modules-create.d.ts +59 -0
- package/dist/tools/modules/modules-create.d.ts.map +1 -0
- package/dist/tools/modules/modules-create.js +154 -0
- package/dist/tools/modules/modules-create.js.map +1 -0
- package/dist/tools/modules/modules-delete.d.ts +51 -0
- package/dist/tools/modules/modules-delete.d.ts.map +1 -0
- package/dist/tools/modules/modules-delete.js +180 -0
- package/dist/tools/modules/modules-delete.js.map +1 -0
- package/dist/tools/modules/modules-update.d.ts +43 -0
- package/dist/tools/modules/modules-update.d.ts.map +1 -0
- package/dist/tools/modules/modules-update.js +177 -0
- package/dist/tools/modules/modules-update.js.map +1 -0
- package/dist/tools/modules/placement-hints.d.ts +5 -0
- package/dist/tools/modules/placement-hints.d.ts.map +1 -0
- package/dist/tools/modules/placement-hints.js +90 -0
- package/dist/tools/modules/placement-hints.js.map +1 -0
- package/dist/tools/modules/placement-ways.d.ts +13 -0
- package/dist/tools/modules/placement-ways.d.ts.map +1 -0
- package/dist/tools/modules/placement-ways.js +61 -0
- package/dist/tools/modules/placement-ways.js.map +1 -0
- package/dist/tools/multi-items/builders.d.ts +1 -21
- package/dist/tools/multi-items/builders.d.ts.map +1 -1
- package/dist/tools/multi-items/builders.js +22 -65
- package/dist/tools/multi-items/builders.js.map +1 -1
- package/dist/tools/multi-items/index.d.ts +0 -15
- package/dist/tools/multi-items/index.d.ts.map +1 -1
- package/dist/tools/multi-items/index.js +0 -15
- package/dist/tools/multi-items/index.js.map +1 -1
- package/dist/tools/multi-items/item-container-map.d.ts +0 -35
- package/dist/tools/multi-items/item-container-map.d.ts.map +1 -1
- package/dist/tools/multi-items/item-container-map.js +0 -35
- package/dist/tools/multi-items/item-container-map.js.map +1 -1
- package/dist/tools/multi-items/output-schemas.d.ts +101 -0
- package/dist/tools/multi-items/output-schemas.d.ts.map +1 -0
- package/dist/tools/multi-items/output-schemas.js +74 -0
- package/dist/tools/multi-items/output-schemas.js.map +1 -0
- package/dist/tools/navigation/builders.d.ts +1 -16
- package/dist/tools/navigation/builders.d.ts.map +1 -1
- package/dist/tools/navigation/builders.js +5 -27
- package/dist/tools/navigation/builders.js.map +1 -1
- package/dist/tools/navigation/index.d.ts +0 -13
- package/dist/tools/navigation/index.d.ts.map +1 -1
- package/dist/tools/navigation/index.js +0 -12
- package/dist/tools/navigation/index.js.map +1 -1
- package/dist/tools/navigation/schemas.d.ts +0 -30
- package/dist/tools/navigation/schemas.d.ts.map +1 -1
- package/dist/tools/navigation/schemas.js +0 -30
- package/dist/tools/navigation/schemas.js.map +1 -1
- package/dist/tools/output-schema-metadata.d.ts +5 -0
- package/dist/tools/output-schema-metadata.d.ts.map +1 -0
- package/dist/tools/output-schema-metadata.js +83 -0
- package/dist/tools/output-schema-metadata.js.map +1 -0
- package/dist/tools/pages/builders.d.ts +1 -41
- package/dist/tools/pages/builders.d.ts.map +1 -1
- package/dist/tools/pages/builders.js +320 -405
- package/dist/tools/pages/builders.js.map +1 -1
- package/dist/tools/pages/header-transparency.d.ts +2 -32
- package/dist/tools/pages/header-transparency.d.ts.map +1 -1
- package/dist/tools/pages/header-transparency.js +9 -43
- package/dist/tools/pages/header-transparency.js.map +1 -1
- package/dist/tools/pages/index.d.ts +1 -19
- package/dist/tools/pages/index.d.ts.map +1 -1
- package/dist/tools/pages/index.js +1 -19
- package/dist/tools/pages/index.js.map +1 -1
- package/dist/tools/pages/schemas.d.ts +323 -241
- package/dist/tools/pages/schemas.d.ts.map +1 -1
- package/dist/tools/pages/schemas.js +514 -549
- package/dist/tools/pages/schemas.js.map +1 -1
- package/dist/tools/pages/write-output-schemas.d.ts +139 -0
- package/dist/tools/pages/write-output-schemas.d.ts.map +1 -0
- package/dist/tools/pages/write-output-schemas.js +138 -0
- package/dist/tools/pages/write-output-schemas.js.map +1 -0
- package/dist/tools/pages.d.ts +0 -11
- package/dist/tools/pages.d.ts.map +1 -1
- package/dist/tools/pages.js +0 -11
- package/dist/tools/pages.js.map +1 -1
- package/dist/tools/pool-resolve-helper.d.ts +0 -52
- package/dist/tools/pool-resolve-helper.d.ts.map +1 -1
- package/dist/tools/pool-resolve-helper.js +31 -106
- package/dist/tools/pool-resolve-helper.js.map +1 -1
- package/dist/tools/progress-phases.d.ts +0 -42
- package/dist/tools/progress-phases.d.ts.map +1 -1
- package/dist/tools/progress-phases.js +0 -44
- package/dist/tools/progress-phases.js.map +1 -1
- package/dist/tools/response-budget.d.ts +0 -69
- package/dist/tools/response-budget.d.ts.map +1 -1
- package/dist/tools/response-budget.js +0 -127
- package/dist/tools/response-budget.js.map +1 -1
- package/dist/tools/shared-schemas.d.ts +11 -65
- package/dist/tools/shared-schemas.d.ts.map +1 -1
- package/dist/tools/shared-schemas.js +40 -123
- package/dist/tools/shared-schemas.js.map +1 -1
- package/dist/tools/skill/builders.d.ts +3 -0
- package/dist/tools/skill/builders.d.ts.map +1 -0
- package/dist/tools/skill/builders.js +81 -0
- package/dist/tools/skill/builders.js.map +1 -0
- package/dist/tools/sources/builders.d.ts +1 -11
- package/dist/tools/sources/builders.d.ts.map +1 -1
- package/dist/tools/sources/builders.js +194 -170
- package/dist/tools/sources/builders.js.map +1 -1
- package/dist/tools/sources/index.d.ts +0 -17
- package/dist/tools/sources/index.d.ts.map +1 -1
- package/dist/tools/sources/index.js +0 -16
- package/dist/tools/sources/index.js.map +1 -1
- package/dist/tools/sources/read-output-schemas.d.ts +101 -0
- package/dist/tools/sources/read-output-schemas.d.ts.map +1 -0
- package/dist/tools/sources/read-output-schemas.js +105 -0
- package/dist/tools/sources/read-output-schemas.js.map +1 -0
- package/dist/tools/sources/source-name-argument.d.ts +17 -0
- package/dist/tools/sources/source-name-argument.d.ts.map +1 -0
- package/dist/tools/sources/source-name-argument.js +64 -0
- package/dist/tools/sources/source-name-argument.js.map +1 -0
- package/dist/tools/sources/write-output-schemas.d.ts +100 -0
- package/dist/tools/sources/write-output-schemas.d.ts.map +1 -0
- package/dist/tools/sources/write-output-schemas.js +61 -0
- package/dist/tools/sources/write-output-schemas.js.map +1 -0
- package/dist/tools/sources.d.ts +0 -12
- package/dist/tools/sources.d.ts.map +1 -1
- package/dist/tools/sources.js +0 -12
- package/dist/tools/sources.js.map +1 -1
- package/dist/tools/sparse-fields.d.ts +16 -232
- package/dist/tools/sparse-fields.d.ts.map +1 -1
- package/dist/tools/sparse-fields.js +178 -242
- package/dist/tools/sparse-fields.js.map +1 -1
- package/dist/tools/strict-input.d.ts +5 -0
- package/dist/tools/strict-input.d.ts.map +1 -0
- package/dist/tools/strict-input.js +55 -0
- package/dist/tools/strict-input.js.map +1 -0
- package/dist/tools/sublayout/builders.d.ts +1 -21
- package/dist/tools/sublayout/builders.d.ts.map +1 -1
- package/dist/tools/sublayout/builders.js +10 -39
- package/dist/tools/sublayout/builders.js.map +1 -1
- package/dist/tools/sublayout/index.d.ts +1 -11
- package/dist/tools/sublayout/index.d.ts.map +1 -1
- package/dist/tools/sublayout/index.js +1 -11
- package/dist/tools/sublayout/index.js.map +1 -1
- package/dist/tools/sublayout/output-schemas.d.ts +57 -0
- package/dist/tools/sublayout/output-schemas.d.ts.map +1 -0
- package/dist/tools/sublayout/output-schemas.js +51 -0
- package/dist/tools/sublayout/output-schemas.js.map +1 -0
- package/dist/tools/tool-builder/annotations.d.ts +1 -49
- package/dist/tools/tool-builder/annotations.d.ts.map +1 -1
- package/dist/tools/tool-builder/annotations.js +9 -49
- package/dist/tools/tool-builder/annotations.js.map +1 -1
- package/dist/tools/tool-builder/confirm-preview.d.ts +24 -0
- package/dist/tools/tool-builder/confirm-preview.d.ts.map +1 -0
- package/dist/tools/tool-builder/confirm-preview.js +37 -0
- package/dist/tools/tool-builder/confirm-preview.js.map +1 -0
- package/dist/tools/tool-builder/define.d.ts +6 -26
- package/dist/tools/tool-builder/define.d.ts.map +1 -1
- package/dist/tools/tool-builder/define.js +0 -25
- package/dist/tools/tool-builder/define.js.map +1 -1
- package/dist/tools/tool-builder/index.d.ts +3 -26
- package/dist/tools/tool-builder/index.d.ts.map +1 -1
- package/dist/tools/tool-builder/index.js +2 -25
- package/dist/tools/tool-builder/index.js.map +1 -1
- package/dist/tools/tool-builder/results.d.ts +4 -124
- package/dist/tools/tool-builder/results.d.ts.map +1 -1
- package/dist/tools/tool-builder/results.js +258 -263
- package/dist/tools/tool-builder/results.js.map +1 -1
- package/dist/tools/tool-builder/types.d.ts +5 -59
- package/dist/tools/tool-builder/types.d.ts.map +1 -1
- package/dist/tools/tool-builder/types.js +0 -7
- package/dist/tools/tool-builder/types.js.map +1 -1
- package/dist/tools/tool-builder.d.ts +0 -14
- package/dist/tools/tool-builder.d.ts.map +1 -1
- package/dist/tools/tool-builder.js +0 -14
- package/dist/tools/tool-builder.js.map +1 -1
- package/dist/uninstall-skill.d.ts +0 -41
- package/dist/uninstall-skill.d.ts.map +1 -1
- package/dist/uninstall-skill.js +3 -50
- package/dist/uninstall-skill.js.map +1 -1
- package/dist/uninstall.d.ts +0 -41
- package/dist/uninstall.d.ts.map +1 -1
- package/dist/uninstall.js +1 -29
- package/dist/uninstall.js.map +1 -1
- package/dist/update/update-check.d.ts +0 -26
- package/dist/update/update-check.d.ts.map +1 -1
- package/dist/update/update-check.js +0 -25
- package/dist/update/update-check.js.map +1 -1
- package/manifest.json +7 -12
- package/package.json +6 -11
- package/skills/yt-builder-mcp/SKILL.md +1871 -414
- package/dist/tools/elements/handlers-write.d.ts +0 -89
- package/dist/tools/elements/handlers-write.d.ts.map +0 -1
- package/dist/tools/elements/handlers-write.js +0 -797
- package/dist/tools/elements/handlers-write.js.map +0 -1
- package/dist/tools/elements/handlers.d.ts +0 -130
- package/dist/tools/elements/handlers.d.ts.map +0 -1
- package/dist/tools/elements/handlers.js +0 -581
- package/dist/tools/elements/handlers.js.map +0 -1
- package/dist/tools/elements/layout-hierarchy-rules.d.ts +0 -62
- package/dist/tools/elements/layout-hierarchy-rules.d.ts.map +0 -1
- package/dist/tools/elements/layout-hierarchy-rules.js +0 -154
- package/dist/tools/elements/layout-hierarchy-rules.js.map +0 -1
- package/dist/tools/elements/schema-validation.d.ts +0 -218
- package/dist/tools/elements/schema-validation.d.ts.map +0 -1
- package/dist/tools/elements/schema-validation.js +0 -685
- package/dist/tools/elements/schema-validation.js.map +0 -1
- package/dist/tools/elicitation.d.ts +0 -87
- package/dist/tools/elicitation.d.ts.map +0 -1
- package/dist/tools/elicitation.js +0 -100
- package/dist/tools/elicitation.js.map +0 -1
- package/dist/tools/format/elements-format.d.ts +0 -75
- package/dist/tools/format/elements-format.d.ts.map +0 -1
- package/dist/tools/format/elements-format.js +0 -368
- package/dist/tools/format/elements-format.js.map +0 -1
- package/dist/tools/format/source-schema-format.d.ts +0 -74
- package/dist/tools/format/source-schema-format.d.ts.map +0 -1
- package/dist/tools/format/source-schema-format.js +0 -208
- package/dist/tools/format/source-schema-format.js.map +0 -1
- package/dist/tools/layout-flatten.d.ts +0 -84
- package/dist/tools/layout-flatten.d.ts.map +0 -1
- package/dist/tools/layout-flatten.js +0 -129
- package/dist/tools/layout-flatten.js.map +0 -1
- package/dist/tools/local-content/handlers.d.ts +0 -56
- package/dist/tools/local-content/handlers.d.ts.map +0 -1
- package/dist/tools/local-content/handlers.js +0 -320
- package/dist/tools/local-content/handlers.js.map +0 -1
- package/dist/tools/multi-items/clean-implode-handler.d.ts +0 -37
- package/dist/tools/multi-items/clean-implode-handler.d.ts.map +0 -1
- package/dist/tools/multi-items/clean-implode-handler.js +0 -65
- package/dist/tools/multi-items/clean-implode-handler.js.map +0 -1
- package/dist/tools/multi-items/format/inspection-format.d.ts +0 -41
- package/dist/tools/multi-items/format/inspection-format.d.ts.map +0 -1
- package/dist/tools/multi-items/format/inspection-format.js +0 -64
- package/dist/tools/multi-items/format/inspection-format.js.map +0 -1
- package/dist/tools/multi-items/inspect-handler.d.ts +0 -97
- package/dist/tools/multi-items/inspect-handler.d.ts.map +0 -1
- package/dist/tools/multi-items/inspect-handler.js +0 -323
- package/dist/tools/multi-items/inspect-handler.js.map +0 -1
- package/dist/tools/multi-items/inspection-cache.d.ts +0 -85
- package/dist/tools/multi-items/inspection-cache.d.ts.map +0 -1
- package/dist/tools/multi-items/inspection-cache.js +0 -126
- package/dist/tools/multi-items/inspection-cache.js.map +0 -1
- package/dist/tools/navigation/handlers.d.ts +0 -30
- package/dist/tools/navigation/handlers.d.ts.map +0 -1
- package/dist/tools/navigation/handlers.js +0 -41
- package/dist/tools/navigation/handlers.js.map +0 -1
- package/dist/tools/pages/handlers-audit.d.ts +0 -140
- package/dist/tools/pages/handlers-audit.d.ts.map +0 -1
- package/dist/tools/pages/handlers-audit.js +0 -714
- package/dist/tools/pages/handlers-audit.js.map +0 -1
- package/dist/tools/pages/handlers-read.d.ts +0 -133
- package/dist/tools/pages/handlers-read.d.ts.map +0 -1
- package/dist/tools/pages/handlers-read.js +0 -1061
- package/dist/tools/pages/handlers-read.js.map +0 -1
- package/dist/tools/pages/handlers-write.d.ts +0 -212
- package/dist/tools/pages/handlers-write.d.ts.map +0 -1
- package/dist/tools/pages/handlers-write.js +0 -419
- package/dist/tools/pages/handlers-write.js.map +0 -1
- package/dist/tools/pages/target.d.ts +0 -162
- package/dist/tools/pages/target.d.ts.map +0 -1
- package/dist/tools/pages/target.js +0 -239
- package/dist/tools/pages/target.js.map +0 -1
- package/dist/tools/sources/handlers-bind.d.ts +0 -148
- package/dist/tools/sources/handlers-bind.d.ts.map +0 -1
- package/dist/tools/sources/handlers-bind.js +0 -657
- package/dist/tools/sources/handlers-bind.js.map +0 -1
- package/dist/tools/sources/handlers.d.ts +0 -116
- package/dist/tools/sources/handlers.d.ts.map +0 -1
- package/dist/tools/sources/handlers.js +0 -289
- package/dist/tools/sources/handlers.js.map +0 -1
- package/dist/tools/sublayout/inspect-sublayout-handler.d.ts +0 -95
- package/dist/tools/sublayout/inspect-sublayout-handler.d.ts.map +0 -1
- package/dist/tools/sublayout/inspect-sublayout-handler.js +0 -181
- package/dist/tools/sublayout/inspect-sublayout-handler.js.map +0 -1
|
@@ -1,685 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Finding B3 — schema-driven write validation for element props.
|
|
3
|
-
*
|
|
4
|
-
* The static `COMMON_PROP_TYPOS` map + `RESERVED_BINDING_KEYS` set in
|
|
5
|
-
* `./handlers-write.ts` only catch a small fixed set of known mistakes. An
|
|
6
|
-
* unknown prop key that is NOT in those tables slips through, the PHP backend
|
|
7
|
-
* silently drops it, and the element renders empty with no signal to the agent
|
|
8
|
-
* (customer B3).
|
|
9
|
-
*
|
|
10
|
-
* This module adds a LIVE cross-check against the element-type's real schema:
|
|
11
|
-
* the authoritative prop keys are `fields[].name` from
|
|
12
|
-
* `GET /element-types/<type>/schema` — the same source the B1
|
|
13
|
-
* `yootheme_builder_element_type_get_schema` tool surfaces (see
|
|
14
|
-
* `../inspection.ts`). When the schema is KNOWN and a key is SURELY unknown,
|
|
15
|
-
* the write is hard-rejected with a Levenshtein `did_you_mean` suggestion.
|
|
16
|
-
*
|
|
17
|
-
* Additive-before-breaking (the plugin is live 1.6.x): every uncertainty —
|
|
18
|
-
* schema fetch failure, unknown schema shape, empty field list — falls THROUGH
|
|
19
|
-
* to the prior behaviour. A schema fetch must NEVER crash the write.
|
|
20
|
-
*
|
|
21
|
-
* @license MIT
|
|
22
|
-
*/
|
|
23
|
-
import { errorResult, jsonResult } from '../tool-builder.js';
|
|
24
|
-
/**
|
|
25
|
-
* MCP-side mirror of `Inspector::knownAcceptedButHiddenFields`
|
|
26
|
-
* (`src/modules/builder-inspection/src/Inspector.php`). YT-Pro accepts these
|
|
27
|
-
* props at runtime even though the UI-tab `fieldset` omits them. The PHP
|
|
28
|
-
* `schema()` endpoint already post-merges them into `fields[]`, so a current
|
|
29
|
-
* (1.6.x) plugin schema covers them. This mirror is DEFENSE-IN-DEPTH: against
|
|
30
|
-
* an older plugin whose schema predates that merge, it keeps a genuinely
|
|
31
|
-
* runtime-accepted prop from being false-positive hard-rejected. Keep in sync
|
|
32
|
-
* with the PHP list (deliberately small + ground-truthed).
|
|
33
|
-
*/
|
|
34
|
-
export const RUNTIME_ACCEPTED_HIDDEN_PROPS = {
|
|
35
|
-
button: ['content', 'link'],
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* Levenshtein edit distance — small pure function (keys are short). Index
|
|
39
|
-
* access is guarded with `?? 0` to satisfy `noUncheckedIndexedAccess`; the
|
|
40
|
-
* row is fully populated at every access so the fallback never fires.
|
|
41
|
-
*/
|
|
42
|
-
export function levenshtein(a, b) {
|
|
43
|
-
const m = a.length;
|
|
44
|
-
const n = b.length;
|
|
45
|
-
if (m === 0)
|
|
46
|
-
return n;
|
|
47
|
-
if (n === 0)
|
|
48
|
-
return m;
|
|
49
|
-
const row = [];
|
|
50
|
-
for (let j = 0; j <= n; j++)
|
|
51
|
-
row.push(j);
|
|
52
|
-
for (let i = 1; i <= m; i++) {
|
|
53
|
-
let prevDiag = row[0] ?? 0; // distance at (i-1, 0)
|
|
54
|
-
row[0] = i;
|
|
55
|
-
for (let j = 1; j <= n; j++) {
|
|
56
|
-
const above = row[j] ?? 0; // (i-1, j), before overwrite
|
|
57
|
-
const cost = a.charCodeAt(i - 1) === b.charCodeAt(j - 1) ? 0 : 1;
|
|
58
|
-
const deletion = above + 1;
|
|
59
|
-
const insertion = (row[j - 1] ?? 0) + 1;
|
|
60
|
-
const substitution = prevDiag + cost;
|
|
61
|
-
row[j] = Math.min(deletion, insertion, substitution);
|
|
62
|
-
prevDiag = above;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return row[n] ?? 0;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Closest real field name for `key`, or `undefined` when nothing is close
|
|
69
|
-
* enough to suggest. Threshold (pinned in tests): `min(max(2, floor(0.4 ·
|
|
70
|
-
* key.length)), key.length - 1)` — always tolerate 1–2 char typos and
|
|
71
|
-
* proportionally more on longer keys, but a suggestion must be CLOSER than the
|
|
72
|
-
* whole key length (M1 clamp), so a wholly-different word is never "suggested".
|
|
73
|
-
*/
|
|
74
|
-
export function nearestFieldName(key, fields) {
|
|
75
|
-
let best;
|
|
76
|
-
let bestDist = Infinity;
|
|
77
|
-
for (const field of fields) {
|
|
78
|
-
const d = levenshtein(key, field);
|
|
79
|
-
if (d < bestDist) {
|
|
80
|
-
bestDist = d;
|
|
81
|
-
best = field;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (best === undefined)
|
|
85
|
-
return undefined;
|
|
86
|
-
// M1: additionally clamp to STRICTLY less than the key length. A suggestion
|
|
87
|
-
// must be CLOSER than the whole key — otherwise any very short key would
|
|
88
|
-
// "match" any other same-length field (`xy` → `id`, distance 2 == length 2).
|
|
89
|
-
// For longer keys the `key.length - 1` clamp is a no-op; `max(2, …)` keeps
|
|
90
|
-
// catching 1–2 char typos.
|
|
91
|
-
const threshold = Math.min(Math.max(2, Math.floor(key.length * 0.4)), key.length - 1);
|
|
92
|
-
return bestDist <= threshold ? best : undefined;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* PAGES_LIBRARY_MEDIA-27 — suggest real field names for an unknown key,
|
|
96
|
-
* combining TWO signals so an obviously-intended key is never missed:
|
|
97
|
-
*
|
|
98
|
-
* 1. PREFIX / SUBSTRING match — a `title` key on a headline should suggest
|
|
99
|
-
* `title_element` / `title_style` / `title_color`, but char-Levenshtein to
|
|
100
|
-
* each of those is 6-8 (well over the typo threshold), so the pure-distance
|
|
101
|
-
* `nearestFieldName` returns nothing. When the unknown key (≥ 3 chars) is a
|
|
102
|
-
* prefix of — or a substring of — a real field, surface EVERY such field
|
|
103
|
-
* regardless of edit distance: these are the concrete keys the caller most
|
|
104
|
-
* likely meant.
|
|
105
|
-
* 2. Levenshtein nearest — the general single/double-char typo case.
|
|
106
|
-
*
|
|
107
|
-
* Prefix matches lead (they are the strongest signal), then substring matches,
|
|
108
|
-
* then the Levenshtein nearest if not already covered. De-duplicated, order
|
|
109
|
-
* preserved. Returns `[]` when nothing is close.
|
|
110
|
-
*/
|
|
111
|
-
export function suggestFieldNames(key, fields) {
|
|
112
|
-
const out = [];
|
|
113
|
-
const push = (name) => {
|
|
114
|
-
if (!out.includes(name))
|
|
115
|
-
out.push(name);
|
|
116
|
-
};
|
|
117
|
-
if (key.length >= 3) {
|
|
118
|
-
// Prefix matches first (`title` → `title_element`, `title_style`, …).
|
|
119
|
-
for (const field of fields) {
|
|
120
|
-
if (field !== key && field.startsWith(key))
|
|
121
|
-
push(field);
|
|
122
|
-
}
|
|
123
|
-
// Then substring matches (`color` → `title_color`, `bg_color`).
|
|
124
|
-
for (const field of fields) {
|
|
125
|
-
if (field !== key && field.includes(key))
|
|
126
|
-
push(field);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
// Then the edit-distance nearest for the general typo case.
|
|
130
|
-
const near = nearestFieldName(key, fields);
|
|
131
|
-
if (near !== undefined)
|
|
132
|
-
push(near);
|
|
133
|
-
return out;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Pull the full `fields[]` list out of the element-type schema response.
|
|
137
|
-
* Mirrors the envelope handling in `../inspection.ts`: the type schema nests
|
|
138
|
-
* under `schema`, with a top-level fallback for older backends.
|
|
139
|
-
*
|
|
140
|
-
* @returns the field list (possibly empty), or `null` when the response
|
|
141
|
-
* carries no `fields` array at all (unknown schema shape → treat as unknown).
|
|
142
|
-
*/
|
|
143
|
-
export function extractSchemaFields(data) {
|
|
144
|
-
if (data === null || typeof data !== 'object')
|
|
145
|
-
return null;
|
|
146
|
-
const obj = data;
|
|
147
|
-
const schema = obj.schema !== null && typeof obj.schema === 'object'
|
|
148
|
-
? obj.schema
|
|
149
|
-
: obj;
|
|
150
|
-
const rawFields = schema.fields;
|
|
151
|
-
if (!Array.isArray(rawFields))
|
|
152
|
-
return null;
|
|
153
|
-
const fields = [];
|
|
154
|
-
for (const raw of rawFields) {
|
|
155
|
-
if (raw === null || typeof raw !== 'object')
|
|
156
|
-
continue;
|
|
157
|
-
const f = raw;
|
|
158
|
-
const name = f.name;
|
|
159
|
-
if (typeof name !== 'string' || name === '')
|
|
160
|
-
continue;
|
|
161
|
-
const field = { name };
|
|
162
|
-
if (typeof f.type === 'string' && f.type !== '')
|
|
163
|
-
field.type = f.type;
|
|
164
|
-
if (Array.isArray(f.enum)) {
|
|
165
|
-
// Mirrors Inspector::extractEnum's PHP-side coercion
|
|
166
|
-
// (is_string/is_int/is_bool → (string) cast) so a wire response
|
|
167
|
-
// that carries raw scalars instead of pre-stringified values is
|
|
168
|
-
// still usable.
|
|
169
|
-
const enumValues = f.enum
|
|
170
|
-
.filter((v) => typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')
|
|
171
|
-
.map((v) => String(v));
|
|
172
|
-
if (enumValues.length > 0)
|
|
173
|
-
field.enum = enumValues;
|
|
174
|
-
}
|
|
175
|
-
if ('default' in f)
|
|
176
|
-
field.default = f.default;
|
|
177
|
-
fields.push(field);
|
|
178
|
-
}
|
|
179
|
-
return fields;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Pull `fields[].name` out of the element-type schema response. Thin
|
|
183
|
-
* name-only projection of {@link extractSchemaFields} — kept as its own
|
|
184
|
-
* export because every EXISTING caller/test only needs the name list.
|
|
185
|
-
*
|
|
186
|
-
* @returns the field-name list (possibly empty), or `null` when the response
|
|
187
|
-
* carries no `fields` array at all (unknown schema shape → treat as unknown).
|
|
188
|
-
*/
|
|
189
|
-
export function extractSchemaFieldNames(data) {
|
|
190
|
-
const fields = extractSchemaFields(data);
|
|
191
|
-
return fields === null ? null : fields.map((f) => f.name);
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Best-effort fetch of an element-type's full field schema. ANY failure
|
|
195
|
-
* (network, non-2xx, unknown shape) resolves to `null` so the caller falls
|
|
196
|
-
* through to the prior behaviour — a schema fetch must never break the write.
|
|
197
|
-
*/
|
|
198
|
-
export async function fetchSchemaFields(client, elementType) {
|
|
199
|
-
try {
|
|
200
|
-
const data = await client.get(`/element-types/${encodeURIComponent(elementType)}/schema`);
|
|
201
|
-
return extractSchemaFields(data);
|
|
202
|
-
}
|
|
203
|
-
catch {
|
|
204
|
-
return null;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Best-effort fetch of an element-type's real prop keys. Name-only
|
|
209
|
-
* projection of {@link fetchSchemaFields} — kept as its own export for
|
|
210
|
-
* existing callers that only need the key list.
|
|
211
|
-
*/
|
|
212
|
-
export async function fetchSchemaFieldNames(client, elementType) {
|
|
213
|
-
const fields = await fetchSchemaFields(client, elementType);
|
|
214
|
-
return fields === null ? null : fields.map((f) => f.name);
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Validate `props` against the element-type's LIVE schema. Returns an
|
|
218
|
-
* `errorResult` ONLY when the schema is surely known (non-empty field list) AND
|
|
219
|
-
* at least one prop key is surely unknown; otherwise `null` (pass / fall
|
|
220
|
-
* through). Reserved binding keys are skipped here — their dedicated guard runs
|
|
221
|
-
* first and keeps priority.
|
|
222
|
-
*/
|
|
223
|
-
export async function validatePropsAgainstLiveSchema(opts) {
|
|
224
|
-
const { client, elementType, props, reservedKeys } = opts;
|
|
225
|
-
if (props === undefined || props === null)
|
|
226
|
-
return null;
|
|
227
|
-
const keys = Object.keys(props);
|
|
228
|
-
if (keys.length === 0)
|
|
229
|
-
return null;
|
|
230
|
-
const fields = opts.fields !== undefined ? opts.fields : await fetchSchemaFields(client, elementType);
|
|
231
|
-
// null = schema unknown / fetch failed; [] = present-but-empty. Both are
|
|
232
|
-
// "uncertain" → never hard-reject.
|
|
233
|
-
if (fields === null || fields.length === 0)
|
|
234
|
-
return null;
|
|
235
|
-
const fieldNames = fields.map((f) => f.name);
|
|
236
|
-
// Accepted set = live schema fields ∪ the runtime-accepted-hidden mirror.
|
|
237
|
-
const accepted = new Set(fieldNames);
|
|
238
|
-
for (const extra of RUNTIME_ACCEPTED_HIDDEN_PROPS[elementType] ?? []) {
|
|
239
|
-
accepted.add(extra);
|
|
240
|
-
}
|
|
241
|
-
const unknownKeys = [];
|
|
242
|
-
for (const key of keys) {
|
|
243
|
-
if (reservedKeys.has(key))
|
|
244
|
-
continue; // dedicated guard owns these
|
|
245
|
-
if (accepted.has(key))
|
|
246
|
-
continue;
|
|
247
|
-
unknownKeys.push(key);
|
|
248
|
-
}
|
|
249
|
-
if (unknownKeys.length === 0)
|
|
250
|
-
return null;
|
|
251
|
-
// did_you_mean only for keys with a genuinely-close real field. Never
|
|
252
|
-
// fabricate a suggestion (a wholly-different key gets no `did_you_mean`).
|
|
253
|
-
// PAGES_LIBRARY_MEDIA-27: prefix/substring matches join the Levenshtein
|
|
254
|
-
// nearest, so `title` on a headline now suggests title_element/title_style/
|
|
255
|
-
// title_color instead of returning nothing.
|
|
256
|
-
const didYouMean = {};
|
|
257
|
-
const suggestionParts = [];
|
|
258
|
-
let firstNear;
|
|
259
|
-
for (const key of unknownKeys) {
|
|
260
|
-
const suggestions = suggestFieldNames(key, fieldNames);
|
|
261
|
-
if (suggestions.length > 0) {
|
|
262
|
-
didYouMean[key] = suggestions;
|
|
263
|
-
suggestionParts.push(`\`${key}\` → ${suggestions.map((s) => `\`${s}\``).join('/')}`);
|
|
264
|
-
if (firstNear === undefined)
|
|
265
|
-
firstNear = suggestions[0];
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
const hasSuggestions = suggestionParts.length > 0;
|
|
269
|
-
const unknownList = unknownKeys.map((k) => `\`${k}\``).join(', ');
|
|
270
|
-
return errorResult({
|
|
271
|
-
error: new Error(`Unknown prop key(s) for element type \`${elementType}\`: ${unknownList}. ` +
|
|
272
|
-
(hasSuggestions ? `Did you mean ${suggestionParts.join(', ')}? ` : '') +
|
|
273
|
-
`These keys are not in the element's live schema (fields[].name), so YT-Pro ` +
|
|
274
|
-
`silently drops them server-side and the element would render empty. ` +
|
|
275
|
-
`Call yootheme_builder_element_type_get_schema({ element_type: "${elementType}" }) ` +
|
|
276
|
-
`for the canonical prop keys.`),
|
|
277
|
-
context: {
|
|
278
|
-
element_type: elementType,
|
|
279
|
-
unknown_prop_keys: unknownKeys,
|
|
280
|
-
...(hasSuggestions ? { did_you_mean: didYouMean } : {}),
|
|
281
|
-
valid_prop_keys: fieldNames,
|
|
282
|
-
},
|
|
283
|
-
hint: `Re-try with a canonical prop key` +
|
|
284
|
-
(firstNear !== undefined ? ` (e.g. \`${firstNear}\`)` : '') +
|
|
285
|
-
`, or fetch the schema first: ` +
|
|
286
|
-
`yootheme_builder_element_type_get_schema({ element_type: "${elementType}" }).`,
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
// ─── Ordering-red-border fix (2026-07-25) ─────────────────────────────
|
|
290
|
-
//
|
|
291
|
-
// Root cause: `element_add` forwards ONLY the caller-supplied `props`
|
|
292
|
-
// verbatim. YOOtheme's OWN native element-creation additionally initialises
|
|
293
|
-
// every REQUIRED enum field (a `select`/dropdown whose schema `enum` does
|
|
294
|
-
// NOT list `''` as a member — the same "required" definition the PHP-side
|
|
295
|
-
// UiInvariantValidator uses for its `required_field_empty` check) to its
|
|
296
|
-
// schema `default`. An element created via element_add without e.g. an
|
|
297
|
-
// "Ordering" prop therefore has NO value at all for that required dropdown,
|
|
298
|
-
// and YOOtheme's Vue Builder flags the empty required control red.
|
|
299
|
-
//
|
|
300
|
-
// Two functions close this, both scoped to element_add's CREATE path only
|
|
301
|
-
// (element_update_settings is deliberately untouched — an update may
|
|
302
|
-
// legitimately clear a field, so injecting a default there would silently
|
|
303
|
-
// fight the caller):
|
|
304
|
-
// - `seedRequiredEnumDefaults` fills in the schema default ONLY for a
|
|
305
|
-
// required-enum field the caller did not supply at all. A caller-
|
|
306
|
-
// supplied value (valid or not) is NEVER touched here.
|
|
307
|
-
// - `validateEnumPropValues` hard-rejects a caller-supplied value for a
|
|
308
|
-
// KNOWN enum-constrained field that is not one of its accepted members
|
|
309
|
-
// — closing the create-path KEY-only gap `validatePropsAgainstLiveSchema`
|
|
310
|
-
// deliberately leaves open (it only checks the KEY is known, never the
|
|
311
|
-
// VALUE).
|
|
312
|
-
/**
|
|
313
|
-
* A field is "required" in the same sense the PHP-side `UiInvariantValidator`
|
|
314
|
-
* uses for its `required_field_empty` violation: it is enum-constrained (a
|
|
315
|
-
* non-empty `enum` list) and that list does NOT contain `''` — an optional
|
|
316
|
-
* select always lists `''` as its "nothing selected" member.
|
|
317
|
-
*/
|
|
318
|
-
export function isRequiredEnumField(field) {
|
|
319
|
-
return field.enum !== undefined && field.enum.length > 0 && !field.enum.includes('');
|
|
320
|
-
}
|
|
321
|
-
/** A schema `default` that is actually usable as a seeded value — present and non-empty. */
|
|
322
|
-
function hasUsableDefault(field) {
|
|
323
|
-
return field.default !== undefined && field.default !== null && field.default !== '';
|
|
324
|
-
}
|
|
325
|
-
/**
|
|
326
|
-
* Seed every REQUIRED enum field (see {@link isRequiredEnumField}) that
|
|
327
|
-
* declares a non-empty schema `default` and is ABSENT from `props` with that
|
|
328
|
-
* default — mirroring what YOOtheme's own native element-creation
|
|
329
|
-
* initialises. A field the caller already supplied a key for (any value,
|
|
330
|
-
* including one later hard-rejected by {@link validateEnumPropValues}) is
|
|
331
|
-
* never touched: the caller's own value ALWAYS wins, no coercion, ever. An
|
|
332
|
-
* element type with no schema default for a field gets nothing invented for
|
|
333
|
-
* it — the seed set only ever pulls from real schema data.
|
|
334
|
-
*
|
|
335
|
-
* Returns `props` UNCHANGED (same reference, possibly `undefined`) when
|
|
336
|
-
* there is nothing to seed, so a no-op call never allocates a new object.
|
|
337
|
-
*/
|
|
338
|
-
export function seedRequiredEnumDefaults(fields, props) {
|
|
339
|
-
const seeds = {};
|
|
340
|
-
for (const field of fields) {
|
|
341
|
-
if (!isRequiredEnumField(field))
|
|
342
|
-
continue;
|
|
343
|
-
if (!hasUsableDefault(field))
|
|
344
|
-
continue;
|
|
345
|
-
if (props !== undefined && Object.prototype.hasOwnProperty.call(props, field.name))
|
|
346
|
-
continue;
|
|
347
|
-
seeds[field.name] = field.default;
|
|
348
|
-
}
|
|
349
|
-
if (Object.keys(seeds).length === 0)
|
|
350
|
-
return props;
|
|
351
|
-
return { ...seeds, ...(props ?? {}) };
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* YOOtheme persists a BOOLEAN shorthand (true/false/"true"/"false"/1/0/'1'/'0')
|
|
355
|
-
* in several fields our schema-derivation would otherwise classify as a plain
|
|
356
|
-
* enum-value mismatch (e.g. a link's `link_target: true`, the "open in a new
|
|
357
|
-
* window" checkbox, on a field whose enum is `_blank`/`_self`/…). Mirrors
|
|
358
|
-
* `UiInvariantValidator::isBooleanish` (PHP) so this pre-flight is never
|
|
359
|
-
* STRICTER than the server-side guard the write would hit anyway.
|
|
360
|
-
*/
|
|
361
|
-
function isBooleanishEnumValue(value) {
|
|
362
|
-
return (typeof value === 'boolean' ||
|
|
363
|
-
value === 1 ||
|
|
364
|
-
value === 0 ||
|
|
365
|
-
value === '1' ||
|
|
366
|
-
value === '0' ||
|
|
367
|
-
value === 'true' ||
|
|
368
|
-
value === 'false');
|
|
369
|
-
}
|
|
370
|
-
/**
|
|
371
|
-
* Hard-reject a prop VALUE the caller explicitly supplied for a KNOWN
|
|
372
|
-
* enum-constrained field when that value is not one of the field's declared
|
|
373
|
-
* `enum` members. `validatePropsAgainstLiveSchema` only ever checks that a
|
|
374
|
-
* prop KEY is known — this is the VALUE half, scoped to element_add's create
|
|
375
|
-
* path only (see the section banner above for why).
|
|
376
|
-
*
|
|
377
|
-
* An empty value (`''` / `null` / `undefined`) is deliberately NOT judged
|
|
378
|
-
* here — persisting an empty value on a required field is a DIFFERENT
|
|
379
|
-
* violation (`required_field_empty`) the PHP write guard already owns; this
|
|
380
|
-
* function only judges a genuinely non-empty value against enum membership.
|
|
381
|
-
* A non-scalar value (a dynamic-binding shape) is skipped — it cannot be
|
|
382
|
-
* safely compared against a string enum and is not this function's concern.
|
|
383
|
-
*
|
|
384
|
-
* Returns `null` (pass) whenever the field is unknown to the given `fields`
|
|
385
|
-
* list or is not enum-constrained — this is a value check layered ON TOP of
|
|
386
|
-
* the key check, never a whitelist on its own.
|
|
387
|
-
*/
|
|
388
|
-
export function validateEnumPropValues(opts) {
|
|
389
|
-
const { elementType, fields, props, reservedKeys } = opts;
|
|
390
|
-
if (props === undefined || props === null)
|
|
391
|
-
return null;
|
|
392
|
-
const byName = new Map(fields.map((f) => [f.name, f]));
|
|
393
|
-
for (const [key, value] of Object.entries(props)) {
|
|
394
|
-
if (reservedKeys.has(key))
|
|
395
|
-
continue; // dedicated guard owns these
|
|
396
|
-
if (value === '' || value === null || value === undefined)
|
|
397
|
-
continue; // required_field_empty is the PHP guard's concern
|
|
398
|
-
if (typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'boolean')
|
|
399
|
-
continue;
|
|
400
|
-
if (isBooleanishEnumValue(value))
|
|
401
|
-
continue;
|
|
402
|
-
const field = byName.get(key);
|
|
403
|
-
if (field === undefined || field.enum === undefined || field.enum.length === 0)
|
|
404
|
-
continue;
|
|
405
|
-
if (field.enum.includes(String(value)))
|
|
406
|
-
continue;
|
|
407
|
-
return errorResult({
|
|
408
|
-
error: new Error(`Invalid value for prop \`${key}\` on element type \`${elementType}\`: ` +
|
|
409
|
-
`${JSON.stringify(value)} is not one of its accepted values. ` +
|
|
410
|
-
`Valid values: ${field.enum.map((v) => `\`${v}\``).join(', ')}.`),
|
|
411
|
-
context: {
|
|
412
|
-
element_type: elementType,
|
|
413
|
-
field: key,
|
|
414
|
-
given_value: value,
|
|
415
|
-
valid_values: field.enum,
|
|
416
|
-
},
|
|
417
|
-
hint: `Use one of the valid values, or fetch the schema: ` +
|
|
418
|
-
`yootheme_builder_element_type_get_schema({ element_type: "${elementType}" }).`,
|
|
419
|
-
});
|
|
420
|
-
}
|
|
421
|
-
return null;
|
|
422
|
-
}
|
|
423
|
-
// ─── Transparent-header write guard (Task 6, 2026-07-27) ─────────────
|
|
424
|
-
//
|
|
425
|
-
// YOOtheme's transparent header lives in three props on a `section`
|
|
426
|
-
// (`header_transparent`, `_noplaceholder`, `_text_color`). The plan's policy
|
|
427
|
-
// is that a transparent header is a deliberate EXCEPTION, never a default, and
|
|
428
|
-
// that whoever turns it on picks the colour deliberately — with no deliberate
|
|
429
|
-
// choice the colour is `''` (the theme default), NEVER `'light'` (which is
|
|
430
|
-
// white navigation text, and recolours even over a flat theme background).
|
|
431
|
-
//
|
|
432
|
-
// This guard is the CLIENT-SIDE half. What it may decide is bounded by what
|
|
433
|
-
// it can KNOW, which is the whole design:
|
|
434
|
-
//
|
|
435
|
-
// - **Class A (dead props) is theme-INDEPENDENT.** `_text_color` /
|
|
436
|
-
// `_noplaceholder` on a section whose master switch is off are never read
|
|
437
|
-
// by YOOtheme — dead whatever the theme declares. So this surface, which
|
|
438
|
-
// can never read `theme.css`, still rejects them. (Ratified for this
|
|
439
|
-
// surface by the plan's Task-6 scope; the evaluator docblock in
|
|
440
|
-
// `HeaderContrastEvaluator.php` records the open fail-open question.)
|
|
441
|
-
// - **Class B (the layout contradicts the theme's own `--uk-inverse`) needs
|
|
442
|
-
// the compiled `theme.css`.** TypeScript cannot read it, so class B is NOT
|
|
443
|
-
// approximated here — it stays with `pages_audit` /
|
|
444
|
-
// `header_transparency_set`, where the declaration IS readable. Guessing
|
|
445
|
-
// it client-side would be exactly the invented judgment the plan forbids.
|
|
446
|
-
// - **Class C (a hero image/video covers the section background) is allowed
|
|
447
|
-
// with a warning**, never rejected: over a medium no colour is provable
|
|
448
|
-
// from props and none is safer than another, so the only valid proof is
|
|
449
|
-
// looking at the rendered page.
|
|
450
|
-
//
|
|
451
|
-
// The SECOND bound is the write's own merge semantics. `element_update_settings`
|
|
452
|
-
// replaces props by default and deep-merges only on `merge:true`
|
|
453
|
-
// (`ElementsController::updateSettings`). A merge payload that omits the master
|
|
454
|
-
// switch therefore says NOTHING about the resulting state — so nothing is
|
|
455
|
-
// rejected and nothing is seeded there. "Not decidable" is a legitimate answer;
|
|
456
|
-
// a false reject on a partial update would be worse than the hole it closes.
|
|
457
|
-
//
|
|
458
|
-
// ONE chokepoint: `handleElementUpdateSettings` calls this and nothing else
|
|
459
|
-
// re-implements it (mirroring the API Mapper Library-First-Guard, which runs at
|
|
460
|
-
// `createConnection` only). `element_add`'s create path is deliberately NOT a
|
|
461
|
-
// second call site — a section created with dead props is caught by the
|
|
462
|
-
// server-side `pages_audit` check, which can also see whether it is the FIRST
|
|
463
|
-
// section (`a2`, the other half of class A, is undecidable from a single
|
|
464
|
-
// element payload and stays server-side too).
|
|
465
|
-
const HEADER_TRANSPARENT_PROP = 'header_transparent';
|
|
466
|
-
const HEADER_TRANSPARENT_TEXT_COLOR_PROP = 'header_transparent_text_color';
|
|
467
|
-
const HEADER_TRANSPARENT_NOPLACEHOLDER_PROP = 'header_transparent_noplaceholder';
|
|
468
|
-
/** The two props that can put a backdrop in front of the theme's own background. */
|
|
469
|
-
const HEADER_MEDIA_PROPS = ['image', 'video'];
|
|
470
|
-
/**
|
|
471
|
-
* Strict-boolean truthiness set — a byte-for-byte mirror of
|
|
472
|
-
* `HeaderContrastFacts::TRUTHY_STRINGS` (PHP). Only genuine true-ish values
|
|
473
|
-
* engage, so the raw-JSON strings `"false"` / `"0"` can never read as true (a
|
|
474
|
-
* loose `!!value` would, which is the bypass the API Mapper Library-First-Guard's
|
|
475
|
-
* `acknowledge_no_library` closed).
|
|
476
|
-
*/
|
|
477
|
-
const HEADER_TRUTHY_STRINGS = ['1', 'true', 'yes', 'on'];
|
|
478
|
-
/** Mirror of `HeaderContrastFacts::isTruthyFlag`. */
|
|
479
|
-
function isHeaderTruthyFlag(value) {
|
|
480
|
-
if (typeof value === 'boolean')
|
|
481
|
-
return value;
|
|
482
|
-
if (typeof value === 'number')
|
|
483
|
-
return value === 1;
|
|
484
|
-
if (typeof value === 'string')
|
|
485
|
-
return HEADER_TRUTHY_STRINGS.includes(value.trim().toLowerCase());
|
|
486
|
-
return false;
|
|
487
|
-
}
|
|
488
|
-
/**
|
|
489
|
-
* Mirror of `HeaderContrastFacts::readTextColor` — an unrecognised value
|
|
490
|
-
* degrades to `''`. A colour this code does not understand is not a colour it
|
|
491
|
-
* may act on (and rejecting a garbage enum value is
|
|
492
|
-
* {@link validateEnumPropValues}' job, not this guard's).
|
|
493
|
-
*/
|
|
494
|
-
function readHeaderTextColor(value) {
|
|
495
|
-
if (typeof value !== 'string')
|
|
496
|
-
return '';
|
|
497
|
-
const normalised = value.trim().toLowerCase();
|
|
498
|
-
if (normalised === 'light')
|
|
499
|
-
return 'light';
|
|
500
|
-
if (normalised === 'dark')
|
|
501
|
-
return 'dark';
|
|
502
|
-
return '';
|
|
503
|
-
}
|
|
504
|
-
/** Mirror of `HeaderContrastFacts::isPresent` — does a media prop carry an actual backdrop? */
|
|
505
|
-
function isHeaderMediaPresent(value) {
|
|
506
|
-
if (value === null || value === undefined || value === false)
|
|
507
|
-
return false;
|
|
508
|
-
if (typeof value === 'string')
|
|
509
|
-
return value.trim() !== '';
|
|
510
|
-
if (Array.isArray(value))
|
|
511
|
-
return value.length > 0;
|
|
512
|
-
if (typeof value === 'object')
|
|
513
|
-
return Object.keys(value).length > 0;
|
|
514
|
-
if (typeof value === 'number')
|
|
515
|
-
return value !== 0;
|
|
516
|
-
return true;
|
|
517
|
-
}
|
|
518
|
-
/**
|
|
519
|
-
* Resolve one prop's state AFTER the write, honouring merge semantics.
|
|
520
|
-
*
|
|
521
|
-
* @param present a reader for "the payload states this key" → its value
|
|
522
|
-
* @param replaces `true` when the write REPLACES all props (the default), so an
|
|
523
|
-
* absent key means the prop ends up absent; `false` (merge) means an
|
|
524
|
-
* absent key leaves the stored value — unknowable from here.
|
|
525
|
-
*/
|
|
526
|
-
function resolveAfterWrite(props, key, unset, replaces, read, absent) {
|
|
527
|
-
if (Object.prototype.hasOwnProperty.call(props, key))
|
|
528
|
-
return read(props[key]);
|
|
529
|
-
if (unset.has(key))
|
|
530
|
-
return absent; // explicitly removed → YOOtheme's default
|
|
531
|
-
return replaces ? absent : 'unknown';
|
|
532
|
-
}
|
|
533
|
-
/** Media backdrop after the write: `true` if either media prop ends up set. */
|
|
534
|
-
function resolveMediaBackdrop(props, unset, replaces) {
|
|
535
|
-
let anyUnknown = false;
|
|
536
|
-
for (const key of HEADER_MEDIA_PROPS) {
|
|
537
|
-
const resolved = resolveAfterWrite(props, key, unset, replaces, isHeaderMediaPresent, false);
|
|
538
|
-
if (resolved === true)
|
|
539
|
-
return true;
|
|
540
|
-
if (resolved === 'unknown')
|
|
541
|
-
anyUnknown = true;
|
|
542
|
-
}
|
|
543
|
-
return anyUnknown ? 'unknown' : false;
|
|
544
|
-
}
|
|
545
|
-
/**
|
|
546
|
-
* The class-A reject. Error shape mirrors the API Mapper Library-First-Guard:
|
|
547
|
-
* the human-readable instruction rides INSIDE `error` (the only leg some MCP
|
|
548
|
-
* plumbing surfaces), with a machine-readable `error_code` alongside it.
|
|
549
|
-
*/
|
|
550
|
-
function deadPropRejection(deadProps, elementPath, masterSwitchStatedOff) {
|
|
551
|
-
const list = deadProps.map((p) => `\`${p}\``).join(', ');
|
|
552
|
-
const why = masterSwitchStatedOff
|
|
553
|
-
? 'this write leaves `header_transparent` off'
|
|
554
|
-
: 'this write does not set `header_transparent` (a full-replace update drops every prop it omits, '
|
|
555
|
-
+ 'so the master switch ends up off)';
|
|
556
|
-
return jsonResult({
|
|
557
|
-
error: `Dead transparent-header prop(s) ${list} at \`${elementPath}\`: ${why}, and YOOtheme reads `
|
|
558
|
-
+ `${list} ONLY while \`header_transparent\` is true. The write would store configuration `
|
|
559
|
-
+ `that looks applied and never is — no error, no builder warning. Either set `
|
|
560
|
-
+ `\`header_transparent: true\` DELIBERATELY in the same call (a transparent header is the `
|
|
561
|
-
+ `exception, not a default — leave it off when in doubt), or drop ${list} from the props. `
|
|
562
|
-
+ `To inspect or repair the transparent header properly use `
|
|
563
|
-
+ `yootheme_builder_header_transparency_set({ template_id: "<id>" }) — it targets the FIRST `
|
|
564
|
-
+ `section by itself (YOOtheme reads these props there only) and dry-runs by default.`,
|
|
565
|
-
error_code: 'header_transparent_dead_prop',
|
|
566
|
-
context: {
|
|
567
|
-
element_path: elementPath,
|
|
568
|
-
dead_prop_keys: [...deadProps],
|
|
569
|
-
master_switch: HEADER_TRANSPARENT_PROP,
|
|
570
|
-
},
|
|
571
|
-
hint: 'Re-send without the dead prop(s), or add `header_transparent: true` when the customer '
|
|
572
|
-
+ 'actually asked for a transparent header. Prefer '
|
|
573
|
-
+ 'yootheme_builder_header_transparency_set (advanced gateway) — it also checks the '
|
|
574
|
-
+ 'first-section rule and the theme\'s own --uk-inverse declaration, neither of which is '
|
|
575
|
-
+ 'readable from here.',
|
|
576
|
-
}, { isError: true });
|
|
577
|
-
}
|
|
578
|
-
/**
|
|
579
|
-
* Guard a props write against the transparent-header failure modes.
|
|
580
|
-
*
|
|
581
|
-
* Pure: takes the write's own payload (plus its merge/unset semantics) and
|
|
582
|
-
* returns a rejection, the props to send, and any warnings. No I/O — it never
|
|
583
|
-
* needs the element type either, because the three props are namespaced and
|
|
584
|
-
* exist on `section` alone.
|
|
585
|
-
*/
|
|
586
|
-
export function guardHeaderTransparencyWrite(opts) {
|
|
587
|
-
const { props, elementPath } = opts;
|
|
588
|
-
const pass = { rejection: null, props, warnings: [] };
|
|
589
|
-
if (props === undefined || props === null || typeof props !== 'object')
|
|
590
|
-
return pass;
|
|
591
|
-
const touchesHeader = Object.prototype.hasOwnProperty.call(props, HEADER_TRANSPARENT_PROP)
|
|
592
|
-
|| Object.prototype.hasOwnProperty.call(props, HEADER_TRANSPARENT_TEXT_COLOR_PROP)
|
|
593
|
-
|| Object.prototype.hasOwnProperty.call(props, HEADER_TRANSPARENT_NOPLACEHOLDER_PROP);
|
|
594
|
-
// A write that mentions none of the three props changes nothing about the
|
|
595
|
-
// transparent header — leave it completely alone (same props reference).
|
|
596
|
-
if (!touchesHeader)
|
|
597
|
-
return pass;
|
|
598
|
-
const replaces = opts.merge !== true;
|
|
599
|
-
const unset = new Set(opts.unset ?? []);
|
|
600
|
-
const transparent = resolveAfterWrite(props, HEADER_TRANSPARENT_PROP, unset, replaces, isHeaderTruthyFlag, false);
|
|
601
|
-
const textColor = resolveAfterWrite(props, HEADER_TRANSPARENT_TEXT_COLOR_PROP, unset, replaces, readHeaderTextColor, '');
|
|
602
|
-
const noPlaceholder = resolveAfterWrite(props, HEADER_TRANSPARENT_NOPLACEHOLDER_PROP, unset, replaces, isHeaderTruthyFlag, false);
|
|
603
|
-
// ── Class A (a1): a prop YOOtheme will never read ──────────────────
|
|
604
|
-
if (transparent === false) {
|
|
605
|
-
const dead = [];
|
|
606
|
-
if (textColor !== 'unknown' && textColor !== '')
|
|
607
|
-
dead.push(HEADER_TRANSPARENT_TEXT_COLOR_PROP);
|
|
608
|
-
if (noPlaceholder === true)
|
|
609
|
-
dead.push(HEADER_TRANSPARENT_NOPLACEHOLDER_PROP);
|
|
610
|
-
if (dead.length > 0) {
|
|
611
|
-
return {
|
|
612
|
-
rejection: deadPropRejection(dead, elementPath, Object.prototype.hasOwnProperty.call(props, HEADER_TRANSPARENT_PROP)
|
|
613
|
-
|| unset.has(HEADER_TRANSPARENT_PROP)),
|
|
614
|
-
props,
|
|
615
|
-
warnings: [],
|
|
616
|
-
};
|
|
617
|
-
}
|
|
618
|
-
}
|
|
619
|
-
// Everything below only applies once the header IS transparent afterwards.
|
|
620
|
-
if (transparent !== true)
|
|
621
|
-
return pass;
|
|
622
|
-
const warnings = [];
|
|
623
|
-
let outProps = props;
|
|
624
|
-
// ── The safe default: '' (the theme's own), never 'light' ─────────
|
|
625
|
-
const statesColour = Object.prototype.hasOwnProperty.call(props, HEADER_TRANSPARENT_TEXT_COLOR_PROP);
|
|
626
|
-
if (!statesColour) {
|
|
627
|
-
if (textColor === 'unknown') {
|
|
628
|
-
// merge:true — the stored colour is unreadable from here. Seeding
|
|
629
|
-
// '' would CLOBBER a value that was set deliberately (or measured
|
|
630
|
-
// over a hero medium), so say so instead of acting on a guess.
|
|
631
|
-
warnings.push({
|
|
632
|
-
code: 'header_transparent_text_color_unstated',
|
|
633
|
-
message: 'This merge update turns the transparent header ON without stating '
|
|
634
|
-
+ '`header_transparent_text_color`, and the stored value cannot be read from here — so '
|
|
635
|
-
+ 'nothing was seeded. State the colour explicitly (`""` = the theme default; `"light"` '
|
|
636
|
-
+ 'is WHITE navigation text and is never a safe guess), or use '
|
|
637
|
-
+ 'yootheme_builder_header_transparency_set, which reads the theme\'s own --uk-inverse '
|
|
638
|
-
+ 'declaration.',
|
|
639
|
-
});
|
|
640
|
-
}
|
|
641
|
-
else if (!unset.has(HEADER_TRANSPARENT_TEXT_COLOR_PROP)) {
|
|
642
|
-
// Full replace: the resulting props would carry no colour at all.
|
|
643
|
-
// Record the theme default EXPLICITLY so the layout states the
|
|
644
|
-
// deliberate choice — and so nothing downstream fills in 'light'.
|
|
645
|
-
outProps = { ...props, [HEADER_TRANSPARENT_TEXT_COLOR_PROP]: '' };
|
|
646
|
-
warnings.push({
|
|
647
|
-
code: 'header_transparent_text_color_defaulted',
|
|
648
|
-
message: 'The transparent header was turned on without a colour, so '
|
|
649
|
-
+ '`header_transparent_text_color` was written as `""` — the theme\'s own default for '
|
|
650
|
-
+ 'this section style. It is never defaulted to `"light"`, which is WHITE navigation '
|
|
651
|
-
+ 'text and recolours even over a flat theme background. To choose deliberately, read '
|
|
652
|
-
+ 'the theme declaration via yootheme_builder_header_transparency_set (dry run).',
|
|
653
|
-
});
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
// ── Class C: a medium hides the background the theme describes ────
|
|
657
|
-
if (resolveMediaBackdrop(props, unset, replaces) === true) {
|
|
658
|
-
warnings.push({
|
|
659
|
-
code: 'header_contrast_unverifiable_over_media',
|
|
660
|
-
message: 'This section has an image or video behind the transparent header. The medium covers '
|
|
661
|
-
+ 'exactly the background the theme\'s --uk-inverse declaration describes, so NO navigation '
|
|
662
|
-
+ 'colour is verifiable from the props here and none is safer than another (not even `""`). '
|
|
663
|
-
+ 'Nothing was changed or recommended: LOOK at the rendered page at the customer\'s '
|
|
664
|
-
+ 'viewport — unscrolled AND after scrolling, because a sticky header drops its '
|
|
665
|
-
+ 'transparency — and set what you SAW.',
|
|
666
|
-
});
|
|
667
|
-
}
|
|
668
|
-
return { rejection: null, props: outProps, warnings };
|
|
669
|
-
}
|
|
670
|
-
/**
|
|
671
|
-
* Merge client-side warnings into a REST response body so a successful write
|
|
672
|
-
* still carries them. A non-object body (or an empty warning list) is returned
|
|
673
|
-
* untouched, so nothing that has no place to put them is reshaped.
|
|
674
|
-
*/
|
|
675
|
-
export function withHeaderTransparencyWarnings(data, warnings) {
|
|
676
|
-
if (warnings.length === 0)
|
|
677
|
-
return data;
|
|
678
|
-
if (data === null || typeof data !== 'object' || Array.isArray(data)) {
|
|
679
|
-
return { data, warnings: [...warnings] };
|
|
680
|
-
}
|
|
681
|
-
const existing = data.warnings;
|
|
682
|
-
const merged = Array.isArray(existing) ? [...existing, ...warnings] : [...warnings];
|
|
683
|
-
return { ...data, warnings: merged };
|
|
684
|
-
}
|
|
685
|
-
//# sourceMappingURL=schema-validation.js.map
|