@jahia/agentic 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -0
- package/dist/claude/.claude/rules/jahia.md +76 -0
- package/dist/claude/.claude/skills/jahia/SKILL.md +136 -0
- package/dist/claude/.claude/skills/jahia-content/SKILL.md +139 -0
- package/dist/claude/.claude/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/claude/.claude/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/claude/.claude/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/claude/.claude/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/claude/.claude/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/claude/.claude/skills/jahia-dev/SKILL.md +124 -0
- package/dist/claude/.claude/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/claude/.claude/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/claude/.claude/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/claude/.claude/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/claude/.claude/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/claude/.claude/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/claude/.claude/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/claude/.claude/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/claude/.claude/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/claude/.claude/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/claude/.claude/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/claude/.claude/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/claude/.claude/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/claude/.claude/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/claude/.claude/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/claude/.claude/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/claude/.claude/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/claude/.claude/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/claude/.claude/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/claude/.claude/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/claude/.claude/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/claude/.claude/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/claude/.claude/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/claude/.claude/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/claude/.claude/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/claude/.claude/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/claude/.claude/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/claude/.claude/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/claude/.claude/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/claude/.claude/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/claude/.claude/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/claude/.claude/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/claude/.claude/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/claude/.claude/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/claude/CLAUDE.md +90 -0
- package/dist/codex/.agents/skills/jahia/SKILL.md +136 -0
- package/dist/codex/.agents/skills/jahia-content/SKILL.md +139 -0
- package/dist/codex/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/codex/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/codex/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/codex/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/codex/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/codex/.agents/skills/jahia-dev/SKILL.md +124 -0
- package/dist/codex/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/codex/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/codex/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/codex/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/codex/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/codex/.agents/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/codex/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/codex/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/codex/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/codex/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/codex/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/codex/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/codex/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/codex/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/codex/.agents/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/codex/.agents/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/codex/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/codex/.agents/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/codex/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/codex/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/codex/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/codex/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/codex/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/codex/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/codex/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/codex/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/codex/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/codex/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/codex/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/codex/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/codex/.agents/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/codex/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/codex/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/codex/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/codex/AGENTS.md +89 -0
- package/dist/copilot/.agents/skills/jahia/SKILL.md +136 -0
- package/dist/copilot/.agents/skills/jahia-content/SKILL.md +139 -0
- package/dist/copilot/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/copilot/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/copilot/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/copilot/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/copilot/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/copilot/.agents/skills/jahia-dev/SKILL.md +124 -0
- package/dist/copilot/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/copilot/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/copilot/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/copilot/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/copilot/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/copilot/.agents/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/copilot/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/copilot/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/copilot/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/copilot/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/copilot/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/copilot/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/copilot/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/copilot/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/copilot/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/copilot/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/copilot/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/copilot/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/copilot/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/copilot/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/copilot/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/copilot/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/copilot/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/copilot/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/copilot/.agents/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/copilot/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/copilot/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/copilot/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/copilot/AGENTS.md +89 -0
- package/dist/cursor/.agents/skills/jahia/SKILL.md +136 -0
- package/dist/cursor/.agents/skills/jahia-content/SKILL.md +139 -0
- package/dist/cursor/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/cursor/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/cursor/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/cursor/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/cursor/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/cursor/.agents/skills/jahia-dev/SKILL.md +124 -0
- package/dist/cursor/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/cursor/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/cursor/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/cursor/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/cursor/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/cursor/.agents/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/cursor/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/cursor/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/cursor/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/cursor/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/cursor/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/cursor/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/cursor/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/cursor/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/cursor/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/cursor/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/cursor/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/cursor/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/cursor/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/cursor/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/cursor/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/cursor/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/cursor/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/cursor/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/cursor/.agents/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/cursor/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/cursor/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/cursor/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/cursor/.cursor/rules/jahia.mdc +80 -0
- package/dist/gemini/.agents/skills/jahia/SKILL.md +136 -0
- package/dist/gemini/.agents/skills/jahia-content/SKILL.md +139 -0
- package/dist/gemini/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/gemini/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/gemini/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/gemini/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/gemini/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/gemini/.agents/skills/jahia-dev/SKILL.md +124 -0
- package/dist/gemini/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/gemini/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/gemini/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/gemini/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/gemini/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/gemini/.agents/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/gemini/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/gemini/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/gemini/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/gemini/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/gemini/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/gemini/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/gemini/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/gemini/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/gemini/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/gemini/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/gemini/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/gemini/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/gemini/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/gemini/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/gemini/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/gemini/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/gemini/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/gemini/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/gemini/.agents/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/gemini/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/gemini/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/gemini/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/gemini/AGENTS.md +89 -0
- package/dist/gemini/GEMINI.md +6 -0
- package/dist/index.js +975 -0
- package/dist/opencode/.agents/skills/jahia/SKILL.md +136 -0
- package/dist/opencode/.agents/skills/jahia-content/SKILL.md +139 -0
- package/dist/opencode/.agents/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/opencode/.agents/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/opencode/.agents/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/opencode/.agents/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/opencode/.agents/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/opencode/.agents/skills/jahia-dev/SKILL.md +124 -0
- package/dist/opencode/.agents/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/opencode/.agents/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/opencode/.agents/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/opencode/.agents/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/opencode/.agents/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/opencode/.agents/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/opencode/.agents/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/opencode/.agents/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/opencode/.agents/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/opencode/.agents/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/opencode/.agents/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/opencode/.agents/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/opencode/.agents/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/opencode/.agents/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/opencode/.agents/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/opencode/.agents/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/opencode/.agents/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/opencode/.agents/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/opencode/.agents/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/opencode/.agents/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/opencode/.agents/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/opencode/.agents/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/opencode/.agents/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/opencode/.agents/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/opencode/.agents/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/opencode/.agents/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/opencode/.agents/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/opencode/.agents/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/opencode/AGENTS.md +89 -0
- package/dist/windsurf/.windsurf/rules/jahia.md +80 -0
- package/dist/windsurf/.windsurf/skills/jahia/SKILL.md +136 -0
- package/dist/windsurf/.windsurf/skills/jahia-content/SKILL.md +139 -0
- package/dist/windsurf/.windsurf/skills/jahia-content-create-content/SKILL.md +384 -0
- package/dist/windsurf/.windsurf/skills/jahia-content-explore-structure/SKILL.md +164 -0
- package/dist/windsurf/.windsurf/skills/jahia-content-move-content/SKILL.md +236 -0
- package/dist/windsurf/.windsurf/skills/jahia-content-query-content/SKILL.md +144 -0
- package/dist/windsurf/.windsurf/skills/jahia-content-translate-content/SKILL.md +297 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev/SKILL.md +124 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-accessibility/SKILL.md +271 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-apis/SKILL.md +52 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/authentication.md +484 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/graphql.md +657 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/jcr-api.md +465 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/security.md +541 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-build-component/SKILL.md +140 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-create-page-template/SKILL.md +303 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-create-template-set/SKILL.md +232 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-create-view/SKILL.md +838 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-cypress/SKILL.md +445 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-debug/SKILL.md +176 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-define-content-type/SKILL.md +536 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-import-from/SKILL.md +244 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/SKILL.md +105 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/backend.md +331 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/content-types.md +273 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/modules.md +218 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/osgi.md +208 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/rendering.md +191 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/ui-extensions.md +344 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-jexperience/SKILL.md +269 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-ops/SKILL.md +50 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-ops/references/docker.md +151 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-ops/references/monitoring.md +195 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-ops/references/provisioning.md +269 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-osgi-module/SKILL.md +297 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-properties/SKILL.md +147 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-properties/references/all-properties.md +231 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-query-content/SKILL.md +407 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-review/SKILL.md +228 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-screenshot/SKILL.md +177 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-start-local/SKILL.md +129 -0
- package/dist/windsurf/.windsurf/skills/jahia-dev-ui-extension/SKILL.md +559 -0
- package/dist/windsurf/AGENTS.md +89 -0
- package/package.json +28 -0
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-dev-cypress
|
|
3
|
+
description: Write and scaffold Cypress e2e tests for a Jahia JS template set. Covers directory setup, cypress.config.ts, @jahia/cypress commands, site creation/teardown, content seeding via addNode, component rendering assertions, CSS Module class selectors, and the three mandatory spec files per component.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SKILL — Jahia Cypress E2E Tests
|
|
7
|
+
|
|
8
|
+
## When this skill applies
|
|
9
|
+
|
|
10
|
+
A new component, content type, or page template has been built in a JS template set and needs Cypress coverage. Per the CTO guidelines, tests ship alongside the component — not retroactively.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Test directory layout
|
|
15
|
+
|
|
16
|
+
Tests live in a **separate `tests/` directory** at the module root — never inside `src/`.
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
<module>/
|
|
20
|
+
├── src/ ← component code
|
|
21
|
+
├── settings/
|
|
22
|
+
├── tests/ ← Cypress project (separate package)
|
|
23
|
+
│ ├── package.json
|
|
24
|
+
│ ├── cypress.config.ts
|
|
25
|
+
│ ├── .env.example
|
|
26
|
+
│ ├── cypress/
|
|
27
|
+
│ │ ├── e2e/
|
|
28
|
+
│ │ │ └── <component-name>/
|
|
29
|
+
│ │ │ ├── happy-path.cy.ts
|
|
30
|
+
│ │ │ ├── authorization.cy.ts
|
|
31
|
+
│ │ │ └── edge-cases.cy.ts
|
|
32
|
+
│ │ ├── fixtures/
|
|
33
|
+
│ │ │ └── graphql/
|
|
34
|
+
│ │ │ └── mutation/
|
|
35
|
+
│ │ │ └── *.graphql
|
|
36
|
+
│ │ ├── plugins/
|
|
37
|
+
│ │ │ └── index.js
|
|
38
|
+
│ │ └── support/
|
|
39
|
+
│ │ ├── commands.ts
|
|
40
|
+
│ │ └── constants.ts
|
|
41
|
+
│ └── results/
|
|
42
|
+
│ └── .gitignore
|
|
43
|
+
└── package.json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Step 1 — Scaffold the test package
|
|
49
|
+
|
|
50
|
+
Create `tests/package.json`:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"name": "<module-name>-cypress",
|
|
55
|
+
"private": true,
|
|
56
|
+
"scripts": {
|
|
57
|
+
"e2e:ci": "cypress run",
|
|
58
|
+
"e2e:debug": "cypress open"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@jahia/cypress": "^7.1.0",
|
|
62
|
+
"cypress": "^14.0.0",
|
|
63
|
+
"cypress-terminal-report": "^5.3.12",
|
|
64
|
+
"typescript": "^5.0.0"
|
|
65
|
+
},
|
|
66
|
+
"packageManager": "yarn@4.12.0"
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Install:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
cd tests && yarn install
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Step 2 — cypress.config.ts
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
// tests/cypress.config.ts
|
|
82
|
+
import { defineConfig } from 'cypress'
|
|
83
|
+
import * as fs from 'node:fs'
|
|
84
|
+
|
|
85
|
+
export default defineConfig({
|
|
86
|
+
chromeWebSecurity: false,
|
|
87
|
+
defaultCommandTimeout: 10000,
|
|
88
|
+
requestTimeout: 300000, // 5 min — site provisioning is slow
|
|
89
|
+
responseTimeout: 300000,
|
|
90
|
+
viewportWidth: 1366,
|
|
91
|
+
viewportHeight: 768,
|
|
92
|
+
watchForFileChanges: false,
|
|
93
|
+
screenshotsFolder: './results/screenshots',
|
|
94
|
+
videosFolder: './results/videos',
|
|
95
|
+
e2e: {
|
|
96
|
+
baseUrl: 'http://localhost:8080',
|
|
97
|
+
specPattern: ['**/**.cy.ts'],
|
|
98
|
+
setupNodeEvents(on, config) {
|
|
99
|
+
require('@jahia/cypress/dist/plugins/registerPlugins').registerPlugins(on, config)
|
|
100
|
+
require('cypress-terminal-report/src/installLogsPrinter')(on, {
|
|
101
|
+
printLogsToConsole: 'onFail',
|
|
102
|
+
outputRoot: config.projectRoot + '/results/',
|
|
103
|
+
})
|
|
104
|
+
on('task', {
|
|
105
|
+
readFileMaybe(filename) {
|
|
106
|
+
if (fs.existsSync(filename)) return fs.readFileSync(filename, 'utf8')
|
|
107
|
+
return null
|
|
108
|
+
},
|
|
109
|
+
})
|
|
110
|
+
return config
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
})
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Step 3 — constants.ts
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
// tests/cypress/support/constants.ts
|
|
122
|
+
export const SITE_KEY = '<module-name>-tests'
|
|
123
|
+
export const TEMPLATE_SET = '<module-name>' // matches module name in package.json
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Step 4 — The three mandatory spec files
|
|
129
|
+
|
|
130
|
+
Every component ships exactly these three files. Adapt to the component under test.
|
|
131
|
+
|
|
132
|
+
### `happy-path.cy.ts` — component renders correctly with valid content
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
import { addNode, createSite, deleteSite, publishAndWaitJobEnding } from '@jahia/cypress'
|
|
136
|
+
import { SITE_KEY, TEMPLATE_SET } from '../../support/constants'
|
|
137
|
+
|
|
138
|
+
describe('<ComponentName> — happy path', () => {
|
|
139
|
+
before(() => {
|
|
140
|
+
cy.login()
|
|
141
|
+
createSite(SITE_KEY, {
|
|
142
|
+
templateSet: TEMPLATE_SET,
|
|
143
|
+
locale: 'en',
|
|
144
|
+
languages: 'en,fr',
|
|
145
|
+
serverName: 'localhost',
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
// Seed a page with a test component
|
|
149
|
+
addNode({
|
|
150
|
+
parentPathOrId: `/sites/${SITE_KEY}/home`,
|
|
151
|
+
name: 'testPage',
|
|
152
|
+
primaryNodeType: 'jnt:page',
|
|
153
|
+
properties: [
|
|
154
|
+
{ name: 'jcr:title', value: 'Test Page', language: 'en' },
|
|
155
|
+
{ name: 'j:templateName', value: 'simple' },
|
|
156
|
+
],
|
|
157
|
+
}).then(() => {
|
|
158
|
+
addNode({
|
|
159
|
+
parentPathOrId: `/sites/${SITE_KEY}/home/testPage/pagecontent`,
|
|
160
|
+
name: 'myComponent',
|
|
161
|
+
primaryNodeType: 'ns:myComponentType',
|
|
162
|
+
properties: [
|
|
163
|
+
{ name: 'title', value: 'Hello World', language: 'en' },
|
|
164
|
+
{ name: 'subtitle', value: 'A subtitle', language: 'en' },
|
|
165
|
+
],
|
|
166
|
+
})
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
publishAndWaitJobEnding(`/sites/${SITE_KEY}`, ['en', 'fr'])
|
|
170
|
+
cy.logout()
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
after(() => {
|
|
174
|
+
cy.login()
|
|
175
|
+
deleteSite(SITE_KEY)
|
|
176
|
+
cy.logout()
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
beforeEach(() => cy.login())
|
|
180
|
+
afterEach(() => cy.logout())
|
|
181
|
+
|
|
182
|
+
it('renders the component in live mode', () => {
|
|
183
|
+
cy.visit(`/sites/${SITE_KEY}/home/testPage.html`)
|
|
184
|
+
cy.get('[data-testid="my-component"]').should('be.visible')
|
|
185
|
+
cy.contains('Hello World')
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
it('renders the component in FR locale', () => {
|
|
189
|
+
cy.visit(`/fr/sites/${SITE_KEY}/home/testPage.html`)
|
|
190
|
+
cy.get('[data-testid="my-component"]').should('be.visible')
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
it('renders the component in preview mode', () => {
|
|
194
|
+
cy.visit(`/cms/render/default/en/sites/${SITE_KEY}/home/testPage.html`)
|
|
195
|
+
cy.get('[data-testid="my-component"]').should('be.visible')
|
|
196
|
+
})
|
|
197
|
+
})
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### `authorization.cy.ts` — access control
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
import { addNode, createSite, deleteSite, publishAndWaitJobEnding } from '@jahia/cypress'
|
|
204
|
+
import { SITE_KEY, TEMPLATE_SET } from '../../support/constants'
|
|
205
|
+
|
|
206
|
+
describe('<ComponentName> — authorization', () => {
|
|
207
|
+
before(() => {
|
|
208
|
+
cy.login()
|
|
209
|
+
createSite(SITE_KEY, {
|
|
210
|
+
templateSet: TEMPLATE_SET,
|
|
211
|
+
locale: 'en',
|
|
212
|
+
serverName: 'localhost',
|
|
213
|
+
})
|
|
214
|
+
publishAndWaitJobEnding(`/sites/${SITE_KEY}`, ['en'])
|
|
215
|
+
cy.logout()
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
after(() => {
|
|
219
|
+
cy.login()
|
|
220
|
+
deleteSite(SITE_KEY)
|
|
221
|
+
cy.logout()
|
|
222
|
+
})
|
|
223
|
+
|
|
224
|
+
it('live page is publicly accessible without login', () => {
|
|
225
|
+
// No cy.login() — verify anonymous access
|
|
226
|
+
cy.visit(`/sites/${SITE_KEY}/home.html`)
|
|
227
|
+
cy.get('body').should('be.visible')
|
|
228
|
+
// Should NOT redirect to login
|
|
229
|
+
cy.url().should('not.include', '/login')
|
|
230
|
+
})
|
|
231
|
+
|
|
232
|
+
it('default workspace requires authentication', () => {
|
|
233
|
+
cy.visit(`/cms/render/default/en/sites/${SITE_KEY}/home.html`)
|
|
234
|
+
// Unauthenticated → redirected to login or 401
|
|
235
|
+
cy.url().should('satisfy', (url: string) =>
|
|
236
|
+
url.includes('/login') || url.includes('/logout')
|
|
237
|
+
)
|
|
238
|
+
})
|
|
239
|
+
|
|
240
|
+
it('admin can access jcontent for the site', () => {
|
|
241
|
+
cy.login()
|
|
242
|
+
cy.visit(`/jahia/jcontent/${SITE_KEY}/en/pages`)
|
|
243
|
+
cy.get('body').should('be.visible')
|
|
244
|
+
cy.url().should('not.include', '/login')
|
|
245
|
+
cy.logout()
|
|
246
|
+
})
|
|
247
|
+
})
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### `edge-cases.cy.ts` — empty values, missing optional fields, boundary conditions
|
|
251
|
+
|
|
252
|
+
```typescript
|
|
253
|
+
import { addNode, createSite, deleteSite, publishAndWaitJobEnding } from '@jahia/cypress'
|
|
254
|
+
import { SITE_KEY, TEMPLATE_SET } from '../../support/constants'
|
|
255
|
+
|
|
256
|
+
describe('<ComponentName> — edge cases', () => {
|
|
257
|
+
before(() => {
|
|
258
|
+
cy.login()
|
|
259
|
+
createSite(SITE_KEY, {
|
|
260
|
+
templateSet: TEMPLATE_SET,
|
|
261
|
+
locale: 'en',
|
|
262
|
+
serverName: 'localhost',
|
|
263
|
+
})
|
|
264
|
+
|
|
265
|
+
// Seed a component with only mandatory fields — all optionals missing
|
|
266
|
+
addNode({
|
|
267
|
+
parentPathOrId: `/sites/${SITE_KEY}/home`,
|
|
268
|
+
name: 'testPage',
|
|
269
|
+
primaryNodeType: 'jnt:page',
|
|
270
|
+
properties: [
|
|
271
|
+
{ name: 'jcr:title', value: 'Edge Case Page', language: 'en' },
|
|
272
|
+
{ name: 'j:templateName', value: 'simple' },
|
|
273
|
+
],
|
|
274
|
+
}).then(() => {
|
|
275
|
+
addNode({
|
|
276
|
+
parentPathOrId: `/sites/${SITE_KEY}/home/testPage/pagecontent`,
|
|
277
|
+
name: 'emptyComponent',
|
|
278
|
+
primaryNodeType: 'ns:myComponentType',
|
|
279
|
+
// Only mandatory properties — no optional ones
|
|
280
|
+
properties: [
|
|
281
|
+
{ name: 'title', value: 'Minimal', language: 'en' },
|
|
282
|
+
],
|
|
283
|
+
})
|
|
284
|
+
})
|
|
285
|
+
|
|
286
|
+
publishAndWaitJobEnding(`/sites/${SITE_KEY}`, ['en'])
|
|
287
|
+
cy.logout()
|
|
288
|
+
})
|
|
289
|
+
|
|
290
|
+
after(() => {
|
|
291
|
+
cy.login()
|
|
292
|
+
deleteSite(SITE_KEY)
|
|
293
|
+
cy.logout()
|
|
294
|
+
})
|
|
295
|
+
|
|
296
|
+
it('renders without errors when optional fields are empty', () => {
|
|
297
|
+
cy.visit(`/sites/${SITE_KEY}/home/testPage.html`)
|
|
298
|
+
// No JS errors
|
|
299
|
+
cy.on('uncaught:exception', () => false) // log but don't fail on known framework noise
|
|
300
|
+
cy.get('[data-testid="my-component"]').should('exist')
|
|
301
|
+
// Optional subtitle should not render a broken element
|
|
302
|
+
cy.get('[data-testid="subtitle"]').should('not.exist')
|
|
303
|
+
})
|
|
304
|
+
|
|
305
|
+
it('page does not return 500 for any seeded content', () => {
|
|
306
|
+
cy.request(`/sites/${SITE_KEY}/home/testPage.html`).its('status').should('eq', 200)
|
|
307
|
+
})
|
|
308
|
+
})
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Step 5 — Seeding content via GraphQL (alternative to `addNode`)
|
|
314
|
+
|
|
315
|
+
For complex mutations (adding mixins, setting weakreference properties, bulk batches), use `.graphql` fixture files:
|
|
316
|
+
|
|
317
|
+
```graphql
|
|
318
|
+
# tests/cypress/fixtures/graphql/mutation/seedMyComponent.graphql
|
|
319
|
+
mutation seedMyComponent($parentPath: String!, $imageUuid: String!) {
|
|
320
|
+
jcr {
|
|
321
|
+
mutateNode(pathOrId: $parentPath) {
|
|
322
|
+
addChild(
|
|
323
|
+
name: "myComponent"
|
|
324
|
+
primaryNodeType: "ns:myComponentType"
|
|
325
|
+
properties: [
|
|
326
|
+
{ name: "title", value: "Test Title", language: "en" }
|
|
327
|
+
{ name: "image", type: WEAKREFERENCE, value: $imageUuid }
|
|
328
|
+
]
|
|
329
|
+
) { uuid }
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Call from a test:
|
|
336
|
+
|
|
337
|
+
```typescript
|
|
338
|
+
cy.apollo({
|
|
339
|
+
mutationFile: 'graphql/mutation/seedMyComponent.graphql',
|
|
340
|
+
variables: { parentPath: `/sites/${SITE_KEY}/home/testPage/pagecontent`, imageUuid },
|
|
341
|
+
})
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## Step 6 — Targeting CSS Module classes
|
|
347
|
+
|
|
348
|
+
CSS Modules hash class names at build time. Never target `.myClass` directly — use the `[class*=]` attribute selector to match the unhashed portion:
|
|
349
|
+
|
|
350
|
+
```typescript
|
|
351
|
+
// ❌ Fragile — class name is hashed
|
|
352
|
+
cy.get('.card_abc123').should('exist')
|
|
353
|
+
|
|
354
|
+
// ✅ Stable — matches the un-hashed segment
|
|
355
|
+
cy.get('[class*="_card_"]').should('exist')
|
|
356
|
+
cy.get('[class*="_card_"]').first().click()
|
|
357
|
+
|
|
358
|
+
// ✅ Better — add data-testid to the component and target that
|
|
359
|
+
cy.get('[data-testid="hero-banner"]').should('be.visible')
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
**Preferred approach**: add `data-testid` attributes to component root elements in production views. They survive CSS Module renaming and minification:
|
|
363
|
+
|
|
364
|
+
```tsx
|
|
365
|
+
// In default.server.tsx
|
|
366
|
+
<section data-testid="hero-banner" className={styles.hero}>
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## Step 7 — Locale assertions
|
|
372
|
+
|
|
373
|
+
Always test at least EN and FR. Use `cy.visit` with the locale prefix for FR:
|
|
374
|
+
|
|
375
|
+
```typescript
|
|
376
|
+
// EN (default)
|
|
377
|
+
cy.visit(`/sites/${SITE_KEY}/home/testPage.html`)
|
|
378
|
+
|
|
379
|
+
// FR
|
|
380
|
+
cy.visit(`/fr/sites/${SITE_KEY}/home/testPage.html`)
|
|
381
|
+
|
|
382
|
+
// Assert locale-specific content
|
|
383
|
+
cy.contains('Découvrir plus') // FR CTA label
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## `@jahia/cypress` API reference
|
|
389
|
+
|
|
390
|
+
| Function | Import | Purpose |
|
|
391
|
+
|---|---|---|
|
|
392
|
+
| `cy.login()` | built-in command | Log in as root (uses `SUPER_USER_PASSWORD` env var, default `root1234`) |
|
|
393
|
+
| `cy.logout()` | built-in command | Log out |
|
|
394
|
+
| `cy.apollo({ mutationFile, variables })` | built-in command | Execute a GraphQL mutation from a fixture file |
|
|
395
|
+
| `cy.runProvisioningScript({ script })` | built-in command | Run a Jahia provisioning YAML |
|
|
396
|
+
| `createSite(siteKey, options)` | `@jahia/cypress` | Create a site programmatically |
|
|
397
|
+
| `deleteSite(siteKey)` | `@jahia/cypress` | Delete a site (use in `after`) |
|
|
398
|
+
| `addNode(variables)` | `@jahia/cypress` | Create a JCR node via GraphQL |
|
|
399
|
+
| `publishAndWaitJobEnding(path, locales?)` | `@jahia/cypress` | Publish content and block until the job completes |
|
|
400
|
+
| `uploadFile(path, target, name, mimeType)` | `@jahia/cypress` | Upload a file to the JCR |
|
|
401
|
+
|
|
402
|
+
`createSite` options:
|
|
403
|
+
|
|
404
|
+
```typescript
|
|
405
|
+
createSite(SITE_KEY, {
|
|
406
|
+
templateSet: 'my-module', // module name
|
|
407
|
+
locale: 'en', // default locale
|
|
408
|
+
languages: 'en,fr', // all activated locales (comma-separated)
|
|
409
|
+
serverName: 'localhost',
|
|
410
|
+
})
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
## Common pitfalls
|
|
416
|
+
|
|
417
|
+
| Pitfall | Consequence |
|
|
418
|
+
|---|---|
|
|
419
|
+
| Missing `publishAndWaitJobEnding` after seeding | Tests run against unpublished content; live page returns stale or empty render |
|
|
420
|
+
| Targeting hashed CSS Module class names directly | Tests break on every rebuild |
|
|
421
|
+
| Skipping FR assertions | i18n regressions go undetected |
|
|
422
|
+
| No `after` hook to delete the site | Test sites accumulate on the Jahia instance and pollute subsequent runs |
|
|
423
|
+
| Running `createSite` without first deleting — no teardown in prior run | Site creation fails because the key already exists |
|
|
424
|
+
| Relying on a pre-existing site instead of seeding | Tests are not self-contained and fail on a clean Jahia instance |
|
|
425
|
+
| Not wrapping login/logout in `beforeEach`/`afterEach` | Session bleeds across tests; order-dependent failures |
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## Running tests
|
|
430
|
+
|
|
431
|
+
```bash
|
|
432
|
+
# Against local Jahia (http://localhost:8080)
|
|
433
|
+
cd tests
|
|
434
|
+
yarn e2e:debug # opens Cypress UI
|
|
435
|
+
yarn e2e:ci # headless, for CI
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
Jahia must be running and the module deployed before running tests. Deploy first:
|
|
439
|
+
|
|
440
|
+
```bash
|
|
441
|
+
# From module root
|
|
442
|
+
yarn build && yarn jahia-deploy
|
|
443
|
+
# Then run tests
|
|
444
|
+
cd tests && yarn e2e:ci
|
|
445
|
+
```
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jahia-dev-debug
|
|
3
|
+
description: Debugs a Jahia JavaScript module end-to-end — build, deploy, and runtime errors. Finds the first error after deployment using live Docker logs.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill: jahia-dev-debug
|
|
7
|
+
|
|
8
|
+
Diagnoses why a Jahia JavaScript module fails to load. Follows the deployment pipeline from source to runtime.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Step 1 — Build
|
|
13
|
+
|
|
14
|
+
From the module directory (where `package.json` is):
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
yarn build
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
- **Build fails** → fix the TypeScript / bundling error shown and stop here. Do not proceed to deploy until the build is clean.
|
|
21
|
+
- **Build succeeds** → proceed to Step 2.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Step 2 — Deploy
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
yarn jahia-deploy
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Interpret the output:
|
|
32
|
+
- `"Operation successful"` in the response → deployment was accepted. Proceed to Step 3 — the module may still fail at runtime.
|
|
33
|
+
- `"{}"` or empty JSON → deployment was **rejected** (usually a CND parse error or missing dependency). Proceed to Step 3 to find the cause in the logs.
|
|
34
|
+
- Any other error → fix the connection issue (is Docker running?) then retry.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Step 3 — Watch live Docker logs
|
|
39
|
+
|
|
40
|
+
> Do NOT analyse logs that already exist — an old error is not necessarily the cause of the current issue. Start a fresh log stream, then deploy again to capture only what happens as a result of this deployment.
|
|
41
|
+
|
|
42
|
+
### 3a — Start watching logs in the background
|
|
43
|
+
|
|
44
|
+
Find the Jahia container name:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
docker ps --format '{{.Names}}' | grep -i jahia | head -1
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Then start tailing:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
docker logs -f <container-name> 2>&1 | grep -v "^\s*$" &
|
|
54
|
+
LOG_PID=$!
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 3b — Deploy again while logs are streaming
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
yarn jahia-deploy
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 3c — Wait ~15 seconds, then stop the log stream
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
sleep 15 && kill $LOG_PID 2>/dev/null
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 3d — Verify component registration
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
docker logs <container-name> 2>&1 | grep "Registered Jahia component"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Expected: one line per view registered, e.g.:
|
|
76
|
+
```
|
|
77
|
+
Registered Jahia component: mymodule_view_ns:hero_default
|
|
78
|
+
Registered Jahia component: mymodule_view_ns:hero_small
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
If a component you just deployed is **absent** from this list, its `jahiaComponent` call was never reached — usually a syntax/import error in the view file that prevented the module from fully loading.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Step 4 — Find the first error
|
|
86
|
+
|
|
87
|
+
Scan the captured log output for the **first** error that appears **after** the deploy timestamp. Common patterns to look for:
|
|
88
|
+
|
|
89
|
+
| Pattern | Likely cause |
|
|
90
|
+
|---|---|
|
|
91
|
+
| `CND parse error` / `invalid node type` | CND syntax error or illegal field declaration |
|
|
92
|
+
| `NoSuchNodeTypeException` | A referenced type doesn't exist (wrong namespace, typo, missing dependency) |
|
|
93
|
+
| `ClassNotFoundException` / `NoClassDefFoundError` | Java dependency missing |
|
|
94
|
+
| `Cannot set property` / `TypeError` in JS stack | View runtime error |
|
|
95
|
+
| `Module ... failed to start` | Any of the above |
|
|
96
|
+
| `Unresolved requirement` | OSGi dependency not satisfied |
|
|
97
|
+
| Missing `Registered Jahia component` for a specific type | View file has a syntax/import error, or `jahiaComponent` not reached |
|
|
98
|
+
|
|
99
|
+
**Focus on the first error, not the last.** Later errors are often cascading failures caused by the first one.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Step 5 — Fix and retry
|
|
104
|
+
|
|
105
|
+
Once the root cause is identified:
|
|
106
|
+
|
|
107
|
+
1. Fix the issue in the source files
|
|
108
|
+
2. Run `yarn build` again
|
|
109
|
+
3. Go back to Step 2
|
|
110
|
+
|
|
111
|
+
Repeat until `yarn jahia-deploy` succeeds and the module loads cleanly (no errors in the 15-second window after deploy).
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Common fixes by error type
|
|
116
|
+
|
|
117
|
+
### CND: `j:linknode` or `j:url` declared explicitly
|
|
118
|
+
These fields are injected by Jahia's `linkTypeInitializer` mixin. Remove them from the CND.
|
|
119
|
+
|
|
120
|
+
### CND: unknown mixin or type
|
|
121
|
+
Check that the namespace is declared at the top of `settings/definitions.cnd` and that all referenced types exist.
|
|
122
|
+
|
|
123
|
+
### import.xml: reference to a non-existent type
|
|
124
|
+
Any `jcr:primaryType` or `jcr:mixinTypes` value in `import.xml` must exist in the deployed CND. Check for typos.
|
|
125
|
+
|
|
126
|
+
### import.xml: `jmix:nolive` used as `jcr:primaryType`
|
|
127
|
+
`jmix:nolive` is a mixin — it goes in `jcr:mixinTypes`, not `jcr:primaryType`.
|
|
128
|
+
|
|
129
|
+
### import.xml: OSGi fails with `missing requirement … (nodetypes=jmix:nolive)`
|
|
130
|
+
Every `jcr:mixinTypes` value in `import.xml` is scanned by the OSGi bundle resolver. If the mixin is not declared in the module's own CND and is not provided by a resolvable dependency, the bundle will not start. Correct spelling is `jmix:nolive` (all lowercase). Verify the mixin exists in your Jahia instance before using it in `import.xml`.
|
|
131
|
+
|
|
132
|
+
### View: module loads but page is blank
|
|
133
|
+
Run `yarn dev` and check the Vite / SSR console for a React render error.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## GraalJS (server-side JS) debugging with Chrome DevTools
|
|
138
|
+
|
|
139
|
+
Use this when you need to step through server-side view code running inside GraalVM.
|
|
140
|
+
|
|
141
|
+
### Step 1 — Enable the inspector via GraphQL
|
|
142
|
+
|
|
143
|
+
In Jahia's Developer Tools > GraphQL editor, run:
|
|
144
|
+
|
|
145
|
+
```graphql
|
|
146
|
+
mutation {
|
|
147
|
+
admin {
|
|
148
|
+
jahia {
|
|
149
|
+
configuration(pid: "org.jahia.modules.javascript.modules.engine.jsengine.GraalVMEngine") {
|
|
150
|
+
polyGlotInspect: value(name: "polyglot.inspect", value: "0.0.0.0:9229")
|
|
151
|
+
polyGlotInspectSuspend: value(name: "polyglot.inspect.Suspend", value: "false")
|
|
152
|
+
polyGlotInspectSecure: value(name: "polyglot.inspect.Secure", value: "false")
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Step 2 — Map the port
|
|
160
|
+
|
|
161
|
+
If running in Docker, ensure port `9229` is mapped in `docker-compose.yml`:
|
|
162
|
+
|
|
163
|
+
```yaml
|
|
164
|
+
ports:
|
|
165
|
+
- "9229:9229"
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Step 3 — Connect Chrome
|
|
169
|
+
|
|
170
|
+
After the mutation, Jahia logs a `devtools://...` URL. Open it in Chrome (use latest; Chrome 117–118 had known debugger bugs).
|
|
171
|
+
|
|
172
|
+
### Step 4 — Set a breakpoint and debug
|
|
173
|
+
|
|
174
|
+
In Chrome DevTools Sources tab, open `<module>/dist/main.js`, set a breakpoint, then reload the page. The server-side render pauses at the breakpoint. Full scope inspection, step-over, and continue are supported.
|
|
175
|
+
|
|
176
|
+
The config file `org.jahia.modules.javascript.modules.engine.jsengine.GraalVMEngine.cfg` accepts any `polyglot.*` key as an engine option — you can persist these settings there instead of using the GraphQL mutation.
|