memory-default.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import fs from 'node:fs/promises';
  2. import { loremIpsum } from './_util.js';
  3. /**
  4. * @param {URL} projectDir
  5. */
  6. export async function run(projectDir) {
  7. await fs.rm(projectDir, { recursive: true, force: true });
  8. await fs.mkdir(new URL('./src/pages/blog', projectDir), { recursive: true });
  9. await fs.mkdir(new URL('./src/content/blog', projectDir), { recursive: true });
  10. const promises = [];
  11. for (let i = 0; i < 100; i++) {
  12. const content = `\
  13. ---
  14. const i = ${i};
  15. ---
  16. <span>{i}</span>
  17. `;
  18. promises.push(
  19. fs.writeFile(new URL(`./src/pages/page-${i}.astro`, projectDir), content, 'utf-8')
  20. );
  21. }
  22. for (let i = 0; i < 100; i++) {
  23. const content = `\
  24. # Article ${i}
  25. ${loremIpsum}
  26. `;
  27. promises.push(
  28. fs.writeFile(new URL(`./src/content/blog/article-${i}.md`, projectDir), content, 'utf-8')
  29. );
  30. }
  31. await fs.writeFile(
  32. new URL(`./src/pages/blog/[...slug].astro`, projectDir),
  33. `\
  34. ---
  35. import { getCollection } from 'astro:content';
  36. export async function getStaticPaths() {
  37. const blogEntries = await getCollection('blog');
  38. return blogEntries.map(entry => ({
  39. params: { slug: entry.slug }, props: { entry },
  40. }));
  41. }
  42. const { entry } = Astro.props;
  43. const { Content } = await entry.render();
  44. ---
  45. <h1>{entry.data.title}</h1>
  46. <Content />
  47. `,
  48. 'utf-8'
  49. );
  50. await Promise.all(promises);
  51. }