appwrite-cli 13.0.1 → 13.1.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +2 -2
- package/cli.ts +2 -0
- package/dist/bundle.cjs +17551 -16864
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/lib/commands/config-validations.d.ts +53 -0
- package/dist/lib/commands/config-validations.d.ts.map +1 -0
- package/dist/lib/commands/config-validations.js +130 -0
- package/dist/lib/commands/config-validations.js.map +1 -0
- package/dist/lib/commands/config.d.ts +241 -325
- package/dist/lib/commands/config.d.ts.map +1 -1
- package/dist/lib/commands/config.js +86 -107
- package/dist/lib/commands/config.js.map +1 -1
- package/dist/lib/commands/generate.d.ts +7 -0
- package/dist/lib/commands/generate.d.ts.map +1 -0
- package/dist/lib/commands/generate.js +92 -0
- package/dist/lib/commands/generate.js.map +1 -0
- package/dist/lib/commands/generators/base.d.ts +58 -0
- package/dist/lib/commands/generators/base.d.ts.map +1 -0
- package/dist/lib/commands/generators/base.js +27 -0
- package/dist/lib/commands/generators/base.js.map +1 -0
- package/dist/lib/commands/generators/index.d.ts +26 -0
- package/dist/lib/commands/generators/index.d.ts.map +1 -0
- package/dist/lib/commands/generators/index.js +55 -0
- package/dist/lib/commands/generators/index.js.map +1 -0
- package/dist/lib/commands/generators/language-detector.d.ts +42 -0
- package/dist/lib/commands/generators/language-detector.d.ts.map +1 -0
- package/dist/lib/commands/generators/language-detector.js +127 -0
- package/dist/lib/commands/generators/language-detector.js.map +1 -0
- package/dist/lib/commands/generators/typescript/databases.d.ts +36 -0
- package/dist/lib/commands/generators/typescript/databases.d.ts.map +1 -0
- package/dist/lib/commands/generators/typescript/databases.js +489 -0
- package/dist/lib/commands/generators/typescript/databases.js.map +1 -0
- package/dist/lib/commands/pull.js +3 -3
- package/dist/lib/commands/pull.js.map +1 -1
- package/dist/lib/commands/push.d.ts +6 -3
- package/dist/lib/commands/push.d.ts.map +1 -1
- package/dist/lib/commands/push.js +57 -37
- package/dist/lib/commands/push.js.map +1 -1
- package/dist/lib/commands/schema.d.ts +2 -2
- package/dist/lib/commands/schema.d.ts.map +1 -1
- package/dist/lib/commands/schema.js +2 -2
- package/dist/lib/commands/schema.js.map +1 -1
- package/dist/lib/commands/utils/attributes.d.ts +5 -0
- package/dist/lib/commands/utils/attributes.d.ts.map +1 -1
- package/dist/lib/commands/utils/attributes.js +20 -10
- package/dist/lib/commands/utils/attributes.js.map +1 -1
- package/dist/lib/commands/utils/pools.d.ts +0 -3
- package/dist/lib/commands/utils/pools.d.ts.map +1 -1
- package/dist/lib/commands/utils/pools.js +0 -34
- package/dist/lib/commands/utils/pools.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +28 -131
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +1 -1
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +1 -1
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +26 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/package.json +1 -1
- package/install.ps1 +2 -2
- package/install.sh +1 -1
- package/lib/commands/config-validations.ts +199 -0
- package/lib/commands/config.ts +94 -125
- package/lib/commands/generate.ts +142 -0
- package/lib/commands/generators/base.ts +91 -0
- package/lib/commands/generators/index.ts +87 -0
- package/lib/commands/generators/language-detector.ts +163 -0
- package/lib/commands/generators/typescript/databases.ts +590 -0
- package/lib/commands/pull.ts +4 -4
- package/lib/commands/push.ts +97 -58
- package/lib/commands/schema.ts +3 -3
- package/lib/commands/utils/attributes.ts +31 -11
- package/lib/commands/utils/pools.ts +0 -67
- package/lib/config.ts +43 -131
- package/lib/constants.ts +1 -1
- package/lib/utils.ts +32 -0
- package/package.json +1 -1
- package/scoop/appwrite.config.json +3 -3
- package/dist/lib/commands/db.d.ts +0 -34
- package/dist/lib/commands/db.d.ts.map +0 -1
- package/dist/lib/commands/db.js +0 -247
- package/dist/lib/commands/db.js.map +0 -1
- package/lib/commands/db.ts +0 -324
package/dist/lib/utils.js
CHANGED
|
@@ -163,4 +163,30 @@ export function filterBySchema(data, schema) {
|
|
|
163
163
|
}
|
|
164
164
|
return result;
|
|
165
165
|
}
|
|
166
|
+
export function toPascalCase(str) {
|
|
167
|
+
return str
|
|
168
|
+
.replace(/[-_\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ""))
|
|
169
|
+
.replace(/^(.)/, (char) => char.toUpperCase());
|
|
170
|
+
}
|
|
171
|
+
export function toUpperSnakeCase(str) {
|
|
172
|
+
return str
|
|
173
|
+
.replace(/([a-z])([A-Z])/g, "$1_$2")
|
|
174
|
+
.replace(/[-\s]+/g, "_")
|
|
175
|
+
.toUpperCase();
|
|
176
|
+
}
|
|
177
|
+
export function sanitizeEnumKey(key) {
|
|
178
|
+
let sanitized = toUpperSnakeCase(key)
|
|
179
|
+
.replace(/[^A-Z0-9_]/gi, "_") // Replace non-alphanumeric with underscores
|
|
180
|
+
.replace(/_+/g, "_") // Collapse consecutive underscores
|
|
181
|
+
.replace(/^_+|_+$/g, ""); // Trim leading/trailing underscores
|
|
182
|
+
// Prefix with underscore if starts with a digit
|
|
183
|
+
if (/^[0-9]/.test(sanitized)) {
|
|
184
|
+
sanitized = "_" + sanitized;
|
|
185
|
+
}
|
|
186
|
+
// Fallback if empty after sanitization
|
|
187
|
+
if (!sanitized) {
|
|
188
|
+
sanitized = "_VALUE";
|
|
189
|
+
}
|
|
190
|
+
return sanitized;
|
|
191
|
+
}
|
|
166
192
|
//# sourceMappingURL=utils.js.map
|
package/dist/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"type": "module",
|
|
4
4
|
"homepage": "https://appwrite.io/support",
|
|
5
5
|
"description": "Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API",
|
|
6
|
-
"version": "13.0.1",
|
|
6
|
+
"version": "13.1.0-rc.1",
|
|
7
7
|
"license": "BSD-3-Clause",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"types": "dist/index.d.ts",
|
package/install.ps1
CHANGED
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
# You can use "View source" of this page to see the full script.
|
|
14
14
|
|
|
15
15
|
# REPO
|
|
16
|
-
$GITHUB_x64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/13.0.1/appwrite-cli-win-x64.exe"
|
|
17
|
-
$GITHUB_arm64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/13.0.1/appwrite-cli-win-arm64.exe"
|
|
16
|
+
$GITHUB_x64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/13.1.0-rc.1/appwrite-cli-win-x64.exe"
|
|
17
|
+
$GITHUB_arm64_URL = "https://github.com/appwrite/sdk-for-cli/releases/download/13.1.0-rc.1/appwrite-cli-win-arm64.exe"
|
|
18
18
|
|
|
19
19
|
$APPWRITE_BINARY_NAME = "appwrite.exe"
|
|
20
20
|
|
package/install.sh
CHANGED
|
@@ -96,7 +96,7 @@ printSuccess() {
|
|
|
96
96
|
downloadBinary() {
|
|
97
97
|
echo "[2/4] Downloading executable for $OS ($ARCH) ..."
|
|
98
98
|
|
|
99
|
-
GITHUB_LATEST_VERSION="13.0.1"
|
|
99
|
+
GITHUB_LATEST_VERSION="13.1.0-rc.1"
|
|
100
100
|
GITHUB_FILE="appwrite-cli-${OS}-${ARCH}"
|
|
101
101
|
GITHUB_URL="https://github.com/$GITHUB_REPOSITORY_NAME/releases/download/$GITHUB_LATEST_VERSION/$GITHUB_FILE"
|
|
102
102
|
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Attribute Validations
|
|
5
|
+
// ============================================================================
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Validates that when 'required' is true, 'default' must be null
|
|
9
|
+
*/
|
|
10
|
+
export const validateRequiredDefault = (data: {
|
|
11
|
+
required?: boolean;
|
|
12
|
+
default?: any;
|
|
13
|
+
}) => {
|
|
14
|
+
if (data.required === true && data.default !== null) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Validates that string type attributes must have a size defined
|
|
22
|
+
*/
|
|
23
|
+
export const validateStringSize = (data: {
|
|
24
|
+
type: string;
|
|
25
|
+
size?: number | null;
|
|
26
|
+
}) => {
|
|
27
|
+
if (
|
|
28
|
+
data.type === "string" &&
|
|
29
|
+
(data.size === undefined || data.size === null)
|
|
30
|
+
) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Collection & Table Validations
|
|
38
|
+
// ============================================================================
|
|
39
|
+
|
|
40
|
+
interface AttributeOrColumn {
|
|
41
|
+
key: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
interface Index {
|
|
45
|
+
key: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
interface CollectionOrTableData {
|
|
49
|
+
attributes?: AttributeOrColumn[];
|
|
50
|
+
columns?: AttributeOrColumn[];
|
|
51
|
+
indexes?: Index[];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Validates duplicate keys in attributes/columns and indexes
|
|
56
|
+
*/
|
|
57
|
+
export const validateContainerDuplicates = (
|
|
58
|
+
data: CollectionOrTableData,
|
|
59
|
+
ctx: z.RefinementCtx,
|
|
60
|
+
) => {
|
|
61
|
+
const items = data.attributes || data.columns || [];
|
|
62
|
+
const itemType = data.attributes ? "Attribute" : "Column";
|
|
63
|
+
const itemPath = data.attributes ? "attributes" : "columns";
|
|
64
|
+
|
|
65
|
+
// Validate duplicate item keys
|
|
66
|
+
if (items.length > 0) {
|
|
67
|
+
const seenKeys = new Set<string>();
|
|
68
|
+
|
|
69
|
+
items.forEach((item, index) => {
|
|
70
|
+
if (seenKeys.has(item.key)) {
|
|
71
|
+
ctx.addIssue({
|
|
72
|
+
code: z.ZodIssueCode.custom,
|
|
73
|
+
message: `${itemType} with the key '${item.key}' already exists. ${itemType} keys must be unique, try again with a different key.`,
|
|
74
|
+
path: [itemPath, index, "key"],
|
|
75
|
+
});
|
|
76
|
+
} else {
|
|
77
|
+
seenKeys.add(item.key);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Validate duplicate index keys
|
|
83
|
+
if (data.indexes && data.indexes.length > 0) {
|
|
84
|
+
const seenKeys = new Set<string>();
|
|
85
|
+
|
|
86
|
+
data.indexes.forEach((index, indexPos) => {
|
|
87
|
+
if (seenKeys.has(index.key)) {
|
|
88
|
+
ctx.addIssue({
|
|
89
|
+
code: z.ZodIssueCode.custom,
|
|
90
|
+
message: `Index with the key '${index.key}' already exists. Index keys must be unique, try again with a different key.`,
|
|
91
|
+
path: ["indexes", indexPos, "key"],
|
|
92
|
+
});
|
|
93
|
+
} else {
|
|
94
|
+
seenKeys.add(index.key);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
// ============================================================================
|
|
101
|
+
// Config Validations
|
|
102
|
+
// ============================================================================
|
|
103
|
+
|
|
104
|
+
interface RelationshipItem {
|
|
105
|
+
key: string;
|
|
106
|
+
type: string;
|
|
107
|
+
relatedTable?: string;
|
|
108
|
+
relatedCollection?: string;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
interface ContainerWithDatabase {
|
|
112
|
+
$id: string;
|
|
113
|
+
name: string;
|
|
114
|
+
databaseId: string;
|
|
115
|
+
columns?: RelationshipItem[];
|
|
116
|
+
attributes?: RelationshipItem[];
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
interface ConfigData {
|
|
120
|
+
tables?: ContainerWithDatabase[];
|
|
121
|
+
collections?: ContainerWithDatabase[];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Validates cross-database relationships
|
|
126
|
+
*/
|
|
127
|
+
export const validateCrossDatabase = (
|
|
128
|
+
data: ConfigData,
|
|
129
|
+
ctx: z.RefinementCtx,
|
|
130
|
+
) => {
|
|
131
|
+
// Validate cross-database relationships for tables
|
|
132
|
+
if (data.tables && data.tables.length > 0) {
|
|
133
|
+
// Build a map of table IDs to their database IDs
|
|
134
|
+
const tableDatabaseMap = new Map<string, string>();
|
|
135
|
+
for (const table of data.tables) {
|
|
136
|
+
tableDatabaseMap.set(table.$id, table.databaseId);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Check each table's relationship columns
|
|
140
|
+
data.tables.forEach((table, tableIndex) => {
|
|
141
|
+
const columns = table.columns || [];
|
|
142
|
+
columns.forEach((column, columnIndex) => {
|
|
143
|
+
if (column.type === "relationship" && column.relatedTable) {
|
|
144
|
+
const relatedDatabaseId = tableDatabaseMap.get(column.relatedTable);
|
|
145
|
+
if (relatedDatabaseId && relatedDatabaseId !== table.databaseId) {
|
|
146
|
+
ctx.addIssue({
|
|
147
|
+
code: z.ZodIssueCode.custom,
|
|
148
|
+
message: `Invalid cross-database relationship: Table '${table.name}' (database: '${table.databaseId}') has relationship '${column.key}' pointing to table '${column.relatedTable}' which is in database '${relatedDatabaseId}'. Appwrite only supports relationships within the same database.`,
|
|
149
|
+
path: [
|
|
150
|
+
"tables",
|
|
151
|
+
tableIndex,
|
|
152
|
+
"columns",
|
|
153
|
+
columnIndex,
|
|
154
|
+
"relatedTable",
|
|
155
|
+
],
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Validate cross-database relationships for collections (legacy)
|
|
164
|
+
if (data.collections && data.collections.length > 0) {
|
|
165
|
+
// Build a map of collection IDs to their database IDs
|
|
166
|
+
const collectionDatabaseMap = new Map<string, string>();
|
|
167
|
+
for (const collection of data.collections) {
|
|
168
|
+
collectionDatabaseMap.set(collection.$id, collection.databaseId);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Check each collection's relationship attributes
|
|
172
|
+
data.collections.forEach((collection, collectionIndex) => {
|
|
173
|
+
const attributes = collection.attributes || [];
|
|
174
|
+
attributes.forEach((attribute, attributeIndex) => {
|
|
175
|
+
if (attribute.type === "relationship" && attribute.relatedCollection) {
|
|
176
|
+
const relatedDatabaseId = collectionDatabaseMap.get(
|
|
177
|
+
attribute.relatedCollection,
|
|
178
|
+
);
|
|
179
|
+
if (
|
|
180
|
+
relatedDatabaseId &&
|
|
181
|
+
relatedDatabaseId !== collection.databaseId
|
|
182
|
+
) {
|
|
183
|
+
ctx.addIssue({
|
|
184
|
+
code: z.ZodIssueCode.custom,
|
|
185
|
+
message: `Invalid cross-database relationship: Collection '${collection.name}' (database: '${collection.databaseId}') has relationship '${attribute.key}' pointing to collection '${attribute.relatedCollection}' which is in database '${relatedDatabaseId}'. Appwrite only supports relationships within the same database.`,
|
|
186
|
+
path: [
|
|
187
|
+
"collections",
|
|
188
|
+
collectionIndex,
|
|
189
|
+
"attributes",
|
|
190
|
+
attributeIndex,
|
|
191
|
+
"relatedCollection",
|
|
192
|
+
],
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
};
|
package/lib/commands/config.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import {
|
|
3
|
+
validateRequiredDefault,
|
|
4
|
+
validateStringSize,
|
|
5
|
+
validateContainerDuplicates,
|
|
6
|
+
validateCrossDatabase,
|
|
7
|
+
} from "./config-validations.js";
|
|
2
8
|
|
|
3
9
|
// ============================================================================
|
|
4
|
-
// Internal Helpers
|
|
10
|
+
// Internal Helpers
|
|
5
11
|
// ============================================================================
|
|
6
12
|
|
|
7
13
|
const INT64_MIN = BigInt("-9223372036854775808");
|
|
@@ -65,29 +71,6 @@ const MockNumberSchema = z
|
|
|
65
71
|
})
|
|
66
72
|
.strict();
|
|
67
73
|
|
|
68
|
-
// ============================================================================
|
|
69
|
-
// Config Schema
|
|
70
|
-
// ============================================================================
|
|
71
|
-
|
|
72
|
-
const ConfigSchema = z
|
|
73
|
-
.object({
|
|
74
|
-
projectId: z.string(),
|
|
75
|
-
projectName: z.string().optional(),
|
|
76
|
-
endpoint: z.string().optional(),
|
|
77
|
-
settings: z.lazy(() => SettingsSchema).optional(),
|
|
78
|
-
functions: z.array(z.lazy(() => FunctionSchema)).optional(),
|
|
79
|
-
sites: z.array(z.lazy(() => SiteSchema)).optional(),
|
|
80
|
-
databases: z.array(z.lazy(() => DatabaseSchema)).optional(),
|
|
81
|
-
collections: z.array(z.lazy(() => CollectionSchema)).optional(),
|
|
82
|
-
tablesDB: z.array(z.lazy(() => DatabaseSchema)).optional(),
|
|
83
|
-
tables: z.array(z.lazy(() => TablesDBSchema)).optional(),
|
|
84
|
-
topics: z.array(z.lazy(() => TopicSchema)).optional(),
|
|
85
|
-
teams: z.array(z.lazy(() => TeamSchema)).optional(),
|
|
86
|
-
buckets: z.array(z.lazy(() => BucketSchema)).optional(),
|
|
87
|
-
messages: z.array(z.lazy(() => MessageSchema)).optional(),
|
|
88
|
-
})
|
|
89
|
-
.strict();
|
|
90
|
-
|
|
91
74
|
// ============================================================================
|
|
92
75
|
// Project Settings
|
|
93
76
|
// ============================================================================
|
|
@@ -206,7 +189,7 @@ const DatabaseSchema = z
|
|
|
206
189
|
// Collections (legacy)
|
|
207
190
|
// ============================================================================
|
|
208
191
|
|
|
209
|
-
const
|
|
192
|
+
const AttributeSchema = z
|
|
210
193
|
.object({
|
|
211
194
|
key: z.string(),
|
|
212
195
|
type: z.enum([
|
|
@@ -234,6 +217,7 @@ const AttributeSchemaBase = z
|
|
|
234
217
|
.optional(),
|
|
235
218
|
elements: z.array(z.string()).optional(),
|
|
236
219
|
relatedCollection: z.string().optional(),
|
|
220
|
+
relatedTable: z.string().optional(),
|
|
237
221
|
relationType: z.string().optional(),
|
|
238
222
|
twoWay: z.boolean().optional(),
|
|
239
223
|
twoWayKey: z.string().optional(),
|
|
@@ -243,34 +227,15 @@ const AttributeSchemaBase = z
|
|
|
243
227
|
orders: z.array(z.string()).optional(),
|
|
244
228
|
encrypt: z.boolean().optional(),
|
|
245
229
|
})
|
|
246
|
-
.strict()
|
|
247
|
-
|
|
248
|
-
const AttributeSchema = AttributeSchemaBase.refine(
|
|
249
|
-
(data) => {
|
|
250
|
-
if (data.required === true && data.default !== null) {
|
|
251
|
-
return false;
|
|
252
|
-
}
|
|
253
|
-
return true;
|
|
254
|
-
},
|
|
255
|
-
{
|
|
230
|
+
.strict()
|
|
231
|
+
.refine(validateRequiredDefault, {
|
|
256
232
|
message: "When 'required' is true, 'default' must be null",
|
|
257
233
|
path: ["default"],
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
(data) => {
|
|
261
|
-
if (
|
|
262
|
-
data.type === "string" &&
|
|
263
|
-
(data.size === undefined || data.size === null)
|
|
264
|
-
) {
|
|
265
|
-
return false;
|
|
266
|
-
}
|
|
267
|
-
return true;
|
|
268
|
-
},
|
|
269
|
-
{
|
|
234
|
+
})
|
|
235
|
+
.refine(validateStringSize, {
|
|
270
236
|
message: "When 'type' is 'string', 'size' must be defined",
|
|
271
237
|
path: ["size"],
|
|
272
|
-
}
|
|
273
|
-
);
|
|
238
|
+
});
|
|
274
239
|
|
|
275
240
|
const IndexSchema = z
|
|
276
241
|
.object({
|
|
@@ -294,46 +259,60 @@ const CollectionSchema = z
|
|
|
294
259
|
indexes: z.array(IndexSchema).optional(),
|
|
295
260
|
})
|
|
296
261
|
.strict()
|
|
297
|
-
.superRefine(
|
|
298
|
-
if (data.attributes && data.attributes.length > 0) {
|
|
299
|
-
const seenKeys = new Set<string>();
|
|
300
|
-
|
|
301
|
-
data.attributes.forEach((attr, index) => {
|
|
302
|
-
if (seenKeys.has(attr.key)) {
|
|
303
|
-
ctx.addIssue({
|
|
304
|
-
code: z.ZodIssueCode.custom,
|
|
305
|
-
message: `Attribute with the key '${attr.key}' already exists. Attribute keys must be unique, try again with a different key.`,
|
|
306
|
-
path: ["attributes", index, "key"],
|
|
307
|
-
});
|
|
308
|
-
} else {
|
|
309
|
-
seenKeys.add(attr.key);
|
|
310
|
-
}
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
if (data.indexes && data.indexes.length > 0) {
|
|
315
|
-
const seenKeys = new Set<string>();
|
|
316
|
-
|
|
317
|
-
data.indexes.forEach((index, indexPos) => {
|
|
318
|
-
if (seenKeys.has(index.key)) {
|
|
319
|
-
ctx.addIssue({
|
|
320
|
-
code: z.ZodIssueCode.custom,
|
|
321
|
-
message: `Index with the key '${index.key}' already exists. Index keys must be unique, try again with a different key.`,
|
|
322
|
-
path: ["indexes", indexPos, "key"],
|
|
323
|
-
});
|
|
324
|
-
} else {
|
|
325
|
-
seenKeys.add(index.key);
|
|
326
|
-
}
|
|
327
|
-
});
|
|
328
|
-
}
|
|
329
|
-
});
|
|
262
|
+
.superRefine(validateContainerDuplicates);
|
|
330
263
|
|
|
331
264
|
// ============================================================================
|
|
332
265
|
// Tables
|
|
333
266
|
// ============================================================================
|
|
334
267
|
|
|
335
|
-
const ColumnSchema =
|
|
336
|
-
|
|
268
|
+
const ColumnSchema = z
|
|
269
|
+
.object({
|
|
270
|
+
key: z.string(),
|
|
271
|
+
type: z.enum([
|
|
272
|
+
"string",
|
|
273
|
+
"integer",
|
|
274
|
+
"double",
|
|
275
|
+
"boolean",
|
|
276
|
+
"datetime",
|
|
277
|
+
"relationship",
|
|
278
|
+
"linestring",
|
|
279
|
+
"point",
|
|
280
|
+
"polygon",
|
|
281
|
+
]),
|
|
282
|
+
required: z.boolean().optional(),
|
|
283
|
+
array: z.boolean().optional(),
|
|
284
|
+
size: z.number().optional(),
|
|
285
|
+
default: z.any().optional(),
|
|
286
|
+
min: int64Schema,
|
|
287
|
+
max: int64Schema,
|
|
288
|
+
format: z
|
|
289
|
+
.union([
|
|
290
|
+
z.enum(["email", "enum", "url", "ip", "datetime"]),
|
|
291
|
+
z.literal(""),
|
|
292
|
+
])
|
|
293
|
+
.optional(),
|
|
294
|
+
elements: z.array(z.string()).optional(),
|
|
295
|
+
// For tables, relationship uses relatedTable instead of relatedCollection
|
|
296
|
+
relatedTable: z.string().optional(),
|
|
297
|
+
relationType: z.string().optional(),
|
|
298
|
+
twoWay: z.boolean().optional(),
|
|
299
|
+
twoWayKey: z.string().optional(),
|
|
300
|
+
onDelete: z.string().optional(),
|
|
301
|
+
side: z.string().optional(),
|
|
302
|
+
// For table indexes, uses columns instead of attributes
|
|
303
|
+
columns: z.array(z.string()).optional(),
|
|
304
|
+
orders: z.array(z.string()).optional(),
|
|
305
|
+
encrypt: z.boolean().optional(),
|
|
306
|
+
})
|
|
307
|
+
.strict()
|
|
308
|
+
.refine(validateRequiredDefault, {
|
|
309
|
+
message: "When 'required' is true, 'default' must be null",
|
|
310
|
+
path: ["default"],
|
|
311
|
+
})
|
|
312
|
+
.refine(validateStringSize, {
|
|
313
|
+
message: "When 'type' is 'string', 'size' must be defined",
|
|
314
|
+
path: ["size"],
|
|
315
|
+
});
|
|
337
316
|
|
|
338
317
|
const IndexTableSchema = z
|
|
339
318
|
.object({
|
|
@@ -345,7 +324,7 @@ const IndexTableSchema = z
|
|
|
345
324
|
})
|
|
346
325
|
.strict();
|
|
347
326
|
|
|
348
|
-
const
|
|
327
|
+
const TableSchema = z
|
|
349
328
|
.object({
|
|
350
329
|
$id: z.string(),
|
|
351
330
|
$permissions: z.array(z.string()).optional(),
|
|
@@ -356,41 +335,8 @@ const TablesDBSchemaBase = z
|
|
|
356
335
|
columns: z.array(ColumnSchema).optional(),
|
|
357
336
|
indexes: z.array(IndexTableSchema).optional(),
|
|
358
337
|
})
|
|
359
|
-
.strict()
|
|
360
|
-
|
|
361
|
-
const TablesDBSchema = TablesDBSchemaBase.superRefine((data, ctx) => {
|
|
362
|
-
if (data.columns && data.columns.length > 0) {
|
|
363
|
-
const seenKeys = new Set<string>();
|
|
364
|
-
|
|
365
|
-
data.columns.forEach((col, index) => {
|
|
366
|
-
if (seenKeys.has(col.key)) {
|
|
367
|
-
ctx.addIssue({
|
|
368
|
-
code: z.ZodIssueCode.custom,
|
|
369
|
-
message: `Column with the key '${col.key}' already exists. Column keys must be unique, try again with a different key.`,
|
|
370
|
-
path: ["columns", index, "key"],
|
|
371
|
-
});
|
|
372
|
-
} else {
|
|
373
|
-
seenKeys.add(col.key);
|
|
374
|
-
}
|
|
375
|
-
});
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
if (data.indexes && data.indexes.length > 0) {
|
|
379
|
-
const seenKeys = new Set<string>();
|
|
380
|
-
|
|
381
|
-
data.indexes.forEach((index, indexPos) => {
|
|
382
|
-
if (seenKeys.has(index.key)) {
|
|
383
|
-
ctx.addIssue({
|
|
384
|
-
code: z.ZodIssueCode.custom,
|
|
385
|
-
message: `Index with the key '${index.key}' already exists. Index keys must be unique, try again with a different key.`,
|
|
386
|
-
path: ["indexes", indexPos, "key"],
|
|
387
|
-
});
|
|
388
|
-
} else {
|
|
389
|
-
seenKeys.add(index.key);
|
|
390
|
-
}
|
|
391
|
-
});
|
|
392
|
-
}
|
|
393
|
-
});
|
|
338
|
+
.strict()
|
|
339
|
+
.superRefine(validateContainerDuplicates);
|
|
394
340
|
|
|
395
341
|
// ============================================================================
|
|
396
342
|
// Topics
|
|
@@ -450,7 +396,31 @@ const BucketSchema = z
|
|
|
450
396
|
.strict();
|
|
451
397
|
|
|
452
398
|
// ============================================================================
|
|
453
|
-
//
|
|
399
|
+
// Config Schema
|
|
400
|
+
// ============================================================================
|
|
401
|
+
|
|
402
|
+
const ConfigSchema = z
|
|
403
|
+
.object({
|
|
404
|
+
projectId: z.string(),
|
|
405
|
+
projectName: z.string().optional(),
|
|
406
|
+
endpoint: z.string().optional(),
|
|
407
|
+
settings: z.lazy(() => SettingsSchema).optional(),
|
|
408
|
+
functions: z.array(z.lazy(() => FunctionSchema)).optional(),
|
|
409
|
+
sites: z.array(z.lazy(() => SiteSchema)).optional(),
|
|
410
|
+
databases: z.array(z.lazy(() => DatabaseSchema)).optional(),
|
|
411
|
+
collections: z.array(z.lazy(() => CollectionSchema)).optional(),
|
|
412
|
+
tablesDB: z.array(z.lazy(() => DatabaseSchema)).optional(),
|
|
413
|
+
tables: z.array(z.lazy(() => TableSchema)).optional(),
|
|
414
|
+
topics: z.array(z.lazy(() => TopicSchema)).optional(),
|
|
415
|
+
teams: z.array(z.lazy(() => TeamSchema)).optional(),
|
|
416
|
+
buckets: z.array(z.lazy(() => BucketSchema)).optional(),
|
|
417
|
+
messages: z.array(z.lazy(() => MessageSchema)).optional(),
|
|
418
|
+
})
|
|
419
|
+
.strict()
|
|
420
|
+
.superRefine(validateCrossDatabase);
|
|
421
|
+
|
|
422
|
+
// ============================================================================
|
|
423
|
+
// Type Exports
|
|
454
424
|
// ============================================================================
|
|
455
425
|
|
|
456
426
|
export type ConfigType = z.infer<typeof ConfigSchema>;
|
|
@@ -461,7 +431,7 @@ export type DatabaseType = z.infer<typeof DatabaseSchema>;
|
|
|
461
431
|
export type CollectionType = z.infer<typeof CollectionSchema>;
|
|
462
432
|
export type AttributeType = z.infer<typeof AttributeSchema>;
|
|
463
433
|
export type IndexType = z.infer<typeof IndexSchema>;
|
|
464
|
-
export type TableType = z.infer<typeof
|
|
434
|
+
export type TableType = z.infer<typeof TableSchema>;
|
|
465
435
|
export type ColumnType = z.infer<typeof ColumnSchema>;
|
|
466
436
|
export type TableIndexType = z.infer<typeof IndexTableSchema>;
|
|
467
437
|
export type TopicType = z.infer<typeof TopicSchema>;
|
|
@@ -474,6 +444,7 @@ export type BucketType = z.infer<typeof BucketSchema>;
|
|
|
474
444
|
// ============================================================================
|
|
475
445
|
|
|
476
446
|
export {
|
|
447
|
+
/** Config */
|
|
477
448
|
ConfigSchema,
|
|
478
449
|
|
|
479
450
|
/** Project Settings */
|
|
@@ -492,10 +463,8 @@ export {
|
|
|
492
463
|
IndexSchema,
|
|
493
464
|
|
|
494
465
|
/** Tables */
|
|
495
|
-
|
|
496
|
-
TablesDBSchemaBase,
|
|
466
|
+
TableSchema,
|
|
497
467
|
ColumnSchema,
|
|
498
|
-
ColumnSchemaBase,
|
|
499
468
|
IndexTableSchema,
|
|
500
469
|
|
|
501
470
|
/** Topics */
|