@nu-art/ts-dependency-viewer-backend 0.400.7

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/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/index.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@nu-art/ts-dependency-viewer-backend",
3
+ "version": "0.400.7",
4
+ "description": "ts-dependency-viewer - Express & Typescript based backend framework Backend",
5
+ "keywords": [
6
+ "TacB0sS",
7
+ "infra",
8
+ "nu-art",
9
+ "thunderstorm",
10
+ "typescript",
11
+ "ts-dependency-viewer"
12
+ ],
13
+ "homepage": "https://github.com/nu-art-js/thunderstorm",
14
+ "bugs": {
15
+ "url": "https://github.com/nu-art-js/thunderstorm/issues"
16
+ },
17
+ "publishConfig": {
18
+ "directory": "dist",
19
+ "linkDirectory": true
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+ssh://git@github.com:nu-art-js/thunderstorm.git"
24
+ },
25
+ "license": "Apache-2.0",
26
+ "author": "TacB0sS",
27
+ "files": [
28
+ "**/*"
29
+ ],
30
+ "scripts": {
31
+ "build": "tsc"
32
+ },
33
+ "dependencies": {
34
+ "@nu-art/ts-dependency-viewer-shared": "0.400.7",
35
+ "@nu-art/thunderstorm-backend": "0.400.7",
36
+ "@nu-art/thunderstorm-shared": "0.400.7",
37
+ "@nu-art/ts-common": "0.400.7",
38
+ "compression": "^1.7.4",
39
+ "d3": "7.8.2",
40
+ "d3-graphviz": "5.0.2",
41
+ "d3-selection": "3.0.0",
42
+ "firebase": "^11.9.0",
43
+ "firebase-admin": "13.4.0",
44
+ "firebase-functions": "6.3.2",
45
+ "react": "^18.0.0",
46
+ "ts-graphviz": "1.5.3"
47
+ },
48
+ "devDependencies": {
49
+ "@types/react": "^18.0.0",
50
+ "@types/chai": "^4.3.4",
51
+ "@types/mocha": "^10.0.1",
52
+ "@types/d3": "^7.4.0",
53
+ "@types/d3-graphviz": "^2.6.7"
54
+ },
55
+ "unitConfig": {
56
+ "type": "typescript-lib"
57
+ },
58
+ "type": "module",
59
+ "exports": {
60
+ ".": {
61
+ "types": "./index.d.ts",
62
+ "import": "./index.js"
63
+ },
64
+ "./*": {
65
+ "types": "./*.d.ts",
66
+ "import": "./*.js"
67
+ }
68
+ }
69
+ }
@@ -0,0 +1,3 @@
1
+ export declare function parseAllTypesFromFile(filePath: string): {
2
+ [key: string]: any;
3
+ };
@@ -0,0 +1,99 @@
1
+ import * as ts from 'typescript';
2
+ const resolvers = [
3
+ (descriptor, typeNode, checker) => {
4
+ if (!ts.isTypeLiteralNode(typeNode))
5
+ return;
6
+ descriptor.type = 'object';
7
+ descriptor.members = [];
8
+ typeNode.members.forEach(member => {
9
+ if (ts.isPropertySignature(member) && member.name && member.type) {
10
+ const memberDescriptor = { name: member.name.getText() };
11
+ parseTypeV2(memberDescriptor, member.type, checker);
12
+ descriptor.members.push(memberDescriptor);
13
+ }
14
+ });
15
+ },
16
+ (descriptor, typeNode, checker) => {
17
+ if (!ts.isFunctionTypeNode(typeNode))
18
+ return;
19
+ descriptor.type = 'function';
20
+ descriptor.parameters = [];
21
+ typeNode.parameters.forEach(paramNode => {
22
+ const paramDescriptor = { name: paramNode.name.getText() };
23
+ parseTypeV2(paramDescriptor, paramNode.type, checker);
24
+ descriptor.parameters.push(paramDescriptor);
25
+ });
26
+ // Resolve the return type of the function
27
+ descriptor.returnType = {};
28
+ parseTypeV2(descriptor.returnType, typeNode.type, checker);
29
+ },
30
+ (descriptor, typeNode, checker) => {
31
+ const types = checker.getTypeFromTypeNode(typeNode).aliasTypeArguments;
32
+ if (!types)
33
+ return;
34
+ descriptor.genericParams = [];
35
+ types.forEach(genericType => {
36
+ const paramDescriptor = { name: genericType.symbol.name };
37
+ paramDescriptor.type = checker.symbolToEntityName(checker.getBaseConstraintOfType(genericType).aliasSymbol, ts.SymbolFlags.Alias, undefined, undefined)
38
+ .getText();
39
+ // const constraintOfType = checker.getBaseConstraintOfType(genericType) ?? genericType;
40
+ // parseTypeV2(paramDescriptor, checker.typeToTypeNode(constraintOfType, undefined, undefined)!, checker);
41
+ descriptor.genericParams.push(paramDescriptor);
42
+ });
43
+ },
44
+ (descriptor, typeNode, checker) => {
45
+ if (descriptor.type !== undefined)
46
+ return;
47
+ // typeNode.typeName
48
+ descriptor.type = checker.typeToString(checker.getTypeFromTypeNode(typeNode));
49
+ },
50
+ (descriptor, typeNode, checker) => {
51
+ descriptor.typeLiteral = checker.typeToString(checker.getTypeFromTypeNode(typeNode));
52
+ },
53
+ ];
54
+ function parseTypeV2(descriptor, typeNode, checker) {
55
+ return resolvers.reduce((descriptor, resolver) => {
56
+ resolver(descriptor, typeNode, checker);
57
+ return descriptor;
58
+ }, descriptor);
59
+ }
60
+ function collectTypes(sourceFile) {
61
+ const types = {};
62
+ const visit = (node) => {
63
+ if (ts.isTypeAliasDeclaration(node) || ts.isInterfaceDeclaration(node)) {
64
+ const typeName = node.name.text;
65
+ let typeNode;
66
+ if (ts.isTypeAliasDeclaration(node)) {
67
+ typeNode = node.type;
68
+ }
69
+ else if (ts.isInterfaceDeclaration(node)) {
70
+ const members = node.members;
71
+ typeNode = ts.factory.createTypeLiteralNode(members);
72
+ }
73
+ if (typeNode) {
74
+ types[typeName] = typeNode;
75
+ }
76
+ }
77
+ ts.forEachChild(node, visit);
78
+ };
79
+ visit(sourceFile);
80
+ return types;
81
+ }
82
+ export function parseAllTypesFromFile(filePath) {
83
+ const program = ts.createProgram([filePath], {});
84
+ const checker = program.getTypeChecker();
85
+ const sourceFile = program.getSourceFile(filePath);
86
+ if (!sourceFile) {
87
+ throw new Error(`File ${filePath} not found`);
88
+ }
89
+ const types = collectTypes(sourceFile);
90
+ const parsedTypes = {};
91
+ for (const typeName in types) {
92
+ const typeNode = types[typeName];
93
+ const descriptor = { name: typeName };
94
+ parsedTypes[typeName] = parseTypeV2(descriptor, typeNode, checker);
95
+ }
96
+ return parsedTypes;
97
+ }
98
+ const parseTypeFromFile1 = parseAllTypesFromFile('./file.ts');
99
+ console.log('output:', JSON.stringify(parseTypeFromFile1, null, 2));