@@ -2,9 +2,9 @@ const inquirer = require("inquirer");
2
2
const JSONbig = require("json-bigint")({ storeAsString: false });
3
3
const { Command } = require("commander");
4
4
const { localConfig } = require("../config");
5
- const { questionsDeployFunctions, questionsGetEntrypoint, questionsDeployCollections } = require("../questions");
5
+ const { questionsDeployFunctions, questionsGetEntrypoint, questionsDeployCollections, questionsConfirmDeployCollections } = require("../questions");
6
6
const { actionRunner, success, log, error, commandDescriptions } = require("../parser");
7
- const { functionsGet, functionsCreate, functionsUpdate, functionsCreateDeployment, functionsUpdateDeployment } = require('./functions');
7
+ const { functionsGet, functionsCreate, functionsUpdate, functionsCreateDeployment, functionsUpdateDeployment, functionsListVariables, functionsDeleteVariable, functionsCreateVariable } = require('./functions');
8
8
const {
9
9
databasesGet,
10
10
databasesCreate,
@@ -39,7 +39,7 @@ const awaitPools = {
39
39
const { attributes: remoteAttributes } = await databasesListAttributes({
40
40
databaseId,
41
41
collectionId,
42
- limit: 100,
42
+ queries: [ 'limit( 100)' ] ,
43
43
parseOutput: false
44
44
});
45
45
@@ -59,7 +59,7 @@ const awaitPools = {
59
59
const { indexes: remoteIndexes } = await databasesListIndexes({
60
60
databaseId,
61
61
collectionId,
62
- limit: 100,
62
+ queries: [ 'limit( 100)' ] ,
63
63
parseOutput: false
64
64
});
65
65
@@ -79,7 +79,7 @@ const awaitPools = {
79
79
const { attributes: remoteAttributes } = await databasesListAttributes({
80
80
databaseId,
81
81
collectionId,
82
- limit: 100,
82
+ queries: [ 'limit( 100)' ] ,
83
83
parseOutput: false
84
84
});
85
85
@@ -111,7 +111,7 @@ const awaitPools = {
111
111
const { indexes: remoteIndexes } = await databasesListIndexes({
112
112
databaseId,
113
113
collectionId,
114
- limit: 100,
114
+ queries: [ 'limit( 100)' ] ,
115
115
parseOutput: false
116
116
});
117
117
@@ -142,7 +142,7 @@ const deploy = new Command("deploy")
142
142
command.help()
143
143
}));
144
144
145
- const deployFunction = async ({ functionId, all } = {}) => {
145
+ const deployFunction = async ({ functionId, all, yes } = {}) => {
146
146
let response = {};
147
147
148
148
const functionIds = [];
@@ -160,7 +160,7 @@ const deployFunction = async ({ functionId, all } = {}) => {
160
160
}
161
161
162
162
if(functionIds.length < = 0) {
163
- const answers = await inquirer.prompt(questionsDeployFunctions);
163
+ const answers = await inquirer.prompt(questionsDeployFunctions[0] );
164
164
functionIds.push(...answers.functions);
165
165
}
166
166
@@ -188,6 +188,46 @@ const deployFunction = async ({ functionId, all } = {}) => {
188
188
throw new Error(`Runtime missmatch! (local=${func.runtime},remote=${response.runtime}) Please delete remote function or update your appwrite.json`);
189
189
}
190
190
191
+ if(func.variables) {
192
+ // Delete existing variables
193
+
194
+ // TODO: Pagination?
195
+ const { variables: remoteVariables } = await functionsListVariables({
196
+ functionId: func['$id'],
197
+ queries: [ 'limit(100)' ],
198
+ parseOutput: false
199
+ });
200
+
201
+ if(remoteVariables.length > 0) {
202
+ if(!yes) {
203
+ const variableAnswers = await inquirer.prompt(questionsDeployFunctions[1])
204
+
205
+ if (variableAnswers.override !== "YES") {
206
+ log(`Received "${variableAnswers.override}". Skipping ${func.name} ( ${func['$id']} )`);
207
+ continue;
208
+ }
209
+ }
210
+
211
+ await Promise.all(remoteVariables.map(async remoteVariable => {
212
+ await functionsDeleteVariable({
213
+ functionId: func['$id'],
214
+ variableId: remoteVariable['$id'],
215
+ parseOutput: false
216
+ });
217
+ }));
218
+ }
219
+
220
+ // Deploy local variables
221
+ await Promise.all(Object.keys(func.variables).map(async localVariableKey => {
222
+ await functionsCreateVariable({
223
+ functionId: func['$id'],
224
+ key: localVariableKey,
225
+ value: func.variables[localVariableKey],
226
+ parseOutput: false
227
+ });
228
+ }));
229
+ }
230
+
191
231
response = await functionsUpdate({
192
232
functionId: func['$id'],
193
233
name: func.name,
@@ -359,7 +399,7 @@ const createAttribute = async (databaseId, collectionId, attribute) => {
359
399
}
360
400
}
361
401
362
- const deployCollection = async ({ all } = {}) => {
402
+ const deployCollection = async ({ all, yes } = {}) => {
363
403
let response = {};
364
404
365
405
let collectionIds = [];
@@ -413,10 +453,12 @@ const deployCollection = async ({ all } = {}) => {
413
453
})
414
454
log(`Collection ${collection.name} ( ${collection['$id']} ) already exists.`);
415
455
416
- answers = await inquirer.prompt(questionsDeployCollections[1])
417
- if (answers.override !== "YES") {
418
- log(`Received "${answers.override}". Skipping ${collection.name} ( ${collection['$id']} )`);
419
- continue;
456
+ if(!yes) {
457
+ answers = await inquirer.prompt(questionsDeployCollections[1])
458
+ if (answers.override !== "YES") {
459
+ log(`Received "${answers.override}". Skipping ${collection.name} ( ${collection['$id']} )`);
460
+ continue;
461
+ }
420
462
}
421
463
422
464
log(`Updating attributes ... `);
@@ -425,7 +467,7 @@ const deployCollection = async ({ all } = {}) => {
425
467
const { indexes: remoteIndexes } = await databasesListIndexes({
426
468
databaseId,
427
469
collectionId: collection['$id'],
428
- limit: 100,
470
+ queries: [ 'limit( 100)' ] ,
429
471
parseOutput: false
430
472
});
431
473
@@ -447,7 +489,7 @@ const deployCollection = async ({ all } = {}) => {
447
489
const { attributes: remoteAttributes } = await databasesListAttributes({
448
490
databaseId,
449
491
collectionId: collection['$id'],
450
- limit: 100,
492
+ queries: [ 'limit( 100)' ] ,
451
493
parseOutput: false
452
494
});
453
495
@@ -556,12 +598,14 @@ deploy
556
598
.description("Deploy functions in the current directory.")
557
599
.option(`--functionId <functionId >`, `Function ID`)
558
600
.option(`--all`, `Flag to deploy all functions`)
601
+ .option(`--yes`, `Flag to confirm all warnings`)
559
602
.action(actionRunner(deployFunction));
560
603
561
604
deploy
562
605
.command("collection")
563
606
.description("Deploy collections in the current project.")
564
607
.option(`--all`, `Flag to deploy all functions`)
608
+ .option(`--yes`, `Flag to confirm all warnings`)
565
609
.action(actionRunner(deployCollection));
566
610
567
611
module.exports = {
0 commit comments