@ironbackend/core 1.0.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.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.d.ts +33 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +123 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/rules/index.d.ts +36 -0
  7. package/dist/rules/index.d.ts.map +1 -0
  8. package/dist/rules/index.js +505 -0
  9. package/dist/rules/index.js.map +1 -0
  10. package/dist/security/index.d.ts +15 -0
  11. package/dist/security/index.d.ts.map +1 -0
  12. package/dist/security/index.js +243 -0
  13. package/dist/security/index.js.map +1 -0
  14. package/dist/stacks/index.d.ts +38 -0
  15. package/dist/stacks/index.d.ts.map +1 -0
  16. package/dist/stacks/index.js +193 -0
  17. package/dist/stacks/index.js.map +1 -0
  18. package/dist/styles/clean-monolith.d.ts +7 -0
  19. package/dist/styles/clean-monolith.d.ts.map +1 -0
  20. package/dist/styles/clean-monolith.js +124 -0
  21. package/dist/styles/clean-monolith.js.map +1 -0
  22. package/dist/styles/event-driven.d.ts +12 -0
  23. package/dist/styles/event-driven.d.ts.map +1 -0
  24. package/dist/styles/event-driven.js +247 -0
  25. package/dist/styles/event-driven.js.map +1 -0
  26. package/dist/styles/hexagonal.d.ts +7 -0
  27. package/dist/styles/hexagonal.d.ts.map +1 -0
  28. package/dist/styles/hexagonal.js +146 -0
  29. package/dist/styles/hexagonal.js.map +1 -0
  30. package/dist/styles/index.d.ts +33 -0
  31. package/dist/styles/index.d.ts.map +1 -0
  32. package/dist/styles/index.js +75 -0
  33. package/dist/styles/index.js.map +1 -0
  34. package/dist/styles/microservices.d.ts +12 -0
  35. package/dist/styles/microservices.d.ts.map +1 -0
  36. package/dist/styles/microservices.js +218 -0
  37. package/dist/styles/microservices.js.map +1 -0
  38. package/dist/styles/modular-monolith.d.ts +7 -0
  39. package/dist/styles/modular-monolith.d.ts.map +1 -0
  40. package/dist/styles/modular-monolith.js +131 -0
  41. package/dist/styles/modular-monolith.js.map +1 -0
  42. package/dist/styles/specialized.d.ts +17 -0
  43. package/dist/styles/specialized.d.ts.map +1 -0
  44. package/dist/styles/specialized.js +379 -0
  45. package/dist/styles/specialized.js.map +1 -0
  46. package/dist/types.d.ts +143 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +7 -0
  49. package/dist/types.js.map +1 -0
  50. package/package.json +56 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 IronBackend Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @ironbackend/core
3
+ * Backend Architecture Intelligence for AI Coding Assistants
4
+ *
5
+ * This package provides:
6
+ * - Architecture style definitions
7
+ * - Tech stack presets
8
+ * - Design rules database
9
+ * - Security & reliability playbooks
10
+ */
11
+ export * from './types.js';
12
+ export * as styles from './styles/index.js';
13
+ export { getStyle, getStyleIds, findStyles, cleanMonolith, modularMonolith, hexagonal, eventDriven, cqrs, microservicesSync, microservicesAsync, serverless, readHeavy, automation, } from './styles/index.js';
14
+ export * as stacks from './stacks/index.js';
15
+ export { getStack, getStackIds, findStacksByLanguage, nodeNestjs, javaSpring, dotnetAspnetcore, pythonFastapi, } from './stacks/index.js';
16
+ export * as rules from './rules/index.js';
17
+ export { allRules, rulesByCategory, getRulesByCategory, getRule, getErrorRules, getWarnRules, formatRulesForPrompt, apiRules, domainRules, errorHandlingRules, transactionRules, dataAccessRules, namingRules, validationRules, asyncRules, } from './rules/index.js';
18
+ export * as security from './security/index.js';
19
+ export { securityPlaybook, authStrategies, getAuthStrategy, formatSecurityForPrompt, } from './security/index.js';
20
+ /**
21
+ * IronBackend version
22
+ */
23
+ export declare const VERSION = "1.0.0";
24
+ /**
25
+ * Quick access to all data
26
+ */
27
+ export declare function getAllData(): {
28
+ styles: Record<string, import("./types.js").ArchitectureStyle>;
29
+ stacks: Record<string, import("./types.js").TechStack>;
30
+ rules: import("./types.js").DesignRule[];
31
+ security: import("./types.js").SecurityPlaybook;
32
+ };
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EACH,QAAQ,EACR,WAAW,EACX,UAAU,EACV,aAAa,EACb,eAAe,EACf,SAAS,EACT,WAAW,EACX,IAAI,EACJ,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,SAAS,EACT,UAAU,GACb,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EACH,QAAQ,EACR,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,aAAa,GAChB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EACH,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,eAAe,EACf,UAAU,GACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,EACH,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,uBAAuB,GAC1B,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,eAAO,MAAM,OAAO,UAAU,CAAC;AAO/B;;GAEG;AACH,wBAAgB,UAAU;;;;;EAOzB"}
package/dist/index.js ADDED
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ /**
3
+ * @ironbackend/core
4
+ * Backend Architecture Intelligence for AI Coding Assistants
5
+ *
6
+ * This package provides:
7
+ * - Architecture style definitions
8
+ * - Tech stack presets
9
+ * - Design rules database
10
+ * - Security & reliability playbooks
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
29
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
30
+ };
31
+ var __importStar = (this && this.__importStar) || (function () {
32
+ var ownKeys = function(o) {
33
+ ownKeys = Object.getOwnPropertyNames || function (o) {
34
+ var ar = [];
35
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
+ return ar;
37
+ };
38
+ return ownKeys(o);
39
+ };
40
+ return function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ })();
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.VERSION = exports.formatSecurityForPrompt = exports.getAuthStrategy = exports.authStrategies = exports.securityPlaybook = exports.security = exports.asyncRules = exports.validationRules = exports.namingRules = exports.dataAccessRules = exports.transactionRules = exports.errorHandlingRules = exports.domainRules = exports.apiRules = exports.formatRulesForPrompt = exports.getWarnRules = exports.getErrorRules = exports.getRule = exports.getRulesByCategory = exports.rulesByCategory = exports.allRules = exports.rules = exports.pythonFastapi = exports.dotnetAspnetcore = exports.javaSpring = exports.nodeNestjs = exports.findStacksByLanguage = exports.getStackIds = exports.getStack = exports.stacks = exports.automation = exports.readHeavy = exports.serverless = exports.microservicesAsync = exports.microservicesSync = exports.cqrs = exports.eventDriven = exports.hexagonal = exports.modularMonolith = exports.cleanMonolith = exports.findStyles = exports.getStyleIds = exports.getStyle = exports.styles = void 0;
50
+ exports.getAllData = getAllData;
51
+ // Types
52
+ __exportStar(require("./types.js"), exports);
53
+ // Architecture Styles
54
+ exports.styles = __importStar(require("./styles/index.js"));
55
+ var index_js_1 = require("./styles/index.js");
56
+ Object.defineProperty(exports, "getStyle", { enumerable: true, get: function () { return index_js_1.getStyle; } });
57
+ Object.defineProperty(exports, "getStyleIds", { enumerable: true, get: function () { return index_js_1.getStyleIds; } });
58
+ Object.defineProperty(exports, "findStyles", { enumerable: true, get: function () { return index_js_1.findStyles; } });
59
+ Object.defineProperty(exports, "cleanMonolith", { enumerable: true, get: function () { return index_js_1.cleanMonolith; } });
60
+ Object.defineProperty(exports, "modularMonolith", { enumerable: true, get: function () { return index_js_1.modularMonolith; } });
61
+ Object.defineProperty(exports, "hexagonal", { enumerable: true, get: function () { return index_js_1.hexagonal; } });
62
+ Object.defineProperty(exports, "eventDriven", { enumerable: true, get: function () { return index_js_1.eventDriven; } });
63
+ Object.defineProperty(exports, "cqrs", { enumerable: true, get: function () { return index_js_1.cqrs; } });
64
+ Object.defineProperty(exports, "microservicesSync", { enumerable: true, get: function () { return index_js_1.microservicesSync; } });
65
+ Object.defineProperty(exports, "microservicesAsync", { enumerable: true, get: function () { return index_js_1.microservicesAsync; } });
66
+ Object.defineProperty(exports, "serverless", { enumerable: true, get: function () { return index_js_1.serverless; } });
67
+ Object.defineProperty(exports, "readHeavy", { enumerable: true, get: function () { return index_js_1.readHeavy; } });
68
+ Object.defineProperty(exports, "automation", { enumerable: true, get: function () { return index_js_1.automation; } });
69
+ // Tech Stacks
70
+ exports.stacks = __importStar(require("./stacks/index.js"));
71
+ var index_js_2 = require("./stacks/index.js");
72
+ Object.defineProperty(exports, "getStack", { enumerable: true, get: function () { return index_js_2.getStack; } });
73
+ Object.defineProperty(exports, "getStackIds", { enumerable: true, get: function () { return index_js_2.getStackIds; } });
74
+ Object.defineProperty(exports, "findStacksByLanguage", { enumerable: true, get: function () { return index_js_2.findStacksByLanguage; } });
75
+ Object.defineProperty(exports, "nodeNestjs", { enumerable: true, get: function () { return index_js_2.nodeNestjs; } });
76
+ Object.defineProperty(exports, "javaSpring", { enumerable: true, get: function () { return index_js_2.javaSpring; } });
77
+ Object.defineProperty(exports, "dotnetAspnetcore", { enumerable: true, get: function () { return index_js_2.dotnetAspnetcore; } });
78
+ Object.defineProperty(exports, "pythonFastapi", { enumerable: true, get: function () { return index_js_2.pythonFastapi; } });
79
+ // Design Rules
80
+ exports.rules = __importStar(require("./rules/index.js"));
81
+ var index_js_3 = require("./rules/index.js");
82
+ Object.defineProperty(exports, "allRules", { enumerable: true, get: function () { return index_js_3.allRules; } });
83
+ Object.defineProperty(exports, "rulesByCategory", { enumerable: true, get: function () { return index_js_3.rulesByCategory; } });
84
+ Object.defineProperty(exports, "getRulesByCategory", { enumerable: true, get: function () { return index_js_3.getRulesByCategory; } });
85
+ Object.defineProperty(exports, "getRule", { enumerable: true, get: function () { return index_js_3.getRule; } });
86
+ Object.defineProperty(exports, "getErrorRules", { enumerable: true, get: function () { return index_js_3.getErrorRules; } });
87
+ Object.defineProperty(exports, "getWarnRules", { enumerable: true, get: function () { return index_js_3.getWarnRules; } });
88
+ Object.defineProperty(exports, "formatRulesForPrompt", { enumerable: true, get: function () { return index_js_3.formatRulesForPrompt; } });
89
+ Object.defineProperty(exports, "apiRules", { enumerable: true, get: function () { return index_js_3.apiRules; } });
90
+ Object.defineProperty(exports, "domainRules", { enumerable: true, get: function () { return index_js_3.domainRules; } });
91
+ Object.defineProperty(exports, "errorHandlingRules", { enumerable: true, get: function () { return index_js_3.errorHandlingRules; } });
92
+ Object.defineProperty(exports, "transactionRules", { enumerable: true, get: function () { return index_js_3.transactionRules; } });
93
+ Object.defineProperty(exports, "dataAccessRules", { enumerable: true, get: function () { return index_js_3.dataAccessRules; } });
94
+ Object.defineProperty(exports, "namingRules", { enumerable: true, get: function () { return index_js_3.namingRules; } });
95
+ Object.defineProperty(exports, "validationRules", { enumerable: true, get: function () { return index_js_3.validationRules; } });
96
+ Object.defineProperty(exports, "asyncRules", { enumerable: true, get: function () { return index_js_3.asyncRules; } });
97
+ // Security
98
+ exports.security = __importStar(require("./security/index.js"));
99
+ var index_js_4 = require("./security/index.js");
100
+ Object.defineProperty(exports, "securityPlaybook", { enumerable: true, get: function () { return index_js_4.securityPlaybook; } });
101
+ Object.defineProperty(exports, "authStrategies", { enumerable: true, get: function () { return index_js_4.authStrategies; } });
102
+ Object.defineProperty(exports, "getAuthStrategy", { enumerable: true, get: function () { return index_js_4.getAuthStrategy; } });
103
+ Object.defineProperty(exports, "formatSecurityForPrompt", { enumerable: true, get: function () { return index_js_4.formatSecurityForPrompt; } });
104
+ /**
105
+ * IronBackend version
106
+ */
107
+ exports.VERSION = '1.0.0';
108
+ const _styles = __importStar(require("./styles/index.js"));
109
+ const _stacks = __importStar(require("./stacks/index.js"));
110
+ const _rules = __importStar(require("./rules/index.js"));
111
+ const _security = __importStar(require("./security/index.js"));
112
+ /**
113
+ * Quick access to all data
114
+ */
115
+ function getAllData() {
116
+ return {
117
+ styles: _styles.styles,
118
+ stacks: _stacks.stacks,
119
+ rules: _rules.allRules,
120
+ security: _security.securityPlaybook,
121
+ };
122
+ }
123
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6EH,gCAOC;AAlFD,QAAQ;AACR,6CAA2B;AAE3B,sBAAsB;AACtB,4DAA4C;AAC5C,8CAc2B;AAbvB,oGAAA,QAAQ,OAAA;AACR,uGAAA,WAAW,OAAA;AACX,sGAAA,UAAU,OAAA;AACV,yGAAA,aAAa,OAAA;AACb,2GAAA,eAAe,OAAA;AACf,qGAAA,SAAS,OAAA;AACT,uGAAA,WAAW,OAAA;AACX,gGAAA,IAAI,OAAA;AACJ,6GAAA,iBAAiB,OAAA;AACjB,8GAAA,kBAAkB,OAAA;AAClB,sGAAA,UAAU,OAAA;AACV,qGAAA,SAAS,OAAA;AACT,sGAAA,UAAU,OAAA;AAGd,cAAc;AACd,4DAA4C;AAC5C,8CAQ2B;AAPvB,oGAAA,QAAQ,OAAA;AACR,uGAAA,WAAW,OAAA;AACX,gHAAA,oBAAoB,OAAA;AACpB,sGAAA,UAAU,OAAA;AACV,sGAAA,UAAU,OAAA;AACV,4GAAA,gBAAgB,OAAA;AAChB,yGAAA,aAAa,OAAA;AAGjB,eAAe;AACf,0DAA0C;AAC1C,6CAgB0B;AAftB,oGAAA,QAAQ,OAAA;AACR,2GAAA,eAAe,OAAA;AACf,8GAAA,kBAAkB,OAAA;AAClB,mGAAA,OAAO,OAAA;AACP,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AACZ,gHAAA,oBAAoB,OAAA;AACpB,oGAAA,QAAQ,OAAA;AACR,uGAAA,WAAW,OAAA;AACX,8GAAA,kBAAkB,OAAA;AAClB,4GAAA,gBAAgB,OAAA;AAChB,2GAAA,eAAe,OAAA;AACf,uGAAA,WAAW,OAAA;AACX,2GAAA,eAAe,OAAA;AACf,sGAAA,UAAU,OAAA;AAGd,WAAW;AACX,gEAAgD;AAChD,gDAK6B;AAJzB,4GAAA,gBAAgB,OAAA;AAChB,0GAAA,cAAc,OAAA;AACd,2GAAA,eAAe,OAAA;AACf,mHAAA,uBAAuB,OAAA;AAG3B;;GAEG;AACU,QAAA,OAAO,GAAG,OAAO,CAAC;AAE/B,2DAA6C;AAC7C,2DAA6C;AAC7C,yDAA2C;AAC3C,+DAAiD;AAEjD;;GAEG;AACH,SAAgB,UAAU;IACtB,OAAO;QACH,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,MAAM,CAAC,QAAQ;QACtB,QAAQ,EAAE,SAAS,CAAC,gBAAgB;KACvC,CAAC;AACN,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * IronBackend Design Rules
3
+ * Enforceable rules for backend development
4
+ */
5
+ import type { DesignRule, RuleCategory } from '../types.js';
6
+ export declare const apiRules: DesignRule[];
7
+ export declare const domainRules: DesignRule[];
8
+ export declare const errorHandlingRules: DesignRule[];
9
+ export declare const transactionRules: DesignRule[];
10
+ export declare const dataAccessRules: DesignRule[];
11
+ export declare const namingRules: DesignRule[];
12
+ export declare const validationRules: DesignRule[];
13
+ export declare const asyncRules: DesignRule[];
14
+ export declare const allRules: DesignRule[];
15
+ export declare const rulesByCategory: Record<RuleCategory, DesignRule[]>;
16
+ /**
17
+ * Get rules by category
18
+ */
19
+ export declare function getRulesByCategory(category: RuleCategory): DesignRule[];
20
+ /**
21
+ * Get rule by ID
22
+ */
23
+ export declare function getRule(id: string): DesignRule | undefined;
24
+ /**
25
+ * Get all ERROR severity rules
26
+ */
27
+ export declare function getErrorRules(): DesignRule[];
28
+ /**
29
+ * Get all WARN severity rules
30
+ */
31
+ export declare function getWarnRules(): DesignRule[];
32
+ /**
33
+ * Format rules for AI prompt
34
+ */
35
+ export declare function formatRulesForPrompt(rules: DesignRule[]): string;
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM5D,eAAO,MAAM,QAAQ,EAAE,UAAU,EAuEhC,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,UAAU,EAyDnC,CAAC;AAMF,eAAO,MAAM,kBAAkB,EAAE,UAAU,EAyD1C,CAAC;AAMF,eAAO,MAAM,gBAAgB,EAAE,UAAU,EA2CxC,CAAC;AAMF,eAAO,MAAM,eAAe,EAAE,UAAU,EAkDvC,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,UAAU,EAkDnC,CAAC;AAMF,eAAO,MAAM,eAAe,EAAE,UAAU,EAoCvC,CAAC;AAMF,eAAO,MAAM,UAAU,EAAE,UAAU,EA2ClC,CAAC;AAMF,eAAO,MAAM,QAAQ,EAAE,UAAU,EAShC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,CAS9D,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,EAAE,CAEvE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE1D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,EAAE,CAE5C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,UAAU,EAAE,CAE3C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAIhE"}