@auto-engineer/server-generator-apollo-emmett 0.1.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/.tmp/server-test-output/server/package.json +26 -0
- package/.tmp/server-test-output/server/scripts/generate-schema.ts +31 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/commands.ts +8 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/decide.specs.ts +36 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/decide.ts +33 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/events.ts +10 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/evolve.ts +28 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/handle.ts +24 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/mutation.resolver.ts +25 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/register.ts +7 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/create-item/state.ts +47 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/get-available-items/projection.specs.ts +46 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/get-available-items/projection.ts +38 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/get-available-items/query.resolver.ts +39 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/get-available-items/state.ts +5 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/commands.ts +8 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/decide.specs.ts +36 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/decide.ts +33 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/events.ts +3 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/evolve.ts +28 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/handle.ts +24 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/mutation.resolver.ts +25 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/register.ts +7 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-new-item/state.ts +47 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-on-new-item/react.specs.ts +49 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-on-new-item/react.ts +43 -0
- package/.tmp/server-test-output/server/src/domain/flows/add-item/notify-on-new-item/register.ts +24 -0
- package/.tmp/server-test-output/server/src/domain/shared/ReadModel.ts +26 -0
- package/.tmp/server-test-output/server/src/domain/shared/index.ts +4 -0
- package/.tmp/server-test-output/server/src/domain/shared/reactorSpecification.ts +257 -0
- package/.tmp/server-test-output/server/src/domain/shared/sendCommand.ts +21 -0
- package/.tmp/server-test-output/server/src/domain/shared/types.ts +31 -0
- package/.tmp/server-test-output/server/src/server.ts +43 -0
- package/.tmp/server-test-output/server/src/utils/index.ts +3 -0
- package/.tmp/server-test-output/server/src/utils/loadProjections.ts +30 -0
- package/.tmp/server-test-output/server/src/utils/loadRegisterFiles.ts +41 -0
- package/.tmp/server-test-output/server/src/utils/loadResolvers.ts +36 -0
- package/.tmp/server-test-output/server/tsconfig.json +19 -0
- package/.tmp/server-test-output/server/vitest.config.ts +7 -0
- package/.turbo/turbo-build.log +5 -0
- package/.turbo/turbo-format.log +57 -0
- package/.turbo/turbo-lint.log +5 -0
- package/.turbo/turbo-test.log +113 -0
- package/.turbo/turbo-type-check.log +4 -0
- package/CHANGELOG.md +141 -0
- package/DEBUG.md +177 -0
- package/LICENSE +10 -0
- package/README.md +185 -0
- package/dist/cli-manifest.d.ts +3 -0
- package/dist/cli-manifest.d.ts.map +1 -0
- package/dist/cli-manifest.js +8 -0
- package/dist/cli-manifest.js.map +1 -0
- package/dist/codegen/extract/commands.d.ts +19 -0
- package/dist/codegen/extract/commands.d.ts.map +1 -0
- package/dist/codegen/extract/commands.js +52 -0
- package/dist/codegen/extract/commands.js.map +1 -0
- package/dist/codegen/extract/data-sink.d.ts +6 -0
- package/dist/codegen/extract/data-sink.d.ts.map +1 -0
- package/dist/codegen/extract/data-sink.js +39 -0
- package/dist/codegen/extract/data-sink.js.map +1 -0
- package/dist/codegen/extract/events.d.ts +10 -0
- package/dist/codegen/extract/events.d.ts.map +1 -0
- package/dist/codegen/extract/events.js +32 -0
- package/dist/codegen/extract/events.js.map +1 -0
- package/dist/codegen/extract/fields.d.ts +3 -0
- package/dist/codegen/extract/fields.d.ts.map +1 -0
- package/dist/codegen/extract/fields.js +9 -0
- package/dist/codegen/extract/fields.js.map +1 -0
- package/dist/codegen/extract/graphql.d.ts +14 -0
- package/dist/codegen/extract/graphql.d.ts.map +1 -0
- package/dist/codegen/extract/graphql.js +81 -0
- package/dist/codegen/extract/graphql.js.map +1 -0
- package/dist/codegen/extract/gwt.d.ts +6 -0
- package/dist/codegen/extract/gwt.d.ts.map +1 -0
- package/dist/codegen/extract/gwt.js +61 -0
- package/dist/codegen/extract/gwt.js.map +1 -0
- package/dist/codegen/extract/index.d.ts +8 -0
- package/dist/codegen/extract/index.d.ts.map +1 -0
- package/dist/codegen/extract/index.js +8 -0
- package/dist/codegen/extract/index.js.map +1 -0
- package/dist/codegen/extract/messages.d.ts +24 -0
- package/dist/codegen/extract/messages.d.ts.map +1 -0
- package/dist/codegen/extract/messages.js +131 -0
- package/dist/codegen/extract/messages.js.map +1 -0
- package/dist/codegen/extract/projection.d.ts +4 -0
- package/dist/codegen/extract/projection.d.ts.map +1 -0
- package/dist/codegen/extract/projection.js +30 -0
- package/dist/codegen/extract/projection.js.map +1 -0
- package/dist/codegen/extract/query.d.ts +11 -0
- package/dist/codegen/extract/query.d.ts.map +1 -0
- package/dist/codegen/extract/query.js +11 -0
- package/dist/codegen/extract/query.js.map +1 -0
- package/dist/codegen/extract/states.d.ts +5 -0
- package/dist/codegen/extract/states.d.ts.map +1 -0
- package/dist/codegen/extract/states.js +35 -0
- package/dist/codegen/extract/states.js.map +1 -0
- package/dist/codegen/scaffoldFromSchema.d.ts +9 -0
- package/dist/codegen/scaffoldFromSchema.d.ts.map +1 -0
- package/dist/codegen/scaffoldFromSchema.integration.specs.d.ts +2 -0
- package/dist/codegen/scaffoldFromSchema.integration.specs.d.ts.map +1 -0
- package/dist/codegen/scaffoldFromSchema.integration.specs.js +59 -0
- package/dist/codegen/scaffoldFromSchema.integration.specs.js.map +1 -0
- package/dist/codegen/scaffoldFromSchema.js +326 -0
- package/dist/codegen/scaffoldFromSchema.js.map +1 -0
- package/dist/codegen/templates/command/commands.specs.ts +90 -0
- package/dist/codegen/templates/command/commands.ts.ejs +11 -0
- package/dist/codegen/templates/command/decide.specs.specs.ts +265 -0
- package/dist/codegen/templates/command/decide.specs.ts +542 -0
- package/dist/codegen/templates/command/decide.specs.ts.ejs +51 -0
- package/dist/codegen/templates/command/decide.ts.ejs +107 -0
- package/dist/codegen/templates/command/events.specs.ts +106 -0
- package/dist/codegen/templates/command/events.ts.ejs +14 -0
- package/dist/codegen/templates/command/evolve.specs.ts +102 -0
- package/dist/codegen/templates/command/evolve.ts.ejs +39 -0
- package/dist/codegen/templates/command/handle.specs.ts +313 -0
- package/dist/codegen/templates/command/handle.ts.ejs +111 -0
- package/dist/codegen/templates/command/mutation.resolver.specs.ts +115 -0
- package/dist/codegen/templates/command/mutation.resolver.ts.ejs +25 -0
- package/dist/codegen/templates/command/register.specs.ts +107 -0
- package/dist/codegen/templates/command/register.ts.ejs +12 -0
- package/dist/codegen/templates/command/state.specs.ts +127 -0
- package/dist/codegen/templates/command/state.ts.ejs +47 -0
- package/dist/codegen/templates/query/projection.specs.specs..ts +276 -0
- package/dist/codegen/templates/query/projection.specs.ts +348 -0
- package/dist/codegen/templates/query/projection.specs.ts.ejs +71 -0
- package/dist/codegen/templates/query/projection.ts.ejs +121 -0
- package/dist/codegen/templates/query/query.resolver.specs.ts +254 -0
- package/dist/codegen/templates/query/query.resolver.ts.ejs +98 -0
- package/dist/codegen/templates/query/state.specs.ts +70 -0
- package/dist/codegen/templates/query/state.ts.ejs +7 -0
- package/dist/codegen/templates/react/react.specs.specs.ts +214 -0
- package/dist/codegen/templates/react/react.specs.ts +241 -0
- package/dist/codegen/templates/react/react.specs.ts.ejs +80 -0
- package/dist/codegen/templates/react/react.ts.ejs +56 -0
- package/dist/codegen/templates/react/register.specs.ts +222 -0
- package/dist/codegen/templates/react/register.ts.ejs +39 -0
- package/dist/codegen/test-data/specVariant1.d.ts +4 -0
- package/dist/codegen/test-data/specVariant1.d.ts.map +1 -0
- package/dist/codegen/test-data/specVariant1.js +185 -0
- package/dist/codegen/test-data/specVariant1.js.map +1 -0
- package/dist/codegen/types.d.ts +35 -0
- package/dist/codegen/types.d.ts.map +1 -0
- package/dist/codegen/types.js +2 -0
- package/dist/codegen/types.js.map +1 -0
- package/dist/codegen/utils/path.d.ts +4 -0
- package/dist/codegen/utils/path.d.ts.map +1 -0
- package/dist/codegen/utils/path.js +18 -0
- package/dist/codegen/utils/path.js.map +1 -0
- package/dist/commands/generate-server.d.ts +81 -0
- package/dist/commands/generate-server.d.ts.map +1 -0
- package/dist/commands/generate-server.js +383 -0
- package/dist/commands/generate-server.js.map +1 -0
- package/dist/domain/shared/ReadModel.d.ts +10 -0
- package/dist/domain/shared/ReadModel.d.ts.map +1 -0
- package/dist/domain/shared/ReadModel.js +19 -0
- package/dist/domain/shared/ReadModel.js.map +1 -0
- package/dist/domain/shared/ReadModel.ts +26 -0
- package/dist/domain/shared/index.d.ts +5 -0
- package/dist/domain/shared/index.d.ts.map +1 -0
- package/dist/domain/shared/index.js +5 -0
- package/dist/domain/shared/index.js.map +1 -0
- package/dist/domain/shared/index.ts +4 -0
- package/dist/domain/shared/reactorSpecification.d.ts +35 -0
- package/dist/domain/shared/reactorSpecification.d.ts.map +1 -0
- package/dist/domain/shared/reactorSpecification.js +155 -0
- package/dist/domain/shared/reactorSpecification.js.map +1 -0
- package/dist/domain/shared/reactorSpecification.ts +257 -0
- package/dist/domain/shared/sendCommand.d.ts +4 -0
- package/dist/domain/shared/sendCommand.d.ts.map +1 -0
- package/dist/domain/shared/sendCommand.js +17 -0
- package/dist/domain/shared/sendCommand.js.map +1 -0
- package/dist/domain/shared/sendCommand.ts +21 -0
- package/dist/domain/shared/types.d.ts +19 -0
- package/dist/domain/shared/types.d.ts.map +1 -0
- package/dist/domain/shared/types.js +39 -0
- package/dist/domain/shared/types.js.map +1 -0
- package/dist/domain/shared/types.ts +31 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +33 -0
- package/dist/server.js.map +1 -0
- package/dist/server.ts +43 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.ts +3 -0
- package/dist/utils/loadProjections.d.ts +3 -0
- package/dist/utils/loadProjections.d.ts.map +1 -0
- package/dist/utils/loadProjections.js +23 -0
- package/dist/utils/loadProjections.js.map +1 -0
- package/dist/utils/loadProjections.ts +30 -0
- package/dist/utils/loadRegisterFiles.d.ts +6 -0
- package/dist/utils/loadRegisterFiles.d.ts.map +1 -0
- package/dist/utils/loadRegisterFiles.js +28 -0
- package/dist/utils/loadRegisterFiles.js.map +1 -0
- package/dist/utils/loadRegisterFiles.ts +41 -0
- package/dist/utils/loadResolvers.d.ts +5 -0
- package/dist/utils/loadResolvers.d.ts.map +1 -0
- package/dist/utils/loadResolvers.js +27 -0
- package/dist/utils/loadResolvers.js.map +1 -0
- package/dist/utils/loadResolvers.ts +36 -0
- package/package.json +55 -0
- package/src/cli-manifest.ts +9 -0
- package/src/codegen/extract/commands.ts +79 -0
- package/src/codegen/extract/data-sink.ts +45 -0
- package/src/codegen/extract/events.ts +46 -0
- package/src/codegen/extract/fields.ts +17 -0
- package/src/codegen/extract/graphql.ts +103 -0
- package/src/codegen/extract/gwt.ts +75 -0
- package/src/codegen/extract/index.ts +7 -0
- package/src/codegen/extract/messages.ts +196 -0
- package/src/codegen/extract/projection.ts +47 -0
- package/src/codegen/extract/query.ts +18 -0
- package/src/codegen/extract/states.ts +45 -0
- package/src/codegen/scaffoldFromSchema.integration.specs.ts +71 -0
- package/src/codegen/scaffoldFromSchema.ts +440 -0
- package/src/codegen/templates/command/commands.specs.ts +90 -0
- package/src/codegen/templates/command/commands.ts.ejs +11 -0
- package/src/codegen/templates/command/decide.specs.specs.ts +265 -0
- package/src/codegen/templates/command/decide.specs.ts +542 -0
- package/src/codegen/templates/command/decide.specs.ts.ejs +51 -0
- package/src/codegen/templates/command/decide.ts.ejs +107 -0
- package/src/codegen/templates/command/events.specs.ts +106 -0
- package/src/codegen/templates/command/events.ts.ejs +14 -0
- package/src/codegen/templates/command/evolve.specs.ts +102 -0
- package/src/codegen/templates/command/evolve.ts.ejs +39 -0
- package/src/codegen/templates/command/handle.specs.ts +313 -0
- package/src/codegen/templates/command/handle.ts.ejs +111 -0
- package/src/codegen/templates/command/mutation.resolver.specs.ts +115 -0
- package/src/codegen/templates/command/mutation.resolver.ts.ejs +25 -0
- package/src/codegen/templates/command/register.specs.ts +107 -0
- package/src/codegen/templates/command/register.ts.ejs +12 -0
- package/src/codegen/templates/command/state.specs.ts +127 -0
- package/src/codegen/templates/command/state.ts.ejs +47 -0
- package/src/codegen/templates/query/projection.specs.specs..ts +276 -0
- package/src/codegen/templates/query/projection.specs.ts +348 -0
- package/src/codegen/templates/query/projection.specs.ts.ejs +71 -0
- package/src/codegen/templates/query/projection.ts.ejs +121 -0
- package/src/codegen/templates/query/query.resolver.specs.ts +254 -0
- package/src/codegen/templates/query/query.resolver.ts.ejs +98 -0
- package/src/codegen/templates/query/state.specs.ts +70 -0
- package/src/codegen/templates/query/state.ts.ejs +7 -0
- package/src/codegen/templates/react/react.specs.specs.ts +214 -0
- package/src/codegen/templates/react/react.specs.ts +241 -0
- package/src/codegen/templates/react/react.specs.ts.ejs +80 -0
- package/src/codegen/templates/react/react.ts.ejs +56 -0
- package/src/codegen/templates/react/register.specs.ts +222 -0
- package/src/codegen/templates/react/register.ts.ejs +39 -0
- package/src/codegen/test-data/specVariant1.json +212 -0
- package/src/codegen/test-data/specVariant1.ts +188 -0
- package/src/codegen/test-data/specVariant2.json +396 -0
- package/src/codegen/types.ts +35 -0
- package/src/codegen/utils/path.ts +20 -0
- package/src/commands/generate-server.ts +517 -0
- package/src/domain/shared/ReadModel.ts +26 -0
- package/src/domain/shared/index.ts +4 -0
- package/src/domain/shared/reactorSpecification.ts +257 -0
- package/src/domain/shared/sendCommand.ts +21 -0
- package/src/domain/shared/types.ts +31 -0
- package/src/index.ts +2 -0
- package/src/server.ts +43 -0
- package/src/utils/index.ts +3 -0
- package/src/utils/loadProjections.ts +30 -0
- package/src/utils/loadRegisterFiles.ts +41 -0
- package/src/utils/loadResolvers.ts +36 -0
- package/tsconfig.json +12 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { readFile, writeFile } from 'fs/promises';
|
|
5
|
+
import { resolve, join } from 'path';
|
|
6
|
+
import { existsSync } from 'fs';
|
|
7
|
+
import { generateScaffoldFilePlans, writeScaffoldFilePlans } from '../codegen/scaffoldFromSchema.js';
|
|
8
|
+
import { ensureDirExists } from '../codegen/utils/path.js';
|
|
9
|
+
import { fileURLToPath } from 'url';
|
|
10
|
+
import { dirname } from 'path';
|
|
11
|
+
import { execa } from 'execa';
|
|
12
|
+
import createDebug from 'debug';
|
|
13
|
+
const debug = createDebug('emmett:generate-server');
|
|
14
|
+
const debugSchema = createDebug('emmett:generate-server:schema');
|
|
15
|
+
const debugFiles = createDebug('emmett:generate-server:files');
|
|
16
|
+
const debugDeps = createDebug('emmett:generate-server:deps');
|
|
17
|
+
const debugScaffold = createDebug('emmett:generate-server:scaffold');
|
|
18
|
+
export const generateServerManifest = {
|
|
19
|
+
handler: () => Promise.resolve({ default: generateServerCommandHandler }),
|
|
20
|
+
description: 'Generate server from schema.json',
|
|
21
|
+
usage: 'generate:server <schema> <dest>',
|
|
22
|
+
examples: ['$ auto generate:server .context/schema.json .'],
|
|
23
|
+
args: [
|
|
24
|
+
{ name: 'schema', description: 'Path to schema.json file', required: true },
|
|
25
|
+
{ name: 'dest', description: 'Destination directory for generated server', required: true },
|
|
26
|
+
],
|
|
27
|
+
};
|
|
28
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
29
|
+
const __dirname = dirname(__filename);
|
|
30
|
+
async function validateSchemaFile(absSchema, command) {
|
|
31
|
+
if (!existsSync(absSchema)) {
|
|
32
|
+
debug('Schema file not found at %s', absSchema);
|
|
33
|
+
return {
|
|
34
|
+
type: 'ServerGenerationFailed',
|
|
35
|
+
data: {
|
|
36
|
+
schemaPath: command.data.schemaPath,
|
|
37
|
+
destination: command.data.destination,
|
|
38
|
+
error: `Schema file not found at ${absSchema}`,
|
|
39
|
+
},
|
|
40
|
+
timestamp: new Date(),
|
|
41
|
+
requestId: command.requestId,
|
|
42
|
+
correlationId: command.correlationId,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
async function readAndParseSchema(absSchema) {
|
|
48
|
+
debugSchema('Reading schema file from %s', absSchema);
|
|
49
|
+
const content = await readFile(absSchema, 'utf8');
|
|
50
|
+
debugSchema('Schema content length: %d bytes', content.length);
|
|
51
|
+
const spec = JSON.parse(content);
|
|
52
|
+
debugSchema('Parsed schema:');
|
|
53
|
+
debugSchema(' Flows: %d', spec.flows?.length || 0);
|
|
54
|
+
debugSchema(' Messages: %d', spec.messages?.length || 0);
|
|
55
|
+
debugSchema(' Integrations: %d', spec.integrations?.length ?? 0);
|
|
56
|
+
logFlowDetails(spec);
|
|
57
|
+
return spec;
|
|
58
|
+
}
|
|
59
|
+
function logFlowDetails(spec) {
|
|
60
|
+
if (spec.flows !== undefined && spec.flows.length > 0) {
|
|
61
|
+
debugSchema('Flow names: %o', spec.flows.map((f) => f.name));
|
|
62
|
+
spec.flows.forEach((flow) => {
|
|
63
|
+
debugSchema(' Flow "%s" has %d slices', flow.name, flow.slices?.length || 0);
|
|
64
|
+
flow.slices?.forEach((slice) => {
|
|
65
|
+
debugSchema(' Slice: %s (type: %s)', slice.name, slice.type);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function generateAndWriteScaffold(spec, serverDir) {
|
|
71
|
+
const domainFlowsPath = join(serverDir, 'src', 'domain', 'flows');
|
|
72
|
+
debugScaffold('Generating scaffold file plans');
|
|
73
|
+
debugScaffold(' Domain flows path: %s', domainFlowsPath);
|
|
74
|
+
debugScaffold(' Number of flows: %d', spec.flows?.length || 0);
|
|
75
|
+
const filePlans = await generateScaffoldFilePlans(spec.flows, spec.messages, spec.integrations, domainFlowsPath);
|
|
76
|
+
debugScaffold('Generated %d file plans', filePlans.length);
|
|
77
|
+
if (filePlans.length > 0) {
|
|
78
|
+
debugScaffold('Sample file paths:');
|
|
79
|
+
filePlans.slice(0, 5).forEach((plan) => {
|
|
80
|
+
debugScaffold(' - %s', plan.outputPath);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
await writeScaffoldFilePlans(filePlans);
|
|
84
|
+
debugScaffold('Written all scaffold files');
|
|
85
|
+
}
|
|
86
|
+
async function copyAllFiles(serverDir) {
|
|
87
|
+
const packageRoot = path.resolve(__dirname, '..');
|
|
88
|
+
debugFiles('Package root: %s', packageRoot);
|
|
89
|
+
debugFiles('Copying utility files...');
|
|
90
|
+
await copyRootFilesFromSrc(path.join(packageRoot, 'utils'), path.join(serverDir, 'src', 'utils'));
|
|
91
|
+
debugFiles('Copying server.ts...');
|
|
92
|
+
await copyRootFilesFromSrc(path.join(packageRoot, 'server.ts'), path.join(serverDir, 'src'));
|
|
93
|
+
debugFiles('Copying domain shared files...');
|
|
94
|
+
await copySharedAndRootFiles(path.join(packageRoot, 'domain'), path.join(serverDir, 'src', 'domain'));
|
|
95
|
+
}
|
|
96
|
+
async function writeConfigurationFiles(serverDir, absDest) {
|
|
97
|
+
debugFiles('Writing package.json...');
|
|
98
|
+
await writePackage(serverDir);
|
|
99
|
+
debugFiles('Writing tsconfig.json...');
|
|
100
|
+
await writeTsconfig(serverDir);
|
|
101
|
+
debugFiles('Writing vitest config...');
|
|
102
|
+
await writeVitestConfig(serverDir);
|
|
103
|
+
debugFiles('Generating GraphQL schema script...');
|
|
104
|
+
await generateSchemaScript(serverDir, absDest);
|
|
105
|
+
}
|
|
106
|
+
function createServerSuccessEvent(command, serverDir, absDest) {
|
|
107
|
+
return {
|
|
108
|
+
type: 'ServerGenerated',
|
|
109
|
+
data: {
|
|
110
|
+
schemaPath: command.data.schemaPath,
|
|
111
|
+
destination: command.data.destination,
|
|
112
|
+
serverDir,
|
|
113
|
+
contextSchemaGraphQL: join(absDest, '.context', 'schema.graphql'),
|
|
114
|
+
},
|
|
115
|
+
timestamp: new Date(),
|
|
116
|
+
requestId: command.requestId,
|
|
117
|
+
correlationId: command.correlationId,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function createServerFailureEvent(command, error) {
|
|
121
|
+
debug('Server generation failed with error: %O', error);
|
|
122
|
+
return {
|
|
123
|
+
type: 'ServerGenerationFailed',
|
|
124
|
+
data: {
|
|
125
|
+
schemaPath: command.data.schemaPath,
|
|
126
|
+
destination: command.data.destination,
|
|
127
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred',
|
|
128
|
+
},
|
|
129
|
+
timestamp: new Date(),
|
|
130
|
+
requestId: command.requestId,
|
|
131
|
+
correlationId: command.correlationId,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
async function handleGenerateServerCommandInternal(command) {
|
|
135
|
+
const { schemaPath, destination } = command.data;
|
|
136
|
+
debug('Starting server generation');
|
|
137
|
+
debug('Schema path: %s', schemaPath);
|
|
138
|
+
debug('Destination: %s', destination);
|
|
139
|
+
try {
|
|
140
|
+
const absDest = resolve(destination);
|
|
141
|
+
const absSchema = resolve(schemaPath);
|
|
142
|
+
debug('Resolved paths:');
|
|
143
|
+
debug(' Absolute destination: %s', absDest);
|
|
144
|
+
debug(' Absolute schema: %s', absSchema);
|
|
145
|
+
// Validate schema file exists
|
|
146
|
+
const validationError = await validateSchemaFile(absSchema, command);
|
|
147
|
+
if (validationError)
|
|
148
|
+
return validationError;
|
|
149
|
+
// Read and parse schema
|
|
150
|
+
const spec = await readAndParseSchema(absSchema);
|
|
151
|
+
// Setup server directory
|
|
152
|
+
const serverDir = join(absDest, 'server');
|
|
153
|
+
debug('Server directory: %s', serverDir);
|
|
154
|
+
debug('🔄 Generating server... %s', serverDir);
|
|
155
|
+
await ensureDirExists(serverDir);
|
|
156
|
+
debugFiles('Created server directory: %s', serverDir);
|
|
157
|
+
// Generate scaffold files
|
|
158
|
+
await generateAndWriteScaffold(spec, serverDir);
|
|
159
|
+
// Copy files
|
|
160
|
+
await copyAllFiles(serverDir);
|
|
161
|
+
// Write configuration files
|
|
162
|
+
await writeConfigurationFiles(serverDir, absDest);
|
|
163
|
+
// Install dependencies and generate schema
|
|
164
|
+
debugDeps('Installing dependencies and generating GraphQL schema...');
|
|
165
|
+
await installDependenciesAndGenerateSchema(serverDir, absDest);
|
|
166
|
+
debug('Server generation completed successfully');
|
|
167
|
+
debug('Server directory: %s', serverDir);
|
|
168
|
+
return createServerSuccessEvent(command, serverDir, absDest);
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
return createServerFailureEvent(command, error);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
export const generateServerCommandHandler = {
|
|
175
|
+
name: 'GenerateServer',
|
|
176
|
+
handle: async (command) => {
|
|
177
|
+
const result = await handleGenerateServerCommandInternal(command);
|
|
178
|
+
if (result.type === 'ServerGenerated') {
|
|
179
|
+
debug('Server generated at %s', result.data.serverDir);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
debug('Failed to generate server: %s', result.data.error);
|
|
183
|
+
}
|
|
184
|
+
return result;
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
async function copyRootFilesFromSrc(from, to) {
|
|
188
|
+
debugFiles('copyRootFilesFromSrc: from=%s, to=%s', from, to);
|
|
189
|
+
// If "from" is a file, copy it directly to directory "to" maintaining filename
|
|
190
|
+
const fromStat = await fs.stat(from).catch(() => undefined);
|
|
191
|
+
if (fromStat !== undefined && fromStat.isFile()) {
|
|
192
|
+
debugFiles(' Source is a file, copying directly');
|
|
193
|
+
await fs.ensureDir(to);
|
|
194
|
+
const destFile = path.join(to, path.basename(from));
|
|
195
|
+
await fs.copy(from, destFile);
|
|
196
|
+
debugFiles(' Copied file to %s', destFile);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (!(await fs.pathExists(from))) {
|
|
200
|
+
debugFiles(' Source path does not exist: %s', from);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
await fs.ensureDir(to);
|
|
204
|
+
const rootFiles = await fs.readdir(from);
|
|
205
|
+
debugFiles(' Found %d files in source directory', rootFiles.length);
|
|
206
|
+
for (const file of rootFiles) {
|
|
207
|
+
const srcFile = path.join(from, file);
|
|
208
|
+
const stat = await fs.stat(srcFile);
|
|
209
|
+
if (stat.isFile()) {
|
|
210
|
+
const destFile = path.join(to, file);
|
|
211
|
+
await fs.copy(srcFile, destFile);
|
|
212
|
+
debugFiles(' Copied: %s', file);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async function copySharedAndRootFiles(from, to) {
|
|
217
|
+
const sharedFrom = path.join(from, 'shared');
|
|
218
|
+
const sharedTo = path.join(to, 'shared');
|
|
219
|
+
if (await fs.pathExists(sharedFrom)) {
|
|
220
|
+
await fs.copy(sharedFrom, sharedTo);
|
|
221
|
+
}
|
|
222
|
+
await fs.ensureDir(to);
|
|
223
|
+
const rootFiles = await fs.readdir(from);
|
|
224
|
+
for (const file of rootFiles) {
|
|
225
|
+
if (file.endsWith('.ts')) {
|
|
226
|
+
const srcFile = path.join(from, file);
|
|
227
|
+
const destFile = path.join(to, file);
|
|
228
|
+
await fs.copy(srcFile, destFile);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
async function writePackage(dest) {
|
|
233
|
+
debugFiles('Writing package.json to %s', dest);
|
|
234
|
+
const packageRoot = path.resolve(__dirname, '../..');
|
|
235
|
+
const localPkgPath = path.resolve(packageRoot, 'package.json');
|
|
236
|
+
const rootPkgPath = path.resolve(packageRoot, '../../package.json');
|
|
237
|
+
debugFiles(' Local package path: %s', localPkgPath);
|
|
238
|
+
debugFiles(' Root package path: %s', rootPkgPath);
|
|
239
|
+
const localPkg = (await fs.readJson(localPkgPath).catch(() => ({})));
|
|
240
|
+
const rootPkg = (await fs.readJson(rootPkgPath).catch(() => ({})));
|
|
241
|
+
const getDepVersion = (dep) => {
|
|
242
|
+
const version = localPkg.dependencies?.[dep] ??
|
|
243
|
+
localPkg.devDependencies?.[dep] ??
|
|
244
|
+
rootPkg.dependencies?.[dep] ??
|
|
245
|
+
rootPkg.devDependencies?.[dep];
|
|
246
|
+
if (version !== undefined) {
|
|
247
|
+
debugFiles(' Found version for %s: %s', dep, version);
|
|
248
|
+
}
|
|
249
|
+
return version;
|
|
250
|
+
};
|
|
251
|
+
const resolveDeps = (deps) => {
|
|
252
|
+
return deps.reduce((acc, dep) => {
|
|
253
|
+
const version = getDepVersion(dep);
|
|
254
|
+
if (typeof version === 'string') {
|
|
255
|
+
acc[dep] = version;
|
|
256
|
+
}
|
|
257
|
+
return acc;
|
|
258
|
+
}, {});
|
|
259
|
+
};
|
|
260
|
+
const packageJson = {
|
|
261
|
+
name: 'generated-server',
|
|
262
|
+
version: '0.0.0',
|
|
263
|
+
private: true,
|
|
264
|
+
type: 'module',
|
|
265
|
+
scripts: {
|
|
266
|
+
start: 'tsx --no-deprecation src/server.ts',
|
|
267
|
+
'type-check': 'tsc --noEmit',
|
|
268
|
+
test: 'vitest run',
|
|
269
|
+
dev: 'tsx --no-deprecation src/server.ts',
|
|
270
|
+
},
|
|
271
|
+
dependencies: resolveDeps([
|
|
272
|
+
'@event-driven-io/emmett',
|
|
273
|
+
'type-graphql',
|
|
274
|
+
'graphql',
|
|
275
|
+
'fast-glob',
|
|
276
|
+
'reflect-metadata',
|
|
277
|
+
'zod',
|
|
278
|
+
'apollo-server',
|
|
279
|
+
'uuid',
|
|
280
|
+
]),
|
|
281
|
+
devDependencies: resolveDeps(['typescript', 'vitest', 'tsx']),
|
|
282
|
+
};
|
|
283
|
+
const existingPkg = (await fs.readJson(path.join(dest, 'package.json')).catch(() => ({})));
|
|
284
|
+
const mergedDeps = {
|
|
285
|
+
...existingPkg.dependencies,
|
|
286
|
+
...packageJson.dependencies,
|
|
287
|
+
};
|
|
288
|
+
await fs.writeJson(path.join(dest, 'package.json'), { ...packageJson, dependencies: mergedDeps }, { spaces: 2 });
|
|
289
|
+
}
|
|
290
|
+
async function writeTsconfig(dest) {
|
|
291
|
+
const tsconfig = {
|
|
292
|
+
compilerOptions: {
|
|
293
|
+
target: 'ES2022',
|
|
294
|
+
module: 'ESNext',
|
|
295
|
+
moduleResolution: 'bundler',
|
|
296
|
+
strict: true,
|
|
297
|
+
skipLibCheck: true,
|
|
298
|
+
emitDecoratorMetadata: true,
|
|
299
|
+
experimentalDecorators: true,
|
|
300
|
+
},
|
|
301
|
+
include: ['src/**/*', 'vitest.config.ts'],
|
|
302
|
+
exclude: ['dist', 'node_modules'],
|
|
303
|
+
};
|
|
304
|
+
const tsconfigPath = path.join(dest, 'tsconfig.json');
|
|
305
|
+
if (!(await fs.pathExists(tsconfigPath))) {
|
|
306
|
+
await fs.writeJson(tsconfigPath, tsconfig, { spaces: 2 });
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
async function writeVitestConfig(dest) {
|
|
310
|
+
const vitestConfig = `import { defineConfig } from 'vitest/config';
|
|
311
|
+
|
|
312
|
+
export default defineConfig({
|
|
313
|
+
test: {
|
|
314
|
+
include: ['src/**/*.specs.ts'],
|
|
315
|
+
},
|
|
316
|
+
});
|
|
317
|
+
`;
|
|
318
|
+
await writeFile(path.join(dest, 'vitest.config.ts'), vitestConfig, 'utf-8');
|
|
319
|
+
}
|
|
320
|
+
async function generateSchemaScript(serverDir, workingDir) {
|
|
321
|
+
const contextDir = path.resolve(`${workingDir}`, '.context');
|
|
322
|
+
await ensureDirExists(contextDir);
|
|
323
|
+
const scriptsDir = join(serverDir, 'scripts');
|
|
324
|
+
await ensureDirExists(scriptsDir);
|
|
325
|
+
const schemaScriptContent = `import 'reflect-metadata';
|
|
326
|
+
import { buildSchema } from 'type-graphql';
|
|
327
|
+
import { printSchema } from 'graphql';
|
|
328
|
+
import { writeFile } from 'fs/promises';
|
|
329
|
+
import * as path from 'path';
|
|
330
|
+
import { loadResolvers } from '../src/utils/loadResolvers.js';
|
|
331
|
+
|
|
332
|
+
async function main() {
|
|
333
|
+
try {
|
|
334
|
+
const resolvers = await loadResolvers('src/domain/flows/**/*.resolver.{ts,js}');
|
|
335
|
+
const schema = await buildSchema({
|
|
336
|
+
resolvers: resolvers as any,
|
|
337
|
+
emitSchemaFile: false,
|
|
338
|
+
});
|
|
339
|
+
const printedSchema = printSchema(schema);
|
|
340
|
+
|
|
341
|
+
const contextDir = path.resolve('${workingDir}', '.context');
|
|
342
|
+
const schemaPath = path.join(contextDir, 'schema.graphql');
|
|
343
|
+
await writeFile(schemaPath, printedSchema, 'utf-8');
|
|
344
|
+
|
|
345
|
+
console.log(\`✅ GraphQL schema generated at: \${schemaPath}\`);
|
|
346
|
+
} catch (error) {
|
|
347
|
+
console.error(\`❌ GraphQL schema generation failed: \${error instanceof Error ? error.message : 'Unknown error'}\`);
|
|
348
|
+
process.exit(1);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
main().catch((err) => {
|
|
353
|
+
console.error(err);
|
|
354
|
+
process.exit(1);
|
|
355
|
+
});
|
|
356
|
+
`;
|
|
357
|
+
const schemaScriptPath = join(scriptsDir, 'generate-schema.ts');
|
|
358
|
+
await writeFile(schemaScriptPath, schemaScriptContent, 'utf-8');
|
|
359
|
+
}
|
|
360
|
+
async function installDependenciesAndGenerateSchema(serverDir, workingDir) {
|
|
361
|
+
debugDeps('📦 Installing dependencies...');
|
|
362
|
+
debugDeps('Starting dependency installation in %s', serverDir);
|
|
363
|
+
try {
|
|
364
|
+
debugDeps('Running: pnpm install');
|
|
365
|
+
await execa('pnpm', ['install'], { cwd: serverDir });
|
|
366
|
+
debugDeps('✅ Dependencies installed successfully');
|
|
367
|
+
debugDeps('Dependencies installed successfully');
|
|
368
|
+
debugDeps('🔄 Generating GraphQL schema...');
|
|
369
|
+
debugDeps('Running: tsx scripts/generate-schema.ts');
|
|
370
|
+
await execa('tsx', ['scripts/generate-schema.ts'], { cwd: serverDir });
|
|
371
|
+
const schemaPath = join(workingDir, '.context', 'schema.graphql');
|
|
372
|
+
debugDeps('✅ GraphQL schema generated at: %s', schemaPath);
|
|
373
|
+
debugDeps('GraphQL schema generated at: %s', schemaPath);
|
|
374
|
+
}
|
|
375
|
+
catch (error) {
|
|
376
|
+
debugDeps('Failed to install dependencies or generate schema: %O', error);
|
|
377
|
+
debugDeps('⚠️ Failed to install dependencies or generate schema: %s', error instanceof Error ? error.message : 'Unknown error');
|
|
378
|
+
debugDeps('You can manually run: cd server && pnpm install && npx tsx scripts/generate-schema.ts');
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
// Default export is the command handler
|
|
382
|
+
export default generateServerCommandHandler;
|
|
383
|
+
//# sourceMappingURL=generate-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-server.js","sourceRoot":"","sources":["../../src/commands/generate-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { InMemoryEventStore } from '@event-driven-io/emmett';
|
|
2
|
+
export declare class ReadModel<T extends Record<string, unknown>> {
|
|
3
|
+
private collection;
|
|
4
|
+
constructor(eventStore: InMemoryEventStore, collectionName: string);
|
|
5
|
+
getAll(): Promise<T[]>;
|
|
6
|
+
getById(id: string, idField?: keyof T): Promise<T | null>;
|
|
7
|
+
find(filterFn: (item: T) => boolean): Promise<T[]>;
|
|
8
|
+
first(filterFn: (item: T) => boolean): Promise<T | null>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=ReadModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadModel.d.ts","sourceRoot":"","sources":["../../../src/domain/shared/ReadModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,qBAAa,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,OAAO,CAAC,UAAU,CAAC;gBAEP,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM;IAI5D,MAAM,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAItB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAmB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAI1E,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAIlD,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CAI/D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export class ReadModel {
|
|
2
|
+
constructor(eventStore, collectionName) {
|
|
3
|
+
this.collection = eventStore.database.collection(collectionName);
|
|
4
|
+
}
|
|
5
|
+
async getAll() {
|
|
6
|
+
return this.collection.find();
|
|
7
|
+
}
|
|
8
|
+
async getById(id, idField = 'id') {
|
|
9
|
+
return this.collection.findOne((doc) => doc[idField] === id);
|
|
10
|
+
}
|
|
11
|
+
async find(filterFn) {
|
|
12
|
+
return this.collection.find(filterFn);
|
|
13
|
+
}
|
|
14
|
+
async first(filterFn) {
|
|
15
|
+
const all = await this.collection.find(filterFn);
|
|
16
|
+
return all[0] ?? null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=ReadModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadModel.js","sourceRoot":"","sources":["../../../src/domain/shared/ReadModel.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,SAAS;IAGpB,YAAY,UAA8B,EAAE,cAAsB;QAChE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAI,cAAc,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,UAAmB,IAAe;QAC1D,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAA8B;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,QAA8B;QACxC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { InMemoryEventStore } from '@event-driven-io/emmett';
|
|
2
|
+
|
|
3
|
+
export class ReadModel<T extends Record<string, unknown>> {
|
|
4
|
+
private collection;
|
|
5
|
+
|
|
6
|
+
constructor(eventStore: InMemoryEventStore, collectionName: string) {
|
|
7
|
+
this.collection = eventStore.database.collection<T>(collectionName);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
async getAll(): Promise<T[]> {
|
|
11
|
+
return this.collection.find();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async getById(id: string, idField: keyof T = 'id' as keyof T): Promise<T | null> {
|
|
15
|
+
return this.collection.findOne((doc) => doc[idField] === id);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async find(filterFn: (item: T) => boolean): Promise<T[]> {
|
|
19
|
+
return this.collection.find(filterFn);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async first(filterFn: (item: T) => boolean): Promise<T | null> {
|
|
23
|
+
const all = await this.collection.find(filterFn);
|
|
24
|
+
return all[0] ?? null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { CommandSender, type ErrorConstructor, type MessageProcessor } from '@event-driven-io/emmett';
|
|
2
|
+
interface CommandCheck<CommandType> {
|
|
3
|
+
(command: CommandType): boolean;
|
|
4
|
+
}
|
|
5
|
+
interface ErrorCheck<ErrorType> {
|
|
6
|
+
(error: ErrorType): boolean;
|
|
7
|
+
}
|
|
8
|
+
export type ThenThrows<ErrorType extends Error> = (() => void) | ((errorConstructor: ErrorConstructor<ErrorType>) => void) | ((errorCheck: ErrorCheck<ErrorType>) => void) | ((errorConstructor: ErrorConstructor<ErrorType>, errorCheck?: ErrorCheck<ErrorType>) => void);
|
|
9
|
+
interface ReactorSpecificationReturn<Event, Command, Context> {
|
|
10
|
+
when: (event: Event | Event[], context?: Context) => {
|
|
11
|
+
then: (expectedCommand: Command | Command[] | CommandCheck<Command> | CommandCheck<Command[]>) => Promise<void>;
|
|
12
|
+
thenNothingHappened: () => Promise<void>;
|
|
13
|
+
thenThrows: <ErrorType extends Error = Error>(...args: Parameters<ThenThrows<ErrorType>>) => Promise<void>;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export interface ReactorSpecification<Event, Command, Context extends {
|
|
17
|
+
commandSender: CommandSender;
|
|
18
|
+
} = {
|
|
19
|
+
commandSender: CommandSender;
|
|
20
|
+
}> {
|
|
21
|
+
(givenEvents: Event | Event[]): ReactorSpecificationReturn<Event, Command, Context>;
|
|
22
|
+
}
|
|
23
|
+
export declare const ReactorSpecification: {
|
|
24
|
+
for: typeof reactorSpecificationFor;
|
|
25
|
+
};
|
|
26
|
+
type ReactorLike<Event, Context> = {
|
|
27
|
+
handle: (events: Event[], context: Context) => Promise<any>;
|
|
28
|
+
} | {
|
|
29
|
+
eachMessage: (event: Event, context: Context) => Promise<any>;
|
|
30
|
+
} | MessageProcessor<any, any, any>;
|
|
31
|
+
declare function reactorSpecificationFor<Event, Command, Context extends {
|
|
32
|
+
commandSender: CommandSender;
|
|
33
|
+
}>(processorOrReactor: ReactorLike<Event, Context> | (() => ReactorLike<Event, Context>), createContext: (commandSender: CommandSender) => Context): ReactorSpecification<Event, Command, Context>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=reactorSpecification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactorSpecification.d.ts","sourceRoot":"","sources":["../../../src/domain/shared/reactorSpecification.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,KAAK,gBAAgB,EAGrB,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AAEjC,UAAU,YAAY,CAAC,WAAW;IAChC,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;CACjC;AAED,UAAU,UAAU,CAAC,SAAS;IAC5B,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,UAAU,CAAC,SAAS,SAAS,KAAK,IAC1C,CAAC,MAAM,IAAI,CAAC,GACZ,CAAC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,GACzD,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,GAC7C,CAAC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;AAElG,UAAU,0BAA0B,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO;IAC1D,IAAI,EAAE,CACJ,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,EACtB,OAAO,CAAC,EAAE,OAAO,KACd;QACH,IAAI,EAAE,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAChH,mBAAmB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,UAAU,EAAE,CAAC,SAAS,SAAS,KAAK,GAAG,KAAK,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC5G,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB,CACnC,KAAK,EACL,OAAO,EACP,OAAO,SAAS;IAAE,aAAa,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,aAAa,EAAE,aAAa,CAAA;CAAE;IAEnF,CAAC,WAAW,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,0BAA0B,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;CACrF;AAED,eAAO,MAAM,oBAAoB;;CAEhC,CAAC;AAuBF,KAAK,WAAW,CAAC,KAAK,EAAE,OAAO,IAE3B;IAAE,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CAAE,GAE/D;IAAE,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CAAE,GAEjE,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpC,iBAAS,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,SAAS;IAAE,aAAa,EAAE,aAAa,CAAA;CAAE,EAC/F,kBAAkB,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EACrF,aAAa,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,OAAO,GACvD,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CA2H/C"}
|