@@ -7,9 +7,8 @@ import type {
77 Root ,
88 KeyValue ,
99 KeyNode ,
10- Primitive ,
11- PrimitiveValue ,
12- PrimitiveValueType ,
10+ PrimitiveNode ,
11+ PrimitiveNodeValue ,
1312 ObjectNode ,
1413 ObjectNodeValue ,
1514 ObjectTitle ,
@@ -30,10 +29,6 @@ export interface Parts {
3029 position ?: Position ;
3130}
3231
33- export interface PrimitiveParts < T > extends Parts {
34- valueType ?: T ;
35- }
36-
3732type Children < T > = T | T [ ] ;
3833
3934function normalizeChildren < T > ( children ?: Children < T > ) : T [ ] {
@@ -70,22 +65,32 @@ function normalizeMemberChild<T>(child?: MemberChild<T>): [T] | [] {
7065 }
7166}
7267
73- function normalizePrimitiveValue < T > ( value : T ) : T | string {
74- if ( value === undefined ) {
75- return 'empty' ;
76- } else {
77- return value ;
78- }
79- }
80-
8168/**
8269 * Create a Primitive Node
83- * @param value - Primitive's value, e.g. 7
70+ * @param value - Primitive's value, e.g. 7
8471 * @param parts - additional data props e.g. Position
85- * @returns (last) Primitive node
72+ * @returns
73+ * - (last) PrimitiveNode
74+ * - if value is not PrimitiveNodeValue, return a String node with value "UNKNOWN"
8675 */
87- export const pt = ( value ?: PrimitiveValue , parts ?: PrimitiveParts < PrimitiveValueType > ) : Primitive => {
88- return u ( 'primitive' , { value : normalizePrimitiveValue ( value ) as PrimitiveValue , ...parts } ) ;
76+ export const pt = ( value ?: PrimitiveNodeValue , parts ?: Parts ) : PrimitiveNode => {
77+ if ( value === null ) {
78+ return u ( 'Null' , { value, ...parts } ) ;
79+ }
80+
81+ switch ( typeof value ) {
82+ case 'string' :
83+ return u ( 'String' , { value, ...parts } ) ;
84+
85+ case 'number' :
86+ return u ( 'Number' , { value, ...parts } ) ;
87+
88+ case 'boolean' :
89+ return u ( 'Boolean' , { value, ...parts } ) ;
90+
91+ default :
92+ return u ( 'String' , { value : 'UNKNOWN' , ...parts } ) ;
93+ }
8994} ;
9095
9196/**
@@ -95,7 +100,7 @@ export const pt = (value?: PrimitiveValue, parts?: PrimitiveParts<PrimitiveValue
95100 * @returns (last) Key node
96101 */
97102export const ky = ( value : string , parts ?: Parts ) : KeyNode => {
98- return u ( 'key ' , { ...parts } , value ) ;
103+ return u ( 'Key ' , { ...parts } , value ) ;
99104} ;
100105
101106/**
@@ -107,7 +112,7 @@ export const ky = (value: string, parts?: Parts): KeyNode => {
107112 */
108113export const ob = ( title : ObjectTitle , kids ?: Children < ObjectNodeValue > , parts ?: Parts ) : ObjectNode =>
109114 u (
110- 'object ' ,
115+ 'Object ' ,
111116 {
112117 title,
113118 ...parts ,
@@ -124,7 +129,7 @@ export const ob = (title: ObjectTitle, kids?: Children<ObjectNodeValue>, parts?:
124129 */
125130export const ar = ( title : ArrayTitle , kids ?: Children < ArrayNodeValue > , parts ?: Parts ) : ArrayNode =>
126131 u (
127- 'array ' ,
132+ 'Array ' ,
128133 {
129134 title,
130135 ...parts ,
@@ -140,8 +145,13 @@ export const ar = (title: ArrayTitle, kids?: Children<ArrayNodeValue>, parts?: P
140145 * @param parts - additional data props e.g. Position
141146 * @returns (last) Attribute node
142147 */
143- export const at = ( key : KeyValue , title : AttributeTitle , kid ?: MemberChild < Primitive > , parts ?: Parts ) : Attribute => {
144- return u ( 'attribute' , { key, title, ...parts } , normalizeMemberChild ( kid ) ) ;
148+ export const at = (
149+ key : KeyValue ,
150+ title : AttributeTitle ,
151+ kid ?: MemberChild < PrimitiveNode > ,
152+ parts ?: Parts ,
153+ ) : Attribute => {
154+ return u ( 'Attribute' , { key, title, ...parts } , normalizeMemberChild ( kid ) ) ;
145155} ;
146156
147157/**
@@ -153,7 +163,7 @@ export const at = (key: KeyValue, title: AttributeTitle, kid?: MemberChild<Primi
153163 * @returns (last) Element node
154164 */
155165export const el = ( key : KeyValue , title : ElementTitle , kid ?: MemberChild < ObjectNode > , parts ?: Parts ) : Element => {
156- return u ( 'element ' , { key, title, ...parts } , normalizeMemberChild ( kid ) ) ;
166+ return u ( 'Element ' , { key, title, ...parts } , normalizeMemberChild ( kid ) ) ;
157167} ;
158168
159169/**
@@ -165,7 +175,7 @@ export const el = (key: KeyValue, title: ElementTitle, kid?: MemberChild<ObjectN
165175 * @returns (last) Collection node
166176 */
167177export const cl = ( key : KeyValue , title : CollectionTitle , kid ?: MemberChild < ArrayNode > , parts ?: Parts ) : Collection => {
168- return u ( 'collection ' , { key, title, ...parts } , normalizeMemberChild ( kid ) ) ;
178+ return u ( 'Collection ' , { key, title, ...parts } , normalizeMemberChild ( kid ) ) ;
169179} ;
170180
171181/**
@@ -176,7 +186,7 @@ export const cl = (key: KeyValue, title: CollectionTitle, kid?: MemberChild<Arra
176186 */
177187export const rt = ( kids ?: Children < ObjectNodeValue > , parts ?: Parts ) : Root => {
178188 return u (
179- 'root ' ,
189+ 'Root ' ,
180190 {
181191 title : TITLES . object . animation ,
182192 hasExpressions : false ,
0 commit comments