nest-hex 0.2.0 → 0.3.2
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/README.md +155 -267
- package/dist/src/cli/bin.js +2644 -0
- package/dist/src/cli/commands/index.d.ts +23 -0
- package/dist/src/cli/commands/index.js +2609 -0
- package/dist/src/cli/config/defaults.d.ts +74 -0
- package/dist/src/cli/config/defaults.js +76 -0
- package/dist/src/cli/config/define-config.d.ts +74 -0
- package/dist/src/cli/config/define-config.js +62 -0
- package/dist/src/cli/config/loader.d.ts +74 -0
- package/dist/src/cli/config/loader.js +106 -0
- package/dist/src/cli/config/validator.d.ts +81 -0
- package/dist/src/cli/config/validator.js +108 -0
- package/dist/src/cli/generators/adapter.generator.d.ts +235 -0
- package/dist/src/cli/generators/adapter.generator.js +377 -0
- package/dist/src/cli/generators/base.generator.d.ts +190 -0
- package/dist/src/cli/generators/base.generator.js +312 -0
- package/dist/src/cli/generators/index.d.ts +264 -0
- package/dist/src/cli/generators/index.js +467 -0
- package/dist/src/cli/generators/port.generator.d.ts +211 -0
- package/dist/src/cli/generators/port.generator.js +364 -0
- package/dist/src/cli/generators/service.generator.d.ts +208 -0
- package/dist/src/cli/generators/service.generator.js +340 -0
- package/dist/src/cli/index.d.ts +74 -0
- package/dist/src/cli/index.js +69 -0
- package/dist/src/cli/types/config.types.d.ts +73 -0
- package/dist/src/cli/types/config.types.js +56 -0
- package/dist/src/cli/types/generator.types.d.ts +46 -0
- package/dist/src/cli/types/generator.types.js +56 -0
- package/dist/src/cli/types/index.d.ts +121 -0
- package/dist/src/cli/types/index.js +56 -0
- package/dist/src/cli/types/template.types.d.ts +28 -0
- package/dist/src/cli/types/template.types.js +56 -0
- package/dist/src/cli/ui/components/index.d.ts +97 -0
- package/dist/src/cli/ui/components/index.js +1507 -0
- package/dist/src/cli/utils/file-writer.d.ts +17 -0
- package/dist/src/cli/utils/file-writer.js +100 -0
- package/dist/src/cli/utils/linter-detector.d.ts +12 -0
- package/dist/src/cli/utils/linter-detector.js +128 -0
- package/dist/src/cli/utils/linter-runner.d.ts +17 -0
- package/dist/src/cli/utils/linter-runner.js +101 -0
- package/dist/src/cli/utils/name-transformer.d.ts +18 -0
- package/dist/src/cli/utils/name-transformer.js +90 -0
- package/dist/src/cli/utils/path-resolver.d.ts +5 -0
- package/dist/src/cli/utils/path-resolver.js +78 -0
- package/dist/src/cli/utils/port-scanner.d.ts +93 -0
- package/dist/src/cli/utils/port-scanner.js +104 -0
- package/dist/src/cli/utils/template-renderer.d.ts +30 -0
- package/dist/src/cli/utils/template-renderer.js +95 -0
- package/dist/{index.d.ts → src/index.d.ts} +60 -30
- package/dist/{index.js → src/index.js} +45 -13
- package/package.json +10 -10
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File writing utilities with conflict detection
|
|
3
|
+
* Uses Bun's native APIs for faster performance
|
|
4
|
+
*/
|
|
5
|
+
interface WriteOptions {
|
|
6
|
+
force?: boolean;
|
|
7
|
+
dryRun?: boolean;
|
|
8
|
+
}
|
|
9
|
+
interface WriteResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
path: string;
|
|
12
|
+
existed: boolean;
|
|
13
|
+
written: boolean;
|
|
14
|
+
message?: string;
|
|
15
|
+
}
|
|
16
|
+
declare function writeFile(filePath: string, content: string, options?: WriteOptions): Promise<WriteResult>;
|
|
17
|
+
export { writeFile, WriteResult, WriteOptions };
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
var import_node_module = require("node:module");
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
9
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
10
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
11
|
+
for (let key of __getOwnPropNames(mod))
|
|
12
|
+
if (!__hasOwnProp.call(to, key))
|
|
13
|
+
__defProp(to, key, {
|
|
14
|
+
get: () => mod[key],
|
|
15
|
+
enumerable: true
|
|
16
|
+
});
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
20
|
+
var __toCommonJS = (from) => {
|
|
21
|
+
var entry = __moduleCache.get(from), desc;
|
|
22
|
+
if (entry)
|
|
23
|
+
return entry;
|
|
24
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
25
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
26
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
27
|
+
get: () => from[key],
|
|
28
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
29
|
+
}));
|
|
30
|
+
__moduleCache.set(from, entry);
|
|
31
|
+
return entry;
|
|
32
|
+
};
|
|
33
|
+
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
34
|
+
var __export = (target, all) => {
|
|
35
|
+
for (var name in all)
|
|
36
|
+
__defProp(target, name, {
|
|
37
|
+
get: all[name],
|
|
38
|
+
enumerable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
set: (newValue) => all[name] = () => newValue
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
var __legacyDecorateClassTS = function(decorators, target, key, desc) {
|
|
44
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
45
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
46
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
47
|
+
else
|
|
48
|
+
for (var i = decorators.length - 1;i >= 0; i--)
|
|
49
|
+
if (d = decorators[i])
|
|
50
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
51
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// src/cli/utils/file-writer.ts
|
|
55
|
+
var exports_file_writer = {};
|
|
56
|
+
__export(exports_file_writer, {
|
|
57
|
+
writeFile: () => writeFile
|
|
58
|
+
});
|
|
59
|
+
module.exports = __toCommonJS(exports_file_writer);
|
|
60
|
+
async function writeFile(filePath, content, options = {}) {
|
|
61
|
+
const { force = false, dryRun = false } = options;
|
|
62
|
+
const file = Bun.file(filePath);
|
|
63
|
+
const existed = await file.exists();
|
|
64
|
+
if (existed && !force && !dryRun) {
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
path: filePath,
|
|
68
|
+
existed: true,
|
|
69
|
+
written: false,
|
|
70
|
+
message: "File already exists. Use --force to overwrite."
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
if (dryRun) {
|
|
74
|
+
return {
|
|
75
|
+
success: true,
|
|
76
|
+
path: filePath,
|
|
77
|
+
existed,
|
|
78
|
+
written: false,
|
|
79
|
+
message: "Dry run - file not written"
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
await Bun.write(filePath, content);
|
|
84
|
+
return {
|
|
85
|
+
success: true,
|
|
86
|
+
path: filePath,
|
|
87
|
+
existed,
|
|
88
|
+
written: true,
|
|
89
|
+
message: existed ? "File overwritten" : "File created"
|
|
90
|
+
};
|
|
91
|
+
} catch (error) {
|
|
92
|
+
return {
|
|
93
|
+
success: false,
|
|
94
|
+
path: filePath,
|
|
95
|
+
existed,
|
|
96
|
+
written: false,
|
|
97
|
+
message: `Failed to write file: ${error instanceof Error ? error.message : String(error)}`
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface LinterConfig {
|
|
2
|
+
type: "biome" | "prettier" | "script" | "none";
|
|
3
|
+
command?: string;
|
|
4
|
+
args?: string[];
|
|
5
|
+
description?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Detects which linter is available in the project
|
|
9
|
+
* Priority: Biome > Prettier > lint script > none
|
|
10
|
+
*/
|
|
11
|
+
declare function detectLinter(projectRoot: string): Promise<LinterConfig>;
|
|
12
|
+
export { detectLinter, LinterConfig };
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
var import_node_module = require("node:module");
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
9
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
10
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
11
|
+
for (let key of __getOwnPropNames(mod))
|
|
12
|
+
if (!__hasOwnProp.call(to, key))
|
|
13
|
+
__defProp(to, key, {
|
|
14
|
+
get: () => mod[key],
|
|
15
|
+
enumerable: true
|
|
16
|
+
});
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
20
|
+
var __toCommonJS = (from) => {
|
|
21
|
+
var entry = __moduleCache.get(from), desc;
|
|
22
|
+
if (entry)
|
|
23
|
+
return entry;
|
|
24
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
25
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
26
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
27
|
+
get: () => from[key],
|
|
28
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
29
|
+
}));
|
|
30
|
+
__moduleCache.set(from, entry);
|
|
31
|
+
return entry;
|
|
32
|
+
};
|
|
33
|
+
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
34
|
+
var __export = (target, all) => {
|
|
35
|
+
for (var name in all)
|
|
36
|
+
__defProp(target, name, {
|
|
37
|
+
get: all[name],
|
|
38
|
+
enumerable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
set: (newValue) => all[name] = () => newValue
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
var __legacyDecorateClassTS = function(decorators, target, key, desc) {
|
|
44
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
45
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
46
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
47
|
+
else
|
|
48
|
+
for (var i = decorators.length - 1;i >= 0; i--)
|
|
49
|
+
if (d = decorators[i])
|
|
50
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
51
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// src/cli/utils/linter-detector.ts
|
|
55
|
+
var exports_linter_detector = {};
|
|
56
|
+
__export(exports_linter_detector, {
|
|
57
|
+
detectLinter: () => detectLinter
|
|
58
|
+
});
|
|
59
|
+
module.exports = __toCommonJS(exports_linter_detector);
|
|
60
|
+
var import_node_fs = require("node:fs");
|
|
61
|
+
var import_node_path = require("node:path");
|
|
62
|
+
async function detectLinter(projectRoot) {
|
|
63
|
+
const biomeConfigExists = import_node_fs.existsSync(import_node_path.join(projectRoot, "biome.json")) || import_node_fs.existsSync(import_node_path.join(projectRoot, "biome.jsonc"));
|
|
64
|
+
const packageJsonPath = import_node_path.join(projectRoot, "package.json");
|
|
65
|
+
let packageJson = {};
|
|
66
|
+
if (import_node_fs.existsSync(packageJsonPath)) {
|
|
67
|
+
try {
|
|
68
|
+
packageJson = JSON.parse(import_node_fs.readFileSync(packageJsonPath, "utf-8"));
|
|
69
|
+
} catch (error) {
|
|
70
|
+
console.warn(`Warning: Failed to parse package.json at ${packageJsonPath}`);
|
|
71
|
+
console.warn(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
72
|
+
console.warn(`Continuing with linter detection using config files only...
|
|
73
|
+
`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const hasBiomeDep = packageJson.devDependencies?.["@biomejs/biome"] || packageJson.devDependencies?.biome;
|
|
77
|
+
if (biomeConfigExists || hasBiomeDep) {
|
|
78
|
+
return {
|
|
79
|
+
type: "biome",
|
|
80
|
+
command: "biome",
|
|
81
|
+
args: ["check", "--write"],
|
|
82
|
+
description: "Formatting with Biome"
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const prettierConfigFiles = [
|
|
86
|
+
".prettierrc",
|
|
87
|
+
".prettierrc.json",
|
|
88
|
+
".prettierrc.yml",
|
|
89
|
+
".prettierrc.yaml",
|
|
90
|
+
".prettierrc.js",
|
|
91
|
+
".prettierrc.cjs",
|
|
92
|
+
"prettier.config.js",
|
|
93
|
+
"prettier.config.cjs"
|
|
94
|
+
];
|
|
95
|
+
const prettierConfigExists = prettierConfigFiles.some((file) => import_node_fs.existsSync(import_node_path.join(projectRoot, file)));
|
|
96
|
+
const hasPrettierDep = packageJson.devDependencies?.prettier;
|
|
97
|
+
if (prettierConfigExists || hasPrettierDep) {
|
|
98
|
+
return {
|
|
99
|
+
type: "prettier",
|
|
100
|
+
command: "prettier",
|
|
101
|
+
args: ["--write"],
|
|
102
|
+
description: "Formatting with Prettier"
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
const lintScripts = packageJson.scripts;
|
|
106
|
+
if (lintScripts) {
|
|
107
|
+
if (lintScripts["lint:fix"]) {
|
|
108
|
+
return {
|
|
109
|
+
type: "script",
|
|
110
|
+
command: "bun",
|
|
111
|
+
args: ["run", "lint:fix"],
|
|
112
|
+
description: "Running lint:fix script"
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (lintScripts.lint) {
|
|
116
|
+
return {
|
|
117
|
+
type: "script",
|
|
118
|
+
command: "bun",
|
|
119
|
+
args: ["run", "lint"],
|
|
120
|
+
description: "Running lint script"
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
type: "none",
|
|
126
|
+
description: "No linter detected"
|
|
127
|
+
};
|
|
128
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
interface LinterConfig {
|
|
2
|
+
type: "biome" | "prettier" | "script" | "none";
|
|
3
|
+
command?: string;
|
|
4
|
+
args?: string[];
|
|
5
|
+
description?: string;
|
|
6
|
+
}
|
|
7
|
+
interface LintResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
stdout: string;
|
|
10
|
+
stderr: string;
|
|
11
|
+
code: number | null;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Runs the detected linter on specified files
|
|
15
|
+
*/
|
|
16
|
+
declare function runLinter(linterConfig: LinterConfig, files: string[], cwd: string): Promise<LintResult>;
|
|
17
|
+
export { runLinter, LintResult };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
var import_node_module = require("node:module");
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
9
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
10
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
11
|
+
for (let key of __getOwnPropNames(mod))
|
|
12
|
+
if (!__hasOwnProp.call(to, key))
|
|
13
|
+
__defProp(to, key, {
|
|
14
|
+
get: () => mod[key],
|
|
15
|
+
enumerable: true
|
|
16
|
+
});
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
20
|
+
var __toCommonJS = (from) => {
|
|
21
|
+
var entry = __moduleCache.get(from), desc;
|
|
22
|
+
if (entry)
|
|
23
|
+
return entry;
|
|
24
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
25
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
26
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
27
|
+
get: () => from[key],
|
|
28
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
29
|
+
}));
|
|
30
|
+
__moduleCache.set(from, entry);
|
|
31
|
+
return entry;
|
|
32
|
+
};
|
|
33
|
+
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
34
|
+
var __export = (target, all) => {
|
|
35
|
+
for (var name in all)
|
|
36
|
+
__defProp(target, name, {
|
|
37
|
+
get: all[name],
|
|
38
|
+
enumerable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
set: (newValue) => all[name] = () => newValue
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
var __legacyDecorateClassTS = function(decorators, target, key, desc) {
|
|
44
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
45
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
46
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
47
|
+
else
|
|
48
|
+
for (var i = decorators.length - 1;i >= 0; i--)
|
|
49
|
+
if (d = decorators[i])
|
|
50
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
51
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// src/cli/utils/linter-runner.ts
|
|
55
|
+
var exports_linter_runner = {};
|
|
56
|
+
__export(exports_linter_runner, {
|
|
57
|
+
runLinter: () => runLinter
|
|
58
|
+
});
|
|
59
|
+
module.exports = __toCommonJS(exports_linter_runner);
|
|
60
|
+
var import_node_child_process = require("node:child_process");
|
|
61
|
+
async function runLinter(linterConfig, files, cwd) {
|
|
62
|
+
if (linterConfig.type === "none" || !linterConfig.command || !linterConfig.args) {
|
|
63
|
+
return {
|
|
64
|
+
success: true,
|
|
65
|
+
stdout: "",
|
|
66
|
+
stderr: "",
|
|
67
|
+
code: 0
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return new Promise((resolve) => {
|
|
71
|
+
const args = linterConfig.args || [];
|
|
72
|
+
const command = `${linterConfig.command} ${args.join(" ")} ${files.join(" ")}`;
|
|
73
|
+
import_node_child_process.exec(command, { cwd }, (error, stdout, stderr) => {
|
|
74
|
+
const noFilesProcessed = stderr.includes("No files were processed") || stdout.includes("No files were processed") || stdout.includes("Checked 0 files");
|
|
75
|
+
if (error) {
|
|
76
|
+
if (noFilesProcessed) {
|
|
77
|
+
resolve({
|
|
78
|
+
success: true,
|
|
79
|
+
stdout,
|
|
80
|
+
stderr,
|
|
81
|
+
code: 0
|
|
82
|
+
});
|
|
83
|
+
} else {
|
|
84
|
+
resolve({
|
|
85
|
+
success: false,
|
|
86
|
+
stdout,
|
|
87
|
+
stderr,
|
|
88
|
+
code: error.code ?? null
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
resolve({
|
|
93
|
+
success: true,
|
|
94
|
+
stdout,
|
|
95
|
+
stderr,
|
|
96
|
+
code: 0
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Name transformation utilities
|
|
3
|
+
*/
|
|
4
|
+
declare function toKebabCase(str: string): string;
|
|
5
|
+
declare function toCamelCase(str: string): string;
|
|
6
|
+
declare function toPascalCase(str: string): string;
|
|
7
|
+
declare function toSnakeCase(str: string): string;
|
|
8
|
+
declare function toScreamingSnakeCase(str: string): string;
|
|
9
|
+
interface NameVariations {
|
|
10
|
+
original: string;
|
|
11
|
+
kebab: string;
|
|
12
|
+
camel: string;
|
|
13
|
+
pascal: string;
|
|
14
|
+
snake: string;
|
|
15
|
+
screamingSnake: string;
|
|
16
|
+
}
|
|
17
|
+
declare function generateNameVariations(name: string): NameVariations;
|
|
18
|
+
export { toSnakeCase, toScreamingSnakeCase, toPascalCase, toKebabCase, toCamelCase, generateNameVariations, NameVariations };
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
var import_node_module = require("node:module");
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
9
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
10
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
11
|
+
for (let key of __getOwnPropNames(mod))
|
|
12
|
+
if (!__hasOwnProp.call(to, key))
|
|
13
|
+
__defProp(to, key, {
|
|
14
|
+
get: () => mod[key],
|
|
15
|
+
enumerable: true
|
|
16
|
+
});
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
20
|
+
var __toCommonJS = (from) => {
|
|
21
|
+
var entry = __moduleCache.get(from), desc;
|
|
22
|
+
if (entry)
|
|
23
|
+
return entry;
|
|
24
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
25
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
26
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
27
|
+
get: () => from[key],
|
|
28
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
29
|
+
}));
|
|
30
|
+
__moduleCache.set(from, entry);
|
|
31
|
+
return entry;
|
|
32
|
+
};
|
|
33
|
+
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
34
|
+
var __export = (target, all) => {
|
|
35
|
+
for (var name in all)
|
|
36
|
+
__defProp(target, name, {
|
|
37
|
+
get: all[name],
|
|
38
|
+
enumerable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
set: (newValue) => all[name] = () => newValue
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
var __legacyDecorateClassTS = function(decorators, target, key, desc) {
|
|
44
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
45
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
46
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
47
|
+
else
|
|
48
|
+
for (var i = decorators.length - 1;i >= 0; i--)
|
|
49
|
+
if (d = decorators[i])
|
|
50
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
51
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// src/cli/utils/name-transformer.ts
|
|
55
|
+
var exports_name_transformer = {};
|
|
56
|
+
__export(exports_name_transformer, {
|
|
57
|
+
toSnakeCase: () => toSnakeCase,
|
|
58
|
+
toScreamingSnakeCase: () => toScreamingSnakeCase,
|
|
59
|
+
toPascalCase: () => toPascalCase,
|
|
60
|
+
toKebabCase: () => toKebabCase,
|
|
61
|
+
toCamelCase: () => toCamelCase,
|
|
62
|
+
generateNameVariations: () => generateNameVariations
|
|
63
|
+
});
|
|
64
|
+
module.exports = __toCommonJS(exports_name_transformer);
|
|
65
|
+
function toKebabCase(str) {
|
|
66
|
+
return str.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
|
|
67
|
+
}
|
|
68
|
+
function toCamelCase(str) {
|
|
69
|
+
return str.replace(/[-_\s]+(.)?/g, (_, c) => c ? c.toUpperCase() : "").replace(/^[A-Z]/, (c) => c.toLowerCase());
|
|
70
|
+
}
|
|
71
|
+
function toPascalCase(str) {
|
|
72
|
+
const camel = toCamelCase(str);
|
|
73
|
+
return camel.charAt(0).toUpperCase() + camel.slice(1);
|
|
74
|
+
}
|
|
75
|
+
function toSnakeCase(str) {
|
|
76
|
+
return str.replace(/([a-z0-9])([A-Z])/g, "$1_$2").replace(/[\s-]+/g, "_").toLowerCase();
|
|
77
|
+
}
|
|
78
|
+
function toScreamingSnakeCase(str) {
|
|
79
|
+
return toSnakeCase(str).toUpperCase();
|
|
80
|
+
}
|
|
81
|
+
function generateNameVariations(name) {
|
|
82
|
+
return {
|
|
83
|
+
original: name,
|
|
84
|
+
kebab: toKebabCase(name),
|
|
85
|
+
camel: toCamelCase(name),
|
|
86
|
+
pascal: toPascalCase(name),
|
|
87
|
+
snake: toSnakeCase(name),
|
|
88
|
+
screamingSnake: toScreamingSnakeCase(name)
|
|
89
|
+
};
|
|
90
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
declare function resolvePath(...segments: string[]): string;
|
|
2
|
+
declare function joinPaths(...segments: string[]): string;
|
|
3
|
+
declare function getRelativePath(from: string, to: string): string;
|
|
4
|
+
declare function getImportPath(from: string, to: string): string;
|
|
5
|
+
export { resolvePath, joinPaths, getRelativePath, getImportPath };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
var import_node_module = require("node:module");
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
9
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
10
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
11
|
+
for (let key of __getOwnPropNames(mod))
|
|
12
|
+
if (!__hasOwnProp.call(to, key))
|
|
13
|
+
__defProp(to, key, {
|
|
14
|
+
get: () => mod[key],
|
|
15
|
+
enumerable: true
|
|
16
|
+
});
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
20
|
+
var __toCommonJS = (from) => {
|
|
21
|
+
var entry = __moduleCache.get(from), desc;
|
|
22
|
+
if (entry)
|
|
23
|
+
return entry;
|
|
24
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
25
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
26
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
27
|
+
get: () => from[key],
|
|
28
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
29
|
+
}));
|
|
30
|
+
__moduleCache.set(from, entry);
|
|
31
|
+
return entry;
|
|
32
|
+
};
|
|
33
|
+
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
34
|
+
var __export = (target, all) => {
|
|
35
|
+
for (var name in all)
|
|
36
|
+
__defProp(target, name, {
|
|
37
|
+
get: all[name],
|
|
38
|
+
enumerable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
set: (newValue) => all[name] = () => newValue
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
var __legacyDecorateClassTS = function(decorators, target, key, desc) {
|
|
44
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
45
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
46
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
47
|
+
else
|
|
48
|
+
for (var i = decorators.length - 1;i >= 0; i--)
|
|
49
|
+
if (d = decorators[i])
|
|
50
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
51
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// src/cli/utils/path-resolver.ts
|
|
55
|
+
var exports_path_resolver = {};
|
|
56
|
+
__export(exports_path_resolver, {
|
|
57
|
+
resolvePath: () => resolvePath,
|
|
58
|
+
joinPaths: () => joinPaths,
|
|
59
|
+
getRelativePath: () => getRelativePath,
|
|
60
|
+
getImportPath: () => getImportPath
|
|
61
|
+
});
|
|
62
|
+
module.exports = __toCommonJS(exports_path_resolver);
|
|
63
|
+
var import_node_path = require("node:path");
|
|
64
|
+
function resolvePath(...segments) {
|
|
65
|
+
return import_node_path.resolve(...segments);
|
|
66
|
+
}
|
|
67
|
+
function joinPaths(...segments) {
|
|
68
|
+
return import_node_path.join(...segments);
|
|
69
|
+
}
|
|
70
|
+
function getRelativePath(from, to) {
|
|
71
|
+
const relativePath = import_node_path.relative(from, to);
|
|
72
|
+
return relativePath.replace(/\\/g, "/");
|
|
73
|
+
}
|
|
74
|
+
function getImportPath(from, to) {
|
|
75
|
+
const relPath = getRelativePath(import_node_path.dirname(from), to);
|
|
76
|
+
const withoutExt = relPath.replace(/\.(ts|js)$/, "");
|
|
77
|
+
return withoutExt.startsWith(".") ? withoutExt : `./${withoutExt}`;
|
|
78
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration types for nest-hex CLI
|
|
3
|
+
*/
|
|
4
|
+
interface NestHexConfig {
|
|
5
|
+
/**
|
|
6
|
+
* Output directory configuration
|
|
7
|
+
*/
|
|
8
|
+
output?: {
|
|
9
|
+
/**
|
|
10
|
+
* Directory for generated ports
|
|
11
|
+
* @default 'src/ports'
|
|
12
|
+
*/
|
|
13
|
+
portsDir?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Directory for generated adapters
|
|
16
|
+
* @default 'src/adapters'
|
|
17
|
+
*/
|
|
18
|
+
adaptersDir?: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Naming conventions
|
|
22
|
+
*/
|
|
23
|
+
naming?: {
|
|
24
|
+
/**
|
|
25
|
+
* Suffix for port tokens
|
|
26
|
+
* @default 'PORT'
|
|
27
|
+
*/
|
|
28
|
+
portSuffix?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Suffix for adapter classes
|
|
31
|
+
* @default 'Adapter'
|
|
32
|
+
*/
|
|
33
|
+
adapterSuffix?: string;
|
|
34
|
+
/**
|
|
35
|
+
* File naming case
|
|
36
|
+
* @default 'kebab'
|
|
37
|
+
*/
|
|
38
|
+
fileCase?: "kebab" | "camel" | "pascal";
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Code style preferences
|
|
42
|
+
*/
|
|
43
|
+
style?: {
|
|
44
|
+
/**
|
|
45
|
+
* Indentation style
|
|
46
|
+
* @default 'tab'
|
|
47
|
+
*/
|
|
48
|
+
indent?: "tab" | 2 | 4;
|
|
49
|
+
/**
|
|
50
|
+
* Quote style
|
|
51
|
+
* @default 'single'
|
|
52
|
+
*/
|
|
53
|
+
quotes?: "single" | "double";
|
|
54
|
+
/**
|
|
55
|
+
* Use semicolons
|
|
56
|
+
* @default true
|
|
57
|
+
*/
|
|
58
|
+
semicolons?: boolean;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Custom template paths
|
|
62
|
+
*/
|
|
63
|
+
templates?: {
|
|
64
|
+
portModule?: string;
|
|
65
|
+
portToken?: string;
|
|
66
|
+
portInterface?: string;
|
|
67
|
+
portService?: string;
|
|
68
|
+
adapterModule?: string;
|
|
69
|
+
adapterService?: string;
|
|
70
|
+
adapterTypes?: string;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
interface PortInfo {
|
|
74
|
+
/** Port name in kebab-case (e.g., 'object-storage') */
|
|
75
|
+
name: string;
|
|
76
|
+
/** Port name in PascalCase (e.g., 'ObjectStorage') */
|
|
77
|
+
pascalName: string;
|
|
78
|
+
/** Token name (e.g., 'OBJECT_STORAGE_PORT') */
|
|
79
|
+
tokenName: string;
|
|
80
|
+
/** Relative import path from adapter to port token file */
|
|
81
|
+
tokenImportPath: string;
|
|
82
|
+
/** Absolute path to port directory */
|
|
83
|
+
portPath: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Scans the ports directory and returns information about all available ports
|
|
87
|
+
*/
|
|
88
|
+
declare function scanAvailablePorts(config: NestHexConfig, projectRoot?: string): PortInfo[];
|
|
89
|
+
/**
|
|
90
|
+
* Finds a specific port by name
|
|
91
|
+
*/
|
|
92
|
+
declare function findPortByName(portName: string, config: NestHexConfig, projectRoot?: string): PortInfo | null;
|
|
93
|
+
export { scanAvailablePorts, findPortByName, PortInfo };
|