@@ -2,7 +2,7 @@ import {Position, Source} from "./position";
22import "reflect-metadata" ;
33import { PossiblyNamed , ReferenceByName } from "./naming" ;
44
5- export const NODE_DEFINITION_SYMBOL = Symbol ( "nodeDefinition " ) ;
5+ export const CONCEPT_SYMBOL = Symbol ( "concept " ) ;
66
77export type PackageDescription = {
88 name : string ,
@@ -12,14 +12,19 @@ export const NODE_TYPES: { [name: string]: PackageDescription } = {
1212 "" : { name : "" , nodes : { } }
1313} ;
1414
15- export type NodeDefinition = {
15+ export type Concept = {
1616 package ?: string ,
1717 name ?: string ,
1818 features : { [ name : string | symbol ] : Feature } ,
1919 resolved ?: boolean ;
20- inheritsFrom ?: NodeDefinition
20+ inheritsFrom ?: Concept
2121} ;
2222
23+ /**
24+ * @deprecated use Concept instead.
25+ */
26+ export type NodeDefinition = Concept ;
27+
2328export type Feature = {
2429 name : string | symbol ,
2530 child ?: boolean ,
@@ -35,45 +40,52 @@ export type Feature = {
3540 */
3641export type PropertyDefinition = Feature ;
3742
43+ /**
44+ * @deprecated in favor of getConcept
45+ */
3846export function getNodeDefinition ( node : Node | ( abstract new ( ...args : any [ ] ) => Node ) ) : NodeDefinition {
47+ return getConcept ( node ) ;
48+ }
49+
50+ export function getConcept ( node : Node | ( abstract new ( ...args : any [ ] ) => Node ) ) : Concept {
3951 const target = typeof node === "function" ? node : node . constructor ;
40- let definition : NodeDefinition ;
41- if ( Object . prototype . hasOwnProperty . call ( target , NODE_DEFINITION_SYMBOL ) ) {
42- definition = target [ NODE_DEFINITION_SYMBOL ] as NodeDefinition ;
52+ let concept : Concept ;
53+ if ( Object . prototype . hasOwnProperty . call ( target , CONCEPT_SYMBOL ) ) {
54+ concept = target [ CONCEPT_SYMBOL ] as Concept ;
4355 } else {
44- const inheritedFeatures = { ...( target [ NODE_DEFINITION_SYMBOL ] ?. features || { } ) } ;
56+ const inheritedFeatures = { ...( target [ CONCEPT_SYMBOL ] ?. features || { } ) } ;
4557 for ( const p in inheritedFeatures ) {
4658 inheritedFeatures [ p ] = { inherited : true , ...inheritedFeatures [ p ] } ;
4759 }
48- target [ NODE_DEFINITION_SYMBOL ] = definition = {
60+ target [ CONCEPT_SYMBOL ] = concept = {
4961 features : inheritedFeatures ,
5062 resolved : false
5163 } ;
5264 }
53- if ( definition && definition . features && ! definition . resolved ) {
65+ if ( concept && concept . features && ! concept . resolved ) {
5466 try {
5567 let metadataHolder ;
5668 try {
5769 metadataHolder = new ( node as any ) ( ) ;
5870 } catch {
5971 metadataHolder = node ;
6072 }
61- for ( const p in definition . features ) {
62- if ( ! definition . features [ p ] . type ) {
73+ for ( const p in concept . features ) {
74+ if ( ! concept . features [ p ] . type ) {
6375 const type = Reflect . getMetadata ( "design:type" , metadataHolder , p ) ;
64- definition . features [ p ] . type = type ;
76+ concept . features [ p ] . type = type ;
6577 if ( type === Array ) {
66- definition . features [ p ] . arrayType =
78+ concept . features [ p ] . arrayType =
6779 Reflect . getMetadata ( "design:arrayElementType" , metadataHolder , p ) ;
6880 }
6981 }
7082 }
71- definition . resolved = true ;
83+ concept . resolved = true ;
7284 } catch {
7385 //Ignore
7486 }
7587 }
76- return definition ;
88+ return concept ;
7789}
7890
7991export abstract class Origin {
@@ -166,8 +178,13 @@ export abstract class Node extends Origin implements Destination {
166178 return Object . getOwnPropertyNames ( props ) . filter ( p => props [ p ] . child ) ;
167179 }
168180
181+ get concept ( ) : Concept {
182+ return getConcept ( this ) ;
183+ }
184+
185+ /** @deprecated use concept */
169186 get nodeDefinition ( ) : NodeDefinition {
170- return getNodeDefinition ( this ) ;
187+ return this . concept ;
171188 }
172189
173190 get features ( ) : FeatureDescription [ ] {
@@ -461,8 +478,8 @@ export function setNodeRedefinitionStrategy(strategy: typeof errorOnRedefinition
461478}
462479
463480export function registerNodeDefinition < T extends Node > (
464- target : abstract new ( ...args : any [ ] ) => T , pkg ?: string , name ?: string ) : NodeDefinition {
465- let def : NodeDefinition ;
481+ target : abstract new ( ...args : any [ ] ) => T , pkg ?: string , name ?: string ) : Concept {
482+ let def : Concept ;
466483 if ( pkg !== undefined ) {
467484 if ( ! name ) {
468485 throw new Error ( "Package name without node name" ) ;
@@ -473,8 +490,8 @@ export function registerNodeDefinition<T extends Node>(
473490 nodeRedefinitionStrategy ( name , target , existingTarget ) ;
474491 }
475492 }
476- const existingDef = target [ NODE_DEFINITION_SYMBOL ] as NodeDefinition ;
477- if ( Object . prototype . hasOwnProperty . call ( target , NODE_DEFINITION_SYMBOL ) ) {
493+ const existingDef = target [ CONCEPT_SYMBOL ] as Concept ;
494+ if ( Object . prototype . hasOwnProperty . call ( target , CONCEPT_SYMBOL ) ) {
478495 if ( ( existingDef . package !== undefined && existingDef . package != pkg ) ||
479496 ( existingDef . name !== undefined && existingDef . name != name ) ) {
480497 throw new Error ( `Type ${ pkg } .${ name } (${ target } ) is already defined as ${ JSON . stringify ( existingDef ) } ` ) ;
@@ -499,22 +516,27 @@ export function registerNodeDefinition<T extends Node>(
499516 if ( pkg !== undefined && name !== undefined ) {
500517 NODE_TYPES [ pkg ] . nodes [ name ] = target ;
501518 }
502- target [ NODE_DEFINITION_SYMBOL ] = def ;
519+ target [ CONCEPT_SYMBOL ] = def ;
503520 return def ;
504521}
505522
506- export function ensureNodeDefinition ( node : Node | { new ( ...args : any [ ] ) : Node } ) : NodeDefinition {
507- let definition = getNodeDefinition ( node ) ;
508- if ( ! definition ) {
523+ export function ensureConcept ( node : Node | { new ( ...args : any [ ] ) : Node } ) : Concept {
524+ let concept = getConcept ( node ) ;
525+ if ( ! concept ) {
509526 if ( typeof node === 'function' ) {
510- definition = registerNodeDefinition ( node ) ;
527+ concept = registerNodeDefinition ( node ) ;
511528 } else if ( typeof node . constructor === 'function' ) {
512- definition = registerNodeDefinition ( node . constructor as any ) ;
529+ concept = registerNodeDefinition ( node . constructor as any ) ;
513530 } else {
514531 throw new Error ( "Not a valid node: " + node ) ;
515532 }
516533 }
517- return definition ;
534+ return concept ;
535+ }
536+
537+ /** @deprecated use ensureConcept */
538+ export function ensureNodeDefinition ( node : Node | { new ( ...args : any [ ] ) : Node } ) : Concept {
539+ return ensureConcept ( node ) ;
518540}
519541
520542export function registerNodeAttribute < T extends Node > (
@@ -523,7 +545,7 @@ export function registerNodeAttribute<T extends Node>(
523545 if ( methodName == "parent" || methodName == "children" || methodName == "origin" ) {
524546 methodName = Symbol ( methodName ) ;
525547 }
526- const definition = ensureNodeDefinition ( type ) ;
548+ const definition = ensureConcept ( type ) ;
527549 if ( ! definition . features [ methodName ] ) {
528550 definition . features [ methodName ] = {
529551 name : methodName
0 commit comments