@open-rlb/nestjs-amqp 1.0.14 → 1.0.15

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 (79) hide show
  1. package/modules/broker/index.d.ts +2 -0
  2. package/modules/broker/index.js +2 -0
  3. package/modules/broker/index.js.map +1 -1
  4. package/package.json +14 -5
  5. package/schematics/collection.json +10 -0
  6. package/schematics/defaults.d.ts +14 -0
  7. package/schematics/defaults.js +18 -0
  8. package/schematics/defaults.js.map +1 -0
  9. package/schematics/defaults.ts +14 -0
  10. package/schematics/nest-add/index.d.ts +3 -0
  11. package/schematics/nest-add/index.js +315 -0
  12. package/schematics/nest-add/index.js.map +1 -0
  13. package/schematics/nest-add/index.ts +440 -0
  14. package/schematics/nest-add/init.schema.d.ts +15 -0
  15. package/schematics/nest-add/init.schema.js +3 -0
  16. package/schematics/nest-add/init.schema.js.map +1 -0
  17. package/schematics/nest-add/init.schema.ts +52 -0
  18. package/schematics/nest-add/schema.d.ts +5 -0
  19. package/schematics/nest-add/schema.js +3 -0
  20. package/schematics/nest-add/schema.js.map +1 -0
  21. package/schematics/nest-add/schema.json +20 -0
  22. package/schematics/nest-add/schema.ts +9 -0
  23. package/schematics/utils/dependencies.utils.d.ts +15 -0
  24. package/schematics/utils/dependencies.utils.js +43 -0
  25. package/schematics/utils/dependencies.utils.js.map +1 -0
  26. package/schematics/utils/dependencies.utils.ts +61 -0
  27. package/schematics/utils/formatting.d.ts +2 -0
  28. package/schematics/utils/formatting.js +23 -0
  29. package/schematics/utils/formatting.js.map +1 -0
  30. package/schematics/utils/formatting.spec.ts +45 -0
  31. package/schematics/utils/formatting.ts +31 -0
  32. package/schematics/utils/index.d.ts +9 -0
  33. package/schematics/utils/index.js +26 -0
  34. package/schematics/utils/index.js.map +1 -0
  35. package/schematics/utils/index.ts +9 -0
  36. package/schematics/utils/json-file.util.d.ts +15 -0
  37. package/schematics/utils/json-file.util.js +69 -0
  38. package/schematics/utils/json-file.util.js.map +1 -0
  39. package/schematics/utils/json-file.util.ts +100 -0
  40. package/schematics/utils/metadata.manager.d.ts +13 -0
  41. package/schematics/utils/metadata.manager.js +175 -0
  42. package/schematics/utils/metadata.manager.js.map +1 -0
  43. package/schematics/utils/metadata.manager.spec.ts +357 -0
  44. package/schematics/utils/metadata.manager.ts +241 -0
  45. package/schematics/utils/module-import.declarator.d.ts +10 -0
  46. package/schematics/utils/module-import.declarator.js +40 -0
  47. package/schematics/utils/module-import.declarator.js.map +1 -0
  48. package/schematics/utils/module-import.declarator.spec.ts +122 -0
  49. package/schematics/utils/module-import.declarator.ts +44 -0
  50. package/schematics/utils/module-metadata.declarator.d.ts +4 -0
  51. package/schematics/utils/module-metadata.declarator.js +13 -0
  52. package/schematics/utils/module-metadata.declarator.js.map +1 -0
  53. package/schematics/utils/module-metadata.declarator.spec.ts +404 -0
  54. package/schematics/utils/module-metadata.declarator.ts +14 -0
  55. package/schematics/utils/module.declarator.d.ts +23 -0
  56. package/schematics/utils/module.declarator.js +33 -0
  57. package/schematics/utils/module.declarator.js.map +1 -0
  58. package/schematics/utils/module.declarator.spec.ts +52 -0
  59. package/schematics/utils/module.declarator.ts +44 -0
  60. package/schematics/utils/module.finder.d.ts +13 -0
  61. package/schematics/utils/module.finder.js +25 -0
  62. package/schematics/utils/module.finder.js.map +1 -0
  63. package/schematics/utils/module.finder.spec.ts +59 -0
  64. package/schematics/utils/module.finder.ts +32 -0
  65. package/schematics/utils/name.parser.d.ts +12 -0
  66. package/schematics/utils/name.parser.js +18 -0
  67. package/schematics/utils/name.parser.js.map +1 -0
  68. package/schematics/utils/name.parser.spec.ts +50 -0
  69. package/schematics/utils/name.parser.ts +26 -0
  70. package/schematics/utils/path.solver.d.ts +4 -0
  71. package/schematics/utils/path.solver.js +15 -0
  72. package/schematics/utils/path.solver.js.map +1 -0
  73. package/schematics/utils/path.solver.spec.ts +11 -0
  74. package/schematics/utils/path.solver.ts +15 -0
  75. package/schematics/utils/source-root.helpers.d.ts +6 -0
  76. package/schematics/utils/source-root.helpers.js +25 -0
  77. package/schematics/utils/source-root.helpers.js.map +1 -0
  78. package/schematics/utils/source-root.helpers.ts +30 -0
  79. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1,5 +1,7 @@
1
+ export * from '../../amqp-lib/config/rabbitmq.config';
1
2
  export * from './broker.module';
2
3
  export * from './config/broker.config';
4
+ export * from './config/handler-auth.config';
3
5
  export * from './config/topics.config';
4
6
  export * from './data/events/messages';
5
7
  export * from './decorators';
@@ -14,8 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("../../amqp-lib/config/rabbitmq.config"), exports);
17
18
  __exportStar(require("./broker.module"), exports);
18
19
  __exportStar(require("./config/broker.config"), exports);
20
+ __exportStar(require("./config/handler-auth.config"), exports);
19
21
  __exportStar(require("./config/topics.config"), exports);
20
22
  __exportStar(require("./data/events/messages"), exports);
21
23
  __exportStar(require("./decorators"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/rlb-nestjs-amqp/src/modules/broker/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,yDAAuC;AACvC,yDAAuC;AACvC,yDAAuC;AACvC,+CAA6B;AAC7B,0CAAwB;AACxB,oEAAkD;AAClD,4DAA0C;AAC1C,sEAAoD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/rlb-nestjs-amqp/src/modules/broker/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wEAAsD;AACtD,kDAAgC;AAChC,yDAAuC;AACvC,+DAA6C;AAC7C,yDAAuC;AACvC,yDAAuC;AACvC,+CAA6B;AAC7B,0CAAwB;AACxB,oEAAkD;AAClD,4DAA0C;AAC1C,sEAAoD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-rlb/nestjs-amqp",
3
- "version": "1.0.14",
3
+ "version": "1.0.15",
4
4
  "description": "",
5
5
  "author": "Giuseppe Riolo <riolo.giuseppe@gmail.com>",
6
6
  "private": false,
@@ -13,10 +13,11 @@
13
13
  "start:debug": "nest start --debug --watch",
14
14
  "start:prod": "node dist/apps/rlb-nestjs-amqp/main",
15
15
  "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
16
- "test": "jest",
17
- "test:watch": "jest --watch",
18
- "test:cov": "jest --coverage",
19
- "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand"
16
+ "test": "jest --config ./jest.json",
17
+ "postbuild": "npm run copy:collection && npm run copy:lib",
18
+ "copy:collection": "cpx \"libs/rlb-nestjs-amqp/src/schematics/collection.json\" \"dist/schematics\" && cpx \"libs/rlb-nestjs-amqp/src/schematics/**/schema.json\" \"dist/schematics\"",
19
+ "copy:lib": "cpx \"libs/rlb-nestjs-amqp/src/schematics/**/{.*,files,workspace}/**/\" \"dist/schematics\" && cpx \"libs/rlb-nestjs-amqp/src/schematics/**/{.*,*}\" \"dist/schematics\"",
20
+ "nest-add": "npx schematics ./dist/schematics/collection.json:nest-add project --name=Pet --no-dry-run"
20
21
  },
21
22
  "dependencies": {
22
23
  "@nestjs/axios": "^4.0.1",
@@ -36,6 +37,8 @@
36
37
  "ws": "^8.19.0"
37
38
  },
38
39
  "devDependencies": {
40
+ "@angular-devkit/core": "^21.2.3",
41
+ "@angular-devkit/schematics": "^21.2.3",
39
42
  "@nestjs/cli": "^11.0.16",
40
43
  "@nestjs/schematics": "^11.0.9",
41
44
  "@nestjs/testing": "^11.1.14",
@@ -48,6 +51,7 @@
48
51
  "@types/ws": "^8.18.1",
49
52
  "@typescript-eslint/eslint-plugin": "^8.56.1",
50
53
  "@typescript-eslint/parser": "^8.56.1",
54
+ "cpx": "^1.5.0",
51
55
  "eslint": "^10.0.2",
52
56
  "eslint-config-prettier": "^10.1.8",
53
57
  "eslint-plugin-prettier": "^5.5.5",
@@ -84,5 +88,10 @@
84
88
  "moduleNameMapper": {
85
89
  "^@app/rlb-nestjs-amqp(|/.*)$": "<rootDir>/libs/rlb-nestjs-amqp/src/$1"
86
90
  }
91
+ },
92
+ "overrides": {
93
+ "ajv": "^8.18.0",
94
+ "braces": "^3.0.3",
95
+ "micromatch": "^4.0.8"
87
96
  }
88
97
  }
@@ -0,0 +1,10 @@
1
+ {
2
+ "$schema": "../../node_modules/@angular-devkit/schematics/collection-schema.json",
3
+ "schematics": {
4
+ "nest-add": {
5
+ "description": "Add RabbitMQ support to a NestJS project",
6
+ "factory": "./nest-add/index#main",
7
+ "schema": "./nest-add/schema.json"
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,14 @@
1
+ export declare const DEFAULT_AUTHOR = "";
2
+ export declare const DEFAULT_DESCRIPTION = "";
3
+ export declare const DEFAULT_LANGUAGE = "ts";
4
+ export declare const DEFAULT_VERSION = "0.0.1";
5
+ export declare const DEFAULT_PATH_NAME = "src";
6
+ export declare const DEFAULT_LIB_PATH = "libs";
7
+ export declare const DEFAULT_APPS_PATH = "apps";
8
+ export declare const DEFAULT_APP_NAME = "app";
9
+ export declare const DEFAULT_DIR_ENTRY_APP = "main";
10
+ export declare const TEST_ENV = "test";
11
+ export declare const PROJECT_TYPE: {
12
+ LIBRARY: string;
13
+ APPLICATION: string;
14
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROJECT_TYPE = exports.TEST_ENV = exports.DEFAULT_DIR_ENTRY_APP = exports.DEFAULT_APP_NAME = exports.DEFAULT_APPS_PATH = exports.DEFAULT_LIB_PATH = exports.DEFAULT_PATH_NAME = exports.DEFAULT_VERSION = exports.DEFAULT_LANGUAGE = exports.DEFAULT_DESCRIPTION = exports.DEFAULT_AUTHOR = void 0;
4
+ exports.DEFAULT_AUTHOR = '';
5
+ exports.DEFAULT_DESCRIPTION = '';
6
+ exports.DEFAULT_LANGUAGE = 'ts';
7
+ exports.DEFAULT_VERSION = '0.0.1';
8
+ exports.DEFAULT_PATH_NAME = 'src';
9
+ exports.DEFAULT_LIB_PATH = 'libs';
10
+ exports.DEFAULT_APPS_PATH = 'apps';
11
+ exports.DEFAULT_APP_NAME = 'app';
12
+ exports.DEFAULT_DIR_ENTRY_APP = 'main';
13
+ exports.TEST_ENV = 'test';
14
+ exports.PROJECT_TYPE = {
15
+ LIBRARY: 'library',
16
+ APPLICATION: 'application',
17
+ };
18
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../libs/rlb-nestjs-amqp/src/schematics/defaults.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,EAAE,CAAC;AACpB,QAAA,mBAAmB,GAAG,EAAE,CAAC;AACzB,QAAA,gBAAgB,GAAG,IAAI,CAAC;AACxB,QAAA,eAAe,GAAG,OAAO,CAAC;AAC1B,QAAA,iBAAiB,GAAG,KAAK,CAAC;AAC1B,QAAA,gBAAgB,GAAG,MAAM,CAAC;AAC1B,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAC3B,QAAA,gBAAgB,GAAG,KAAK,CAAC;AACzB,QAAA,qBAAqB,GAAG,MAAM,CAAC;AAC/B,QAAA,QAAQ,GAAG,MAAM,CAAC;AAClB,QAAA,YAAY,GAAG;IAC1B,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;CAC3B,CAAC"}
@@ -0,0 +1,14 @@
1
+ export const DEFAULT_AUTHOR = '';
2
+ export const DEFAULT_DESCRIPTION = '';
3
+ export const DEFAULT_LANGUAGE = 'ts';
4
+ export const DEFAULT_VERSION = '0.0.1';
5
+ export const DEFAULT_PATH_NAME = 'src';
6
+ export const DEFAULT_LIB_PATH = 'libs';
7
+ export const DEFAULT_APPS_PATH = 'apps';
8
+ export const DEFAULT_APP_NAME = 'app';
9
+ export const DEFAULT_DIR_ENTRY_APP = 'main';
10
+ export const TEST_ENV = 'test';
11
+ export const PROJECT_TYPE = {
12
+ LIBRARY: 'library',
13
+ APPLICATION: 'application',
14
+ };
@@ -0,0 +1,3 @@
1
+ import { Rule } from '@angular-devkit/schematics';
2
+ import { InitOptions } from './init.schema';
3
+ export declare function main(options: InitOptions): Rule;
@@ -0,0 +1,315 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.main = main;
4
+ const core_1 = require("@angular-devkit/core");
5
+ const schematics_1 = require("@angular-devkit/schematics");
6
+ const jsonc_parser_1 = require("jsonc-parser");
7
+ const path_1 = require("path");
8
+ const formatting_1 = require("../utils/formatting");
9
+ const module_finder_1 = require("../utils/module.finder");
10
+ const name_parser_1 = require("../utils/name.parser");
11
+ const source_root_helpers_1 = require("../utils/source-root.helpers");
12
+ const BROKER_IMPORT_LINE = "import { AppConfig, BrokerModule, BrokerTopic, GatewayConfig, HandlerAuthConfig, ProxyModule, RabbitMQConfig } from '@open-rlb/nestjs-amqp';";
13
+ const BROKER_FOR_ROOT_ASYNC = `BrokerModule.forRootAsync({
14
+ imports: [ConfigModule],
15
+ inject: [ConfigService],
16
+ useFactory: async (configService: ConfigService) => {
17
+ const options = configService.get<RabbitMQConfig>('broker');
18
+ const topics = configService.get<BrokerTopic[]>('topics');
19
+ const app = configService.get<AppConfig>('app');
20
+ const gateway = configService.get<GatewayConfig>('gateway');
21
+ const authConfig = configService.get<HandlerAuthConfig[]>('auth-providers');
22
+ return { options, topics, appOptions: app, authOptions: authConfig, gatewayOptions: gateway };
23
+ },
24
+ })`;
25
+ const CONFIG_YAML_BLOCK = `
26
+ app:
27
+ port: 80
28
+ host: 0.0.0.0
29
+ environment: "development"
30
+
31
+ auth-providers: []
32
+
33
+ broker:
34
+ name: "rabbitmq"
35
+ uri: "<AMQP_URI>"
36
+ defaultSubscribeErrorBehavior: "ack"
37
+ defaultPublishErrorBehavior: "reject"
38
+ connectionManagerOptions:
39
+ heartbeatIntervalInSeconds: 60
40
+ reconnectTimeInSeconds: 60
41
+ connectionOptions:
42
+ clientProperties:
43
+ connection_name: "<APP_NAME>"
44
+ credentials:
45
+ mechanism: PLAIN
46
+ username: "<AMQP_USERNAME>"
47
+ password: "<AMQP_PASSWORD>"
48
+ exchanges:
49
+ - name: example.fanout
50
+ type: "fanout"
51
+ createExchangeIfNotExists: true
52
+ options:
53
+ durable: true
54
+ autoDelete: false
55
+ internal: false
56
+ queues:
57
+ - name: example.queue
58
+ createQueueIfNotExists: true
59
+ exchange: example.fanout
60
+ routingKey: example.queue
61
+ options:
62
+ durable: true
63
+ autoDelete: false
64
+ exclusive: false
65
+
66
+ topics:
67
+ - name: example.topic
68
+ exchange: example.fanout
69
+ routingKey: "example.topic"
70
+ mode: event
71
+
72
+ gateway:
73
+ events: []
74
+ paths:
75
+ - name: example-path
76
+ method: POST
77
+ dataSource: body
78
+ path: /example
79
+ topic: example.topic
80
+ action: example-action
81
+ mode: event
82
+ `;
83
+ function main(options) {
84
+ options = transform(options);
85
+ return (tree, context) => {
86
+ return (0, schematics_1.branchAndMerge)((0, schematics_1.chain)([
87
+ (0, source_root_helpers_1.mergeSourceRoot)(options),
88
+ addDeclarationToModule(options),
89
+ addBrokerModuleToAppModule(),
90
+ updateConfigYaml(),
91
+ updatePackageJson(options),
92
+ (0, schematics_1.mergeWith)(generate(options), schematics_1.MergeStrategy.Overwrite),
93
+ ]))(tree, context);
94
+ };
95
+ }
96
+ function transform(source) {
97
+ const target = Object.assign({}, source);
98
+ target.metadata = 'providers';
99
+ target.type = 'module';
100
+ target.language = 'ts';
101
+ const location = new name_parser_1.NameParser().parse({ ...target, name: 'init' });
102
+ target.name = '';
103
+ target.path = (0, formatting_1.normalizeToKebabOrSnakeCase)(location.path);
104
+ target.specFileSuffix = (0, formatting_1.normalizeToKebabOrSnakeCase)(source.specFileSuffix || 'spec');
105
+ return target;
106
+ }
107
+ function generate(options) {
108
+ return (context) => (0, schematics_1.apply)((0, schematics_1.url)('./files'), [
109
+ (0, schematics_1.applyTemplates)({
110
+ classify: core_1.strings.classify,
111
+ dasherize: core_1.strings.dasherize,
112
+ name: options.name,
113
+ }),
114
+ renameDotfiles,
115
+ (0, schematics_1.move)((0, path_1.normalize)('./')),
116
+ ])(context);
117
+ }
118
+ const renameDotfiles = (0, schematics_1.forEach)((entry) => {
119
+ if (entry.path.includes('/__dot')) {
120
+ const newPath = (0, path_1.normalize)(entry.path.replace('/__dot', '/.'));
121
+ return {
122
+ content: entry.content,
123
+ path: newPath,
124
+ };
125
+ }
126
+ return entry;
127
+ });
128
+ function addDeclarationToModule(options) {
129
+ return (tree) => {
130
+ if (options.skipImport !== undefined && options.skipImport) {
131
+ return tree;
132
+ }
133
+ options.module = new module_finder_1.ModuleFinder(tree).find({
134
+ name: '',
135
+ path: options.path,
136
+ });
137
+ if (!options.module) {
138
+ return tree;
139
+ }
140
+ const content = tree.read(options.module).toString();
141
+ const contentLines = content.split('\n');
142
+ const importIndex = findImportsEndpoint(contentLines);
143
+ const toInsert = "import { CoreModule } from '@lbd-core/lib-nestjs-core';\n";
144
+ contentLines.splice(importIndex + 1, 0, toInsert);
145
+ const providersIndex = contentLines.findIndex(line => line.trim().startsWith('imports:'));
146
+ const openingIndex = contentLines.findIndex((line, index) => index >= providersIndex && line.includes('['));
147
+ const closingIndex = contentLines.findIndex((line, index) => index >= providersIndex && index >= openingIndex && line.includes(']'));
148
+ if (providersIndex !== -1) {
149
+ if (openingIndex === closingIndex) {
150
+ const line = contentLines[providersIndex];
151
+ contentLines[providersIndex] = line.replace('[', `[CoreModule,`);
152
+ }
153
+ else {
154
+ contentLines.splice(openingIndex, +1, `CoreModule,`);
155
+ }
156
+ }
157
+ tree.overwrite(options.module, contentLines.join('\n'));
158
+ return tree;
159
+ };
160
+ }
161
+ function updateConfigYaml() {
162
+ return (tree) => {
163
+ const CONFIG_PATH = 'config/config.yaml';
164
+ if (!tree.exists(CONFIG_PATH)) {
165
+ tree.create(CONFIG_PATH, CONFIG_YAML_BLOCK.trimStart());
166
+ return tree;
167
+ }
168
+ const existing = tree.read(CONFIG_PATH).toString('utf-8');
169
+ const SECTION_KEYS = ['app:', 'auth-providers:', 'broker:', 'topics:', 'gateway:'];
170
+ let toAppend = '';
171
+ for (const key of SECTION_KEYS) {
172
+ if (!existing.includes(key)) {
173
+ const block = extractYamlSection(CONFIG_YAML_BLOCK, key);
174
+ if (block) {
175
+ toAppend += '\n' + block;
176
+ }
177
+ }
178
+ }
179
+ if (toAppend.length > 0) {
180
+ tree.overwrite(CONFIG_PATH, existing.trimEnd() + '\n' + toAppend);
181
+ }
182
+ return tree;
183
+ };
184
+ }
185
+ function extractYamlSection(yaml, sectionKey) {
186
+ const lines = yaml.split('\n');
187
+ const startIdx = lines.findIndex(l => l.startsWith(sectionKey));
188
+ if (startIdx === -1)
189
+ return '';
190
+ const endIdx = lines.findIndex((l, i) => i > startIdx && l.length > 0 && !l.startsWith(' ') && !l.startsWith('#'));
191
+ const sectionLines = endIdx === -1 ? lines.slice(startIdx) : lines.slice(startIdx, endIdx);
192
+ return sectionLines.join('\n').trimEnd();
193
+ }
194
+ function addBrokerModuleToAppModule() {
195
+ return (tree) => {
196
+ const candidatePaths = [
197
+ '/src/app.module.ts',
198
+ '/app/app.module.ts',
199
+ 'src/app.module.ts',
200
+ 'app/app.module.ts',
201
+ ];
202
+ let modulePath = candidatePaths.find(p => tree.exists(p));
203
+ if (!modulePath) {
204
+ modulePath = findFileInTree(tree, 'app.module.ts');
205
+ }
206
+ if (!modulePath) {
207
+ console.warn('[ng-add] app.module.ts non trovato: BrokerModule non aggiunto.');
208
+ return tree;
209
+ }
210
+ const rawContent = tree.read(modulePath);
211
+ if (!rawContent) {
212
+ return tree;
213
+ }
214
+ let content = rawContent.toString('utf-8');
215
+ if (!content.includes('@open-rlb/nestjs-amqp')) {
216
+ const importInsertPos = findLastImportEndIndex(content);
217
+ content =
218
+ content.slice(0, importInsertPos) +
219
+ '\n' + BROKER_IMPORT_LINE +
220
+ content.slice(importInsertPos);
221
+ }
222
+ if (!content.includes('BrokerModule.forRootAsync')) {
223
+ content = insertIntoImportsArray(content, BROKER_FOR_ROOT_ASYNC);
224
+ }
225
+ tree.overwrite(modulePath, content);
226
+ return tree;
227
+ };
228
+ }
229
+ function insertIntoImportsArray(source, moduleEntry) {
230
+ const importsArrayRegex = /imports\s*:\s*\[/;
231
+ const match = importsArrayRegex.exec(source);
232
+ if (!match) {
233
+ return source;
234
+ }
235
+ const openBracketPos = source.indexOf('[', match.index);
236
+ let depth = 0;
237
+ let closeBracketPos = -1;
238
+ for (let i = openBracketPos; i < source.length; i++) {
239
+ if (source[i] === '[')
240
+ depth++;
241
+ else if (source[i] === ']') {
242
+ depth--;
243
+ if (depth === 0) {
244
+ closeBracketPos = i;
245
+ break;
246
+ }
247
+ }
248
+ }
249
+ if (closeBracketPos === -1) {
250
+ return source;
251
+ }
252
+ const arrayContent = source.slice(openBracketPos + 1, closeBracketPos).trim();
253
+ let newArrayContent;
254
+ if (arrayContent.length === 0) {
255
+ newArrayContent = `\n ${moduleEntry},\n `;
256
+ }
257
+ else {
258
+ newArrayContent = `\n ${moduleEntry},\n ${arrayContent}\n `;
259
+ }
260
+ return (source.slice(0, openBracketPos + 1) +
261
+ newArrayContent +
262
+ source.slice(closeBracketPos));
263
+ }
264
+ function findLastImportEndIndex(source) {
265
+ const importRegex = /^import\s+.+from\s+['"][^'"]+['"];?\s*$/gm;
266
+ let lastEnd = 0;
267
+ let match;
268
+ while ((match = importRegex.exec(source)) !== null) {
269
+ lastEnd = match.index + match[0].length;
270
+ }
271
+ return lastEnd;
272
+ }
273
+ function findFileInTree(tree, fileName) {
274
+ let found;
275
+ tree.visit(path => {
276
+ if (!found && path.endsWith(`/${fileName}`)) {
277
+ found = path;
278
+ }
279
+ });
280
+ return found;
281
+ }
282
+ function updatePackageJson(options) {
283
+ return (host) => {
284
+ if (!host.exists('package.json')) {
285
+ return host;
286
+ }
287
+ return updateJsonFile(host, 'package.json', (packageJson) => {
288
+ updateNpmScripts(packageJson.scripts, options);
289
+ });
290
+ };
291
+ }
292
+ function updateJsonFile(host, path, callback) {
293
+ const source = host.read(path);
294
+ if (source) {
295
+ const sourceText = source.toString('utf-8');
296
+ const json = (0, jsonc_parser_1.parse)(sourceText);
297
+ callback(json);
298
+ host.overwrite(path, JSON.stringify(json, null, 2));
299
+ }
300
+ return host;
301
+ }
302
+ function updateNpmScripts(scripts, _options) {
303
+ if (!scripts) {
304
+ return;
305
+ }
306
+ }
307
+ function findImportsEndpoint(contentLines) {
308
+ const reversedContent = Array.from(contentLines).reverse();
309
+ const reverseImports = reversedContent.filter(line => line.match(/\} from ('|")/));
310
+ if (reverseImports.length <= 0) {
311
+ return 0;
312
+ }
313
+ return contentLines.indexOf(reverseImports[0]);
314
+ }
315
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/rlb-nestjs-amqp/src/schematics/nest-add/index.ts"],"names":[],"mappings":"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"}