Skip to content

Commit 0abea4f

Browse files
committed
Improve globalFqn parsing for refined module and declaration properties
1 parent 02645e5 commit 0abea4f

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

cypher/Typescript_Enrichment/Add_module_properties.cypher

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
1-
// Add "namespace", "module" and "name" properties to Typescript nodes that have a globalFqn property
2-
1+
// Add extended properties to Typescript nodes with a globalFqn like "namespace", "module", "name" and "extension" as well as markers like "isNodeModule", "isUnresolvedImport" and "isExternalImport"
32
MATCH (ts:TS)
43
WHERE ts.globalFqn IS NOT NULL
4+
OPTIONAL MATCH (class:TS:Class)-[:DECLARES]->(ts)
55
WITH ts
6-
,replace(split(ts.globalFqn, '".')[0],'"', '') AS moduleName
7-
,replace(split(ts.globalFqn, '/index')[0],'"', '') AS moduleNameWithoutIndex
8-
,split(ts.globalFqn, '".')[1] AS symbolName
9-
,split(nullif(reverse(split(reverse(ts.globalFqn), '@')[0]), ts.globalFqn), '/')[0] AS namespaceName
10-
,(ts.globalFqn contains '/node_modules/') AS isNodeModule
11-
,((NOT ts.globalFqn STARTS WITH '/') AND size(split(ts.globalFqn, '/')) < 3) AS isUnresolvedImport
6+
,replace(split(ts.globalFqn, '".')[0],'"', '') AS modulePathName
7+
,reverse(split(reverse(replace(split(ts.globalFqn, '".')[0],'"', '')), '/')[0]) AS moduleName
8+
,replace(split(split(ts.globalFqn, '/index')[0], '.default')[0],'"', '') AS modulePathNameWithoutIndexAndDefault
9+
,nullif(split(ts.globalFqn, '".')[1], 'default') AS symbolName
10+
,split(nullif(reverse(split(reverse(ts.globalFqn), '@')[0]), ts.globalFqn), '/')[0] AS namespaceName
11+
,(ts.globalFqn contains '/node_modules/') AS isNodeModule
12+
,((NOT ts.globalFqn STARTS WITH '/') AND size(split(ts.globalFqn, '/')) < 3) AS isUnresolvedImport
13+
,reverse(split(reverse(class.globalFqn), '.')[0]) AS optionalClassName
1214
WITH *
13-
,reverse(split(reverse(moduleNameWithoutIndex), '/')[0]) AS indexedName
14-
,coalesce('@' + nullif(namespaceName, ''), '') AS namespaceNameWithAtPrefixed
15+
,split(reverse(split(reverse(modulePathNameWithoutIndexAndDefault), '/')[0]), '.')[0] AS indexAndExtensionOmittedName
16+
,replace(moduleName, nullif(split(moduleName, '.')[0], moduleName) + '.', '') AS moduleNameExtensionExtended
17+
,nullif(reverse(split(reverse(moduleName), '.')[0]), moduleName) AS moduleNameExtension
18+
,coalesce('@' + nullif(namespaceName, ''), '') AS namespaceNameWithAtPrefixed
19+
,replace(symbolName, coalesce(optionalClassName + '.', ''), '') AS symbolNameWithoutClassName
1520
SET ts.namespace = namespaceNameWithAtPrefixed
16-
,ts.module = moduleName
17-
,ts.name = coalesce(symbolName, indexedName)
21+
,ts.module = modulePathName
22+
,ts.moduleName = moduleName
23+
,ts.name = coalesce(symbolNameWithoutClassName, indexAndExtensionOmittedName)
24+
,ts.extensionExtended = moduleNameExtensionExtended
25+
,ts.extension = moduleNameExtension
1826
,ts.isNodeModule = isNodeModule
1927
,ts.isUnresolvedImport = isUnresolvedImport
2028
,ts.isExternalImport = isNodeModule OR isUnresolvedImport

0 commit comments

Comments
 (0)