@emuanalytics/flow-cli 1.3.31
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/LICENSE +21 -0
- package/README.md +0 -0
- package/dist/commands/apikeys/create.js +144 -0
- package/dist/commands/apikeys/create.js.map +1 -0
- package/dist/commands/apikeys/delete.js +74 -0
- package/dist/commands/apikeys/delete.js.map +1 -0
- package/dist/commands/apikeys/list.js +53 -0
- package/dist/commands/apikeys/list.js.map +1 -0
- package/dist/commands/apikeys/metadata.js +59 -0
- package/dist/commands/apikeys/metadata.js.map +1 -0
- package/dist/commands/apikeys.js +13 -0
- package/dist/commands/apikeys.js.map +1 -0
- package/dist/commands/applications.js +13 -0
- package/dist/commands/applications.js.map +1 -0
- package/dist/commands/apps/create.js +167 -0
- package/dist/commands/apps/create.js.map +1 -0
- package/dist/commands/apps/delete.js +74 -0
- package/dist/commands/apps/delete.js.map +1 -0
- package/dist/commands/apps/export.js +94 -0
- package/dist/commands/apps/export.js.map +1 -0
- package/dist/commands/apps/import.js +119 -0
- package/dist/commands/apps/import.js.map +1 -0
- package/dist/commands/apps/list.js +54 -0
- package/dist/commands/apps/list.js.map +1 -0
- package/dist/commands/apps/metadata.js +61 -0
- package/dist/commands/apps/metadata.js.map +1 -0
- package/dist/commands/apps/update.js +110 -0
- package/dist/commands/apps/update.js.map +1 -0
- package/dist/commands/databases/create.js +190 -0
- package/dist/commands/databases/create.js.map +1 -0
- package/dist/commands/databases/delete.js +74 -0
- package/dist/commands/databases/delete.js.map +1 -0
- package/dist/commands/databases/list.js +52 -0
- package/dist/commands/databases/list.js.map +1 -0
- package/dist/commands/databases.js +13 -0
- package/dist/commands/databases.js.map +1 -0
- package/dist/commands/datasets/attributes.js +48 -0
- package/dist/commands/datasets/attributes.js.map +1 -0
- package/dist/commands/datasets/create.js +180 -0
- package/dist/commands/datasets/create.js.map +1 -0
- package/dist/commands/datasets/delete.js +74 -0
- package/dist/commands/datasets/delete.js.map +1 -0
- package/dist/commands/datasets/export.js +95 -0
- package/dist/commands/datasets/export.js.map +1 -0
- package/dist/commands/datasets/list.js +52 -0
- package/dist/commands/datasets/list.js.map +1 -0
- package/dist/commands/datasets/metadata.js +59 -0
- package/dist/commands/datasets/metadata.js.map +1 -0
- package/dist/commands/datasets/query.js +86 -0
- package/dist/commands/datasets/query.js.map +1 -0
- package/dist/commands/datasets/update.js +166 -0
- package/dist/commands/datasets/update.js.map +1 -0
- package/dist/commands/datasets.js +13 -0
- package/dist/commands/datasets.js.map +1 -0
- package/dist/commands/job.js +13 -0
- package/dist/commands/job.js.map +1 -0
- package/dist/commands/jobs/delete.js +74 -0
- package/dist/commands/jobs/delete.js.map +1 -0
- package/dist/commands/jobs/list.js +52 -0
- package/dist/commands/jobs/list.js.map +1 -0
- package/dist/commands/jobs/metadata.js +36 -0
- package/dist/commands/jobs/metadata.js.map +1 -0
- package/dist/commands/new.js +63 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/styles/create.js +130 -0
- package/dist/commands/styles/create.js.map +1 -0
- package/dist/commands/styles/delete.js +74 -0
- package/dist/commands/styles/delete.js.map +1 -0
- package/dist/commands/styles/edit.js +37 -0
- package/dist/commands/styles/edit.js.map +1 -0
- package/dist/commands/styles/list.js +51 -0
- package/dist/commands/styles/list.js.map +1 -0
- package/dist/commands/styles/metadata.js +61 -0
- package/dist/commands/styles/metadata.js.map +1 -0
- package/dist/commands/styles/view.js +37 -0
- package/dist/commands/styles/view.js.map +1 -0
- package/dist/commands/styles.js +13 -0
- package/dist/commands/styles.js.map +1 -0
- package/dist/commands/tiles/create.js +221 -0
- package/dist/commands/tiles/create.js.map +1 -0
- package/dist/commands/tiles/delete.js +74 -0
- package/dist/commands/tiles/delete.js.map +1 -0
- package/dist/commands/tiles/list.js +51 -0
- package/dist/commands/tiles/list.js.map +1 -0
- package/dist/commands/tiles/metadata.js +61 -0
- package/dist/commands/tiles/metadata.js.map +1 -0
- package/dist/commands/tiles/preview.js +33 -0
- package/dist/commands/tiles/preview.js.map +1 -0
- package/dist/commands/tiles/tilespec.js +44 -0
- package/dist/commands/tiles/tilespec.js.map +1 -0
- package/dist/commands/tiles/update.js +194 -0
- package/dist/commands/tiles/update.js.map +1 -0
- package/dist/commands/tiles.js +13 -0
- package/dist/commands/tiles.js.map +1 -0
- package/dist/commands/upload/list.js +51 -0
- package/dist/commands/upload/list.js.map +1 -0
- package/dist/commands/upload/upload.js +171 -0
- package/dist/commands/upload/upload.js.map +1 -0
- package/dist/commands/upload.js +13 -0
- package/dist/commands/upload.js.map +1 -0
- package/dist/commands/users/create.js +140 -0
- package/dist/commands/users/create.js.map +1 -0
- package/dist/commands/users/delete.js +74 -0
- package/dist/commands/users/delete.js.map +1 -0
- package/dist/commands/users/list.js +52 -0
- package/dist/commands/users/list.js.map +1 -0
- package/dist/commands/users/metadata.js +61 -0
- package/dist/commands/users/metadata.js.map +1 -0
- package/dist/commands/users/update.js +151 -0
- package/dist/commands/users/update.js.map +1 -0
- package/dist/commands/users.js +13 -0
- package/dist/commands/users.js.map +1 -0
- package/dist/commands/version.js +35 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/create-app/create-app.js +147 -0
- package/dist/create-app/create-app.js.map +1 -0
- package/dist/create-app/download.js +52 -0
- package/dist/create-app/download.js.map +1 -0
- package/dist/create-app/starters.js +18 -0
- package/dist/create-app/starters.js.map +1 -0
- package/dist/create-app/unzip.js +89 -0
- package/dist/create-app/unzip.js.map +1 -0
- package/dist/create-app/utils.js +134 -0
- package/dist/create-app/utils.js.map +1 -0
- package/dist/create-app/version.js +9 -0
- package/dist/create-app/version.js.map +1 -0
- package/dist/index.js +71 -0
- package/dist/index.js.map +1 -0
- package/dist/style-server/app.js +119 -0
- package/dist/style-server/app.js.map +1 -0
- package/dist/style-server/index.js +97 -0
- package/dist/style-server/index.js.map +1 -0
- package/dist/utils/index.js +263 -0
- package/dist/utils/index.js.map +1 -0
- package/maputnik/app.8c54efadcc6633a431f7.js +64 -0
- package/maputnik/bundle-stats.html +53 -0
- package/maputnik/bundle-stats.json +93486 -0
- package/maputnik/favicon.ico +0 -0
- package/maputnik/fonts/Roboto-Medium.ttf +0 -0
- package/maputnik/fonts/Roboto-Regular.ttf +0 -0
- package/maputnik/index.html +131 -0
- package/maputnik/manifest.json +9 -0
- package/package.json +84 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright © 2018 Emu Analytics
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
+
if (mod && mod.__esModule) return mod;
|
|
23
|
+
var result = {};
|
|
24
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
+
__setModuleDefault(result, mod);
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
28
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
29
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
30
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
31
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
32
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
33
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
34
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.handler = exports.builder = exports.desc = exports.command = void 0;
|
|
39
|
+
const utils_1 = require("../../utils");
|
|
40
|
+
const inquirer = __importStar(require("inquirer"));
|
|
41
|
+
exports.command = ['delete <email>', 'rm', 'del'];
|
|
42
|
+
exports.desc = 'Delete a user';
|
|
43
|
+
const builder = (args) => {
|
|
44
|
+
return args
|
|
45
|
+
.option('yes', { alias: 'y', description: `Answer 'yes' to confirmation messages`, default: false })
|
|
46
|
+
.positional('email', { describe: 'Email (or unique prefix)', type: 'string' });
|
|
47
|
+
};
|
|
48
|
+
exports.builder = builder;
|
|
49
|
+
function handler({ client, email, yes }) {
|
|
50
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
try {
|
|
52
|
+
const resource = yield (0, utils_1.resolveResource)(email, client.auth.users, 'email');
|
|
53
|
+
let confirmed = yes;
|
|
54
|
+
if (!confirmed) {
|
|
55
|
+
const answers = yield inquirer.prompt({
|
|
56
|
+
name: 'confirmed',
|
|
57
|
+
type: 'confirm',
|
|
58
|
+
message: `Are you sure you want to delete '${resource.email}'`,
|
|
59
|
+
default: false
|
|
60
|
+
});
|
|
61
|
+
confirmed = answers.confirmed;
|
|
62
|
+
}
|
|
63
|
+
if (confirmed) {
|
|
64
|
+
yield client.auth.users.delete(resource.id);
|
|
65
|
+
(0, utils_1.logDetail)('Deleted');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
(0, utils_1.logError)(e);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
exports.handler = handler;
|
|
74
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/users/delete.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAwE;AAExE,mDAAqC;AAGxB,QAAA,OAAO,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAE1C,QAAA,IAAI,GAAG,eAAe,CAAC;AAE7B,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,EAAE;IAC1C,OAAO,IAAI;SACR,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,uCAAuC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SACnG,UAAU,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,0BAA0B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnF,CAAC,CAAC;AAJW,QAAA,OAAO,WAIlB;AAQF,SAAsB,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAU;;QAC1D,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAA,uBAAe,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAE1E,IAAI,SAAS,GAAG,GAAG,CAAC;YAEpB,IAAI,CAAC,SAAS,EAAE;gBACd,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;oBACpC,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,oCAAoC,QAAQ,CAAC,KAAK,GAAG;oBAC9D,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;gBACH,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;aAC/B;YAED,IAAI,SAAS,EAAE;gBACb,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC5C,IAAA,iBAAS,EAAC,SAAS,CAAC,CAAC;aACtB;SACF;QAAC,OAAO,CAAC,EAAE;YACV,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;SACb;IACH,CAAC;CAAA;AAvBD,0BAuBC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright © 2018 Emu Analytics
|
|
4
|
+
*/
|
|
5
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.handler = exports.builder = exports.desc = exports.command = void 0;
|
|
16
|
+
const utils_1 = require("../../utils");
|
|
17
|
+
exports.command = ['list [email]', 'ls', '$0'];
|
|
18
|
+
exports.desc = 'List users';
|
|
19
|
+
const builder = (args) => {
|
|
20
|
+
return args
|
|
21
|
+
.option('limit', { alias: 'n', type: 'number', describe: 'Limit to n results' })
|
|
22
|
+
.option('offset', { alias: ['o'], type: 'number', describe: 'Start list at offset n' })
|
|
23
|
+
.option('sort', { alias: ['s'], type: 'string', describe: 'Sort by attribute' })
|
|
24
|
+
.conflicts('email', ['limit', 'offset', 'sort'])
|
|
25
|
+
.positional('email', { describe: 'User email (or unique prefix)', type: 'string' });
|
|
26
|
+
};
|
|
27
|
+
exports.builder = builder;
|
|
28
|
+
function handler({ client, email, format, offset, limit, sort }) {
|
|
29
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
try {
|
|
31
|
+
if (email) {
|
|
32
|
+
const resource = yield (0, utils_1.resolveResource)(email, client.auth.users, 'email');
|
|
33
|
+
(0, utils_1.logObject)(resource, format);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
let results = yield client.auth.users.list({ offset, limit, sort });
|
|
37
|
+
if (format === 'table') {
|
|
38
|
+
results = results.map((u) => (Object.assign(Object.assign({}, u), { name: `${u.firstName} ${u.lastName}` })));
|
|
39
|
+
(0, utils_1.logObject)(results, 'table', ['id', 'email', 'name', 'emailVerified', 'enabled']);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
(0, utils_1.logObject)(results, format || 'json');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
(0, utils_1.logError)(e);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
exports.handler = handler;
|
|
52
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/users/list.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;AAEH,uCAAwE;AAI3D,QAAA,OAAO,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEvC,QAAA,IAAI,GAAG,YAAY,CAAC;AAE1B,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,EAAE;IAC1C,OAAO,IAAI;SACR,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC;SAC/E,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;SACtF,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;SAC/E,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;SAC/C,UAAU,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,+BAA+B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AACxF,CAAC,CAAC;AAPW,QAAA,OAAO,WAOlB;AAWF,SAAsB,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAU;;QAClF,IAAI;YACF,IAAI,KAAK,EAAE;gBACT,MAAM,QAAQ,GAAG,MAAM,IAAA,uBAAe,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC1E,IAAA,iBAAS,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;aAC7B;iBAAM;gBACL,IAAI,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpE,IAAI,MAAM,KAAK,OAAO,EAAE;oBACtB,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAQ,EAAE,EAAE,CAAC,iCAAM,CAAC,KAAE,IAAI,EAAE,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAG,CAAC,CAAC;oBACtF,IAAA,iBAAS,EAAC,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;iBAClF;qBAAM;oBACL,IAAA,iBAAS,EAAC,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC,CAAC;iBACtC;aACF;SACF;QAAC,OAAO,CAAC,EAAE;YACV,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;SACb;IACH,CAAC;CAAA;AAjBD,0BAiBC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright © 2018 Emu Analytics
|
|
4
|
+
*/
|
|
5
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.handler = exports.builder = exports.desc = exports.command = void 0;
|
|
16
|
+
const utils_1 = require("../../utils");
|
|
17
|
+
exports.command = ['metadata <email>', 'meta'];
|
|
18
|
+
exports.desc = 'Get/set resource metadata';
|
|
19
|
+
const builder = (args) => {
|
|
20
|
+
return args
|
|
21
|
+
.positional('email', { describe: 'User email (or unique prefix)', type: 'string' })
|
|
22
|
+
.option('set', {
|
|
23
|
+
type: 'array',
|
|
24
|
+
describe: 'One or more key/values to set in form <key>=<value>. Use <key>= to delete a key.'
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
exports.builder = builder;
|
|
28
|
+
function handler({ client, email, set }) {
|
|
29
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
try {
|
|
31
|
+
if (!set) {
|
|
32
|
+
// Get metadata
|
|
33
|
+
const resource = yield (0, utils_1.resolveResource)(email, client.auth.users, 'email');
|
|
34
|
+
(0, utils_1.logObject)(resource.metadata, 'json');
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// Set metadata
|
|
38
|
+
let resource = yield (0, utils_1.resolveResource)(email, client.auth.users, 'email');
|
|
39
|
+
// Update metadata
|
|
40
|
+
const keyValues = (0, utils_1.getMetadataKeyValues)(set);
|
|
41
|
+
for (const key of Object.keys(keyValues)) {
|
|
42
|
+
const value = keyValues[key];
|
|
43
|
+
if (value === '') {
|
|
44
|
+
yield client.auth.users.deleteMetadata(resource.id, key);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
yield client.auth.users.setMetadata(resource.id, key, value);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Reload
|
|
51
|
+
resource = yield (0, utils_1.resolveResource)(email, client.auth.users, 'email');
|
|
52
|
+
(0, utils_1.logObject)(resource.metadata, 'json');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
(0, utils_1.logError)(e);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
exports.handler = handler;
|
|
61
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/commands/users/metadata.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;AAEH,uCAAyF;AAI5E,QAAA,OAAO,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAEvC,QAAA,IAAI,GAAG,2BAA2B,CAAC;AAEzC,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,EAAE;IAC1C,OAAO,IAAI;SACR,UAAU,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,+BAA+B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;SAClF,MAAM,CAAC,KAAK,EAAE;QACb,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,kFAAkF;KAC7F,CAAC,CAAC;AACP,CAAC,CAAC;AAPW,QAAA,OAAO,WAOlB;AASF,SAAsB,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAU;;QAC1D,IAAI;YACF,IAAI,CAAC,GAAG,EAAE;gBACR,eAAe;gBACf,MAAM,QAAQ,GAAG,MAAM,IAAA,uBAAe,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC1E,IAAA,iBAAS,EAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;aACtC;iBAAM;gBACL,eAAe;gBACf,IAAI,QAAQ,GAAG,MAAM,IAAA,uBAAe,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAExE,kBAAkB;gBAClB,MAAM,SAAS,GAAG,IAAA,4BAAoB,EAAC,GAAG,CAAC,CAAC;gBAC5C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;oBACxC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;oBAC7B,IAAI,KAAK,KAAK,EAAE,EAAE;wBAChB,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;qBAC1D;yBAAM;wBACL,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;qBAC9D;iBACF;gBAED,SAAS;gBACT,QAAQ,GAAG,MAAM,IAAA,uBAAe,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAEpE,IAAA,iBAAS,EAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;aACtC;SACF;QAAC,OAAO,CAAC,EAAE;YACV,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;SACb;IACH,CAAC;CAAA;AA7BD,0BA6BC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright © 2018 Emu Analytics
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
+
if (mod && mod.__esModule) return mod;
|
|
23
|
+
var result = {};
|
|
24
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
+
__setModuleDefault(result, mod);
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
28
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
29
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
30
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
31
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
32
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
33
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
34
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.handler = exports.builder = exports.desc = exports.command = void 0;
|
|
39
|
+
const utils_1 = require("../../utils");
|
|
40
|
+
const inquirer = __importStar(require("inquirer"));
|
|
41
|
+
const uuid_1 = require("uuid");
|
|
42
|
+
exports.command = ['update <email>'];
|
|
43
|
+
exports.desc = 'Update a user';
|
|
44
|
+
const builder = (args) => {
|
|
45
|
+
return args
|
|
46
|
+
.option('firstName', { description: 'First name', type: 'string' })
|
|
47
|
+
.option('lastName', { description: 'Last name', type: 'string' })
|
|
48
|
+
.option('roles', { alias: 'r', description: 'Roles (comma-separated)', type: 'array' })
|
|
49
|
+
.option('emailVerified', { description: 'Email verified', type: 'boolean' })
|
|
50
|
+
.option('enabled', { alias: 'e', description: 'Login enabled', type: 'boolean' })
|
|
51
|
+
.option('interactive', {
|
|
52
|
+
alias: 'i',
|
|
53
|
+
describe: 'Show interactive prompts',
|
|
54
|
+
type: 'boolean',
|
|
55
|
+
default: 'true'
|
|
56
|
+
})
|
|
57
|
+
.positional('email', { describe: 'Email (or unique prefix)', type: 'string' });
|
|
58
|
+
};
|
|
59
|
+
exports.builder = builder;
|
|
60
|
+
function handler(params) {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
const client = params.client;
|
|
63
|
+
const email = params.email;
|
|
64
|
+
try {
|
|
65
|
+
const user = yield (0, utils_1.resolveResource)(email, client.auth.users, 'email');
|
|
66
|
+
if (params.interactive) {
|
|
67
|
+
const answers = yield inquirer.prompt([
|
|
68
|
+
{
|
|
69
|
+
type: 'input',
|
|
70
|
+
name: 'firstName',
|
|
71
|
+
message: 'First name',
|
|
72
|
+
default: params.firstName || user.firstName
|
|
73
|
+
},
|
|
74
|
+
{ type: 'input', name: 'lastName', message: 'Last name', default: params.lastName || user.lastName },
|
|
75
|
+
{
|
|
76
|
+
type: 'input',
|
|
77
|
+
name: 'roles',
|
|
78
|
+
message: 'Roles (comma separated)',
|
|
79
|
+
default: (params.roles || user.roles).join(', ')
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: 'confirm',
|
|
83
|
+
name: 'emailVerified',
|
|
84
|
+
message: 'Verified?',
|
|
85
|
+
default: params.hasOwnProperty('emailVerified') ? params.emailVerified : user.emailVerified
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
type: 'confirm',
|
|
89
|
+
name: 'enabled',
|
|
90
|
+
message: 'Enabled?',
|
|
91
|
+
default: params.hasOwnProperty('enabled') ? params.enabled : user.enabled
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'confirm',
|
|
95
|
+
name: 'changePassword',
|
|
96
|
+
message: 'Change password?',
|
|
97
|
+
default: false
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
type: 'password',
|
|
101
|
+
name: 'password',
|
|
102
|
+
message: 'New password',
|
|
103
|
+
when: ({ changePassword }) => changePassword
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
type: 'password',
|
|
107
|
+
name: 'confirmPassword',
|
|
108
|
+
message: 'Confirm password',
|
|
109
|
+
when: ({ changePassword }) => changePassword
|
|
110
|
+
}
|
|
111
|
+
]);
|
|
112
|
+
if (answers.changePassword) {
|
|
113
|
+
if (answers.password !== answers.confirmPassword) {
|
|
114
|
+
throw new Error('Passwords do not match');
|
|
115
|
+
}
|
|
116
|
+
params.password = answers.password;
|
|
117
|
+
}
|
|
118
|
+
params.firstName = answers.firstName;
|
|
119
|
+
params.lastName = answers.lastName;
|
|
120
|
+
params.roles = answers.roles.split(',').map((r) => r.trim());
|
|
121
|
+
params.emailVerified = answers.emailVerified;
|
|
122
|
+
params.enabled = answers.enabled;
|
|
123
|
+
}
|
|
124
|
+
if (params.password) {
|
|
125
|
+
const passwordResetToken = (0, uuid_1.v4)();
|
|
126
|
+
yield client.auth.users.update(user.id, {
|
|
127
|
+
passwordResetToken
|
|
128
|
+
});
|
|
129
|
+
yield client.auth.resetPassword(user.email, params.password, user.applicationId, passwordResetToken);
|
|
130
|
+
}
|
|
131
|
+
const updatedUser = yield client.auth.users.update(user.id, {
|
|
132
|
+
firstName: params.firstName,
|
|
133
|
+
lastName: params.lastName,
|
|
134
|
+
roles: params.roles,
|
|
135
|
+
emailVerified: params.emailVerified,
|
|
136
|
+
enabled: params.enabled
|
|
137
|
+
});
|
|
138
|
+
if (params.format === 'table') {
|
|
139
|
+
(0, utils_1.logObject)(updatedUser, 'table');
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
(0, utils_1.logObject)(updatedUser, 'json');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
(0, utils_1.logError)(e);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
exports.handler = handler;
|
|
151
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/users/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright © 2018 Emu Analytics
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.builder = exports.desc = exports.command = void 0;
|
|
7
|
+
exports.command = 'users <command>';
|
|
8
|
+
exports.desc = 'User commands';
|
|
9
|
+
const builder = (args) => {
|
|
10
|
+
return args.commandDir('users').demandCommand(1);
|
|
11
|
+
};
|
|
12
|
+
exports.builder = builder;
|
|
13
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/commands/users.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAIU,QAAA,OAAO,GAAG,iBAAiB,CAAC;AAE5B,QAAA,IAAI,GAAG,eAAe,CAAC;AAE7B,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,EAAE;IAC1C,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC;AAFW,QAAA,OAAO,WAElB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright © 2018 Emu Analytics
|
|
4
|
+
*/
|
|
5
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.handler = exports.desc = void 0;
|
|
16
|
+
const utils_1 = require("../utils");
|
|
17
|
+
const pkg = require('../../package.json');
|
|
18
|
+
exports.desc = `Display Flo.w Engine version information`;
|
|
19
|
+
const handler = ({ host, apiKey, client, format }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
|
+
try {
|
|
21
|
+
const config = yield client.config();
|
|
22
|
+
const versionInfo = {
|
|
23
|
+
'CLI version': pkg.version,
|
|
24
|
+
'Flo.w version': config.version.tag,
|
|
25
|
+
'Flo.w host': host,
|
|
26
|
+
'API key': apiKey
|
|
27
|
+
};
|
|
28
|
+
(0, utils_1.logObject)(versionInfo, format);
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
(0, utils_1.logError)(e.message);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
exports.handler = handler;
|
|
35
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;AAIH,oCAAwD;AACxD,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAE7B,QAAA,IAAI,GAAG,0CAA0C,CAAC;AASxD,MAAM,OAAO,GAAG,CAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAU,EAAE,EAAE;IACxE,IAAI;QACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG;YAClB,aAAa,EAAE,GAAG,CAAC,OAAO;YAC1B,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG;YACnC,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,MAAM;SAClB,CAAC;QACF,IAAA,iBAAS,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;KAChC;IAAC,OAAO,CAAC,EAAE;QACV,IAAA,gBAAQ,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC;KACrB;AACH,CAAC,CAAA,CAAC;AAbW,QAAA,OAAO,WAalB"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.prepareStarter = exports.createApp = void 0;
|
|
39
|
+
const cli_spinner_1 = require("cli-spinner");
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path_1 = require("path");
|
|
42
|
+
const c = __importStar(require("colorette"));
|
|
43
|
+
const download_1 = require("./download");
|
|
44
|
+
const unzip_1 = require("./unzip");
|
|
45
|
+
const utils_1 = require("./utils");
|
|
46
|
+
const replace_in_file_1 = __importDefault(require("replace-in-file"));
|
|
47
|
+
const utils_2 = require("../utils");
|
|
48
|
+
const starterCache = new Map();
|
|
49
|
+
function createApp(starter, projectName, autoRun) {
|
|
50
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
if (fs.existsSync(projectName)) {
|
|
52
|
+
throw new Error(`Folder "./${projectName}" already exists, please choose a different project name.`);
|
|
53
|
+
}
|
|
54
|
+
projectName = projectName.toLowerCase().trim();
|
|
55
|
+
if (!validateProjectName(projectName)) {
|
|
56
|
+
throw new Error(`Project name "${projectName}" is not valid. It must be a kebab-case name without spaces.`);
|
|
57
|
+
}
|
|
58
|
+
const loading = new cli_spinner_1.Spinner(c.bold('Preparing starter'));
|
|
59
|
+
loading.setSpinnerString(18);
|
|
60
|
+
loading.start();
|
|
61
|
+
const startT = Date.now();
|
|
62
|
+
try {
|
|
63
|
+
const moveTo = yield prepareStarter(starter);
|
|
64
|
+
if (!moveTo) {
|
|
65
|
+
throw new Error('starter install failed');
|
|
66
|
+
}
|
|
67
|
+
yield moveTo(projectName);
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
loading.stop(true);
|
|
71
|
+
}
|
|
72
|
+
const time = (0, utils_1.printDuration)(Date.now() - startT);
|
|
73
|
+
(0, utils_2.log)(`${c.green('✔')} ${c.bold('All setup')} ${(0, utils_1.onlyUnix)('🎉')} ${c.dim(time)}
|
|
74
|
+
|
|
75
|
+
${c.dim((0, utils_1.terminalPrompt)())} ${c.green('npm start')}
|
|
76
|
+
Starts the development server.
|
|
77
|
+
|
|
78
|
+
${c.dim((0, utils_1.terminalPrompt)())} ${c.green('npm run build')}
|
|
79
|
+
Builds your app in production mode.
|
|
80
|
+
|
|
81
|
+
${c.dim((0, utils_1.terminalPrompt)())} ${c.green('npm test')}
|
|
82
|
+
Starts the test runner.
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
${c.dim('We suggest that you begin by typing:')}
|
|
86
|
+
|
|
87
|
+
${c.dim((0, utils_1.terminalPrompt)())} ${c.green('cd')} ${projectName}
|
|
88
|
+
${c.dim((0, utils_1.terminalPrompt)())} ${c.green('npm start')}
|
|
89
|
+
${renderDocs(starter)}
|
|
90
|
+
|
|
91
|
+
Happy coding! 🎈
|
|
92
|
+
`);
|
|
93
|
+
if (autoRun) {
|
|
94
|
+
yield (0, utils_1.npm)('start', projectName, 'inherit');
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
exports.createApp = createApp;
|
|
99
|
+
function renderDocs(starter) {
|
|
100
|
+
const docs = starter.docs;
|
|
101
|
+
if (!docs) {
|
|
102
|
+
return '';
|
|
103
|
+
}
|
|
104
|
+
return `
|
|
105
|
+
${c.dim('Further reading:')}
|
|
106
|
+
|
|
107
|
+
${c.dim('-')} ${c.cyan(docs)}`;
|
|
108
|
+
}
|
|
109
|
+
function prepareStarter(starter) {
|
|
110
|
+
let promise = starterCache.get(starter);
|
|
111
|
+
if (!promise) {
|
|
112
|
+
promise = prepare(starter);
|
|
113
|
+
// silent crash, we will handle later
|
|
114
|
+
promise.catch(e => {
|
|
115
|
+
(0, utils_2.logError)(e);
|
|
116
|
+
return;
|
|
117
|
+
});
|
|
118
|
+
starterCache.set(starter, promise);
|
|
119
|
+
}
|
|
120
|
+
return promise;
|
|
121
|
+
}
|
|
122
|
+
exports.prepareStarter = prepareStarter;
|
|
123
|
+
function prepare(starter) {
|
|
124
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
const baseDir = process.cwd();
|
|
126
|
+
const tmpPath = (0, path_1.join)(baseDir, '.tmp-flow-starter');
|
|
127
|
+
const buffer = yield (0, download_1.downloadStarter)(starter);
|
|
128
|
+
(0, utils_1.setTmpDirectory)(tmpPath);
|
|
129
|
+
yield (0, unzip_1.unZipBuffer)(buffer, tmpPath);
|
|
130
|
+
yield (0, utils_1.npm)('install', tmpPath);
|
|
131
|
+
return (projectName) => __awaiter(this, void 0, void 0, function* () {
|
|
132
|
+
const filePath = (0, path_1.join)(baseDir, projectName);
|
|
133
|
+
yield (0, utils_1.renameAsync)(tmpPath, filePath);
|
|
134
|
+
yield (0, replace_in_file_1.default)({
|
|
135
|
+
files: [(0, path_1.join)(filePath, '*'), (0, path_1.join)(filePath, 'config/**'), (0, path_1.join)(filePath, 'src/**')],
|
|
136
|
+
from: /flow-starter-project-name/g,
|
|
137
|
+
to: projectName,
|
|
138
|
+
allowEmptyPaths: true
|
|
139
|
+
});
|
|
140
|
+
(0, utils_1.setTmpDirectory)(null);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
function validateProjectName(projectName) {
|
|
145
|
+
return !/[^a-zA-Z0-9-]/.test(projectName);
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=create-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-app.js","sourceRoot":"","sources":["../../src/create-app/create-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.downloadStarter = exports.STARTER_BASE_URL = void 0;
|
|
27
|
+
const https_1 = require("https");
|
|
28
|
+
const Url = __importStar(require("url"));
|
|
29
|
+
exports.STARTER_BASE_URL = 'https://s3.eu-west-2.amazonaws.com/emu-flo.w/starters';
|
|
30
|
+
function downloadStarter(starter) {
|
|
31
|
+
return downloadFromURL(`${exports.STARTER_BASE_URL}/${starter.repo}`);
|
|
32
|
+
}
|
|
33
|
+
exports.downloadStarter = downloadStarter;
|
|
34
|
+
function downloadFromURL(url) {
|
|
35
|
+
const options = Url.parse(url);
|
|
36
|
+
return new Promise((resolve, reject) => {
|
|
37
|
+
(0, https_1.get)(options, res => {
|
|
38
|
+
if (res.statusCode === 302) {
|
|
39
|
+
downloadFromURL(res.headers.location).then(resolve, reject);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
const data = [];
|
|
43
|
+
res.on('data', chunk => data.push(chunk));
|
|
44
|
+
res.on('end', () => {
|
|
45
|
+
resolve(Buffer.concat(data));
|
|
46
|
+
});
|
|
47
|
+
res.on('error', reject);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/create-app/download.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAA4B;AAC5B,yCAA2B;AAGd,QAAA,gBAAgB,GAAG,uDAAuD,CAAC;AAExF,SAAgB,eAAe,CAAC,OAAgB;IAC9C,OAAO,eAAe,CAAC,GAAG,wBAAgB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAFD,0CAEC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAA,WAAG,EAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YACjB,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE;gBAC1B,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aAC9D;iBAAM;gBACL,MAAM,IAAI,GAAU,EAAE,CAAC;gBAEvB,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBACjB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aACzB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|