1- import type { DependencyCategory , DependencyInfo , JsonNode , OffsetRange , PackageManifestExtractor } from '#types/extractor'
1+ import type { BaseExtractor , DependencyCategory , DependencyInfo , JsonNode , OffsetRange , PackageManifestExtractor } from '#types/extractor'
22import type { Engines } from 'fast-npm-meta'
33import { findNodeAtLocation , parseTree } from 'jsonc-parser'
44
@@ -9,31 +9,19 @@ const DEPENDENCY_SECTIONS: DependencyCategory[] = [
99 'optionalDependencies' ,
1010]
1111
12- export class PackageJsonDocumentExtractor implements PackageManifestExtractor < JsonNode > {
12+ export class JsonExtractor implements PackageManifestExtractor , BaseExtractor < JsonNode > {
1313 parse = ( text : string ) => parseTree ( text ) ?? null
1414
15- private getStringValue ( root : JsonNode , key : string ) : string | undefined {
15+ # getStringValue( root : JsonNode , key : string ) : string | undefined {
1616 const node = findNodeAtLocation ( root , [ key ] )
1717 return typeof node ?. value === 'string' ? node . value : undefined
1818 }
1919
20- getPackageName ( root : JsonNode ) : string {
21- return this . getStringValue ( root , 'name' ) !
22- }
23-
24- getPackageVersion ( root : JsonNode ) : string {
25- return this . getStringValue ( root , 'version' ) !
26- }
27-
28- getPackageManager ( root : JsonNode ) : string | undefined {
29- return this . getStringValue ( root , 'packageManager' )
30- }
31-
32- private getStringNodeRange ( node : JsonNode ) : OffsetRange {
20+ #getStringNodeRange( node : JsonNode ) : OffsetRange {
3321 return [ node . offset + 1 , node . offset + node . length - 1 ]
3422 }
3523
36- private parseDependencyNode ( node : JsonNode , category : DependencyCategory ) : DependencyInfo | undefined {
24+ # parseDependencyNode( node : JsonNode , category : DependencyCategory ) : DependencyInfo | undefined {
3725 if ( ! node . children ?. length )
3826 return
3927
@@ -50,31 +38,12 @@ export class PackageJsonDocumentExtractor implements PackageManifestExtractor<Js
5038 category,
5139 rawName : nameNode . value ,
5240 rawSpec : specNode . value ,
53- nameRange : this . getStringNodeRange ( nameNode ) ,
54- specRange : this . getStringNodeRange ( specNode ) ,
41+ nameRange : this . # getStringNodeRange( nameNode ) ,
42+ specRange : this . # getStringNodeRange( specNode ) ,
5543 }
5644 }
5745
58- getDependenciesInfo ( root : JsonNode ) {
59- const result : DependencyInfo [ ] = [ ]
60-
61- DEPENDENCY_SECTIONS . forEach ( ( section ) => {
62- const node = findNodeAtLocation ( root , [ section ] )
63- if ( ! node || ! node . children )
64- return
65-
66- for ( const dep of node . children ) {
67- const info = this . parseDependencyNode ( dep , section )
68-
69- if ( info )
70- result . push ( info )
71- }
72- } )
73-
74- return result
75- }
76-
77- getEngines ( root : JsonNode ) : Engines | undefined {
46+ #getEngines( root : JsonNode ) : Engines | undefined {
7847 const enginesNode = findNodeAtLocation ( root , [ 'engines' ] )
7948 if ( enginesNode ?. type !== 'object' || ! enginesNode . children ?. length )
8049 return
@@ -93,16 +62,35 @@ export class PackageJsonDocumentExtractor implements PackageManifestExtractor<Js
9362 return engines
9463 }
9564
65+ getDependenciesInfo ( root : JsonNode ) {
66+ const result : DependencyInfo [ ] = [ ]
67+
68+ DEPENDENCY_SECTIONS . forEach ( ( section ) => {
69+ const node = findNodeAtLocation ( root , [ section ] )
70+ if ( ! node || ! node . children )
71+ return
72+
73+ for ( const dep of node . children ) {
74+ const info = this . #parseDependencyNode( dep , section )
75+
76+ if ( info )
77+ result . push ( info )
78+ }
79+ } )
80+
81+ return result
82+ }
83+
9684 getPackageManifestInfo ( text : string ) {
9785 const root = this . parse ( text )
9886 if ( ! root )
9987 return
10088
10189 return {
102- name : this . getPackageName ( root ) ,
103- version : this . getPackageVersion ( root ) ,
104- packageManager : this . getPackageManager ( root ) ,
105- engines : this . getEngines ( root ) ,
90+ name : this . #getStringValue ( root , 'name' ) ! ,
91+ version : this . #getStringValue ( root , 'version' ) ! ,
92+ packageManager : this . #getStringValue ( root , 'packageManager' ) ,
93+ engines : this . # getEngines( root ) ,
10694 dependencies : this . getDependenciesInfo ( root ) ,
10795 }
10896 }
0 commit comments