From 6496da321ddbd475734ab00f2e30dbd4803ebed8 Mon Sep 17 00:00:00 2001 From: David Mattei Date: Sat, 5 Oct 2024 11:30:01 +0200 Subject: [PATCH 01/17] feat: setup vitepress in doc folder --- doc/.gitignore | 1 + doc/.vitepress/config.mts | 28 + doc/.vitepress/theme/index.ts | 17 + doc/.vitepress/theme/style.css | 139 ++ doc/api-examples.md | 49 + doc/index.md | 25 + doc/markdown-examples.md | 85 ++ doc/package-lock.json | 2345 ++++++++++++++++++++++++++++++++ doc/package.json | 10 + 9 files changed, 2699 insertions(+) create mode 100644 doc/.gitignore create mode 100644 doc/.vitepress/config.mts create mode 100644 doc/.vitepress/theme/index.ts create mode 100644 doc/.vitepress/theme/style.css create mode 100644 doc/api-examples.md create mode 100644 doc/index.md create mode 100644 doc/markdown-examples.md create mode 100644 doc/package-lock.json create mode 100644 doc/package.json diff --git a/doc/.gitignore b/doc/.gitignore new file mode 100644 index 000000000..2ccbe4656 --- /dev/null +++ b/doc/.gitignore @@ -0,0 +1 @@ +/node_modules/ diff --git a/doc/.vitepress/config.mts b/doc/.vitepress/config.mts new file mode 100644 index 000000000..7a6d30afc --- /dev/null +++ b/doc/.vitepress/config.mts @@ -0,0 +1,28 @@ +import { defineConfig } from 'vitepress' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "My Awesome Project", + description: "A VitePress Site", + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + nav: [ + { text: 'Home', link: '/' }, + { text: 'Examples', link: '/markdown-examples' } + ], + + sidebar: [ + { + text: 'Examples', + items: [ + { text: 'Markdown Examples', link: '/markdown-examples' }, + { text: 'Runtime API Examples', link: '/api-examples' } + ] + } + ], + + socialLinks: [ + { icon: 'github', link: 'https://github.com/vuejs/vitepress' } + ] + } +}) diff --git a/doc/.vitepress/theme/index.ts b/doc/.vitepress/theme/index.ts new file mode 100644 index 000000000..def4cfc87 --- /dev/null +++ b/doc/.vitepress/theme/index.ts @@ -0,0 +1,17 @@ +// https://vitepress.dev/guide/custom-theme +import { h } from 'vue' +import type { Theme } from 'vitepress' +import DefaultTheme from 'vitepress/theme' +import './style.css' + +export default { + extends: DefaultTheme, + Layout: () => { + return h(DefaultTheme.Layout, null, { + // https://vitepress.dev/guide/extending-default-theme#layout-slots + }) + }, + enhanceApp({ app, router, siteData }) { + // ... + } +} satisfies Theme diff --git a/doc/.vitepress/theme/style.css b/doc/.vitepress/theme/style.css new file mode 100644 index 000000000..d63aee82d --- /dev/null +++ b/doc/.vitepress/theme/style.css @@ -0,0 +1,139 @@ +/** + * Customize default theme styling by overriding CSS variables: + * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css + */ + +/** + * Colors + * + * Each colors have exact same color scale system with 3 levels of solid + * colors with different brightness, and 1 soft color. + * + * - `XXX-1`: The most solid color used mainly for colored text. It must + * satisfy the contrast ratio against when used on top of `XXX-soft`. + * + * - `XXX-2`: The color used mainly for hover state of the button. + * + * - `XXX-3`: The color for solid background, such as bg color of the button. + * It must satisfy the contrast ratio with pure white (#ffffff) text on + * top of it. + * + * - `XXX-soft`: The color used for subtle background such as custom container + * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors + * on top of it. + * + * The soft color must be semi transparent alpha channel. This is crucial + * because it allows adding multiple "soft" colors on top of each other + * to create a accent, such as when having inline code block inside + * custom containers. + * + * - `default`: The color used purely for subtle indication without any + * special meanings attched to it such as bg color for menu hover state. + * + * - `brand`: Used for primary brand colors, such as link text, button with + * brand theme, etc. + * + * - `tip`: Used to indicate useful information. The default theme uses the + * brand color for this by default. + * + * - `warning`: Used to indicate warning to the users. Used in custom + * container, badges, etc. + * + * - `danger`: Used to show error, or dangerous message to the users. Used + * in custom container, badges, etc. + * -------------------------------------------------------------------------- */ + + :root { + --vp-c-default-1: var(--vp-c-gray-1); + --vp-c-default-2: var(--vp-c-gray-2); + --vp-c-default-3: var(--vp-c-gray-3); + --vp-c-default-soft: var(--vp-c-gray-soft); + + --vp-c-brand-1: var(--vp-c-indigo-1); + --vp-c-brand-2: var(--vp-c-indigo-2); + --vp-c-brand-3: var(--vp-c-indigo-3); + --vp-c-brand-soft: var(--vp-c-indigo-soft); + + --vp-c-tip-1: var(--vp-c-brand-1); + --vp-c-tip-2: var(--vp-c-brand-2); + --vp-c-tip-3: var(--vp-c-brand-3); + --vp-c-tip-soft: var(--vp-c-brand-soft); + + --vp-c-warning-1: var(--vp-c-yellow-1); + --vp-c-warning-2: var(--vp-c-yellow-2); + --vp-c-warning-3: var(--vp-c-yellow-3); + --vp-c-warning-soft: var(--vp-c-yellow-soft); + + --vp-c-danger-1: var(--vp-c-red-1); + --vp-c-danger-2: var(--vp-c-red-2); + --vp-c-danger-3: var(--vp-c-red-3); + --vp-c-danger-soft: var(--vp-c-red-soft); +} + +/** + * Component: Button + * -------------------------------------------------------------------------- */ + +:root { + --vp-button-brand-border: transparent; + --vp-button-brand-text: var(--vp-c-white); + --vp-button-brand-bg: var(--vp-c-brand-3); + --vp-button-brand-hover-border: transparent; + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-hover-bg: var(--vp-c-brand-2); + --vp-button-brand-active-border: transparent; + --vp-button-brand-active-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-c-brand-1); +} + +/** + * Component: Home + * -------------------------------------------------------------------------- */ + +:root { + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient( + 120deg, + #bd34fe 30%, + #41d1ff + ); + + --vp-home-hero-image-background-image: linear-gradient( + -45deg, + #bd34fe 50%, + #47caff 50% + ); + --vp-home-hero-image-filter: blur(44px); +} + +@media (min-width: 640px) { + :root { + --vp-home-hero-image-filter: blur(56px); + } +} + +@media (min-width: 960px) { + :root { + --vp-home-hero-image-filter: blur(68px); + } +} + +/** + * Component: Custom Block + * -------------------------------------------------------------------------- */ + +:root { + --vp-custom-block-tip-border: transparent; + --vp-custom-block-tip-text: var(--vp-c-text-1); + --vp-custom-block-tip-bg: var(--vp-c-brand-soft); + --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft); +} + +/** + * Component: Algolia + * -------------------------------------------------------------------------- */ + +.DocSearch { + --docsearch-primary-color: var(--vp-c-brand-1) !important; +} + diff --git a/doc/api-examples.md b/doc/api-examples.md new file mode 100644 index 000000000..6bd8bb5c1 --- /dev/null +++ b/doc/api-examples.md @@ -0,0 +1,49 @@ +--- +outline: deep +--- + +# Runtime API Examples + +This page demonstrates usage of some of the runtime APIs provided by VitePress. + +The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files: + +```md + + +## Results + +### Theme Data +
{{ theme }}
+ +### Page Data +
{{ page }}
+ +### Page Frontmatter +
{{ frontmatter }}
+``` + + + +## Results + +### Theme Data +
{{ theme }}
+ +### Page Data +
{{ page }}
+ +### Page Frontmatter +
{{ frontmatter }}
+ +## More + +Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata). diff --git a/doc/index.md b/doc/index.md new file mode 100644 index 000000000..1b805260a --- /dev/null +++ b/doc/index.md @@ -0,0 +1,25 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "My Awesome Project" + text: "A VitePress Site" + tagline: My great project tagline + actions: + - theme: brand + text: Markdown Examples + link: /markdown-examples + - theme: alt + text: API Examples + link: /api-examples + +features: + - title: Feature A + details: Lorem ipsum dolor sit amet, consectetur adipiscing elit + - title: Feature B + details: Lorem ipsum dolor sit amet, consectetur adipiscing elit + - title: Feature C + details: Lorem ipsum dolor sit amet, consectetur adipiscing elit +--- + diff --git a/doc/markdown-examples.md b/doc/markdown-examples.md new file mode 100644 index 000000000..f9258a550 --- /dev/null +++ b/doc/markdown-examples.md @@ -0,0 +1,85 @@ +# Markdown Extension Examples + +This page demonstrates some of the built-in markdown extensions provided by VitePress. + +## Syntax Highlighting + +VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting: + +**Input** + +````md +```js{4} +export default { + data () { + return { + msg: 'Highlighted!' + } + } +} +``` +```` + +**Output** + +```js{4} +export default { + data () { + return { + msg: 'Highlighted!' + } + } +} +``` + +## Custom Containers + +**Input** + +```md +::: info +This is an info box. +::: + +::: tip +This is a tip. +::: + +::: warning +This is a warning. +::: + +::: danger +This is a dangerous warning. +::: + +::: details +This is a details block. +::: +``` + +**Output** + +::: info +This is an info box. +::: + +::: tip +This is a tip. +::: + +::: warning +This is a warning. +::: + +::: danger +This is a dangerous warning. +::: + +::: details +This is a details block. +::: + +## More + +Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown). diff --git a/doc/package-lock.json b/doc/package-lock.json new file mode 100644 index 000000000..9033fa900 --- /dev/null +++ b/doc/package-lock.json @@ -0,0 +1,2345 @@ +{ + "name": "doc", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "vitepress": "^1.3.4" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "dev": true, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz", + "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.24.0" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz", + "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==", + "dev": true + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz", + "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.24.0" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz", + "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-account/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-account/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz", + "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-analytics/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-analytics/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.7.0.tgz", + "integrity": "sha512-hrYlN9yNQukmNj8bBlw9PCXi9jmRQqNUXaG6MXH1aDabjO6YD1WPVqTvaELbIBgTbDJzCn0R2owms0uaxQkjUg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz", + "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-personalization/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.7.0.tgz", + "integrity": "sha512-0Frfjt4oxvVP2qsTQAjwdaG5SvJ3TbHBkBrS6M7cG5RDrgHqOrhBnBGCFT+YO3CeNK54r+d57oB1VcD2F1lHuQ==", + "dev": true, + "peer": true, + "dependencies": { + "@algolia/client-common": "5.7.0", + "@algolia/requester-browser-xhr": "5.7.0", + "@algolia/requester-fetch": "5.7.0", + "@algolia/requester-node-http": "5.7.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/logger-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz", + "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==", + "dev": true + }, + "node_modules/@algolia/logger-console": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz", + "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==", + "dev": true, + "dependencies": { + "@algolia/logger-common": "4.24.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz", + "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==", + "dev": true, + "dependencies": { + "@algolia/cache-browser-local-storage": "4.24.0", + "@algolia/cache-common": "4.24.0", + "@algolia/cache-in-memory": "4.24.0", + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/logger-console": "4.24.0", + "@algolia/requester-browser-xhr": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/requester-node-http": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/requester-browser-xhr": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", + "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/requester-node-http": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", + "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.7.0.tgz", + "integrity": "sha512-ohtIp+lyTGM3agrHyedC3w7ijfdUvSN6wmGuKqUezrNzd0nCkFoLW0OINlyv1ODrTEVnL8PAM/Zqubjafxd/Ww==", + "dev": true, + "peer": true, + "dependencies": { + "@algolia/client-common": "5.7.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz", + "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==", + "dev": true + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.7.0.tgz", + "integrity": "sha512-Eg8cBhNg2QNnDDldyK77aXvg3wIc5qnpCDCAJXQ2oaqZwwvvYaTgnP1ofznNG6+klri4Fk1YAaC9wyDBhByWIA==", + "dev": true, + "peer": true, + "dependencies": { + "@algolia/client-common": "5.7.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.7.0.tgz", + "integrity": "sha512-8BDssYEkcp1co06KtHO9b37H+5zVM/h+5kyesJb2C2EHFO3kgzLHWl/JyXOVtYlKQBkmdObYOI0s6JaXRy2yQA==", + "dev": true, + "peer": true, + "dependencies": { + "@algolia/client-common": "5.7.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz", + "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", + "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", + "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.2.tgz", + "integrity": "sha512-vKNZepO2j7MrYBTZIGXvlUOIR+v9KRf70FApRgovWrj3GTs1EITz/Xb0AOlm1xsQBp16clVZj1SY/qaOJbQtZw==", + "dev": true + }, + "node_modules/@docsearch/js": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.6.2.tgz", + "integrity": "sha512-pS4YZF+VzUogYrkblCucQ0Oy2m8Wggk8Kk7lECmZM60hTbaydSIhJTTiCrmoxtBqV8wxORnOqcqqOfbmkkQEcA==", + "dev": true, + "dependencies": { + "@docsearch/react": "3.6.2", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.2.tgz", + "integrity": "sha512-rtZce46OOkVflCQH71IdbXSFK+S8iJZlUF56XBW5rIgx/eG5qoomC7Ag3anZson1bBac/JFQn7XOBfved/IMRA==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.6.2", + "algoliasearch": "^4.19.1" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", + "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", + "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", + "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", + "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", + "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", + "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", + "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", + "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", + "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", + "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", + "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", + "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", + "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", + "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", + "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", + "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.21.0.tgz", + "integrity": "sha512-zAPMJdiGuqXpZQ+pWNezQAk5xhzRXBNiECFPcJLtUdsFM3f//G95Z15EHTnHchYycU8kIIysqGgxp8OVSj1SPQ==", + "dev": true, + "dependencies": { + "@shikijs/engine-javascript": "1.21.0", + "@shikijs/engine-oniguruma": "1.21.0", + "@shikijs/types": "1.21.0", + "@shikijs/vscode-textmate": "^9.2.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.3" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.21.0.tgz", + "integrity": "sha512-jxQHNtVP17edFW4/0vICqAVLDAxmyV31MQJL4U/Kg+heQALeKYVOWo0sMmEZ18FqBt+9UCdyqGKYE7bLRtk9mg==", + "dev": true, + "dependencies": { + "@shikijs/types": "1.21.0", + "@shikijs/vscode-textmate": "^9.2.2", + "oniguruma-to-js": "0.4.3" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.21.0.tgz", + "integrity": "sha512-AIZ76XocENCrtYzVU7S4GY/HL+tgHGbVU+qhiDyNw1qgCA5OSi4B4+HY4BtAoJSMGuD/L5hfTzoRVbzEm2WTvg==", + "dev": true, + "dependencies": { + "@shikijs/types": "1.21.0", + "@shikijs/vscode-textmate": "^9.2.2" + } + }, + "node_modules/@shikijs/transformers": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.21.0.tgz", + "integrity": "sha512-aA+XGGSzipcvqdsOYL8l6Q2RYiMuJNdhdt9eZnkJmW+wjSOixN/I7dBq3fISwvEMDlawrtuXM3eybLCEC+Fjlg==", + "dev": true, + "dependencies": { + "shiki": "1.21.0" + } + }, + "node_modules/@shikijs/types": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.21.0.tgz", + "integrity": "sha512-tzndANDhi5DUndBtpojEq/42+dpUF2wS7wdCDQaFtIXm3Rd1QkrcVgSSRLOvEwexekihOXfbYJINW37g96tJRw==", + "dev": true, + "dependencies": { + "@shikijs/vscode-textmate": "^9.2.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.2.2.tgz", + "integrity": "sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "dev": true + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.4.tgz", + "integrity": "sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.11.tgz", + "integrity": "sha512-PwAdxs7/9Hc3ieBO12tXzmTD+Ln4qhT/56S+8DvrrZ4kLDn4Z/AMUr8tXJD0axiJBS0RKIoNaR0yMuQB9v9Udg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.11", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.11.tgz", + "integrity": "sha512-pyGf8zdbDDRkBrEzf8p7BQlMKNNF5Fk/Cf/fQ6PiUz9at4OaUfyXW0dGJTo2Vl1f5U9jSLCNf0EZJEogLXoeew==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.5.11", + "@vue/shared": "3.5.11" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.11.tgz", + "integrity": "sha512-gsbBtT4N9ANXXepprle+X9YLg2htQk1sqH/qGJ/EApl+dgpUBdTv3yP7YlR535uHZY3n6XaR0/bKo0BgwwDniw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.11", + "@vue/compiler-dom": "3.5.11", + "@vue/compiler-ssr": "3.5.11", + "@vue/shared": "3.5.11", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.47", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.11.tgz", + "integrity": "sha512-P4+GPjOuC2aFTk1Z4WANvEhyOykcvEd5bIj2KVNGKGfM745LaXGr++5njpdBTzVz5pZifdlR1kpYSJJpIlSePA==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.5.11", + "@vue/shared": "3.5.11" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.4.6.tgz", + "integrity": "sha512-XipBV5k0/IfTr0sNBDTg7OBUCp51cYMMXyPxLXJZ4K/wmUeMqt8cVdr2ZZGOFq+si/jTyCYnNxeKoyev5DOUUA==", + "dev": true, + "dependencies": { + "@vue/devtools-kit": "^7.4.6" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.4.6.tgz", + "integrity": "sha512-NbYBwPWgEic1AOd9bWExz9weBzFdjiIfov0yRn4DrRfR+EQJCI9dn4I0XS7IxYGdkmUJi8mFW42LLk18WsGqew==", + "dev": true, + "dependencies": { + "@vue/devtools-shared": "^7.4.6", + "birpc": "^0.2.17", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.4.6.tgz", + "integrity": "sha512-rPeSBzElnHYMB05Cc056BQiJpgocQjY8XVulgni+O9a9Gr9tNXgPteSzFFD+fT/iWMxNuUgGKs9CuW5DZewfIg==", + "dev": true, + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.11.tgz", + "integrity": "sha512-Nqo5VZEn8MJWlCce8XoyVqHZbd5P2NH+yuAaFzuNSR96I+y1cnuUiq7xfSG+kyvLSiWmaHTKP1r3OZY4mMD50w==", + "dev": true, + "dependencies": { + "@vue/shared": "3.5.11" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.11.tgz", + "integrity": "sha512-7PsxFGqwfDhfhh0OcDWBG1DaIQIVOLgkwA5q6MtkPiDFjp5gohVnJEahSktwSFLq7R5PtxDKy6WKURVN1UDbzA==", + "dev": true, + "dependencies": { + "@vue/reactivity": "3.5.11", + "@vue/shared": "3.5.11" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.11.tgz", + "integrity": "sha512-GNghjecT6IrGf0UhuYmpgaOlN7kxzQBhxWEn08c/SQDxv1yy4IXI1bn81JgEpQ4IXjRxWtPyI8x0/7TF5rPfYQ==", + "dev": true, + "dependencies": { + "@vue/reactivity": "3.5.11", + "@vue/runtime-core": "3.5.11", + "@vue/shared": "3.5.11", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.11.tgz", + "integrity": "sha512-cVOwYBxR7Wb1B1FoxYvtjJD8X/9E5nlH4VSkJy2uMA1MzYNdzAAB//l8nrmN9py/4aP+3NjWukf9PZ3TeWULaA==", + "dev": true, + "dependencies": { + "@vue/compiler-ssr": "3.5.11", + "@vue/shared": "3.5.11" + }, + "peerDependencies": { + "vue": "3.5.11" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.11.tgz", + "integrity": "sha512-W8GgysJVnFo81FthhzurdRAWP/byq3q2qIw70e0JWblzVhjgOMiC2GyovXrZTFQJnFVryYaKGP3Tc9vYzYm6PQ==", + "dev": true + }, + "node_modules/@vueuse/core": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-11.1.0.tgz", + "integrity": "sha512-P6dk79QYA6sKQnghrUz/1tHi0n9mrb/iO1WTMk/ElLmTyNqgDeSZ3wcDf6fRBGzRJbeG1dxzEOvLENMjr+E3fg==", + "dev": true, + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "11.1.0", + "@vueuse/shared": "11.1.0", + "vue-demi": ">=0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-11.1.0.tgz", + "integrity": "sha512-O2ZgrAGPy0qAjpoI2YR3egNgyEqwG85fxfwmA9BshRIGjV4G6yu6CfOPpMHAOoCD+UfsIl7Vb1bXJ6ifrHYDDA==", + "dev": true, + "dependencies": { + "@vueuse/core": "11.1.0", + "@vueuse/shared": "11.1.0", + "vue-demi": ">=0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-11.1.0.tgz", + "integrity": "sha512-l9Q502TBTaPYGanl1G+hPgd3QX5s4CGnpXriVBR5fEZ/goI6fvDaVmIl3Td8oKFurOxTmbXvBPSsgrd6eu6HYg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-11.1.0.tgz", + "integrity": "sha512-YUtIpY122q7osj+zsNMFAfMTubGz0sn5QzE5gPzAIiCmtt2ha3uQUY1+JPyL4gRCTsLPX82Y9brNbo/aqlA91w==", + "dev": true, + "dependencies": { + "vue-demi": ">=0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/algoliasearch": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz", + "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==", + "dev": true, + "dependencies": { + "@algolia/cache-browser-local-storage": "4.24.0", + "@algolia/cache-common": "4.24.0", + "@algolia/cache-in-memory": "4.24.0", + "@algolia/client-account": "4.24.0", + "@algolia/client-analytics": "4.24.0", + "@algolia/client-common": "4.24.0", + "@algolia/client-personalization": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/logger-console": "4.24.0", + "@algolia/recommend": "4.24.0", + "@algolia/requester-browser-xhr": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/requester-node-http": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/algoliasearch/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/algoliasearch/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/algoliasearch/node_modules/@algolia/requester-browser-xhr": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", + "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/algoliasearch/node_modules/@algolia/requester-node-http": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", + "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/birpc": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.17.tgz", + "integrity": "sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/focus-trap": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.0.tgz", + "integrity": "sha512-1td0l3pMkWJLFipobUcGaf+5DTY4PLDDrcqoSaKP8ediO/CoWCCYk/fT/Y2A4e6TNB+Sh6clRJCjOPPnKoNHnQ==", + "dev": true, + "dependencies": { + "tabbable": "^6.2.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz", + "integrity": "sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/minisearch": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.1.0.tgz", + "integrity": "sha512-tv7c/uefWdEhcu6hvrfTihflgeEi2tN6VV7HJnCjK6VxM75QQJh4t9FwJCsA2EsRS8LCnu3W87CuGPWMocOLCA==", + "dev": true + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/oniguruma-to-js": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/oniguruma-to-js/-/oniguruma-to-js-0.4.3.tgz", + "integrity": "sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==", + "dev": true, + "dependencies": { + "regex": "^4.3.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.24.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.2.tgz", + "integrity": "sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/regex": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/regex/-/regex-4.3.3.tgz", + "integrity": "sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==", + "dev": true + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "node_modules/rollup": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", + "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.24.0", + "@rollup/rollup-android-arm64": "4.24.0", + "@rollup/rollup-darwin-arm64": "4.24.0", + "@rollup/rollup-darwin-x64": "4.24.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", + "@rollup/rollup-linux-arm-musleabihf": "4.24.0", + "@rollup/rollup-linux-arm64-gnu": "4.24.0", + "@rollup/rollup-linux-arm64-musl": "4.24.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", + "@rollup/rollup-linux-riscv64-gnu": "4.24.0", + "@rollup/rollup-linux-s390x-gnu": "4.24.0", + "@rollup/rollup-linux-x64-gnu": "4.24.0", + "@rollup/rollup-linux-x64-musl": "4.24.0", + "@rollup/rollup-win32-arm64-msvc": "4.24.0", + "@rollup/rollup-win32-ia32-msvc": "4.24.0", + "@rollup/rollup-win32-x64-msvc": "4.24.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/search-insights": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.2.tgz", + "integrity": "sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==", + "dev": true, + "peer": true + }, + "node_modules/shiki": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.21.0.tgz", + "integrity": "sha512-apCH5BoWTrmHDPGgg3RF8+HAAbEL/CdbYr8rMw7eIrdhCkZHdVGat5mMNlRtd1erNG01VPMIKHNQ0Pj2HMAiog==", + "dev": true, + "dependencies": { + "@shikijs/core": "1.21.0", + "@shikijs/engine-javascript": "1.21.0", + "@shikijs/engine-oniguruma": "1.21.0", + "@shikijs/types": "1.21.0", + "@shikijs/vscode-textmate": "^9.2.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/superjson": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.1.tgz", + "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==", + "dev": true, + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", + "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitepress": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.3.4.tgz", + "integrity": "sha512-I1/F6OW1xl3kW4PaIMC6snxjWgf3qfziq2aqsDoFc/Gt41WbcRv++z8zjw8qGRIJ+I4bUW7ZcKFDHHN/jkH9DQ==", + "dev": true, + "dependencies": { + "@docsearch/css": "^3.6.1", + "@docsearch/js": "^3.6.1", + "@shikijs/core": "^1.13.0", + "@shikijs/transformers": "^1.13.0", + "@types/markdown-it": "^14.1.2", + "@vitejs/plugin-vue": "^5.1.2", + "@vue/devtools-api": "^7.3.8", + "@vue/shared": "^3.4.38", + "@vueuse/core": "^11.0.0", + "@vueuse/integrations": "^11.0.0", + "focus-trap": "^7.5.4", + "mark.js": "8.11.1", + "minisearch": "^7.1.0", + "shiki": "^1.13.0", + "vite": "^5.4.1", + "vue": "^3.4.38" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4", + "postcss": "^8" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.11.tgz", + "integrity": "sha512-/8Wurrd9J3lb72FTQS7gRMNQD4nztTtKPmuDuPuhqXmmpD6+skVjAeahNpVzsuky6Sy9gy7wn8UadqPtt9SQIg==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.5.11", + "@vue/compiler-sfc": "3.5.11", + "@vue/runtime-dom": "3.5.11", + "@vue/server-renderer": "3.5.11", + "@vue/shared": "3.5.11" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/doc/package.json b/doc/package.json new file mode 100644 index 000000000..a65c67832 --- /dev/null +++ b/doc/package.json @@ -0,0 +1,10 @@ +{ + "devDependencies": { + "vitepress": "^1.3.4" + }, + "scripts": { + "docs:dev": "vitepress dev", + "docs:build": "vitepress build", + "docs:preview": "vitepress preview" + } +} \ No newline at end of file From c159b151ea846408a9e79bed529cf581715eadea Mon Sep 17 00:00:00 2001 From: David Mattei Date: Sat, 12 Oct 2024 16:38:49 +0200 Subject: [PATCH 02/17] fix: start and move upgrade.md --- Makefile | 8 +- doc/.gitignore | 2 + doc/.vitepress/config.mts | 39 +++-- doc/.vitepress/nav/navbar.ts | 20 +++ doc/.vitepress/nav/sidebar.ts | 32 ++++ doc/.vitepress/theme/style.css | 25 +-- doc/guide/develop/contributing.md | 1 + doc/guide/develop/environment.md | 1 + doc/guide/getting-started.md | 1 + doc/guide/introduction.md | 15 ++ doc/index.md | 18 +- doc/package-lock.json | 169 ++++++++++--------- doc/public/favicon.ico | Bin 0 -> 1150 bytes doc/public/logo.png | Bin 0 -> 32556 bytes doc/release/upgrade-4x.md | 104 ++++++++++++ docs/upgrade.md => doc/release/upgrade-5x.md | 135 ++------------- docs/package-lock.json | 6 + package-lock.json | 6 + 18 files changed, 338 insertions(+), 244 deletions(-) create mode 100644 doc/.vitepress/nav/navbar.ts create mode 100644 doc/.vitepress/nav/sidebar.ts create mode 100644 doc/guide/develop/contributing.md create mode 100644 doc/guide/develop/environment.md create mode 100644 doc/guide/getting-started.md create mode 100644 doc/guide/introduction.md create mode 100644 doc/public/favicon.ico create mode 100644 doc/public/logo.png create mode 100644 doc/release/upgrade-4x.md rename docs/upgrade.md => doc/release/upgrade-5x.md (59%) create mode 100644 docs/package-lock.json create mode 100644 package-lock.json diff --git a/Makefile b/Makefile index 998ef7bc2..bcf5d73fd 100644 --- a/Makefile +++ b/Makefile @@ -48,8 +48,6 @@ stop: ## stop docker, admin server, web server cache-clear: ## cache clear @$(RUN_ADMIN) c:cl @$(RUN_WEB) c:cl -docs: ## serve docs - @docsify serve ./docs status: ## status @$(DOCKER_COMPOSE) ps @@ -61,6 +59,12 @@ server-stop/%: ## server-stop/(admin|web) server-log/%: ## server-log/(admin|web) symfony server:log --dir=elasticms-${*} +## —— Doc —————————————————————————————————————————————————————————————————————————————————————————————————————————————— +docs: ## serve docs + npm run --prefix ./doc docs:dev +docs-init: ## init docs + npm install --prefix ./doc + ## —— Build ———————————————————————————————————————————————————————————————————————————————————————————————————————————— build-translations: ## build translations @php build/translations en EMSCoreBundle --write --format=yml -d emsco-core diff --git a/doc/.gitignore b/doc/.gitignore index 2ccbe4656..f8813477b 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1 +1,3 @@ /node_modules/ +.vitepress/cache/ +.vitepress/dist/ diff --git a/doc/.vitepress/config.mts b/doc/.vitepress/config.mts index 7a6d30afc..9e5b71f2a 100644 --- a/doc/.vitepress/config.mts +++ b/doc/.vitepress/config.mts @@ -1,28 +1,27 @@ import { defineConfig } from 'vitepress' +import sidebar from "./nav/sidebar"; +import navbar from "./nav/navbar"; // https://vitepress.dev/reference/site-config export default defineConfig({ - title: "My Awesome Project", - description: "A VitePress Site", + title: "ElasticMS", + description: "Documentation", + ignoreDeadLinks: true, + head: [ + ['link', { rel: 'icon', href: '/favicon.ico' }] + ], + markdown: { + lineNumbers: true + }, themeConfig: { - // https://vitepress.dev/reference/default-theme-config - nav: [ - { text: 'Home', link: '/' }, - { text: 'Examples', link: '/markdown-examples' } - ], - - sidebar: [ - { - text: 'Examples', - items: [ - { text: 'Markdown Examples', link: '/markdown-examples' }, - { text: 'Runtime API Examples', link: '/api-examples' } - ] - } - ], - + logo: '/logo.png', + nav: navbar, + sidebar: sidebar, socialLinks: [ - { icon: 'github', link: 'https://github.com/vuejs/vitepress' } - ] + { icon: 'github', link: 'https://github.com/ems-project/elasticms' } + ], + search: { + provider: 'local' + } } }) diff --git a/doc/.vitepress/nav/navbar.ts b/doc/.vitepress/nav/navbar.ts new file mode 100644 index 000000000..830320b89 --- /dev/null +++ b/doc/.vitepress/nav/navbar.ts @@ -0,0 +1,20 @@ +import type { DefaultTheme } from 'vitepress' + +const navbar: DefaultTheme.NavItem[] = [ + { text: 'Home', link: '/' }, + { + text: 'Guide', + items: [ + {text: 'Getting Started', link: '/guide/getting-started'}, + ] + }, + { + text: 'Releases', + items: [ + {text: 'Upgrade 5.x', link: '/release/upgrade-5x'}, + {text: 'Notes 5.x~', link: 'https://github.com/ems-project/elasticms/blob/5.x/CHANGELOG-5.x.md'}, + ] + }, +] + +export default navbar; diff --git a/doc/.vitepress/nav/sidebar.ts b/doc/.vitepress/nav/sidebar.ts new file mode 100644 index 000000000..5bfc8c8f5 --- /dev/null +++ b/doc/.vitepress/nav/sidebar.ts @@ -0,0 +1,32 @@ +import type { DefaultTheme } from 'vitepress' + +const sidebar: DefaultTheme.SidebarItem[] = { + '/': [ + { + text: 'Guide', + collapsed: true, + items: [ + {text: 'Introduction', link: '/guide/introduction' }, + {text: 'Getting Started', link: '/guide/getting-started'}, + ] + }, + { + text: 'Release', + collapsed: true, + items: [ + {text: 'Upgrade 5.x', link: '/release/upgrade-5x'}, + {text: 'Upgrade 4.x', link: '/release/upgrade-4x'}, + ] + }, + { + text: 'Develop', + collapsed: true, + items: [ + {text: 'Setup environment', link: '/guide/develop/environment' }, + {text: 'Contributing', link: '/guide/develop/contributing'} + ] + } + ] +} + +export default sidebar; diff --git a/doc/.vitepress/theme/style.css b/doc/.vitepress/theme/style.css index d63aee82d..ad312f924 100644 --- a/doc/.vitepress/theme/style.css +++ b/doc/.vitepress/theme/style.css @@ -8,7 +8,7 @@ * * Each colors have exact same color scale system with 3 levels of solid * colors with different brightness, and 1 soft color. - * + * * - `XXX-1`: The most solid color used mainly for colored text. It must * satisfy the contrast ratio against when used on top of `XXX-soft`. * @@ -49,9 +49,9 @@ --vp-c-default-3: var(--vp-c-gray-3); --vp-c-default-soft: var(--vp-c-gray-soft); - --vp-c-brand-1: var(--vp-c-indigo-1); - --vp-c-brand-2: var(--vp-c-indigo-2); - --vp-c-brand-3: var(--vp-c-indigo-3); + --vp-c-brand-1: #00A7E3; + --vp-c-brand-2: #0278A3; + --vp-c-brand-3: #00A7E3; --vp-c-brand-soft: var(--vp-c-indigo-soft); --vp-c-tip-1: var(--vp-c-brand-1); @@ -94,14 +94,20 @@ --vp-home-hero-name-color: transparent; --vp-home-hero-name-background: -webkit-linear-gradient( 120deg, - #bd34fe 30%, - #41d1ff + #FFD301 30%, /* Yellow */ + #90CB31 50%, /* Green */ + #F44A99 70%, /* Pink */ + #00A7E3 85%, /* Light Blue */ + #0278A3 100% /* Dark Blue */ ); --vp-home-hero-image-background-image: linear-gradient( - -45deg, - #bd34fe 50%, - #47caff 50% + 135deg, + #FFE600, /* Light Yellow */ + #A2D14D, /* Light Green */ + #F57FBF, /* Light Pink */ + #77D9E5, /* Light Blue */ + #2A9DAB /* Light Cyan */ ); --vp-home-hero-image-filter: blur(44px); } @@ -136,4 +142,3 @@ .DocSearch { --docsearch-primary-color: var(--vp-c-brand-1) !important; } - diff --git a/doc/guide/develop/contributing.md b/doc/guide/develop/contributing.md new file mode 100644 index 000000000..854139a31 --- /dev/null +++ b/doc/guide/develop/contributing.md @@ -0,0 +1 @@ +# Contributing diff --git a/doc/guide/develop/environment.md b/doc/guide/develop/environment.md new file mode 100644 index 000000000..081d3c8ec --- /dev/null +++ b/doc/guide/develop/environment.md @@ -0,0 +1 @@ +# Setup environment diff --git a/doc/guide/getting-started.md b/doc/guide/getting-started.md new file mode 100644 index 000000000..69a5d543e --- /dev/null +++ b/doc/guide/getting-started.md @@ -0,0 +1 @@ +# Getting started diff --git a/doc/guide/introduction.md b/doc/guide/introduction.md new file mode 100644 index 000000000..27a620d3e --- /dev/null +++ b/doc/guide/introduction.md @@ -0,0 +1,15 @@ +# Introduction + +ElasticMS is a powerful and flexible content management solution that leverages +the robust search capabilities of Elasticsearch. It allows users to easily +manage complex content models, publish content across multiple environments, and +benefit from advanced search features. The system is designed with scalability +and adaptability in mind, making it suitable for organizations of all sizes. + +ElasticMS uses a modular architecture, making it easy to integrate with existing +systems. It empowers developers to create custom solutions tailored to the +specific needs of their projects. For content editors, ElasticMS provides an +intuitive interface to efficiently manage and distribute content. + +This documentation will guide you through the installation, configuration, and +usage of ElasticMS, helping you to get the most out of this powerful platform. diff --git a/doc/index.md b/doc/index.md index 1b805260a..622d04832 100644 --- a/doc/index.md +++ b/doc/index.md @@ -3,16 +3,19 @@ layout: home hero: - name: "My Awesome Project" - text: "A VitePress Site" - tagline: My great project tagline + name: "ElasticMS" + text: "Documentation" + tagline: Content management with search + image: + src: /logo.png + alt: "ElasticMS logo" actions: - theme: brand - text: Markdown Examples - link: /markdown-examples + text: Quick start + link: /guide/getting-started - theme: alt - text: API Examples - link: /api-examples + text: View on github + link: https://github.com/ems-project/elasticms features: - title: Feature A @@ -22,4 +25,3 @@ features: - title: Feature C details: Lorem ipsum dolor sit amet, consectetur adipiscing elit --- - diff --git a/doc/package-lock.json b/doc/package-lock.json index 9033fa900..ab677f545 100644 --- a/doc/package-lock.json +++ b/doc/package-lock.json @@ -143,9 +143,9 @@ } }, "node_modules/@algolia/client-common": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.7.0.tgz", - "integrity": "sha512-hrYlN9yNQukmNj8bBlw9PCXi9jmRQqNUXaG6MXH1aDabjO6YD1WPVqTvaELbIBgTbDJzCn0R2owms0uaxQkjUg==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.8.1.tgz", + "integrity": "sha512-MLX/gipPFEhJPCExsxXf9tnt+kLfWCe9JWRp1adcoVySkhzPxpIeSiWaQaOqyy0TYIgIpdeVx/emlBT9Ni8GFw==", "dev": true, "peer": true, "engines": { @@ -174,16 +174,16 @@ } }, "node_modules/@algolia/client-search": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.7.0.tgz", - "integrity": "sha512-0Frfjt4oxvVP2qsTQAjwdaG5SvJ3TbHBkBrS6M7cG5RDrgHqOrhBnBGCFT+YO3CeNK54r+d57oB1VcD2F1lHuQ==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.8.1.tgz", + "integrity": "sha512-zy3P4fI28GfzKihUw5+L76pEedQxyLDiMsdDYEWghIz8yAnELDatPNEThyWuUk8fD0PeVoCi1M4tr1iz00fOtQ==", "dev": true, "peer": true, "dependencies": { - "@algolia/client-common": "5.7.0", - "@algolia/requester-browser-xhr": "5.7.0", - "@algolia/requester-fetch": "5.7.0", - "@algolia/requester-node-http": "5.7.0" + "@algolia/client-common": "5.8.1", + "@algolia/requester-browser-xhr": "5.8.1", + "@algolia/requester-fetch": "5.8.1", + "@algolia/requester-node-http": "5.8.1" }, "engines": { "node": ">= 14.0.0" @@ -263,13 +263,13 @@ } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.7.0.tgz", - "integrity": "sha512-ohtIp+lyTGM3agrHyedC3w7ijfdUvSN6wmGuKqUezrNzd0nCkFoLW0OINlyv1ODrTEVnL8PAM/Zqubjafxd/Ww==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.8.1.tgz", + "integrity": "sha512-x0iULVrx5PocaYBqH+G6jyEsEHf7m5FDiZW7CP8AaJdzdCzoUyx7YH6e6TSCNlkFEjwmn8uj05coN8uljCHXTg==", "dev": true, "peer": true, "dependencies": { - "@algolia/client-common": "5.7.0" + "@algolia/client-common": "5.8.1" }, "engines": { "node": ">= 14.0.0" @@ -282,26 +282,26 @@ "dev": true }, "node_modules/@algolia/requester-fetch": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.7.0.tgz", - "integrity": "sha512-Eg8cBhNg2QNnDDldyK77aXvg3wIc5qnpCDCAJXQ2oaqZwwvvYaTgnP1ofznNG6+klri4Fk1YAaC9wyDBhByWIA==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.8.1.tgz", + "integrity": "sha512-SRWGrNsKSLNYIDNlVKVkf4wxsm6h57xI+0b8JPm0wUe0ly0jymAgQU2yW2GDzNuXyiPiS7U1oWwaVGs71IT5Pw==", "dev": true, "peer": true, "dependencies": { - "@algolia/client-common": "5.7.0" + "@algolia/client-common": "5.8.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.7.0.tgz", - "integrity": "sha512-8BDssYEkcp1co06KtHO9b37H+5zVM/h+5kyesJb2C2EHFO3kgzLHWl/JyXOVtYlKQBkmdObYOI0s6JaXRy2yQA==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.8.1.tgz", + "integrity": "sha512-pYylr2gBsV68E88bltaVoJHIc3YNIllVmA12d+jefAcutR9ytQM7iP6dXbCYuRqF4CHF32YvZuwvqNI3J4kowA==", "dev": true, "peer": true, "dependencies": { - "@algolia/client-common": "5.7.0" + "@algolia/client-common": "5.8.1" }, "engines": { "node": ">= 14.0.0" @@ -337,12 +337,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", - "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", + "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", "dev": true, "dependencies": { - "@babel/types": "^7.25.7" + "@babel/types": "^7.25.8" }, "bin": { "parser": "bin/babel-parser.js" @@ -352,9 +352,9 @@ } }, "node_modules/@babel/types": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", - "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", + "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.25.7", @@ -996,63 +996,63 @@ ] }, "node_modules/@shikijs/core": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.21.0.tgz", - "integrity": "sha512-zAPMJdiGuqXpZQ+pWNezQAk5xhzRXBNiECFPcJLtUdsFM3f//G95Z15EHTnHchYycU8kIIysqGgxp8OVSj1SPQ==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.22.0.tgz", + "integrity": "sha512-S8sMe4q71TJAW+qG93s5VaiihujRK6rqDFqBnxqvga/3LvqHEnxqBIOPkt//IdXVtHkQWKu4nOQNk0uBGicU7Q==", "dev": true, "dependencies": { - "@shikijs/engine-javascript": "1.21.0", - "@shikijs/engine-oniguruma": "1.21.0", - "@shikijs/types": "1.21.0", - "@shikijs/vscode-textmate": "^9.2.2", + "@shikijs/engine-javascript": "1.22.0", + "@shikijs/engine-oniguruma": "1.22.0", + "@shikijs/types": "1.22.0", + "@shikijs/vscode-textmate": "^9.3.0", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.3" } }, "node_modules/@shikijs/engine-javascript": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.21.0.tgz", - "integrity": "sha512-jxQHNtVP17edFW4/0vICqAVLDAxmyV31MQJL4U/Kg+heQALeKYVOWo0sMmEZ18FqBt+9UCdyqGKYE7bLRtk9mg==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.22.0.tgz", + "integrity": "sha512-AeEtF4Gcck2dwBqCFUKYfsCq0s+eEbCEbkUuFou53NZ0sTGnJnJ/05KHQFZxpii5HMXbocV9URYVowOP2wH5kw==", "dev": true, "dependencies": { - "@shikijs/types": "1.21.0", - "@shikijs/vscode-textmate": "^9.2.2", + "@shikijs/types": "1.22.0", + "@shikijs/vscode-textmate": "^9.3.0", "oniguruma-to-js": "0.4.3" } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.21.0.tgz", - "integrity": "sha512-AIZ76XocENCrtYzVU7S4GY/HL+tgHGbVU+qhiDyNw1qgCA5OSi4B4+HY4BtAoJSMGuD/L5hfTzoRVbzEm2WTvg==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.22.0.tgz", + "integrity": "sha512-5iBVjhu/DYs1HB0BKsRRFipRrD7rqjxlWTj4F2Pf+nQSPqc3kcyqFFeZXnBMzDf0HdqaFVvhDRAGiYNvyLP+Mw==", "dev": true, "dependencies": { - "@shikijs/types": "1.21.0", - "@shikijs/vscode-textmate": "^9.2.2" + "@shikijs/types": "1.22.0", + "@shikijs/vscode-textmate": "^9.3.0" } }, "node_modules/@shikijs/transformers": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.21.0.tgz", - "integrity": "sha512-aA+XGGSzipcvqdsOYL8l6Q2RYiMuJNdhdt9eZnkJmW+wjSOixN/I7dBq3fISwvEMDlawrtuXM3eybLCEC+Fjlg==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.22.0.tgz", + "integrity": "sha512-k7iMOYuGQA62KwAuJOQBgH2IQb5vP8uiB3lMvAMGUgAMMurePOx3Z7oNqJdcpxqZP6I9cc7nc4DNqSKduCxmdg==", "dev": true, "dependencies": { - "shiki": "1.21.0" + "shiki": "1.22.0" } }, "node_modules/@shikijs/types": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.21.0.tgz", - "integrity": "sha512-tzndANDhi5DUndBtpojEq/42+dpUF2wS7wdCDQaFtIXm3Rd1QkrcVgSSRLOvEwexekihOXfbYJINW37g96tJRw==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.22.0.tgz", + "integrity": "sha512-Fw/Nr7FGFhlQqHfxzZY8Cwtwk5E9nKDUgeLjZgt3UuhcM3yJR9xj3ZGNravZZok8XmEZMiYkSMTPlPkULB8nww==", "dev": true, "dependencies": { - "@shikijs/vscode-textmate": "^9.2.2", + "@shikijs/vscode-textmate": "^9.3.0", "@types/hast": "^3.0.4" } }, "node_modules/@shikijs/vscode-textmate": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.2.2.tgz", - "integrity": "sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz", + "integrity": "sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==", "dev": true }, "node_modules/@types/estree": { @@ -1508,9 +1508,9 @@ } }, "node_modules/birpc": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.17.tgz", - "integrity": "sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==", + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz", + "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/antfu" @@ -2024,16 +2024,16 @@ "peer": true }, "node_modules/shiki": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.21.0.tgz", - "integrity": "sha512-apCH5BoWTrmHDPGgg3RF8+HAAbEL/CdbYr8rMw7eIrdhCkZHdVGat5mMNlRtd1erNG01VPMIKHNQ0Pj2HMAiog==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.22.0.tgz", + "integrity": "sha512-/t5LlhNs+UOKQCYBtl5ZsH/Vclz73GIqT2yQsCBygr8L/ppTdmpL4w3kPLoZJbMKVWtoG77Ue1feOjZfDxvMkw==", "dev": true, "dependencies": { - "@shikijs/core": "1.21.0", - "@shikijs/engine-javascript": "1.21.0", - "@shikijs/engine-oniguruma": "1.21.0", - "@shikijs/types": "1.21.0", - "@shikijs/vscode-textmate": "^9.2.2", + "@shikijs/core": "1.22.0", + "@shikijs/engine-javascript": "1.22.0", + "@shikijs/engine-oniguruma": "1.22.0", + "@shikijs/types": "1.22.0", + "@shikijs/vscode-textmate": "^9.3.0", "@types/hast": "^3.0.4" } }, @@ -2272,27 +2272,28 @@ } }, "node_modules/vitepress": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.3.4.tgz", - "integrity": "sha512-I1/F6OW1xl3kW4PaIMC6snxjWgf3qfziq2aqsDoFc/Gt41WbcRv++z8zjw8qGRIJ+I4bUW7ZcKFDHHN/jkH9DQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.4.0.tgz", + "integrity": "sha512-JXCv4EsKTDyAFb6C/UjZr7nsGAzZ6mafVk2rx7rG5o8N+B/4QstIk+iEOe/9dKoU6V624UIC6g1pZ+K63rxhlw==", "dev": true, "dependencies": { - "@docsearch/css": "^3.6.1", - "@docsearch/js": "^3.6.1", - "@shikijs/core": "^1.13.0", - "@shikijs/transformers": "^1.13.0", + "@docsearch/css": "^3.6.2", + "@docsearch/js": "^3.6.2", + "@shikijs/core": "^1.22.0", + "@shikijs/transformers": "^1.22.0", + "@shikijs/types": "^1.22.0", "@types/markdown-it": "^14.1.2", - "@vitejs/plugin-vue": "^5.1.2", - "@vue/devtools-api": "^7.3.8", - "@vue/shared": "^3.4.38", - "@vueuse/core": "^11.0.0", - "@vueuse/integrations": "^11.0.0", - "focus-trap": "^7.5.4", + "@vitejs/plugin-vue": "^5.1.4", + "@vue/devtools-api": "^7.4.6", + "@vue/shared": "^3.5.11", + "@vueuse/core": "^11.1.0", + "@vueuse/integrations": "^11.1.0", + "focus-trap": "^7.6.0", "mark.js": "8.11.1", "minisearch": "^7.1.0", - "shiki": "^1.13.0", - "vite": "^5.4.1", - "vue": "^3.4.38" + "shiki": "^1.22.0", + "vite": "^5.4.8", + "vue": "^3.5.11" }, "bin": { "vitepress": "bin/vitepress.js" diff --git a/doc/public/favicon.ico b/doc/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fe197b9527e55aa33914fb14db5a54742093694d GIT binary patch literal 1150 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%0AyxG_vL>3km!3PuHZ32duVF89Bp-!Fih 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 U%8|IdsQ>@~07*qoM6N<$f*P)?Jpcdz literal 0 HcmV?d00001 diff --git a/doc/release/upgrade-4x.md b/doc/release/upgrade-4x.md new file mode 100644 index 000000000..ac8726daf --- /dev/null +++ b/doc/release/upgrade-4x.md @@ -0,0 +1,104 @@ +--- +editLink: true +lang: en-US +--- + +# Upgrade 4.x + +## version 4.2.x + +### Content type roles in twig + +```twig +{% if is_granted(contentType.createRole) %} // [!code --] +{% if is_granted(contentType.roles.create) %} // [!code ++] +``` + +## version 4.x + +### Deprecated twig functions + +```twig +{% spaceless %} // [!code --] +{% apply spaceless %} // [!code ++] + +{% endspaceless %} // [!code --] +{% endapply %} // [!code ++] + +{% for key, item in array if test %} // [!code --] +{% for key, item in array|filter(key, item => test) %} // [!code ++] + +{{ 'search.results'|transchoice(response.total) -}} // [!code --] +{{ 'search.results'|trans({'%count%': response.total }) -}} // [!code ++] + +{% set totalHits = results.hits.total %} // [!code --] +{% set totalHits = results.hits.total.value %} // [!code ++] + +{% do emsch_assets(assets) %}// [!code --] +{% do emsch_assets_version(assets) %} // [!code ++] + +"{{ assets('js/app.js') ? assets_hash }}" // [!code --] +"{{ assets('js/app.js', 'emsch) }}" // [!code ++] +``` + +```twig +{% set email = emsco_generate_email(subjectMail) -%} +{% set email = email.setTo(toMail) %} // [!code --] +{% set email = email.setBody(bodyMail, 'text/html') %} // [!code --] +{% set email = email.setFrom(fromMail) %} // [!code --] +{% set email = email.to(toMail) %} // [!code ++] +{% set email = email.html(bodyMail) %} // [!code ++] +{% set email = email.from(fromMail) %} // [!code ++] +{% do emsco_send_email(email) %} +``` + +## Tips and tricks + +### Backward compatibility route to old school assets path + +New route to redirect to the new asset's url. Route: + +```yaml +redirect_asset: + config: + path: 'bundles/emsch_assets/{slug}' + requirements: { slug: '^.+$' } + controller: 'emsch.controller.router::redirect' + template_static: template/redirects/asset.json.twig +``` + +Template (template/redirects/asset.json.twig): + +```twig +{% extends '@EMSCH/template/variables.twig' %} + +{% block request -%} +{% apply spaceless %} + {{ { url: asset(app.request.get('slug'), 'emsch') }|json_encode|raw }} +{% endapply %} +{% endblock -%} +``` + +### Create an old school "Corresponding revision" in the action menu + +Create an action for the content types you want with those parameters: + +* Name: `corresponding-revision` +* Label: `Corresponding revision` +* Icon: `Archive` +* Public: unchecked +* Environment: empty +* EDit with WYSIWYG: unchecked +* Role: `User` +* Render option: `Raw HTML` +* Body: + +```twig + + Corresponding revision + +``` diff --git a/docs/upgrade.md b/doc/release/upgrade-5x.md similarity index 59% rename from docs/upgrade.md rename to doc/release/upgrade-5x.md index 55f10a5d2..a34a25e5e 100644 --- a/docs/upgrade.md +++ b/doc/release/upgrade-5x.md @@ -1,21 +1,15 @@ -# Upgrade - - * [version 5.21.x](#version-521x) - * [version 5.19.x](#version-519x) - * [version 5.17.x](#version-517x) - * [version 5.15.x](#version-515x) - * [version 5.14.x](#version-514x) - * [version 5.7.x](#version-57x) - * [version 5.3.x](#version-53x) - * [version 4.2.x](#version-42x) - * [version 4.x](#version-4x) - * [Tips and tricks](#tips-and-tricks) +--- +editLink: true +lang: en-US +--- + +# Upgrade 5.x ## version 5.22.x * Updates on json menu nested template (copy/paste functionality) * Removed environment variable: `EMSCO_FALLBACK_LOCALE` -* Add new method `getLanguage` on user object +* Add new method `getLanguage` on user object~ preferred locale 'nl_FR' returns 'nl' ```twig @@ -32,7 +26,7 @@ ## version 5.19.x -* The core command ```emsco:release:publish``` has been removed, ```emsco:job:run``` will now publish releases +* The core command `emsco:release:publish` has been removed, `emsco:job:run` will now publish releases * All indexes must be rebuilt (as a new field `_image_resized_hash` as been defined in file fields) * The function `emsch_unzip` is deprecated and should not be used anymore. use the function ems_file_from_archive or the route EMS\CommonBundle\Controller\FileController::assetInArchive instead * If the `emsch_unzip` function is used to serve assets via the web server you should use the route [EMS\CommonBundle\Controller\FileController::assetInArchive](dev/client-helper-bundle/routing.md#route-to-assets-in-archive) @@ -41,13 +35,13 @@ * The `--filename` option in the `emsco:xliff:extract` command has been replaced by a `--basename` option and does not contains a path anymore, just a file basename. Example replace ```emsco:xliff:extract live '{}' nl de title --filename=/tmp/pages-nl-to-de.xlf``` - by ```emsco:xliff:extract live '{}' nl de title --basename=pages-nl-to-de.xlf``` + by ```emsco:xliff:extract live '{}' nl de title --basename=pages-nl-to-de.xlf``` * In case of warning or error in the `emsco:xliff:update` command the report file is no more available locally. The report is upladed in the admin's storages. The directly get a link to the report you need to specify a `--base-url` option. Example ```emsco:xliff:update /tmp/pages-nl-to-de.xlf --base-url=https://my-admin.my-project.tld``` * You should not specify a folder where to expand website assets in the `emsch_assets_version` twig function, in this case the function returns `null`. * By default, if you specify `null` (e.g. `{% do emsch_assets_version(include('@EMSCH/template/asset_hash.twig'), null) %}`) as second arguments, the `emsch` assets will have a an url like `/bundle/253b903b1fb3ac30975ae9844a0352a65cdcfa3d/site.css` which urls will be resolved by the route `EMS\CommonBundle\Controller\FileController::assetInArchive` - * It's also possible the defined you own route for assets in archive, if the route is not immutable (does not contain the archive hash) you must specify the `maxAge` argument (by default it's set to one week): + * It's also possible the defined you own route for assets in archive, if the route is not immutable (does not contain the archive hash) you must specify the `maxAge` argument (by default it's set to one week): ```yaml emsch_demo_asset_in_archive: config: @@ -95,7 +89,7 @@ emsch_demo_asset_in_archive: ```bash emsch:local:upload-assets --filename=/opt/src/local/skeleton/template/asset_hash.twig ``` - + ```twig {% set assetPath = emsch_assets_version(include('@EMSCH/template/asset_hash.twig')) %} ``` @@ -103,124 +97,25 @@ emsch_demo_asset_in_archive: ## version 5.3.x -### Deprecated emsch_add_environment +### Deprecated emsch_add_environment In dashboards/views and action, we call `emsch_add_environment` for rendering a template from emsch. If elasticms-admin defines `EMSCH_ENV` and `EMSCH_ENVS`, this is not needed anymore. -```.env +```bash EMSCH_ENV='preview' EMSCH_ENVS='{"preview":{"alias":"example_preview", "router": false}}' ``` EMSCH_ENV will mark the preview environment as default, the following can also be done: -```.env +```bash EMSCH_ENVS='{"preview":{"alias":"example_preview", "default": true, "router": false}}' ``` -`Router` false, will disable the clientHelperBundle router the default environment. +`Router` false, will disable the clientHelperBundle router the default environment. Maybe the skeleton has a match all route defined. After defining remove the following line from all contentType(s) and dashboard(s). ```twig {% do emsch_add_environment('preview'|get_environment.alias) %} ``` - -## version 4.2.x - -### Content type roles in twig -Replace `is_granted(contentType.createRole)` → `is_granted(contentType.roles.create)` -* createRole → roles.create -* editRole → roles.edit - -## version 4.x - -### Deprecated twig functions -* replace `{% spaceless %}` by `{% apply spaceless %}` -* replace `{% endspaceless %}` by `{% endapply %}` -* replace `{% for key, item in array if test %}` by `{% for key, item in array|filter(key, item => test) %}` -* replace `transchoice` by `trans` - * I.e. replace `{{ 'search.results'|transchoice(results.hits.total.value|default(response.total)) -}}` - * by `{{ 'search.results'|trans({'%count%': results.hits.total.value|default(response.total)}) -}}` - -### Asset custom twig functions -* replace `{{ emsch_assets(assets) }}` or `{%- do emsch_assets(assets) -%}` by `{%- set assetPath = emsch_assets_version(assets) -%}` -* replace `{{ assets('resource') }}?{{ assets_hash }}` by `{{ assets('resource', 'emsch') }}` - -### Email custom twig functions -```twig -{%- set email = emsco_generate_email(subjectMail) -%} -{%- set email = email.setTo(toMail) -%} -{%- set email = email.setBody(bodyMail, 'text/html') -%} -{%- set email = email.setFrom(fromMail) -%} -{{- emsco_send_email(email) -}} -``` -→ -```twig -{%- set email = emsco_generate_email(subjectMail) -%} -{%- set email = email.to(toMail) -%} -{%- set email = email.html(bodyMail) -%} -{%- set email = email.from(fromMail) -%} -{{- emsco_send_email(email) -}} -``` - -### Misc -* replace `/\.hits\.total/` by `{% var.hits.total.value|default(var.hits.total) %}` - * replace `/\[\'hits\'\][\'total\']/` by `var['hits']['total']['value']|default(var['hits']['total'])` -* remove the template environment - * align template and preview for route, template and label - * switch default environment `emsco:content:swith template preview` -* Do a force push to override the document - * Keep in mind that all ouuids have changed, check in your content types for datalink to template documents - * Rollback, in the routes.yaml, static templates have been replaced by their OUUID - -## Tips and tricks - -### Backward compatibility route to old school assets path - -New route to redirect to the new asset's url. Route: - -```yaml -redirect_asset: - config: - path: 'bundles/emsch_assets/{slug}' - requirements: { slug: '^.+$' } - controller: 'emsch.controller.router::redirect' - template_static: template/redirects/asset.json.twig -``` - -Template (template/redirects/asset.json.twig): - -```twig -{% extends '@EMSCH/template/variables.twig' %} - -{% block request -%} -{% apply spaceless %} - {{ { url: asset(app.request.get('slug'), 'emsch') }|json_encode|raw }} -{% endapply %} -{% endblock -%} -``` - -### Create an old school "Corresponding revision" in the action menu - -Create an action for the content types you want with those parameters: - - * Name: `corresponding-revision` - * Label: `Corresponding revision` - * Icon: `Archive` - * Public: unchecked - * Environment: empty - * EDit with WYSIWYG: unchecked - * Role: `User` - * Render option: `Raw HTML` - * Body: - -```twig - - Corresponding revision - -``` diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 000000000..6ab682576 --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "docs", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..727b9f2b6 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "elasticms", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} From e809cdec484a885b045bbfa17be91a59ba43567c Mon Sep 17 00:00:00 2001 From: David Mattei Date: Sat, 12 Oct 2024 16:41:19 +0200 Subject: [PATCH 03/17] fix: clean old docsify --- .../.github/workflows/no_pull_request.yml | 0 docs/.nojekyll | 0 docs/README.md | 17 --- docs/_coverpage.md | 12 --- docs/_media/favicon.ico | Bin 16624 -> 0 bytes docs/_media/logo.png | Bin 13778 -> 0 bytes docs/_media/logo.svg | 21 ---- docs/_sidebar.md | 99 ------------------ docs/index.html | 43 -------- docs/package-lock.json | 6 -- docs/theme-custom.css | 9 -- 11 files changed, 207 deletions(-) rename {docs => doc}/.github/workflows/no_pull_request.yml (100%) delete mode 100644 docs/.nojekyll delete mode 100644 docs/README.md delete mode 100644 docs/_coverpage.md delete mode 100644 docs/_media/favicon.ico delete mode 100644 docs/_media/logo.png delete mode 100644 docs/_media/logo.svg delete mode 100644 docs/_sidebar.md delete mode 100644 docs/index.html delete mode 100644 docs/package-lock.json delete mode 100644 docs/theme-custom.css diff --git a/docs/.github/workflows/no_pull_request.yml b/doc/.github/workflows/no_pull_request.yml similarity index 100% rename from docs/.github/workflows/no_pull_request.yml rename to doc/.github/workflows/no_pull_request.yml diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 4ff16eec2..000000000 --- a/docs/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Elasticms Documentation - -[https://ems-project.github.io](https://ems-project.github.io) - -## Contribute - -We use [docsify](https://docsify.js.org/#/quickstart) for serving our documentation - -### Install -```bash -npm i docsify-cli -g -``` - -### Local serve [http://localhost:3000](http://localhost:3000) -```bash -docsify serve . -``` diff --git a/docs/_coverpage.md b/docs/_coverpage.md deleted file mode 100644 index b679c641a..000000000 --- a/docs/_coverpage.md +++ /dev/null @@ -1,12 +0,0 @@ - - -![logo](_media/logo.png) - -# elasticms 4.0 - -> Documentation - -- ... - -[GitHub](https://github.com/ems-project) -[Get Started](./getting-started/quick-start?id=quick-start) \ No newline at end of file diff --git a/docs/_media/favicon.ico b/docs/_media/favicon.ico deleted file mode 100644 index 7e7f86002d0848b1d9f0f6df4fbb255ceabf4596..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16624 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 diff --git a/docs/_media/logo.svg b/docs/_media/logo.svg deleted file mode 100644 index 74d54935b..000000000 --- a/docs/_media/logo.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100644 index cc1cda517..000000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,99 +0,0 @@ -- Getting started - - [Quick start](/getting-started/quick-start.md) - - [Setup your computer](/getting-started/local-dev.md) - - [Dev environment](/getting-started/dev-env.md) - - [Contributing](/getting-started/contributing.md) -- [Upgrade](/upgrade.md) -- Site building - - [Twig](/site-building/twig.md) -- [ElasticMS Admin](/elasticms-admin/index.md) - - [Environment variables](/elasticms-admin/environment-variables.md) - - [Commands](/elasticms-admin/commands/commands.md) - - ContentType - - [Config](/elasticms-admin/contentType/contentType.md) - - [Form](/elasticms-admin/contentType/form.md) - - [File preview](/elasticms-admin/contentType/file-preview.md) - - [Dashboard](/elasticms-admin/dashboard/dashboard.md) - - [Environment](/elasticms-admin/environment/environment.md) - - [User](/elasticms-admin/user/user.md) - - [WYSIWYG](/elasticms-admin/wysiwyg/wysiwyg.md) -- [ElasticMS Web](/elasticms-web/index.md) - - [Environment variables](/elasticms-web/parameters.md) - - [Security](/elasticms-web/security.md) -- [ElasticMS CLI](/elasticms-cli/index.md) - - [Environment variables](/elasticms-cli/parameters.md) - - [Common's commands](/elasticms-cli/commands.md) - - [Web Audit](/elasticms-cli/audit.md) - - [Update documents](/elasticms-cli/documents.md) - - [Migrate Web](/elasticms-cli/migrate-web.md) - - [Media File](/elasticms-cli/media-file.md) -- Bundles - - [Client Helper](/dev/client-helper-bundle/index.md) - - [Environment](/dev/client-helper-bundle/environment.md) - - [Routing](/dev/client-helper-bundle/routing.md) - - [Search](/dev/client-helper-bundle/search.md) - - [Twig](/dev/client-helper-bundle/twig.md) - - [Filters](/dev/client-helper-bundle/Twig/filters.md) - - [Functions](/dev/client-helper-bundle/Twig/functions.md) - - [Common](/dev/common-bundle/index.md) - - [Twig](/dev/common-bundle/twig.md) - - [Commands](/dev/common-bundle/commands.md) - - [Core API](/dev/common-bundle/core-api.md) - - [Helpers](/dev/common-bundle/helpers.md) - - [JSON Menu Nested](/dev/common-bundle/json-menu-nested.md) - - [JSON Menu](/dev/common-bundle/json-menu.md) - - [Processors](/dev/common-bundle/processors.md) - - [Spreadsheet](/dev/common-bundle/spreadsheet.md) - - [Storages](/dev/common-bundle/storages.md) - - [Core](/dev/core-bundle/index.md) - - [Concepts](/dev/core-bundle/elasticms.md) - - [Install](/dev/core-bundle/install.md) - - [Commands](/dev/core-bundle/commands.md) - - [API](/dev/core-bundle/api.md) - - [Content Type's actions](/dev/core-bundle/content-types/actions.md) - - [Content Type's views](/dev/core-bundle/content-types/views.md) - - [Content Type's transformers](/dev/core-bundle/content-types/transformers.md) - - [Routes](/dev/core-bundle/routes.md) - - [Tips & Tricks](/dev/core-bundle/tricks.md) - - Twig - - [Component](/dev/core-bundle/twig/component.md) - - [Core](/dev/core-bundle/twig/core.md) - - [Datatable](/dev/core-bundle/twig/datatable.md) - - [Extractor](/dev/core-bundle/twig/extractor.md) - - [I18N](/dev/core-bundle/twig/i18n.md) - - [JSON Menu Nested](/dev/core-bundle/twig/json-menu-nested.md) - - [Revision](/dev/core-bundle/twig/revision.md) - - [Styling](/dev/core-bundle/twig/styling.md) - - [Form](/dev/form-bundle/index.md) - - [Installation](/dev/form-bundle/install.md) - - [Configuration](/dev/form-bundle/config.md) - - [How to](/dev/form-bundle/example.md) - - [Handle Data](/dev/form-bundle/handlers.md) - - [Fields](/dev/form-bundle/fields.md) - - [Validations](/dev/form-bundle/validations.md) - - [Tips](/dev/form-bundle/tips.md) - - [Submission](/dev/submission-bundle/index.md) - - [Twig](/dev/submission-bundle/twig.md) - - Handlers - - [email](/dev/submission-bundle/handlers/email.md) - - [HTTP](/dev/submission-bundle/handlers/http.md) - - [Multipart](/dev/submission-bundle/handlers/multipart.md) - - [PDF](/dev/submission-bundle/handlers/pdf.md) - - [ServiceNow](/dev/submission-bundle/handlers/service-now.md) - - [SFTP](/dev/submission-bundle/handlers/sftp.md) - - [Soap](/dev/submission-bundle/handlers/soap.md) - - [Zip](/dev/submission-bundle/handlers/zip.md) -- Recipes - - [Export as word](/recipes/export-as-word.md) - - [Hierarchy to JSON Netsed](/recipes/hierarchy-to-json-netsed.md) - - [Store Data](/recipes/store-data.md) - - [Postprocessing](/recipes/postprocessing.md) -- Packages - - [Helper](/dev/helpers/index.md) - - [ArrayHelper](/dev/helpers/array-helper.md) - - [Standards](/dev/helpers/standard.md) - - [Xliff](/dev/xliff/index.md) -- Contributors - - [Migrate a repository](/maintainers/migrate-repo.md) - - [Migrate to elasticsearch 7](/maintainers/migrade-to-es7.md) - diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 4e3643244..000000000 --- a/docs/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - ElasticMS Documentation - - - - - - - - - - - - -
Please wait...
- - - - - - - - - - diff --git a/docs/package-lock.json b/docs/package-lock.json deleted file mode 100644 index 6ab682576..000000000 --- a/docs/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "docs", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/docs/theme-custom.css b/docs/theme-custom.css deleted file mode 100644 index d4f887f3f..000000000 --- a/docs/theme-custom.css +++ /dev/null @@ -1,9 +0,0 @@ -:root { - --content-max-width : 90%; - --theme-color : #00A7E2; - --link-color : #00A7E2; - --link-text-decoration : none; - --link-text-decoration--hover : underline ; - font-family: Source Sans Pro,Helvetica Neue,Arial,sans-serif; - font-size: 16px; -} \ No newline at end of file From c71e60993ba0af31c5cd608a7d80285328d60f5c Mon Sep 17 00:00:00 2001 From: David Mattei Date: Sun, 13 Oct 2024 12:47:48 +0200 Subject: [PATCH 04/17] fix: create new develop documentation --- doc/.vitepress/config.mts | 5 + doc/.vitepress/nav/sidebar.ts | 3 +- doc/api-examples.md | 49 ------- doc/guide/develop/contributing.md | 71 ++++++++++ doc/guide/develop/environment.md | 172 ++++++++++++++++++++++++ doc/guide/develop/monorepo.md | 28 ++++ doc/guide/getting-started.md | 32 +++++ doc/markdown-examples.md | 85 ------------ doc/release/upgrade-4x.md | 9 +- doc/release/upgrade-5x.md | 7 +- docs/getting-started/contributing.md | 74 ----------- docs/getting-started/dev-env.md | 191 --------------------------- docs/getting-started/local-dev.md | 67 ---------- docs/getting-started/quick-start.md | 27 ---- 14 files changed, 313 insertions(+), 507 deletions(-) delete mode 100644 doc/api-examples.md create mode 100644 doc/guide/develop/monorepo.md delete mode 100644 doc/markdown-examples.md delete mode 100644 docs/getting-started/contributing.md delete mode 100644 docs/getting-started/dev-env.md delete mode 100644 docs/getting-started/local-dev.md delete mode 100644 docs/getting-started/quick-start.md diff --git a/doc/.vitepress/config.mts b/doc/.vitepress/config.mts index 9e5b71f2a..716e84f35 100644 --- a/doc/.vitepress/config.mts +++ b/doc/.vitepress/config.mts @@ -17,6 +17,11 @@ export default defineConfig({ logo: '/logo.png', nav: navbar, sidebar: sidebar, + outline: 'deep', + editLink: { + pattern: 'https://github.com/ems-project/elasticms/edit/5.x/doc/:path', + text: 'Edit this page on GitHub' + }, socialLinks: [ { icon: 'github', link: 'https://github.com/ems-project/elasticms' } ], diff --git a/doc/.vitepress/nav/sidebar.ts b/doc/.vitepress/nav/sidebar.ts index 5bfc8c8f5..ace700b9b 100644 --- a/doc/.vitepress/nav/sidebar.ts +++ b/doc/.vitepress/nav/sidebar.ts @@ -22,8 +22,9 @@ const sidebar: DefaultTheme.SidebarItem[] = { text: 'Develop', collapsed: true, items: [ + {text: 'Monorepo', link: '/guide/develop/monorepo' }, + {text: 'Contributing', link: '/guide/develop/contributing'}, {text: 'Setup environment', link: '/guide/develop/environment' }, - {text: 'Contributing', link: '/guide/develop/contributing'} ] } ] diff --git a/doc/api-examples.md b/doc/api-examples.md deleted file mode 100644 index 6bd8bb5c1..000000000 --- a/doc/api-examples.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -outline: deep ---- - -# Runtime API Examples - -This page demonstrates usage of some of the runtime APIs provided by VitePress. - -The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files: - -```md - - -## Results - -### Theme Data -
{{ theme }}
- -### Page Data -
{{ page }}
- -### Page Frontmatter -
{{ frontmatter }}
-``` - - - -## Results - -### Theme Data -
{{ theme }}
- -### Page Data -
{{ page }}
- -### Page Frontmatter -
{{ frontmatter }}
- -## More - -Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata). diff --git a/doc/guide/develop/contributing.md b/doc/guide/develop/contributing.md index 854139a31..e356bd3e5 100644 --- a/doc/guide/develop/contributing.md +++ b/doc/guide/develop/contributing.md @@ -1 +1,72 @@ # Contributing + +All contributes can be done by forking +or [monorepo](https://github.com/ems-project/elasticms) and created pull +requests. + +## Code Quality + +Quality off the pull requests is insured by: + +- [PHP Coding Standards Fixer](https://cs.symfony.com) +- [PHPStan](https://phpstan.org/) +- [PHPUnit](https://phpunit.de/) + +Our composer has aliases defined for checking before submitting pull request. + +```bash +composer phpall +composer phpcs +composer phpstan +composer phpunit +``` + +[Rector](https://getrector.org/) is also available for ensuring that PHP and +Symfony best practices are followed. + +`````bash +composer rector +````` + +## Pull requests + +Submitted pull requests will be validated by elasticms developers and merged +when approved. +Add a good description, detailed commit messages and multiple small pull +requests is preferred. + +### Target branch + +Bugfixes should always target the lowest branch possible. + +New features should target the default branch. + +### Title rules + +The pull request title should follow the +git [conventional commits](https://www.conventionalcommits.org/) standard. +This is forced with a GitHub action. + +On merge all commits are squashed and the PR title is used as commit message. +Sub commits inside the pull request are not required to follow the conventional +commits standard. + +Examples: + +* fix(user): update profile 500 error +* fix(user): change password not updating +* feat(wysiwyg): media library support + +| type | section (changelog) | description | +|----------|--------------------------|---------------------------------------------------------------------------------------------------------| +| feat | Features | A new feature | +| fix | Bug Fixes | A bug fix | +| docs | Documentation | Documentation only changes | +| style | Styles | Changes that do not affect the meaning of the code (white-space formatting missing semi-colons etc) | +| refactor | Code Refactoring | A code change that neither fixes a bug nor adds a feature | +| perf | Performance Improvements | A code change that improves performance | +| test | Tests | Adding missing tests or correcting existing tests | +| build | Builds | Changes that affect the build system or external dependencies (example scopes gulp broccoli npm) | +| ci | Continuous Integrations | Changes to our CI configuration files and scripts (example scopes Travis Circle BrowserStack SauceLabs) | +| chore | Chores | Other changes that don't modify src or test files | +| revert | Reverts | Reverts a previous commit | diff --git a/doc/guide/develop/environment.md b/doc/guide/develop/environment.md index 081d3c8ec..50211f825 100644 --- a/doc/guide/develop/environment.md +++ b/doc/guide/develop/environment.md @@ -1 +1,173 @@ # Setup environment + +We write our documentation for Unix systems, as our setup relies on Makefiles. + +## System requirements + +- [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) +- [PHP 8.1](https://www.php.net/manual/en/install.php) +- [Composer](https://getcomposer.org/download/) +- [Symfony CLI](https://symfony.com/download) +- [Docker](https://docs.docker.com/get-started/get-docker/) +- [Node.js (NPM)](https://nodejs.org/en/download/package-manager) + +## PHP configuration + +```ini +; The admin requires a high memory limit +memory_limit = 2048M +; When set to 1, assertions are active and will trigger errors if they fail. +zend.assertions = 1 +``` + +## Initialization + +To start the ElasticMS monorepo, run the following commands: + +```bash +make init +make start +make db-create/"db_dev" SCHEMA="schema_dev_adm" +cd elasticms-admin +# change DB_URL in .env.local -> DB_URL="pgsql://db_dev:db_dev@127.0.0.1:5432/db_dev" +php bin/console doctrine:migrations:migrate +php bin/console emsco:user:create --super-admin +php bin/console asset:install --symlink +``` + +* The Admin application is accessible at http://localhost:8881. +* The Web application is accessible at http://localhost:8882. + +Check the [Makefile](https://github.com/ems-project/elasticms/blob/5.x/Makefile) +for other usefull commands. + +## Docker services + +| Service | Description | Port | +|----------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------| +| [Traefik](http://localhost:8888/dashboard/#/) | Traefik is a modern reverse proxy and load balancer that automatically manages routing for microservices and applications, simplifying traffic management in dynamic environments. | 8888 | +| [es01](http://es01.localhost/),[es02](http://es02.localhost/),[es03](http://es03.localhost/) | Elasticsearch is a distributed, RESTful search and analytics engine designed for fast and scalable data retrieval. | 9201 | +| [Kibana](http://kibana.localhost/app/dev_tools#/console) | Kibana is a data visualization and exploration tool for Elasticsearch, allowing users to create interactive dashboards and analyze data. | 5601 | +| PostgreSQL | PostgreSQL is a powerful, open-source relational database management system known for its advanced features, extensibility, and SQL compliance. | 5432 | +| MariaDB | MariaDB: MariaDB is an open-source relational database management system that is a drop-in replacement for MySQL, offering enhanced performance, security, and features. | 3306 | +| [MinIO](http://minio.localhost/login) | MinIO is a high-performance, distributed object storage system designed for storing unstructured data, compatible with Amazon S3 APIs. | 9000 | +| [Redis](http://redis-commander.localhost) | Redis is an in-memory data structure store used as a database, cache, and message broker for high-performance applications. | 6379 | +| [Tika](http://tika.localhost) | Apache Tika extracts metadata and text from various document formats for content analysis and processing. | 9998 | +| [Mailhog](http://mailhog.localhost/) | MailCatcher is a simple SMTP server that captures and displays sent emails for development and testing purposes | 1025 | + +## Loading and Saving Database Dumps + +If you need to load an existing ElasticMS database dump, ensure that the dump’s +schema matches the current database schema. + +::: code-group + +```bash [loading] +make db-load/"db_example" DUMP=./dump_example.sql +``` + +```bash [saving] +make db-dump/"db_example" SCHEMA="schema_example_adm" +``` + +::: + +## Identity provider (IDP) (Keycloak) + +ElasticMS Web includes built-in OAuth2 and SAML authenticators. For more +information, see the [Web Security](/elasticms-web/security.md) documentation. + +For development and testing purposes, you may need to start an Identity +Provider (IDP). To facilitate this, we have created a subdirectory named idp, +which contains the necessary services (Keycloak and PostgreSQL). + +### Initialization + +```bash +cd docker/idp +docker compose up -d +``` + +::: code-group + +```bash [import data] +docker compose exec keycloak sh /opt/keycloak/bin/kc.sh import --dir /data +docker compose up -d --force-recreate +``` + +```bash [export data] +docker compose exec keycloak sh /opt/keycloak/bin/kc.sh export --dir /data --users same_file --realm elasticms +``` + +::: + +### URLs + +* Administration console: http://keycloak.localhost or http://localhost:9081 + > credentials: admin/changeme +* Elasticms keycloak realm: http://keycloak.localhost/realms/elasticms +* Login realm: http://keycloak.localhost/realms/elasticms/account + > credentials: user1@example.com changeme or user2@example.com changeme + + +### Environment variables + +::: code-group + +```dotenv [OAuth Authentication] +EMSCH_OAUTH2=true +EMSCH_OAUTH2_AUTH_SERVER='http://keycloak.localhost' +EMSCH_OAUTH2_REALM='elasticms' +EMSCH_OAUTH2_CLIENT_ID='demo-skeleton-oauth2' +EMSCH_OAUTH2_CLIENT_SECRET='zuB3n0uZ4Ioo27ugsIjiT7vFVqmz5Zfq' +EMSCH_OAUTH2_REDIRECT_URI='http://localhost:8882/oauth2/connect' +EMSCH_OAUTH2_VERSION=24.0.3 +EMSCH_OAUTH2_ENCRYPTION_ALGORITHM=RS256 +EMSCH_OAUTH2_ENCRYPTION_KEY=LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNvVENDQVlrQ0JnR0dPc2hTZ0RBTkJna3Foa2lHOXcwQkFRc0ZBREFVTVJJd0VBWURWUVFEREFsbGJHRnoKZEdsamJYTXdIaGNOTWpNd01qRXdNVEF3TWpNeVdoY05Nek13TWpFd01UQXdOREV5V2pBVU1SSXdFQVlEVlFRRApEQWxsYkdGemRHbGpiWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRRElDY3lEClA0S3doUHVJV0xza0JJdDRjanFLdGV3K05wZTNSKzJ0SEc5QkMrYjZHMGNSNzhrWThTZ3pmTkNCTC9RZTVHK0kKTUE4YU44cktienJQWEJvd1JNS0hoRlhqRy8rR042M2docFNVeFN2ZHpMcEc5UGFVaExEZTVXR21wTFMycTcrdQp2QjRJZGtiYytJaENqV0VHMEJQSThCaXpkZVJEYWJ2NmVVYWFHVzYyT0VwU0tXQWxQSzZ4K0x0YXZSK0xCaXhnCm5ob0FrNjZGYXZjdUxYS28yR2x1djB6UVB5elhMRzdhMytyaXJmMjRXRndhMElHemxSd0xmTHpnRXFYQ0dIVjcKaDJ1VmRFNDVRc0Nmb0pZazJsWmRvOHJlSFIxK3VSdkNjM3pIOGVHdUY1eVpIS09neWMvZTRHYXNZdEJ1Vm5qaQoxQmJRaEJQSi84RlhBTWtSQWdNQkFBRXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBSHc5WGZLTHhCcHZZbGNHCnJFUVNCVmg2dTY0cnRSZ3pNRkpaNlV6S3FQWG16a0s1WDlUVVBFYVFvbnBQc0lldFFySWtaOWVzMlYvd1Q5RHgKUmJ0MnVUTTE1aksvZmxLclBoTWdwdnArWHBpTUVOMEtVdFVwakptRjRxYVJrY0ZpbjYyL2FicHhtaW1pNEptNAp2UGE0VmJ0cVY4YWp3aGl5T1IyOUVwRWd1WHBxLzVDUWVucWhQR09XSlpFSW1nK3JEcjlDNHVQWDFtdFBKRTZsCmZQQ08wSkZkRnpwbzlFdU90VW5XbVVRVTMrUHZzSnZSWk9Xd0pGMWhEeTVsdTBKRnh1dVRDeXNXQythQ3o5NDEKU1cvSGs4a0M2OUxYNXUwcEcvSWZlNE1XRG11cnRacHI0Q21Wc3NHUEl3eC9zRm5oOFNwck1KZ21LTE1EdkdqeQpTdnB0TjRJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t +``` + +```dotenv [SAML Authentication] +EMSCH_SAML=true +EMSCH_SAML_SP_ENTITY_ID='demo-skeleton-saml' +EMSCH_SAML_SP_PUBLIC_KEY='MIIC2zCCAcMCBgGGPHWIuzANBgkqhkiG9w0BAQsFADAxMS8wLQYDVQQDDCZodHRwOi8vbG9jYWxob3N0Ojg4ODIvc2FtbC9sb2dpbl9jaGVjazAeFw0yMzAyMTAxNzUxMjFaFw0zMzAyMTAxNzUzMDFaMDExLzAtBgNVBAMMJmh0dHA6Ly9sb2NhbGhvc3Q6ODg4Mi9zYW1sL2xvZ2luX2NoZWNrMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0xU6ggTVggU3aG79Iz28R30IaRk47/LUxOEoBKbwr+Y+krFhlDfkJXnAxX8vIkeXBoYFVZ9BV+ZpzFv2kqdHbPWrqdti/q0DIRuczczO+stHGuJjrohkj6YznwGj5wNyIpeTid0G6uud2Ke72MAIo1whcm4zQ1Sw7Pl8MHp19nfFvOwri+COW/iJrrDn5PCn7/4QqquLgaUd/PXNt3jDOO7S0llY4Ra38KxCmLvFkQ63maTNO74HZTVBwZNB9W7YoNa82EL4jMafS+rB68jkfF8+8YUh8ZrcmDpyREzVNZ8n76AGWlhQBXLiWg8I/xEMKtBvW069IePwKqxbcXxbyQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQDJccjFJTxgVRlR2DweY172gNLiMXEhhEfxHGjLU7dYvLpc4euiuR0MGfexm4eSDhfy0LsEr2LAr8fu5SqHjgGTIm6ttNFNL2WuWEZkMs0cUqc2uY4RiQyitvgpS6A65ggYFohxpdIZIvUcFtENiLnfLiGfUE3Z+ZYT5NuZbnzbP2WMdL1XmFE732UzTQlOii4aCS54IbWR1ZLdhkzaIb5eQJfGA97XYZT+OnDYKkFPZb3MQFwXNFOOOdpJ17cyUqJtzqz/GQaozacxdAy2GRZumoUWphvNzSuDMUQLdjnCt8jPkNz38NUjypRla/rotsAY7dzpbMMHqhyj8wXA3yeT' +EMSCH_SAML_SP_PRIVATE_KEY='MIIEowIBAAKCAQEA0xU6ggTVggU3aG79Iz28R30IaRk47/LUxOEoBKbwr+Y+krFhlDfkJXnAxX8vIkeXBoYFVZ9BV+ZpzFv2kqdHbPWrqdti/q0DIRuczczO+stHGuJjrohkj6YznwGj5wNyIpeTid0G6uud2Ke72MAIo1whcm4zQ1Sw7Pl8MHp19nfFvOwri+COW/iJrrDn5PCn7/4QqquLgaUd/PXNt3jDOO7S0llY4Ra38KxCmLvFkQ63maTNO74HZTVBwZNB9W7YoNa82EL4jMafS+rB68jkfF8+8YUh8ZrcmDpyREzVNZ8n76AGWlhQBXLiWg8I/xEMKtBvW069IePwKqxbcXxbyQIDAQABAoIBAAWIiu4Znlc4N8mfDze7SJI/LtdCeAGiRf2bQWdN0QVrbbx+teYiyPJKjMkgmmW1prnfDYi/EgFx4tgemQojJHYwwn1DaQbwFiLqDGRAuDRO2+BSivZqUOiLHNNQQbGun3FUs+NrTeEeqBaj3wLBlfhiU+YiCWn8cF7l82F59FmvoecdYhGo0Gs4tKMl58iiBfw1qelDrYnbXDLQ3gvOCH0EIA7+zv+rjT5oWvomMuPxq9rHRt01voyopd4Oykb7R7DERCrjXotoywYmU0TCWGAOPoWe0n0W8uE7aAqVl3RBiKeS3xVn4mDhetvnt3drLrvi+VoQ5NrFXhnSiGhnDAECgYEA8WbU2GvBCTbPk2XWqHtRoU6/43JNKRwc9DBlIxPcHTRXWZMkHV6TPFpLMwklhkU+FzLp87pdvkVeXY1lzMRgXS/kBxEp3QpFuJa8pycBN34tY6t7NZbd4APkROAUAHxzmFjlqKKXC9mm9o6TGToWxbIYMlHbXars8py64CmVZ4kCgYEA39kHWmuwWLwWzcaJWF26plWZDhZ0ncWoo6nV+hxMb+t3bNxvDKYxsFfavrjWKrYf7h4kZv4n/ttqCQ2ih7P0J/0GPYDVio45nA/gHBjhIvMTX1Epy5XUiOudNu32XdXuVLav1l/+GD98r6+usZyl6aCysIOaRsdluW2pn8xOAkECgYEAnbL8puk1sMxCrFrh8SymdgdY6b/Y0ltQOuGGoHSv3dA8pAKwnBMVgl7GM2/tOJrxZfxXw2XjKZJthBYEA9Hh1d6cS1WWEJVOWLj4QwYDEHp4Ml1q3uZQybAhJjFwP6UNat/gH9sfa5ljLjyTse41xC6FChJZiQZJRnDGz/u6Y2kCgYApCdHmSt3utrT7js15TN2+Ru0jfwxsLGOpdaaMDwoYbrPbWmJlkEaFzOWGl75z4CXkctQ7qZbNi45aEIzekihN+H5fYjJED6USLnroy8rirGu9ytR9xX9Mht2wx1mmhGUIVOHRzJF6ApGqZ+wAFfb46QQ5hjcPiNjmcOtrJ3qZwQKBgFguJ8dyjKWSooUhXZyOywjbP9uqsl/cJi9GgkaVQ7cVLwgB9D517PO+GvIuc1nmQ3kyaHpv79PxaRcY6+VX0e8giAS1yMH+Av6j47rshTmS3GP6MGEsrsOHZTLjG+MFfIyUOy0zWPE+VPj+vRhIWZo+EdfhAWXjLt+C22RvCTMd' +EMSCH_SAML_IDP_ENTITY_ID='http://keycloak.localhost/realms/elasticms' +EMSCH_SAML_IDP_PUBLIC_KEY='MIICoTCCAYkCBgGGOshSgDANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAllbGFzdGljbXMwHhcNMjMwMjEwMTAwMjMyWhcNMzMwMjEwMTAwNDEyWjAUMRIwEAYDVQQDDAllbGFzdGljbXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDICcyDP4KwhPuIWLskBIt4cjqKtew+Npe3R+2tHG9BC+b6G0cR78kY8SgzfNCBL/Qe5G+IMA8aN8rKbzrPXBowRMKHhFXjG/+GN63ghpSUxSvdzLpG9PaUhLDe5WGmpLS2q7+uvB4Idkbc+IhCjWEG0BPI8BizdeRDabv6eUaaGW62OEpSKWAlPK6x+LtavR+LBixgnhoAk66FavcuLXKo2Gluv0zQPyzXLG7a3+rirf24WFwa0IGzlRwLfLzgEqXCGHV7h2uVdE45QsCfoJYk2lZdo8reHR1+uRvCc3zH8eGuF5yZHKOgyc/e4GasYtBuVnji1BbQhBPJ/8FXAMkRAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAHw9XfKLxBpvYlcGrEQSBVh6u64rtRgzMFJZ6UzKqPXmzkK5X9TUPEaQonpPsIetQrIkZ9es2V/wT9DxRbt2uTM15jK/flKrPhMgpvp+XpiMEN0KUtUpjJmF4qaRkcFin62/abpxmimi4Jm4vPa4VbtqV8ajwhiyOR29EpEguXpq/5CQenqhPGOWJZEImg+rDr9C4uPX1mtPJE6lfPCO0JFdFzpo9EuOtUnWmUQU3+PvsJvRZOWwJF1hDy5lu0JFxuuTCysWC+aCz941SW/Hk8kC69LX5u0pG/Ife4MWDmurtZpr4CmVssGPIwx/sFnh8SprMJgmKLMDvGjySvptN4I=' +EMSCH_SAML_IDP_SSO='http://keycloak.localhost/realms/elasticms/protocol/saml' +``` + +> [!IMPORTANT] +> If you use php xdebug change http://keycloak.localhost to http://localhost:9081 + +::: + + +| Variable | Location | +|-----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| +| EMSCH_OAUTH2_CLIENT_ID | [client settings](http://keycloak.localhost/admin/master/console/#/elasticms/clients/55e433be-33a4-46cf-b972-36eccc5cebb0/settings) | +| EMSCH_OAUTH2_CLIENT_SECRET | [client credentials](http://keycloak.localhost/admin/master/console/#/elasticms/clients/55e433be-33a4-46cf-b972-36eccc5cebb0/credentials) | +| EMSCH_OAUTH2_REDIRECT_URI | Valid redirect URIs on the client settings page | +| EMSCH_OAUTH2_VERSION | [master realm info](http://keycloak.localhost/admin/master/console/#/master/info) | +| EMSCH_OAUTH2_ENCRYPTION_ALGORITHM | RS256 [client advanced settings](http://keycloak.localhost/admin/master/console/#/elasticms/clients/55e433be-33a4-46cf-b972-36eccc5cebb0/advanced) | +| EMSCH_OAUTH2_ENCRYPTION_KEY | see below | +| | | +| EMSCH_SAML_SP_ENTITY_ID | [client settings](http://keycloak.localhost/admin/master/console/#/elasticms/clients/a959232e-2993-42d2-ab19-0de899880c1a/settings) | +| EMSCH_SAML_SP_PUBLIC_KEY | [client keys](http://keycloak.localhost/admin/master/console/#/elasticms/clients/a959232e-2993-42d2-ab19-0de899880c1a/keys) | +| EMSCH_SAML_SP_PRIVATE_KEY | You receive the private key on generation | +| EMSCH_SAML_IDP_PUBLIC_KEY | [realm descriptor](http://keycloak.localhost/realms/elasticms/protocol/saml/descriptor) | + +::: details Generate OAuth2 encryption key + +In Keycloak, you can define an encryption certificate. The private key (keystore.p12) is provided when the certificate is created, but it is not stored in Keycloak. + +```bash +openssl pkcs12 --nokeys --info -in keystore.p12 +``` + +Base64 encode the certificate and use it as encryption key + +```dotenv +EMSCH_OAUTH2_ENCRYPTION_KEY=Base64(-----BEGIN CERTIFICATE-----.....-----END CERTIFICATE-----). +``` + +::: diff --git a/doc/guide/develop/monorepo.md b/doc/guide/develop/monorepo.md new file mode 100644 index 000000000..26389529e --- /dev/null +++ b/doc/guide/develop/monorepo.md @@ -0,0 +1,28 @@ +# Monorepo + +The monorepo includes the following applications: + +- [Demo application](https://github.com/ems-project/elasticms-demo) +- [Admin application](https://github.com/ems-project/elasticms-admin) +- [Web application](https://github.com/ems-project/elasticms-web) +- [CLI application](https://github.com/ems-project/elasticms-cli) + +It also contains the following bundles: + +| Name | Description | +|-------------------------------------------------------------------------------|--------------------------------------------------------| +| [EMSAdminUIBundle](https://github.com/ems-project/EMSAdminUIBundle) | Frontend bundle for the admin application | +| [EMSClientHelperBundle](https://github.com/ems-project/EMSClientHelperBundle) | Used in the web application for frontend functionality | +| [EMSCommonBundle](https://github.com/ems-project/EMSCommonBundle) | Provides shared logic and utilities used across all applications | +| [EMSCoreBundle](https://github.com/ems-project/EMSCoreBundle) | Exclusively used in the admin application | +| [EMSFormBundle](https://github.com/ems-project/EMSFormBundle) | Provides support for building web forms | +| [EMSSubmissionBundle](https://github.com/ems-project/EMSSubmissionBundle) | Handles form submissions | +| [helpers](https://github.com/ems-project/helpers) | A collection of utility functions | +| [xliff](https://github.com/ems-project/xliff) | Manages XLIFF translations | + +For building our mono repository we used +the [symplify/monorepo-builder](https://github.com/symplify/monorepo-builder). + +``` +vendor/bin/monorepo-builder validate +``` diff --git a/doc/guide/getting-started.md b/doc/guide/getting-started.md index 69a5d543e..3f2672723 100644 --- a/doc/guide/getting-started.md +++ b/doc/guide/getting-started.md @@ -1 +1,33 @@ # Getting started + +## Demo Application + +To explore the full capabilities of ElasticMS, you can check out +the [demo](https://github.com/ems-project/elasticms-demo) application. Follow +the installation instructions provided in the README.md to +get started. + +## Feedback and Issues + +If you have any issues or feature requests, please report them +on [GitHub](https://github.com/ems-project/elasticms/issues). We welcome and +appreciate all feedback! + +## Contributing + +If you'd like to help improve ElasticMS, please refer to +the [contributing](./develop/contributing.md) documentation for guidelines on +how to get involved. + +## Docker images + +Elasticms ships in 3 docker images. Implementation details can be found inside +the [demo](https://github.com/ems-project/elasticms-demo) application +and [monorepo](https://github.com/ems-project/elasticms). + +- [elasticms/admin](https://github.com/ems-project/elasticms-admin-docker) + > The Symfony backend CMS application +- [elasticms/website-skeleton](https://github.com/ems-project/elasticms-web-docker) + > The Symfony frontend application +- [elasticms/cli](https://github.com/ems-project/elasticms-cli-docker) + > The Symfony CLI application used for running jobs. diff --git a/doc/markdown-examples.md b/doc/markdown-examples.md deleted file mode 100644 index f9258a550..000000000 --- a/doc/markdown-examples.md +++ /dev/null @@ -1,85 +0,0 @@ -# Markdown Extension Examples - -This page demonstrates some of the built-in markdown extensions provided by VitePress. - -## Syntax Highlighting - -VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting: - -**Input** - -````md -```js{4} -export default { - data () { - return { - msg: 'Highlighted!' - } - } -} -``` -```` - -**Output** - -```js{4} -export default { - data () { - return { - msg: 'Highlighted!' - } - } -} -``` - -## Custom Containers - -**Input** - -```md -::: info -This is an info box. -::: - -::: tip -This is a tip. -::: - -::: warning -This is a warning. -::: - -::: danger -This is a dangerous warning. -::: - -::: details -This is a details block. -::: -``` - -**Output** - -::: info -This is an info box. -::: - -::: tip -This is a tip. -::: - -::: warning -This is a warning. -::: - -::: danger -This is a dangerous warning. -::: - -::: details -This is a details block. -::: - -## More - -Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown). diff --git a/doc/release/upgrade-4x.md b/doc/release/upgrade-4x.md index ac8726daf..8249d8ffd 100644 --- a/doc/release/upgrade-4x.md +++ b/doc/release/upgrade-4x.md @@ -1,13 +1,8 @@ ---- -editLink: true -lang: en-US ---- - # Upgrade 4.x ## version 4.2.x -### Content type roles in twig +Content type roles in twig ```twig {% if is_granted(contentType.createRole) %} // [!code --] @@ -16,7 +11,7 @@ lang: en-US ## version 4.x -### Deprecated twig functions +Deprecated twig functions ```twig {% spaceless %} // [!code --] diff --git a/doc/release/upgrade-5x.md b/doc/release/upgrade-5x.md index a34a25e5e..0615ec5f5 100644 --- a/doc/release/upgrade-5x.md +++ b/doc/release/upgrade-5x.md @@ -1,8 +1,3 @@ ---- -editLink: true -lang: en-US ---- - # Upgrade 5.x ## version 5.22.x @@ -97,7 +92,7 @@ emsch_demo_asset_in_archive: ## version 5.3.x -### Deprecated emsch_add_environment +Deprecated emsch_add_environment In dashboards/views and action, we call `emsch_add_environment` for rendering a template from emsch. If elasticms-admin defines `EMSCH_ENV` and `EMSCH_ENVS`, this is not needed anymore. diff --git a/docs/getting-started/contributing.md b/docs/getting-started/contributing.md deleted file mode 100644 index c3fefb6b2..000000000 --- a/docs/getting-started/contributing.md +++ /dev/null @@ -1,74 +0,0 @@ -# Contributing - -Create a fork from our [elasticms](https//github.com/ems-project/elasticms) mono repository. - -## Pull requests - -Submitted pull requests will be validated by elasticms developers and merged when approved. - -Add a good description, detailed commit messages and multiple small pull requests is preferred. - -### Code Quality - -Quality off the pull requests is insured by: - -- [PHP Coding Standards Fixer](https://cs.symfony.com) -- [PHPStan](https://phpstan.org/) -- [PHPUnit](https://phpunit.de/) - -Our composer has aliases defined for checking before submitting pull request. - -```bash -composer phpcs -composer phpstan -composer phpunit -``` - -### Target branch - -Bugfixes should always target the lowest branch possible. - -New features should target the default branch. - -### Title - -The pull request title should follow the git [conventional commits](https://www.conventionalcommits.org/) standard. -This is forced with a GitHub action. - -On merge all commits are squashed and the PR title is used as commit message. -Sub commits inside the pull request are not required to follow the conventional commits standard. - -#### Examples -* fix(user): update profile 500 error -* fix(user): change password not updating -* feat(wysiwyg): media library support - -| type | section (changelog) | description | -|----------|--------------------------|---------------------------------------------------------------------------------------------------------| -| feat | Features | A new feature | -| fix | Bug Fixes | A bug fix | -| docs | Documentation | Documentation only changes | -| style | Styles | Changes that do not affect the meaning of the code (white-space formatting missing semi-colons etc) | -| refactor | Code Refactoring | A code change that neither fixes a bug nor adds a feature | -| perf | Performance Improvements | A code change that improves performance | -| test | Tests | Adding missing tests or correcting existing tests | -| build | Builds | Changes that affect the build system or external dependencies (example scopes gulp broccoli npm) | -| ci | Continuous Integrations | Changes to our CI configuration files and scripts (example scopes Travis Circle BrowserStack SauceLabs) | -| chore | Chores | Other changes that don't modify src or test files | -| revert | Reverts | Reverts a previous commit | - -## Rector - -[Rector](https://getrector.org/) is also available for ensuring that PHP and Symfony best practices are followed. - -`````bash -composer rector -````` - -## Monorepo builder - -For building our mono repository we used the [symplify/monorepo-builder](https://github.com/symplify/monorepo-builder). - -``` -vendor/bin/monorepo-builder validate -``` diff --git a/docs/getting-started/dev-env.md b/docs/getting-started/dev-env.md deleted file mode 100644 index 3e3beb951..000000000 --- a/docs/getting-started/dev-env.md +++ /dev/null @@ -1,191 +0,0 @@ -# Development environment - - -* [Development environment](#development-environment) - * [Start external micro-services](#start-external-micro-services) - * [Test your config](#test-your-config) - * [Local ports exposed](#local-ports-exposed) - * [Prerequisite](#prerequisite-) - * [Init elasticMS](#init-elasticms) - * [Load and save DB dumps](#load-and-save-db-dumps) - * [Identity provider (IDP) (Keycloak)](#identity-provider-idp-keycloak) - * [About PHP configuration](#about-php-configuration) - - -## Start external micro-services - -elasticMS comes with multiple micro-services: - -* Redis: cache and session -* elasticsearch: for indexing contents -* Tika: for extracting data from assets -* PosgresSQL or MySQL: As authentic source of data - -In order to simplify development all those services are available in a docker compose: - -```bash -make init -make start -``` - -### Test your config - -* [Traefik](http://localhost:8888/dashboard/#/): The middleware application used to route packages -* [Kibana](http://kibana.localhost/app/dev_tools#/console): Power tools for elasticsearch -* [es01](http://es01.localhost/),[es02](http://es02.localhost/),[es03](http://es03.localhost/): the hearts of elasticMS -* [Mailhog](http://mailhog.localhost/): A mail catcher -* [MinIO](http://minio.localhost/login): A S3 like service -* [Tika](http://tika.localhost): A S3 like service -* [Redis Commander](http://redis-commander.localhost): A Redis inspector tool - - -### Local ports exposed - -| Port | service | -|------|-----------------| -| 80 | traefik | -| 442 | traefik TLS | -| 1025 | mailhog | -| 3306 | mariadb | -| 5432 | postgres | -| 5601 | kibana | -| 6379 | redis | -| 8888 | traefik's admin | -| 9000 | minio | -| 9998 | tika | - -## Prerequisite - -```bash -cd ~ -wget https://get.symfony.com/cli/installer -O - | bash -sudo mv ~/.symfony5/bin/symfony /usr/local/bin/symfony -``` - -## Init elasticMS - -````bash -make init -make start -make db-create/"db_example" SCHEMA="schema_example_adm" -cd elasticms-admin -# change DB_URL in .env.local -> DB_URL="pgsql://db_example:db_example@127.0.0.1:5432/db_example" -php bin/console doctrine:migrations:migrate -php bin/console emsco:user:create --super-admin -php bin/console asset:install --symlink -```` - -[elasticMS Admin](http://localhost:8881) is now available. - -Useful make commands: - -* `make server-log/admin` -* `make server-log/web` - -## Load and save DB dumps - -You may want to load an existing elasticMS dump. If so please check the dump's schema matches the DB's schema. - -```bash -make db-load/"db_example" DUMP=./dump_example.sql -``` - -To make a dump: - -```bash -make db-dump/"db_example" SCHEMA="schema_example_adm" -``` - -## Identity provider (IDP) (Keycloak) - -Elasticms-web has a build in OAuth2 and SAML authenticator. see [elasticms-web/security](/elasticms-web/security.md). - -For developing and testing purposes you may want to start an IDP. -Therefor we created a subdirectory 'idp' containing the services (keycloak & postgres). - -```bash -cd docker/idp -docker compose up -d -``` - -1) Check if available on http://keycloak.localhost or http://localhost:9081 - - Administration Console -> `admin:changeme` - -2) Import the data and restart the keycloak service - ```bash - docker compose exec keycloak sh /opt/keycloak/bin/kc.sh import --dir /data - docker compose up -d --force-recreate - ``` - - If you want to export the data and versioning new settings - ```bash - docker compose exec keycloak sh /opt/keycloak/bin/kc.sh export --dir /data --users same_file --realm elasticms - ``` - -3) Verify `elasticms` realm is created - - Visit http://keycloak.localhost/realms/elasticms - -4) Login with elasticms users - - http://keycloak.localhost/realms/elasticms/account - - - user1@example.com changeme - - user2@example.com changeme - -5) Use the following environment variables in `elasticms-web` - -```.dotenv -EMSCH_OAUTH2=true -EMSCH_OAUTH2_AUTH_SERVER='http://keycloak.localhost' -EMSCH_OAUTH2_REALM='elasticms' -EMSCH_OAUTH2_CLIENT_ID='demo-skeleton-oauth2' -EMSCH_OAUTH2_CLIENT_SECRET='zuB3n0uZ4Ioo27ugsIjiT7vFVqmz5Zfq' -EMSCH_OAUTH2_REDIRECT_URI='http://localhost:8882/oauth2/connect' -EMSCH_OAUTH2_VERSION=24.0.3 -EMSCH_OAUTH2_ENCRYPTION_ALGORITHM=RS256 -EMSCH_OAUTH2_ENCRYPTION_KEY=LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNvVENDQVlrQ0JnR0dPc2hTZ0RBTkJna3Foa2lHOXcwQkFRc0ZBREFVTVJJd0VBWURWUVFEREFsbGJHRnoKZEdsamJYTXdIaGNOTWpNd01qRXdNVEF3TWpNeVdoY05Nek13TWpFd01UQXdOREV5V2pBVU1SSXdFQVlEVlFRRApEQWxsYkdGemRHbGpiWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRRElDY3lEClA0S3doUHVJV0xza0JJdDRjanFLdGV3K05wZTNSKzJ0SEc5QkMrYjZHMGNSNzhrWThTZ3pmTkNCTC9RZTVHK0kKTUE4YU44cktienJQWEJvd1JNS0hoRlhqRy8rR042M2docFNVeFN2ZHpMcEc5UGFVaExEZTVXR21wTFMycTcrdQp2QjRJZGtiYytJaENqV0VHMEJQSThCaXpkZVJEYWJ2NmVVYWFHVzYyT0VwU0tXQWxQSzZ4K0x0YXZSK0xCaXhnCm5ob0FrNjZGYXZjdUxYS28yR2x1djB6UVB5elhMRzdhMytyaXJmMjRXRndhMElHemxSd0xmTHpnRXFYQ0dIVjcKaDJ1VmRFNDVRc0Nmb0pZazJsWmRvOHJlSFIxK3VSdkNjM3pIOGVHdUY1eVpIS09neWMvZTRHYXNZdEJ1Vm5qaQoxQmJRaEJQSi84RlhBTWtSQWdNQkFBRXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBSHc5WGZLTHhCcHZZbGNHCnJFUVNCVmg2dTY0cnRSZ3pNRkpaNlV6S3FQWG16a0s1WDlUVVBFYVFvbnBQc0lldFFySWtaOWVzMlYvd1Q5RHgKUmJ0MnVUTTE1aksvZmxLclBoTWdwdnArWHBpTUVOMEtVdFVwakptRjRxYVJrY0ZpbjYyL2FicHhtaW1pNEptNAp2UGE0VmJ0cVY4YWp3aGl5T1IyOUVwRWd1WHBxLzVDUWVucWhQR09XSlpFSW1nK3JEcjlDNHVQWDFtdFBKRTZsCmZQQ08wSkZkRnpwbzlFdU90VW5XbVVRVTMrUHZzSnZSWk9Xd0pGMWhEeTVsdTBKRnh1dVRDeXNXQythQ3o5NDEKU1cvSGs4a0M2OUxYNXUwcEcvSWZlNE1XRG11cnRacHI0Q21Wc3NHUEl3eC9zRm5oOFNwck1KZ21LTE1EdkdqeQpTdnB0TjRJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t - -EMSCH_SAML=true -EMSCH_SAML_SP_ENTITY_ID='demo-skeleton-saml' -EMSCH_SAML_SP_PUBLIC_KEY='MIIC2zCCAcMCBgGGPHWIuzANBgkqhkiG9w0BAQsFADAxMS8wLQYDVQQDDCZodHRwOi8vbG9jYWxob3N0Ojg4ODIvc2FtbC9sb2dpbl9jaGVjazAeFw0yMzAyMTAxNzUxMjFaFw0zMzAyMTAxNzUzMDFaMDExLzAtBgNVBAMMJmh0dHA6Ly9sb2NhbGhvc3Q6ODg4Mi9zYW1sL2xvZ2luX2NoZWNrMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0xU6ggTVggU3aG79Iz28R30IaRk47/LUxOEoBKbwr+Y+krFhlDfkJXnAxX8vIkeXBoYFVZ9BV+ZpzFv2kqdHbPWrqdti/q0DIRuczczO+stHGuJjrohkj6YznwGj5wNyIpeTid0G6uud2Ke72MAIo1whcm4zQ1Sw7Pl8MHp19nfFvOwri+COW/iJrrDn5PCn7/4QqquLgaUd/PXNt3jDOO7S0llY4Ra38KxCmLvFkQ63maTNO74HZTVBwZNB9W7YoNa82EL4jMafS+rB68jkfF8+8YUh8ZrcmDpyREzVNZ8n76AGWlhQBXLiWg8I/xEMKtBvW069IePwKqxbcXxbyQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQDJccjFJTxgVRlR2DweY172gNLiMXEhhEfxHGjLU7dYvLpc4euiuR0MGfexm4eSDhfy0LsEr2LAr8fu5SqHjgGTIm6ttNFNL2WuWEZkMs0cUqc2uY4RiQyitvgpS6A65ggYFohxpdIZIvUcFtENiLnfLiGfUE3Z+ZYT5NuZbnzbP2WMdL1XmFE732UzTQlOii4aCS54IbWR1ZLdhkzaIb5eQJfGA97XYZT+OnDYKkFPZb3MQFwXNFOOOdpJ17cyUqJtzqz/GQaozacxdAy2GRZumoUWphvNzSuDMUQLdjnCt8jPkNz38NUjypRla/rotsAY7dzpbMMHqhyj8wXA3yeT' -EMSCH_SAML_SP_PRIVATE_KEY='MIIEowIBAAKCAQEA0xU6ggTVggU3aG79Iz28R30IaRk47/LUxOEoBKbwr+Y+krFhlDfkJXnAxX8vIkeXBoYFVZ9BV+ZpzFv2kqdHbPWrqdti/q0DIRuczczO+stHGuJjrohkj6YznwGj5wNyIpeTid0G6uud2Ke72MAIo1whcm4zQ1Sw7Pl8MHp19nfFvOwri+COW/iJrrDn5PCn7/4QqquLgaUd/PXNt3jDOO7S0llY4Ra38KxCmLvFkQ63maTNO74HZTVBwZNB9W7YoNa82EL4jMafS+rB68jkfF8+8YUh8ZrcmDpyREzVNZ8n76AGWlhQBXLiWg8I/xEMKtBvW069IePwKqxbcXxbyQIDAQABAoIBAAWIiu4Znlc4N8mfDze7SJI/LtdCeAGiRf2bQWdN0QVrbbx+teYiyPJKjMkgmmW1prnfDYi/EgFx4tgemQojJHYwwn1DaQbwFiLqDGRAuDRO2+BSivZqUOiLHNNQQbGun3FUs+NrTeEeqBaj3wLBlfhiU+YiCWn8cF7l82F59FmvoecdYhGo0Gs4tKMl58iiBfw1qelDrYnbXDLQ3gvOCH0EIA7+zv+rjT5oWvomMuPxq9rHRt01voyopd4Oykb7R7DERCrjXotoywYmU0TCWGAOPoWe0n0W8uE7aAqVl3RBiKeS3xVn4mDhetvnt3drLrvi+VoQ5NrFXhnSiGhnDAECgYEA8WbU2GvBCTbPk2XWqHtRoU6/43JNKRwc9DBlIxPcHTRXWZMkHV6TPFpLMwklhkU+FzLp87pdvkVeXY1lzMRgXS/kBxEp3QpFuJa8pycBN34tY6t7NZbd4APkROAUAHxzmFjlqKKXC9mm9o6TGToWxbIYMlHbXars8py64CmVZ4kCgYEA39kHWmuwWLwWzcaJWF26plWZDhZ0ncWoo6nV+hxMb+t3bNxvDKYxsFfavrjWKrYf7h4kZv4n/ttqCQ2ih7P0J/0GPYDVio45nA/gHBjhIvMTX1Epy5XUiOudNu32XdXuVLav1l/+GD98r6+usZyl6aCysIOaRsdluW2pn8xOAkECgYEAnbL8puk1sMxCrFrh8SymdgdY6b/Y0ltQOuGGoHSv3dA8pAKwnBMVgl7GM2/tOJrxZfxXw2XjKZJthBYEA9Hh1d6cS1WWEJVOWLj4QwYDEHp4Ml1q3uZQybAhJjFwP6UNat/gH9sfa5ljLjyTse41xC6FChJZiQZJRnDGz/u6Y2kCgYApCdHmSt3utrT7js15TN2+Ru0jfwxsLGOpdaaMDwoYbrPbWmJlkEaFzOWGl75z4CXkctQ7qZbNi45aEIzekihN+H5fYjJED6USLnroy8rirGu9ytR9xX9Mht2wx1mmhGUIVOHRzJF6ApGqZ+wAFfb46QQ5hjcPiNjmcOtrJ3qZwQKBgFguJ8dyjKWSooUhXZyOywjbP9uqsl/cJi9GgkaVQ7cVLwgB9D517PO+GvIuc1nmQ3kyaHpv79PxaRcY6+VX0e8giAS1yMH+Av6j47rshTmS3GP6MGEsrsOHZTLjG+MFfIyUOy0zWPE+VPj+vRhIWZo+EdfhAWXjLt+C22RvCTMd' -EMSCH_SAML_IDP_ENTITY_ID='http://keycloak.localhost/realms/elasticms' -EMSCH_SAML_IDP_PUBLIC_KEY='MIICoTCCAYkCBgGGOshSgDANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAllbGFzdGljbXMwHhcNMjMwMjEwMTAwMjMyWhcNMzMwMjEwMTAwNDEyWjAUMRIwEAYDVQQDDAllbGFzdGljbXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDICcyDP4KwhPuIWLskBIt4cjqKtew+Npe3R+2tHG9BC+b6G0cR78kY8SgzfNCBL/Qe5G+IMA8aN8rKbzrPXBowRMKHhFXjG/+GN63ghpSUxSvdzLpG9PaUhLDe5WGmpLS2q7+uvB4Idkbc+IhCjWEG0BPI8BizdeRDabv6eUaaGW62OEpSKWAlPK6x+LtavR+LBixgnhoAk66FavcuLXKo2Gluv0zQPyzXLG7a3+rirf24WFwa0IGzlRwLfLzgEqXCGHV7h2uVdE45QsCfoJYk2lZdo8reHR1+uRvCc3zH8eGuF5yZHKOgyc/e4GasYtBuVnji1BbQhBPJ/8FXAMkRAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAHw9XfKLxBpvYlcGrEQSBVh6u64rtRgzMFJZ6UzKqPXmzkK5X9TUPEaQonpPsIetQrIkZ9es2V/wT9DxRbt2uTM15jK/flKrPhMgpvp+XpiMEN0KUtUpjJmF4qaRkcFin62/abpxmimi4Jm4vPa4VbtqV8ajwhiyOR29EpEguXpq/5CQenqhPGOWJZEImg+rDr9C4uPX1mtPJE6lfPCO0JFdFzpo9EuOtUnWmUQU3+PvsJvRZOWwJF1hDy5lu0JFxuuTCysWC+aCz941SW/Hk8kC69LX5u0pG/Ife4MWDmurtZpr4CmVssGPIwx/sFnh8SprMJgmKLMDvGjySvptN4I=' -EMSCH_SAML_IDP_SSO='http://keycloak.localhost/realms/elasticms/protocol/saml' -``` - -> *IMPORT* For using xDebug change http://keycloak.localhost -> http://localhost:9081 - -| Variable | Location | -|-----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| -| EMSCH_OAUTH2_CLIENT_ID | [client settings](http://keycloak.localhost/admin/master/console/#/elasticms/clients/55e433be-33a4-46cf-b972-36eccc5cebb0/settings) | -| EMSCH_OAUTH2_CLIENT_SECRET | [client credentials](http://keycloak.localhost/admin/master/console/#/elasticms/clients/55e433be-33a4-46cf-b972-36eccc5cebb0/credentials) | -| EMSCH_OAUTH2_REDIRECT_URI | Valid redirect URIs on the client settings page | -| EMSCH_OAUTH2_VERSION | [master realm info](http://keycloak.localhost/admin/master/console/#/master/info) | -| EMSCH_OAUTH2_ENCRYPTION_ALGORITHM | RS256 [client advanced settings](http://keycloak.localhost/admin/master/console/#/elasticms/clients/55e433be-33a4-46cf-b972-36eccc5cebb0/advanced) | -| EMSCH_OAUTH2_ENCRYPTION_KEY | see below | -| | | -| EMSCH_SAML_SP_ENTITY_ID | [client settings](http://keycloak.localhost/admin/master/console/#/elasticms/clients/a959232e-2993-42d2-ab19-0de899880c1a/settings) | -| EMSCH_SAML_SP_PUBLIC_KEY | [client keys](http://keycloak.localhost/admin/master/console/#/elasticms/clients/a959232e-2993-42d2-ab19-0de899880c1a/keys) | -| EMSCH_SAML_SP_PRIVATE_KEY | You receive the private key on generation | -| EMSCH_SAML_IDP_PUBLIC_KEY | http://keycloak.localhost/realms/elasticms/protocol/saml/descriptor | - -* Generate oAuth2 encryption key - - This is the private key, received on creation and not stored in keycloak db. - ```bash - openssl pkcs12 --nokeys --info -in keystore.p12 - ``` - EMSCH_OAUTH2_ENCRYPTION_KEY=Base64(-----BEGIN CERTIFICATE-----.....-----END CERTIFICATE-----). - -## About PHP configuration - -Activate those PHP options inside you php.ini: - -```ini -zend.assertions = 1 -``` - -You can easily locate your php.ini file with the command: `php --info|grep php.ini` diff --git a/docs/getting-started/local-dev.md b/docs/getting-started/local-dev.md deleted file mode 100644 index 100a36443..000000000 --- a/docs/getting-started/local-dev.md +++ /dev/null @@ -1,67 +0,0 @@ -# How to setup a local development environment - -## Local development environment with Ubuntu - -### Docker - -```bash -sudo apt install docker -sudo groupadd docker -sudo usermod -aG docker $USER -newgrp docker -sudo chown root:docker /var/run/docker.sock -``` - -Then restart your computer. - - -### Composer and PHP - -Composer is required to resolve PHP dependencies. - -```bash -sudo apt install composer -sudo apt install php-common php-curl php-gd php-iconv php-intl php-json php-ldap php-mbstring php-mysql php-pgsql php-soap php-sqlite3 php-tidy php-xml php-zip -``` - -If you are using a mac with [mac port](https://www.macports.org/): - -```bash -sudo port install php81 php81-curl php81-gd php81-iconv php81-intl php81-ldap php81-mbstring php81-mysql php81-soap php81-tidy php81-zip -sudo port select php php81 -``` - -### Switch between multiple PHP versions - - -Switch between already installed PHP versions: -```bash -sudo update-alternatives --config php -``` - -Add a specific version: - -```bash -export PHP_VERSION=8.1 -sudo apt install php${PHP_VERSION} php${PHP_VERSION}-common php${PHP_VERSION}-curl php${PHP_VERSION}-gd php${PHP_VERSION}-iconv php${PHP_VERSION}-intl php${PHP_VERSION}-cli php${PHP_VERSION}-fpm php${PHP_VERSION}-ldap php${PHP_VERSION}-mbstring php${PHP_VERSION}-mysql php${PHP_VERSION}-pgsql php${PHP_VERSION}-soap php${PHP_VERSION}-sqlite3 php${PHP_VERSION}-tidy php${PHP_VERSION}-xml php${PHP_VERSION}-zip -``` - - - - -### Instal npm - -```bash -curl -fsSL https://deb.nodesource.com/setup_19.x | sudo -E bash - &&\ -sudo apt-get install -y nodejs -``` - -### Configure git - -```bash - -echo -e ".idea\nThumbs.db\n.DS_Store\n.vscode\n" > ~/.gitignore -git config --global core.excludesfile ~/.gitignore -git config --global core.autocrlf false -git config --global core.eol lf -``` \ No newline at end of file diff --git a/docs/getting-started/quick-start.md b/docs/getting-started/quick-start.md deleted file mode 100644 index 4d0e8d6be..000000000 --- a/docs/getting-started/quick-start.md +++ /dev/null @@ -1,27 +0,0 @@ -# Quick start - -## Repositories - -| Name | Description | -|---------------------------------------------------------------------------------|-------------------------------------------------------------| -| [elasticms](https://github.com/ems-project/elasticms) | Monorepo | -| [EMSClientHelperBundle](https://github.com/ems-project/EMSClientHelperBundle) | Symfony bundle for elasticms-web | -| [EMSCommonBundle](https://github.com/ems-project/EMSCommonBundle) | Symfony bundle for code shared with elasticms-admin,cli,web | -| [EMSCoreBundle](https://github.com/ems-project/EMSCoreBundle) | Symfony bundle for elasticms-admin | -| [EMSFormBundle](https://github.com/ems-project/EMSFormBundle) | Symfony bundle for generating forms | -| [EMSSubmissionBundle](https://github.com/ems-project/EMSSubmissionBundle) | Symfony bundle for handling form submissions | -| [helpers](https://github.com/ems-project/helpers) | helpers package | -| [xliff](https://github.com/ems-project/xliff) | xliff package | - -### Interface repositories -| Name | Description | -|-------------------------------------------------------------------|---------------------------| -| [elasticms-admin](https://github.com/ems-project/elasticms-admin) | Symfony project for admin | -| [elasticms-cli](https://github.com/ems-project/elasticms-cli) | Symfony project for cli | -| [elasticms-web](https://github.com/ems-project/elasticms-web) | Symfony project for web | - -### Docker repositories -| Name | Description | -|---------------------------------------------------------------------------------|------------------------| -| [elasticms-admin-docker](https://github.com/ems-project/elasticms-admin-docker) | Docker build for admin | -| [elasticms-web-docker](https://github.com/ems-project/elasticms-web-docker) | Docker build for web | \ No newline at end of file From 468fc4153aab0dcaf18c3fc25501f2cb1102fbad Mon Sep 17 00:00:00 2001 From: David Mattei Date: Sun, 13 Oct 2024 13:01:32 +0200 Subject: [PATCH 05/17] fix: migrate-repo.md --- doc/guide/develop/monorepo.md | 32 ++++++++++++++++++++++++++++++++ docs/maintainers/migrate-repo.md | 31 ------------------------------- 2 files changed, 32 insertions(+), 31 deletions(-) delete mode 100644 docs/maintainers/migrate-repo.md diff --git a/doc/guide/develop/monorepo.md b/doc/guide/develop/monorepo.md index 26389529e..c964304e7 100644 --- a/doc/guide/develop/monorepo.md +++ b/doc/guide/develop/monorepo.md @@ -26,3 +26,35 @@ the [symplify/monorepo-builder](https://github.com/symplify/monorepo-builder). ``` vendor/bin/monorepo-builder validate ``` + +## Migration + +Steps for migrating a repository into the monorepo. + +1. Add the code + ```bash + git remote add elasticms-admin git@github.com:ems-project/EMSCoreBundle.git + git fetch elasticms-admin + git read-tree --prefix=elasticms-admin -u elasticms-admin/4.x + git commit -m "Migrate elasticms-admin repo to EMS/elasticms-admin" + ``` +2. Merge composer + ```bash + vendor/bin/monorepo-builder merge + ``` +3. Resolve composer conflicts +4. Composer update + ```bash + composer update + ``` +5. Update tools + * Add the repo's `src` and `tests` folders to `.php-cs-fixer.dist.php` + * Add the repo's `src` folder to `phpstan.neon.dist` + * Add the repo's `src` and `tests` folders to `phpunit.xml.dist` +6. Run tools + ```bash + composer phpcs + composer phpstan + composer phpunit + composer rector + ``` diff --git a/docs/maintainers/migrate-repo.md b/docs/maintainers/migrate-repo.md deleted file mode 100644 index 4212d304b..000000000 --- a/docs/maintainers/migrate-repo.md +++ /dev/null @@ -1,31 +0,0 @@ - -# Migrate a repository into the monorepo - -## First steps ([source](https://medium.com/lgtm/migrating-to-the-monorepo-582106142654)) - -```bash -git remote add elasticms-admin git@github.com:ems-project/EMSCoreBundle.git -git fetch elasticms-admin -git read-tree --prefix=elasticms-admin -u elasticms-admin/4.x -git commit -m "Migrate elasticms-admin repo to EMS/elasticms-admin" -``` - -## Second steps ([source](https://tomasvotruba.com/blog/2020/06/15/how-to-create-monorepo-from-existing-repositories-in-7-steps/)) - -```bash -vendor/bin/monorepo-builder merge -``` - -Then resolve composer conflicts. - -```bash -composer update -``` - -Add the repo's `src` and `tests` folders to the `.php-cs-fixer.dist.php` file. Run `composer phpcs`. - -Add the repo's `src` folder to the `phpstan.neon.dist` file. Run `composer phpstan`. - -Add the repo's `src` and `tests` folders to the `phpunit.xml.dist` file. Run `composer phpunit`. - -Run `composer rector`. From ea8cb62ef22a8a917822f30f6da646e700e59f79 Mon Sep 17 00:00:00 2001 From: David Mattei Date: Sun, 13 Oct 2024 13:13:16 +0200 Subject: [PATCH 06/17] fix: migrate-to-es7.md --- doc/.vitepress/nav/sidebar.ts | 1 + doc/release/upgrade-4x.md | 51 ----------------------- doc/release/upgrade.md | 67 ++++++++++++++++++++++++++++++ docs/maintainers/migrade-to-es7.md | 5 --- 4 files changed, 68 insertions(+), 56 deletions(-) create mode 100644 doc/release/upgrade.md delete mode 100644 docs/maintainers/migrade-to-es7.md diff --git a/doc/.vitepress/nav/sidebar.ts b/doc/.vitepress/nav/sidebar.ts index ace700b9b..a106a8526 100644 --- a/doc/.vitepress/nav/sidebar.ts +++ b/doc/.vitepress/nav/sidebar.ts @@ -16,6 +16,7 @@ const sidebar: DefaultTheme.SidebarItem[] = { items: [ {text: 'Upgrade 5.x', link: '/release/upgrade-5x'}, {text: 'Upgrade 4.x', link: '/release/upgrade-4x'}, + {text: 'Upgrade', link: '/release/upgrade'}, ] }, { diff --git a/doc/release/upgrade-4x.md b/doc/release/upgrade-4x.md index 8249d8ffd..01e6b667b 100644 --- a/doc/release/upgrade-4x.md +++ b/doc/release/upgrade-4x.md @@ -46,54 +46,3 @@ Deprecated twig functions {% set email = email.from(fromMail) %} // [!code ++] {% do emsco_send_email(email) %} ``` - -## Tips and tricks - -### Backward compatibility route to old school assets path - -New route to redirect to the new asset's url. Route: - -```yaml -redirect_asset: - config: - path: 'bundles/emsch_assets/{slug}' - requirements: { slug: '^.+$' } - controller: 'emsch.controller.router::redirect' - template_static: template/redirects/asset.json.twig -``` - -Template (template/redirects/asset.json.twig): - -```twig -{% extends '@EMSCH/template/variables.twig' %} - -{% block request -%} -{% apply spaceless %} - {{ { url: asset(app.request.get('slug'), 'emsch') }|json_encode|raw }} -{% endapply %} -{% endblock -%} -``` - -### Create an old school "Corresponding revision" in the action menu - -Create an action for the content types you want with those parameters: - -* Name: `corresponding-revision` -* Label: `Corresponding revision` -* Icon: `Archive` -* Public: unchecked -* Environment: empty -* EDit with WYSIWYG: unchecked -* Role: `User` -* Render option: `Raw HTML` -* Body: - -```twig - - Corresponding revision - -``` diff --git a/doc/release/upgrade.md b/doc/release/upgrade.md new file mode 100644 index 000000000..42b852241 --- /dev/null +++ b/doc/release/upgrade.md @@ -0,0 +1,67 @@ +# Upgrade + +## Admin + +### Migrate your content to elasticsearch 7 + +- Remove the standard filter from all analyzers +- Check external content types have a _contenttype field +- Recompute all your content types, this will hightlight all post-processes and computed that you have to update. + +### Corresponding revision action + +In earlier versions of ElasticMS, there was an action called "Corresponding +Revision." If this feature is still required, we now have the ability to +configure it ourselves. + +To implement this, create an action for the desired content types using the +following parameters: + +* Name: `corresponding-revision` +* Label: `Corresponding revision` +* Icon: `Archive` +* Public: unchecked +* Environment: empty +* EDit with WYSIWYG: unchecked +* Role: `User` +* Render option: `Raw HTML` +* Body: + +```twig + + Corresponding revision + +``` + +## Web + +### Support old assets path + +To ensure backward compatibility, you may want to continue supporting the old +asset path. A new route can be set up to redirect to the updated asset URL. The +route is as follows: + +```yaml +redirect_asset: + config: + path: 'bundles/emsch_assets/{slug}' + requirements: { slug: '^.+$' } + controller: 'emsch.controller.router::redirect' + template_static: template/redirects/asset.json.twig +``` + +Template (template/redirects/asset.json.twig): + +```twig +{% extends '@EMSCH/template/variables.twig' %} + +{% block request -%} +{% apply spaceless %} + {{ { url: asset(app.request.get('slug'), 'emsch') }|json_encode|raw }} +{% endapply %} +{% endblock -%} +``` diff --git a/docs/maintainers/migrade-to-es7.md b/docs/maintainers/migrade-to-es7.md deleted file mode 100644 index c5ebfef0a..000000000 --- a/docs/maintainers/migrade-to-es7.md +++ /dev/null @@ -1,5 +0,0 @@ -# Migrate your content to elasticsearch 7 - - - Remove the standard filter from all analyzers - - Check external content types have a _contenttype field - - recompute all your content types, this will hightlight all post-processes and computed that you have to update. \ No newline at end of file From 077dac68c21310cb14ff0ae5da0a16c6ec8c41e4 Mon Sep 17 00:00:00 2001 From: David Mattei Date: Sun, 13 Oct 2024 16:02:23 +0200 Subject: [PATCH 07/17] fix: remove old index.md --- doc/.vitepress/nav/navbar.ts | 2 +- doc/.vitepress/nav/sidebar.ts | 2 +- docs/dev/client-helper-bundle/index.md | 9 --------- docs/dev/common-bundle/index.md | 16 ---------------- docs/dev/core-bundle/index.md | 11 ----------- 5 files changed, 2 insertions(+), 38 deletions(-) delete mode 100644 docs/dev/client-helper-bundle/index.md delete mode 100644 docs/dev/common-bundle/index.md delete mode 100644 docs/dev/core-bundle/index.md diff --git a/doc/.vitepress/nav/navbar.ts b/doc/.vitepress/nav/navbar.ts index 830320b89..db47fd1b0 100644 --- a/doc/.vitepress/nav/navbar.ts +++ b/doc/.vitepress/nav/navbar.ts @@ -12,7 +12,7 @@ const navbar: DefaultTheme.NavItem[] = [ text: 'Releases', items: [ {text: 'Upgrade 5.x', link: '/release/upgrade-5x'}, - {text: 'Notes 5.x~', link: 'https://github.com/ems-project/elasticms/blob/5.x/CHANGELOG-5.x.md'}, + {text: 'Notes 5.x', link: 'https://github.com/ems-project/elasticms/blob/5.x/CHANGELOG-5.x.md'}, ] }, ] diff --git a/doc/.vitepress/nav/sidebar.ts b/doc/.vitepress/nav/sidebar.ts index a106a8526..043be3dde 100644 --- a/doc/.vitepress/nav/sidebar.ts +++ b/doc/.vitepress/nav/sidebar.ts @@ -16,7 +16,7 @@ const sidebar: DefaultTheme.SidebarItem[] = { items: [ {text: 'Upgrade 5.x', link: '/release/upgrade-5x'}, {text: 'Upgrade 4.x', link: '/release/upgrade-4x'}, - {text: 'Upgrade', link: '/release/upgrade'}, + {text: 'Upgrade', link: '/release/upgrade'} ] }, { diff --git a/docs/dev/client-helper-bundle/index.md b/docs/dev/client-helper-bundle/index.md deleted file mode 100644 index bb6f6f0b0..000000000 --- a/docs/dev/client-helper-bundle/index.md +++ /dev/null @@ -1,9 +0,0 @@ -ClientHelperBundle -============= - -- [Environment](/dev/client-helper-bundle/environment.md) -- [Routing](/dev/client-helper-bundle/routing.md) -- [Search](/dev/client-helper-bundle/search.md) -- [Twig](/dev/client-helper-bundle/twig.md) - - [Filters](/dev/client-helper-bundle/Twig/filters.md) - - [Functions](/dev/client-helper-bundle/Twig/functions.md) diff --git a/docs/dev/common-bundle/index.md b/docs/dev/common-bundle/index.md deleted file mode 100644 index fc4b19970..000000000 --- a/docs/dev/common-bundle/index.md +++ /dev/null @@ -1,16 +0,0 @@ -EMSCommonBundle -============= - -All code shared between the client helper bundle and the core bundle - - - -- [Twig](/dev/common-bundle/twig.md) -- [Commands](/dev/common-bundle/commands.md) -- [Core API](/dev/common-bundle/core-api.md) -- [Helpers](/dev/common-bundle/helpers.md) -- [JSON Menu Nested](/dev/common-bundle/json-menu-nested.md) -- [JSON Menu](/dev/common-bundle/json-menu.md) -- [Processors](/dev/common-bundle/processors.md) -- [Spreadsheet](/dev/common-bundle/spreadsheet.md) -- [Storages](/dev/common-bundle/storages.md) \ No newline at end of file diff --git a/docs/dev/core-bundle/index.md b/docs/dev/core-bundle/index.md deleted file mode 100644 index bc57177f2..000000000 --- a/docs/dev/core-bundle/index.md +++ /dev/null @@ -1,11 +0,0 @@ -CoreBundle -============= - - -## Update translation files - -``` -php bin/console trans:update --force --format=yml en EMSCoreBundle --as-tree=15 -``` - -Files generated have to be copied in the `EMS/core-bundle/src/Resources/translations` folder From 6d0a4f63d2c21fa775a6875f881901fa55604d64 Mon Sep 17 00:00:00 2001 From: David Mattei Date: Sun, 13 Oct 2024 16:02:46 +0200 Subject: [PATCH 08/17] fix: typpo sidebar --- doc/.vitepress/nav/sidebar.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/.vitepress/nav/sidebar.ts b/doc/.vitepress/nav/sidebar.ts index 043be3dde..a106a8526 100644 --- a/doc/.vitepress/nav/sidebar.ts +++ b/doc/.vitepress/nav/sidebar.ts @@ -16,7 +16,7 @@ const sidebar: DefaultTheme.SidebarItem[] = { items: [ {text: 'Upgrade 5.x', link: '/release/upgrade-5x'}, {text: 'Upgrade 4.x', link: '/release/upgrade-4x'}, - {text: 'Upgrade', link: '/release/upgrade'} + {text: 'Upgrade', link: '/release/upgrade'}, ] }, { From 3a1da39642c44e508e51f0c82a061e18c7dfa798 Mon Sep 17 00:00:00 2001 From: David Mattei Date: Sun, 13 Oct 2024 19:00:35 +0200 Subject: [PATCH 09/17] fix: move environment variables --- doc/.vitepress/nav/sidebar.ts | 79 +++-- .../app/admin}/environment-variables.md | 303 +++++++++--------- .../app/cli/environment-variables.md | 12 +- .../app/web/environment-variables.md | 82 ++--- doc/{guide => }/develop/contributing.md | 0 doc/{guide => }/develop/environment.md | 0 doc/{guide => }/develop/monorepo.md | 0 docs/elasticms-admin/index.md | 134 -------- 8 files changed, 248 insertions(+), 362 deletions(-) rename {docs/elasticms-admin => doc/app/admin}/environment-variables.md (72%) rename docs/elasticms-cli/parameters.md => doc/app/cli/environment-variables.md (93%) rename docs/elasticms-web/parameters.md => doc/app/web/environment-variables.md (87%) rename doc/{guide => }/develop/contributing.md (100%) rename doc/{guide => }/develop/environment.md (100%) rename doc/{guide => }/develop/monorepo.md (100%) delete mode 100644 docs/elasticms-admin/index.md diff --git a/doc/.vitepress/nav/sidebar.ts b/doc/.vitepress/nav/sidebar.ts index a106a8526..fc81c67d6 100644 --- a/doc/.vitepress/nav/sidebar.ts +++ b/doc/.vitepress/nav/sidebar.ts @@ -1,34 +1,55 @@ -import type { DefaultTheme } from 'vitepress' +import type {DefaultTheme} from 'vitepress' const sidebar: DefaultTheme.SidebarItem[] = { - '/': [ - { - text: 'Guide', - collapsed: true, - items: [ - {text: 'Introduction', link: '/guide/introduction' }, - {text: 'Getting Started', link: '/guide/getting-started'}, - ] - }, - { - text: 'Release', - collapsed: true, - items: [ - {text: 'Upgrade 5.x', link: '/release/upgrade-5x'}, - {text: 'Upgrade 4.x', link: '/release/upgrade-4x'}, - {text: 'Upgrade', link: '/release/upgrade'}, - ] - }, - { - text: 'Develop', - collapsed: true, - items: [ - {text: 'Monorepo', link: '/guide/develop/monorepo' }, - {text: 'Contributing', link: '/guide/develop/contributing'}, - {text: 'Setup environment', link: '/guide/develop/environment' }, - ] - } - ] + '/': [ + { + text: 'Guide', + collapsed: true, + items: [ + {text: 'Introduction', link: '/guide/introduction'}, + {text: 'Getting Started', link: '/guide/getting-started'}, + ] + }, + { + text: 'Release', + collapsed: true, + items: [ + {text: 'Upgrade 5.x', link: '/release/upgrade-5x'}, + {text: 'Upgrade 4.x', link: '/release/upgrade-4x'}, + {text: 'Upgrade', link: '/release/upgrade'}, + ] + }, + { + text: 'EMS - Admin', + collapsed: true, + items: [ + {text: 'Environment variables', link: '/app/admin/environment-variables'}, + ] + }, + { + text: 'EMS - Web', + collapsed: true, + items: [ + {text: 'Environment variables', link: '/app/web/environment-variables'}, + ] + }, + { + text: 'EMS - CLI', + collapsed: true, + items: [ + {text: 'Environment variables', link: '/app/cli/environment-variables'}, + ] + }, + { + text: 'Develop', + collapsed: true, + items: [ + {text: 'Monorepo', link: '/develop/monorepo'}, + {text: 'Contributing', link: '/develop/contributing'}, + {text: 'Setup environment', link: '/develop/environment'}, + ] + } + ] } export default sidebar; diff --git a/docs/elasticms-admin/environment-variables.md b/doc/app/admin/environment-variables.md similarity index 72% rename from docs/elasticms-admin/environment-variables.md rename to doc/app/admin/environment-variables.md index a1cbfcbcf..741692383 100644 --- a/docs/elasticms-admin/environment-variables.md +++ b/doc/app/admin/environment-variables.md @@ -1,4 +1,4 @@ -# Available environment variables +# Environment variables The environment variables have been grouped by bundles and for the Symfony framework itself. @@ -7,18 +7,18 @@ The environment variables have been grouped by bundles and for the Symfony frame ### APP_ENV [Possible values](https://symfony.com/doc/current/configuration.html#selecting-the-active-environment): `dev`, `prod`, `redis`, `dev`, `test` - - Example `APP_ENV=dev` - +- Example `APP_ENV=dev` + But there is 2 more possible values, specific to elasticms: - - `db` : It's equivalent to a `prod` environment, but PHP sessions are persisted in the RDBMS (does not work with SQLite databases). - - `redis` : It's equivalent to a `prod` environment, but PHP sessions are saved in a Redis server. - - `store_data` : It's equivalent to a `prod` environment, but PHP sessions are saved in [Store Data services](../recipes/store-data.md). +- `db` : It's equivalent to a `prod` environment, but PHP sessions are persisted in the RDBMS (does not work with SQLite databases). +- `redis` : It's equivalent to a `prod` environment, but PHP sessions are saved in a Redis server. +- `store_data` : It's equivalent to a `prod` environment, but PHP sessions are saved in [Store Data services](../recipes/store-data.md). ### APP_SECRET A secret seed. - - Example `APP_SECRET=7b19a4a6e37b9303e4f6bca1dc6691ed` +- Example `APP_SECRET=7b19a4a6e37b9303e4f6bca1dc6691ed` ### LOG_OUTPUT @@ -57,7 +57,7 @@ Specify the maximum number of expected document for template, translation and ro ## Doctrine variables -Default values (sqlite): +Default values (sqlite): ```dotenv DB_DRIVER='sqlite' DB_USER='user' @@ -68,49 +68,49 @@ DB_NAME='app.db' ### DB_HOST -DB's host. - - Default value: `127.0.0.1` - - Example: `DB_DRIVER='db-server.tl'` - +DB's host. +- Default value: `127.0.0.1` +- Example: `DB_DRIVER='db-server.tl'` + ### DB_DRIVER Driver (Type of the DB server). Accepted values are `mysql`, `pgsql` and `sqlite` - - Default value: `mysql` - - Example: `DB_DRIVER='pgsql'` - +- Default value: `mysql` +- Example: `DB_DRIVER='pgsql'` + ### DB_USER - - Default value `user` - - Example: `DB_USER='demo'` - +- Default value `user` +- Example: `DB_USER='demo'` + ### DB_PASSWORD - - Default value `user` - - Example: `DB_PASSWORD='password'` - +- Default value `user` +- Example: `DB_PASSWORD='password'` + ### DB_PORT For information the default mysql/mariadb port is 3306 and 5432 for Postgres - - Default value `3306` - - Example: `DB_PORT='5432'` - +- Default value `3306` +- Example: `DB_PORT='5432'` + ### DB_NAME - - Default value `elasticms` - - Example: `DB_NAME='demo'` - +- Default value `elasticms` +- Example: `DB_NAME='demo'` + ### DB_SCHEMA -This variable is not used by Doctrine but by the dump script with postgres in the docker image of elasticms. - - Default value: not defined - - Example: `DB_SCEMA='schema_demo_adm'` - +This variable is not used by Doctrine but by the dump script with postgres in the docker image of elasticms. +- Default value: not defined +- Example: `DB_SCEMA='schema_demo_adm'` + ### DB_CONNECTION_TIMEOUT Usefull when connecting to a string of multiple hosts. To reduce timeout when checking a second host if the first host fails. The minimum value is 2 https://pracucci.com/php-pdo-pgsql-connection-timeout.html - - Default value `30` - - Example: `DB_CONNECTION_TIMEOUT=30` +- Default value `30` +- Example: `DB_CONNECTION_TIMEOUT=30` ## Redis @@ -121,114 +121,114 @@ REDIS_PORT=6379 ``` ## Elasticms Core Bundle variables - + ### EMSCO_TIKA_SERVER Url of a Tika server (string). - - Default value: empty string - - Example `EMSCO_TIKA_SERVER=http://tika:9998` - +- Default value: empty string +- Example `EMSCO_TIKA_SERVER=http://tika:9998` + ### EMSCO_TIKA_DOWNLOAD_URL Url or path to an Apache Tika jar file (string). - - Default value: http://apache.belnet.be/tika/tika-app-1.22.jar - - Example `EMSCO_TIKA_DOWNLOAD_URL=http://apache.belnet.be/tika/tika-app-1.22.jar'` - +- Default value: http://apache.belnet.be/tika/tika-app-1.22.jar +- Example `EMSCO_TIKA_DOWNLOAD_URL=http://apache.belnet.be/tika/tika-app-1.22.jar'` + ### Activate document signature - - `EMSCO_PUBLIC_KEY` (mandatory): Path to a public key. The public key file needs to be in OpenSSH's format. It should look something like: `ssh-rsa AAAAB3NzaC1yc2EAAA....NX6sqSnHA8= rsa-key-20121110` - - `EMSCO_PRIVATE_KEY` (mandatory): Path to a private key. - +- `EMSCO_PUBLIC_KEY` (mandatory): Path to a public key. The public key file needs to be in OpenSSH's format. It should look something like: `ssh-rsa AAAAB3NzaC1yc2EAAA....NX6sqSnHA8= rsa-key-20121110` +- `EMSCO_PRIVATE_KEY` (mandatory): Path to a private key. + ### EMSCO_INSTANCE_ID -Used to prefix all elasticsearch indexes and aliases managed by the current instance of elasticms. - - Example `EMSCO_INSTANCE_ID=demo_v1_` - +Used to prefix all elasticsearch indexes and aliases managed by the current instance of elasticms. +- Example `EMSCO_INSTANCE_ID=demo_v1_` + ### EMSCO_NAME HTML used as title in the interface - - Default ` elasticms` - - Example `EMSCO_NAME=' My elasticms'` - +- Default ` elasticms` +- Example `EMSCO_NAME=' My elasticms'` + ### EMSCO_SHORTNAME HTML used as short title in the interface - - Default `elasticms` - - Example `EMSCO_SHORTNAME='My-ems'` - +- Default `elasticms` +- Example `EMSCO_SHORTNAME='My-ems'` + ### EMSCO_SINGLE_TYPE_INDEX -If set to `true` an index will be created for each managed content types. You should avoid turning on this option as it will be deprecated soon. - - Default `false` - - Example `EMSCO_SINGLE_TYPE_INDEX=false` - +If set to `true` an index will be created for each managed content types. You should avoid turning on this option as it will be deprecated soon. +- Default `false` +- Example `EMSCO_SINGLE_TYPE_INDEX=false` + ### EMSCO_PAGING_SIZE Define the number of result per page in the search pages. - - Default `20` - +- Default `20` + ### EMSCO_THEME_COLOR The color of the theme. - * Default `blue` - * Possible values: - * `blue` - * `indigo` - * `purple` - * `pink` - * `red` - * `orange` - * `yellow` - * `green` - * `teal` - * `cyan` - * `white` - * `gray` - * `black` - * `lightblue` - * `navy` - * `fuchsia` - * `maroon` - * `lime` - * `olive` - +* Default `blue` +* Possible values: + * `blue` + * `indigo` + * `purple` + * `pink` + * `red` + * `orange` + * `yellow` + * `green` + * `teal` + * `cyan` + * `white` + * `gray` + * `black` + * `lightblue` + * `navy` + * `fuchsia` + * `maroon` + * `lime` + * `olive` + ### EMSCO_DATE_TIME_FORMAT Format used to display dates in the interface. See [PHP datetime format](https://www.php.net/manual/en/datetime.format.php) for available options. - - Default `j/m/Y \a\t G:i` - +- Default `j/m/Y \a\t G:i` + ### EMSCO_DATEPICKER_FORMAT Format used to display date in date pickers (See [Java Simple Date Format](https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html). - - Default `dd/mm/yyyy` - +- Default `dd/mm/yyyy` + ### EMSCO_DATEPICKER_WEEKSTART First day of the week in date pickers. `0` for Sunday, `1` for Monday, ... and `6` for Saterday. - - Default `1` +- Default `1` + - ### EMSCO_DATEPICKER_DAYSOFWEEK_HIGHLIGHTED Highlights some days of the week in date pickers. `0` for Sunday, `1` for Monday, ... and `6` for Saterday. - - Default `[0, 6]` +- Default `[0, 6]` - -### From information for email sent + +### From information for email sent Default values: ```dotenv EMSCO_FROM_EMAIL_ADDRESS='elasticms@example.com' EMSCO_FROM_EMAIL_NAME='elasticms' ``` - + ### EMSCO_ALLOW_USER_REGISTRATION If set to `true` user can perform a self registration - - Default `false` - +- Default `false` + ### EMSCO_ASSET_CONFIG Used to defined multiple asset processor config. - - Default `[]` - +- Default `[]` + Example: ```dotenv EMSCO_ASSET_CONFIG='{"preview":{"_config_type":"image","_width":300,"_height":200,"_resize":"fill","_radius":0,"_radius_geometry":["topleft","bottomright"]}}' @@ -238,19 +238,19 @@ EMSCO_ASSET_CONFIG='{"preview":{"_config_type":"image","_width":300,"_height":20 If set to `true` new documents will have a OUUID generated before calling post-processors at first document's finalization. If set to `false` new documents will have a OUUID generated by elasticsearch during first indexation. So OUUIDs are not available for post-processors at first document's finalization. - - Default `false` - +- Default `false` + ### EMSCO_CIRCLES_OBJECT Name of the content type used a circle. - - Default empty string (not defined) - - Example `EMSCO_CIRCLES_OBJECT=circle` +- Default empty string (not defined) +- Example `EMSCO_CIRCLES_OBJECT=circle` ### EMSCO_TRIGGER_JOB_FROM_WEB If set to `false` job initiated from the interface are executed on the spot. Use the `ems:job:run` command to run pending jobs. It's recommended to schedule an `ems:job:run` command and turn off this option. - - Default value `true` - - Example `EMSCO_TRIGGER_JOB_FROM_WEB=false` +- Default value `true` +- Example `EMSCO_TRIGGER_JOB_FROM_WEB=false` ### EMSCO_LOG_LEVEL Define the [level of logs](https://github.com/Seldaek/monolog/blob/main/doc/01-usage.md#log-levels) that will be saved in the elasticsearch ems_internal_logger_alias daily index. Default value: `INFO`. @@ -258,23 +258,23 @@ Define the [level of logs](https://github.com/Seldaek/monolog/blob/main/doc/01-u ```dotenv EMSCO_LOG_LEVEL=NOTICE ``` - + ### EMSCO_LOG_BY_PASS Define if the elastica logger must be turned off. Possible values are: - - `true`: the elastica logger is turn off - - `false`: the elastic logger is active +- `true`: the elastica logger is turn off +- `false`: the elastic logger is active ```dotenv EMSCO_LOG_BY_PASS=false ``` - + ### EMSCO_DEFAULT_BULK_SIZE Define the default bulk size for commands such as the `ems:environment:rebuild` command. Default value: `500`. ```dotenv EMSCO_DEFAULT_BULK_SIZE=500 ``` - + ### EMSCO_IMAGE_MAX_SIZE Define the limit where a resized image, with that max limit, will be generated on the client side in order to limit the memory consumption. The resized image's hash will be available in a `_image_resized_hash` attribute in the file field array (in case of a file field). @@ -283,14 +283,14 @@ In a WYSIWYG field, the master file won't be uploaded, a resized image will be u ```dotenv EMSCO_IMAGE_MAX_SIZE=2048 ``` - + ### EMS_BACKEND_URL Define the url use by the user to access elasticms (in order to generate links in emails). ```dotenv EMS_BACKEND_URL='http://admin.elasticms.local' ``` - + ## Elasticms Client Helper Bundle variables ### EMSCH_LOCALES @@ -326,7 +326,7 @@ Example base template. Overwrite the destination of the local files, by default `emsch:local:*` commands will search in `local/%environment_alias%` folder. Example for locally loading the demo inside local elasticms-admin. -```.dotenv +```dotenv EMSCH_LOCAL_PATH='../demo/skeleton' ``` @@ -350,12 +350,12 @@ Possible values: ### EMS_ELASTICSEARCH_CONNECTION_POOL Define the [elasticsearch sniffing strategy](https://www.elastic.co/guide/en/elasticsearch/client/php-api/7.17/connection_pool.html: -- Default value: EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SimpleConnectionPool' if the EMS_ELASTICSEARCH_HOSTS contains one and only one host configuration; in order to avoid sniffing requests on a cluster that is more likely behind a reverse proxy. Else it contains EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SniffingConnectionPool'. +- Default value: EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SimpleConnectionPool' if the EMS_ELASTICSEARCH_HOSTS contains one and only one host configuration; in order to avoid sniffing requests on a cluster that is more likely behind a reverse proxy. Else it contains EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SniffingConnectionPool'. - Possible values: - - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SimpleConnectionPool' - - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SniffingConnectionPool' - - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\StaticConnectionPool' - - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\StaticNoPingConnectionPool' + - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SimpleConnectionPool' + - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SniffingConnectionPool' + - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\StaticConnectionPool' + - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\StaticNoPingConnectionPool' ### EMS_ELASTICSEARCH_HOSTS @@ -384,7 +384,7 @@ Another example with an extra HTTP header. ### EMS_STORAGES -Used to define storage services. Elasticms supports [multiple types of storage services](https://github.com/ems-project/EMSCommonBundle/blob/master/src/Resources/doc/storages.md). +Used to define storage services. Elasticms supports [multiple types of storage services](https://github.com/ems-project/EMSCommonBundle/blob/master/src/Resources/doc/storages.md). - Default value: `EMS_STORAGES='[{"type":"fs","path":".\/var\/assets"},{"type":"s3","credentials":[],"bucket":""},{"type":"db","activate":false},{"type":"http","base-url":"","auth-key":""},{"type":"sftp","host":"","path":"","username":"","public-key-file":"","private-key-file":""}]'` - Example: `EMS_STORAGES='[{"type":"fs","path":"./var/assets"},{"type":"fs","path":"/var/lib/elasticms"}]'` @@ -492,43 +492,42 @@ It's usefully in order to add extra parameters or attributes to a specific insta ## Deprecated variables ## Since version 5.14.0 - - EMS_WEBALIZE_REMOVABLE_REGEX : See [EMS_SLUG_SYMBOL_MAP](#EMS_SLUG_SYMBOL_MAP)) - - EMS_WEBALIZE_DASHABLE_REGEX : See [EMS_SLUG_SYMBOL_MAP](#EMS_SLUG_SYMBOL_MAP)) +- EMS_WEBALIZE_REMOVABLE_REGEX : See [EMS_SLUG_SYMBOL_MAP](#EMS_SLUG_SYMBOL_MAP)) +- EMS_WEBALIZE_DASHABLE_REGEX : See [EMS_SLUG_SYMBOL_MAP](#EMS_SLUG_SYMBOL_MAP)) ## Since version 1.14.3 - - ELASTICSEARCH_CLUSTER : See [EMS_ELASTICSEARCH_HOSTS](#ems_elasticsearch_hosts) - - ELASTICSEARCH_VERSION : This variable doesn't have any replacement, the value is directly get form the elasticsearch cluster itself. - - S3_BUCKET : See [EMS_STORAGES](#EMS_STORAGES) - - S3_CREDENTIALS : See [EMS_STORAGES](#EMS_STORAGES) - - STORAGE_FOLDER : See [EMS_STORAGES](#EMS_STORAGES) - - EMS_SFTP_SERVEUR : See [EMS_STORAGES](#EMS_STORAGES) - - EMS_SFTP_PATH : See [EMS_STORAGES](#EMS_STORAGES) - - EMS_SFTP_USER : See [EMS_STORAGES](#EMS_STORAGES) - - EMS_EMS_REMOTE_SERVER : See [EMS_STORAGES](#EMS_STORAGES) - - EMS_EMS_REMOTE_AUTHKEY : See [EMS_STORAGES](#EMS_STORAGES) - - EMS_SAVE_ASSETS_IN_DB : See [EMS_STORAGES](#EMS_STORAGES) - - TIKA_SERVER : See [EMSCO_TIKA_SERVER](#EMSCO_TIKA_SERVER) - - TIKA_DOWNLOAD_URL : See [EMSCO_TIKA_DOWNLOAD_URL](#EMSCO_TIKA_DOWNLOAD_URL) - - EMS_PRIVATE_KEY : See [EMSCO_PRIVATE_KEY](#Activate document signature) - - EMS_PUBLIC_KEY : See [EMSCO_PUBLIC_KEY](#Activate document signature) - - EMS_INSTANCE_ID : See [EMSCO_INSTANCE_ID](#EMSCO_INSTANCE_ID) - - EMS_NAME : See [EMSCO_NAME](#EMSCO_NAME) - - EMS_SHORTNAME : See [EMSCO_SHORTNAME](#EMSCO_SHORTNAME) - - EMS_SINGLE_TYPE_INDEX : Not replaced - - EMSCO_SINGLE_TYPE_INDEX : Not replaced - - EMS_PAGING_SIZE : See [EMSCO_PAGING_SIZE](#EMSCO_PAGING_SIZE) - - EMS_THEME_COLOR : See [EMSCO_THEME_COLOR](#EMSCO_THEME_COLOR) - - EMS_DATE_TIME_FORMAT : See [EMSCO_DATE_TIME_FORMAT](#EMSCO_DATE_TIME_FORMAT) - - EMS_DATEPICKER_FORMAT : See [EMSCO_DATEPICKER_FORMAT](#EMSCO_DATEPICKER_FORMAT) - - EMS_DATEPICKER_WEEKSTART : See [EMSCO_DATEPICKER_WEEKSTART](#EMSCO_DATEPICKER_WEEKSTART) - - EMS_DATEPICKER_DAYSOFWEEK_HIGHLIGHTED : See [EMSCO_DATEPICKER_DAYSOFWEEK_HIGHLIGHTED](#EMSCO_DATEPICKER_DAYSOFWEEK_HIGHLIGHTED) - - EMS_FROM_EMAIL_ADDRESS : See [EMSCO_FROM_EMAIL_ADDRESS](#From information for email sent) - - EMS_FROM_EMAIL_NAME : See [EMSCO_FROM_EMAIL_NAME](#From information for email sent) - - EMS_ALLOW_USER_REGISTRATION : See [EMSCO_ALLOW_USER_REGISTRATION](#EMSCO_ALLOW_USER_REGISTRATION) - - EMS_ASSET_CONFIG : See [EMSCO_ASSET_CONFIG](#EMSCO_ASSET_CONFIG) - - EMS_CIRCLES_OBJECT : See [EMSCO_CIRCLES_OBJECT](#EMSCO_ALLOW_USER_REGISTRATION) - - EMS_UPLOAD_FOLDER : Not replaced - - DATABASE_URL : See [Doctrine](#Doctrine variables)) - - EMSCO_ASSET_CONFIG_TYPE : Not replaced - - EMSCO_ASSET_CONFIG_INDEX : Not replaced - +- ELASTICSEARCH_CLUSTER : See [EMS_ELASTICSEARCH_HOSTS](#ems_elasticsearch_hosts) +- ELASTICSEARCH_VERSION : This variable doesn't have any replacement, the value is directly get form the elasticsearch cluster itself. +- S3_BUCKET : See [EMS_STORAGES](#EMS_STORAGES) +- S3_CREDENTIALS : See [EMS_STORAGES](#EMS_STORAGES) +- STORAGE_FOLDER : See [EMS_STORAGES](#EMS_STORAGES) +- EMS_SFTP_SERVEUR : See [EMS_STORAGES](#EMS_STORAGES) +- EMS_SFTP_PATH : See [EMS_STORAGES](#EMS_STORAGES) +- EMS_SFTP_USER : See [EMS_STORAGES](#EMS_STORAGES) +- EMS_EMS_REMOTE_SERVER : See [EMS_STORAGES](#EMS_STORAGES) +- EMS_EMS_REMOTE_AUTHKEY : See [EMS_STORAGES](#EMS_STORAGES) +- EMS_SAVE_ASSETS_IN_DB : See [EMS_STORAGES](#EMS_STORAGES) +- TIKA_SERVER : See [EMSCO_TIKA_SERVER](#EMSCO_TIKA_SERVER) +- TIKA_DOWNLOAD_URL : See [EMSCO_TIKA_DOWNLOAD_URL](#EMSCO_TIKA_DOWNLOAD_URL) +- EMS_PRIVATE_KEY : See [EMSCO_PRIVATE_KEY](#Activate document signature) +- EMS_PUBLIC_KEY : See [EMSCO_PUBLIC_KEY](#Activate document signature) +- EMS_INSTANCE_ID : See [EMSCO_INSTANCE_ID](#EMSCO_INSTANCE_ID) +- EMS_NAME : See [EMSCO_NAME](#EMSCO_NAME) +- EMS_SHORTNAME : See [EMSCO_SHORTNAME](#EMSCO_SHORTNAME) +- EMS_SINGLE_TYPE_INDEX : Not replaced +- EMSCO_SINGLE_TYPE_INDEX : Not replaced +- EMS_PAGING_SIZE : See [EMSCO_PAGING_SIZE](#EMSCO_PAGING_SIZE) +- EMS_THEME_COLOR : See [EMSCO_THEME_COLOR](#EMSCO_THEME_COLOR) +- EMS_DATE_TIME_FORMAT : See [EMSCO_DATE_TIME_FORMAT](#EMSCO_DATE_TIME_FORMAT) +- EMS_DATEPICKER_FORMAT : See [EMSCO_DATEPICKER_FORMAT](#EMSCO_DATEPICKER_FORMAT) +- EMS_DATEPICKER_WEEKSTART : See [EMSCO_DATEPICKER_WEEKSTART](#EMSCO_DATEPICKER_WEEKSTART) +- EMS_DATEPICKER_DAYSOFWEEK_HIGHLIGHTED : See [EMSCO_DATEPICKER_DAYSOFWEEK_HIGHLIGHTED](#EMSCO_DATEPICKER_DAYSOFWEEK_HIGHLIGHTED) +- EMS_FROM_EMAIL_ADDRESS : See [EMSCO_FROM_EMAIL_ADDRESS](#From information for email sent) +- EMS_FROM_EMAIL_NAME : See [EMSCO_FROM_EMAIL_NAME](#From information for email sent) +- EMS_ALLOW_USER_REGISTRATION : See [EMSCO_ALLOW_USER_REGISTRATION](#EMSCO_ALLOW_USER_REGISTRATION) +- EMS_ASSET_CONFIG : See [EMSCO_ASSET_CONFIG](#EMSCO_ASSET_CONFIG) +- EMS_CIRCLES_OBJECT : See [EMSCO_CIRCLES_OBJECT](#EMSCO_ALLOW_USER_REGISTRATION) +- EMS_UPLOAD_FOLDER : Not replaced +- DATABASE_URL : See [Doctrine](#Doctrine variables)) +- EMSCO_ASSET_CONFIG_TYPE : Not replaced +- EMSCO_ASSET_CONFIG_INDEX : Not replaced diff --git a/docs/elasticms-cli/parameters.md b/doc/app/cli/environment-variables.md similarity index 93% rename from docs/elasticms-cli/parameters.md rename to doc/app/cli/environment-variables.md index 8cbea5840..e1fc31d56 100644 --- a/docs/elasticms-cli/parameters.md +++ b/doc/app/cli/environment-variables.md @@ -1,4 +1,4 @@ -# Available environment variables +# Environment variables The environment variables have been grouped by bundles and for the Symfony framework itself. @@ -22,7 +22,7 @@ Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/l IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml -Examples: +Examples: - `DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"` - `DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=5.7&charset=utf8mb4"` - `DATABASE_URL="postgresql://symfony:ChangeMe@127.0.0.1:5432/app?serverVersion=13&charset=utf8"` @@ -35,10 +35,10 @@ Examples: Define the [elasticsearch sniffing strategy](https://www.elastic.co/guide/en/elasticsearch/client/php-api/7.17/connection_pool.html: - Default value: EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SimpleConnectionPool' if the EMS_ELASTICSEARCH_HOSTS contains one and only one host configuration; in order to avoid sniffing requests on a cluster that is more likely behind a reverse proxy. Else it contains EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SniffingConnectionPool'. - Possible values: - - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SimpleConnectionPool' - - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SniffingConnectionPool' - - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\StaticConnectionPool' - - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\StaticNoPingConnectionPool' + - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SimpleConnectionPool' + - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SniffingConnectionPool' + - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\StaticConnectionPool' + - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\StaticNoPingConnectionPool' ### EMS_ELASTICSEARCH_HOSTS diff --git a/docs/elasticms-web/parameters.md b/doc/app/web/environment-variables.md similarity index 87% rename from docs/elasticms-web/parameters.md rename to doc/app/web/environment-variables.md index 2ee19158a..ee0396a6e 100644 --- a/docs/elasticms-web/parameters.md +++ b/doc/app/web/environment-variables.md @@ -1,4 +1,4 @@ -# Available environment variables +# Environment variables The environment variables have been grouped by bundles and for the Symfony framework itself. @@ -7,18 +7,18 @@ The environment variables have been grouped by bundles and for the Symfony frame ### APP_ENV [Possible values](https://symfony.com/doc/current/configuration.html#selecting-the-active-environment): `dev`, `prod`, `redis`, `dev`, `test` - - Example `APP_ENV=dev` - +- Example `APP_ENV=dev` + But there is 2 more possible values, specific to elasticms: - - `db` : It's equivalent to a `prod` environment, but PHP sessions are persisted in the RDBMS (does not work with SQLite databases). - - `redis` : It's equivalent to a `prod` environment, but PHP sessions are saved in a Redis server. +- `db` : It's equivalent to a `prod` environment, but PHP sessions are persisted in the RDBMS (does not work with SQLite databases). +- `redis` : It's equivalent to a `prod` environment, but PHP sessions are saved in a Redis server. - `store_data` : It's equivalent to a `prod` environment, but PHP sessions are saved in [Store Data services](../recipes/store-data.md). ### APP_SECRET A secret seed. - - Example `APP_SECRET=7b19a4a6e37b9303e4f6bca1dc6691ed` +- Example `APP_SECRET=7b19a4a6e37b9303e4f6bca1dc6691ed` ### Behind a Load Balancer or a Reverse Proxy @@ -50,7 +50,7 @@ Configure [Swift Mailer](https://symfony.com/doc/current/email.html#configuratio ## Doctrine variables -Default values (sqlite): +Default values (sqlite): ```dotenv DB_DRIVER='sqlite' DB_USER='user' @@ -61,49 +61,49 @@ DB_NAME='app.db' ### DB_HOST -DB's host. - - Default value: `127.0.0.1` - - Example: `DB_DRIVER='db-server.tl'` - +DB's host. +- Default value: `127.0.0.1` +- Example: `DB_DRIVER='db-server.tl'` + ### DB_DRIVER Driver (Type of the DB server). Accepted values are `mysql`, `pgsql` and `sqlite` - - Default value: `mysql` - - Example: `DB_DRIVER='pgsql'` - +- Default value: `mysql` +- Example: `DB_DRIVER='pgsql'` + ### DB_USER - - Default value `user` - - Example: `DB_USER='demo'` - +- Default value `user` +- Example: `DB_USER='demo'` + ### DB_PASSWORD - - Default value `user` - - Example: `DB_PASSWORD='password'` - +- Default value `user` +- Example: `DB_PASSWORD='password'` + ### DB_PORT For information the default mysql/mariadb port is 3306 and 5432 for Postgres - - Default value `3306` - - Example: `DB_PORT='5432'` - +- Default value `3306` +- Example: `DB_PORT='5432'` + ### DB_NAME - - Default value `elasticms` - - Example: `DB_NAME='demo'` - +- Default value `elasticms` +- Example: `DB_NAME='demo'` + ### DB_SCHEMA -This variable is not used by Doctrine but by the dump script with postgres in the docker image of elasticms. - - Default value: not defined - - Example: `DB_SCEMA='schema_demo_adm'` - +This variable is not used by Doctrine but by the dump script with postgres in the docker image of elasticms. +- Default value: not defined +- Example: `DB_SCEMA='schema_demo_adm'` + ### DB_CONNECTION_TIMEOUT Usefull when connecting to a string of multiple hosts. To reduce timeout when checking a second host if the first host fails. The minimum value is 2 https://pracucci.com/php-pdo-pgsql-connection-timeout.html - - Default value `30` - - Example: `DB_CONNECTION_TIMEOUT=30` +- Default value `30` +- Example: `DB_CONNECTION_TIMEOUT=30` ## Redis @@ -148,7 +148,7 @@ Example base template. Overwrite the destination of the local files, by default `emsch:local:*` commands will search in `local/%environment_alias%` folder. Example for locally loading the demo inside local elasticms-web. -```.dotenv +```dotenv EMSCH_LOCAL_PATH='../demo/skeleton' ``` @@ -188,14 +188,14 @@ Another example with an extra HTTP header. Define the [elasticsearch sniffing strategy](https://www.elastic.co/guide/en/elasticsearch/client/php-api/7.17/connection_pool.html: - Default value: EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SimpleConnectionPool' if the EMS_ELASTICSEARCH_HOSTS contains one and only one host configuration; in order to avoid sniffing requests on a cluster that is more likely behind a reverse proxy. Else it contains EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SniffingConnectionPool'. - Possible values: - - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SimpleConnectionPool' - - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SniffingConnectionPool' - - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\StaticConnectionPool' - - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\StaticNoPingConnectionPool' + - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SimpleConnectionPool' + - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\SniffingConnectionPool' + - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\StaticConnectionPool' + - EMS_ELASTICSEARCH_CONNECTION_POOL='Elasticsearch\\ConnectionPool\\StaticNoPingConnectionPool' ### EMS_STORAGES -Used to define storage services. Elasticms supports [multiple types of storage services](https://github.com/ems-project/EMSCommonBundle/blob/master/src/Resources/doc/storages.md). +Used to define storage services. Elasticms supports [multiple types of storage services](https://github.com/ems-project/EMSCommonBundle/blob/master/src/Resources/doc/storages.md). - Default value: `EMS_STORAGES='[{"type":"fs","path":".\/var\/assets"},{"type":"s3","credentials":[],"bucket":""},{"type":"db","activate":false},{"type":"http","base-url":"","auth-key":""},{"type":"sftp","host":"","path":"","username":"","public-key-file":"","private-key-file":""}]'` - Example: `EMS_STORAGES='[{"type":"fs","path":"./var/assets"},{"type":"fs","path":"/var/lib/elasticms"}]'` @@ -222,12 +222,12 @@ EMS_ELASTICSEARCH_HOSTS='300' ### EMS_CACHE -Define the ems cache type. Default value `file_system`. -Allowed values: `file_system`, `apc` and `redis`. +Define the ems cache type. Default value `file_system`. +Allowed values: `file_system`, `apc` and `redis`. ### EMS_CACHE_PREFIX -Unique required value per project, otherwise wipe storage will clear all cached values. +Unique required value per project, otherwise wipe storage will clear all cached values. ### EMS_REDIS_HOST diff --git a/doc/guide/develop/contributing.md b/doc/develop/contributing.md similarity index 100% rename from doc/guide/develop/contributing.md rename to doc/develop/contributing.md diff --git a/doc/guide/develop/environment.md b/doc/develop/environment.md similarity index 100% rename from doc/guide/develop/environment.md rename to doc/develop/environment.md diff --git a/doc/guide/develop/monorepo.md b/doc/develop/monorepo.md similarity index 100% rename from doc/guide/develop/monorepo.md rename to doc/develop/monorepo.md diff --git a/docs/elasticms-admin/index.md b/docs/elasticms-admin/index.md deleted file mode 100644 index 22f975e87..000000000 --- a/docs/elasticms-admin/index.md +++ /dev/null @@ -1,134 +0,0 @@ -# Elasticms Admin   [![Latest Stable Version](https://img.shields.io/github/v/release/ems-project/elasticms-admin)](https://github.com/ems-project/elasticms-admin/releases) - -| | | | -|------------------------------------------------------------|------------------------------------------------------|------------------------------------------------------------| -| [ContentType](/elasticms-admin/contentType/contentType.md) | [Dashboard](/elasticms-admin/dashboard/dashboard.md) | [Environment](/elasticms-admin/environment/environment.md) | -| [User](/elasticms-admin/user/user.md) | [WYSIWYG](/elasticms-admin/wysiwyg/wysiwyg.md) | [I18N](/elasticms-admin/i18n/i18n.md) | - - -## About - -A headless CMS to manage generic content in order to publish it in several Elasticsearch index (based on Symfony, Bootstrap, and AdminLTE). - - -## Setup -### Requirements -- composer -- an elasticsearch cluster (withbat least 2 nodes is recommended) -- mysql or PostrgreSQL -- optionally an Apache Tika sever - -### Installation -Navigate to the root of the project `elasticms` and execute the following command: -> composer install - -At the end you will get a list of questions to configure user database and database user. While the user should exist in your mysql environment, you can automatically create the database and schema with the following commands: -``` -php bin/console doctrine:database:drop --force -php bin/console doctrine:database:create -php bin/console doctrine:migrations:migrate -n -php bin/console emsco:user:create demo demo@example.com mypassword --super-admin -php bin/console ems:make:filter --all -php bin/console ems:make:analyzer --all -php bin/console ems:environment:create preview -php bin/console ems:environment:create live -php bin/console ems:environment:create template -php bin/console ems:make:contenttype page menu --environment=preview -php bin/console ems:make:contenttype label template route asset --environment=template -php bin/console ems:environment:rebuild preview -php bin/console ems:environment:rebuild live -php bin/console ems:environment:rebuild template -php bin/console ems:contenttype:activate --all -php bin/console ems:delete:orphans -php bin/console ems:make:document page vendor/elasticms/maker-bundle/Resources/make/document/page -php bin/console ems:make:document menu vendor/elasticms/maker-bundle/Resources/make/document/menu -php bin/console ems:make:document label vendor/elasticms/maker-bundle/Resources/make/document/label -php bin/console ems:make:document template vendor/elasticms/maker-bundle/Resources/make/document/template -php bin/console ems:env:align template preview --searchQuery='{"query":{"bool":{"must":[{"terms":{"_contenttype":["template","label","route"]}}]}}}' --force -php bin/console ems:env:align preview template --searchQuery='{"query":{"bool":{"must_not":[{"terms":{"_contenttype":["template","label","route"]}}]}}}' --force -php bin/console ems:env:align preview live --force -``` - - -> php bin/console doctrine:database:create -> php bin/console doctrine:migrations:migrate - -Verify the project's elasticsearch configuration in `src\AppBundle\Resources\config\parameters.yml`. -And now we can launch Symfony's build in server: -> php bin/console server:run - -Then you have to create a super-admin user: -> php bin/console emsco:user:create admin --super-admin - - -//Todo add information about the elasticsearch cluster - -And voilà, ElasticMS is up and running! - - -## SOAP connection -For the soapRequest twig function to work, the following line should be activated in your php.ini -> extension=php_soap.dll - -## Database updates (schema and content) -Whenever a new version is released, the database might change. This can be done automatically with migrations. -You can easily get a status of the migrations in relation to your database scheme with the following command: -> php bin/console doctrine:migrations:status - -To execute all migrations: -> php bin/console doctrine:migrations:migrate - -In the case your database is already set up you should not try to run the initial migration, add it to the "already run" list with the following command: -> php bin/console doctrine:migrations:version --add 20160528181644 - -So that it does not get executed. -The second migration in this project is safe to run multiple times as it changes data in our database, and not the table schema. -It is adviced to always use migrations for changes so that: -- we can easily build a DB from scratch and get future changes (use doctrine:migrations:migrate in stead of doctrine:schema:create) -- everyone can update to a newer version without dataloss (auto generate migrations with doctrine:migrations:diff for schema updates && write migrations for content changes) - -``` -php bin/console doctrine:database:drop --force -php bin/console doctrine:database:create -php bin/console doctrine:migrations:migrate -n -php bin/console emco:user:create demo demo@example.com mypassword --super-admin -php bin/console ems:environment:create preview -php bin/console ems:environment:create live -php bin/console ems:environment:create template -php bin/console ems:make:contenttype menu --environment=preview -php bin/console ems:make:contenttype label template route asset --environment=template -php bin/console ems:environment:rebuild preview -php bin/console ems:environment:rebuild live -php bin/console ems:environment:rebuild template -php bin/console ems:contenttype:activate --all -php bin/console ems:delete:orphans -php bin/console ems:make:document template vendor/elasticms/maker-bundle/Resources/make/document/template.zip -php bin/console ems:make:document label vendor/elasticms/maker-bundle/Resources/make/document/label.zip -php bin/console ems:env:align template preview --searchQuery='{"query":{"bool":{"must":[{"terms":{"_contenttype":["template","label","route"]}}]}}}' --force -php bin/console ems:env:align preview template --searchQuery='{"query":{"bool":{"must_not":[{"terms":{"_contenttype":["template","label","route"]}}]}}}' --force -php bin/console ems:env:align preview live --force -``` - -## Update dependencies - -In order to update composer dependencies (and the elaticms's bundles) run the following command: - -In Windows Command Line: -``` -docker run -it -v %cd%:/opt/src -w /opt/src docker.io/elasticms/base-php-dev:7.4 composer --no-scripts update -``` -On Linux or in PowerShell -``` -docker run -it -v ${PWD}:/opt/src -w /opt/src docker.io/elasticms/base-php-dev:7.4 composer --no-scripts update -``` - -If you want to udpate elasticms's bundles only: - -In Windows Command Line: -``` -docker run -it -v %cd%:/opt/src -w /opt/src docker.io/elasticms/base-php-dev:7.4 composer update --no-scripts elasticms/* -``` -On Linux or in PowerShell -``` -docker run -it -v ${PWD}:/opt/src -w /opt/src docker.io/elasticms/base-php-dev:7.4 composer update --no-scripts elasticms/* -``` From 75a841e0bae20604ceafc23c9e7666cf091582e2 Mon Sep 17 00:00:00 2001 From: David Mattei Date: Mon, 14 Oct 2024 09:06:04 +0200 Subject: [PATCH 10/17] fix move commands --- doc/.vitepress/nav/sidebar.ts | 10 + .../commands => doc/app/admin}/commands.md | 299 ++++++++++++------ doc/app/cli/commands.md | 1 + .../app/common}/commands.md | 60 +++- doc/app/web/commands.md | 1 + docs/dev/core-bundle/commands.md | 118 ------- docs/dev/core-bundle/install.md | 54 ---- docs/elasticms-cli/commands.md | 47 --- 8 files changed, 255 insertions(+), 335 deletions(-) rename {docs/elasticms-admin/commands => doc/app/admin}/commands.md (70%) create mode 100644 doc/app/cli/commands.md rename {docs/dev/common-bundle => doc/app/common}/commands.md (57%) create mode 100644 doc/app/web/commands.md delete mode 100644 docs/dev/core-bundle/commands.md delete mode 100644 docs/dev/core-bundle/install.md delete mode 100644 docs/elasticms-cli/commands.md diff --git a/doc/.vitepress/nav/sidebar.ts b/doc/.vitepress/nav/sidebar.ts index fc81c67d6..8e3ef769e 100644 --- a/doc/.vitepress/nav/sidebar.ts +++ b/doc/.vitepress/nav/sidebar.ts @@ -24,6 +24,7 @@ const sidebar: DefaultTheme.SidebarItem[] = { collapsed: true, items: [ {text: 'Environment variables', link: '/app/admin/environment-variables'}, + {text: 'Commands', link: '/app/admin/commands'}, ] }, { @@ -31,6 +32,7 @@ const sidebar: DefaultTheme.SidebarItem[] = { collapsed: true, items: [ {text: 'Environment variables', link: '/app/web/environment-variables'}, + {text: 'Commands', link: '/app/web/commands'}, ] }, { @@ -38,6 +40,14 @@ const sidebar: DefaultTheme.SidebarItem[] = { collapsed: true, items: [ {text: 'Environment variables', link: '/app/cli/environment-variables'}, + {text: 'Commands', link: '/app/cli/commands'}, + ] + }, + { + text: 'EMS - Common', + collapsed: true, + items: [ + {text: 'Commands', link: '/app/common/commands'}, ] }, { diff --git a/docs/elasticms-admin/commands/commands.md b/doc/app/admin/commands.md similarity index 70% rename from docs/elasticms-admin/commands/commands.md rename to doc/app/admin/commands.md index 9bac9ed49..e37158a78 100644 --- a/docs/elasticms-admin/commands/commands.md +++ b/doc/app/admin/commands.md @@ -1,54 +1,18 @@ # Commands - -* [Commands](#commands) - * [EMSCO (CoreBundle)](#emsco-corebundle) - * [Asset](#asset) - * [Refresh file fields](#refresh-file-fields) - * [Content Type](#content-type) - * [Content Type switch default environment](#content-type-switch-default-environment) - * [Content Type transform](#content-type-transform) - * [Environment](#environment) - * [Environment align](#environment-align) - * [Environment unpublish](#environment-unpublish) - * [Release](#release) - * [Release create](#release-create) - * [Release publish](#release-publish) - * [Revision](#revision) - * [Revision archive](#revision-archive) - * [Revision copy](#revision-copy) - * [Revision delete](#revision-delete) - * [Revision discard](#revision-discard) - * [Revision task create](#revision-task-create) - * [Revision task notification mail](#revision-task-notification-mail) - * [User](#user) - * [User activate](#user-activate) - * [User change](#user-change) - * [User create](#user-create) - * [User deactivate](#user-deactivate) - * [User demote](#user-demote) - * [User promote](#user-promote) - * [User update option](#user-update-option) - * [XLIFF](#xliff-) - * [XLIFF extract](#xliff-extract) - * [XLIFF update](#xliff-update) - - -## EMSCO (CoreBundle) - -### Asset - -#### Refresh file fields +## Asset + +### Refresh file fields This command ensure that all file fields, for all revisions, are using the last asset's fields: - * _hash - * _size - * _algo - * _type - * _name +* _hash +* _size +* _algo +* _type +* _name -That will have to be launch at least once between August 2024 and the release 7.x. +That will have to be launch at least once between August 2024 and the release 7.x. By then the fields `filename`, `filesize`, `sha1` and `mimetype` are deprecated. This command regenerate resized images in order to avoid too much memory consumption on image generation. @@ -64,21 +28,20 @@ Usage: ``` -### Content Type +## Content Type -#### Content Type switch default environment +### Switch default environment Switch the default environment for a given content type. Each revision published in the default environment will be marked as published in the provided environment. Each revision published in the provided environment will be mark as published in the default environment. -The content type's environment by default will be set to the provided environment. +The content type's environment by default will be set to the provided environment. **Cautions** * This command should never be run in a production environment without a good backup. -* Affected environments must be rebuilded just after. As many content types might be switched, the command doesn't automatically rebuilding them. After this command affected indexes will be inconsistent. - - +* Affected environments must be rebuilded just after. As many content types might be switched, the command doesn't + automatically rebuilding them. After this command affected indexes will be inconsistent. ```bash Usage: @@ -90,7 +53,7 @@ Arguments: ``` -#### Content Type transform +### Transform Apply defined field transformers in the migration mapping. @@ -111,9 +74,112 @@ Options: --user=USER Lock user [default: "SYSTEM_CONTENT_TRANSFORM"] ``` -### Environment +### Activate + +Activate a content type + +* **--all** : Make all contenttypes: [ticket] +* **--deactivate** : Deactivate contenttypes +* **--force** : Activate the contenttypes even if the mapping is not up to date (flagged as draft) + +### Clean + +Clean all deleted content types + +```bash +php bin/console ems:contenttype:clean +``` + +### Delete + +Delete all instances of a content type + +```bash +php bin/console ems:contenttype:delete +``` + +### Export + +Export a search result of a content type to a specific format + +```bash +php bin/console ems:contenttype:export [options] [--] [ [ []]] +``` + +* **--environment=ENVIRONMENT** : The environment to use for the query, it will use the default environment if not + defined +* **--withBusinessId** : Replace internal OUUIDs by business values +* **--scrollSize=SCROLLSIZE** : Size of the elasticsearch scroll request [default: 100] +* **--scrollTimeout=SCROLLTIMEOUT** : Time to migrate "scrollSize" items i.e. 30s or 2m [default: "1m"] +* **--baseUrl=BASEURL** : Base url of the application (in order to generate a link) + +### Import + +Import json files from a zip file as content type's documents + +```bash +php bin/console ems:contenttype:import [options] [--] +``` + +* **--bulkSize[=BULKSIZE]** : Size of the elasticsearch bulk request [default: 500] +* **--raw** : The content will be imported as is. Without any field validation, data stripping or field protection +* **--dont-sign-data** : The content will not be signed during the import process +* **--force** : Also treat document in draft mode +* **--dont-finalize** : Don't finalize document +* **--businessKey** : Try to identify documents by their business keys + +### Lock + +Lock a content type + +```bash +php bin/console ems:contenttype:lock [options] [--]