experience-baseline.json 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. {
  2. "schemaVersion": 1,
  3. "description": "Native wrapper experience contract used while the viewer is being split into a pure TypeScript core and public framework wrappers.",
  4. "baseline": {
  5. "sourceBranch": "main",
  6. "rootPackage": "@flyfish-group/file-viewer-workspace",
  7. "versionSource": "package.json",
  8. "formatMatrixSource": "packages/core/src/registry/formats.ts",
  9. "wrapperManifestSource": "ecosystem/wrappers.json",
  10. "smokeMatrixSource": "ecosystem/smoke-matrix.json"
  11. },
  12. "requiredScripts": [
  13. "verify:demo-browser-smoke",
  14. "verify:component-browser-smoke",
  15. "verify:browser-smoke",
  16. "verify:smoke-matrix",
  17. "verify:wrapper-api",
  18. "verify:wrapper-options"
  19. ],
  20. "featureGroups": [
  21. {
  22. "id": "source-loading",
  23. "evidence": ["url-source", "file-source", "buffer-source", "stale-request-guard", "loading-state"]
  24. },
  25. {
  26. "id": "options",
  27. "evidence": ["options-behavior", "theme", "toolbar", "watermark", "search", "ai", "pdf", "docx", "typst", "archive", "cad"]
  28. },
  29. {
  30. "id": "toolbar-operations",
  31. "evidence": ["download", "print", "export-html", "watermark-toggle", "capability-state", "capability-visibility", "before-operation"]
  32. },
  33. {
  34. "id": "lifecycle-events",
  35. "evidence": ["event-callback", "native-wrapper-event", "load-start", "load-complete", "unload-start", "unload-complete"]
  36. },
  37. {
  38. "id": "document-navigation",
  39. "evidence": ["anchors", "current-location", "scroll-to-line", "search-next-previous", "highlight"]
  40. },
  41. {
  42. "id": "layout-visual",
  43. "evidence": ["dom-snapshot", "visual-screenshot", "paper-layout", "fit-to-view", "dark-mode-readability"]
  44. },
  45. {
  46. "id": "print-export",
  47. "evidence": ["print-output", "export-output", "document-only-content", "page-size"]
  48. },
  49. {
  50. "id": "wrapper-contract",
  51. "evidence": ["shared-core-version", "shared-options", "shared-events", "shared-controller-handle", "standalone-package"]
  52. }
  53. ],
  54. "surfaces": [
  55. {
  56. "id": "vue3-current-component",
  57. "label": "Vue 3 wrapper component",
  58. "kind": "baseline-component",
  59. "packageName": "@flyfish-group/file-viewer3",
  60. "entryFiles": [
  61. "packages/components/vue3/src/package/components/FileViewer/FileViewer.vue",
  62. "packages/components/vue3/src/package/index.ts",
  63. "apps/viewer-demo/src/main.ts"
  64. ],
  65. "smokeScripts": ["verify:demo-browser-smoke"],
  66. "preserves": ["source-loading", "options", "toolbar-operations", "lifecycle-events", "document-navigation", "layout-visual", "print-export"]
  67. },
  68. {
  69. "id": "compare-page",
  70. "label": "Document compare page",
  71. "kind": "baseline-page",
  72. "packageName": "@flyfish-group/file-viewer3",
  73. "entryFiles": [
  74. "apps/viewer-demo/src/compare/CompareApp.vue",
  75. "apps/viewer-demo/src/compare/main.ts",
  76. "apps/viewer-demo/src/compare/useSynchronizedScroll.ts"
  77. ],
  78. "smokeScripts": ["verify:demo-browser-smoke"],
  79. "preserves": ["source-loading", "document-navigation", "layout-visual"]
  80. },
  81. {
  82. "id": "pure-web-native-viewer",
  83. "label": "Shared pure Web native viewer",
  84. "kind": "native-viewer",
  85. "packageName": "@file-viewer/web",
  86. "entryFiles": [
  87. "packages/components/web/src/index.ts",
  88. "packages/components/web/src/global.ts",
  89. "packages/components/web/package.json"
  90. ],
  91. "smokeScripts": ["verify:component-browser-smoke"],
  92. "preserves": ["source-loading", "options", "lifecycle-events", "wrapper-contract"]
  93. },
  94. {
  95. "id": "react-native-wrapper",
  96. "label": "React native component package",
  97. "kind": "native-wrapper",
  98. "wrapperId": "react",
  99. "packageName": "@flyfish-group/file-viewer-react",
  100. "entryFiles": ["packages/compat/react/src/index.tsx", "apps/component-demo/src/main.tsx"],
  101. "smokeScripts": ["verify:component-browser-smoke"],
  102. "preserves": ["source-loading", "options", "lifecycle-events", "wrapper-contract"]
  103. },
  104. {
  105. "id": "pure-js-native-wrapper",
  106. "label": "Pure JS native component package",
  107. "kind": "native-wrapper",
  108. "wrapperId": "web",
  109. "packageName": "@flyfish-group/file-viewer-web",
  110. "entryFiles": ["packages/compat/web/src/index.ts", "apps/component-demo/manual-js.html"],
  111. "smokeScripts": ["verify:component-browser-smoke"],
  112. "preserves": ["source-loading", "options", "lifecycle-events", "wrapper-contract"]
  113. },
  114. {
  115. "id": "script-tag-iife",
  116. "label": "Script tag IIFE entry",
  117. "kind": "script-tag",
  118. "wrapperId": "web",
  119. "packageName": "@file-viewer/web",
  120. "entryFiles": ["packages/components/web/src/global.ts", "apps/component-demo/manual-iife.html"],
  121. "smokeScripts": ["verify:component-browser-smoke"],
  122. "preserves": ["source-loading", "options", "wrapper-contract"]
  123. }
  124. ],
  125. "cases": [
  126. {
  127. "id": "vue3-demo-markdown",
  128. "surface": "vue3-current-component",
  129. "smokeCaseId": "markdown-md",
  130. "sample": "markdown.md",
  131. "scripts": ["verify:demo-browser-smoke"],
  132. "features": ["source-loading", "options", "document-navigation", "layout-visual"],
  133. "assertions": ["load-complete", "dark-mode-readable", "search", "dom-snapshot", "visual-screenshot"]
  134. },
  135. {
  136. "id": "vue3-demo-pdf-operations",
  137. "surface": "vue3-current-component",
  138. "smokeCaseId": "pdf-document",
  139. "sample": "pdf.pdf",
  140. "scripts": ["verify:demo-browser-smoke"],
  141. "features": ["toolbar-operations", "document-navigation", "print-export", "layout-visual"],
  142. "assertions": ["page-navigation", "outline-or-thumbnails", "search", "zoom", "print-capability", "export-output"]
  143. },
  144. {
  145. "id": "vue3-demo-docx-print",
  146. "surface": "vue3-current-component",
  147. "smokeCaseId": "word-openxml-docx",
  148. "sample": "word.docx",
  149. "scripts": ["verify:demo-browser-smoke"],
  150. "features": ["print-export", "layout-visual", "document-navigation"],
  151. "assertions": ["paper-layout", "page-size", "document-only-content", "print-output", "export-output"]
  152. },
  153. {
  154. "id": "compare-page-sync-and-search",
  155. "surface": "compare-page",
  156. "smokeCaseId": "pdf-document",
  157. "sample": "pdf.pdf",
  158. "scripts": ["verify:demo-browser-smoke"],
  159. "features": ["source-loading", "document-navigation", "layout-visual"],
  160. "assertions": ["dual-panel", "synchronized-scroll", "shortcut-search", "line-location"]
  161. },
  162. {
  163. "id": "pure-web-native-viewer-docx",
  164. "surface": "pure-web-native-viewer",
  165. "smokeCaseId": "word-openxml-docx",
  166. "sample": "word.docx",
  167. "scripts": ["verify:component-browser-smoke"],
  168. "features": ["source-loading", "options", "lifecycle-events", "wrapper-contract"],
  169. "assertions": ["mount-viewer", "shared-controller-handle", "load-complete", "lifecycle-events"]
  170. },
  171. {
  172. "id": "react-native-wrapper-docx",
  173. "surface": "react-native-wrapper",
  174. "wrapperId": "react",
  175. "sample": "word.docx",
  176. "scripts": ["verify:component-browser-smoke"],
  177. "features": ["source-loading", "options", "lifecycle-events", "wrapper-contract"],
  178. "assertions": ["native-mount", "shared-controller-handle", "load-complete"]
  179. },
  180. {
  181. "id": "pure-js-native-wrapper-docx",
  182. "surface": "pure-js-native-wrapper",
  183. "wrapperId": "web",
  184. "sample": "word.docx",
  185. "scripts": ["verify:component-browser-smoke"],
  186. "features": ["source-loading", "options", "lifecycle-events", "wrapper-contract"],
  187. "assertions": ["native-mount", "mount-viewer", "load-complete"]
  188. },
  189. {
  190. "id": "script-tag-iife-markdown",
  191. "surface": "script-tag-iife",
  192. "wrapperId": "web",
  193. "sample": "preview.md",
  194. "scripts": ["verify:component-browser-smoke"],
  195. "features": ["source-loading", "options", "wrapper-contract"],
  196. "assertions": ["global-api", "mount-viewer", "load-complete"]
  197. }
  198. ],
  199. "requiredEvidence": [
  200. "dom-snapshot",
  201. "visual-screenshot",
  202. "event-callback",
  203. "capability-state",
  204. "options-behavior",
  205. "print-output",
  206. "export-output"
  207. ]
  208. }