Skip to content

Commit e7ac9e2

Browse files
authored
Merge pull request #2838 from appwrite/feat-string-types
2 parents 79fd6e5 + b31fde8 commit e7ac9e2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+820
-222
lines changed

bun.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
},
2121
"dependencies": {
2222
"@ai-sdk/svelte": "^1.1.24",
23-
"@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@95675c4",
23+
"@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@bb72008",
2424
"@appwrite.io/pink-icons": "0.25.0",
2525
"@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@c1feb89",
2626
"@appwrite.io/pink-legacy": "^1.0.3",

src/lib/components/filters/store.ts

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,10 @@ export enum ValidOperators {
156156

157157
export enum ValidTypes {
158158
String = 'string',
159+
Varchar = 'varchar',
160+
Text = 'text',
161+
Mediumtext = 'mediumtext',
162+
Longtext = 'longtext',
159163
Integer = 'integer',
160164
Double = 'double',
161165
Boolean = 'boolean',
@@ -175,8 +179,32 @@ const operatorsDefault = new Map<
175179
hideInput?: boolean;
176180
}
177181
>([
178-
[ValidOperators.StartsWith, { query: Query.startsWith, types: [ValidTypes.String] }],
179-
[ValidOperators.EndsWith, { query: Query.endsWith, types: [ValidTypes.String] }],
182+
[
183+
ValidOperators.StartsWith,
184+
{
185+
query: Query.startsWith,
186+
types: [
187+
ValidTypes.String,
188+
ValidTypes.Varchar,
189+
ValidTypes.Text,
190+
ValidTypes.Mediumtext,
191+
ValidTypes.Longtext
192+
]
193+
}
194+
],
195+
[
196+
ValidOperators.EndsWith,
197+
{
198+
query: Query.endsWith,
199+
types: [
200+
ValidTypes.String,
201+
ValidTypes.Varchar,
202+
ValidTypes.Text,
203+
ValidTypes.Mediumtext,
204+
ValidTypes.Longtext
205+
]
206+
}
207+
],
180208
[
181209
ValidOperators.GreaterThan,
182210
{
@@ -211,6 +239,10 @@ const operatorsDefault = new Map<
211239
query: Query.equal,
212240
types: [
213241
ValidTypes.String,
242+
ValidTypes.Varchar,
243+
ValidTypes.Text,
244+
ValidTypes.Mediumtext,
245+
ValidTypes.Longtext,
214246
ValidTypes.Integer,
215247
ValidTypes.Double,
216248
ValidTypes.Boolean,
@@ -227,6 +259,10 @@ const operatorsDefault = new Map<
227259
query: Query.notEqual,
228260
types: [
229261
ValidTypes.String,
262+
ValidTypes.Varchar,
263+
ValidTypes.Text,
264+
ValidTypes.Mediumtext,
265+
ValidTypes.Longtext,
230266
ValidTypes.Integer,
231267
ValidTypes.Double,
232268
ValidTypes.Boolean,
@@ -242,6 +278,10 @@ const operatorsDefault = new Map<
242278
query: Query.isNotNull,
243279
types: [
244280
ValidTypes.String,
281+
ValidTypes.Varchar,
282+
ValidTypes.Text,
283+
ValidTypes.Mediumtext,
284+
ValidTypes.Longtext,
245285
ValidTypes.Integer,
246286
ValidTypes.Double,
247287
ValidTypes.Boolean,
@@ -260,6 +300,10 @@ const operatorsDefault = new Map<
260300
query: Query.isNull,
261301
types: [
262302
ValidTypes.String,
303+
ValidTypes.Varchar,
304+
ValidTypes.Text,
305+
ValidTypes.Mediumtext,
306+
ValidTypes.Longtext,
263307
ValidTypes.Integer,
264308
ValidTypes.Double,
265309
ValidTypes.Boolean,
@@ -278,6 +322,10 @@ const operatorsDefault = new Map<
278322
query: Query.contains,
279323
types: [
280324
ValidTypes.String,
325+
ValidTypes.Varchar,
326+
ValidTypes.Text,
327+
ValidTypes.Mediumtext,
328+
ValidTypes.Longtext,
281329
ValidTypes.Integer,
282330
ValidTypes.Double,
283331
ValidTypes.Boolean,

src/lib/helpers/faker.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,8 @@ function generateValueForField(
183183

184184
function generateSingleValue(field: Field): string | number | boolean | NestedNumberArray | null {
185185
switch (field.type) {
186-
case 'string': {
186+
case 'string':
187+
case 'varchar': {
187188
if ('format' in field && field.format) {
188189
switch (field.format) {
189190
case 'email': {
@@ -214,6 +215,21 @@ function generateSingleValue(field: Field): string | number | boolean | NestedNu
214215
}
215216
}
216217

218+
case 'text': {
219+
// TEXT type max size is 16,383 characters (utf8mb4)
220+
return generateStringValue(field.key, 1000);
221+
}
222+
223+
case 'mediumtext': {
224+
// MEDIUMTEXT type max size is 4,194,303 characters (utf8mb4)
225+
return generateStringValue(field.key, 1000);
226+
}
227+
228+
case 'longtext': {
229+
// LONGTEXT type max size is 1,073,741,823 characters (utf8mb4)
230+
return generateStringValue(field.key, 1000);
231+
}
232+
217233
case 'integer': {
218234
const intAttr = field as Models.ColumnInteger;
219235
const minCompat = coerceToNumber(intAttr.min);

src/lib/helpers/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ export type Prettify<T> = T & {};
3030

3131
const columnTypes = [
3232
'string',
33+
'varchar',
34+
'text',
35+
'mediumtext',
36+
'longtext',
3337
'integer',
3438
'double',
3539
'boolean',

src/lib/stores/migration.ts

Lines changed: 46 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { writable } from 'svelte/store';
2-
2+
import { Resources } from '@appwrite.io/console';
33
import { includesAll } from '$lib/helpers/array';
44

55
const initialFormData = {
@@ -51,66 +51,66 @@ export const ResourcesFriendly = {
5151
row: { singular: 'Row', plural: 'Rows' }
5252
};
5353

54-
const resources = Object.keys(ResourcesFriendly);
55-
56-
type Resource = (typeof resources)[number];
57-
5854
// @todo: @itznotabug - check if other resources are correct and work fine!
59-
export const providerResources: Record<Provider, Resource[]> = {
60-
appwrite: [...resources], // new terminology, others are ok?
55+
export const providerResources: Record<Provider, Resources[]> = {
56+
appwrite: Object.values(Resources),
6157
supabase: [
62-
'user',
63-
'database',
64-
'collection',
65-
'attribute',
66-
'index',
67-
'document',
68-
'bucket',
69-
'file'
58+
Resources.User,
59+
Resources.Database,
60+
Resources.Collection,
61+
Resources.Attribute,
62+
Resources.Index,
63+
Resources.Document,
64+
Resources.Bucket,
65+
Resources.File
7066
],
71-
nhost: ['user', 'database', 'collection', 'attribute', 'index', 'document', 'bucket', 'file'],
72-
firebase: ['user', 'database', 'collection', 'attribute', 'document', 'bucket', 'file']
67+
nhost: [
68+
Resources.User,
69+
Resources.Database,
70+
Resources.Collection,
71+
Resources.Attribute,
72+
Resources.Index,
73+
Resources.Document,
74+
Resources.Bucket,
75+
Resources.File
76+
],
77+
firebase: [
78+
Resources.User,
79+
Resources.Database,
80+
Resources.Collection,
81+
Resources.Attribute,
82+
Resources.Document,
83+
Resources.Bucket,
84+
Resources.File
85+
]
7386
};
7487

7588
export const migrationFormToResources = (
7689
formData: MigrationFormData,
7790
provider: Provider
78-
): Resource[] => {
79-
const resources: Resource[] = [];
80-
const addResource = (resource: Resource) => {
91+
): Resources[] => {
92+
const resources: Resources[] = [];
93+
const addResource = (resource: Resources) => {
8194
if (providerResources[provider].includes(resource)) {
8295
resources.push(resource);
8396
}
8497
};
8598

8699
if (formData.users.root) {
87-
addResource('user');
88-
}
89-
if (formData.users.teams) {
90-
addResource('team');
91-
addResource('membership');
100+
addResource(Resources.User);
92101
}
93102
if (formData.databases.root) {
94-
addResource('database');
95-
addResource('table');
96-
addResource('column');
97-
addResource('columnIndex');
103+
addResource(Resources.Database);
104+
addResource(Resources.Table);
105+
addResource(Resources.Column);
106+
addResource(Resources.Index);
98107
}
99108
if (formData.databases.rows) {
100-
addResource('row');
101-
}
102-
if (formData.functions.root) {
103-
addResource('function');
104-
}
105-
if (formData.functions.env) {
106-
addResource('environment-variable');
107-
}
108-
if (formData.functions.inactive) {
109-
addResource('deployment');
109+
addResource(Resources.Row);
110110
}
111111
if (formData.storage.root) {
112-
addResource('bucket');
113-
addResource('file');
112+
addResource(Resources.Bucket);
113+
addResource(Resources.File);
114114
}
115115

116116
return resources;
@@ -137,33 +137,18 @@ export const isVersionAtLeast = (version: string, atLeast: string) => {
137137
return compareVersions(version, atLeast) >= 0;
138138
};
139139

140-
export const resourcesToMigrationForm = (
141-
resources: Resource[],
142-
version = '0.0.0'
143-
): MigrationFormData => {
140+
export const resourcesToMigrationForm = (resources: Resources[]): MigrationFormData => {
144141
const formData = { ...initialFormData };
145-
if (resources.includes('user')) {
142+
if (resources.includes(Resources.User)) {
146143
formData.users.root = true;
147144
}
148-
if (includesAll(resources, ['team', 'membership'])) {
149-
formData.users.teams = true;
150-
}
151-
if (resources.includes('database')) {
145+
if (resources.includes(Resources.Database)) {
152146
formData.databases.root = true;
153147
}
154-
if (includesAll(resources, ['table', 'column', 'row'])) {
148+
if (includesAll(resources, [Resources.Table, Resources.Column, Resources.Row] as Resources[])) {
155149
formData.databases.rows = true;
156150
}
157-
if (resources.includes('function') && isVersionAtLeast(version, '1.4.0')) {
158-
formData.functions.root = true;
159-
}
160-
if (resources.includes('environment-variable') && isVersionAtLeast(version, '1.4.0')) {
161-
formData.functions.env = true;
162-
}
163-
if (resources.includes('deployment') && isVersionAtLeast(version, '1.4.0')) {
164-
formData.functions.inactive = true;
165-
}
166-
if (includesAll(resources, ['bucket', 'file'])) {
151+
if (includesAll(resources, [Resources.Bucket, Resources.File] as Resources[])) {
167152
formData.storage.root = true;
168153
}
169154

src/routes/(console)/(migration-wizard)/resource-form.svelte

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@
55
import {
66
createMigrationFormStore,
77
createMigrationProviderStore,
8-
isVersionAtLeast,
98
type MigrationFormData,
109
providerResources,
1110
resourcesToMigrationForm
1211
} from '$lib/stores/migration';
1312
import { Button } from '$lib/elements/forms';
1413
import { wizard } from '$lib/stores/wizard';
15-
import type { Models } from '@appwrite.io/console';
14+
import { Resources, type Models } from '@appwrite.io/console';
1615
import type { sdk } from '$lib/stores/sdk';
1716
import ImportReport from '$routes/(console)/project-[region]-[project]/settings/migrations/(import)/importReport.svelte';
1817
@@ -33,11 +32,9 @@
3332
}
3433
3534
function selectAll() {
36-
$formData = resourcesToMigrationForm(resources, version);
35+
$formData = resourcesToMigrationForm(resources);
3736
}
3837
39-
$: version = report?.version || '0.0.0';
40-
4138
let error = false;
4239
let isOpen = false;
4340
let report: Models.MigrationReport;
@@ -98,14 +95,21 @@
9895
9996
const shouldRenderGroup = (groupKey: string): boolean => {
10097
if (groupKey === 'functions') {
101-
return resources.includes('function') && isVersionAtLeast(version, '1.4.0');
98+
// Functions not in SDK Resources enum, skip
99+
return false;
102100
}
103101
104102
if (groupKey === 'storage') {
105-
return resources.includes('bucket') && resources.includes('file');
103+
return resources.includes(Resources.Bucket) && resources.includes(Resources.File);
106104
}
107105
108-
return resources.includes(groupKey.slice(0, -1));
106+
// Map groupKey to Resources enum
107+
const groupToResource: Record<string, Resources> = {
108+
users: Resources.User,
109+
databases: Resources.Database
110+
};
111+
const resource = groupToResource[groupKey];
112+
return resource ? resources.includes(resource) : false;
109113
};
110114
111115
// no typecasting in svelte context!
@@ -125,14 +129,6 @@
125129
</script>
126130

127131
<Layout.Stack gap="l">
128-
{#if report && !isVersionAtLeast(version, '1.4.0') && $provider.provider === 'appwrite'}
129-
<Alert.Inline status="warning">
130-
<svelte:fragment slot="title">Functions not available for import</svelte:fragment>
131-
To migrate your functions, update the version of the Appwrite instance you're importing from
132-
to a version newer than 1.4
133-
</Alert.Inline>
134-
{/if}
135-
136132
{#if error}
137133
<Alert.Inline status="error" title="Couldn’t load resources">
138134
{#if migrationType === 'provider'}

0 commit comments

Comments
 (0)