verify-docs-portal.mjs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { readFileSync, existsSync } from 'node:fs'
  2. import { resolve } from 'node:path'
  3. const root = resolve(new URL('..', import.meta.url).pathname)
  4. function read(path) {
  5. return readFileSync(resolve(root, path), 'utf8')
  6. }
  7. function assertIncludes(content, needle, label) {
  8. if (!content.includes(needle)) {
  9. throw new Error(`${label} is missing ${needle}`)
  10. }
  11. }
  12. function assertFile(path) {
  13. if (!existsSync(resolve(root, path))) {
  14. throw new Error(`Missing documentation file: ${path}`)
  15. }
  16. }
  17. const config = read('docs/.vitepress/config.ts')
  18. const site = read('apps/official-site/src/App.vue')
  19. const zhHome = read('docs/index.md')
  20. const enHome = read('docs/en/index.md')
  21. const requiredZhLinks = [
  22. '/guide/quickstart-web',
  23. '/guide/quickstart-vue3',
  24. '/guide/quickstart-vue2',
  25. '/guide/quickstart-react',
  26. '/guide/ecosystem#jquery',
  27. '/guide/ecosystem#svelte',
  28. '/guide/on-demand-renderers',
  29. '/guide/usage',
  30. '/guide/docker',
  31. '/guide/distribution'
  32. ]
  33. const requiredEnLinks = [
  34. '/en/guide/quickstart-web',
  35. '/en/guide/quickstart-vue3',
  36. '/en/guide/quickstart-vue2',
  37. '/en/guide/quickstart-react',
  38. '/en/guide/ecosystem#jquery',
  39. '/en/guide/ecosystem#svelte',
  40. '/en/guide/on-demand-renderers',
  41. '/en/guide/usage',
  42. '/en/guide/docker',
  43. '/en/guide/distribution'
  44. ]
  45. const requiredEnFiles = [
  46. 'docs/en/guide/index.md',
  47. 'docs/en/guide/overview.md',
  48. 'docs/en/guide/demo.md',
  49. 'docs/en/guide/quickstart.md',
  50. 'docs/en/guide/quickstart-web.md',
  51. 'docs/en/guide/quickstart-vue3.md',
  52. 'docs/en/guide/quickstart-vue2.md',
  53. 'docs/en/guide/quickstart-react.md',
  54. 'docs/en/guide/ecosystem.md',
  55. 'docs/en/guide/on-demand-renderers.md',
  56. 'docs/en/guide/usage.md',
  57. 'docs/en/guide/formats.md',
  58. 'docs/en/guide/format-fidelity.md',
  59. 'docs/en/guide/faq.md',
  60. 'docs/en/guide/development.md',
  61. 'docs/en/guide/docker.md',
  62. 'docs/en/guide/distribution.md'
  63. ]
  64. for (const link of requiredZhLinks) assertIncludes(config, link, 'Chinese docs navigation')
  65. for (const link of requiredEnLinks) assertIncludes(config, link, 'English docs navigation')
  66. for (const file of requiredEnFiles) assertFile(file)
  67. for (const content of [config, zhHome, enHome, site]) {
  68. assertIncludes(content, '206', 'public format count')
  69. assertIncludes(content, '24', 'public renderer pipeline count')
  70. }
  71. assertIncludes(site, "docsUrl = 'https://doc.file-viewer.app/'", 'official site docs URL')
  72. assertIncludes(site, '<iframe', 'official site docs embed')
  73. assertIncludes(site, 'resolveInitialLocale', 'official site locale detection')
  74. assertIncludes(enHome, 'Modular Integration', 'English docs homepage')
  75. assertIncludes(enHome, 'Flyfish Viewer', 'English docs homepage')
  76. console.log('[docs-portal] Verified bilingual docs navigation, portal iframe, domains, and public count references.')