@hexaijs/plugin-application-builder 0.1.0
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 +278 -0
- package/dist/application-builder-generator.d.ts +15 -0
- package/dist/application-builder-generator.d.ts.map +1 -0
- package/dist/application-builder-generator.js +81 -0
- package/dist/application-builder-generator.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +61 -0
- package/dist/cli.js.map +1 -0
- package/dist/code-generator.d.ts +30 -0
- package/dist/code-generator.d.ts.map +1 -0
- package/dist/code-generator.js +131 -0
- package/dist/code-generator.js.map +1 -0
- package/dist/config-loader.d.ts +3 -0
- package/dist/config-loader.d.ts.map +1 -0
- package/dist/config-loader.js +65 -0
- package/dist/config-loader.js.map +1 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +31 -0
- package/dist/config.js.map +1 -0
- package/dist/decorators/index.d.ts +26 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +37 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/errors.d.ts +13 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +32 -0
- package/dist/errors.js.map +1 -0
- package/dist/hexai-plugin.d.ts +30 -0
- package/dist/hexai-plugin.d.ts.map +1 -0
- package/dist/hexai-plugin.js +81 -0
- package/dist/hexai-plugin.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +6 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +53 -0
- package/dist/main.js.map +1 -0
- package/dist/metadata-extractor.d.ts +25 -0
- package/dist/metadata-extractor.d.ts.map +1 -0
- package/dist/metadata-extractor.js +247 -0
- package/dist/metadata-extractor.js.map +1 -0
- package/dist/test.d.ts +15 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +104 -0
- package/dist/test.js.map +1 -0
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,65 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.loadConfig = loadConfig;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const ts = __importStar(require("typescript"));
|
|
39
|
+
const config_1 = require("./config");
|
|
40
|
+
async function loadConfig(configPath) {
|
|
41
|
+
const configSource = fs.readFileSync(configPath, "utf-8");
|
|
42
|
+
const transpiledCode = transpileConfigFile(configSource);
|
|
43
|
+
const moduleExports = evaluateConfigModule(transpiledCode);
|
|
44
|
+
const rawConfig = extractConfigFromModule(moduleExports);
|
|
45
|
+
return config_1.BuildPluginConfig.fromRawConfig(rawConfig);
|
|
46
|
+
}
|
|
47
|
+
function transpileConfigFile(source) {
|
|
48
|
+
const result = ts.transpileModule(source, {
|
|
49
|
+
compilerOptions: {
|
|
50
|
+
module: ts.ModuleKind.CommonJS,
|
|
51
|
+
target: ts.ScriptTarget.ES2020,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
return result.outputText;
|
|
55
|
+
}
|
|
56
|
+
function evaluateConfigModule(code) {
|
|
57
|
+
const tempModule = { exports: {} };
|
|
58
|
+
const fn = new Function("module", "exports", "require", code);
|
|
59
|
+
fn(tempModule, tempModule.exports, require);
|
|
60
|
+
return tempModule.exports;
|
|
61
|
+
}
|
|
62
|
+
function extractConfigFromModule(moduleExports) {
|
|
63
|
+
return moduleExports.default || moduleExports;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=config-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,gCAMC;AAVD,uCAAyB;AACzB,+CAAiC;AACjC,qCAAmE;AAE5D,KAAK,UAAU,UAAU,CAAC,UAAkB;IAC/C,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,cAAc,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;IACzD,OAAO,0BAAiB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACvC,MAAM,MAAM,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE;QACtC,eAAe,EAAE;YACb,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ;YAC9B,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;SACjC;KACJ,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,UAAU,CAAC;AAC7B,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACtC,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9D,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC,OAAO,CAAC;AAC9B,CAAC;AAED,SAAS,uBAAuB,CAAC,aAAkB;IAC/C,OAAO,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC;AAClD,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface RawBuildPluginConfig {
|
|
2
|
+
handlers: string[];
|
|
3
|
+
outputFile?: string;
|
|
4
|
+
applicationBuilderImportPath: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class BuildPluginConfig {
|
|
7
|
+
readonly handlers: string[];
|
|
8
|
+
readonly outputFile: string;
|
|
9
|
+
readonly applicationBuilderImportPath: string;
|
|
10
|
+
private constructor();
|
|
11
|
+
static fromRawConfig(raw: RawBuildPluginConfig): BuildPluginConfig;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B,EAAE,MAAM,CAAC;CACxC;AAED,qBAAa,iBAAiB;IAC1B,SAAgB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,4BAA4B,EAAE,MAAM,CAAC;IAErD,OAAO;IAUP,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,oBAAoB,GAAG,iBAAiB;CAuBrE"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BuildPluginConfig = void 0;
|
|
4
|
+
class BuildPluginConfig {
|
|
5
|
+
handlers;
|
|
6
|
+
outputFile;
|
|
7
|
+
applicationBuilderImportPath;
|
|
8
|
+
constructor(config) {
|
|
9
|
+
this.handlers = config.handlers;
|
|
10
|
+
this.outputFile = config.outputFile;
|
|
11
|
+
this.applicationBuilderImportPath = config.applicationBuilderImportPath;
|
|
12
|
+
}
|
|
13
|
+
static fromRawConfig(raw) {
|
|
14
|
+
// Validate required fields
|
|
15
|
+
if (!raw.applicationBuilderImportPath) {
|
|
16
|
+
throw new Error("applicationBuilderImportPath is required in hexai.config.ts\n" +
|
|
17
|
+
"Example: { applicationBuilderImportPath: '@/application', ... }");
|
|
18
|
+
}
|
|
19
|
+
if (!raw.handlers || raw.handlers.length === 0) {
|
|
20
|
+
throw new Error("handlers array is required and must not be empty in hexai.config.ts");
|
|
21
|
+
}
|
|
22
|
+
// Provide defaults
|
|
23
|
+
return new BuildPluginConfig({
|
|
24
|
+
handlers: raw.handlers,
|
|
25
|
+
outputFile: raw.outputFile ?? "src/.generated/application-builder.ts",
|
|
26
|
+
applicationBuilderImportPath: raw.applicationBuilderImportPath,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.BuildPluginConfig = BuildPluginConfig;
|
|
31
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAMA,MAAa,iBAAiB;IACV,QAAQ,CAAW;IACnB,UAAU,CAAS;IACnB,4BAA4B,CAAS;IAErD,YAAoB,MAInB;QACG,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,4BAA4B,GAAG,MAAM,CAAC,4BAA4B,CAAC;IAC5E,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,GAAyB;QAC1C,2BAA2B;QAC3B,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACX,+DAA+D;gBAC3D,iEAAiE,CACxE,CAAC;QACN,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACX,qEAAqE,CACxE,CAAC;QACN,CAAC;QAED,mBAAmB;QACnB,OAAO,IAAI,iBAAiB,CAAC;YACzB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,UAAU,EACN,GAAG,CAAC,UAAU,IAAI,uCAAuC;YAC7D,4BAA4B,EAAE,GAAG,CAAC,4BAA4B;SACjE,CAAC,CAAC;IACP,CAAC;CACJ;AAtCD,8CAsCC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { MessageClass } from "@hexaijs/core";
|
|
2
|
+
export interface EventHandlerOptions {
|
|
3
|
+
name?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Decorator to mark a class as a command handler
|
|
7
|
+
* This is purely a marker for build-time code generation
|
|
8
|
+
*/
|
|
9
|
+
export declare const CommandHandlerMarker: (messageClass: MessageClass) => <T extends {
|
|
10
|
+
new (...args: any[]): any;
|
|
11
|
+
}>(target: T) => T;
|
|
12
|
+
/**
|
|
13
|
+
* Decorator to mark a class as a query handler
|
|
14
|
+
* This is purely a marker for build-time code generation
|
|
15
|
+
*/
|
|
16
|
+
export declare const QueryHandlerMarker: (messageClass: MessageClass) => <T extends {
|
|
17
|
+
new (...args: any[]): any;
|
|
18
|
+
}>(target: T) => T;
|
|
19
|
+
/**
|
|
20
|
+
* Decorator to mark a class as an event handler
|
|
21
|
+
* This is purely a marker for build-time code generation
|
|
22
|
+
*/
|
|
23
|
+
export declare function EventHandlerMarker(options?: EventHandlerOptions): <T extends {
|
|
24
|
+
new (...args: any[]): any;
|
|
25
|
+
}>(target: T) => T;
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAeD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,iBAXE,YAAY,MACtB,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;CAAE,EAAE,QAAQ,CAAC,MAUX,CAAC;AAEjE;;;GAGG;AACH,eAAO,MAAM,kBAAkB,iBAjBI,YAAY,MACtB,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;CAAE,EAAE,QAAQ,CAAC,MAgBb,CAAC;AAE/D;;;GAGG;AAEH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,IAC3C,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;CAAE,EAAE,QAAQ,CAAC,OAGtE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QueryHandlerMarker = exports.CommandHandlerMarker = void 0;
|
|
4
|
+
exports.EventHandlerMarker = EventHandlerMarker;
|
|
5
|
+
/**
|
|
6
|
+
* Creates a marker decorator for message handlers (command/query)
|
|
7
|
+
* These are purely markers for build-time code generation with no runtime behavior
|
|
8
|
+
*/
|
|
9
|
+
function createMessageHandlerMarker() {
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
11
|
+
return function (messageClass) {
|
|
12
|
+
return function (target) {
|
|
13
|
+
return target;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Decorator to mark a class as a command handler
|
|
19
|
+
* This is purely a marker for build-time code generation
|
|
20
|
+
*/
|
|
21
|
+
exports.CommandHandlerMarker = createMessageHandlerMarker();
|
|
22
|
+
/**
|
|
23
|
+
* Decorator to mark a class as a query handler
|
|
24
|
+
* This is purely a marker for build-time code generation
|
|
25
|
+
*/
|
|
26
|
+
exports.QueryHandlerMarker = createMessageHandlerMarker();
|
|
27
|
+
/**
|
|
28
|
+
* Decorator to mark a class as an event handler
|
|
29
|
+
* This is purely a marker for build-time code generation
|
|
30
|
+
*/
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
32
|
+
function EventHandlerMarker(options) {
|
|
33
|
+
return function (target) {
|
|
34
|
+
return target;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":";;;AAoCA,gDAIC;AAlCD;;;GAGG;AACH,SAAS,0BAA0B;IAC/B,6DAA6D;IAC7D,OAAO,UAAU,YAA0B;QACvC,OAAO,UAAmD,MAAS;YAC/D,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC;IACN,CAAC,CAAC;AACN,CAAC;AAED;;;GAGG;AACU,QAAA,oBAAoB,GAAG,0BAA0B,EAAE,CAAC;AAEjE;;;GAGG;AACU,QAAA,kBAAkB,GAAG,0BAA0B,EAAE,CAAC;AAE/D;;;GAGG;AACH,6DAA6D;AAC7D,SAAgB,kBAAkB,CAAC,OAA6B;IAC5D,OAAO,UAAmD,MAAS;QAC/D,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;AACN,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class DuplicateCommandHandlerError extends Error {
|
|
2
|
+
constructor(commandClassName: string, handlers: string[]);
|
|
3
|
+
}
|
|
4
|
+
export declare class DuplicateEventHandlerError extends Error {
|
|
5
|
+
constructor(eventName: string, handlers: string[]);
|
|
6
|
+
}
|
|
7
|
+
export declare class DuplicateQueryHandlerError extends Error {
|
|
8
|
+
constructor(queryClassName: string, handlers: string[]);
|
|
9
|
+
}
|
|
10
|
+
export declare class MessageClassNotFoundError extends Error {
|
|
11
|
+
constructor(messageClassName: string, filePath: string);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,4BAA6B,SAAQ,KAAK;gBACvC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;CAM3D;AAED,qBAAa,0BAA2B,SAAQ,KAAK;gBACrC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;CAMpD;AAED,qBAAa,0BAA2B,SAAQ,KAAK;gBACrC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;CAMzD;AAED,qBAAa,yBAA0B,SAAQ,KAAK;gBACpC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAMzD"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessageClassNotFoundError = exports.DuplicateQueryHandlerError = exports.DuplicateEventHandlerError = exports.DuplicateCommandHandlerError = void 0;
|
|
4
|
+
class DuplicateCommandHandlerError extends Error {
|
|
5
|
+
constructor(commandClassName, handlers) {
|
|
6
|
+
super(`Duplicate command handlers for "${commandClassName}": ${handlers.join(", ")}`);
|
|
7
|
+
this.name = "DuplicateCommandHandlerError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.DuplicateCommandHandlerError = DuplicateCommandHandlerError;
|
|
11
|
+
class DuplicateEventHandlerError extends Error {
|
|
12
|
+
constructor(eventName, handlers) {
|
|
13
|
+
super(`Duplicate event handlers for event "${eventName}": ${handlers.join(", ")}`);
|
|
14
|
+
this.name = "DuplicateEventHandlerError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.DuplicateEventHandlerError = DuplicateEventHandlerError;
|
|
18
|
+
class DuplicateQueryHandlerError extends Error {
|
|
19
|
+
constructor(queryClassName, handlers) {
|
|
20
|
+
super(`Duplicate query handlers for "${queryClassName}": ${handlers.join(", ")}`);
|
|
21
|
+
this.name = "DuplicateQueryHandlerError";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.DuplicateQueryHandlerError = DuplicateQueryHandlerError;
|
|
25
|
+
class MessageClassNotFoundError extends Error {
|
|
26
|
+
constructor(messageClassName, filePath) {
|
|
27
|
+
super(`Cannot find "${messageClassName}" - not imported and not defined in "${filePath}"`);
|
|
28
|
+
this.name = "MessageClassNotFoundError";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.MessageClassNotFoundError = MessageClassNotFoundError;
|
|
32
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,4BAA6B,SAAQ,KAAK;IACnD,YAAY,gBAAwB,EAAE,QAAkB;QACpD,KAAK,CACD,mCAAmC,gBAAgB,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC/C,CAAC;CACJ;AAPD,oEAOC;AAED,MAAa,0BAA2B,SAAQ,KAAK;IACjD,YAAY,SAAiB,EAAE,QAAkB;QAC7C,KAAK,CACD,uCAAuC,SAAS,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9E,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC7C,CAAC;CACJ;AAPD,gEAOC;AAED,MAAa,0BAA2B,SAAQ,KAAK;IACjD,YAAY,cAAsB,EAAE,QAAkB;QAClD,KAAK,CACD,iCAAiC,cAAc,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7E,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC7C,CAAC;CACJ;AAPD,gEAOC;AAED,MAAa,yBAA0B,SAAQ,KAAK;IAChD,YAAY,gBAAwB,EAAE,QAAgB;QAClD,KAAK,CACD,gBAAgB,gBAAgB,wCAAwC,QAAQ,GAAG,CACtF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC5C,CAAC;CACJ;AAPD,8DAOC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { HexaiCliPlugin } from "@hexaijs/cli";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for the application-builder plugin.
|
|
4
|
+
* Since this plugin uses per-context config files (hexai.config.ts),
|
|
5
|
+
* the root hexai.config.ts config is minimal.
|
|
6
|
+
*/
|
|
7
|
+
export interface ApplicationBuilderPluginConfig {
|
|
8
|
+
/**
|
|
9
|
+
* Default config file name to look for in each context.
|
|
10
|
+
* Defaults to "hexai.config.ts".
|
|
11
|
+
*/
|
|
12
|
+
configFile?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* CLI plugin definition for hexai integration.
|
|
16
|
+
*
|
|
17
|
+
* This allows the application builder to be invoked via `pnpm hexai generate-app-builder`.
|
|
18
|
+
* Each bounded context should have its own `hexai.config.ts` file.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```bash
|
|
22
|
+
* # Generate for a specific context
|
|
23
|
+
* pnpm hexai generate-app-builder --context-path packages/assignment
|
|
24
|
+
*
|
|
25
|
+
* # Use a custom config file name
|
|
26
|
+
* pnpm hexai generate-app-builder --context-path packages/assignment --config-file custom.config.ts
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare const cliPlugin: HexaiCliPlugin<ApplicationBuilderPluginConfig>;
|
|
30
|
+
//# sourceMappingURL=hexai-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hexai-plugin.d.ts","sourceRoot":"","sources":["../src/hexai-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,cAAc,CAAC;AAI9D;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC3C;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,EAAE,cAAc,CAAC,8BAA8B,CAkCpE,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.cliPlugin = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const index_1 = require("./index");
|
|
39
|
+
/**
|
|
40
|
+
* CLI plugin definition for hexai integration.
|
|
41
|
+
*
|
|
42
|
+
* This allows the application builder to be invoked via `pnpm hexai generate-app-builder`.
|
|
43
|
+
* Each bounded context should have its own `hexai.config.ts` file.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```bash
|
|
47
|
+
* # Generate for a specific context
|
|
48
|
+
* pnpm hexai generate-app-builder --context-path packages/assignment
|
|
49
|
+
*
|
|
50
|
+
* # Use a custom config file name
|
|
51
|
+
* pnpm hexai generate-app-builder --context-path packages/assignment --config-file custom.config.ts
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
exports.cliPlugin = {
|
|
55
|
+
name: "generate-app-builder",
|
|
56
|
+
description: "Generate ApplicationBuilder code from decorated handlers",
|
|
57
|
+
options: [
|
|
58
|
+
{
|
|
59
|
+
flags: "-p, --context-path <path>",
|
|
60
|
+
description: "Path to the bounded context directory",
|
|
61
|
+
required: true,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
flags: "-f, --config-file <name>",
|
|
65
|
+
description: "Config file name to use (default: hexai.config.ts)",
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
run: async (args, config) => {
|
|
69
|
+
const contextPath = path.resolve(String(args.contextPath));
|
|
70
|
+
// Priority: CLI arg > hexai.config.ts plugin config > default
|
|
71
|
+
const configFile = args.configFile !== undefined
|
|
72
|
+
? String(args.configFile)
|
|
73
|
+
: config.configFile;
|
|
74
|
+
console.log(`Generating application builder for: ${contextPath}`);
|
|
75
|
+
await (0, index_1.generateApplicationBuilder)(contextPath, {
|
|
76
|
+
configFile,
|
|
77
|
+
});
|
|
78
|
+
console.log("✓ Application builder generated successfully");
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=hexai-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hexai-plugin.js","sourceRoot":"","sources":["../src/hexai-plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,2CAA6B;AAC7B,mCAAqD;AAerD;;;;;;;;;;;;;;GAcG;AACU,QAAA,SAAS,GAAmD;IACrE,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,0DAA0D;IACvE,OAAO,EAAE;QACL;YACI,KAAK,EAAE,2BAA2B;YAClC,WAAW,EAAE,uCAAuC;YACpD,QAAQ,EAAE,IAAI;SACjB;QACD;YACI,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,oDAAoD;SACpE;KACkB;IACvB,GAAG,EAAE,KAAK,EACN,IAA6B,EAC7B,MAAsC,EACzB,EAAE;QACf,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAE3D,8DAA8D;QAC9D,MAAM,UAAU,GACZ,IAAI,CAAC,UAAU,KAAK,SAAS;YACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YACzB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QAE5B,OAAO,CAAC,GAAG,CAAC,uCAAuC,WAAW,EAAE,CAAC,CAAC;QAElE,MAAM,IAAA,kCAA0B,EAAC,WAAW,EAAE;YAC1C,UAAU;SACb,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAChE,CAAC;CACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { generateApplicationBuilder } from "./main";
|
|
2
|
+
export { CommandHandlerMarker, EventHandlerMarker, QueryHandlerMarker, type EventHandlerOptions, } from "./decorators";
|
|
3
|
+
export { DuplicateCommandHandlerError, DuplicateEventHandlerError, DuplicateQueryHandlerError, } from "./errors";
|
|
4
|
+
export { cliPlugin, type ApplicationBuilderPluginConfig } from "./hexai-plugin";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EACH,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,mBAAmB,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EACH,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,GAC7B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,KAAK,8BAA8B,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cliPlugin = exports.DuplicateQueryHandlerError = exports.DuplicateEventHandlerError = exports.DuplicateCommandHandlerError = exports.QueryHandlerMarker = exports.EventHandlerMarker = exports.CommandHandlerMarker = exports.generateApplicationBuilder = void 0;
|
|
4
|
+
var main_1 = require("./main");
|
|
5
|
+
Object.defineProperty(exports, "generateApplicationBuilder", { enumerable: true, get: function () { return main_1.generateApplicationBuilder; } });
|
|
6
|
+
var decorators_1 = require("./decorators");
|
|
7
|
+
Object.defineProperty(exports, "CommandHandlerMarker", { enumerable: true, get: function () { return decorators_1.CommandHandlerMarker; } });
|
|
8
|
+
Object.defineProperty(exports, "EventHandlerMarker", { enumerable: true, get: function () { return decorators_1.EventHandlerMarker; } });
|
|
9
|
+
Object.defineProperty(exports, "QueryHandlerMarker", { enumerable: true, get: function () { return decorators_1.QueryHandlerMarker; } });
|
|
10
|
+
var errors_1 = require("./errors");
|
|
11
|
+
Object.defineProperty(exports, "DuplicateCommandHandlerError", { enumerable: true, get: function () { return errors_1.DuplicateCommandHandlerError; } });
|
|
12
|
+
Object.defineProperty(exports, "DuplicateEventHandlerError", { enumerable: true, get: function () { return errors_1.DuplicateEventHandlerError; } });
|
|
13
|
+
Object.defineProperty(exports, "DuplicateQueryHandlerError", { enumerable: true, get: function () { return errors_1.DuplicateQueryHandlerError; } });
|
|
14
|
+
var hexai_plugin_1 = require("./hexai-plugin");
|
|
15
|
+
Object.defineProperty(exports, "cliPlugin", { enumerable: true, get: function () { return hexai_plugin_1.cliPlugin; } });
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+BAAoD;AAA3C,kHAAA,0BAA0B,OAAA;AACnC,2CAKsB;AAJlB,kHAAA,oBAAoB,OAAA;AACpB,gHAAA,kBAAkB,OAAA;AAClB,gHAAA,kBAAkB,OAAA;AAGtB,mCAIkB;AAHd,sHAAA,4BAA4B,OAAA;AAC5B,oHAAA,0BAA0B,OAAA;AAC1B,oHAAA,0BAA0B,OAAA;AAE9B,+CAAgF;AAAvE,yGAAA,SAAS,OAAA"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { HandlerMetadata, CommandHandlerMetadata, EventHandlerMetadata, } from "./types";
|
|
2
|
+
export { HandlerMetadataExtractor } from "./metadata-extractor";
|
|
3
|
+
export declare function generateApplicationBuilder(contextPath: string, options?: {
|
|
4
|
+
configFile?: string;
|
|
5
|
+
}): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAKA,YAAY,EACR,eAAe,EACf,sBAAsB,EACtB,oBAAoB,GACvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,wBAAsB,0BAA0B,CAC5C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACL,UAAU,CAAC,EAAE,MAAM,CAAC;CAClB,GACP,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.HandlerMetadataExtractor = void 0;
|
|
37
|
+
exports.generateApplicationBuilder = generateApplicationBuilder;
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const application_builder_generator_1 = require("./application-builder-generator");
|
|
40
|
+
const config_loader_1 = require("./config-loader");
|
|
41
|
+
var metadata_extractor_1 = require("./metadata-extractor");
|
|
42
|
+
Object.defineProperty(exports, "HandlerMetadataExtractor", { enumerable: true, get: function () { return metadata_extractor_1.HandlerMetadataExtractor; } });
|
|
43
|
+
async function generateApplicationBuilder(contextPath, options = {}) {
|
|
44
|
+
let configFile = "hexai.config.ts";
|
|
45
|
+
if (options.configFile) {
|
|
46
|
+
configFile = options.configFile;
|
|
47
|
+
}
|
|
48
|
+
const configPath = path.join(contextPath, configFile);
|
|
49
|
+
const config = await (0, config_loader_1.loadConfig)(configPath);
|
|
50
|
+
const generator = new application_builder_generator_1.ApplicationBuilderGenerator(contextPath, config);
|
|
51
|
+
await generator.generate();
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,gEAgBC;AA5BD,2CAA6B;AAC7B,mFAA8E;AAC9E,mDAA6C;AAQ7C,2DAAgE;AAAvD,8HAAA,wBAAwB,OAAA;AAE1B,KAAK,UAAU,0BAA0B,CAC5C,WAAmB,EACnB,UAEI,EAAE;IAEN,IAAI,UAAU,GAAG,iBAAiB,CAAC;IACnC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACrB,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACpC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAU,EAAC,UAAU,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,IAAI,2DAA2B,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACvE,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { HandlerMetadata } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Extracts handler metadata from TypeScript files using AST parsing
|
|
4
|
+
*/
|
|
5
|
+
export declare class HandlerMetadataExtractor {
|
|
6
|
+
private contextPath;
|
|
7
|
+
private outputFile;
|
|
8
|
+
private config;
|
|
9
|
+
constructor(contextPath: string, outputFile: string, config?: {
|
|
10
|
+
commandHandlerDecorator?: string;
|
|
11
|
+
eventHandlerDecorator?: string;
|
|
12
|
+
});
|
|
13
|
+
extractHandlersMetadata(files: string[]): HandlerMetadata[];
|
|
14
|
+
private extractFromClass;
|
|
15
|
+
private extractMessageHandlerMetadata;
|
|
16
|
+
private isClassDefinedInFile;
|
|
17
|
+
private extractCommandHandlerMetadata;
|
|
18
|
+
private extractEventHandlerMetadata;
|
|
19
|
+
private extractQueryHandlerMetadata;
|
|
20
|
+
private findImportForSymbol;
|
|
21
|
+
private toRelativeImport;
|
|
22
|
+
private parseObjectLiteral;
|
|
23
|
+
private resolvePathAlias;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=metadata-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-extractor.d.ts","sourceRoot":"","sources":["../src/metadata-extractor.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,eAAe,EAIlB,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,qBAAa,wBAAwB;IAU7B,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IAVtB,OAAO,CAAC,MAAM,CAMZ;gBAGU,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAC1B,MAAM,GAAE;QACJ,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAC7B;IAWV,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE;IA6B3D,OAAO,CAAC,gBAAgB;IAkDxB,OAAO,CAAC,6BAA6B;IAqCrC,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,6BAA6B;IAsBrC,OAAO,CAAC,2BAA2B;IAmBnC,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,mBAAmB;IA8B3B,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,gBAAgB;CAqB3B"}
|