Skip to content

Commit a8e9a62

Browse files
authored
feat: improve parse options & file.message and fileData type namings and export (#70)
* fix: remove options.warningMessage * feat: add position and sourceId vfile message info * feat: rename FileData into ParseFileData * feat: rename FileData into StringifyFileData & use it in relottie
1 parent 47e2dee commit a8e9a62

File tree

14 files changed

+53
-61
lines changed

14 files changed

+53
-61
lines changed

.changeset/lucky-needles-wink.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@lottiefiles/relottie-parse": patch
3+
---
4+
5+
feat: do not duplicate log messages with the vfile.messages and remove the unnecessary "warningMessage" option

.changeset/many-mice-kiss.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@lottiefiles/relottie": patch
3+
---
4+
5+
feat: FileData extends StringifyFileData type
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@lottiefiles/relottie": patch
3+
"@lottiefiles/relottie-parse": patch
4+
---
5+
6+
feat: rename export relottie-parse's FileData type into ParseFileData
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@lottiefiles/relottie-parse": patch
3+
---
4+
5+
feat: add position and sourceId info when adding a vfile message

.changeset/tender-mirrors-cross.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@lottiefiles/relottie-stringify": patch
3+
---
4+
5+
feat: rename export FileData type into StringifyFileData

packages/relottie-parse/playground.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { readFileSync } from 'fs';
99
import type { Root } from '@lottiefiles/last';
1010
import type { CompilerFunction, Plugin } from 'unified';
1111
import { unified } from 'unified';
12-
// import { reporter } from 'vfile-reporter';
12+
import { reporter } from 'vfile-reporter';
1313

1414
import relottieParse from './src/index.js';
1515

@@ -28,15 +28,15 @@ const path = `../../__fixtures__/features/${name}.json`;
2828

2929
const lottieJsonFile = readFileSync(path, 'utf8');
3030

31-
const processor = unified().use(relottieParse, { warningMessage: true }).use(emptyCompiler);
31+
const processor = unified().use(relottieParse).use(emptyCompiler);
3232

3333
// const tree = processor.parse(lottieJsonFile);
3434

3535
// writeFileSync(`${name}-tree.json`, JSON.stringify(tree, null, 2), 'utf8');
3636

3737
const vfile = processor.processSync(lottieJsonFile);
3838

39-
// console.log(reporter(vfile));
39+
console.log(reporter(vfile));
4040

4141
console.log(vfile.data);
4242

packages/relottie-parse/src/constants.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ import type {
1919

2020
const { number: NT, string: ST } = TITLES;
2121

22+
export const fileConstants = {
23+
sourceId: 'relottie-parse',
24+
} as const;
25+
2226
export type ConstantNumMap = Map<number, string>;
2327

2428
export const blendModeValues: ConstantNumMap = new Map<BlendMode.Value, string>([

packages/relottie-parse/src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Copyright 2022 Design Barn Inc.
33
*/
44

5-
export { default, type Options, type FileData } from './unified-relottie-parse.js';
5+
export { default, type Options } from './unified-relottie-parse.js';
6+
export type { ParseFileData } from './parse.js';
67
export { DEFAULT_OPTIONS } from './options.js';
78
export { Stack } from './helpers.js';

packages/relottie-parse/src/options.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,9 @@ export interface ParseOptions {
1111
* Include 'valueType' prop into nodes (default, true)
1212
*/
1313
valueType: boolean;
14-
/**
15-
* include 'warning' type messages into vfile.data (default, false)
16-
*/
17-
warningMessage: boolean;
1814
}
1915

2016
export const DEFAULT_OPTIONS: ParseOptions = {
2117
position: true,
2218
valueType: true,
23-
warningMessage: false,
2419
} as const;

packages/relottie-parse/src/parse.ts

Lines changed: 13 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import type { PrimitiveParts } from '@lottiefiles/last-builder';
3838
import { is } from 'unist-util-is';
3939
import type { VFile, Data } from 'vfile';
4040

41+
import { fileConstants } from './constants.js';
4142
import type { Dependent } from './entities.js';
4243
import { getMemberEntity, getNoKeyEntity } from './entities.js';
4344
import { Stack } from './helpers.js';
@@ -46,21 +47,13 @@ import type { ParseOptions } from './options.js';
4647
import type { SettingsOptions } from './unified-relottie-parse.js';
4748

4849
export interface ParseFileData extends Data {
49-
parse: {
50-
messages?: VFile['messages'];
51-
};
50+
parse?: object;
5251
}
5352

5453
export interface Info {
5554
hasExpressions: Root['hasExpressions'];
5655
}
5756

58-
const addWarningMessage = (file: VFile, message: string, options: ParseOptions): void => {
59-
if (options.warningMessage) {
60-
file.message(message);
61-
}
62-
};
63-
6457
const createValueType = (node: Momoa.AstNode, options: ParseOptions): PrimitiveParts<PrimitiveValueType> => {
6558
if (!options.valueType || node.type === 'Array' || node.type === 'Object' || node.type === 'Document') {
6659
return {};
@@ -157,7 +150,6 @@ const getTitleFromMemberValue = (
157150
parentNodeTitle: ParentTitle,
158151
dependent: Dependent,
159152
file: VFile,
160-
options: ParseOptions,
161153
): AnyTitle | undefined => {
162154
const { key, parentTitle, type } = dependent;
163155

@@ -178,7 +170,7 @@ const getTitleFromMemberValue = (
178170
if (!constTitle) {
179171
const message = `[${parentNodeTitle}] '${constantKey}' is missing in "dependent.parentTitle.values"`;
180172

181-
addWarningMessage(file, message, options);
173+
file.message(message, node, fileConstants.sourceId);
182174
}
183175

184176
const title = typeof constTitle === 'undefined' ? defaultConstTitle : constTitle;
@@ -198,7 +190,7 @@ const getTitleFromMemberValue = (
198190
if (type !== node.type) {
199191
const message = `${parentNodeTitle}'s '${key}' type is ${node.type} but has to be ${type}`;
200192

201-
addWarningMessage(file, message, options);
193+
file.message(message, node, fileConstants.sourceId);
202194
break;
203195
}
204196

@@ -213,7 +205,6 @@ const getDependentTitle = (
213205
members: Momoa.Member[],
214206
dependents: Dependent[],
215207
file: VFile,
216-
options: ParseOptions,
217208
): AnyTitle | undefined => {
218209
const memberKeyValue = members.reduce((acc, member) => {
219210
const key = member.name.value;
@@ -229,37 +220,27 @@ const getDependentTitle = (
229220

230221
if (!node) continue;
231222

232-
const title = getTitleFromMemberValue(node, parentTitle, dependent, file, options);
223+
const title = getTitleFromMemberValue(node, parentTitle, dependent, file);
233224

234225
if (title) return title;
235226
}
236227

237228
return undefined;
238229
};
239230

240-
const getObjectNodeTitle = (
241-
node: Momoa.Obj,
242-
parentNodeTitle: ParentTitle,
243-
file: VFile,
244-
options: ParseOptions,
245-
): ObjectTitle => {
231+
const getObjectNodeTitle = (node: Momoa.Obj, parentNodeTitle: ParentTitle, file: VFile): ObjectTitle => {
246232
const entity = getNoKeyEntity(node, parentNodeTitle);
247233

248234
const { defaultTitle, dependents } = entity;
249235

250236
if (!dependents) return defaultTitle as ObjectTitle;
251237

252-
const title = getDependentTitle(parentNodeTitle, node.members, dependents, file, options);
238+
const title = getDependentTitle(parentNodeTitle, node.members, dependents, file);
253239

254240
return (title || defaultTitle) as ObjectTitle;
255241
};
256242

257-
const getArrayNodeTitle = (
258-
node: Momoa.Arr,
259-
parentNodeTitle: ParentTitle,
260-
file: VFile,
261-
options: ParseOptions,
262-
): ArrayTitle => {
243+
const getArrayNodeTitle = (node: Momoa.Arr, parentNodeTitle: ParentTitle, file: VFile): ArrayTitle => {
263244
const entity = getNoKeyEntity(node, parentNodeTitle);
264245

265246
const { defaultTitle, dependents } = entity;
@@ -268,7 +249,7 @@ const getArrayNodeTitle = (
268249

269250
const members = getMembersFromArrNode(node);
270251

271-
const title = getDependentTitle(parentNodeTitle, members, dependents, file, options);
252+
const title = getDependentTitle(parentNodeTitle, members, dependents, file);
272253

273254
return (title || defaultTitle) as ArrayTitle;
274255
};
@@ -307,7 +288,7 @@ const traverseJsonEnter = (
307288
const element = stack.peek();
308289

309290
assertNodeType<Element>(element, 'element', file);
310-
const elementValueTitle = getObjectNodeTitle(node, element.title, file, options);
291+
const elementValueTitle = getObjectNodeTitle(node, element.title, file);
311292

312293
stack.push(objectNode(elementValueTitle, [], { ...position }));
313294
break;
@@ -316,7 +297,7 @@ const traverseJsonEnter = (
316297
const array = stack.peek();
317298

318299
assertNodeType<ArrayNode>(array, 'array', file);
319-
const objectTitle = getObjectNodeTitle(node, array.title, file, options);
300+
const objectTitle = getObjectNodeTitle(node, array.title, file);
320301

321302
stack.push(objectNode(objectTitle, [], { ...position }));
322303
break;
@@ -332,7 +313,7 @@ const traverseJsonEnter = (
332313
const collection = stack.peek();
333314

334315
assertNodeType<Collection>(collection, 'collection', file);
335-
const collectionValueTitle = getArrayNodeTitle(node, collection.title, file, options);
316+
const collectionValueTitle = getArrayNodeTitle(node, collection.title, file);
336317

337318
stack.push(arrayNode(collectionValueTitle, [], { ...position }));
338319
break;
@@ -341,7 +322,7 @@ const traverseJsonEnter = (
341322
const array = stack.peek();
342323

343324
assertNodeType<ArrayNode>(array, 'array', file);
344-
const arrayTitle = getArrayNodeTitle(node, array.title, file, options);
325+
const arrayTitle = getArrayNodeTitle(node, array.title, file);
345326

346327
stack.push(arrayNode(arrayTitle, [], { ...position }));
347328
break;
@@ -545,16 +526,6 @@ export function parse(document: string, file: VFile, settings: SettingsOptions =
545526
},
546527
});
547528

548-
const dataMessages = options.warningMessage && file.messages.length > 0 ? { messages: file.messages } : {};
549-
550-
const fileData: ParseFileData = {
551-
parse: {
552-
...dataMessages,
553-
},
554-
};
555-
556-
Object.assign(file.data, fileData);
557-
558529
const tree = stack.pop();
559530

560531
if (is<Root>(tree, 'root')) {

0 commit comments

Comments
 (0)