@notjustcoders/ioc-arise 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +266 -0
- package/dist/__tests__/analyser/ast-parser.test.d.ts +2 -0
- package/dist/__tests__/analyser/ast-parser.test.d.ts.map +1 -0
- package/dist/__tests__/analyser/ast-parser.test.js +268 -0
- package/dist/__tests__/analyser/ast-parser.test.js.map +1 -0
- package/dist/__tests__/analyser/class-analyzer.test.d.ts +2 -0
- package/dist/__tests__/analyser/class-analyzer.test.d.ts.map +1 -0
- package/dist/__tests__/analyser/class-analyzer.test.js +259 -0
- package/dist/__tests__/analyser/class-analyzer.test.js.map +1 -0
- package/dist/__tests__/analyser/dependency-resolver.test.d.ts +2 -0
- package/dist/__tests__/analyser/dependency-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/analyser/dependency-resolver.test.js +128 -0
- package/dist/__tests__/analyser/dependency-resolver.test.js.map +1 -0
- package/dist/__tests__/analyser/fixtures/ast-parser-fixtures.d.ts +26 -0
- package/dist/__tests__/analyser/fixtures/ast-parser-fixtures.d.ts.map +1 -0
- package/dist/__tests__/analyser/fixtures/ast-parser-fixtures.js +178 -0
- package/dist/__tests__/analyser/fixtures/ast-parser-fixtures.js.map +1 -0
- package/dist/__tests__/analyser/fixtures/class-analyzer-fixtures.d.ts +54 -0
- package/dist/__tests__/analyser/fixtures/class-analyzer-fixtures.d.ts.map +1 -0
- package/dist/__tests__/analyser/fixtures/class-analyzer-fixtures.js +285 -0
- package/dist/__tests__/analyser/fixtures/class-analyzer-fixtures.js.map +1 -0
- package/dist/__tests__/analyser/fixtures/dependency-resolver-fixtures.d.ts +13 -0
- package/dist/__tests__/analyser/fixtures/dependency-resolver-fixtures.d.ts.map +1 -0
- package/dist/__tests__/analyser/fixtures/dependency-resolver-fixtures.js +266 -0
- package/dist/__tests__/analyser/fixtures/dependency-resolver-fixtures.js.map +1 -0
- package/dist/__tests__/generator/container-generator.test.d.ts +2 -0
- package/dist/__tests__/generator/container-generator.test.d.ts.map +1 -0
- package/dist/__tests__/generator/container-generator.test.js +185 -0
- package/dist/__tests__/generator/container-generator.test.js.map +1 -0
- package/dist/__tests__/generator/dependency-resolver.test.d.ts +2 -0
- package/dist/__tests__/generator/dependency-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/generator/dependency-resolver.test.js +330 -0
- package/dist/__tests__/generator/dependency-resolver.test.js.map +1 -0
- package/dist/__tests__/generator/fixtures/dependency-resolver.fixtures.d.ts +23 -0
- package/dist/__tests__/generator/fixtures/dependency-resolver.fixtures.d.ts.map +1 -0
- package/dist/__tests__/generator/fixtures/dependency-resolver.fixtures.js +254 -0
- package/dist/__tests__/generator/fixtures/dependency-resolver.fixtures.js.map +1 -0
- package/dist/__tests__/generator/fixtures/import-generator.fixtures.d.ts +10 -0
- package/dist/__tests__/generator/fixtures/import-generator.fixtures.d.ts.map +1 -0
- package/dist/__tests__/generator/fixtures/import-generator.fixtures.js +194 -0
- package/dist/__tests__/generator/fixtures/import-generator.fixtures.js.map +1 -0
- package/dist/__tests__/generator/import-generator.test.d.ts +2 -0
- package/dist/__tests__/generator/import-generator.test.d.ts.map +1 -0
- package/dist/__tests__/generator/import-generator.test.js +121 -0
- package/dist/__tests__/generator/import-generator.test.js.map +1 -0
- package/dist/__tests__/generator/instantiation-generator.test.d.ts +2 -0
- package/dist/__tests__/generator/instantiation-generator.test.d.ts.map +1 -0
- package/dist/__tests__/generator/instantiation-generator.test.js +251 -0
- package/dist/__tests__/generator/instantiation-generator.test.js.map +1 -0
- package/dist/analyser/ast-parser.d.ts +12 -0
- package/dist/analyser/ast-parser.d.ts.map +1 -0
- package/dist/analyser/ast-parser.js +192 -0
- package/dist/analyser/ast-parser.js.map +1 -0
- package/dist/analyser/class-analyzer.d.ts +11 -0
- package/dist/analyser/class-analyzer.d.ts.map +1 -0
- package/dist/analyser/class-analyzer.js +78 -0
- package/dist/analyser/class-analyzer.js.map +1 -0
- package/dist/analyser/dependency-resolver.d.ts +10 -0
- package/dist/analyser/dependency-resolver.d.ts.map +1 -0
- package/dist/analyser/dependency-resolver.js +46 -0
- package/dist/analyser/dependency-resolver.js.map +1 -0
- package/dist/analyser/file-discovery.d.ts +7 -0
- package/dist/analyser/file-discovery.d.ts.map +1 -0
- package/dist/analyser/file-discovery.js +30 -0
- package/dist/analyser/file-discovery.js.map +1 -0
- package/dist/analyser/index.d.ts +3 -0
- package/dist/analyser/index.d.ts.map +1 -0
- package/dist/analyser/index.js +14 -0
- package/dist/analyser/index.js.map +1 -0
- package/dist/analyser/module-dependency-resolver.d.ts +17 -0
- package/dist/analyser/module-dependency-resolver.d.ts.map +1 -0
- package/dist/analyser/module-dependency-resolver.js +66 -0
- package/dist/analyser/module-dependency-resolver.js.map +1 -0
- package/dist/analyser/project-analyzer.d.ts +8 -0
- package/dist/analyser/project-analyzer.d.ts.map +1 -0
- package/dist/analyser/project-analyzer.js +20 -0
- package/dist/analyser/project-analyzer.js.map +1 -0
- package/dist/commands/analyze.d.ts +3 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +66 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +150 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/container.d.ts +5 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +8 -0
- package/dist/container.js.map +1 -0
- package/dist/generator/container-file-generator.d.ts +20 -0
- package/dist/generator/container-file-generator.d.ts.map +1 -0
- package/dist/generator/container-file-generator.js +255 -0
- package/dist/generator/container-file-generator.js.map +1 -0
- package/dist/generator/container-generator.d.ts +8 -0
- package/dist/generator/container-generator.d.ts.map +1 -0
- package/dist/generator/container-generator.js +35 -0
- package/dist/generator/container-generator.js.map +1 -0
- package/dist/generator/dependency-resolver.d.ts +11 -0
- package/dist/generator/dependency-resolver.d.ts.map +1 -0
- package/dist/generator/dependency-resolver.js +83 -0
- package/dist/generator/dependency-resolver.js.map +1 -0
- package/dist/generator/file-writer.d.ts +6 -0
- package/dist/generator/file-writer.d.ts.map +1 -0
- package/dist/generator/file-writer.js +19 -0
- package/dist/generator/file-writer.js.map +1 -0
- package/dist/generator/import-generator.d.ts +7 -0
- package/dist/generator/import-generator.d.ts.map +1 -0
- package/dist/generator/import-generator.js +31 -0
- package/dist/generator/import-generator.js.map +1 -0
- package/dist/generator/index.d.ts +4 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +25 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/instantiation-generator.d.ts +8 -0
- package/dist/generator/instantiation-generator.d.ts.map +1 -0
- package/dist/generator/instantiation-generator.js +153 -0
- package/dist/generator/instantiation-generator.js.map +1 -0
- package/dist/generator/module-container-generator.d.ts +10 -0
- package/dist/generator/module-container-generator.d.ts.map +1 -0
- package/dist/generator/module-container-generator.js +51 -0
- package/dist/generator/module-container-generator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +30 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/configManager.d.ts +21 -0
- package/dist/utils/configManager.d.ts.map +1 -0
- package/dist/utils/configManager.js +50 -0
- package/dist/utils/configManager.js.map +1 -0
- package/dist/utils/moduleResolver.d.ts +38 -0
- package/dist/utils/moduleResolver.d.ts.map +1 -0
- package/dist/utils/moduleResolver.js +108 -0
- package/dist/utils/moduleResolver.js.map +1 -0
- package/dist/utils/naming.d.ts +7 -0
- package/dist/utils/naming.d.ts.map +1 -0
- package/dist/utils/naming.js +12 -0
- package/dist/utils/naming.js.map +1 -0
- package/dist/utils/topological-sorter.d.ts +17 -0
- package/dist/utils/topological-sorter.d.ts.map +1 -0
- package/dist/utils/topological-sorter.js +69 -0
- package/dist/utils/topological-sorter.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TopologicalSorter = void 0;
|
|
4
|
+
class TopologicalSorter {
|
|
5
|
+
/**
|
|
6
|
+
* Performs topological sorting on a dependency graph with cycle detection
|
|
7
|
+
* @param graph - A map where keys are nodes and values are their dependencies
|
|
8
|
+
* @param order - Sort order: 'asc' for ascending (default) or 'desc' for descending
|
|
9
|
+
* @returns Object containing sorted nodes and any detected cycles
|
|
10
|
+
*/
|
|
11
|
+
static sort(graph, order = 'asc') {
|
|
12
|
+
const visited = new Set();
|
|
13
|
+
const visiting = new Set();
|
|
14
|
+
const sorted = [];
|
|
15
|
+
const cycles = [];
|
|
16
|
+
const visit = (node, path = []) => {
|
|
17
|
+
if (visiting.has(node)) {
|
|
18
|
+
// Cycle detected
|
|
19
|
+
const cycleStart = path.indexOf(node);
|
|
20
|
+
cycles.push(path.slice(cycleStart).concat(node));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (visited.has(node)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
visiting.add(node);
|
|
27
|
+
const dependencies = this.getDependencies(graph, node);
|
|
28
|
+
for (const dep of dependencies) {
|
|
29
|
+
if (this.hasNode(graph, dep)) { // Only visit if dependency exists in graph
|
|
30
|
+
visit(dep, [...path, node]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
visiting.delete(node);
|
|
34
|
+
visited.add(node);
|
|
35
|
+
sorted.push(node);
|
|
36
|
+
};
|
|
37
|
+
const nodes = this.getNodes(graph);
|
|
38
|
+
for (const node of nodes) {
|
|
39
|
+
if (!visited.has(node)) {
|
|
40
|
+
visit(node);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const finalSorted = sorted.reverse();
|
|
44
|
+
return {
|
|
45
|
+
sorted: order === 'desc' ? finalSorted.reverse() : finalSorted,
|
|
46
|
+
cycles
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
static getDependencies(graph, node) {
|
|
50
|
+
if (graph instanceof Map) {
|
|
51
|
+
return graph.get(node) || [];
|
|
52
|
+
}
|
|
53
|
+
return graph[node] || [];
|
|
54
|
+
}
|
|
55
|
+
static hasNode(graph, node) {
|
|
56
|
+
if (graph instanceof Map) {
|
|
57
|
+
return graph.has(node);
|
|
58
|
+
}
|
|
59
|
+
return node in graph;
|
|
60
|
+
}
|
|
61
|
+
static getNodes(graph) {
|
|
62
|
+
if (graph instanceof Map) {
|
|
63
|
+
return Array.from(graph.keys());
|
|
64
|
+
}
|
|
65
|
+
return Object.keys(graph);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.TopologicalSorter = TopologicalSorter;
|
|
69
|
+
//# sourceMappingURL=topological-sorter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topological-sorter.js","sourceRoot":"","sources":["../../src/utils/topological-sorter.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@notjustcoders/ioc-arise",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A CLI tool to generate type-safe IoC containers for TypeScript projects with automatic dependency injection",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"ioc-arise": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist/**/*",
|
|
11
|
+
"README.md",
|
|
12
|
+
"LICENSE"
|
|
13
|
+
],
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/your-username/ioc-arise.git"
|
|
17
|
+
},
|
|
18
|
+
"homepage": "https://ioc-arise.notjustcoders.com",
|
|
19
|
+
"bugs": {
|
|
20
|
+
"url": "https://github.com/your-username/ioc-arise/issues"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"ioc",
|
|
24
|
+
"dependency-injection",
|
|
25
|
+
"typescript",
|
|
26
|
+
"cli",
|
|
27
|
+
"container",
|
|
28
|
+
"di",
|
|
29
|
+
"inversion-of-control",
|
|
30
|
+
"automatic",
|
|
31
|
+
"code-generation",
|
|
32
|
+
"type-safe"
|
|
33
|
+
],
|
|
34
|
+
"author": "Sid Ali Assoul <assoulsidali@gmail.com>",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18.0.0",
|
|
38
|
+
"npm": ">=8.0.0"
|
|
39
|
+
},
|
|
40
|
+
"publishConfig": {
|
|
41
|
+
"access": "public"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@ast-grep/napi": "^0.20.0",
|
|
45
|
+
"@notjustcoders/one-logger-client-sdk": "^1.0.10",
|
|
46
|
+
"commander": "^11.1.0",
|
|
47
|
+
"glob": "^10.3.10",
|
|
48
|
+
"minimatch": "^10.0.1"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/minimatch": "^5.1.2",
|
|
52
|
+
"@types/node": "^20.10.0",
|
|
53
|
+
"@vitest/coverage-v8": "^1.0.0",
|
|
54
|
+
"ts-node": "^10.9.0",
|
|
55
|
+
"typescript": "^5.3.0",
|
|
56
|
+
"vitest": "^1.0.0"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "tsc",
|
|
60
|
+
"dev": "ts-node src/index.ts",
|
|
61
|
+
"start": "node dist/index.js",
|
|
62
|
+
"test": "vitest",
|
|
63
|
+
"test:run": "vitest run",
|
|
64
|
+
"test:coverage": "vitest run --coverage",
|
|
65
|
+
"test:watch": "vitest --watch",
|
|
66
|
+
"test1:generate": "npm run build && node dist/index.js generate --source examples/clean-architecture",
|
|
67
|
+
"test2:generate": "npm run build && node dist/index.js generate --source examples/circular-deps-modules",
|
|
68
|
+
"test3:generate": "npm run build && node dist/index.js generate --source examples/circular-deps-classes",
|
|
69
|
+
"test4:generate": "npm run build && node dist/index.js generate --source examples/minimal-todo",
|
|
70
|
+
"test5:generate": "npm run build && node dist/index.js generate --source examples/simple-modules"
|
|
71
|
+
}
|
|
72
|
+
}
|