Skip to content

Commit 16e2f44

Browse files
committed
feat(last): remove valueNode, split Primitive node, capitalize Node type
1 parent 0b7622b commit 16e2f44

File tree

94 files changed

+62971
-90218
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+62971
-90218
lines changed

.changeset/quick-pianos-train.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@lottiefiles/relottie-parse': major
3+
---
4+
5+
feat: capitalize Node type values after last@v2

.changeset/soft-students-sin.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@lottiefiles/last': major
3+
---
4+
5+
feat(primitive): rename to PrimitiveNode, remove "valueType" prop & split it to StringNode, NumberNode, BooleanNode & NullNode
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
'@lottiefiles/last-builder': major
3+
---
4+
5+
feat: required changes to support last@v2
6+
- capitalize types
7+
- remove "valueType", adjust "pt" helper after PrimitiveNode was split into String, Number, Null & Booelan Nodes
8+
- remove the PrimitiveParts type since it is not relevant anymore after the "valueType" prop is removed

.changeset/tall-pandas-glow.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@lottiefiles/last': major
3+
---
4+
5+
feat: capitalize Node type value

.changeset/tiny-poets-switch.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@lottiefiles/relottie-parse': major
3+
---
4+
5+
feat: remove valeuType option and don't add it prop to PrimtiveNode after last@v2 changes
6+

packages/last-builder/__tests__/index.test.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,59 +20,59 @@ describe('should create a last tree correctly', () => {
2020
]);
2121

2222
const output = {
23-
type: 'root',
23+
type: 'Root',
2424
title: 'animation',
2525
hasExpressions: false,
2626
children: [
2727
{
28-
type: 'attribute',
28+
type: 'Attribute',
2929
key: 'v',
3030
title: 'version',
3131
children: [
3232
{
33-
type: 'primitive',
33+
type: 'String',
3434
value: '4.8.0',
3535
},
3636
],
3737
},
3838
{
39-
type: 'element',
39+
type: 'Element',
4040
key: 'meta',
4141
title: 'metadata',
4242
children: [
4343
{
44-
type: 'object',
44+
type: 'Object',
4545
title: 'custom',
4646
children: [
4747
{
48-
type: 'attribute',
48+
type: 'Attribute',
4949
key: 'a',
5050
title: 'author',
5151
children: [
5252
{
53-
type: 'primitive',
53+
type: 'String',
5454
value: 'LottieFiles',
5555
},
5656
],
5757
},
5858
{
59-
type: 'attribute',
59+
type: 'Attribute',
6060
key: 'd',
6161
title: 'description',
6262
children: [
6363
{
64-
type: 'primitive',
64+
type: 'String',
6565
value: 'A lottie animation.',
6666
},
6767
],
6868
},
6969
{
70-
type: 'attribute',
70+
type: 'Attribute',
7171
key: 'data',
7272
title: 'custom',
7373
children: [
7474
{
75-
type: 'primitive',
75+
type: 'Number',
7676
value: 2,
7777
},
7878
],

packages/last-builder/src/index.ts

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
3732
type Children<T> = T | T[];
3833

3934
function 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
*/
97102
export 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
*/
108113
export 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
*/
125130
export 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
*/
155165
export 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
*/
167177
export 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
*/
177187
export const rt = (kids?: Children<ObjectNodeValue>, parts?: Parts): Root => {
178188
return u(
179-
'root',
189+
'Root',
180190
{
181191
title: TITLES.object.animation,
182192
hasExpressions: false,

packages/last/README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ type PrimitiveValue = string | number | boolean | null;
116116
interface Primitive extends Literal {
117117
type: 'primitive';
118118
value: PrimitiveValue;
119-
valueType?: PrimitiveValueType;
120119
}
121120
```
122121

packages/last/src/index.ts

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,34 @@ export interface Data extends UnistData {}
4848
// General
4949
// -----------------------------------------------------------------------------
5050

51-
export type PrimitiveValueType = 'string' | 'number' | 'boolean' | 'null';
51+
export interface StringNode extends Literal {
52+
type: 'String';
53+
value: string;
54+
}
55+
56+
export interface NumberNode extends Literal {
57+
type: 'Number';
58+
value: number;
59+
}
5260

53-
export type PrimitiveValue = string | number | boolean | null;
61+
export interface BooleanNode extends Literal {
62+
type: 'Boolean';
63+
value: boolean;
64+
}
5465

55-
export interface Primitive extends Literal {
56-
type: 'primitive';
57-
value: PrimitiveValue;
58-
valueType?: PrimitiveValueType;
66+
export interface NullNode extends Literal {
67+
type: 'Null';
68+
value: null;
5969
}
6070

71+
export type PrimitiveNodeType = StringNode['type'] | NumberNode['type'] | BooleanNode['type'] | NullNode['type'];
72+
73+
export type PrimitiveNodeValue = StringNode['value'] | NumberNode['value'] | BooleanNode['value'] | NullNode['value'];
74+
75+
export type PrimitiveNode = StringNode | NumberNode | BooleanNode | NullNode;
76+
6177
export interface KeyNode extends Literal {
62-
type: 'key';
78+
type: 'Key';
6379
value: string;
6480
}
6581

@@ -83,33 +99,33 @@ export type ObjectNodeValue = Attribute | Element | Collection;
8399
export interface ObjectNode extends Parent {
84100
children: ObjectNodeValue[];
85101
title: ObjectTitle;
86-
type: 'object';
102+
type: 'Object';
87103
}
88104

89-
export type ArrayNodeValue = Primitive | ObjectNode | ArrayNode;
105+
export type ArrayNodeValue = PrimitiveNode | ObjectNode | ArrayNode;
90106

91107
export interface ArrayNode extends Parent {
92108
children: ArrayNodeValue[];
93109
title: ArrayTitle;
94-
type: 'array';
110+
type: 'Array';
95111
}
96112

97113
export interface Attribute extends Member {
98-
children: [Primitive] | [];
114+
children: [PrimitiveNode] | [];
99115
title: AttributeTitle;
100-
type: 'attribute';
116+
type: 'Attribute';
101117
}
102118

103119
export interface Element extends Member {
104120
children: [ObjectNode] | [];
105121
title: ElementTitle;
106-
type: 'element';
122+
type: 'Element';
107123
}
108124

109125
export interface Collection extends Member {
110126
children: [ArrayNode] | [];
111127
title: CollectionTitle;
112-
type: 'collection';
128+
type: 'Collection';
113129
}
114130

115131
/**
@@ -121,9 +137,9 @@ export interface Root extends Omit<ObjectNode, 'type'> {
121137
*/
122138
hasExpressions: boolean;
123139
title: typeof TITLES.object.animation;
124-
type: 'root';
140+
type: 'Root';
125141
}
126142

127-
export type NodeValue = Root | Primitive | KeyNode | ArrayNode | ObjectNode | Attribute | Element | Collection;
143+
export type NodeValue = Root | PrimitiveNode | KeyNode | ArrayNode | ObjectNode | Attribute | Element | Collection;
128144

129145
export type NodeValueType = NodeValue['type'];

packages/relottie-extract-features/src/extract-features.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,14 @@ const extractFeatures: Plugin<[Options?], Root> = (_ops: Options = {}) => {
4444
const usedData: Used = new Map();
4545

4646
visitParents(tree, (node: AncestorChildNode, ancestor: AncestorNode[]) => {
47-
if (node.type === 'root' || node.type === 'primitive') return;
47+
if (
48+
node.type === 'Root' ||
49+
node.type === 'String' ||
50+
node.type === 'Number' ||
51+
node.type === 'Boolean' ||
52+
node.type === 'Null'
53+
)
54+
return;
4855

4956
const feature = node.title;
5057
const parent = ancestor.at(-1);

0 commit comments

Comments
 (0)