@magek/cli 0.0.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/bin/run +5 -0
- package/bin/run.cmd +3 -0
- package/dist/commands/add/projection.js +51 -0
- package/dist/commands/add/reducer.js +52 -0
- package/dist/commands/build.js +35 -0
- package/dist/commands/clean.js +35 -0
- package/dist/commands/deploy.js +47 -0
- package/dist/commands/new/command.js +71 -0
- package/dist/commands/new/entity.js +84 -0
- package/dist/commands/new/event-handler.js +73 -0
- package/dist/commands/new/event.js +65 -0
- package/dist/commands/new/query.js +71 -0
- package/dist/commands/new/read-model.js +85 -0
- package/dist/commands/new/scheduled-command.js +60 -0
- package/dist/commands/new/type.js +53 -0
- package/dist/commands/nuke.js +63 -0
- package/dist/commands/start.js +52 -0
- package/dist/commands/stub/publish.js +44 -0
- package/dist/commands/synth.js +45 -0
- package/dist/common/base-command.js +18 -0
- package/dist/common/brand.js +38 -0
- package/dist/common/errors.js +24 -0
- package/dist/common/filenames.js +45 -0
- package/dist/common/provider.js +2 -0
- package/dist/common/sandbox.js +45 -0
- package/dist/common/script.js +102 -0
- package/dist/hooks/command_not_found/custom-parse.js +40 -0
- package/dist/index.js +4 -0
- package/dist/services/config-service.js +76 -0
- package/dist/services/environment.js +22 -0
- package/dist/services/file-system/index.js +12 -0
- package/dist/services/file-system/live.impl.js +26 -0
- package/dist/services/generator/target/index.js +5 -0
- package/dist/services/generator/target/parsing.js +64 -0
- package/dist/services/generator/target/types.js +2 -0
- package/dist/services/generator.js +40 -0
- package/dist/services/logger.js +23 -0
- package/dist/services/method-generator.js +81 -0
- package/dist/services/package-manager/common.js +74 -0
- package/dist/services/package-manager/index.js +21 -0
- package/dist/services/package-manager/live.impl.js +35 -0
- package/dist/services/package-manager/npm.impl.js +8 -0
- package/dist/services/package-manager/pnpm.impl.js +8 -0
- package/dist/services/package-manager/rush.impl.js +50 -0
- package/dist/services/package-manager/yarn.impl.js +8 -0
- package/dist/services/process/index.js +12 -0
- package/dist/services/process/live.impl.js +30 -0
- package/dist/services/project-checker.js +152 -0
- package/dist/services/provider-service.js +53 -0
- package/dist/services/semver.js +29 -0
- package/dist/services/stub-publisher.js +42 -0
- package/dist/services/user-prompt.js +31 -0
- package/dist/templates/command.stub +17 -0
- package/dist/templates/entity.stub +22 -0
- package/dist/templates/event-handler.stub +8 -0
- package/dist/templates/event.stub +16 -0
- package/dist/templates/query.stub +17 -0
- package/dist/templates/read-model.stub +24 -0
- package/dist/templates/scheduled-command.stub +13 -0
- package/dist/templates/type.stub +7 -0
- package/package.json +91 -0
package/bin/run
ADDED
package/bin/run.cmd
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const base_command_js_1 = tslib_1.__importDefault(require("../../common/base-command.js"));
|
|
6
|
+
const index_js_1 = require("../../services/generator/target/index.js");
|
|
7
|
+
const script_js_1 = require("../../common/script.js");
|
|
8
|
+
const brand_js_1 = tslib_1.__importDefault(require("../../common/brand.js"));
|
|
9
|
+
const project_checker_js_1 = require("../../services/project-checker.js");
|
|
10
|
+
const method_generator_js_1 = require("../../services/method-generator.js");
|
|
11
|
+
class Projection extends base_command_js_1.default {
|
|
12
|
+
async run() {
|
|
13
|
+
const { flags } = await this.parse(Projection);
|
|
14
|
+
const readModel = flags['read-model'];
|
|
15
|
+
const entity = flags.entity;
|
|
16
|
+
return run(readModel, entity);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
Projection.description = 'add new projection to read model';
|
|
20
|
+
Projection.usage = 'projection --read-model ReadModel --entity Entity:id';
|
|
21
|
+
Projection.examples = [
|
|
22
|
+
'$ magek add:projection --read-model PostReadModel --entity Post:id',
|
|
23
|
+
'$ magek add:projection --read-model CommentReadModel --entity Comment:id',
|
|
24
|
+
];
|
|
25
|
+
Projection.flags = {
|
|
26
|
+
help: core_1.Flags.help({ char: 'h' }),
|
|
27
|
+
'read-model': core_1.Flags.string({
|
|
28
|
+
description: 'read-model name',
|
|
29
|
+
required: true,
|
|
30
|
+
multiple: false,
|
|
31
|
+
dependsOn: ['entity'],
|
|
32
|
+
}),
|
|
33
|
+
entity: core_1.Flags.string({
|
|
34
|
+
description: 'an entity name',
|
|
35
|
+
required: true,
|
|
36
|
+
multiple: false,
|
|
37
|
+
dependsOn: ['read-model'],
|
|
38
|
+
}),
|
|
39
|
+
};
|
|
40
|
+
exports.default = Projection;
|
|
41
|
+
const run = async (rawReadModel, rawProjection) => script_js_1.Script.init(`magek ${brand_js_1.default.energize('add:projection')} 🚧`, (0, index_js_1.joinParsers)((0, index_js_1.parseName)(rawReadModel), (0, index_js_1.parseProjectionField)(rawProjection)))
|
|
42
|
+
.step('Verifying project', project_checker_js_1.checkCurrentDirIsAMagekProject)
|
|
43
|
+
.step('Generating projection', generateProjectionMethod)
|
|
44
|
+
.info('Projection generated!')
|
|
45
|
+
.done();
|
|
46
|
+
async function generateProjectionMethod(info) {
|
|
47
|
+
const readModelSourceFile = (0, method_generator_js_1.getResourceSourceFile)(info.name);
|
|
48
|
+
const readModelClass = readModelSourceFile.getClassOrThrow(info.name);
|
|
49
|
+
readModelClass.addMethod((0, method_generator_js_1.generateProjection)(info.name, info.projection));
|
|
50
|
+
return await readModelSourceFile.fixMissingImports().save();
|
|
51
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const base_command_js_1 = tslib_1.__importDefault(require("../../common/base-command.js"));
|
|
6
|
+
const index_js_1 = require("../../services/generator/target/index.js");
|
|
7
|
+
const script_js_1 = require("../../common/script.js");
|
|
8
|
+
const brand_js_1 = tslib_1.__importDefault(require("../../common/brand.js"));
|
|
9
|
+
const project_checker_js_1 = require("../../services/project-checker.js");
|
|
10
|
+
const method_generator_js_1 = require("../../services/method-generator.js");
|
|
11
|
+
class Reducer extends base_command_js_1.default {
|
|
12
|
+
async run() {
|
|
13
|
+
const { flags } = await this.parse(Reducer);
|
|
14
|
+
const entity = flags.entity;
|
|
15
|
+
const events = flags.event;
|
|
16
|
+
return run(entity, events);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
Reducer.description = 'add new reducer to entity';
|
|
20
|
+
Reducer.usage = 'reducer --entity Entity --event Event';
|
|
21
|
+
Reducer.examples = [
|
|
22
|
+
'$ magek add:reducer --entity Post --event PostCreated',
|
|
23
|
+
'$ magek add:reducer --entity Comment --event CommentUpdated CommentVoted',
|
|
24
|
+
];
|
|
25
|
+
Reducer.flags = {
|
|
26
|
+
help: core_1.Flags.help({ char: 'h' }),
|
|
27
|
+
entity: core_1.Flags.string({
|
|
28
|
+
description: 'an entity name',
|
|
29
|
+
required: true,
|
|
30
|
+
multiple: false,
|
|
31
|
+
dependsOn: ['event'],
|
|
32
|
+
}),
|
|
33
|
+
event: core_1.Flags.string({
|
|
34
|
+
description: 'an event name',
|
|
35
|
+
required: true,
|
|
36
|
+
multiple: true,
|
|
37
|
+
dependsOn: ['entity'],
|
|
38
|
+
}),
|
|
39
|
+
};
|
|
40
|
+
exports.default = Reducer;
|
|
41
|
+
const pluralize = (word, count) => (count === 1 ? word : `${word}s`);
|
|
42
|
+
const run = async (rawEntity, rawEvents) => script_js_1.Script.init(`magek ${brand_js_1.default.energize('add:reducer')} 🚧`, (0, index_js_1.joinParsers)((0, index_js_1.parseName)(rawEntity), (0, index_js_1.parseReaction)(rawEvents)))
|
|
43
|
+
.step('Verifying project', project_checker_js_1.checkCurrentDirIsAMagekProject)
|
|
44
|
+
.step(`Generating ${pluralize('reducer', rawEvents.length)}`, generateReducerMethods)
|
|
45
|
+
.info(`${pluralize('Reducer', rawEvents.length)} generated!`)
|
|
46
|
+
.done();
|
|
47
|
+
async function generateReducerMethods(info) {
|
|
48
|
+
const entitySourceFile = (0, method_generator_js_1.getResourceSourceFile)(info.name);
|
|
49
|
+
const entityClass = entitySourceFile.getClassOrThrow(info.name);
|
|
50
|
+
entityClass.addMethods((0, method_generator_js_1.generateReducers)(info.name, info.events));
|
|
51
|
+
return await entitySourceFile.fixMissingImports().save();
|
|
52
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const base_command_js_1 = tslib_1.__importDefault(require("../common/base-command.js"));
|
|
6
|
+
const config_service_js_1 = require("../services/config-service.js");
|
|
7
|
+
const project_checker_js_1 = require("../services/project-checker.js");
|
|
8
|
+
const script_js_1 = require("../common/script.js");
|
|
9
|
+
const brand_js_1 = tslib_1.__importDefault(require("../common/brand.js"));
|
|
10
|
+
const runTasks = async (compileAndLoad) => script_js_1.Script.init(`magek ${brand_js_1.default.dangerize('build')} 🚀`, Promise.resolve(process.cwd()))
|
|
11
|
+
.step('Checking project structure', project_checker_js_1.checkCurrentDirIsAMagekProject)
|
|
12
|
+
.step('Building project', compileAndLoad)
|
|
13
|
+
.info('Build complete!')
|
|
14
|
+
.done();
|
|
15
|
+
class Build extends base_command_js_1.default {
|
|
16
|
+
async run() {
|
|
17
|
+
await runTasks((ctx) => (0, config_service_js_1.compileProject)(process.cwd()));
|
|
18
|
+
}
|
|
19
|
+
async catch(fullError) {
|
|
20
|
+
const { flags: { verbose }, } = await this.parse(Build);
|
|
21
|
+
if (verbose) {
|
|
22
|
+
console.error(fullError.message);
|
|
23
|
+
}
|
|
24
|
+
return super.catch(fullError);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
Build.description = 'Build the current application as configured in your `index.ts` file.';
|
|
28
|
+
Build.flags = {
|
|
29
|
+
help: core_1.Flags.help({ char: 'h' }),
|
|
30
|
+
verbose: core_1.Flags.boolean({
|
|
31
|
+
description: 'display full error messages',
|
|
32
|
+
default: false,
|
|
33
|
+
}),
|
|
34
|
+
};
|
|
35
|
+
exports.default = Build;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const base_command_js_1 = tslib_1.__importDefault(require("../common/base-command.js"));
|
|
6
|
+
const config_service_js_1 = require("../services/config-service.js");
|
|
7
|
+
const project_checker_js_1 = require("../services/project-checker.js");
|
|
8
|
+
const script_js_1 = require("../common/script.js");
|
|
9
|
+
const brand_js_1 = tslib_1.__importDefault(require("../common/brand.js"));
|
|
10
|
+
const runTasks = async (clean) => script_js_1.Script.init(`magek ${brand_js_1.default.dangerize('clean')} 🚀`, Promise.resolve(process.cwd()))
|
|
11
|
+
.step('Checking project structure', project_checker_js_1.checkCurrentDirIsAMagekProject)
|
|
12
|
+
.step('Cleaning project', clean)
|
|
13
|
+
.info('Clean complete!')
|
|
14
|
+
.done();
|
|
15
|
+
class Clean extends base_command_js_1.default {
|
|
16
|
+
async run() {
|
|
17
|
+
await runTasks((ctx) => (0, config_service_js_1.cleanProject)(process.cwd()));
|
|
18
|
+
}
|
|
19
|
+
async catch(fullError) {
|
|
20
|
+
const { flags: { verbose }, } = await this.parse(Clean);
|
|
21
|
+
if (verbose) {
|
|
22
|
+
console.error(fullError.message);
|
|
23
|
+
}
|
|
24
|
+
return super.catch(fullError);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
Clean.description = 'Clean the current application as configured in your `index.ts` file.';
|
|
28
|
+
Clean.flags = {
|
|
29
|
+
help: core_1.Flags.help({ char: 'h' }),
|
|
30
|
+
verbose: core_1.Flags.boolean({
|
|
31
|
+
description: 'display full error messages',
|
|
32
|
+
default: false,
|
|
33
|
+
}),
|
|
34
|
+
};
|
|
35
|
+
exports.default = Clean;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runTasks = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const base_command_js_1 = tslib_1.__importDefault(require("../common/base-command.js"));
|
|
7
|
+
const provider_service_js_1 = require("../services/provider-service.js");
|
|
8
|
+
const config_service_js_1 = require("../services/config-service.js");
|
|
9
|
+
const script_js_1 = require("../common/script.js");
|
|
10
|
+
const brand_js_1 = tslib_1.__importDefault(require("../common/brand.js"));
|
|
11
|
+
const logger_js_1 = require("../services/logger.js");
|
|
12
|
+
const environment_js_1 = require("../services/environment.js");
|
|
13
|
+
const runTasks = async (compileAndLoad, deployer) => script_js_1.Script.init(`boost ${brand_js_1.default.dangerize('deploy')} [${(0, environment_js_1.currentEnvironment)()}] 🚀`, compileAndLoad)
|
|
14
|
+
.step('Deploying', (config) => deployer(config))
|
|
15
|
+
.step('Cleaning up deployment files', config_service_js_1.cleanDeploymentSandbox)
|
|
16
|
+
.info('Deployment complete!')
|
|
17
|
+
.done();
|
|
18
|
+
exports.runTasks = runTasks;
|
|
19
|
+
class Deploy extends base_command_js_1.default {
|
|
20
|
+
async run() {
|
|
21
|
+
const { flags } = await this.parse(Deploy);
|
|
22
|
+
if ((0, environment_js_1.initializeEnvironment)(logger_js_1.logger, flags.environment)) {
|
|
23
|
+
const deploymentProjectPath = await (0, config_service_js_1.createDeploymentSandbox)();
|
|
24
|
+
await (0, exports.runTasks)((0, config_service_js_1.compileProjectAndLoadConfig)(deploymentProjectPath), provider_service_js_1.deployToCloudProvider);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async catch(fullError) {
|
|
28
|
+
const { flags: { verbose }, } = await this.parse(Deploy);
|
|
29
|
+
if (verbose) {
|
|
30
|
+
console.error(fullError.message);
|
|
31
|
+
}
|
|
32
|
+
return super.catch(fullError);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
Deploy.description = 'Deploy the current application as configured in your `index.ts` file.';
|
|
36
|
+
Deploy.flags = {
|
|
37
|
+
help: core_1.Flags.help({ char: 'h' }),
|
|
38
|
+
environment: core_1.Flags.string({
|
|
39
|
+
char: 'e',
|
|
40
|
+
description: 'environment configuration to run',
|
|
41
|
+
}),
|
|
42
|
+
verbose: core_1.Flags.boolean({
|
|
43
|
+
description: 'display full error messages',
|
|
44
|
+
default: false,
|
|
45
|
+
}),
|
|
46
|
+
};
|
|
47
|
+
exports.default = Deploy;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const base_command_js_1 = tslib_1.__importDefault(require("../../common/base-command.js"));
|
|
6
|
+
const script_js_1 = require("../../common/script.js");
|
|
7
|
+
const brand_js_1 = tslib_1.__importDefault(require("../../common/brand.js"));
|
|
8
|
+
const generator_js_1 = require("../../services/generator.js");
|
|
9
|
+
const index_js_1 = require("../../services/generator/target/index.js");
|
|
10
|
+
const path = tslib_1.__importStar(require("path"));
|
|
11
|
+
const project_checker_js_1 = require("../../services/project-checker.js");
|
|
12
|
+
class Command extends base_command_js_1.default {
|
|
13
|
+
async run() {
|
|
14
|
+
const { args, flags } = await this.parse(Command);
|
|
15
|
+
try {
|
|
16
|
+
const fields = flags.fields || [];
|
|
17
|
+
if (!args.commandName)
|
|
18
|
+
throw "You haven't provided a command name, but it is required, run with --help for usage";
|
|
19
|
+
return run(args.commandName, fields);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
console.error(error);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
Command.description = "Generate new resource, write 'magek new' to see options";
|
|
27
|
+
Command.flags = {
|
|
28
|
+
help: core_1.Flags.help({ char: 'h' }),
|
|
29
|
+
fields: core_1.Flags.string({
|
|
30
|
+
char: 'f',
|
|
31
|
+
description: 'Field that this command will contain',
|
|
32
|
+
multiple: true,
|
|
33
|
+
}),
|
|
34
|
+
};
|
|
35
|
+
Command.args = {
|
|
36
|
+
commandName: core_1.Args.string(),
|
|
37
|
+
};
|
|
38
|
+
exports.default = Command;
|
|
39
|
+
const run = async (name, rawFields) => script_js_1.Script.init(`magek ${brand_js_1.default.energize('new:command')} 🚧`, (0, index_js_1.joinParsers)((0, index_js_1.parseName)(name), (0, index_js_1.parseFields)(rawFields)))
|
|
40
|
+
.step('Verifying project', project_checker_js_1.checkCurrentDirIsAMagekProject)
|
|
41
|
+
.step('Creating new command', generateCommand)
|
|
42
|
+
.info('Command generated!')
|
|
43
|
+
.done();
|
|
44
|
+
function generateImports(info) {
|
|
45
|
+
const commandFieldTypes = info.fields.map((f) => f.type);
|
|
46
|
+
const commandUsesUUID = commandFieldTypes.some((type) => type == 'UUID');
|
|
47
|
+
const componentsFromMagekTypes = ['Register'];
|
|
48
|
+
if (commandUsesUUID) {
|
|
49
|
+
componentsFromMagekTypes.push('UUID');
|
|
50
|
+
}
|
|
51
|
+
return [
|
|
52
|
+
{
|
|
53
|
+
packagePath: '@magek/core',
|
|
54
|
+
commaSeparatedComponents: 'Command',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
packagePath: '@magek/common',
|
|
58
|
+
commaSeparatedComponents: componentsFromMagekTypes.join(', '),
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
const generateCommand = (info) => (0, generator_js_1.generate)({
|
|
63
|
+
name: info.name,
|
|
64
|
+
extension: '.ts',
|
|
65
|
+
placementDir: path.join('src', 'commands'),
|
|
66
|
+
template: (0, generator_js_1.template)('command'),
|
|
67
|
+
info: {
|
|
68
|
+
imports: generateImports(info),
|
|
69
|
+
...info,
|
|
70
|
+
},
|
|
71
|
+
});
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const base_command_js_1 = tslib_1.__importDefault(require("../../common/base-command.js"));
|
|
6
|
+
const script_js_1 = require("../../common/script.js");
|
|
7
|
+
const brand_js_1 = tslib_1.__importDefault(require("../../common/brand.js"));
|
|
8
|
+
const index_js_1 = require("../../services/generator/target/index.js");
|
|
9
|
+
const path = tslib_1.__importStar(require("path"));
|
|
10
|
+
const generator_js_1 = require("../../services/generator.js");
|
|
11
|
+
const project_checker_js_1 = require("../../services/project-checker.js");
|
|
12
|
+
const filenames_js_1 = require("../../common/filenames.js");
|
|
13
|
+
class Entity extends base_command_js_1.default {
|
|
14
|
+
async run() {
|
|
15
|
+
const { args, flags } = await this.parse(Entity);
|
|
16
|
+
try {
|
|
17
|
+
const fields = flags.fields || [];
|
|
18
|
+
const events = flags.reduces || [];
|
|
19
|
+
if (!args.entityName)
|
|
20
|
+
throw "You haven't provided an entity name, but it is required, run with --help for usage";
|
|
21
|
+
return run(args.entityName, fields, events);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
console.error(error);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
Entity.description = 'create a new entity';
|
|
29
|
+
Entity.flags = {
|
|
30
|
+
help: core_1.Flags.help({ char: 'h' }),
|
|
31
|
+
fields: core_1.Flags.string({
|
|
32
|
+
char: 'f',
|
|
33
|
+
description: 'fields that this entity will contain',
|
|
34
|
+
multiple: true,
|
|
35
|
+
}),
|
|
36
|
+
reduces: core_1.Flags.string({
|
|
37
|
+
char: 'r',
|
|
38
|
+
description: 'events that this entity will reduce to build its state',
|
|
39
|
+
multiple: true,
|
|
40
|
+
}),
|
|
41
|
+
};
|
|
42
|
+
Entity.args = {
|
|
43
|
+
entityName: core_1.Args.string(),
|
|
44
|
+
};
|
|
45
|
+
exports.default = Entity;
|
|
46
|
+
const run = async (name, rawFields, rawEvents) => script_js_1.Script.init(`magek ${brand_js_1.default.energize('new:entity')} 🚧`, (0, index_js_1.joinParsers)((0, index_js_1.parseName)(name), (0, index_js_1.parseFields)(rawFields), (0, index_js_1.parseReaction)(rawEvents)))
|
|
47
|
+
.step('Verifying project', project_checker_js_1.checkCurrentDirIsAMagekProject)
|
|
48
|
+
.step('Creating new entity', generateEntity)
|
|
49
|
+
.info('Entity generated!')
|
|
50
|
+
.done();
|
|
51
|
+
function generateImports(info) {
|
|
52
|
+
const eventsImports = info.events.map((eventData) => {
|
|
53
|
+
const fileName = (0, filenames_js_1.classNameToFileName)(eventData.eventName);
|
|
54
|
+
return {
|
|
55
|
+
packagePath: `../events/${fileName}`,
|
|
56
|
+
commaSeparatedComponents: eventData.eventName,
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
const coreComponents = ['Entity'];
|
|
60
|
+
if (info.events.length > 0) {
|
|
61
|
+
coreComponents.push('Reduces');
|
|
62
|
+
}
|
|
63
|
+
return [
|
|
64
|
+
{
|
|
65
|
+
packagePath: '@magek/core',
|
|
66
|
+
commaSeparatedComponents: coreComponents.join(', '),
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
packagePath: '@magek/common',
|
|
70
|
+
commaSeparatedComponents: 'UUID',
|
|
71
|
+
},
|
|
72
|
+
...eventsImports,
|
|
73
|
+
];
|
|
74
|
+
}
|
|
75
|
+
const generateEntity = (info) => (0, generator_js_1.generate)({
|
|
76
|
+
name: info.name,
|
|
77
|
+
extension: '.ts',
|
|
78
|
+
placementDir: path.join('src', 'entities'),
|
|
79
|
+
template: (0, generator_js_1.template)('entity'),
|
|
80
|
+
info: {
|
|
81
|
+
imports: generateImports(info),
|
|
82
|
+
...info,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const base_command_js_1 = tslib_1.__importDefault(require("../../common/base-command.js"));
|
|
6
|
+
const index_js_1 = require("../../services/generator/target/index.js");
|
|
7
|
+
const script_js_1 = require("../../common/script.js");
|
|
8
|
+
const brand_js_1 = tslib_1.__importDefault(require("../../common/brand.js"));
|
|
9
|
+
const project_checker_js_1 = require("../../services/project-checker.js");
|
|
10
|
+
const generator_js_1 = require("../../services/generator.js");
|
|
11
|
+
const path = tslib_1.__importStar(require("path"));
|
|
12
|
+
const filenames_js_1 = require("../../common/filenames.js");
|
|
13
|
+
class EventHandler extends base_command_js_1.default {
|
|
14
|
+
async run() {
|
|
15
|
+
const { args, flags } = await this.parse(EventHandler);
|
|
16
|
+
try {
|
|
17
|
+
const event = flags.event;
|
|
18
|
+
if (!args.eventHandlerName)
|
|
19
|
+
throw "You haven't provided an event handler name, but it is required, run with --help for usage";
|
|
20
|
+
if (!event)
|
|
21
|
+
throw "You haven't provided an event, but it is required, run with --help for usage";
|
|
22
|
+
return run(args.eventHandlerName, event);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.error(error);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
EventHandler.description = 'create a new event handler';
|
|
30
|
+
EventHandler.flags = {
|
|
31
|
+
help: core_1.Flags.help({ char: 'h' }),
|
|
32
|
+
event: core_1.Flags.string({
|
|
33
|
+
char: 'e',
|
|
34
|
+
description: 'event that this event handler with handle',
|
|
35
|
+
multiple: false,
|
|
36
|
+
}),
|
|
37
|
+
};
|
|
38
|
+
EventHandler.args = {
|
|
39
|
+
eventHandlerName: core_1.Args.string(),
|
|
40
|
+
};
|
|
41
|
+
exports.default = EventHandler;
|
|
42
|
+
const run = async (name, eventName) => script_js_1.Script.init(`magek ${brand_js_1.default.energize('new:event-handler')} 🚧`, (0, index_js_1.joinParsers)((0, index_js_1.parseName)(name), (0, index_js_1.parseEvent)(eventName)))
|
|
43
|
+
.step('Verifying project', project_checker_js_1.checkCurrentDirIsAMagekProject)
|
|
44
|
+
.step('Creating new event handler', generateEventHandler)
|
|
45
|
+
.info('Event handler generated!')
|
|
46
|
+
.done();
|
|
47
|
+
function generateImports(info) {
|
|
48
|
+
const fileName = (0, filenames_js_1.classNameToFileName)(info.event);
|
|
49
|
+
return [
|
|
50
|
+
{
|
|
51
|
+
packagePath: `../events/${fileName}`,
|
|
52
|
+
commaSeparatedComponents: info.event,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
packagePath: '@magek/core',
|
|
56
|
+
commaSeparatedComponents: 'EventHandler',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
packagePath: '@magek/common',
|
|
60
|
+
commaSeparatedComponents: 'Register',
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
const generateEventHandler = (info) => (0, generator_js_1.generate)({
|
|
65
|
+
name: info.name,
|
|
66
|
+
extension: '.ts',
|
|
67
|
+
placementDir: path.join('src', 'event-handlers'),
|
|
68
|
+
template: (0, generator_js_1.template)('event-handler'),
|
|
69
|
+
info: {
|
|
70
|
+
imports: generateImports(info),
|
|
71
|
+
...info,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const base_command_js_1 = tslib_1.__importDefault(require("../../common/base-command.js"));
|
|
6
|
+
const script_js_1 = require("../../common/script.js");
|
|
7
|
+
const brand_js_1 = tslib_1.__importDefault(require("../../common/brand.js"));
|
|
8
|
+
const index_js_1 = require("../../services/generator/target/index.js");
|
|
9
|
+
const generator_js_1 = require("../../services/generator.js");
|
|
10
|
+
const path = tslib_1.__importStar(require("path"));
|
|
11
|
+
const project_checker_js_1 = require("../../services/project-checker.js");
|
|
12
|
+
class Event extends base_command_js_1.default {
|
|
13
|
+
async run() {
|
|
14
|
+
const { args, flags } = await this.parse(Event);
|
|
15
|
+
try {
|
|
16
|
+
const fields = flags.fields || [];
|
|
17
|
+
if (!args.eventName)
|
|
18
|
+
throw "You haven't provided an event name, but it is required, run with --help for usage";
|
|
19
|
+
return run(args.eventName, fields);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
console.error(error);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
Event.description = 'create a new event';
|
|
27
|
+
Event.flags = {
|
|
28
|
+
help: core_1.Flags.help({ char: 'h' }),
|
|
29
|
+
fields: core_1.Flags.string({
|
|
30
|
+
char: 'f',
|
|
31
|
+
description: 'field that this event will contain',
|
|
32
|
+
multiple: true,
|
|
33
|
+
}),
|
|
34
|
+
};
|
|
35
|
+
Event.args = {
|
|
36
|
+
eventName: core_1.Args.string(),
|
|
37
|
+
};
|
|
38
|
+
exports.default = Event;
|
|
39
|
+
const run = async (name, rawFields) => script_js_1.Script.init(`magek ${brand_js_1.default.energize('new:event')} 🚧`, (0, index_js_1.joinParsers)((0, index_js_1.parseName)(name), (0, index_js_1.parseFields)(rawFields)))
|
|
40
|
+
.step('Verifying project', project_checker_js_1.checkCurrentDirIsAMagekProject)
|
|
41
|
+
.step('Creating new event', generateEvent)
|
|
42
|
+
.info('Event generated!')
|
|
43
|
+
.done();
|
|
44
|
+
function generateImports() {
|
|
45
|
+
return [
|
|
46
|
+
{
|
|
47
|
+
packagePath: '@magek/core',
|
|
48
|
+
commaSeparatedComponents: 'Event',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
packagePath: '@magek/common',
|
|
52
|
+
commaSeparatedComponents: 'UUID',
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
}
|
|
56
|
+
const generateEvent = (info) => (0, generator_js_1.generate)({
|
|
57
|
+
name: info.name,
|
|
58
|
+
extension: '.ts',
|
|
59
|
+
placementDir: path.join('src', 'events'),
|
|
60
|
+
template: (0, generator_js_1.template)('event'),
|
|
61
|
+
info: {
|
|
62
|
+
imports: generateImports(),
|
|
63
|
+
...info,
|
|
64
|
+
},
|
|
65
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const base_command_js_1 = tslib_1.__importDefault(require("../../common/base-command.js"));
|
|
6
|
+
const script_js_1 = require("../../common/script.js");
|
|
7
|
+
const brand_js_1 = tslib_1.__importDefault(require("../../common/brand.js"));
|
|
8
|
+
const generator_js_1 = require("../../services/generator.js");
|
|
9
|
+
const index_js_1 = require("../../services/generator/target/index.js");
|
|
10
|
+
const path = tslib_1.__importStar(require("path"));
|
|
11
|
+
const project_checker_js_1 = require("../../services/project-checker.js");
|
|
12
|
+
class Query extends base_command_js_1.default {
|
|
13
|
+
async run() {
|
|
14
|
+
const { args, flags } = await this.parse(Query);
|
|
15
|
+
try {
|
|
16
|
+
const fields = flags.fields || [];
|
|
17
|
+
if (!args.queryName)
|
|
18
|
+
throw "You haven't provided a query name, but it is required, run with --help for usage";
|
|
19
|
+
return run(args.queryName, fields);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
console.error(error);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
Query.description = "generate new query resource, write 'magek new' to see options";
|
|
27
|
+
Query.flags = {
|
|
28
|
+
help: core_1.Flags.help({ char: 'h' }),
|
|
29
|
+
fields: core_1.Flags.string({
|
|
30
|
+
char: 'f',
|
|
31
|
+
description: 'field list that this query will contain',
|
|
32
|
+
multiple: true,
|
|
33
|
+
}),
|
|
34
|
+
};
|
|
35
|
+
Query.args = {
|
|
36
|
+
queryName: core_1.Args.string(),
|
|
37
|
+
};
|
|
38
|
+
exports.default = Query;
|
|
39
|
+
const run = async (name, rawFields) => script_js_1.Script.init(`magek ${brand_js_1.default.energize('new:query')} 🚧`, (0, index_js_1.joinParsers)((0, index_js_1.parseName)(name), (0, index_js_1.parseFields)(rawFields)))
|
|
40
|
+
.step('Verifying project', project_checker_js_1.checkCurrentDirIsAMagekProject)
|
|
41
|
+
.step('Creating new query', generateQuery)
|
|
42
|
+
.info('Query generated!')
|
|
43
|
+
.done();
|
|
44
|
+
function generateImports(info) {
|
|
45
|
+
const queryFieldTypes = info.fields.map((f) => f.type);
|
|
46
|
+
const queryUsesUUID = queryFieldTypes.some((type) => type == 'UUID');
|
|
47
|
+
const componentsFromMagekTypes = ['QueryInfo'];
|
|
48
|
+
if (queryUsesUUID) {
|
|
49
|
+
componentsFromMagekTypes.push('UUID');
|
|
50
|
+
}
|
|
51
|
+
return [
|
|
52
|
+
{
|
|
53
|
+
packagePath: '@magek/core',
|
|
54
|
+
commaSeparatedComponents: 'Query',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
packagePath: '@magek/common',
|
|
58
|
+
commaSeparatedComponents: componentsFromMagekTypes.join(', '),
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
const generateQuery = (info) => (0, generator_js_1.generate)({
|
|
63
|
+
name: info.name,
|
|
64
|
+
extension: '.ts',
|
|
65
|
+
placementDir: path.join('src', 'queries'),
|
|
66
|
+
template: (0, generator_js_1.template)('query'),
|
|
67
|
+
info: {
|
|
68
|
+
imports: generateImports(info),
|
|
69
|
+
...info,
|
|
70
|
+
},
|
|
71
|
+
});
|