nest-hex 0.2.0 → 0.2.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 +183 -4
- package/dist/src/cli/bin.js +2630 -0
- package/dist/src/cli/commands/index.d.ts +23 -0
- package/dist/src/cli/commands/index.js +2595 -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 +1493 -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.js → src/index.js} +14 -0
- package/package.json +10 -10
- /package/dist/{index.d.ts → src/index.d.ts} +0 -0
|
@@ -0,0 +1,104 @@
|
|
|
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/port-scanner.ts
|
|
55
|
+
var exports_port_scanner = {};
|
|
56
|
+
__export(exports_port_scanner, {
|
|
57
|
+
scanAvailablePorts: () => scanAvailablePorts,
|
|
58
|
+
findPortByName: () => findPortByName
|
|
59
|
+
});
|
|
60
|
+
module.exports = __toCommonJS(exports_port_scanner);
|
|
61
|
+
var import_node_fs = require("node:fs");
|
|
62
|
+
var import_node_path = require("node:path");
|
|
63
|
+
function scanAvailablePorts(config, projectRoot = process.cwd()) {
|
|
64
|
+
const portsDir = config.output?.portsDir || "src/ports";
|
|
65
|
+
const portsDirPath = import_node_path.join(projectRoot, portsDir);
|
|
66
|
+
if (!import_node_fs.existsSync(portsDirPath)) {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
const ports = [];
|
|
70
|
+
const entries = import_node_fs.readdirSync(portsDirPath, { withFileTypes: true });
|
|
71
|
+
for (const entry of entries) {
|
|
72
|
+
if (!entry.isDirectory()) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const portName = entry.name;
|
|
76
|
+
const portPath = import_node_path.join(portsDirPath, portName);
|
|
77
|
+
const tokenFileName = `${portName}.token.ts`;
|
|
78
|
+
const tokenFilePath = import_node_path.join(portPath, tokenFileName);
|
|
79
|
+
if (!import_node_fs.existsSync(tokenFilePath)) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const tokenFileContent = import_node_fs.readFileSync(tokenFilePath, "utf-8");
|
|
83
|
+
const tokenMatch = tokenFileContent.match(/export\s+const\s+([A-Z_]+)\s*=\s*Symbol/);
|
|
84
|
+
if (!tokenMatch || !tokenMatch[1]) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const tokenName = tokenMatch[1];
|
|
88
|
+
const pascalName = portName.split("-").map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("");
|
|
89
|
+
const portsDirName = portsDir.split("/").pop() || "ports";
|
|
90
|
+
const tokenImportPath = `../../${portsDirName}/${portName}`;
|
|
91
|
+
ports.push({
|
|
92
|
+
name: portName,
|
|
93
|
+
pascalName,
|
|
94
|
+
tokenName,
|
|
95
|
+
tokenImportPath,
|
|
96
|
+
portPath
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return ports;
|
|
100
|
+
}
|
|
101
|
+
function findPortByName(portName, config, projectRoot = process.cwd()) {
|
|
102
|
+
const ports = scanAvailablePorts(config, projectRoot);
|
|
103
|
+
return ports.find((p) => p.name === portName) || null;
|
|
104
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
interface GeneratorContext extends Record<string, unknown> {
|
|
2
|
+
original: string;
|
|
3
|
+
kebab: string;
|
|
4
|
+
camel: string;
|
|
5
|
+
pascal: string;
|
|
6
|
+
snake: string;
|
|
7
|
+
screamingSnake: string;
|
|
8
|
+
nameKebab: string;
|
|
9
|
+
nameCamel: string;
|
|
10
|
+
namePascal: string;
|
|
11
|
+
nameSnake: string;
|
|
12
|
+
nameScreamingSnake: string;
|
|
13
|
+
portSuffix: string;
|
|
14
|
+
adapterSuffix: string;
|
|
15
|
+
fileCase: "kebab" | "camel" | "pascal";
|
|
16
|
+
indent: "tab" | number;
|
|
17
|
+
quotes: "single" | "double";
|
|
18
|
+
semicolons: boolean;
|
|
19
|
+
includeModule: boolean;
|
|
20
|
+
includeService: boolean;
|
|
21
|
+
registrationType: "sync" | "async";
|
|
22
|
+
generateExample: boolean;
|
|
23
|
+
coreImportPath: string;
|
|
24
|
+
}
|
|
25
|
+
interface TemplateContext extends GeneratorContext {
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
declare function renderTemplate(templatePath: string, context: TemplateContext): Promise<string>;
|
|
29
|
+
declare function renderTemplateString(templateString: string, context: TemplateContext): Promise<string>;
|
|
30
|
+
export { renderTemplateString, renderTemplate };
|
|
@@ -0,0 +1,95 @@
|
|
|
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/template-renderer.ts
|
|
55
|
+
var exports_template_renderer = {};
|
|
56
|
+
__export(exports_template_renderer, {
|
|
57
|
+
renderTemplateString: () => renderTemplateString,
|
|
58
|
+
renderTemplate: () => renderTemplate
|
|
59
|
+
});
|
|
60
|
+
module.exports = __toCommonJS(exports_template_renderer);
|
|
61
|
+
var import_handlebars = __toESM(require("handlebars"));
|
|
62
|
+
async function renderTemplate(templatePath, context) {
|
|
63
|
+
try {
|
|
64
|
+
const file = Bun.file(templatePath);
|
|
65
|
+
if (!await file.exists()) {
|
|
66
|
+
throw new Error(`Template file not found: ${templatePath}
|
|
67
|
+
` + "Please ensure the template exists or report this as a bug.");
|
|
68
|
+
}
|
|
69
|
+
const templateSource = await file.text();
|
|
70
|
+
try {
|
|
71
|
+
const template = import_handlebars.default.compile(templateSource);
|
|
72
|
+
return template(context);
|
|
73
|
+
} catch (compileError) {
|
|
74
|
+
throw new Error(`Failed to compile template ${templatePath}: ` + `${compileError instanceof Error ? compileError.message : String(compileError)}
|
|
75
|
+
` + "This may indicate invalid Handlebars syntax in the template.");
|
|
76
|
+
}
|
|
77
|
+
} catch (error) {
|
|
78
|
+
if (error instanceof Error && error.message.includes("Template file not found")) {
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
if (error instanceof Error && error.message.includes("Failed to compile template")) {
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
throw new Error(`Failed to read template ${templatePath}: ` + `${error instanceof Error ? error.message : String(error)}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function renderTemplateString(templateString, context) {
|
|
88
|
+
try {
|
|
89
|
+
const template = import_handlebars.default.compile(templateString);
|
|
90
|
+
return template(context);
|
|
91
|
+
} catch (error) {
|
|
92
|
+
throw new Error("Failed to compile template string: " + `${error instanceof Error ? error.message : String(error)}
|
|
93
|
+
` + "This may indicate invalid Handlebars syntax.");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
var import_node_module = require("node:module");
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
2
4
|
var __defProp = Object.defineProperty;
|
|
3
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
6
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
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
|
+
};
|
|
6
19
|
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
7
20
|
var __toCommonJS = (from) => {
|
|
8
21
|
var entry = __moduleCache.get(from), desc;
|
|
@@ -17,6 +30,7 @@ var __toCommonJS = (from) => {
|
|
|
17
30
|
__moduleCache.set(from, entry);
|
|
18
31
|
return entry;
|
|
19
32
|
};
|
|
33
|
+
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
20
34
|
var __export = (target, all) => {
|
|
21
35
|
for (var name in all)
|
|
22
36
|
__defProp(target, name, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nest-hex",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "A tiny NestJS-native library for building pluggable adapters (Ports & Adapters / Hexagonal) using class-based Dynamic Modules, with great DX and strong type safety.",
|
|
5
5
|
"homepage": "https://github.com/LiorVainer/nest-hex#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"dist"
|
|
15
15
|
],
|
|
16
16
|
"bin": {
|
|
17
|
-
"nest-hex": "./dist/cli/bin.js"
|
|
17
|
+
"nest-hex": "./dist/src/cli/bin.js"
|
|
18
18
|
},
|
|
19
19
|
"repository": {
|
|
20
20
|
"type": "git",
|
|
@@ -64,18 +64,18 @@
|
|
|
64
64
|
"optional": true
|
|
65
65
|
}
|
|
66
66
|
},
|
|
67
|
-
"main": "./dist/index.js",
|
|
68
|
-
"types": "./dist/index.d.ts",
|
|
67
|
+
"main": "./dist/src/index.js",
|
|
68
|
+
"types": "./dist/src/index.d.ts",
|
|
69
69
|
"exports": {
|
|
70
70
|
".": {
|
|
71
|
-
"types": "./dist/index.d.ts",
|
|
72
|
-
"require": "./dist/index.js",
|
|
73
|
-
"import": "./dist/index.js"
|
|
71
|
+
"types": "./dist/src/index.d.ts",
|
|
72
|
+
"require": "./dist/src/index.js",
|
|
73
|
+
"import": "./dist/src/index.js"
|
|
74
74
|
},
|
|
75
75
|
"./cli": {
|
|
76
|
-
"types": "./dist/cli/index.d.ts",
|
|
77
|
-
"require": "./dist/cli/index.js",
|
|
78
|
-
"import": "./dist/cli/index.js"
|
|
76
|
+
"types": "./dist/src/cli/index.d.ts",
|
|
77
|
+
"require": "./dist/src/cli/index.js",
|
|
78
|
+
"import": "./dist/src/cli/index.js"
|
|
79
79
|
},
|
|
80
80
|
"./package.json": "./package.json"
|
|
81
81
|
},
|
|
File without changes
|