Skip to content

Commit 107d9ab

Browse files
Revert "chore: refactor the generateBlogData function (nodejs#7607)"
This reverts commit b7364b9.
1 parent f568ce4 commit 107d9ab

File tree

1 file changed

+44
-40
lines changed

1 file changed

+44
-40
lines changed

Diff for: apps/site/next-data/generators/blogData.mjs

+44-40
Original file line numberDiff line numberDiff line change
@@ -63,46 +63,50 @@ const generateBlogData = async () => {
6363
'**/index.md',
6464
]);
6565

66-
const posts = await Promise.all(
67-
filenames.map(
68-
filename =>
69-
new Promise(resolve => {
70-
// We create a stream for reading a file instead of reading the files
71-
const _stream = createReadStream(join(blogPath, filename));
72-
73-
// We create a readline interface to read the file line-by-line
74-
const _readLine = readline.createInterface({ input: _stream });
75-
76-
let rawFrontmatter = '';
77-
let frontmatterSeparatorsEncountered = 0;
78-
79-
// We read line by line
80-
_readLine.on('line', line => {
81-
rawFrontmatter += `${line}\n`;
82-
83-
// We observe the frontmatter separators
84-
if (line === '---') {
85-
frontmatterSeparatorsEncountered++;
86-
}
87-
88-
// Once we have two separators we close the readLine and the stream
89-
if (frontmatterSeparatorsEncountered === 2) {
90-
_readLine.close();
91-
_stream.close();
92-
}
93-
});
94-
95-
// Then we parse gray-matter on the frontmatter
96-
// This allows us to only read the frontmatter part of each file
97-
// and optimise the read-process as we have thousands of markdown files
98-
_readLine.on('close', () => {
99-
resolve(getFrontMatter(filename, rawFrontmatter));
100-
});
101-
})
102-
)
103-
);
104-
105-
return { categories: [...blogCategories], posts };
66+
return new Promise(resolve => {
67+
const posts = [];
68+
const rawFrontmatter = [];
69+
70+
filenames.forEach(filename => {
71+
// We create a stream for reading a file instead of reading the files
72+
const _stream = createReadStream(join(blogPath, filename));
73+
74+
// We create a readline interface to read the file line-by-line
75+
const _readLine = readline.createInterface({ input: _stream });
76+
77+
// Creates an array of the metadata based on the filename
78+
// This prevents concurrency issues since the for-loop is synchronous
79+
// and these event listeners are not
80+
rawFrontmatter[filename] = [0, ''];
81+
82+
// We read line by line
83+
_readLine.on('line', line => {
84+
rawFrontmatter[filename][1] += `${line}\n`;
85+
86+
// We observe the frontmatter separators
87+
if (line === '---') {
88+
rawFrontmatter[filename][0] += 1;
89+
}
90+
91+
// Once we have two separators we close the readLine and the stream
92+
if (rawFrontmatter[filename][0] === 2) {
93+
_readLine.close();
94+
_stream.close();
95+
}
96+
});
97+
98+
// Then we parse gray-matter on the frontmatter
99+
// This allows us to only read the frontmatter part of each file
100+
// and optimise the read-process as we have thousands of markdown files
101+
_readLine.on('close', () => {
102+
posts.push(getFrontMatter(filename, rawFrontmatter[filename][1]));
103+
104+
if (posts.length === filenames.length) {
105+
resolve({ categories: [...blogCategories], posts });
106+
}
107+
});
108+
});
109+
});
106110
};
107111

108112
export default generateBlogData;

0 commit comments

Comments
 (0)