diff --git a/.github/workflows/production.yml b/.github/workflows/production.yml index f89ecdb16..7264e017b 100644 --- a/.github/workflows/production.yml +++ b/.github/workflows/production.yml @@ -8,6 +8,7 @@ env: TAG: ${{ github.event.release.tag_name }} STACK_FILE: docker/production.yml REPOSITORY: website + REGISTRY_USERNAME: christyjacob4 jobs: build: @@ -58,6 +59,6 @@ jobs: echo "_APP_SYSTEM_SECURITY_EMAIL_ADDRESS=${{ secrets.APP_SYSTEM_SECURITY_EMAIL_ADDRESS }}" >> .env echo "SEMATEXT_TOKEN=${{ secrets.SEMATEXT_TOKEN }}" >> .env - echo ${{ secrets.GH_REGISTRY_TOKEN }} | docker login ghcr.io --username ${{ github.actor }} --password-stdin + echo ${{ secrets.GH_REGISTRY_TOKEN }} | docker login ghcr.io --username ${{ env.REGISTRY_USERNAME }} --password-stdin docker-compose -f ${{ env.STACK_FILE }} config env $(cat .env | xargs) docker stack deploy --prune --resolve-image always --with-registry-auth -c ${{ env.STACK_FILE }} ${{ env.REPOSITORY }} \ No newline at end of file diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index f918ae7f2..a78c5f402 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -9,6 +9,7 @@ env: TAG: ${{ github.sha }} STACK_FILE: docker/stage.yml REPOSITORY: website + REGISTRY_USERNAME: christyjacob4 jobs: build: @@ -59,6 +60,6 @@ jobs: echo "_APP_SYSTEM_SECURITY_EMAIL_ADDRESS=${{ secrets.APP_SYSTEM_SECURITY_EMAIL_ADDRESS }}" >> .env echo "SEMATEXT_TOKEN=${{ secrets.SEMATEXT_TOKEN }}" >> .env - echo ${{ secrets.GH_REGISTRY_TOKEN }} | docker login ghcr.io --username ${{ github.actor }} --password-stdin + echo ${{ secrets.GH_REGISTRY_TOKEN }} | docker login ghcr.io --username ${{ env.REGISTRY_USERNAME }} --password-stdin docker-compose -f ${{ env.STACK_FILE }} config env $(cat .env | xargs) docker stack deploy --prune --resolve-image always --with-registry-auth -c ${{ env.STACK_FILE }} ${{ env.REPOSITORY }} \ No newline at end of file diff --git a/package.json b/package.json index 3ef7e43c6..68c683a0b 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "sharp": "^0.32.6", "svelte": "^4.2.0", "svelte-check": "^3.5.1", - "svelte-markdoc-preprocess": "^0.3.2", + "svelte-markdoc-preprocess": "^1.0.0", "svelte-sequential-preprocessor": "^2.0.1", "svgo": "^3.0.2", "svgtofont": "^4.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ff0fac378..bb417e03a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -92,8 +92,8 @@ devDependencies: specifier: ^3.5.1 version: 3.5.1(postcss@8.4.27)(sass@1.66.1)(svelte@4.2.0) svelte-markdoc-preprocess: - specifier: ^0.3.2 - version: 0.3.2 + specifier: ^1.0.0 + version: 1.0.0 svelte-sequential-preprocessor: specifier: ^2.0.1 version: 2.0.1 @@ -4327,8 +4327,8 @@ packages: svelte: 4.2.0 dev: true - /svelte-markdoc-preprocess@0.3.2: - resolution: {integrity: sha512-OZAH7WsFRjO3Nt0VfNaqw8Mpem6w1sMBs36PBDmKE7BoV6hoCEXEY+yQAzAHo3qrt4WZRWn5WoFad+q6xOKs3g==} + /svelte-markdoc-preprocess@1.0.0: + resolution: {integrity: sha512-vFYqUXuX0ONHeZhn0MTplS22CKsidhLAoHfX5OceX8rhmKWyKwg/R579iYNb/RDW7OyLA5UU9UCLdNhEoQ5s/w==} dependencies: '@markdoc/markdoc': 0.3.2 html-escaper: 3.0.3 diff --git a/src/app.html b/src/app.html index 774af11dd..59ec69c4f 100644 --- a/src/app.html +++ b/src/app.html @@ -1,34 +1,33 @@ - - - - - - - %sveltekit.head% - - - - -
%sveltekit.body%
- - + } + + +
%sveltekit.body%
+ + + \ No newline at end of file diff --git a/src/hooks/redirects.json b/src/hooks/redirects.json new file mode 100644 index 000000000..f688c7180 --- /dev/null +++ b/src/hooks/redirects.json @@ -0,0 +1,638 @@ +[ + { + "link": "/docs/getting-started-for-web", + "redirect": "/docs/quick-starts" + }, + { + "link": "/docs/getting-started-for-flutter", + "redirect": "/docs/quick-starts/flutter" + }, + { + "link": "/docs/getting-started-for-apple", + "redirect": "/docs/quick-starts/apple" + }, + { + "link": "/docs/getting-started-for-android", + "redirect": "/docs/quick-starts/android" + }, + { + "link": "/docs/getting-started-for-server", + "redirect": "/docs/getting-started-for-server" + }, + { + "link": "/docs/self-hosting", + "redirect": "/docs/advanced/self-hosting" + }, + { + "link": "/docs/client/databases", + "redirect": "/docs/references/cloud/client-web/databases" + }, + { + "link": "/docs/client/account", + "redirect": "/docs/references/cloud/client-web/account" + }, + { + "link": "/docs/client/storage", + "redirect": "/docs/references/cloud/client-web/storage" + }, + { + "link": "/docs/functions", + "redirect": "/docs/products/functions" + }, + { + "link": "/docs/realtime", + "redirect": "/docs/apis/realtime" + }, + { + "link": "/docs/command-line", + "redirect": "/docs/tooling/command-line/installation" + }, + { + "link": "/docs/command-line-deployment", + "redirect": "/docs/tooling/command-line/deployment" + }, + { + "link": "/docs/command-line-commands", + "redirect": "/docs/tooling/command-line/commands" + }, + { + "link": "/docs/command-line-ci", + "redirect": "/docs/tooling/command-line/non-interactive" + }, + { + "link": "/docs/rest", + "redirect": "/docs/apis/rest" + }, + { + "link": "/docs/graphql", + "redirect": "/docs/apis/graphql" + }, + { + "link": "/docs/server/users", + "redirect": "/docs/references/cloud/server-nodejs/users" + }, + { + "link": "/docs/client/teams", + "redirect": "/docs/references/cloud/client-web/teams" + }, + { + "link": "/docs/client/functions", + "redirect": "/docs/references/cloud/client-web/functions" + }, + { + "link": "/docs/client/locale", + "redirect": "/docs/references/cloud/client-web/locale" + }, + { + "link": "/docs/client/avatars", + "redirect": "/docs/references/cloud/client-web/avatars" + }, + { + "link": "/docs/databases", + "redirect": "/docs/products/databases" + }, + { + "link": "/docs/databases-queries", + "redirect": "/docs/products/databases/queries" + }, + { + "link": "/docs/databases-pagination", + "redirect": "/docs/products/databases/pagination" + }, + { + "link": "/docs/databases-relationships", + "redirect": "/docs/products/databases/relationships" + }, + { + "link": "/docs/storage", + "redirect": "/docs/products/storage" + }, + { + "link": "/docs/authentication", + "redirect": "/docs/products/auth" + }, + { + "link": "/docs/authentication-email-pass", + "redirect": "/docs/products/auth/email-password" + }, + { + "link": "/docs/authentication-sms", + "redirect": "/docs/products/auth/phone-sms" + }, + { + "link": "/docs/authentication-magic", + "redirect": "/docs/products/auth/magic-url" + }, + { + "link": "/docs/authentication-oauth", + "redirect": "/docs/products/auth/oauth2" + }, + { + "link": "/docs/authentication-anonymous", + "redirect": "/docs/products/auth/anonymous" + }, + { + "link": "/docs/authentication-management", + "redirect": "/docs/products/auth/users" + }, + { + "link": "/docs/authentication-server", + "redirect": "/docs/authentication-server" + }, + { + "link": "/docs/authentication-security", + "redirect": "/docs/products/auth/security" + }, + { + "link": "/docs/functions-develop", + "redirect": "/docs/products/functions/development" + }, + { + "link": "/docs/functions-deploy", + "redirect": "/docs/products/functions/deployment" + }, + { + "link": "/docs/functions-execute", + "redirect": "/docs/products/functions/execution" + }, + { + "link": "/docs/functions-runtimes", + "redirect": "/docs/products/functions/runtimes" + }, + { + "link": "/docs/functions-examples", + "redirect": "/docs/products/functions/examples" + }, + { + "link": "/docs/migrations", + "redirect": "/docs/advanced/migrations" + }, + { + "link": "/docs/migrations-firebase", + "redirect": "/docs/advanced/migrations/firebase" + }, + { + "link": "/docs/migrations-supabase", + "redirect": "/docs/advanced/migrations/supabase" + }, + { + "link": "/docs/migrations-nhost", + "redirect": "/docs/advanced/migrations/nhost" + }, + { + "link": "/docs/migrations-cloud-to-self-hosted", + "redirect": "/docs/advanced/migrations/self-hosted" + }, + { + "link": "/docs/migrations-self-hosted-to-cloud", + "redirect": "/docs/advanced/migrations/cloud" + }, + { + "link": "/docs/keys", + "redirect": "/docs/advanced/platform/api-keys" + }, + { + "link": "/docs/permissions", + "redirect": "/docs/advanced/platform/permissions" + }, + { + "link": "/docs/events", + "redirect": "/docs/advanced/platform/events" + }, + { + "link": "/docs/queries", + "redirect": "/docs/products/databases/queries" + }, + { + "link": "/docs/pagination", + "redirect": "/docs/products/databases/pagination" + }, + { + "link": "/docs/webhooks", + "redirect": "/docs/advanced/platform/webhooks" + }, + { + "link": "/docs/custom-domains", + "redirect": "/docs/advanced/platform/custom-domains" + }, + { + "link": "/docs/email-and-sms-templates", + "redirect": "/docs/advanced/platform/message-templates" + }, + { + "link": "/docs/response-codes", + "redirect": "/docs/advanced/platform/response-codes" + }, + { + "link": "/docs/rate-limits", + "redirect": "/docs/advanced/platform/rate-limits" + }, + { + "link": "/docs/configuration", + "redirect": "/docs/advanced/self-hosting" + }, + { + "link": "/docs/environment-variables", + "redirect": "/docs/advanced/self-hosting/environment-variables" + }, + { + "link": "/docs/email-delivery", + "redirect": "/docs/advanced/self-hosting/email" + }, + { + "link": "/docs/sms-delivery", + "redirect": "/docs/advanced/self-hosting/sms" + }, + { + "link": "/docs/certificates", + "redirect": "/docs/advanced/self-hosting/tls-certificates" + }, + { + "link": "/docs/debugging", + "redirect": "/docs/advanced/self-hosting/debugging" + }, + { + "link": "/docs/upgrade", + "redirect": "/docs/advanced/self-hosting/update" + }, + { + "link": "/docs/production", + "redirect": "/docs/advanced/self-hosting/production" + }, + { + "link": "/docs/server/databases", + "redirect": "/docs/references/cloud/server-nodejs/databases" + }, + { + "link": "/docs/client/databases?sdk=web-default", + "redirect": "/docs/references/cloud/client-web/databases?sdk=web-default" + }, + { + "link": "/docs/models/document", + "redirect": "/docs/references/cloud/models/document" + }, + { + "link": "/docs/models/documentList", + "redirect": "/docs/references/cloud/models/documentList" + }, + { + "link": "/docs/server/account", + "redirect": "/docs/references/cloud/server-nodejs/account" + }, + { + "link": "/docs/client/account?sdk=web-default", + "redirect": "/docs/references/cloud/client-web/account?sdk=web-default" + }, + { + "link": "/docs/models/user", + "redirect": "/docs/references/cloud/models/user" + }, + { + "link": "/docs/models/session", + "redirect": "/docs/references/cloud/models/session" + }, + { + "link": "/docs/models/identityList", + "redirect": "/docs/references/cloud/models/identityList" + }, + { + "link": "/docs/models/token", + "redirect": "/docs/references/cloud/models/token" + }, + { + "link": "/docs/models/jwt", + "redirect": "/docs/references/cloud/models/jwt" + }, + { + "link": "/docs/models/preferences", + "redirect": "/docs/references/cloud/models/preferences" + }, + { + "link": "/docs/models/sessionList", + "redirect": "/docs/references/cloud/models/sessionList" + }, + { + "link": "/docs/models/logList", + "redirect": "/docs/references/cloud/models/logList" + }, + { + "link": "/docs/server/storage", + "redirect": "/docs/references/cloud/server-nodejs/storage" + }, + { + "link": "/docs/client/storage?sdk=web-default", + "redirect": "/docs/references/cloud/client-web/storage?sdk=web-default" + }, + { + "link": "/docs/models/file", + "redirect": "/docs/references/cloud/models/file" + }, + { + "link": "/docs/models/fileList", + "redirect": "/docs/references/cloud/models/fileList" + }, + { + "link": "/docs/models/attributeList", + "redirect": "/docs/references/cloud/models/attributeList" + }, + { + "link": "/docs/models/indexList", + "redirect": "/docs/references/cloud/models/indexList" + }, + { + "link": "/docs/server/functions", + "redirect": "/docs/references/cloud/server-nodejs/functions" + }, + { + "link": "/docs/server/users?sdk=nodejs-default", + "redirect": "/docs/references/cloud/server-nodejs/users?sdk=nodejs-default" + }, + { + "link": "/docs/models/userList", + "redirect": "/docs/references/cloud/models/userList" + }, + { + "link": "/docs/models/membershipList", + "redirect": "/docs/references/cloud/models/membershipList" + }, + { + "link": "/docs/server/teams", + "redirect": "/docs/references/cloud/server-nodejs/teams" + }, + { + "link": "/docs/client/teams?sdk=web-default", + "redirect": "/docs/references/cloud/client-web/teams?sdk=web-default" + }, + { + "link": "/docs/models/team", + "redirect": "/docs/references/cloud/models/team" + }, + { + "link": "/docs/models/teamList", + "redirect": "/docs/references/cloud/models/teamList" + }, + { + "link": "/docs/models/membership", + "redirect": "/docs/references/cloud/models/membership" + }, + { + "link": "/docs/client/functions?sdk=web-default", + "redirect": "/docs/references/cloud/client-web/functions?sdk=web-default" + }, + { + "link": "/docs/models/execution", + "redirect": "/docs/references/cloud/models/execution" + }, + { + "link": "/docs/models/executionList", + "redirect": "/docs/references/cloud/models/executionList" + }, + { + "link": "/docs/server/locale", + "redirect": "/docs/references/cloud/server-nodejs/locale" + }, + { + "link": "/docs/client/locale?sdk=web-default", + "redirect": "/docs/references/cloud/client-web/locale?sdk=web-default" + }, + { + "link": "/docs/models/locale", + "redirect": "/docs/references/cloud/models/locale" + }, + { + "link": "/docs/models/localeCodeList", + "redirect": "/docs/references/cloud/models/localeCodeList" + }, + { + "link": "/docs/models/countryList", + "redirect": "/docs/references/cloud/models/countryList" + }, + { + "link": "/docs/models/phoneList", + "redirect": "/docs/references/cloud/models/phoneList" + }, + { + "link": "/docs/models/continentList", + "redirect": "/docs/references/cloud/models/continentList" + }, + { + "link": "/docs/models/currencyList", + "redirect": "/docs/references/cloud/models/currencyList" + }, + { + "link": "/docs/models/languageList", + "redirect": "/docs/references/cloud/models/languageList" + }, + { + "link": "/docs/server/avatars", + "redirect": "/docs/references/cloud/server-nodejs/avatars" + }, + { + "link": "/docs/client/avatars?sdk=web-default", + "redirect": "/docs/references/cloud/client-web/avatars?sdk=web-default" + }, + { + "link": "/docs/permissions/", + "redirect": "/docs/advanced/platform/permissions" + }, + { + "link": "/docs/", + "redirect": "/docs/" + }, + { + "link": "/docs/models/bucket", + "redirect": "/docs/references/cloud/models/bucket" + }, + { + "link": "/docs/models/database", + "redirect": "/docs/references/cloud/models/database" + }, + { + "link": "/docs/models/collection", + "redirect": "/docs/references/cloud/models/collection" + }, + { + "link": "/docs/models/attribute", + "redirect": "/docs/references/cloud/models/attribute" + }, + { + "link": "/docs/models/index", + "redirect": "/docs/references/cloud/models/index" + }, + { + "link": "/docs/models/function", + "redirect": "/docs/references/cloud/models/function" + }, + { + "link": "/docs/models/deployment", + "redirect": "/docs/references/cloud/models/deployment" + }, + { + "link": "/docs/server/databases?sdk=nodejs-default", + "redirect": "/docs/references/cloud/server-nodejs/databases?sdk=nodejs-default" + }, + { + "link": "/docs/models/databaseList", + "redirect": "/docs/references/cloud/models/databaseList" + }, + { + "link": "/docs/models/collectionList", + "redirect": "/docs/references/cloud/models/collectionList" + }, + { + "link": "/docs/models/attributeString", + "redirect": "/docs/references/cloud/models/attributeString" + }, + { + "link": "/docs/models/attributeEmail", + "redirect": "/docs/references/cloud/models/attributeEmail" + }, + { + "link": "/docs/models/attributeEnum", + "redirect": "/docs/references/cloud/models/attributeEnum" + }, + { + "link": "/docs/models/attributeIp", + "redirect": "/docs/references/cloud/models/attributeIp" + }, + { + "link": "/docs/models/attributeUrl", + "redirect": "/docs/references/cloud/models/attributeUrl" + }, + { + "link": "/docs/models/attributeInteger", + "redirect": "/docs/references/cloud/models/attributeInteger" + }, + { + "link": "/docs/models/attributeFloat", + "redirect": "/docs/references/cloud/models/attributeFloat" + }, + { + "link": "/docs/models/attributeBoolean", + "redirect": "/docs/references/cloud/models/attributeBoolean" + }, + { + "link": "/docs/models/attributeDatetime", + "redirect": "/docs/references/cloud/models/attributeDatetime" + }, + { + "link": "/docs/models/attributeRelationship", + "redirect": "/docs/references/cloud/models/attributeRelationship" + }, + { + "link": "/docs/server/account?sdk=nodejs-default", + "redirect": "/docs/references/cloud/server-nodejs/account?sdk=nodejs-default" + }, + { + "link": "/docs/models/algoArgon2", + "redirect": "/docs/references/cloud/models/algoArgon2" + }, + { + "link": "/docs/models/algoScrypt", + "redirect": "/docs/references/cloud/models/algoScrypt" + }, + { + "link": "/docs/models/algoScryptModified", + "redirect": "/docs/references/cloud/models/algoScryptModified" + }, + { + "link": "/docs/models/algoBcrypt", + "redirect": "/docs/references/cloud/models/algoBcrypt" + }, + { + "link": "/docs/models/algoPhpass", + "redirect": "/docs/references/cloud/models/algoPhpass" + }, + { + "link": "/docs/models/algoSha", + "redirect": "/docs/references/cloud/models/algoSha" + }, + { + "link": "/docs/models/algoMd5", + "redirect": "/docs/references/cloud/models/algoMd5" + }, + { + "link": "/docs/models/identity", + "redirect": "/docs/references/cloud/models/identity" + }, + { + "link": "/docs/models/log", + "redirect": "/docs/references/cloud/models/log" + }, + { + "link": "/docs/server/storage?sdk=nodejs-default", + "redirect": "/docs/references/cloud/server-nodejs/storage?sdk=nodejs-default" + }, + { + "link": "/docs/models/bucketList", + "redirect": "/docs/references/cloud/models/bucketList" + }, + { + "link": "/docs/server/functions?sdk=nodejs-default", + "redirect": "/docs/references/cloud/server-nodejs/functions?sdk=nodejs-default" + }, + { + "link": "/docs/models/functionList", + "redirect": "/docs/references/cloud/models/functionList" + }, + { + "link": "/docs/models/runtimeList", + "redirect": "/docs/references/cloud/models/runtimeList" + }, + { + "link": "/docs/models/deploymentList", + "redirect": "/docs/references/cloud/models/deploymentList" + }, + { + "link": "/docs/models/variable", + "redirect": "/docs/references/cloud/models/variable" + }, + { + "link": "/docs/models/variableList", + "redirect": "/docs/references/cloud/models/variableList" + }, + { + "link": "/docs/server/teams?sdk=nodejs-default", + "redirect": "/docs/references/cloud/server-nodejs/teams?sdk=nodejs-default" + }, + { + "link": "/docs/models/headers", + "redirect": "/docs/references/cloud/models/headers" + }, + { + "link": "/docs/server/locale?sdk=nodejs-default", + "redirect": "/docs/references/cloud/server-nodejs/locale?sdk=nodejs-default" + }, + { + "link": "/docs/models/localeCode", + "redirect": "/docs/references/cloud/models/localeCode" + }, + { + "link": "/docs/models/country", + "redirect": "/docs/references/cloud/models/country" + }, + { + "link": "/docs/models/phone", + "redirect": "/docs/references/cloud/models/phone" + }, + { + "link": "/docs/models/continent", + "redirect": "/docs/references/cloud/models/continent" + }, + { + "link": "/docs/models/currency", + "redirect": "/docs/references/cloud/models/currency" + }, + { + "link": "/docs/models/language", + "redirect": "/docs/references/cloud/models/language" + }, + { + "link": "/docs/server/avatars?sdk=nodejs-default", + "redirect": "/docs/references/cloud/server-nodejs/avatars?sdk=nodejs-default" + }, + { + "link": "/docs/models/runtime", + "redirect": "/docs/references/cloud/models/runtime" + } +] \ No newline at end of file diff --git a/src/hooks/server.ts b/src/hooks/server.ts new file mode 100644 index 000000000..986493c40 --- /dev/null +++ b/src/hooks/server.ts @@ -0,0 +1,18 @@ +import type { Handle } from '@sveltejs/kit'; +import redirects from './redirects.json'; + +const redirectMap = new Map(redirects.map(({ link, redirect }) => [link, redirect])); + +export const handle: Handle = async ({ event, resolve }) => { + const currentPath = event.url.pathname; + if (redirectMap.has(currentPath)) { + return new Response(null, { + status: 308, + headers: { + location: redirectMap.get(currentPath) ?? '' + } + }); + } + + return await resolve(event); +}; diff --git a/src/lib/components/FooterNav.svelte b/src/lib/components/FooterNav.svelte index d03b2b789..5ccb73d72 100644 --- a/src/lib/components/FooterNav.svelte +++ b/src/lib/components/FooterNav.svelte @@ -112,7 +112,7 @@