summaryrefslogtreecommitdiff
path: root/benchmark/make-project/markdown-cc2.js
diff options
context:
space:
mode:
Diffstat (limited to 'benchmark/make-project/markdown-cc2.js')
-rw-r--r--benchmark/make-project/markdown-cc2.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/benchmark/make-project/markdown-cc2.js b/benchmark/make-project/markdown-cc2.js
new file mode 100644
index 000000000..73c6afe7a
--- /dev/null
+++ b/benchmark/make-project/markdown-cc2.js
@@ -0,0 +1,80 @@
+import fs from 'node:fs/promises';
+import { loremIpsumMd } from './_util.js';
+
+/**
+ * @param {URL} projectDir
+ */
+export async function run(projectDir) {
+ await fs.rm(projectDir, { recursive: true, force: true });
+ await fs.mkdir(new URL('./src/pages/blog', projectDir), { recursive: true });
+ await fs.mkdir(new URL('./data/blog', projectDir), { recursive: true });
+ await fs.mkdir(new URL('./src/content', projectDir), { recursive: true });
+ await fs.copyFile(new URL('./image.jpg', import.meta.url), new URL('./image.jpg', projectDir));
+
+ const promises = [];
+
+ for (let i = 0; i < 10000; i++) {
+ const content = `\
+# Article ${i}
+
+${loremIpsumMd}
+
+![image ${i}](../../image.jpg)
+
+`;
+ promises.push(
+ fs.writeFile(new URL(`./data/blog/article-${i}.md`, projectDir), content, 'utf-8')
+ );
+ }
+
+ await fs.writeFile(
+ new URL(`./src/content/config.ts`, projectDir),
+ /*ts */ `
+ import { defineCollection, z } from 'astro:content';
+ import { glob } from 'astro/loaders';
+
+ const blog = defineCollection({
+ loader: glob({ pattern: '*', base: './data/blog' }),
+ });
+
+ export const collections = { blog }
+
+ `
+ );
+
+ await fs.writeFile(
+ new URL(`./src/pages/blog/[...slug].astro`, projectDir),
+ `\
+---
+import { getCollection, render } from 'astro:content';
+export async function getStaticPaths() {
+ const blogEntries = await getCollection('blog');
+ return blogEntries.map(entry => ({
+ params: { slug: entry.id }, props: { entry },
+ }));
+}
+const { entry } = Astro.props;
+const { Content } = await render(entry);
+
+---
+<h1>{entry.data.title}</h1>
+<Content />
+`,
+ 'utf-8'
+ );
+
+ await Promise.all(promises);
+
+ await fs.writeFile(
+ new URL('./astro.config.js', projectDir),
+ `\
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ experimental: {
+ contentLayer: true
+ }
+});`,
+ 'utf-8'
+ );
+}