02-rbor 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.
Files changed (154) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +429 -0
  3. package/bin/rbor.js +3 -0
  4. package/dist/analyzers/file-categorizer.d.ts +5 -0
  5. package/dist/analyzers/file-categorizer.js +269 -0
  6. package/dist/analyzers/file-categorizer.js.map +1 -0
  7. package/dist/analyzers/file-categorizer.test.d.ts +1 -0
  8. package/dist/analyzers/file-categorizer.test.js +155 -0
  9. package/dist/analyzers/file-categorizer.test.js.map +1 -0
  10. package/dist/analyzers/graph-builder.d.ts +4 -0
  11. package/dist/analyzers/graph-builder.js +509 -0
  12. package/dist/analyzers/graph-builder.js.map +1 -0
  13. package/dist/analyzers/import-parser.d.ts +8 -0
  14. package/dist/analyzers/import-parser.js +285 -0
  15. package/dist/analyzers/import-parser.js.map +1 -0
  16. package/dist/analyzers/import-parser.test.d.ts +1 -0
  17. package/dist/analyzers/import-parser.test.js +177 -0
  18. package/dist/analyzers/import-parser.test.js.map +1 -0
  19. package/dist/analyzers/index.d.ts +4 -0
  20. package/dist/analyzers/index.js +28 -0
  21. package/dist/analyzers/index.js.map +1 -0
  22. package/dist/analyzers/output-formatters.d.ts +11 -0
  23. package/dist/analyzers/output-formatters.js +451 -0
  24. package/dist/analyzers/output-formatters.js.map +1 -0
  25. package/dist/analyzers/yo.d.ts +1 -0
  26. package/dist/analyzers/yo.js +10 -0
  27. package/dist/analyzers/yo.js.map +1 -0
  28. package/dist/app/App.d.ts +1 -0
  29. package/dist/app/App.js +6 -0
  30. package/dist/app/App.js.map +1 -0
  31. package/dist/cli.d.ts +5 -0
  32. package/dist/cli.js +167 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/commands/analyze-deps.d.ts +12 -0
  35. package/dist/commands/analyze-deps.js +136 -0
  36. package/dist/commands/analyze-deps.js.map +1 -0
  37. package/dist/commands/generate-constant.d.ts +1 -0
  38. package/dist/commands/generate-constant.js +148 -0
  39. package/dist/commands/generate-constant.js.map +1 -0
  40. package/dist/commands/generate-domain.d.ts +2 -0
  41. package/dist/commands/generate-domain.js +87 -0
  42. package/dist/commands/generate-domain.js.map +1 -0
  43. package/dist/commands/generate-endpoint.d.ts +1 -0
  44. package/dist/commands/generate-endpoint.js +124 -0
  45. package/dist/commands/generate-endpoint.js.map +1 -0
  46. package/dist/commands/init.d.ts +8 -0
  47. package/dist/commands/init.js +32 -0
  48. package/dist/commands/init.js.map +1 -0
  49. package/dist/commands/list-domains.d.ts +1 -0
  50. package/dist/commands/list-domains.js +122 -0
  51. package/dist/commands/list-domains.js.map +1 -0
  52. package/dist/commands/validate.d.ts +4 -0
  53. package/dist/commands/validate.js +255 -0
  54. package/dist/commands/validate.js.map +1 -0
  55. package/dist/layouts/MainLayout.d.ts +1 -0
  56. package/dist/layouts/MainLayout.js +6 -0
  57. package/dist/layouts/MainLayout.js.map +1 -0
  58. package/dist/pages/HomePage.d.ts +1 -0
  59. package/dist/pages/HomePage.js +6 -0
  60. package/dist/pages/HomePage.js.map +1 -0
  61. package/dist/templates/barrel/index.d.ts +1 -0
  62. package/dist/templates/barrel/index.js +14 -0
  63. package/dist/templates/barrel/index.js.map +1 -0
  64. package/dist/templates/component/index.d.ts +1 -0
  65. package/dist/templates/component/index.js +6 -0
  66. package/dist/templates/component/index.js.map +1 -0
  67. package/dist/templates/component/main.d.ts +1 -0
  68. package/dist/templates/component/main.js +8 -0
  69. package/dist/templates/component/main.js.map +1 -0
  70. package/dist/templates/hooks/action.d.ts +1 -0
  71. package/dist/templates/hooks/action.js +49 -0
  72. package/dist/templates/hooks/action.js.map +1 -0
  73. package/dist/templates/hooks/controller.d.ts +1 -0
  74. package/dist/templates/hooks/controller.js +41 -0
  75. package/dist/templates/hooks/controller.js.map +1 -0
  76. package/dist/templates/hooks/data.d.ts +1 -0
  77. package/dist/templates/hooks/data.js +38 -0
  78. package/dist/templates/hooks/data.js.map +1 -0
  79. package/dist/templates/hooks/index.d.ts +3 -0
  80. package/dist/templates/hooks/index.js +10 -0
  81. package/dist/templates/hooks/index.js.map +1 -0
  82. package/dist/templates/index.d.ts +10 -0
  83. package/dist/templates/index.js +33 -0
  84. package/dist/templates/index.js.map +1 -0
  85. package/dist/templates/methods/index.d.ts +1 -0
  86. package/dist/templates/methods/index.js +85 -0
  87. package/dist/templates/methods/index.js.map +1 -0
  88. package/dist/templates/schema/index.d.ts +1 -0
  89. package/dist/templates/schema/index.js +40 -0
  90. package/dist/templates/schema/index.js.map +1 -0
  91. package/dist/templates/services/base-service-axios.d.ts +1 -0
  92. package/dist/templates/services/base-service-axios.js +77 -0
  93. package/dist/templates/services/base-service-axios.js.map +1 -0
  94. package/dist/templates/services/base-service-fetch.d.ts +1 -0
  95. package/dist/templates/services/base-service-fetch.js +113 -0
  96. package/dist/templates/services/base-service-fetch.js.map +1 -0
  97. package/dist/templates/services/base-service-ky.d.ts +1 -0
  98. package/dist/templates/services/base-service-ky.js +85 -0
  99. package/dist/templates/services/base-service-ky.js.map +1 -0
  100. package/dist/templates/services/base-service.d.ts +1 -0
  101. package/dist/templates/services/base-service.js +92 -0
  102. package/dist/templates/services/base-service.js.map +1 -0
  103. package/dist/templates/services/domain-service.d.ts +2 -0
  104. package/dist/templates/services/domain-service.js +95 -0
  105. package/dist/templates/services/domain-service.js.map +1 -0
  106. package/dist/templates/services/index.d.ts +7 -0
  107. package/dist/templates/services/index.js +23 -0
  108. package/dist/templates/services/index.js.map +1 -0
  109. package/dist/templates/services/service-factory.d.ts +4 -0
  110. package/dist/templates/services/service-factory.js +68 -0
  111. package/dist/templates/services/service-factory.js.map +1 -0
  112. package/dist/templates/types/index.d.ts +1 -0
  113. package/dist/templates/types/index.js +7 -0
  114. package/dist/templates/types/index.js.map +1 -0
  115. package/dist/templates/utils/build-url.d.ts +1 -0
  116. package/dist/templates/utils/build-url.js +72 -0
  117. package/dist/templates/utils/build-url.js.map +1 -0
  118. package/dist/templates/utils/endpoints.d.ts +2 -0
  119. package/dist/templates/utils/endpoints.js +23 -0
  120. package/dist/templates/utils/endpoints.js.map +1 -0
  121. package/dist/templates/utils/generateURL.d.ts +1 -0
  122. package/dist/templates/utils/generateURL.js +40 -0
  123. package/dist/templates/utils/generateURL.js.map +1 -0
  124. package/dist/templates/utils/index.d.ts +1 -0
  125. package/dist/templates/utils/index.js +7 -0
  126. package/dist/templates/utils/index.js.map +1 -0
  127. package/dist/types/dependency-graph.d.ts +95 -0
  128. package/dist/types/dependency-graph.js +13 -0
  129. package/dist/types/dependency-graph.js.map +1 -0
  130. package/dist/types/index.d.ts +2 -0
  131. package/dist/types/index.js +6 -0
  132. package/dist/types/index.js.map +1 -0
  133. package/dist/utils/config.d.ts +16 -0
  134. package/dist/utils/config.js +145 -0
  135. package/dist/utils/config.js.map +1 -0
  136. package/dist/utils/create-file.d.ts +13 -0
  137. package/dist/utils/create-file.js +159 -0
  138. package/dist/utils/create-file.js.map +1 -0
  139. package/dist/utils/dependency-installer.d.ts +5 -0
  140. package/dist/utils/dependency-installer.js +95 -0
  141. package/dist/utils/dependency-installer.js.map +1 -0
  142. package/dist/utils/file-finder.d.ts +6 -0
  143. package/dist/utils/file-finder.js +80 -0
  144. package/dist/utils/file-finder.js.map +1 -0
  145. package/dist/utils/naming.d.ts +11 -0
  146. package/dist/utils/naming.js +46 -0
  147. package/dist/utils/naming.js.map +1 -0
  148. package/dist/utils/naming.test.d.ts +1 -0
  149. package/dist/utils/naming.test.js +106 -0
  150. package/dist/utils/naming.test.js.map +1 -0
  151. package/dist/utils/service-factory-updater.d.ts +2 -0
  152. package/dist/utils/service-factory-updater.js +87 -0
  153. package/dist/utils/service-factory-updater.js.map +1 -0
  154. package/package.json +95 -0
package/dist/cli.js ADDED
@@ -0,0 +1,167 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const commander_1 = require("commander");
38
+ const readline = __importStar(require("readline"));
39
+ const generate_domain_1 = require("./commands/generate-domain");
40
+ const generate_endpoint_1 = require("./commands/generate-endpoint");
41
+ const generate_constant_1 = require("./commands/generate-constant");
42
+ const analyze_deps_1 = require("./commands/analyze-deps");
43
+ const init_1 = require("./commands/init");
44
+ const list_domains_1 = require("./commands/list-domains");
45
+ const validate_1 = require("./commands/validate");
46
+ const config_1 = require("./utils/config");
47
+ function prompt(question) {
48
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
49
+ return new Promise(resolve => {
50
+ rl.question(question, answer => {
51
+ rl.close();
52
+ resolve(answer.trim());
53
+ });
54
+ });
55
+ }
56
+ async function interactiveDomain() {
57
+ console.log('');
58
+ console.log('🚀 rBOR Domain Generator (Interactive Mode)');
59
+ console.log('───────────────────────────────────────────');
60
+ console.log('');
61
+ const name = await prompt(' Domain name (e.g. user-profile): ');
62
+ if (!name) {
63
+ console.error('❌ Domain name is required.');
64
+ process.exit(1);
65
+ }
66
+ console.log('');
67
+ console.log(' HTTP client options:');
68
+ console.log(' 1) axios (default)');
69
+ console.log(' 2) fetch');
70
+ console.log(' 3) ky');
71
+ console.log('');
72
+ const httpChoice = await prompt(' Choose HTTP client [1/2/3]: ');
73
+ const httpMap = { '1': 'axios', '2': 'fetch', '3': 'ky' };
74
+ const httpClient = httpMap[httpChoice] || 'axios';
75
+ console.log('');
76
+ console.log(` 📋 Summary:`);
77
+ console.log(` Domain: ${name}`);
78
+ console.log(` HTTP client: ${httpClient}`);
79
+ console.log('');
80
+ const confirm = await prompt(' Proceed? [Y/n]: ');
81
+ if (confirm.toLowerCase() === 'n') {
82
+ console.log(' Cancelled.');
83
+ process.exit(0);
84
+ }
85
+ console.log('');
86
+ (0, generate_domain_1.generateDomain)(name, { http: httpClient });
87
+ }
88
+ const program = new commander_1.Command();
89
+ const config = (0, config_1.configExists)() ? (0, config_1.loadConfig)() : null;
90
+ program
91
+ .name('rbor')
92
+ .description('CLI tool to scaffold rBOR architecture features')
93
+ .version('0.1.0');
94
+ program
95
+ .command('init')
96
+ .description('Initialize rBOR configuration (.rborrc.json)')
97
+ .option('--http <client>', 'Default HTTP client (axios, fetch, ky)')
98
+ .option('--domains-path <path>', 'Path to domains folder')
99
+ .option('--infrastructure-path <path>', 'Path to infrastructure folder')
100
+ .option('--force', 'Overwrite existing configuration', false)
101
+ .action((options) => {
102
+ (0, init_1.initProject)(options);
103
+ });
104
+ program
105
+ .command('domain [name]')
106
+ .description('Generate a new domain feature with rBOR structure (interactive if no name given)')
107
+ .option('--http <client>', 'HTTP client to use (axios, fetch, ky)', config?.http ?? 'axios')
108
+ .action(async (name, options) => {
109
+ if (!name) {
110
+ await interactiveDomain();
111
+ }
112
+ else {
113
+ (0, generate_domain_1.generateDomain)(name, options);
114
+ }
115
+ });
116
+ program
117
+ .command('endpoint <path>')
118
+ .description('Add an endpoint to the current domain (run from inside domains/<domain>/)')
119
+ .action((endpointPath) => {
120
+ (0, generate_endpoint_1.generateEndpoint)(endpointPath);
121
+ });
122
+ program
123
+ .command('constant <key=value>')
124
+ .description('Add a constant to the current domain (run from inside domains/<domain>/)')
125
+ .action((input) => {
126
+ (0, generate_constant_1.generateConstant)(input);
127
+ });
128
+ program
129
+ .command('list')
130
+ .alias('ls')
131
+ .description('List all existing domains with metadata')
132
+ .action(() => {
133
+ (0, list_domains_1.listDomains)();
134
+ });
135
+ program
136
+ .command('validate')
137
+ .alias('lint')
138
+ .description('Validate architecture against rBOR rules')
139
+ .option('--strict', 'Treat warnings as errors', false)
140
+ .action((options) => {
141
+ (0, validate_1.validate)(options);
142
+ });
143
+ program
144
+ .command('deps <path>')
145
+ .description('Analyze dependencies of a file or directory')
146
+ .option('-d, --direction <dir>', 'Analysis direction (forward, reverse)', 'forward')
147
+ .option('-f, --format <fmt>', 'Output format (json, summary, tree, dot, svg)', 'summary')
148
+ .option('-o, --output <file>', 'Write output to file')
149
+ .option('--depth <n>', 'Maximum depth to traverse', '10')
150
+ .option('--include-external', 'Include external npm packages in traversal', false)
151
+ .option('--include-tests', 'Include test files', false)
152
+ .option('--include-types', 'Include type-only imports', true)
153
+ .option('--aliases <mapping>', 'Path aliases (e.g., "@/=src/")')
154
+ .action((targetPath, options) => {
155
+ (0, analyze_deps_1.analyzeDeps)(targetPath, {
156
+ ...options,
157
+ depth: options.depth ? parseInt(String(options.depth), 10) : 10,
158
+ });
159
+ });
160
+ program
161
+ .command('davinci')
162
+ .description('Credits')
163
+ .action(() => {
164
+ console.log('rendered to reality by 02-davinci-01. Say hello: https://02-davinci-01.vercel.app');
165
+ });
166
+ program.parse(process.argv);
167
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { OutputFormat, GraphDirection } from '../types/dependency-graph';
2
+ export interface AnalyzeDepsOptions {
3
+ direction: GraphDirection;
4
+ format: OutputFormat;
5
+ output?: string;
6
+ depth?: number;
7
+ includeExternal?: boolean;
8
+ includeTests?: boolean;
9
+ includeTypes?: boolean;
10
+ aliases?: string;
11
+ }
12
+ export declare function analyzeDeps(targetPath: string, options: AnalyzeDepsOptions): Promise<void>;
@@ -0,0 +1,136 @@
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.analyzeDeps = analyzeDeps;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const analyzers_1 = require("../analyzers");
40
+ function parseAliases(aliasString) {
41
+ if (!aliasString)
42
+ return {};
43
+ const aliases = {};
44
+ const pairs = aliasString.split(',');
45
+ for (const pair of pairs) {
46
+ const [alias, target] = pair.split('=');
47
+ if (alias && target) {
48
+ aliases[alias.trim()] = target.trim();
49
+ }
50
+ }
51
+ return aliases;
52
+ }
53
+ function detectAliases() {
54
+ const tsconfigPath = path.join(process.cwd(), 'tsconfig.json');
55
+ if (!fs.existsSync(tsconfigPath)) {
56
+ return {};
57
+ }
58
+ try {
59
+ const content = fs.readFileSync(tsconfigPath, 'utf-8');
60
+ const tsconfig = JSON.parse(content);
61
+ const paths = tsconfig.compilerOptions?.paths || {};
62
+ const baseUrl = tsconfig.compilerOptions?.baseUrl || '.';
63
+ const aliases = {};
64
+ for (const [alias, targets] of Object.entries(paths)) {
65
+ if (Array.isArray(targets) && targets.length > 0) {
66
+ const cleanAlias = alias.replace(/\/\*$/, '/');
67
+ const cleanTarget = targets[0].replace(/\/\*$/, '/');
68
+ aliases[cleanAlias] = path.join(baseUrl, cleanTarget);
69
+ }
70
+ }
71
+ return aliases;
72
+ }
73
+ catch {
74
+ return {};
75
+ }
76
+ }
77
+ async function analyzeDeps(targetPath, options) {
78
+ console.log('🔍 Analyzing dependencies...');
79
+ console.log(` Target: ${targetPath}`);
80
+ console.log(` Direction: ${options.direction}`);
81
+ console.log(` Format: ${options.format}`);
82
+ console.log('');
83
+ const resolvedPath = path.resolve(process.cwd(), targetPath);
84
+ if (!fs.existsSync(resolvedPath)) {
85
+ console.error(`❌ Error: Path not found: ${resolvedPath}`);
86
+ process.exit(1);
87
+ }
88
+ const effectiveDirection = options.format === 'summary' ? 'both' : options.direction;
89
+ const analysisOptions = {
90
+ entry: resolvedPath,
91
+ direction: effectiveDirection,
92
+ maxDepth: options.depth ?? 10,
93
+ includeNodeModules: options.includeExternal ?? false,
94
+ includeTypeImports: options.includeTypes ?? true,
95
+ includeTests: options.includeTests ?? false,
96
+ aliases: {
97
+ ...detectAliases(),
98
+ ...parseAliases(options.aliases),
99
+ },
100
+ };
101
+ try {
102
+ const startTime = Date.now();
103
+ const graph = (0, analyzers_1.buildDependencyGraph)(analysisOptions);
104
+ const duration = Date.now() - startTime;
105
+ console.log(`✅ Analysis complete in ${duration}ms`);
106
+ console.log(` Found ${graph.stats.nodeCount} nodes, ${graph.stats.edgeCount} edges`);
107
+ console.log('');
108
+ let output;
109
+ if (options.format === 'svg') {
110
+ output = await (0, analyzers_1.formatAsSvg)(graph);
111
+ }
112
+ else {
113
+ output = (0, analyzers_1.formatGraph)(graph, options.format, {
114
+ pretty: true,
115
+ maxDepth: options.depth ?? 3,
116
+ });
117
+ }
118
+ if (options.output) {
119
+ const outputPath = path.resolve(process.cwd(), options.output);
120
+ fs.writeFileSync(outputPath, output, 'utf-8');
121
+ console.log(`📄 Output written to: ${outputPath}`);
122
+ }
123
+ else {
124
+ console.log(output);
125
+ }
126
+ if (graph.metadata.circularDependencies.length > 0) {
127
+ console.log('');
128
+ console.log(`⚠️ Warning: Found ${graph.metadata.circularDependencies.length} circular dependencies`);
129
+ }
130
+ }
131
+ catch (error) {
132
+ console.error('❌ Analysis failed:', error instanceof Error ? error.message : String(error));
133
+ process.exit(1);
134
+ }
135
+ }
136
+ //# sourceMappingURL=analyze-deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-deps.js","sourceRoot":"","sources":["../../src/commands/analyze-deps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const generateConstant: (input: string) => void;
@@ -0,0 +1,148 @@
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.generateConstant = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const DOMAINS_FOLDER = 'domains';
40
+ function detectDomainContext() {
41
+ const cwd = process.cwd();
42
+ const parentDir = path.basename(path.dirname(cwd));
43
+ const currentDir = path.basename(cwd);
44
+ if (parentDir === DOMAINS_FOLDER) {
45
+ const domainName = currentDir;
46
+ const domainPath = cwd;
47
+ const constantsFile = path.join(domainPath, 'utils', 'constant', `${domainName}-constants.ts`);
48
+ if (!fs.existsSync(constantsFile)) {
49
+ return {
50
+ isValid: false,
51
+ domainName,
52
+ domainPath,
53
+ constantsFile: null,
54
+ error: `Constants file not found. Run 'rbor domain ${domainName}' first.`,
55
+ };
56
+ }
57
+ return { isValid: true, domainName, domainPath, constantsFile };
58
+ }
59
+ const pathParts = cwd.split(path.sep);
60
+ const domainsIndex = pathParts.indexOf(DOMAINS_FOLDER);
61
+ if (domainsIndex !== -1 && pathParts.length > domainsIndex + 1) {
62
+ const domainName = pathParts[domainsIndex + 1];
63
+ const domainPath = pathParts.slice(0, domainsIndex + 2).join(path.sep);
64
+ const constantsFile = path.join(domainPath, 'utils', 'constant', `${domainName}-constants.ts`);
65
+ if (!fs.existsSync(constantsFile)) {
66
+ return {
67
+ isValid: false,
68
+ domainName,
69
+ domainPath,
70
+ constantsFile: null,
71
+ error: `Constants file not found. Run 'rbor domain ${domainName}' first.`,
72
+ };
73
+ }
74
+ return { isValid: true, domainName, domainPath, constantsFile };
75
+ }
76
+ return {
77
+ isValid: false,
78
+ domainName: null,
79
+ domainPath: null,
80
+ constantsFile: null,
81
+ error: `Not inside a domain folder. Navigate to domains/<domain>/ and try again.`,
82
+ };
83
+ }
84
+ function toConstantKey(input) {
85
+ return input
86
+ .replace(/[\/\-\s]+/g, '_')
87
+ .replace(/([a-z])([A-Z])/g, '$1_$2')
88
+ .toUpperCase();
89
+ }
90
+ function parseConstantInput(input) {
91
+ const eqIndex = input.indexOf('=');
92
+ if (eqIndex === -1) {
93
+ console.error(`❌ Invalid format. Use: rbor constant <key>=<value>`);
94
+ console.error(` Example: rbor constant time=2000`);
95
+ process.exit(1);
96
+ }
97
+ const rawKey = input.substring(0, eqIndex).trim();
98
+ const rawValue = input.substring(eqIndex + 1).trim();
99
+ if (!rawKey || !rawValue) {
100
+ console.error(`❌ Both key and value are required. Use: rbor constant <key>=<value>`);
101
+ process.exit(1);
102
+ }
103
+ return { key: toConstantKey(rawKey), value: rawValue };
104
+ }
105
+ function inferType(value) {
106
+ // Number
107
+ if (/^-?\d+(\.\d+)?$/.test(value))
108
+ return value;
109
+ // Boolean
110
+ if (value === 'true' || value === 'false')
111
+ return value;
112
+ // String (wrap in quotes if not already)
113
+ if (value.startsWith("'") || value.startsWith('"'))
114
+ return value;
115
+ return `'${value}'`;
116
+ }
117
+ function addConstant(constantsFile, key, value) {
118
+ let content = fs.readFileSync(constantsFile, 'utf-8');
119
+ const typedValue = inferType(value);
120
+ if (content.includes(`${key}`)) {
121
+ console.log(`⚠️ Constant '${key}' already exists in the constants file`);
122
+ return;
123
+ }
124
+ // If the file is just a bare `export {};`, replace it with the first constant
125
+ if (/export\s*\{\s*\}\s*;?\s*$/.test(content.trim())) {
126
+ const newContent = content.replace(/export\s*\{\s*\}\s*;?\s*$/, `export const ${key} = ${typedValue};\n`);
127
+ fs.writeFileSync(constantsFile, newContent);
128
+ console.log(`✅ Added constant: ${key} = ${typedValue}`);
129
+ return;
130
+ }
131
+ // Otherwise, append at the end of the file
132
+ const newEntry = `export const ${key} = ${typedValue};\n`;
133
+ content = content.trimEnd() + '\n' + newEntry;
134
+ fs.writeFileSync(constantsFile, content);
135
+ console.log(`✅ Added constant: ${key} = ${typedValue}`);
136
+ }
137
+ const generateConstant = (input) => {
138
+ const context = detectDomainContext();
139
+ if (!context.isValid) {
140
+ console.error(`❌ ${context.error}`);
141
+ process.exit(1);
142
+ }
143
+ const { key, value } = parseConstantInput(input);
144
+ console.log(`📌 Adding constant to ${context.domainName}`);
145
+ addConstant(context.constantsFile, key, value);
146
+ };
147
+ exports.generateConstant = generateConstant;
148
+ //# sourceMappingURL=generate-constant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-constant.js","sourceRoot":"","sources":["../../src/commands/generate-constant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { DomainOptions } from '../cli';
2
+ export declare const generateDomain: (domainName: string, options: DomainOptions) => void;
@@ -0,0 +1,87 @@
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.generateDomain = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const create_file_1 = require("../utils/create-file");
40
+ const config_1 = require("../utils/config");
41
+ function ensureDomainsFolder(domainsPath) {
42
+ if (!fs.existsSync(domainsPath)) {
43
+ fs.mkdirSync(domainsPath, { recursive: true });
44
+ console.log(` 📁 Created ${domainsPath} folder`);
45
+ }
46
+ return domainsPath;
47
+ }
48
+ const generateDomain = (domainName, options) => {
49
+ const config = (0, config_1.loadConfig)();
50
+ const httpClient = options.http || config.http;
51
+ console.log(`🚀 Generating domain: ${domainName}`);
52
+ console.log(` 📡 HTTP client: ${httpClient}`);
53
+ const domainsPath = (0, config_1.getDomainsPath)(config);
54
+ ensureDomainsFolder(domainsPath);
55
+ const targetDir = path.join(domainsPath, domainName);
56
+ if (fs.existsSync(targetDir)) {
57
+ console.error(`❌ Error: Directory "${config.domainsPath}/${domainName}" already exists!`);
58
+ process.exit(1);
59
+ }
60
+ const folders = [
61
+ '__test__',
62
+ 'components',
63
+ 'hooks',
64
+ 'methods',
65
+ 'schema',
66
+ 'services',
67
+ 'types',
68
+ 'utils',
69
+ ];
70
+ folders.forEach(folder => {
71
+ const folderPath = path.join(targetDir, folder);
72
+ fs.mkdirSync(folderPath, { recursive: true });
73
+ });
74
+ (0, create_file_1.ensureGenerateUrl)();
75
+ (0, create_file_1.createBarrel)(domainName, targetDir);
76
+ (0, create_file_1.createComponent)(domainName, targetDir);
77
+ (0, create_file_1.createHooks)(domainName, targetDir);
78
+ (0, create_file_1.createMethods)(domainName, targetDir);
79
+ (0, create_file_1.createServices)(domainName, targetDir, httpClient);
80
+ (0, create_file_1.createTypes)(domainName, targetDir);
81
+ (0, create_file_1.createUtils)(domainName, targetDir);
82
+ (0, create_file_1.createEndpoints)(domainName, targetDir);
83
+ (0, create_file_1.createSchema)(domainName, targetDir);
84
+ console.log(`✅ Successfully created domain: ${config.domainsPath}/${domainName}`);
85
+ };
86
+ exports.generateDomain = generateDomain;
87
+ //# sourceMappingURL=generate-domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-domain.js","sourceRoot":"","sources":["../../src/commands/generate-domain.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,sDAW8B;AAE9B,4CAA6D;AAE7D,SAAS,mBAAmB,CAAC,WAAmB;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAEM,MAAM,cAAc,GAAG,CAAC,UAAkB,EAAE,OAAsB,EAAQ,EAAE;IACjF,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;IAE/C,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;IAE/C,MAAM,WAAW,GAAG,IAAA,uBAAc,EAAC,MAAM,CAAC,CAAC;IAC3C,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAErD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,WAAW,IAAI,UAAU,mBAAmB,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG;QACd,UAAU;QACV,YAAY;QACZ,OAAO;QACP,SAAS;QACT,QAAQ;QACR,UAAU;QACV,OAAO;QACP,OAAO;KACR,CAAC;IAEF,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChD,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAA,+BAAiB,GAAE,CAAC;IAEpB,IAAA,0BAAY,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAEpC,IAAA,6BAAe,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACvC,IAAA,yBAAW,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACnC,IAAA,2BAAa,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACrC,IAAA,4BAAc,EAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAClD,IAAA,yBAAW,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACnC,IAAA,yBAAW,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACnC,IAAA,6BAAe,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACvC,IAAA,0BAAY,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC,CAAC;AACpF,CAAC,CAAC;AA/CW,QAAA,cAAc,kBA+CzB"}
@@ -0,0 +1 @@
1
+ export declare const generateEndpoint: (endpointPath: string) => void;