diff --git a/package-lock.json b/package-lock.json index ae16b6c1b..20e87e9b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "@analytics/google-analytics": "^1.0.7", "@analytics/google-tag-manager": "^0.5.5", "@appwrite.io/console": "^0.3.0", - "@appwrite.io/pink": "0.1.0-next.8", - "@appwrite.io/pink-icons": "^0.1.0-next.8", + "@appwrite.io/pink": "0.1.0-next.9", + "@appwrite.io/pink-icons": "^0.1.0-next.9", "@popperjs/core": "^2.11.8", "@sentry/svelte": "^7.66.0", "@sentry/tracing": "^7.66.0", @@ -176,19 +176,19 @@ } }, "node_modules/@appwrite.io/pink": { - "version": "0.1.0-next.8", - "resolved": "https://registry.npmjs.org/@appwrite.io/pink/-/pink-0.1.0-next.8.tgz", - "integrity": "sha512-Zu77Y/Ecd9EmCcojDMg6363neod3ZR24VbWnxQKMtBtTAPe5m/KorOae331tSjkkZNCjvMvnZYkLyebwJUSsSQ==", + "version": "0.1.0-next.9", + "resolved": "https://registry.npmjs.org/@appwrite.io/pink/-/pink-0.1.0-next.9.tgz", + "integrity": "sha512-W5xVm2ZXlEqbbKv0GkpnM5saunDKdSfuhWouLnORsonENGFsG529PxRjqeClz4zrlkt2x1DiwN175wpgV3GoEQ==", "dependencies": { - "@appwrite.io/pink-icons": "0.1.0-next.8", + "@appwrite.io/pink-icons": "0.1.0-next.9", "normalize.css": "^8.0.1", "the-new-css-reset": "^1.7.3" } }, "node_modules/@appwrite.io/pink-icons": { - "version": "0.1.0-next.8", - "resolved": "https://registry.npmjs.org/@appwrite.io/pink-icons/-/pink-icons-0.1.0-next.8.tgz", - "integrity": "sha512-np/62QTP9wq5yEXz1uCMmzxokMDRfLIDXkxp80gFtTR0T2h2h54y3J5oPQZSraRVyETa/e7VhO+jfbi2a0qaxw==" + "version": "0.1.0-next.9", + "resolved": "https://registry.npmjs.org/@appwrite.io/pink-icons/-/pink-icons-0.1.0-next.9.tgz", + "integrity": "sha512-6t4Pqt/xugjpJQyaMx1u/7Gt9CkW5iItDAgUKcIMm84E4NbDJq8ZdAhhvctGQQppKUgHDPi+6x1XveUUd7tdbg==" }, "node_modules/@babel/code-frame": { "version": "7.22.10", @@ -9399,19 +9399,19 @@ } }, "@appwrite.io/pink": { - "version": "0.1.0-next.8", - "resolved": "https://registry.npmjs.org/@appwrite.io/pink/-/pink-0.1.0-next.8.tgz", - "integrity": "sha512-Zu77Y/Ecd9EmCcojDMg6363neod3ZR24VbWnxQKMtBtTAPe5m/KorOae331tSjkkZNCjvMvnZYkLyebwJUSsSQ==", + "version": "0.1.0-next.9", + "resolved": "https://registry.npmjs.org/@appwrite.io/pink/-/pink-0.1.0-next.9.tgz", + "integrity": "sha512-W5xVm2ZXlEqbbKv0GkpnM5saunDKdSfuhWouLnORsonENGFsG529PxRjqeClz4zrlkt2x1DiwN175wpgV3GoEQ==", "requires": { - "@appwrite.io/pink-icons": "0.1.0-next.8", + "@appwrite.io/pink-icons": "0.1.0-next.9", "normalize.css": "^8.0.1", "the-new-css-reset": "^1.7.3" } }, "@appwrite.io/pink-icons": { - "version": "0.1.0-next.8", - "resolved": "https://registry.npmjs.org/@appwrite.io/pink-icons/-/pink-icons-0.1.0-next.8.tgz", - "integrity": "sha512-np/62QTP9wq5yEXz1uCMmzxokMDRfLIDXkxp80gFtTR0T2h2h54y3J5oPQZSraRVyETa/e7VhO+jfbi2a0qaxw==" + "version": "0.1.0-next.9", + "resolved": "https://registry.npmjs.org/@appwrite.io/pink-icons/-/pink-icons-0.1.0-next.9.tgz", + "integrity": "sha512-6t4Pqt/xugjpJQyaMx1u/7Gt9CkW5iItDAgUKcIMm84E4NbDJq8ZdAhhvctGQQppKUgHDPi+6x1XveUUd7tdbg==" }, "@babel/code-frame": { "version": "7.22.10", diff --git a/package.json b/package.json index 5e555148e..776c9f173 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,8 @@ "@analytics/google-analytics": "^1.0.7", "@analytics/google-tag-manager": "^0.5.5", "@appwrite.io/console": "^0.3.0", - "@appwrite.io/pink": "0.1.0-next.8", - "@appwrite.io/pink-icons": "^0.1.0-next.8", + "@appwrite.io/pink": "0.1.0-next.9", + "@appwrite.io/pink-icons": "^0.1.0-next.9", "@popperjs/core": "^2.11.8", "@sentry/svelte": "^7.66.0", "@sentry/tracing": "^7.66.0", diff --git a/src/lib/pages/domains/wizard/step1.svelte b/src/lib/pages/domains/wizard/step1.svelte index 480a58580..2c8a0e884 100644 --- a/src/lib/pages/domains/wizard/step1.svelte +++ b/src/lib/pages/domains/wizard/step1.svelte @@ -6,21 +6,12 @@ import { sdk } from '$lib/stores/sdk'; import { isSelfHosted } from '$lib/system'; import { func } from '$routes/console/project-[project]/functions/function-[function]/store'; - import { onMount } from 'svelte'; import { ProxyTypes } from '../index.svelte'; import { domain, typeStore } from './store'; import { consoleVariables } from '$routes/console/store'; let error = null; - let isDomainsEnabled = false; - - onMount(async () => { - if (!isSelfHosted) { - return; - } - - isDomainsEnabled = (await $consoleVariables)?._APP_DOMAIN_ENABLED === true; - }); + const isDomainsEnabled = $consoleVariables?._APP_DOMAIN_ENABLED === true; async function createDomain() { try { diff --git a/src/lib/stores/marketplace.ts b/src/lib/stores/marketplace.ts index 5c95eb771..af17c3f83 100644 --- a/src/lib/stores/marketplace.ts +++ b/src/lib/stores/marketplace.ts @@ -1,3 +1,36 @@ +type TemplateRuntime = { + name: string; + versions: string[]; +}; + +const TemplateRuntimes = { + NODE: { name: 'node', versions: ['20.0', '19.0', '18.0', '16.0', '14.5'] }, + PHP: { name: 'php', versions: ['8.2', '8.1', '8.0'] }, + RUBY: { name: 'ruby', versions: ['3.2', '3.1', '3.0'] }, + PYTHON: { name: 'python', versions: ['3.11', '3.10', '3.9', '3.8'] }, + DART: { name: 'dart', versions: ['3.0', '2.19', '2.18', '2.17', '2.16', '2.16'] }, + BUN: { name: 'bun', versions: ['1.0'] } +}; + +const getRuntimes = ( + runtime: TemplateRuntime, + commands: string, + entrypoint: string, + providerRootDirectory: string, + versionsDenyList: string[] = [] +) => { + return runtime.versions + .filter((version) => !versionsDenyList.includes(version)) + .map((version) => { + return { + name: `${runtime.name}-${version}`, + commands, + entrypoint, + providerRootDirectory + }; + }); +}; + export const marketplace: MarketplaceTemplate[] = [ { icon: 'icon-lightning-bolt', @@ -11,36 +44,22 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['Starter'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/starter' - }, - { - name: 'php-8.0', - commands: 'composer install', - entrypoint: 'src/index.php', - providerRootDirectory: 'php/starter' - }, - { - name: 'ruby-3.0', - commands: 'bundle install', - entrypoint: 'lib/main.rb', - providerRootDirectory: 'ruby/starter' - }, - { - name: 'python-3.9', - commands: 'pip install -r requirements.txt', - entrypoint: 'src/main.py', - providerRootDirectory: 'python/starter' - }, - { - name: 'dart-2.17', - commands: 'dart pub get', - entrypoint: 'lib/main.dart', - providerRootDirectory: 'dart/starter' - } + ...getRuntimes(TemplateRuntimes.NODE, 'npm install', 'src/main.js', 'node/starter'), + ...getRuntimes( + TemplateRuntimes.PHP, + 'composer install', + 'src/index.php', + 'php/starter' + ), + ...getRuntimes(TemplateRuntimes.RUBY, 'bundle install', 'lib/main.rb', 'ruby/starter'), + ...getRuntimes( + TemplateRuntimes.PYTHON, + 'pip install -r requirements.txt', + 'src/main.py', + 'python/starter' + ), + ...getRuntimes(TemplateRuntimes.DART, 'dart pub get', 'lib/main.dart', 'dart/starter'), + ...getRuntimes(TemplateRuntimes.BUN, 'bun install', 'src/main.ts', 'bun/starter') ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -69,30 +88,30 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['AI'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/prompt-chatgpt' - }, - { - name: 'python-3.9', - commands: 'pip install -r requirements.txt', - entrypoint: 'src/main.py', - providerRootDirectory: 'python/prompt_chatgpt' - }, - { - name: 'php-8.0', - commands: 'composer install', - entrypoint: 'src/index.php', - providerRootDirectory: 'php/prompt-chatgpt' - }, - { - name: 'dart-2.17', - commands: 'dart pub get', - entrypoint: 'lib/main.dart', - providerRootDirectory: 'dart/prompt_chatgpt' - } + ...getRuntimes( + TemplateRuntimes.NODE, + 'npm install', + 'src/main.js', + 'node/prompt-chatgpt' + ), + ...getRuntimes( + TemplateRuntimes.PYTHON, + 'pip install -r requirements.txt', + 'src/main.py', + 'python/prompt_chatgpt' + ), + ...getRuntimes( + TemplateRuntimes.PHP, + 'composer install', + 'src/index.php', + 'php/prompt-chatgpt' + ), + ...getRuntimes( + TemplateRuntimes.DART, + 'dart pub get', + 'lib/main.dart', + 'dart/prompt_chatgpt' + ) ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -129,18 +148,18 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['Messaging'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install && npm run setup', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/discord-command-bot' - }, - { - name: 'python-3.9', - commands: 'pip install -r requirements.txt && python src/setup.py', - entrypoint: 'src/main.py', - providerRootDirectory: 'python/discord_command_bot' - } + ...getRuntimes( + TemplateRuntimes.NODE, + 'npm install && npm run setup', + 'src/main.js', + 'node/discord-command-bot' + ), + ...getRuntimes( + TemplateRuntimes.PYTHON, + 'pip install -r requirements.txt && python src/setup.py', + 'src/main.py', + 'python/discord_command_bot' + ) ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -185,12 +204,12 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['AI'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/analyze-with-perspectiveapi' - } + ...getRuntimes( + TemplateRuntimes.NODE, + 'npm install', + 'src/main.js', + 'node/analyze-with-perspectiveapi' + ) ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -220,24 +239,24 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['AI'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/censor-with-redact' - }, - { - name: 'python-3.9', - commands: 'pip install -r requirements.txt', - entrypoint: 'src/main.py', - providerRootDirectory: 'python/censor_with_redact' - }, - { - name: 'dart-2.17', - commands: 'dart pub get', - entrypoint: 'lib/main.dart', - providerRootDirectory: 'dart/censor_with_redact' - } + ...getRuntimes( + TemplateRuntimes.NODE, + 'npm install', + 'src/main.js', + 'node/censor-with-redact' + ), + ...getRuntimes( + TemplateRuntimes.PYTHON, + 'pip install -r requirements.txt', + 'src/main.py', + 'python/censor_with_redact' + ), + ...getRuntimes( + TemplateRuntimes.DART, + 'dart pub get', + 'lib/main.dart', + 'dart/censor_with_redact' + ) ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -266,12 +285,7 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['Utilities'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/generate-pdf' - } + ...getRuntimes(TemplateRuntimes.NODE, 'npm install', 'src/main.js', 'node/generate-pdf') ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -292,12 +306,12 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['Dev Tools'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/github-issue-bot' - } + ...getRuntimes( + TemplateRuntimes.NODE, + 'npm install', + 'src/main.js', + 'node/github-issue-bot' + ) ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -334,12 +348,12 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['Utilities'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/url-shortener' - } + ...getRuntimes( + TemplateRuntimes.NODE, + 'npm install', + 'src/main.js', + 'node/url-shortener' + ) ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -400,24 +414,24 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['Databases'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/sync-with-algolia' - }, - { - name: 'python-3.9', - commands: 'pip install -r requirements.txt', - entrypoint: 'src/main.py', - providerRootDirectory: 'python/sync_with_algolia' - }, - { - name: 'php-8.0', - commands: 'composer install', - entrypoint: 'src/index.php', - providerRootDirectory: 'php/sync-with-algolia' - } + ...getRuntimes( + TemplateRuntimes.NODE, + 'npm install', + 'src/main.js', + 'node/sync-with-algolia' + ), + ...getRuntimes( + TemplateRuntimes.PYTHON, + 'pip install -r requirements.txt', + 'src/main.py', + 'python/sync_with_algolia' + ), + ...getRuntimes( + TemplateRuntimes.PHP, + 'composer install', + 'src/index.php', + 'php/sync-with-algolia' + ) ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -489,12 +503,12 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['Databases'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/sync-with-meilisearch' - } + ...getRuntimes( + TemplateRuntimes.NODE, + 'npm install', + 'src/main.js', + 'node/sync-with-meilisearch' + ) ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -573,12 +587,12 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['Messaging'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/whatsapp-with-vonage' - } + ...getRuntimes( + TemplateRuntimes.NODE, + 'npm install', + 'src/main.js', + 'node/whatsapp-with-vonage' + ) ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -628,12 +642,12 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['Messaging'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/push-notification-with-fcm' - } + ...getRuntimes( + TemplateRuntimes.NODE, + 'npm install', + 'src/main.js', + 'node/push-notification-with-fcm' + ) ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -683,24 +697,24 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['Utilities'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/email-contact-form' - }, - { - name: 'python-3.9', - commands: 'pip install -r requirements.txt', - entrypoint: 'src/main.py', - providerRootDirectory: 'python/email_contact_form' - }, - { - name: 'php-8.0', - commands: 'composer install', - entrypoint: 'src/index.php', - providerRootDirectory: 'php/email-contact-form' - } + ...getRuntimes( + TemplateRuntimes.NODE, + 'npm install', + 'src/main.js', + 'node/email-contact-form' + ), + ...getRuntimes( + TemplateRuntimes.PYTHON, + 'pip install -r requirements.txt', + 'src/main.py', + 'python/email_contact_form' + ), + ...getRuntimes( + TemplateRuntimes.PHP, + 'composer install', + 'src/index.php', + 'php/email-contact-form' + ) ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -765,12 +779,12 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['Utilities'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/subscriptions-with-stripe' - } + ...getRuntimes( + TemplateRuntimes.NODE, + 'npm install', + 'src/main.js', + 'node/subscriptions-with-stripe' + ) ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', @@ -821,12 +835,12 @@ export const marketplace: MarketplaceTemplate[] = [ timeout: 15, usecases: ['Utilities'], runtimes: [ - { - name: 'node-18.0', - commands: 'npm install && npm run setup', - entrypoint: 'src/main.js', - providerRootDirectory: 'node/payments-with-stripe' - } + ...getRuntimes( + TemplateRuntimes.NODE, + 'npm install', + 'src/main.js', + 'node/payments-with-stripe' + ) ], instructions: `For documentation and instructions check out file.`, vcsProvider: 'github', diff --git a/src/lib/wizards/functions/cover.svelte b/src/lib/wizards/functions/cover.svelte index af69e3f63..065a164b5 100644 --- a/src/lib/wizards/functions/cover.svelte +++ b/src/lib/wizards/functions/cover.svelte @@ -28,14 +28,14 @@ @@ -60,7 +62,7 @@

{$template.tagline}

- {#if isSelfHosted && !isVcsEnabled($consoleVariables)} + {#if isSelfHosted && !isVcsEnabled} Cloning templates to a self-hosted instance diff --git a/src/routes/console/project-[project]/overview/platforms/[platform]/+page@project-[project].svelte b/src/routes/console/project-[project]/overview/platforms/[platform]/+page@project-[project].svelte index d703a2ae6..d9005ad9f 100644 --- a/src/routes/console/project-[project]/overview/platforms/[platform]/+page@project-[project].svelte +++ b/src/routes/console/project-[project]/overview/platforms/[platform]/+page@project-[project].svelte @@ -33,7 +33,8 @@ 'flutter-android': FlutterAndroid, 'flutter-linux': FlutterLinux, 'flutter-macos': FlutterMacOs, - 'flutter-windows': FlutterWindows + 'flutter-windows': FlutterWindows, + 'flutter-web': Web }; let showDelete = false; diff --git a/src/routes/console/project-[project]/settings/migrations/+page.svelte b/src/routes/console/project-[project]/settings/migrations/+page.svelte index 2a49e7e3d..cfa193840 100644 --- a/src/routes/console/project-[project]/settings/migrations/+page.svelte +++ b/src/routes/console/project-[project]/settings/migrations/+page.svelte @@ -235,7 +235,7 @@

Export data from your project to Appwrite Cloud. Learn more in our documentation. @@ -262,7 +262,7 @@

Export data from your project to a self-hosted instance. Learn more in our documentation. diff --git a/src/routes/console/project-[project]/settings/smtp/+page.svelte b/src/routes/console/project-[project]/settings/smtp/+page.svelte index 4fef26357..832f48baa 100644 --- a/src/routes/console/project-[project]/settings/smtp/+page.svelte +++ b/src/routes/console/project-[project]/settings/smtp/+page.svelte @@ -46,7 +46,7 @@ async function updateSmtp() { try { if (!enabled) { - enabled = undefined; + enabled = false; senderName = undefined; senderEmail = undefined; replyTo = undefined; diff --git a/src/routes/console/project-[project]/settings/updateInstallations.svelte b/src/routes/console/project-[project]/settings/updateInstallations.svelte index a61bd158b..a3c6d5273 100644 --- a/src/routes/console/project-[project]/settings/updateInstallations.svelte +++ b/src/routes/console/project-[project]/settings/updateInstallations.svelte @@ -29,7 +29,7 @@ import GitDisconnectModal from './GitDisconnectModal.svelte'; import dayjs from 'dayjs'; import { isSelfHosted } from '$lib/system'; - import { consoleVariables, isVcsEnabled } from '$routes/console/store'; + import { consoleVariables } from '$routes/console/store'; export let total: number; export let limit: number; @@ -40,6 +40,7 @@ let showGitDisconnect = false; let showInstallationDropdown: boolean[] = []; let selectedInstallation: Models.Installation; + const isVcsEnabled = $consoleVariables?._APP_VCS_ENABLED === true; function getInstallationLink(installation: Models.Installation) { switch (installation.provider) { @@ -180,7 +181,7 @@ bind:offset /> {:else} - {#if isSelfHosted && !isVcsEnabled($consoleVariables)} + {#if isSelfHosted && !isVcsEnabled} Installing Git to a self-hosted instance @@ -203,7 +204,7 @@