groove-dev 0.26.39 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (914) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/CLAUDE.md +24 -19
  3. package/node_modules/@groove-dev/cli/package.json +1 -1
  4. package/node_modules/@groove-dev/daemon/integrations-registry.json +548 -0
  5. package/node_modules/@groove-dev/daemon/package.json +1 -1
  6. package/node_modules/@groove-dev/daemon/src/api.js +172 -4
  7. package/node_modules/@groove-dev/daemon/src/classifier.js +20 -1
  8. package/node_modules/@groove-dev/daemon/src/firstrun.js +14 -1
  9. package/node_modules/@groove-dev/daemon/src/gateways/manager.js +2 -2
  10. package/node_modules/@groove-dev/daemon/src/index.js +3 -1
  11. package/node_modules/@groove-dev/daemon/src/introducer.js +56 -5
  12. package/node_modules/@groove-dev/daemon/src/journalist.js +43 -1
  13. package/node_modules/@groove-dev/daemon/src/lockmanager.js +60 -0
  14. package/node_modules/@groove-dev/daemon/src/mcp-manager.js +2 -1
  15. package/node_modules/@groove-dev/daemon/src/memory.js +370 -0
  16. package/node_modules/@groove-dev/daemon/src/pm.js +1 -1
  17. package/node_modules/@groove-dev/daemon/src/process.js +20 -1
  18. package/node_modules/@groove-dev/daemon/src/rotator.js +155 -5
  19. package/node_modules/@groove-dev/daemon/src/router.js +43 -0
  20. package/node_modules/@groove-dev/daemon/src/tokentracker.js +62 -8
  21. package/node_modules/@groove-dev/daemon/src/validate.js +0 -13
  22. package/node_modules/@groove-dev/daemon/test/lockmanager.test.js +64 -0
  23. package/node_modules/@groove-dev/daemon/test/memory.test.js +252 -0
  24. package/node_modules/@groove-dev/daemon/test/rotator.test.js +108 -0
  25. package/node_modules/@groove-dev/daemon/test/router.test.js +64 -0
  26. package/node_modules/@groove-dev/daemon/test/tokentracker.test.js +78 -0
  27. package/node_modules/@groove-dev/gui/dist/assets/index-DjORRpF0.css +1 -0
  28. package/node_modules/@groove-dev/gui/dist/assets/index-eCrVowF0.js +652 -0
  29. package/node_modules/@groove-dev/gui/dist/index.html +2 -2
  30. package/node_modules/@groove-dev/gui/package.json +1 -4
  31. package/node_modules/@groove-dev/gui/src/components/agents/spawn-wizard.jsx +18 -0
  32. package/node_modules/@groove-dev/gui/src/components/dashboard/cache-ring.jsx +6 -2
  33. package/node_modules/@groove-dev/gui/src/components/dashboard/intel-panel.jsx +251 -8
  34. package/node_modules/@groove-dev/gui/src/components/dashboard/team-burn-panel.jsx +55 -0
  35. package/node_modules/@groove-dev/gui/src/components/marketplace/marketplace-card.jsx +22 -4
  36. package/node_modules/@groove-dev/gui/src/lib/format.js +0 -6
  37. package/node_modules/@groove-dev/gui/src/lib/hooks/use-dashboard.js +18 -1
  38. package/node_modules/@groove-dev/gui/src/stores/groove.js +0 -2
  39. package/node_modules/@groove-dev/gui/src/views/dashboard.jsx +9 -2
  40. package/node_modules/@groove-dev/gui/src/views/marketplace.jsx +103 -77
  41. package/package.json +2 -8
  42. package/packages/cli/package.json +1 -1
  43. package/packages/daemon/integrations-registry.json +548 -0
  44. package/packages/daemon/package.json +1 -1
  45. package/packages/daemon/src/api.js +172 -4
  46. package/packages/daemon/src/classifier.js +20 -1
  47. package/packages/daemon/src/firstrun.js +14 -1
  48. package/packages/daemon/src/gateways/manager.js +2 -2
  49. package/packages/daemon/src/index.js +3 -1
  50. package/packages/daemon/src/introducer.js +56 -5
  51. package/packages/daemon/src/journalist.js +43 -1
  52. package/packages/daemon/src/lockmanager.js +60 -0
  53. package/packages/daemon/src/mcp-manager.js +2 -1
  54. package/packages/daemon/src/memory.js +370 -0
  55. package/packages/daemon/src/pm.js +1 -1
  56. package/packages/daemon/src/process.js +20 -1
  57. package/packages/daemon/src/rotator.js +155 -5
  58. package/packages/daemon/src/router.js +43 -0
  59. package/packages/daemon/src/tokentracker.js +62 -8
  60. package/packages/daemon/src/validate.js +0 -13
  61. package/packages/gui/dist/assets/index-DjORRpF0.css +1 -0
  62. package/packages/gui/dist/assets/index-eCrVowF0.js +652 -0
  63. package/packages/gui/dist/index.html +2 -2
  64. package/packages/gui/package.json +1 -4
  65. package/packages/gui/src/components/agents/spawn-wizard.jsx +18 -0
  66. package/packages/gui/src/components/dashboard/cache-ring.jsx +6 -2
  67. package/packages/gui/src/components/dashboard/intel-panel.jsx +251 -8
  68. package/packages/gui/src/components/dashboard/team-burn-panel.jsx +55 -0
  69. package/packages/gui/src/components/marketplace/marketplace-card.jsx +22 -4
  70. package/packages/gui/src/lib/format.js +0 -6
  71. package/packages/gui/src/lib/hooks/use-dashboard.js +18 -1
  72. package/packages/gui/src/stores/groove.js +0 -2
  73. package/packages/gui/src/views/dashboard.jsx +9 -2
  74. package/packages/gui/src/views/marketplace.jsx +103 -77
  75. package/docs-manager/DOCS-WORKFLOW.md +0 -176
  76. package/node_modules/@groove-dev/gui/dist/assets/index-BkY43sei.css +0 -1
  77. package/node_modules/@groove-dev/gui/dist/assets/index-DmKZLrXU.js +0 -652
  78. package/node_modules/@groove-dev/gui/dist/groove-logo-short.png +0 -0
  79. package/node_modules/@groove-dev/gui/dist/groove-logo.png +0 -0
  80. package/node_modules/@groove-dev/gui/public/groove-logo-short.png +0 -0
  81. package/node_modules/@groove-dev/gui/public/groove-logo.png +0 -0
  82. package/node_modules/@groove-dev/gui/src/components/ui/dropdown-menu.jsx +0 -60
  83. package/node_modules/@groove-dev/gui/src/lib/hooks/use-media-query.js +0 -18
  84. package/node_modules/@radix-ui/react-dropdown-menu/LICENSE +0 -21
  85. package/node_modules/@radix-ui/react-dropdown-menu/README.md +0 -3
  86. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.mts +0 -97
  87. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.ts +0 -97
  88. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.js +0 -337
  89. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.js.map +0 -7
  90. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs +0 -305
  91. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs.map +0 -7
  92. package/node_modules/@radix-ui/react-dropdown-menu/package.json +0 -75
  93. package/node_modules/@radix-ui/react-popover/LICENSE +0 -21
  94. package/node_modules/@radix-ui/react-popover/README.md +0 -3
  95. package/node_modules/@radix-ui/react-popover/dist/index.d.mts +0 -85
  96. package/node_modules/@radix-ui/react-popover/dist/index.d.ts +0 -85
  97. package/node_modules/@radix-ui/react-popover/dist/index.js +0 -352
  98. package/node_modules/@radix-ui/react-popover/dist/index.js.map +0 -7
  99. package/node_modules/@radix-ui/react-popover/dist/index.mjs +0 -320
  100. package/node_modules/@radix-ui/react-popover/dist/index.mjs.map +0 -7
  101. package/node_modules/@radix-ui/react-popover/package.json +0 -82
  102. package/node_modules/@radix-ui/react-separator/LICENSE +0 -21
  103. package/node_modules/@radix-ui/react-separator/README.md +0 -3
  104. package/node_modules/@radix-ui/react-separator/dist/index.d.mts +0 -21
  105. package/node_modules/@radix-ui/react-separator/dist/index.d.ts +0 -21
  106. package/node_modules/@radix-ui/react-separator/dist/index.js +0 -65
  107. package/node_modules/@radix-ui/react-separator/dist/index.js.map +0 -7
  108. package/node_modules/@radix-ui/react-separator/dist/index.mjs +0 -32
  109. package/node_modules/@radix-ui/react-separator/dist/index.mjs.map +0 -7
  110. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/LICENSE +0 -21
  111. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/README.md +0 -3
  112. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.mts +0 -52
  113. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.ts +0 -52
  114. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js +0 -80
  115. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js.map +0 -7
  116. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs +0 -47
  117. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +0 -7
  118. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/package.json +0 -69
  119. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/LICENSE +0 -21
  120. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/README.md +0 -3
  121. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.d.mts +0 -22
  122. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.d.ts +0 -22
  123. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.js +0 -152
  124. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.js.map +0 -7
  125. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.mjs +0 -119
  126. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.mjs.map +0 -7
  127. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/package.json +0 -64
  128. package/node_modules/@radix-ui/react-separator/package.json +0 -69
  129. package/packages/gui/dist/assets/index-BkY43sei.css +0 -1
  130. package/packages/gui/dist/assets/index-DmKZLrXU.js +0 -652
  131. package/packages/gui/dist/groove-logo-short.png +0 -0
  132. package/packages/gui/dist/groove-logo.png +0 -0
  133. package/packages/gui/public/groove-logo-short.png +0 -0
  134. package/packages/gui/public/groove-logo.png +0 -0
  135. package/packages/gui/src/components/ui/dropdown-menu.jsx +0 -60
  136. package/packages/gui/src/lib/hooks/use-media-query.js +0 -18
  137. package/slides/convert-slides.js +0 -1120
  138. package/slides/deck.pptx +0 -0
  139. package/slides/index.html +0 -825
  140. package/slides/node_modules/.package-lock.json +0 -527
  141. package/slides/node_modules/@types/node/LICENSE +0 -21
  142. package/slides/node_modules/@types/node/README.md +0 -15
  143. package/slides/node_modules/@types/node/assert/strict.d.ts +0 -111
  144. package/slides/node_modules/@types/node/assert.d.ts +0 -1078
  145. package/slides/node_modules/@types/node/async_hooks.d.ts +0 -603
  146. package/slides/node_modules/@types/node/buffer.buffer.d.ts +0 -472
  147. package/slides/node_modules/@types/node/buffer.d.ts +0 -1934
  148. package/slides/node_modules/@types/node/child_process.d.ts +0 -1476
  149. package/slides/node_modules/@types/node/cluster.d.ts +0 -578
  150. package/slides/node_modules/@types/node/compatibility/disposable.d.ts +0 -14
  151. package/slides/node_modules/@types/node/compatibility/index.d.ts +0 -9
  152. package/slides/node_modules/@types/node/compatibility/indexable.d.ts +0 -20
  153. package/slides/node_modules/@types/node/compatibility/iterators.d.ts +0 -20
  154. package/slides/node_modules/@types/node/console.d.ts +0 -452
  155. package/slides/node_modules/@types/node/constants.d.ts +0 -21
  156. package/slides/node_modules/@types/node/crypto.d.ts +0 -4545
  157. package/slides/node_modules/@types/node/dgram.d.ts +0 -600
  158. package/slides/node_modules/@types/node/diagnostics_channel.d.ts +0 -578
  159. package/slides/node_modules/@types/node/dns/promises.d.ts +0 -503
  160. package/slides/node_modules/@types/node/dns.d.ts +0 -923
  161. package/slides/node_modules/@types/node/domain.d.ts +0 -170
  162. package/slides/node_modules/@types/node/events.d.ts +0 -976
  163. package/slides/node_modules/@types/node/fs/promises.d.ts +0 -1295
  164. package/slides/node_modules/@types/node/fs.d.ts +0 -4461
  165. package/slides/node_modules/@types/node/globals.d.ts +0 -172
  166. package/slides/node_modules/@types/node/globals.typedarray.d.ts +0 -38
  167. package/slides/node_modules/@types/node/http.d.ts +0 -2089
  168. package/slides/node_modules/@types/node/http2.d.ts +0 -2644
  169. package/slides/node_modules/@types/node/https.d.ts +0 -579
  170. package/slides/node_modules/@types/node/index.d.ts +0 -97
  171. package/slides/node_modules/@types/node/inspector.d.ts +0 -253
  172. package/slides/node_modules/@types/node/inspector.generated.d.ts +0 -4052
  173. package/slides/node_modules/@types/node/module.d.ts +0 -891
  174. package/slides/node_modules/@types/node/net.d.ts +0 -1076
  175. package/slides/node_modules/@types/node/os.d.ts +0 -506
  176. package/slides/node_modules/@types/node/package.json +0 -145
  177. package/slides/node_modules/@types/node/path.d.ts +0 -200
  178. package/slides/node_modules/@types/node/perf_hooks.d.ts +0 -968
  179. package/slides/node_modules/@types/node/process.d.ts +0 -2084
  180. package/slides/node_modules/@types/node/punycode.d.ts +0 -117
  181. package/slides/node_modules/@types/node/querystring.d.ts +0 -152
  182. package/slides/node_modules/@types/node/readline/promises.d.ts +0 -161
  183. package/slides/node_modules/@types/node/readline.d.ts +0 -594
  184. package/slides/node_modules/@types/node/repl.d.ts +0 -428
  185. package/slides/node_modules/@types/node/sea.d.ts +0 -153
  186. package/slides/node_modules/@types/node/sqlite.d.ts +0 -721
  187. package/slides/node_modules/@types/node/stream/consumers.d.ts +0 -38
  188. package/slides/node_modules/@types/node/stream/promises.d.ts +0 -90
  189. package/slides/node_modules/@types/node/stream/web.d.ts +0 -622
  190. package/slides/node_modules/@types/node/stream.d.ts +0 -1687
  191. package/slides/node_modules/@types/node/string_decoder.d.ts +0 -67
  192. package/slides/node_modules/@types/node/test.d.ts +0 -2163
  193. package/slides/node_modules/@types/node/timers/promises.d.ts +0 -108
  194. package/slides/node_modules/@types/node/timers.d.ts +0 -287
  195. package/slides/node_modules/@types/node/tls.d.ts +0 -1319
  196. package/slides/node_modules/@types/node/trace_events.d.ts +0 -197
  197. package/slides/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -468
  198. package/slides/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -34
  199. package/slides/node_modules/@types/node/ts5.6/index.d.ts +0 -97
  200. package/slides/node_modules/@types/node/tty.d.ts +0 -208
  201. package/slides/node_modules/@types/node/url.d.ts +0 -984
  202. package/slides/node_modules/@types/node/util.d.ts +0 -2606
  203. package/slides/node_modules/@types/node/v8.d.ts +0 -920
  204. package/slides/node_modules/@types/node/vm.d.ts +0 -1000
  205. package/slides/node_modules/@types/node/wasi.d.ts +0 -181
  206. package/slides/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -34
  207. package/slides/node_modules/@types/node/web-globals/domexception.d.ts +0 -68
  208. package/slides/node_modules/@types/node/web-globals/events.d.ts +0 -97
  209. package/slides/node_modules/@types/node/web-globals/fetch.d.ts +0 -55
  210. package/slides/node_modules/@types/node/web-globals/navigator.d.ts +0 -22
  211. package/slides/node_modules/@types/node/web-globals/storage.d.ts +0 -24
  212. package/slides/node_modules/@types/node/worker_threads.d.ts +0 -784
  213. package/slides/node_modules/@types/node/zlib.d.ts +0 -747
  214. package/slides/node_modules/base64-js/LICENSE +0 -21
  215. package/slides/node_modules/base64-js/README.md +0 -34
  216. package/slides/node_modules/base64-js/base64js.min.js +0 -1
  217. package/slides/node_modules/base64-js/index.d.ts +0 -3
  218. package/slides/node_modules/base64-js/index.js +0 -150
  219. package/slides/node_modules/base64-js/package.json +0 -47
  220. package/slides/node_modules/bl/.travis.yml +0 -17
  221. package/slides/node_modules/bl/BufferList.js +0 -396
  222. package/slides/node_modules/bl/LICENSE.md +0 -13
  223. package/slides/node_modules/bl/README.md +0 -247
  224. package/slides/node_modules/bl/bl.js +0 -84
  225. package/slides/node_modules/bl/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  226. package/slides/node_modules/bl/node_modules/readable-stream/GOVERNANCE.md +0 -136
  227. package/slides/node_modules/bl/node_modules/readable-stream/LICENSE +0 -47
  228. package/slides/node_modules/bl/node_modules/readable-stream/README.md +0 -106
  229. package/slides/node_modules/bl/node_modules/readable-stream/errors-browser.js +0 -127
  230. package/slides/node_modules/bl/node_modules/readable-stream/errors.js +0 -116
  231. package/slides/node_modules/bl/node_modules/readable-stream/experimentalWarning.js +0 -17
  232. package/slides/node_modules/bl/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
  233. package/slides/node_modules/bl/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
  234. package/slides/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
  235. package/slides/node_modules/bl/node_modules/readable-stream/lib/_stream_transform.js +0 -190
  236. package/slides/node_modules/bl/node_modules/readable-stream/lib/_stream_writable.js +0 -641
  237. package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
  238. package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
  239. package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
  240. package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
  241. package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
  242. package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
  243. package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
  244. package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
  245. package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  246. package/slides/node_modules/bl/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  247. package/slides/node_modules/bl/node_modules/readable-stream/package.json +0 -68
  248. package/slides/node_modules/bl/node_modules/readable-stream/readable-browser.js +0 -9
  249. package/slides/node_modules/bl/node_modules/readable-stream/readable.js +0 -16
  250. package/slides/node_modules/bl/package.json +0 -37
  251. package/slides/node_modules/bl/test/convert.js +0 -21
  252. package/slides/node_modules/bl/test/indexOf.js +0 -492
  253. package/slides/node_modules/bl/test/isBufferList.js +0 -32
  254. package/slides/node_modules/bl/test/test.js +0 -869
  255. package/slides/node_modules/buffer/AUTHORS.md +0 -70
  256. package/slides/node_modules/buffer/LICENSE +0 -21
  257. package/slides/node_modules/buffer/README.md +0 -410
  258. package/slides/node_modules/buffer/index.d.ts +0 -186
  259. package/slides/node_modules/buffer/index.js +0 -1817
  260. package/slides/node_modules/buffer/package.json +0 -96
  261. package/slides/node_modules/canvas/Readme.md +0 -657
  262. package/slides/node_modules/canvas/binding.gyp +0 -229
  263. package/slides/node_modules/canvas/browser.js +0 -31
  264. package/slides/node_modules/canvas/build/Makefile +0 -347
  265. package/slides/node_modules/canvas/build/Release/canvas.node +0 -0
  266. package/slides/node_modules/canvas/build/Release/libX11.6.dylib +0 -0
  267. package/slides/node_modules/canvas/build/Release/libXau.6.dylib +0 -0
  268. package/slides/node_modules/canvas/build/Release/libXdmcp.6.dylib +0 -0
  269. package/slides/node_modules/canvas/build/Release/libXext.6.dylib +0 -0
  270. package/slides/node_modules/canvas/build/Release/libXrender.1.dylib +0 -0
  271. package/slides/node_modules/canvas/build/Release/libcairo-gobject.2.dylib +0 -0
  272. package/slides/node_modules/canvas/build/Release/libcairo.2.dylib +0 -0
  273. package/slides/node_modules/canvas/build/Release/libdatrie.1.dylib +0 -0
  274. package/slides/node_modules/canvas/build/Release/libfontconfig.1.dylib +0 -0
  275. package/slides/node_modules/canvas/build/Release/libfreetype.6.dylib +0 -0
  276. package/slides/node_modules/canvas/build/Release/libfribidi.0.dylib +0 -0
  277. package/slides/node_modules/canvas/build/Release/libgdk_pixbuf-2.0.0.dylib +0 -0
  278. package/slides/node_modules/canvas/build/Release/libgif.7.2.0.dylib +0 -0
  279. package/slides/node_modules/canvas/build/Release/libgio-2.0.0.dylib +0 -0
  280. package/slides/node_modules/canvas/build/Release/libglib-2.0.0.dylib +0 -0
  281. package/slides/node_modules/canvas/build/Release/libgmodule-2.0.0.dylib +0 -0
  282. package/slides/node_modules/canvas/build/Release/libgobject-2.0.0.dylib +0 -0
  283. package/slides/node_modules/canvas/build/Release/libgraphite2.3.2.1.dylib +0 -0
  284. package/slides/node_modules/canvas/build/Release/libharfbuzz.0.dylib +0 -0
  285. package/slides/node_modules/canvas/build/Release/libintl.8.dylib +0 -0
  286. package/slides/node_modules/canvas/build/Release/libjpeg.8.3.2.dylib +0 -0
  287. package/slides/node_modules/canvas/build/Release/libpango-1.0.0.dylib +0 -0
  288. package/slides/node_modules/canvas/build/Release/libpangocairo-1.0.0.dylib +0 -0
  289. package/slides/node_modules/canvas/build/Release/libpangoft2-1.0.0.dylib +0 -0
  290. package/slides/node_modules/canvas/build/Release/libpcre2-8.0.dylib +0 -0
  291. package/slides/node_modules/canvas/build/Release/libpixman-1.0.dylib +0 -0
  292. package/slides/node_modules/canvas/build/Release/libpng16.16.dylib +0 -0
  293. package/slides/node_modules/canvas/build/Release/librsvg-2.2.dylib +0 -0
  294. package/slides/node_modules/canvas/build/Release/libthai.0.dylib +0 -0
  295. package/slides/node_modules/canvas/build/Release/libxcb-render.0.0.0.dylib +0 -0
  296. package/slides/node_modules/canvas/build/Release/libxcb-shm.0.0.0.dylib +0 -0
  297. package/slides/node_modules/canvas/build/Release/libxcb.1.1.0.dylib +0 -0
  298. package/slides/node_modules/canvas/build/binding.Makefile +0 -6
  299. package/slides/node_modules/canvas/build/canvas.target.mk +0 -299
  300. package/slides/node_modules/canvas/build/gyp-mac-tool +0 -766
  301. package/slides/node_modules/canvas/index.d.ts +0 -507
  302. package/slides/node_modules/canvas/index.js +0 -94
  303. package/slides/node_modules/canvas/lib/DOMMatrix.js +0 -678
  304. package/slides/node_modules/canvas/lib/bindings.js +0 -43
  305. package/slides/node_modules/canvas/lib/canvas.js +0 -113
  306. package/slides/node_modules/canvas/lib/context2d.js +0 -11
  307. package/slides/node_modules/canvas/lib/image.js +0 -97
  308. package/slides/node_modules/canvas/lib/jpegstream.js +0 -41
  309. package/slides/node_modules/canvas/lib/pattern.js +0 -15
  310. package/slides/node_modules/canvas/lib/pdfstream.js +0 -35
  311. package/slides/node_modules/canvas/lib/pngstream.js +0 -42
  312. package/slides/node_modules/canvas/package.json +0 -71
  313. package/slides/node_modules/canvas/src/Backends.h +0 -9
  314. package/slides/node_modules/canvas/src/Canvas.cc +0 -1026
  315. package/slides/node_modules/canvas/src/Canvas.h +0 -128
  316. package/slides/node_modules/canvas/src/CanvasError.h +0 -37
  317. package/slides/node_modules/canvas/src/CanvasGradient.cc +0 -113
  318. package/slides/node_modules/canvas/src/CanvasGradient.h +0 -20
  319. package/slides/node_modules/canvas/src/CanvasPattern.cc +0 -129
  320. package/slides/node_modules/canvas/src/CanvasPattern.h +0 -33
  321. package/slides/node_modules/canvas/src/CanvasRenderingContext2d.cc +0 -3527
  322. package/slides/node_modules/canvas/src/CanvasRenderingContext2d.h +0 -238
  323. package/slides/node_modules/canvas/src/CharData.h +0 -233
  324. package/slides/node_modules/canvas/src/FontParser.cc +0 -605
  325. package/slides/node_modules/canvas/src/FontParser.h +0 -115
  326. package/slides/node_modules/canvas/src/Image.cc +0 -1719
  327. package/slides/node_modules/canvas/src/Image.h +0 -146
  328. package/slides/node_modules/canvas/src/ImageData.cc +0 -138
  329. package/slides/node_modules/canvas/src/ImageData.h +0 -26
  330. package/slides/node_modules/canvas/src/InstanceData.h +0 -12
  331. package/slides/node_modules/canvas/src/JPEGStream.h +0 -157
  332. package/slides/node_modules/canvas/src/PNG.h +0 -292
  333. package/slides/node_modules/canvas/src/Point.h +0 -11
  334. package/slides/node_modules/canvas/src/Util.h +0 -9
  335. package/slides/node_modules/canvas/src/bmp/BMPParser.cc +0 -459
  336. package/slides/node_modules/canvas/src/bmp/BMPParser.h +0 -60
  337. package/slides/node_modules/canvas/src/bmp/LICENSE.md +0 -24
  338. package/slides/node_modules/canvas/src/closure.cc +0 -52
  339. package/slides/node_modules/canvas/src/closure.h +0 -98
  340. package/slides/node_modules/canvas/src/color.cc +0 -796
  341. package/slides/node_modules/canvas/src/color.h +0 -30
  342. package/slides/node_modules/canvas/src/dll_visibility.h +0 -20
  343. package/slides/node_modules/canvas/src/init.cc +0 -114
  344. package/slides/node_modules/canvas/src/register_font.cc +0 -352
  345. package/slides/node_modules/canvas/src/register_font.h +0 -7
  346. package/slides/node_modules/canvas/util/has_lib.js +0 -119
  347. package/slides/node_modules/canvas/util/win_jpeg_lookup.js +0 -21
  348. package/slides/node_modules/chownr/LICENSE +0 -15
  349. package/slides/node_modules/chownr/README.md +0 -3
  350. package/slides/node_modules/chownr/chownr.js +0 -167
  351. package/slides/node_modules/chownr/package.json +0 -29
  352. package/slides/node_modules/core-util-is/LICENSE +0 -19
  353. package/slides/node_modules/core-util-is/README.md +0 -3
  354. package/slides/node_modules/core-util-is/lib/util.js +0 -107
  355. package/slides/node_modules/core-util-is/package.json +0 -38
  356. package/slides/node_modules/decompress-response/index.d.ts +0 -22
  357. package/slides/node_modules/decompress-response/index.js +0 -58
  358. package/slides/node_modules/decompress-response/license +0 -9
  359. package/slides/node_modules/decompress-response/package.json +0 -56
  360. package/slides/node_modules/decompress-response/readme.md +0 -48
  361. package/slides/node_modules/deep-extend/CHANGELOG.md +0 -46
  362. package/slides/node_modules/deep-extend/LICENSE +0 -20
  363. package/slides/node_modules/deep-extend/README.md +0 -91
  364. package/slides/node_modules/deep-extend/index.js +0 -1
  365. package/slides/node_modules/deep-extend/lib/deep-extend.js +0 -150
  366. package/slides/node_modules/deep-extend/package.json +0 -62
  367. package/slides/node_modules/detect-libc/LICENSE +0 -201
  368. package/slides/node_modules/detect-libc/README.md +0 -163
  369. package/slides/node_modules/detect-libc/index.d.ts +0 -14
  370. package/slides/node_modules/detect-libc/lib/detect-libc.js +0 -313
  371. package/slides/node_modules/detect-libc/lib/elf.js +0 -39
  372. package/slides/node_modules/detect-libc/lib/filesystem.js +0 -51
  373. package/slides/node_modules/detect-libc/lib/process.js +0 -24
  374. package/slides/node_modules/detect-libc/package.json +0 -44
  375. package/slides/node_modules/end-of-stream/LICENSE +0 -21
  376. package/slides/node_modules/end-of-stream/README.md +0 -54
  377. package/slides/node_modules/end-of-stream/index.js +0 -96
  378. package/slides/node_modules/end-of-stream/package.json +0 -37
  379. package/slides/node_modules/expand-template/.travis.yml +0 -6
  380. package/slides/node_modules/expand-template/LICENSE +0 -21
  381. package/slides/node_modules/expand-template/README.md +0 -43
  382. package/slides/node_modules/expand-template/index.js +0 -26
  383. package/slides/node_modules/expand-template/package.json +0 -29
  384. package/slides/node_modules/expand-template/test.js +0 -67
  385. package/slides/node_modules/fs-constants/LICENSE +0 -21
  386. package/slides/node_modules/fs-constants/README.md +0 -26
  387. package/slides/node_modules/fs-constants/browser.js +0 -1
  388. package/slides/node_modules/fs-constants/index.js +0 -1
  389. package/slides/node_modules/fs-constants/package.json +0 -19
  390. package/slides/node_modules/github-from-package/.travis.yml +0 -4
  391. package/slides/node_modules/github-from-package/LICENSE +0 -18
  392. package/slides/node_modules/github-from-package/example/package.json +0 -8
  393. package/slides/node_modules/github-from-package/example/url.js +0 -3
  394. package/slides/node_modules/github-from-package/index.js +0 -17
  395. package/slides/node_modules/github-from-package/package.json +0 -30
  396. package/slides/node_modules/github-from-package/readme.markdown +0 -53
  397. package/slides/node_modules/github-from-package/test/a.json +0 -8
  398. package/slides/node_modules/github-from-package/test/b.json +0 -5
  399. package/slides/node_modules/github-from-package/test/c.json +0 -5
  400. package/slides/node_modules/github-from-package/test/d.json +0 -7
  401. package/slides/node_modules/github-from-package/test/e.json +0 -5
  402. package/slides/node_modules/github-from-package/test/url.js +0 -19
  403. package/slides/node_modules/https/package.json +0 -15
  404. package/slides/node_modules/ieee754/LICENSE +0 -11
  405. package/slides/node_modules/ieee754/README.md +0 -51
  406. package/slides/node_modules/ieee754/index.d.ts +0 -10
  407. package/slides/node_modules/ieee754/index.js +0 -85
  408. package/slides/node_modules/ieee754/package.json +0 -52
  409. package/slides/node_modules/image-size/LICENSE +0 -9
  410. package/slides/node_modules/image-size/Readme.md +0 -184
  411. package/slides/node_modules/image-size/bin/image-size.js +0 -53
  412. package/slides/node_modules/image-size/dist/detector.d.ts +0 -2
  413. package/slides/node_modules/image-size/dist/detector.js +0 -30
  414. package/slides/node_modules/image-size/dist/index.d.ts +0 -10
  415. package/slides/node_modules/image-size/dist/index.js +0 -129
  416. package/slides/node_modules/image-size/dist/types/bmp.d.ts +0 -2
  417. package/slides/node_modules/image-size/dist/types/bmp.js +0 -11
  418. package/slides/node_modules/image-size/dist/types/cur.d.ts +0 -2
  419. package/slides/node_modules/image-size/dist/types/cur.js +0 -17
  420. package/slides/node_modules/image-size/dist/types/dds.d.ts +0 -2
  421. package/slides/node_modules/image-size/dist/types/dds.js +0 -11
  422. package/slides/node_modules/image-size/dist/types/gif.d.ts +0 -2
  423. package/slides/node_modules/image-size/dist/types/gif.js +0 -12
  424. package/slides/node_modules/image-size/dist/types/heif.d.ts +0 -2
  425. package/slides/node_modules/image-size/dist/types/heif.js +0 -40
  426. package/slides/node_modules/image-size/dist/types/icns.d.ts +0 -2
  427. package/slides/node_modules/image-size/dist/types/icns.js +0 -101
  428. package/slides/node_modules/image-size/dist/types/ico.d.ts +0 -2
  429. package/slides/node_modules/image-size/dist/types/ico.js +0 -68
  430. package/slides/node_modules/image-size/dist/types/index.d.ts +0 -23
  431. package/slides/node_modules/image-size/dist/types/index.js +0 -46
  432. package/slides/node_modules/image-size/dist/types/interface.d.ts +0 -13
  433. package/slides/node_modules/image-size/dist/types/interface.js +0 -2
  434. package/slides/node_modules/image-size/dist/types/j2c.d.ts +0 -2
  435. package/slides/node_modules/image-size/dist/types/j2c.js +0 -12
  436. package/slides/node_modules/image-size/dist/types/jp2.d.ts +0 -2
  437. package/slides/node_modules/image-size/dist/types/jp2.js +0 -27
  438. package/slides/node_modules/image-size/dist/types/jpg.d.ts +0 -2
  439. package/slides/node_modules/image-size/dist/types/jpg.js +0 -123
  440. package/slides/node_modules/image-size/dist/types/jxl-stream.d.ts +0 -2
  441. package/slides/node_modules/image-size/dist/types/jxl-stream.js +0 -45
  442. package/slides/node_modules/image-size/dist/types/jxl.d.ts +0 -2
  443. package/slides/node_modules/image-size/dist/types/jxl.js +0 -59
  444. package/slides/node_modules/image-size/dist/types/ktx.d.ts +0 -2
  445. package/slides/node_modules/image-size/dist/types/ktx.js +0 -19
  446. package/slides/node_modules/image-size/dist/types/png.d.ts +0 -2
  447. package/slides/node_modules/image-size/dist/types/png.js +0 -35
  448. package/slides/node_modules/image-size/dist/types/pnm.d.ts +0 -2
  449. package/slides/node_modules/image-size/dist/types/pnm.js +0 -72
  450. package/slides/node_modules/image-size/dist/types/psd.d.ts +0 -2
  451. package/slides/node_modules/image-size/dist/types/psd.js +0 -11
  452. package/slides/node_modules/image-size/dist/types/svg.d.ts +0 -2
  453. package/slides/node_modules/image-size/dist/types/svg.js +0 -90
  454. package/slides/node_modules/image-size/dist/types/tga.d.ts +0 -2
  455. package/slides/node_modules/image-size/dist/types/tga.js +0 -15
  456. package/slides/node_modules/image-size/dist/types/tiff.d.ts +0 -2
  457. package/slides/node_modules/image-size/dist/types/tiff.js +0 -95
  458. package/slides/node_modules/image-size/dist/types/utils.d.ts +0 -15
  459. package/slides/node_modules/image-size/dist/types/utils.js +0 -75
  460. package/slides/node_modules/image-size/dist/types/webp.d.ts +0 -2
  461. package/slides/node_modules/image-size/dist/types/webp.js +0 -60
  462. package/slides/node_modules/image-size/dist/utils/bit-reader.d.ts +0 -10
  463. package/slides/node_modules/image-size/dist/utils/bit-reader.js +0 -44
  464. package/slides/node_modules/image-size/package.json +0 -81
  465. package/slides/node_modules/immediate/LICENSE.txt +0 -20
  466. package/slides/node_modules/immediate/README.md +0 -93
  467. package/slides/node_modules/immediate/dist/immediate.js +0 -75
  468. package/slides/node_modules/immediate/dist/immediate.min.js +0 -1
  469. package/slides/node_modules/immediate/lib/browser.js +0 -69
  470. package/slides/node_modules/immediate/lib/index.js +0 -73
  471. package/slides/node_modules/immediate/package.json +0 -42
  472. package/slides/node_modules/inherits/LICENSE +0 -16
  473. package/slides/node_modules/inherits/README.md +0 -42
  474. package/slides/node_modules/inherits/inherits.js +0 -9
  475. package/slides/node_modules/inherits/inherits_browser.js +0 -27
  476. package/slides/node_modules/inherits/package.json +0 -29
  477. package/slides/node_modules/ini/LICENSE +0 -15
  478. package/slides/node_modules/ini/README.md +0 -102
  479. package/slides/node_modules/ini/ini.js +0 -206
  480. package/slides/node_modules/ini/package.json +0 -33
  481. package/slides/node_modules/isarray/.travis.yml +0 -4
  482. package/slides/node_modules/isarray/Makefile +0 -6
  483. package/slides/node_modules/isarray/README.md +0 -60
  484. package/slides/node_modules/isarray/component.json +0 -19
  485. package/slides/node_modules/isarray/index.js +0 -5
  486. package/slides/node_modules/isarray/package.json +0 -45
  487. package/slides/node_modules/isarray/test.js +0 -20
  488. package/slides/node_modules/jszip/.codeclimate.yml +0 -16
  489. package/slides/node_modules/jszip/.editorconfig +0 -8
  490. package/slides/node_modules/jszip/.eslintrc.js +0 -43
  491. package/slides/node_modules/jszip/.github/workflows/pr.yaml +0 -58
  492. package/slides/node_modules/jszip/.jekyll-metadata +0 -0
  493. package/slides/node_modules/jszip/.travis.yml +0 -17
  494. package/slides/node_modules/jszip/CHANGES.md +0 -204
  495. package/slides/node_modules/jszip/LICENSE.markdown +0 -651
  496. package/slides/node_modules/jszip/README.markdown +0 -33
  497. package/slides/node_modules/jszip/deps.js +0 -37
  498. package/slides/node_modules/jszip/dist/jszip.js +0 -11577
  499. package/slides/node_modules/jszip/dist/jszip.min.js +0 -13
  500. package/slides/node_modules/jszip/graph.svg +0 -601
  501. package/slides/node_modules/jszip/index.d.ts +0 -330
  502. package/slides/node_modules/jszip/lib/base64.js +0 -106
  503. package/slides/node_modules/jszip/lib/compressedObject.js +0 -74
  504. package/slides/node_modules/jszip/lib/compressions.js +0 -14
  505. package/slides/node_modules/jszip/lib/crc32.js +0 -77
  506. package/slides/node_modules/jszip/lib/defaults.js +0 -11
  507. package/slides/node_modules/jszip/lib/external.js +0 -18
  508. package/slides/node_modules/jszip/lib/flate.js +0 -85
  509. package/slides/node_modules/jszip/lib/generate/ZipFileWorker.js +0 -539
  510. package/slides/node_modules/jszip/lib/generate/index.js +0 -57
  511. package/slides/node_modules/jszip/lib/index.js +0 -55
  512. package/slides/node_modules/jszip/lib/license_header.js +0 -11
  513. package/slides/node_modules/jszip/lib/load.js +0 -88
  514. package/slides/node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js +0 -74
  515. package/slides/node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js +0 -42
  516. package/slides/node_modules/jszip/lib/nodejsUtils.js +0 -57
  517. package/slides/node_modules/jszip/lib/object.js +0 -384
  518. package/slides/node_modules/jszip/lib/readable-stream-browser.js +0 -10
  519. package/slides/node_modules/jszip/lib/reader/ArrayReader.js +0 -57
  520. package/slides/node_modules/jszip/lib/reader/DataReader.js +0 -116
  521. package/slides/node_modules/jszip/lib/reader/NodeBufferReader.js +0 -19
  522. package/slides/node_modules/jszip/lib/reader/StringReader.js +0 -38
  523. package/slides/node_modules/jszip/lib/reader/Uint8ArrayReader.js +0 -22
  524. package/slides/node_modules/jszip/lib/reader/readerFor.js +0 -28
  525. package/slides/node_modules/jszip/lib/signature.js +0 -7
  526. package/slides/node_modules/jszip/lib/stream/ConvertWorker.js +0 -26
  527. package/slides/node_modules/jszip/lib/stream/Crc32Probe.js +0 -24
  528. package/slides/node_modules/jszip/lib/stream/DataLengthProbe.js +0 -29
  529. package/slides/node_modules/jszip/lib/stream/DataWorker.js +0 -116
  530. package/slides/node_modules/jszip/lib/stream/GenericWorker.js +0 -263
  531. package/slides/node_modules/jszip/lib/stream/StreamHelper.js +0 -214
  532. package/slides/node_modules/jszip/lib/support.js +0 -38
  533. package/slides/node_modules/jszip/lib/utf8.js +0 -275
  534. package/slides/node_modules/jszip/lib/utils.js +0 -501
  535. package/slides/node_modules/jszip/lib/zipEntries.js +0 -261
  536. package/slides/node_modules/jszip/lib/zipEntry.js +0 -293
  537. package/slides/node_modules/jszip/lib/zipObject.js +0 -133
  538. package/slides/node_modules/jszip/package.json +0 -67
  539. package/slides/node_modules/jszip/sponsors.md +0 -21
  540. package/slides/node_modules/jszip/tsconfig.json +0 -101
  541. package/slides/node_modules/jszip/vendor/FileSaver.js +0 -247
  542. package/slides/node_modules/lie/README.md +0 -62
  543. package/slides/node_modules/lie/dist/lie.js +0 -350
  544. package/slides/node_modules/lie/dist/lie.min.js +0 -1
  545. package/slides/node_modules/lie/dist/lie.polyfill.js +0 -358
  546. package/slides/node_modules/lie/dist/lie.polyfill.min.js +0 -1
  547. package/slides/node_modules/lie/lib/browser.js +0 -273
  548. package/slides/node_modules/lie/lib/index.js +0 -298
  549. package/slides/node_modules/lie/license.md +0 -7
  550. package/slides/node_modules/lie/lie.d.ts +0 -244
  551. package/slides/node_modules/lie/package.json +0 -69
  552. package/slides/node_modules/lie/polyfill.js +0 -4
  553. package/slides/node_modules/mimic-response/index.d.ts +0 -17
  554. package/slides/node_modules/mimic-response/index.js +0 -77
  555. package/slides/node_modules/mimic-response/license +0 -9
  556. package/slides/node_modules/mimic-response/package.json +0 -42
  557. package/slides/node_modules/mimic-response/readme.md +0 -78
  558. package/slides/node_modules/minimist/.eslintrc +0 -29
  559. package/slides/node_modules/minimist/.github/FUNDING.yml +0 -12
  560. package/slides/node_modules/minimist/.nycrc +0 -14
  561. package/slides/node_modules/minimist/CHANGELOG.md +0 -298
  562. package/slides/node_modules/minimist/LICENSE +0 -18
  563. package/slides/node_modules/minimist/README.md +0 -121
  564. package/slides/node_modules/minimist/example/parse.js +0 -4
  565. package/slides/node_modules/minimist/index.js +0 -263
  566. package/slides/node_modules/minimist/package.json +0 -75
  567. package/slides/node_modules/minimist/test/all_bool.js +0 -34
  568. package/slides/node_modules/minimist/test/bool.js +0 -177
  569. package/slides/node_modules/minimist/test/dash.js +0 -43
  570. package/slides/node_modules/minimist/test/default_bool.js +0 -37
  571. package/slides/node_modules/minimist/test/dotted.js +0 -24
  572. package/slides/node_modules/minimist/test/kv_short.js +0 -32
  573. package/slides/node_modules/minimist/test/long.js +0 -33
  574. package/slides/node_modules/minimist/test/num.js +0 -38
  575. package/slides/node_modules/minimist/test/parse.js +0 -209
  576. package/slides/node_modules/minimist/test/parse_modified.js +0 -11
  577. package/slides/node_modules/minimist/test/proto.js +0 -64
  578. package/slides/node_modules/minimist/test/short.js +0 -69
  579. package/slides/node_modules/minimist/test/stop_early.js +0 -17
  580. package/slides/node_modules/minimist/test/unknown.js +0 -104
  581. package/slides/node_modules/minimist/test/whitespace.js +0 -10
  582. package/slides/node_modules/mkdirp-classic/LICENSE +0 -21
  583. package/slides/node_modules/mkdirp-classic/README.md +0 -18
  584. package/slides/node_modules/mkdirp-classic/index.js +0 -98
  585. package/slides/node_modules/mkdirp-classic/package.json +0 -18
  586. package/slides/node_modules/napi-build-utils/.github/workflows/run-npm-tests.yml +0 -31
  587. package/slides/node_modules/napi-build-utils/LICENSE +0 -21
  588. package/slides/node_modules/napi-build-utils/README.md +0 -52
  589. package/slides/node_modules/napi-build-utils/index.js +0 -214
  590. package/slides/node_modules/napi-build-utils/index.md +0 -0
  591. package/slides/node_modules/napi-build-utils/package.json +0 -42
  592. package/slides/node_modules/node-abi/LICENSE +0 -21
  593. package/slides/node_modules/node-abi/README.md +0 -54
  594. package/slides/node_modules/node-abi/abi_registry.json +0 -439
  595. package/slides/node_modules/node-abi/index.js +0 -179
  596. package/slides/node_modules/node-abi/package.json +0 -45
  597. package/slides/node_modules/node-addon-api/LICENSE.md +0 -9
  598. package/slides/node_modules/node-addon-api/README.md +0 -319
  599. package/slides/node_modules/node-addon-api/common.gypi +0 -20
  600. package/slides/node_modules/node-addon-api/except.gypi +0 -25
  601. package/slides/node_modules/node-addon-api/index.js +0 -12
  602. package/slides/node_modules/node-addon-api/napi-inl.deprecated.h +0 -186
  603. package/slides/node_modules/node-addon-api/napi-inl.h +0 -6607
  604. package/slides/node_modules/node-addon-api/napi.h +0 -3201
  605. package/slides/node_modules/node-addon-api/node_addon_api.gyp +0 -32
  606. package/slides/node_modules/node-addon-api/node_api.gyp +0 -9
  607. package/slides/node_modules/node-addon-api/noexcept.gypi +0 -26
  608. package/slides/node_modules/node-addon-api/nothing.c +0 -0
  609. package/slides/node_modules/node-addon-api/package-support.json +0 -21
  610. package/slides/node_modules/node-addon-api/package.json +0 -480
  611. package/slides/node_modules/node-addon-api/tools/README.md +0 -73
  612. package/slides/node_modules/node-addon-api/tools/check-napi.js +0 -99
  613. package/slides/node_modules/node-addon-api/tools/clang-format.js +0 -71
  614. package/slides/node_modules/node-addon-api/tools/conversion.js +0 -301
  615. package/slides/node_modules/node-addon-api/tools/eslint-format.js +0 -79
  616. package/slides/node_modules/once/LICENSE +0 -15
  617. package/slides/node_modules/once/README.md +0 -79
  618. package/slides/node_modules/once/once.js +0 -42
  619. package/slides/node_modules/once/package.json +0 -33
  620. package/slides/node_modules/pako/CHANGELOG.md +0 -164
  621. package/slides/node_modules/pako/LICENSE +0 -21
  622. package/slides/node_modules/pako/README.md +0 -191
  623. package/slides/node_modules/pako/dist/pako.js +0 -6818
  624. package/slides/node_modules/pako/dist/pako.min.js +0 -1
  625. package/slides/node_modules/pako/dist/pako_deflate.js +0 -3997
  626. package/slides/node_modules/pako/dist/pako_deflate.min.js +0 -1
  627. package/slides/node_modules/pako/dist/pako_inflate.js +0 -3300
  628. package/slides/node_modules/pako/dist/pako_inflate.min.js +0 -1
  629. package/slides/node_modules/pako/index.js +0 -14
  630. package/slides/node_modules/pako/lib/deflate.js +0 -400
  631. package/slides/node_modules/pako/lib/inflate.js +0 -423
  632. package/slides/node_modules/pako/lib/utils/common.js +0 -105
  633. package/slides/node_modules/pako/lib/utils/strings.js +0 -187
  634. package/slides/node_modules/pako/lib/zlib/README +0 -59
  635. package/slides/node_modules/pako/lib/zlib/adler32.js +0 -51
  636. package/slides/node_modules/pako/lib/zlib/constants.js +0 -68
  637. package/slides/node_modules/pako/lib/zlib/crc32.js +0 -59
  638. package/slides/node_modules/pako/lib/zlib/deflate.js +0 -1874
  639. package/slides/node_modules/pako/lib/zlib/gzheader.js +0 -58
  640. package/slides/node_modules/pako/lib/zlib/inffast.js +0 -345
  641. package/slides/node_modules/pako/lib/zlib/inflate.js +0 -1556
  642. package/slides/node_modules/pako/lib/zlib/inftrees.js +0 -343
  643. package/slides/node_modules/pako/lib/zlib/messages.js +0 -32
  644. package/slides/node_modules/pako/lib/zlib/trees.js +0 -1222
  645. package/slides/node_modules/pako/lib/zlib/zstream.js +0 -47
  646. package/slides/node_modules/pako/package.json +0 -44
  647. package/slides/node_modules/pptxgenjs/LICENSE +0 -21
  648. package/slides/node_modules/pptxgenjs/README.md +0 -224
  649. package/slides/node_modules/pptxgenjs/dist/pptxgen.bundle.js +0 -96
  650. package/slides/node_modules/pptxgenjs/dist/pptxgen.bundle.js.map +0 -1
  651. package/slides/node_modules/pptxgenjs/dist/pptxgen.cjs.js +0 -7370
  652. package/slides/node_modules/pptxgenjs/dist/pptxgen.es.js +0 -7368
  653. package/slides/node_modules/pptxgenjs/dist/pptxgen.min.js +0 -96
  654. package/slides/node_modules/pptxgenjs/dist/pptxgen.min.js.map +0 -1
  655. package/slides/node_modules/pptxgenjs/package.json +0 -96
  656. package/slides/node_modules/pptxgenjs/types/index.d.ts +0 -2679
  657. package/slides/node_modules/prebuild-install/CHANGELOG.md +0 -131
  658. package/slides/node_modules/prebuild-install/CONTRIBUTING.md +0 -6
  659. package/slides/node_modules/prebuild-install/LICENSE +0 -21
  660. package/slides/node_modules/prebuild-install/README.md +0 -163
  661. package/slides/node_modules/prebuild-install/asset.js +0 -44
  662. package/slides/node_modules/prebuild-install/bin.js +0 -78
  663. package/slides/node_modules/prebuild-install/download.js +0 -142
  664. package/slides/node_modules/prebuild-install/error.js +0 -14
  665. package/slides/node_modules/prebuild-install/help.txt +0 -16
  666. package/slides/node_modules/prebuild-install/index.js +0 -1
  667. package/slides/node_modules/prebuild-install/log.js +0 -33
  668. package/slides/node_modules/prebuild-install/package.json +0 -67
  669. package/slides/node_modules/prebuild-install/proxy.js +0 -35
  670. package/slides/node_modules/prebuild-install/rc.js +0 -64
  671. package/slides/node_modules/prebuild-install/util.js +0 -143
  672. package/slides/node_modules/process-nextick-args/index.js +0 -45
  673. package/slides/node_modules/process-nextick-args/license.md +0 -19
  674. package/slides/node_modules/process-nextick-args/package.json +0 -25
  675. package/slides/node_modules/process-nextick-args/readme.md +0 -18
  676. package/slides/node_modules/pump/.github/FUNDING.yml +0 -2
  677. package/slides/node_modules/pump/.travis.yml +0 -5
  678. package/slides/node_modules/pump/LICENSE +0 -21
  679. package/slides/node_modules/pump/README.md +0 -74
  680. package/slides/node_modules/pump/SECURITY.md +0 -5
  681. package/slides/node_modules/pump/empty.js +0 -1
  682. package/slides/node_modules/pump/index.js +0 -86
  683. package/slides/node_modules/pump/package.json +0 -30
  684. package/slides/node_modules/pump/test-browser.js +0 -66
  685. package/slides/node_modules/pump/test-node.js +0 -53
  686. package/slides/node_modules/queue/LICENSE +0 -8
  687. package/slides/node_modules/queue/index.d.ts +0 -173
  688. package/slides/node_modules/queue/index.js +0 -195
  689. package/slides/node_modules/queue/package.json +0 -43
  690. package/slides/node_modules/queue/readme.md +0 -221
  691. package/slides/node_modules/rc/LICENSE.APACHE2 +0 -15
  692. package/slides/node_modules/rc/LICENSE.BSD +0 -26
  693. package/slides/node_modules/rc/LICENSE.MIT +0 -24
  694. package/slides/node_modules/rc/README.md +0 -227
  695. package/slides/node_modules/rc/browser.js +0 -7
  696. package/slides/node_modules/rc/cli.js +0 -4
  697. package/slides/node_modules/rc/index.js +0 -53
  698. package/slides/node_modules/rc/lib/utils.js +0 -104
  699. package/slides/node_modules/rc/package.json +0 -29
  700. package/slides/node_modules/rc/test/ini.js +0 -16
  701. package/slides/node_modules/rc/test/nested-env-vars.js +0 -50
  702. package/slides/node_modules/rc/test/test.js +0 -59
  703. package/slides/node_modules/readable-stream/.travis.yml +0 -34
  704. package/slides/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  705. package/slides/node_modules/readable-stream/GOVERNANCE.md +0 -136
  706. package/slides/node_modules/readable-stream/LICENSE +0 -47
  707. package/slides/node_modules/readable-stream/README.md +0 -58
  708. package/slides/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +0 -60
  709. package/slides/node_modules/readable-stream/duplex-browser.js +0 -1
  710. package/slides/node_modules/readable-stream/duplex.js +0 -1
  711. package/slides/node_modules/readable-stream/lib/_stream_duplex.js +0 -131
  712. package/slides/node_modules/readable-stream/lib/_stream_passthrough.js +0 -47
  713. package/slides/node_modules/readable-stream/lib/_stream_readable.js +0 -1019
  714. package/slides/node_modules/readable-stream/lib/_stream_transform.js +0 -214
  715. package/slides/node_modules/readable-stream/lib/_stream_writable.js +0 -685
  716. package/slides/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -78
  717. package/slides/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -84
  718. package/slides/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  719. package/slides/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  720. package/slides/node_modules/readable-stream/package.json +0 -52
  721. package/slides/node_modules/readable-stream/passthrough.js +0 -1
  722. package/slides/node_modules/readable-stream/readable-browser.js +0 -7
  723. package/slides/node_modules/readable-stream/readable.js +0 -19
  724. package/slides/node_modules/readable-stream/transform.js +0 -1
  725. package/slides/node_modules/readable-stream/writable-browser.js +0 -1
  726. package/slides/node_modules/readable-stream/writable.js +0 -8
  727. package/slides/node_modules/safe-buffer/LICENSE +0 -21
  728. package/slides/node_modules/safe-buffer/README.md +0 -584
  729. package/slides/node_modules/safe-buffer/index.d.ts +0 -187
  730. package/slides/node_modules/safe-buffer/index.js +0 -62
  731. package/slides/node_modules/safe-buffer/package.json +0 -37
  732. package/slides/node_modules/semver/LICENSE +0 -15
  733. package/slides/node_modules/semver/README.md +0 -665
  734. package/slides/node_modules/semver/bin/semver.js +0 -191
  735. package/slides/node_modules/semver/classes/comparator.js +0 -143
  736. package/slides/node_modules/semver/classes/index.js +0 -7
  737. package/slides/node_modules/semver/classes/range.js +0 -557
  738. package/slides/node_modules/semver/classes/semver.js +0 -333
  739. package/slides/node_modules/semver/functions/clean.js +0 -8
  740. package/slides/node_modules/semver/functions/cmp.js +0 -54
  741. package/slides/node_modules/semver/functions/coerce.js +0 -62
  742. package/slides/node_modules/semver/functions/compare-build.js +0 -9
  743. package/slides/node_modules/semver/functions/compare-loose.js +0 -5
  744. package/slides/node_modules/semver/functions/compare.js +0 -7
  745. package/slides/node_modules/semver/functions/diff.js +0 -60
  746. package/slides/node_modules/semver/functions/eq.js +0 -5
  747. package/slides/node_modules/semver/functions/gt.js +0 -5
  748. package/slides/node_modules/semver/functions/gte.js +0 -5
  749. package/slides/node_modules/semver/functions/inc.js +0 -21
  750. package/slides/node_modules/semver/functions/lt.js +0 -5
  751. package/slides/node_modules/semver/functions/lte.js +0 -5
  752. package/slides/node_modules/semver/functions/major.js +0 -5
  753. package/slides/node_modules/semver/functions/minor.js +0 -5
  754. package/slides/node_modules/semver/functions/neq.js +0 -5
  755. package/slides/node_modules/semver/functions/parse.js +0 -18
  756. package/slides/node_modules/semver/functions/patch.js +0 -5
  757. package/slides/node_modules/semver/functions/prerelease.js +0 -8
  758. package/slides/node_modules/semver/functions/rcompare.js +0 -5
  759. package/slides/node_modules/semver/functions/rsort.js +0 -5
  760. package/slides/node_modules/semver/functions/satisfies.js +0 -12
  761. package/slides/node_modules/semver/functions/sort.js +0 -5
  762. package/slides/node_modules/semver/functions/valid.js +0 -8
  763. package/slides/node_modules/semver/index.js +0 -91
  764. package/slides/node_modules/semver/internal/constants.js +0 -37
  765. package/slides/node_modules/semver/internal/debug.js +0 -11
  766. package/slides/node_modules/semver/internal/identifiers.js +0 -29
  767. package/slides/node_modules/semver/internal/lrucache.js +0 -42
  768. package/slides/node_modules/semver/internal/parse-options.js +0 -17
  769. package/slides/node_modules/semver/internal/re.js +0 -223
  770. package/slides/node_modules/semver/package.json +0 -78
  771. package/slides/node_modules/semver/preload.js +0 -4
  772. package/slides/node_modules/semver/range.bnf +0 -16
  773. package/slides/node_modules/semver/ranges/gtr.js +0 -6
  774. package/slides/node_modules/semver/ranges/intersects.js +0 -9
  775. package/slides/node_modules/semver/ranges/ltr.js +0 -6
  776. package/slides/node_modules/semver/ranges/max-satisfying.js +0 -27
  777. package/slides/node_modules/semver/ranges/min-satisfying.js +0 -26
  778. package/slides/node_modules/semver/ranges/min-version.js +0 -63
  779. package/slides/node_modules/semver/ranges/outside.js +0 -82
  780. package/slides/node_modules/semver/ranges/simplify.js +0 -49
  781. package/slides/node_modules/semver/ranges/subset.js +0 -249
  782. package/slides/node_modules/semver/ranges/to-comparators.js +0 -10
  783. package/slides/node_modules/semver/ranges/valid.js +0 -13
  784. package/slides/node_modules/setimmediate/LICENSE.txt +0 -20
  785. package/slides/node_modules/setimmediate/package.json +0 -30
  786. package/slides/node_modules/setimmediate/setImmediate.js +0 -186
  787. package/slides/node_modules/simple-concat/.travis.yml +0 -3
  788. package/slides/node_modules/simple-concat/LICENSE +0 -20
  789. package/slides/node_modules/simple-concat/README.md +0 -44
  790. package/slides/node_modules/simple-concat/index.js +0 -15
  791. package/slides/node_modules/simple-concat/package.json +0 -47
  792. package/slides/node_modules/simple-concat/test/basic.js +0 -41
  793. package/slides/node_modules/simple-get/.github/dependabot.yml +0 -15
  794. package/slides/node_modules/simple-get/.github/workflows/ci.yml +0 -23
  795. package/slides/node_modules/simple-get/LICENSE +0 -20
  796. package/slides/node_modules/simple-get/README.md +0 -333
  797. package/slides/node_modules/simple-get/index.js +0 -108
  798. package/slides/node_modules/simple-get/package.json +0 -67
  799. package/slides/node_modules/string_decoder/.travis.yml +0 -50
  800. package/slides/node_modules/string_decoder/LICENSE +0 -48
  801. package/slides/node_modules/string_decoder/README.md +0 -47
  802. package/slides/node_modules/string_decoder/lib/string_decoder.js +0 -296
  803. package/slides/node_modules/string_decoder/package.json +0 -31
  804. package/slides/node_modules/strip-json-comments/index.js +0 -70
  805. package/slides/node_modules/strip-json-comments/license +0 -21
  806. package/slides/node_modules/strip-json-comments/package.json +0 -42
  807. package/slides/node_modules/strip-json-comments/readme.md +0 -64
  808. package/slides/node_modules/tar-fs/.travis.yml +0 -6
  809. package/slides/node_modules/tar-fs/LICENSE +0 -21
  810. package/slides/node_modules/tar-fs/README.md +0 -165
  811. package/slides/node_modules/tar-fs/index.js +0 -363
  812. package/slides/node_modules/tar-fs/package.json +0 -41
  813. package/slides/node_modules/tar-fs/test/fixtures/a/hello.txt +0 -1
  814. package/slides/node_modules/tar-fs/test/fixtures/b/a/test.txt +0 -1
  815. package/slides/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
  816. package/slides/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
  817. package/slides/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
  818. package/slides/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
  819. package/slides/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
  820. package/slides/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
  821. package/slides/node_modules/tar-fs/test/fixtures/e/file +0 -0
  822. package/slides/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
  823. package/slides/node_modules/tar-fs/test/index.js +0 -346
  824. package/slides/node_modules/tar-stream/LICENSE +0 -21
  825. package/slides/node_modules/tar-stream/README.md +0 -168
  826. package/slides/node_modules/tar-stream/extract.js +0 -257
  827. package/slides/node_modules/tar-stream/headers.js +0 -295
  828. package/slides/node_modules/tar-stream/index.js +0 -2
  829. package/slides/node_modules/tar-stream/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  830. package/slides/node_modules/tar-stream/node_modules/readable-stream/GOVERNANCE.md +0 -136
  831. package/slides/node_modules/tar-stream/node_modules/readable-stream/LICENSE +0 -47
  832. package/slides/node_modules/tar-stream/node_modules/readable-stream/README.md +0 -106
  833. package/slides/node_modules/tar-stream/node_modules/readable-stream/errors-browser.js +0 -127
  834. package/slides/node_modules/tar-stream/node_modules/readable-stream/errors.js +0 -116
  835. package/slides/node_modules/tar-stream/node_modules/readable-stream/experimentalWarning.js +0 -17
  836. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
  837. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
  838. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
  839. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_transform.js +0 -190
  840. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_writable.js +0 -641
  841. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
  842. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
  843. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
  844. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
  845. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
  846. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
  847. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
  848. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
  849. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  850. package/slides/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  851. package/slides/node_modules/tar-stream/node_modules/readable-stream/package.json +0 -68
  852. package/slides/node_modules/tar-stream/node_modules/readable-stream/readable-browser.js +0 -9
  853. package/slides/node_modules/tar-stream/node_modules/readable-stream/readable.js +0 -16
  854. package/slides/node_modules/tar-stream/pack.js +0 -255
  855. package/slides/node_modules/tar-stream/package.json +0 -58
  856. package/slides/node_modules/tar-stream/sandbox.js +0 -11
  857. package/slides/node_modules/tunnel-agent/LICENSE +0 -55
  858. package/slides/node_modules/tunnel-agent/README.md +0 -4
  859. package/slides/node_modules/tunnel-agent/index.js +0 -244
  860. package/slides/node_modules/tunnel-agent/package.json +0 -22
  861. package/slides/node_modules/undici-types/LICENSE +0 -21
  862. package/slides/node_modules/undici-types/README.md +0 -6
  863. package/slides/node_modules/undici-types/agent.d.ts +0 -31
  864. package/slides/node_modules/undici-types/api.d.ts +0 -43
  865. package/slides/node_modules/undici-types/balanced-pool.d.ts +0 -29
  866. package/slides/node_modules/undici-types/cache.d.ts +0 -36
  867. package/slides/node_modules/undici-types/client.d.ts +0 -108
  868. package/slides/node_modules/undici-types/connector.d.ts +0 -34
  869. package/slides/node_modules/undici-types/content-type.d.ts +0 -21
  870. package/slides/node_modules/undici-types/cookies.d.ts +0 -28
  871. package/slides/node_modules/undici-types/diagnostics-channel.d.ts +0 -66
  872. package/slides/node_modules/undici-types/dispatcher.d.ts +0 -256
  873. package/slides/node_modules/undici-types/env-http-proxy-agent.d.ts +0 -21
  874. package/slides/node_modules/undici-types/errors.d.ts +0 -149
  875. package/slides/node_modules/undici-types/eventsource.d.ts +0 -61
  876. package/slides/node_modules/undici-types/fetch.d.ts +0 -209
  877. package/slides/node_modules/undici-types/file.d.ts +0 -39
  878. package/slides/node_modules/undici-types/filereader.d.ts +0 -54
  879. package/slides/node_modules/undici-types/formdata.d.ts +0 -108
  880. package/slides/node_modules/undici-types/global-dispatcher.d.ts +0 -9
  881. package/slides/node_modules/undici-types/global-origin.d.ts +0 -7
  882. package/slides/node_modules/undici-types/handlers.d.ts +0 -15
  883. package/slides/node_modules/undici-types/header.d.ts +0 -4
  884. package/slides/node_modules/undici-types/index.d.ts +0 -71
  885. package/slides/node_modules/undici-types/interceptors.d.ts +0 -17
  886. package/slides/node_modules/undici-types/mock-agent.d.ts +0 -50
  887. package/slides/node_modules/undici-types/mock-client.d.ts +0 -25
  888. package/slides/node_modules/undici-types/mock-errors.d.ts +0 -12
  889. package/slides/node_modules/undici-types/mock-interceptor.d.ts +0 -93
  890. package/slides/node_modules/undici-types/mock-pool.d.ts +0 -25
  891. package/slides/node_modules/undici-types/package.json +0 -55
  892. package/slides/node_modules/undici-types/patch.d.ts +0 -33
  893. package/slides/node_modules/undici-types/pool-stats.d.ts +0 -19
  894. package/slides/node_modules/undici-types/pool.d.ts +0 -39
  895. package/slides/node_modules/undici-types/proxy-agent.d.ts +0 -28
  896. package/slides/node_modules/undici-types/readable.d.ts +0 -65
  897. package/slides/node_modules/undici-types/retry-agent.d.ts +0 -8
  898. package/slides/node_modules/undici-types/retry-handler.d.ts +0 -116
  899. package/slides/node_modules/undici-types/util.d.ts +0 -18
  900. package/slides/node_modules/undici-types/webidl.d.ts +0 -228
  901. package/slides/node_modules/undici-types/websocket.d.ts +0 -150
  902. package/slides/node_modules/util-deprecate/History.md +0 -16
  903. package/slides/node_modules/util-deprecate/LICENSE +0 -24
  904. package/slides/node_modules/util-deprecate/README.md +0 -53
  905. package/slides/node_modules/util-deprecate/browser.js +0 -67
  906. package/slides/node_modules/util-deprecate/node.js +0 -6
  907. package/slides/node_modules/util-deprecate/package.json +0 -27
  908. package/slides/node_modules/wrappy/LICENSE +0 -15
  909. package/slides/node_modules/wrappy/README.md +0 -36
  910. package/slides/node_modules/wrappy/package.json +0 -29
  911. package/slides/node_modules/wrappy/wrappy.js +0 -33
  912. package/slides/package-lock.json +0 -536
  913. package/slides/package.json +0 -16
  914. package/slides/slides.json +0 -238
@@ -1,1026 +0,0 @@
1
- // Copyright (c) 2010 LearnBoost <tj@learnboost.com>
2
-
3
- #include "Canvas.h"
4
- #include "InstanceData.h"
5
- #include <algorithm> // std::min
6
- #include <assert.h>
7
- #include <cairo-pdf.h>
8
- #include <cairo-svg.h>
9
- #include "CanvasRenderingContext2d.h"
10
- #include "closure.h"
11
- #include <cstring>
12
- #include <cctype>
13
- #include <ctime>
14
- #include <glib.h>
15
- #include "PNG.h"
16
- #include "register_font.h"
17
- #include <sstream>
18
- #include <stdlib.h>
19
- #include <string>
20
- #include <unordered_set>
21
- #include "Util.h"
22
- #include <vector>
23
- #include "node_buffer.h"
24
- #include "FontParser.h"
25
-
26
- #ifdef HAVE_JPEG
27
- #include "JPEGStream.h"
28
- #endif
29
-
30
- #define GENERIC_FACE_ERROR \
31
- "The second argument to registerFont is required, and should be an object " \
32
- "with at least a family (string) and optionally weight (string/number) " \
33
- "and style (string)."
34
-
35
- #define CAIRO_MAX_SIZE 32767
36
-
37
- using namespace std;
38
-
39
- std::vector<FontFace> Canvas::font_face_list;
40
-
41
- // Increases each time a font is (de)registered
42
- int Canvas::fontSerial = 1;
43
-
44
- /*
45
- * Initialize Canvas.
46
- */
47
-
48
- void
49
- Canvas::Initialize(Napi::Env& env, Napi::Object& exports) {
50
- Napi::HandleScope scope(env);
51
- InstanceData* data = env.GetInstanceData<InstanceData>();
52
-
53
- // Constructor
54
- Napi::Function ctor = DefineClass(env, "Canvas", {
55
- InstanceMethod<&Canvas::ToBuffer>("toBuffer", napi_default_method),
56
- InstanceMethod<&Canvas::StreamPNGSync>("streamPNGSync", napi_default_method),
57
- InstanceMethod<&Canvas::StreamPDFSync>("streamPDFSync", napi_default_method),
58
- #ifdef HAVE_JPEG
59
- InstanceMethod<&Canvas::StreamJPEGSync>("streamJPEGSync", napi_default_method),
60
- #endif
61
- InstanceAccessor<&Canvas::GetType>("type", napi_default_jsproperty),
62
- InstanceAccessor<&Canvas::GetStride>("stride", napi_default_jsproperty),
63
- InstanceAccessor<&Canvas::GetWidth, &Canvas::SetWidth>("width", napi_default_jsproperty),
64
- InstanceAccessor<&Canvas::GetHeight, &Canvas::SetHeight>("height", napi_default_jsproperty),
65
- StaticValue("PNG_NO_FILTERS", Napi::Number::New(env, PNG_NO_FILTERS), napi_default_jsproperty),
66
- StaticValue("PNG_FILTER_NONE", Napi::Number::New(env, PNG_FILTER_NONE), napi_default_jsproperty),
67
- StaticValue("PNG_FILTER_SUB", Napi::Number::New(env, PNG_FILTER_SUB), napi_default_jsproperty),
68
- StaticValue("PNG_FILTER_UP", Napi::Number::New(env, PNG_FILTER_UP), napi_default_jsproperty),
69
- StaticValue("PNG_FILTER_AVG", Napi::Number::New(env, PNG_FILTER_AVG), napi_default_jsproperty),
70
- StaticValue("PNG_FILTER_PAETH", Napi::Number::New(env, PNG_FILTER_PAETH), napi_default_jsproperty),
71
- StaticValue("PNG_ALL_FILTERS", Napi::Number::New(env, PNG_ALL_FILTERS), napi_default_jsproperty),
72
- StaticMethod<&Canvas::RegisterFont>("_registerFont", napi_default_method),
73
- StaticMethod<&Canvas::DeregisterAllFonts>("_deregisterAllFonts", napi_default_method),
74
- StaticMethod<&Canvas::ParseFont>("parseFont", napi_default_method)
75
- });
76
-
77
- data->CanvasCtor = Napi::Persistent(ctor);
78
- exports.Set("Canvas", ctor);
79
- }
80
-
81
- /*
82
- * Initialize a Canvas with the given width and height.
83
- */
84
-
85
- Canvas::Canvas(const Napi::CallbackInfo& info) : Napi::ObjectWrap<Canvas>(info), env(info.Env()) {
86
- InstanceData* data = env.GetInstanceData<InstanceData>();
87
- ctor = Napi::Persistent(data->CanvasCtor.Value());
88
-
89
- _surface = nullptr;
90
- _closure = nullptr;
91
- width = 0;
92
- height = 0;
93
- format = CAIRO_FORMAT_ARGB32;
94
-
95
- if (info[0].IsNumber()) {
96
- uint32_t width = info[0].As<Napi::Number>().Uint32Value();
97
- uint32_t height = 0;
98
-
99
- if (info[1].IsNumber()) height = info[1].As<Napi::Number>().Uint32Value();
100
-
101
- if (width > CAIRO_MAX_SIZE) {
102
- std::string msg = "Canvas width cannot exceed " + std::to_string(CAIRO_MAX_SIZE);
103
- Napi::Error::New(env, msg).ThrowAsJavaScriptException();
104
- return;
105
- }
106
-
107
- if (height > CAIRO_MAX_SIZE) {
108
- std::string msg = "Canvas height cannot exceed " + std::to_string(CAIRO_MAX_SIZE);
109
- Napi::Error::New(env, msg).ThrowAsJavaScriptException();
110
- return;
111
- }
112
-
113
- this->width = width;
114
- this->height = height;
115
-
116
- if (info[2].IsString()) {
117
- std::string str = info[2].As<Napi::String>();
118
- if (str == "pdf") {
119
- type = CANVAS_TYPE_PDF;
120
- } else if (str == "svg") {
121
- type = CANVAS_TYPE_SVG;
122
- } else {
123
- type = CANVAS_TYPE_IMAGE;
124
- }
125
- } else {
126
- type = CANVAS_TYPE_IMAGE;
127
- }
128
- } else {
129
- type = CANVAS_TYPE_IMAGE;
130
- }
131
-
132
- cairo_status_t status = cairo_surface_status(ensureSurface());
133
-
134
- if (status != CAIRO_STATUS_SUCCESS) {
135
- Napi::Error::New(env, cairo_status_to_string(status)).ThrowAsJavaScriptException();
136
- return;
137
- }
138
- }
139
-
140
- Canvas::~Canvas() {
141
- destroySurface();
142
- }
143
-
144
- /*
145
- * Get type string.
146
- */
147
-
148
- Napi::Value
149
- Canvas::GetType(const Napi::CallbackInfo& info) {
150
- switch (type) {
151
- case CANVAS_TYPE_PDF:
152
- return Napi::String::New(env, "pdf");
153
- case CANVAS_TYPE_SVG:
154
- return Napi::String::New(env, "svg");
155
- default:
156
- return Napi::String::New(env, "image");
157
- }
158
- }
159
-
160
- /*
161
- * Get stride.
162
- */
163
- Napi::Value
164
- Canvas::GetStride(const Napi::CallbackInfo& info) {
165
- return Napi::Number::New(env, cairo_image_surface_get_stride(ensureSurface()));
166
- }
167
-
168
- /*
169
- * Get width.
170
- */
171
-
172
- Napi::Value
173
- Canvas::GetWidth(const Napi::CallbackInfo& info) {
174
- return Napi::Number::New(env, getWidth());
175
- }
176
-
177
- /*
178
- * Set width.
179
- */
180
-
181
- void
182
- Canvas::SetWidth(const Napi::CallbackInfo& info, const Napi::Value& value) {
183
- if (value.IsNumber()) {
184
- uint32_t width = value.As<Napi::Number>().Uint32Value();
185
- if (width <= CAIRO_MAX_SIZE) {
186
- resurface(info.This().As<Napi::Object>(), width, this->height);
187
- }
188
- }
189
- }
190
-
191
- /*
192
- * Get height.
193
- */
194
-
195
- Napi::Value
196
- Canvas::GetHeight(const Napi::CallbackInfo& info) {
197
- return Napi::Number::New(env, getHeight());
198
- }
199
-
200
- /*
201
- * Set height.
202
- */
203
-
204
- void
205
- Canvas::SetHeight(const Napi::CallbackInfo& info, const Napi::Value& value) {
206
- if (value.IsNumber()) {
207
- uint32_t height = value.As<Napi::Number>().Uint32Value();
208
- if (height <= CAIRO_MAX_SIZE) {
209
- resurface(info.This().As<Napi::Object>(), this->width, height);
210
- }
211
- }
212
- }
213
-
214
- /*
215
- * EIO toBuffer callback.
216
- */
217
-
218
- void
219
- Canvas::ToPngBufferAsync(Closure* base) {
220
- PngClosure* closure = static_cast<PngClosure*>(base);
221
-
222
- closure->status = canvas_write_to_png_stream(
223
- closure->canvas->ensureSurface(),
224
- PngClosure::writeVec,
225
- closure);
226
- }
227
-
228
- #ifdef HAVE_JPEG
229
- void
230
- Canvas::ToJpegBufferAsync(Closure* base) {
231
- JpegClosure* closure = static_cast<JpegClosure*>(base);
232
- write_to_jpeg_buffer(closure->canvas->ensureSurface(), closure);
233
- }
234
- #endif
235
-
236
- static void
237
- parsePNGArgs(Napi::Value arg, PngClosure& pngargs) {
238
- if (arg.IsObject()) {
239
- Napi::Object obj = arg.As<Napi::Object>();
240
- Napi::Value cLevel;
241
-
242
- if (obj.Get("compressionLevel").UnwrapTo(&cLevel) && cLevel.IsNumber()) {
243
- uint32_t val = cLevel.As<Napi::Number>().Uint32Value();
244
- // See quote below from spec section 4.12.5.5.
245
- if (val <= 9) pngargs.compressionLevel = val;
246
- }
247
-
248
- Napi::Value rez;
249
- if (obj.Get("resolution").UnwrapTo(&rez) && rez.IsNumber()) {
250
- uint32_t val = rez.As<Napi::Number>().Uint32Value();
251
- if (val > 0) pngargs.resolution = val;
252
- }
253
-
254
- Napi::Value filters;
255
- if (obj.Get("filters").UnwrapTo(&filters) && filters.IsNumber()) {
256
- pngargs.filters = filters.As<Napi::Number>().Uint32Value();
257
- }
258
-
259
- Napi::Value palette;
260
- if (obj.Get("palette").UnwrapTo(&palette) && palette.IsTypedArray()) {
261
- Napi::TypedArray palette_ta = palette.As<Napi::TypedArray>();
262
- if (palette_ta.TypedArrayType() == napi_uint8_clamped_array) {
263
- pngargs.nPaletteColors = palette_ta.ElementLength();
264
- if (pngargs.nPaletteColors % 4 != 0) {
265
- throw "Palette length must be a multiple of 4.";
266
- }
267
- pngargs.palette = palette_ta.As<Napi::Uint8Array>().Data();
268
- pngargs.nPaletteColors /= 4;
269
- // Optional background color index:
270
- Napi::Value backgroundIndexVal;
271
- if (obj.Get("backgroundIndex").UnwrapTo(&backgroundIndexVal) && backgroundIndexVal.IsNumber()) {
272
- pngargs.backgroundIndex = backgroundIndexVal.As<Napi::Number>().Uint32Value();
273
- }
274
- }
275
- }
276
- }
277
- }
278
-
279
- #ifdef HAVE_JPEG
280
- static void parseJPEGArgs(Napi::Value arg, JpegClosure& jpegargs) {
281
- // "If Type(quality) is not Number, or if quality is outside that range, the
282
- // user agent must use its default quality value, as if the quality argument
283
- // had not been given." - 4.12.5.5
284
- if (arg.IsObject()) {
285
- Napi::Object obj = arg.As<Napi::Object>();
286
-
287
- Napi::Value qual;
288
- if (obj.Get("quality").UnwrapTo(&qual) && qual.IsNumber()) {
289
- double quality = qual.As<Napi::Number>().DoubleValue();
290
- if (quality >= 0.0 && quality <= 1.0) {
291
- jpegargs.quality = static_cast<uint32_t>(100.0 * quality);
292
- }
293
- }
294
-
295
- Napi::Value chroma;
296
- if (obj.Get("chromaSubsampling").UnwrapTo(&chroma)) {
297
- if (chroma.IsBoolean()) {
298
- bool subsample = chroma.As<Napi::Boolean>().Value();
299
- jpegargs.chromaSubsampling = subsample ? 2 : 1;
300
- } else if (chroma.IsNumber()) {
301
- jpegargs.chromaSubsampling = chroma.As<Napi::Number>().Uint32Value();
302
- }
303
- }
304
-
305
- Napi::Value progressive;
306
- if (obj.Get("progressive").UnwrapTo(&progressive) && progressive.IsBoolean()) {
307
- jpegargs.progressive = progressive.As<Napi::Boolean>().Value();
308
- }
309
- }
310
- }
311
- #endif
312
-
313
- #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 16, 0)
314
-
315
- static inline void setPdfMetaStr(cairo_surface_t* surf, Napi::Object opts,
316
- cairo_pdf_metadata_t t, const char* propName) {
317
- Napi::Value propValue;
318
- if (opts.Get(propName).UnwrapTo(&propValue) && propValue.IsString()) {
319
- // (copies char data)
320
- cairo_pdf_surface_set_metadata(surf, t, propValue.As<Napi::String>().Utf8Value().c_str());
321
- }
322
- }
323
-
324
- static inline void setPdfMetaDate(cairo_surface_t* surf, Napi::Object opts,
325
- cairo_pdf_metadata_t t, const char* propName) {
326
- Napi::Value propValue;
327
- if (opts.Get(propName).UnwrapTo(&propValue) && propValue.IsDate()) {
328
- auto date = static_cast<time_t>(propValue.As<Napi::Date>().ValueOf() / 1000); // ms -> s
329
- char buf[sizeof "2011-10-08T07:07:09Z"];
330
- strftime(buf, sizeof buf, "%FT%TZ", gmtime(&date));
331
- cairo_pdf_surface_set_metadata(surf, t, buf);
332
- }
333
- }
334
-
335
- static void setPdfMetadata(Canvas* canvas, Napi::Object opts) {
336
- cairo_surface_t* surf = canvas->ensureSurface();
337
-
338
- setPdfMetaStr(surf, opts, CAIRO_PDF_METADATA_TITLE, "title");
339
- setPdfMetaStr(surf, opts, CAIRO_PDF_METADATA_AUTHOR, "author");
340
- setPdfMetaStr(surf, opts, CAIRO_PDF_METADATA_SUBJECT, "subject");
341
- setPdfMetaStr(surf, opts, CAIRO_PDF_METADATA_KEYWORDS, "keywords");
342
- setPdfMetaStr(surf, opts, CAIRO_PDF_METADATA_CREATOR, "creator");
343
- setPdfMetaDate(surf, opts, CAIRO_PDF_METADATA_CREATE_DATE, "creationDate");
344
- setPdfMetaDate(surf, opts, CAIRO_PDF_METADATA_MOD_DATE, "modDate");
345
- }
346
-
347
- #endif // CAIRO 16+
348
-
349
- /*
350
- * Converts/encodes data to a Buffer. Async when a callback function is passed.
351
-
352
- * PDF canvases:
353
- (any) => Buffer
354
- ("application/pdf", config) => Buffer
355
-
356
- * SVG canvases:
357
- (any) => Buffer
358
-
359
- * ARGB data:
360
- ("raw") => Buffer
361
-
362
- * PNG-encoded
363
- () => Buffer
364
- (undefined|"image/png", {compressionLevel?: number, filter?: number}) => Buffer
365
- ((err: null|Error, buffer) => any)
366
- ((err: null|Error, buffer) => any, undefined|"image/png", {compressionLevel?: number, filter?: number})
367
-
368
- * JPEG-encoded
369
- ("image/jpeg") => Buffer
370
- ("image/jpeg", {quality?: number, progressive?: Boolean, chromaSubsampling?: Boolean|number}) => Buffer
371
- ((err: null|Error, buffer) => any, "image/jpeg")
372
- ((err: null|Error, buffer) => any, "image/jpeg", {quality?: number, progressive?: Boolean, chromaSubsampling?: Boolean|number})
373
- */
374
-
375
- Napi::Value
376
- Canvas::ToBuffer(const Napi::CallbackInfo& info) {
377
- cairo_status_t status;
378
-
379
- // Vector canvases, sync only
380
- if (isPDF() || isSVG()) {
381
- // mime type may be present, but it's not checked
382
- PdfSvgClosure* closure = static_cast<PdfSvgClosure*>(_closure);
383
- if (isPDF()) {
384
- #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 16, 0)
385
- if (info[1].IsObject()) { // toBuffer("application/pdf", config)
386
- setPdfMetadata(this, info[1].As<Napi::Object>());
387
- }
388
- #endif // CAIRO 16+
389
- }
390
-
391
- cairo_surface_t *surf = ensureSurface();
392
- cairo_surface_finish(surf);
393
-
394
- cairo_status_t status = cairo_surface_status(surf);
395
- if (status != CAIRO_STATUS_SUCCESS) {
396
- Napi::Error::New(env, cairo_status_to_string(status)).ThrowAsJavaScriptException();
397
- return env.Undefined();
398
- }
399
-
400
- return Napi::Buffer<uint8_t>::Copy(env, &closure->vec[0], closure->vec.size());
401
- }
402
-
403
- // Raw ARGB data -- just a memcpy()
404
- if (info[0].StrictEquals(Napi::String::New(env, "raw"))) {
405
- cairo_surface_t *surface = ensureSurface();
406
- cairo_surface_flush(surface);
407
- if (nBytes() > node::Buffer::kMaxLength) {
408
- Napi::Error::New(env, "Data exceeds maximum buffer length.").ThrowAsJavaScriptException();
409
- return env.Undefined();
410
- }
411
- return Napi::Buffer<uint8_t>::Copy(env, cairo_image_surface_get_data(surface), nBytes());
412
- }
413
-
414
- // Sync PNG, default
415
- if (info[0].IsUndefined() || info[0].StrictEquals(Napi::String::New(env, "image/png"))) {
416
- try {
417
- PngClosure closure(this);
418
- parsePNGArgs(info[1], closure);
419
- if (closure.nPaletteColors == 0xFFFFFFFF) {
420
- Napi::Error::New(env, "Palette length must be a multiple of 4.").ThrowAsJavaScriptException();
421
- return env.Undefined();
422
- }
423
-
424
- status = canvas_write_to_png_stream(ensureSurface(), PngClosure::writeVec, &closure);
425
-
426
- if (!env.IsExceptionPending()) {
427
- if (status) {
428
- throw status; // TODO: throw in js?
429
- } else {
430
- // TODO it's possible to avoid this copy
431
- return Napi::Buffer<uint8_t>::Copy(env, &closure.vec[0], closure.vec.size());
432
- }
433
- }
434
- } catch (cairo_status_t ex) {
435
- CairoError(ex).ThrowAsJavaScriptException();
436
- } catch (const char* ex) {
437
- Napi::Error::New(env, ex).ThrowAsJavaScriptException();
438
- }
439
-
440
- return env.Undefined();
441
- }
442
-
443
- // Async PNG
444
- if (info[0].IsFunction() &&
445
- (info[1].IsUndefined() || info[1].StrictEquals(Napi::String::New(env, "image/png")))) {
446
-
447
- PngClosure* closure;
448
- try {
449
- closure = new PngClosure(this);
450
- parsePNGArgs(info[2], *closure);
451
- } catch (cairo_status_t ex) {
452
- CairoError(ex).ThrowAsJavaScriptException();
453
- return env.Undefined();
454
- } catch (const char* ex) {
455
- Napi::Error::New(env, ex).ThrowAsJavaScriptException();
456
- return env.Undefined();
457
- }
458
-
459
- Ref();
460
- closure->cb = Napi::Persistent(info[0].As<Napi::Function>());
461
-
462
- // Make sure the surface exists since we won't have an isolate context in the async block:
463
- ensureSurface();
464
- EncodingWorker* worker = new EncodingWorker(env);
465
- worker->Init(&ToPngBufferAsync, closure);
466
- worker->Queue();
467
-
468
- return env.Undefined();
469
- }
470
-
471
- #ifdef HAVE_JPEG
472
- // Sync JPEG
473
- Napi::Value jpegStr = Napi::String::New(env, "image/jpeg");
474
- if (info[0].StrictEquals(jpegStr)) {
475
- try {
476
- JpegClosure closure(this);
477
- parseJPEGArgs(info[1], closure);
478
-
479
- write_to_jpeg_buffer(ensureSurface(), &closure);
480
-
481
- if (!env.IsExceptionPending()) {
482
- // TODO it's possible to avoid this copy.
483
- return Napi::Buffer<uint8_t>::Copy(env, &closure.vec[0], closure.vec.size());
484
- }
485
- } catch (cairo_status_t ex) {
486
- CairoError(ex).ThrowAsJavaScriptException();
487
- return env.Undefined();
488
- }
489
- return env.Undefined();
490
- }
491
-
492
- // Async JPEG
493
- if (info[0].IsFunction() && info[1].StrictEquals(jpegStr)) {
494
- JpegClosure* closure = new JpegClosure(this);
495
- parseJPEGArgs(info[2], *closure);
496
-
497
- Ref();
498
- closure->cb = Napi::Persistent(info[0].As<Napi::Function>());
499
-
500
- // Make sure the surface exists since we won't have an isolate context in the async block:
501
- ensureSurface();
502
- EncodingWorker* worker = new EncodingWorker(env);
503
- worker->Init(&ToJpegBufferAsync, closure);
504
- worker->Queue();
505
- return env.Undefined();
506
- }
507
- #endif
508
-
509
- return env.Undefined();
510
- }
511
-
512
- /*
513
- * Canvas::StreamPNG callback.
514
- */
515
-
516
- static cairo_status_t
517
- streamPNG(void *c, const uint8_t *data, unsigned len) {
518
- PngClosure* closure = (PngClosure*) c;
519
- Napi::Env env = closure->canvas->env;
520
- Napi::HandleScope scope(env);
521
- Napi::AsyncContext async(env, "canvas:StreamPNG");
522
- Napi::Value buf = Napi::Buffer<uint8_t>::Copy(env, data, len);
523
- closure->cb.MakeCallback(env.Global(), { env.Null(), buf, Napi::Number::New(env, len) }, async);
524
- return CAIRO_STATUS_SUCCESS;
525
- }
526
-
527
- /*
528
- * Stream PNG data synchronously. TODO async
529
- * StreamPngSync(this, options: {palette?: Uint8ClampedArray, backgroundIndex?: uint32, compressionLevel: uint32, filters: uint32})
530
- */
531
-
532
- void
533
- Canvas::StreamPNGSync(const Napi::CallbackInfo& info) {
534
- if (!info[0].IsFunction()) {
535
- Napi::TypeError::New(env, "callback function required").ThrowAsJavaScriptException();
536
- return;
537
- }
538
-
539
- PngClosure closure(this);
540
- parsePNGArgs(info[1], closure);
541
-
542
- closure.cb = Napi::Persistent(info[0].As<Napi::Function>());
543
-
544
- cairo_status_t status = canvas_write_to_png_stream(ensureSurface(), streamPNG, &closure);
545
-
546
- if (!env.IsExceptionPending()) {
547
- if (status) {
548
- closure.cb.Call(env.Global(), { CairoError(status).Value() });
549
- } else {
550
- closure.cb.Call(env.Global(), { env.Null(), env.Null(), Napi::Number::New(env, 0) });
551
- }
552
- }
553
- }
554
-
555
-
556
- struct PdfStreamInfo {
557
- Napi::Function fn;
558
- uint32_t len;
559
- uint8_t* data;
560
- };
561
-
562
- /*
563
- * Canvas::StreamPDF callback.
564
- */
565
-
566
- static cairo_status_t
567
- streamPDF(void *c, const uint8_t *data, unsigned len) {
568
- PdfStreamInfo* streaminfo = static_cast<PdfStreamInfo*>(c);
569
- Napi::Env env = streaminfo->fn.Env();
570
- Napi::HandleScope scope(env);
571
- Napi::AsyncContext async(env, "canvas:StreamPDF");
572
- // TODO this is technically wrong, we're returning a pointer to the data in a
573
- // vector in a class with automatic storage duration. If the canvas goes out
574
- // of scope while we're in the handler, a use-after-free could happen.
575
- Napi::Value buf = Napi::Buffer<uint8_t>::New(env, (uint8_t *)(data), len);
576
- streaminfo->fn.MakeCallback(env.Global(), { env.Null(), buf, Napi::Number::New(env, len) }, async);
577
- return CAIRO_STATUS_SUCCESS;
578
- }
579
-
580
-
581
- cairo_status_t canvas_write_to_pdf_stream(cairo_surface_t *surface, cairo_write_func_t write_func, PdfStreamInfo* streaminfo) {
582
- size_t whole_chunks = streaminfo->len / PAGE_SIZE;
583
- size_t remainder = streaminfo->len - whole_chunks * PAGE_SIZE;
584
-
585
- for (size_t i = 0; i < whole_chunks; ++i) {
586
- write_func(streaminfo, &streaminfo->data[i * PAGE_SIZE], PAGE_SIZE);
587
- }
588
-
589
- if (remainder) {
590
- write_func(streaminfo, &streaminfo->data[whole_chunks * PAGE_SIZE], remainder);
591
- }
592
-
593
- return CAIRO_STATUS_SUCCESS;
594
- }
595
-
596
- /*
597
- * Stream PDF data synchronously.
598
- */
599
-
600
- void
601
- Canvas::StreamPDFSync(const Napi::CallbackInfo& info) {
602
- if (!info[0].IsFunction()) {
603
- Napi::TypeError::New(env, "callback function required").ThrowAsJavaScriptException();
604
- return;
605
- }
606
-
607
- if (!isPDF()) {
608
- Napi::TypeError::New(env, "wrong canvas type").ThrowAsJavaScriptException();
609
- return;
610
- }
611
-
612
- #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 16, 0)
613
- if (info[1].IsObject()) {
614
- setPdfMetadata(this, info[1].As<Napi::Object>());
615
- }
616
- #endif
617
-
618
- cairo_surface_finish(ensureSurface());
619
-
620
- PdfSvgClosure *closure = static_cast<PdfSvgClosure *>(_closure);
621
- Napi::Function fn = info[0].As<Napi::Function>();
622
- PdfStreamInfo streaminfo;
623
- streaminfo.fn = fn;
624
- streaminfo.data = &closure->vec[0];
625
- streaminfo.len = closure->vec.size();
626
-
627
- cairo_status_t status = canvas_write_to_pdf_stream(ensureSurface(), streamPDF, &streaminfo);
628
-
629
- if (!env.IsExceptionPending()) {
630
- if (status) {
631
- fn.Call(env.Global(), { CairoError(status).Value() });
632
- } else {
633
- fn.Call(env.Global(), { env.Null(), env.Null(), Napi::Number::New(env, 0) });
634
- }
635
- }
636
- }
637
-
638
- /*
639
- * Stream JPEG data synchronously.
640
- */
641
-
642
- #ifdef HAVE_JPEG
643
- static uint32_t getSafeBufSize(Canvas* canvas) {
644
- // Don't allow the buffer size to exceed the size of the canvas (#674)
645
- // TODO not sure if this is really correct, but it fixed #674
646
- return (std::min)((uint32_t)canvas->getWidth() * canvas->getHeight() * 4, (uint32_t)PAGE_SIZE);
647
- }
648
-
649
- void
650
- Canvas::StreamJPEGSync(const Napi::CallbackInfo& info) {
651
- if (!info[1].IsFunction()) {
652
- Napi::TypeError::New(env, "callback function required").ThrowAsJavaScriptException();
653
- return;
654
- }
655
-
656
- JpegClosure closure(this);
657
- parseJPEGArgs(info[0], closure);
658
- closure.cb = Napi::Persistent(info[1].As<Napi::Function>());
659
-
660
- uint32_t bufsize = getSafeBufSize(this);
661
- write_to_jpeg_stream(ensureSurface(), bufsize, &closure);
662
- }
663
- #endif
664
-
665
- char *
666
- str_value(Napi::Maybe<Napi::Value> maybe, const char *fallback, bool can_be_number) {
667
- Napi::Value val;
668
- if (maybe.UnwrapTo(&val)) {
669
- if (val.IsString() || (can_be_number && val.IsNumber())) {
670
- Napi::String strVal;
671
- if (val.ToString().UnwrapTo(&strVal)) return strdup(strVal.Utf8Value().c_str());
672
- } else if (fallback) {
673
- return strdup(fallback);
674
- }
675
- }
676
-
677
- return NULL;
678
- }
679
-
680
- void
681
- Canvas::RegisterFont(const Napi::CallbackInfo& info) {
682
- Napi::Env env = info.Env();
683
- if (!info[0].IsString()) {
684
- Napi::Error::New(env, "Wrong argument type").ThrowAsJavaScriptException();
685
- return;
686
- } else if (!info[1].IsObject()) {
687
- Napi::Error::New(env, GENERIC_FACE_ERROR).ThrowAsJavaScriptException();
688
- return;
689
- }
690
-
691
- std::string filePath = info[0].As<Napi::String>();
692
- PangoFontDescription *sys_desc = get_pango_font_description((unsigned char *)(filePath.c_str()));
693
-
694
- if (!sys_desc) {
695
- Napi::Error::New(env, "Could not parse font file").ThrowAsJavaScriptException();
696
- return;
697
- }
698
-
699
- PangoFontDescription *user_desc = pango_font_description_new();
700
-
701
- // now check the attrs, there are many ways to be wrong
702
- Napi::Object js_user_desc = info[1].As<Napi::Object>();
703
-
704
- // TODO: use FontParser on these values just like the FontFace API works
705
- char *family = str_value(js_user_desc.Get("family"), NULL, false);
706
- char *weight = str_value(js_user_desc.Get("weight"), "normal", true);
707
- char *style = str_value(js_user_desc.Get("style"), "normal", false);
708
-
709
- if (family && weight && style) {
710
- pango_font_description_set_weight(user_desc, Canvas::GetWeightFromCSSString(weight));
711
- pango_font_description_set_style(user_desc, Canvas::GetStyleFromCSSString(style));
712
- pango_font_description_set_family(user_desc, family);
713
-
714
- auto found = std::find_if(font_face_list.begin(), font_face_list.end(), [&](FontFace& f) {
715
- return pango_font_description_equal(f.sys_desc, sys_desc);
716
- });
717
-
718
- if (found != font_face_list.end()) {
719
- pango_font_description_free(found->user_desc);
720
- found->user_desc = user_desc;
721
- } else if (register_font((unsigned char *) filePath.c_str())) {
722
- FontFace face;
723
- face.user_desc = user_desc;
724
- face.sys_desc = sys_desc;
725
- strncpy((char *)face.file_path, (char *) filePath.c_str(), 1023);
726
- font_face_list.push_back(face);
727
- } else {
728
- pango_font_description_free(user_desc);
729
- Napi::Error::New(env, "Could not load font to the system's font host").ThrowAsJavaScriptException();
730
-
731
- }
732
- } else {
733
- pango_font_description_free(user_desc);
734
- if (!env.IsExceptionPending()) {
735
- Napi::Error::New(env, GENERIC_FACE_ERROR).ThrowAsJavaScriptException();
736
- }
737
- }
738
-
739
- free(family);
740
- free(weight);
741
- free(style);
742
- fontSerial++;
743
- }
744
-
745
- void
746
- Canvas::DeregisterAllFonts(const Napi::CallbackInfo& info) {
747
- Napi::Env env = info.Env();
748
- // Unload all fonts from pango to free up memory
749
- bool success = true;
750
-
751
- std::for_each(font_face_list.begin(), font_face_list.end(), [&](FontFace& f) {
752
- if (!deregister_font( (unsigned char *)f.file_path )) success = false;
753
- pango_font_description_free(f.user_desc);
754
- pango_font_description_free(f.sys_desc);
755
- });
756
-
757
- font_face_list.clear();
758
- fontSerial++;
759
- if (!success) Napi::Error::New(env, "Could not deregister one or more fonts").ThrowAsJavaScriptException();
760
- }
761
-
762
- /*
763
- * Do not use! This is only exported for testing
764
- */
765
- Napi::Value
766
- Canvas::ParseFont(const Napi::CallbackInfo& info) {
767
- Napi::Env env = info.Env();
768
-
769
- if (info.Length() != 1) return env.Undefined();
770
-
771
- Napi::String str;
772
- if (!info[0].ToString().UnwrapTo(&str)) return env.Undefined();
773
-
774
- bool ok;
775
- auto props = FontParser::parse(str, &ok);
776
- if (!ok) return env.Undefined();
777
-
778
- Napi::Object obj = Napi::Object::New(env);
779
- obj.Set("size", Napi::Number::New(env, props.fontSize));
780
- Napi::Array families = Napi::Array::New(env);
781
- obj.Set("families", families);
782
-
783
- unsigned int index = 0;
784
-
785
- for (auto& family : props.fontFamily) {
786
- families[index++] = Napi::String::New(env, family);
787
- }
788
-
789
- obj.Set("weight", Napi::Number::New(env, props.fontWeight));
790
- obj.Set("variant", Napi::Number::New(env, static_cast<int>(props.fontVariant)));
791
- obj.Set("style", Napi::Number::New(env, static_cast<int>(props.fontStyle)));
792
-
793
- return obj;
794
- }
795
-
796
- /*
797
- * Get a PangoStyle from a CSS string (like "italic")
798
- */
799
-
800
- PangoStyle
801
- Canvas::GetStyleFromCSSString(const char *style) {
802
- PangoStyle s = PANGO_STYLE_NORMAL;
803
-
804
- if (strlen(style) > 0) {
805
- if (0 == strcmp("italic", style)) {
806
- s = PANGO_STYLE_ITALIC;
807
- } else if (0 == strcmp("oblique", style)) {
808
- s = PANGO_STYLE_OBLIQUE;
809
- }
810
- }
811
-
812
- return s;
813
- }
814
-
815
- /*
816
- * Get a PangoWeight from a CSS string ("bold", "100", etc)
817
- */
818
-
819
- PangoWeight
820
- Canvas::GetWeightFromCSSString(const char *weight) {
821
- PangoWeight w = PANGO_WEIGHT_NORMAL;
822
-
823
- if (strlen(weight) > 0) {
824
- if (0 == strcmp("bold", weight)) {
825
- w = PANGO_WEIGHT_BOLD;
826
- } else if (0 == strcmp("100", weight)) {
827
- w = PANGO_WEIGHT_THIN;
828
- } else if (0 == strcmp("200", weight)) {
829
- w = PANGO_WEIGHT_ULTRALIGHT;
830
- } else if (0 == strcmp("300", weight)) {
831
- w = PANGO_WEIGHT_LIGHT;
832
- } else if (0 == strcmp("400", weight)) {
833
- w = PANGO_WEIGHT_NORMAL;
834
- } else if (0 == strcmp("500", weight)) {
835
- w = PANGO_WEIGHT_MEDIUM;
836
- } else if (0 == strcmp("600", weight)) {
837
- w = PANGO_WEIGHT_SEMIBOLD;
838
- } else if (0 == strcmp("700", weight)) {
839
- w = PANGO_WEIGHT_BOLD;
840
- } else if (0 == strcmp("800", weight)) {
841
- w = PANGO_WEIGHT_ULTRABOLD;
842
- } else if (0 == strcmp("900", weight)) {
843
- w = PANGO_WEIGHT_HEAVY;
844
- }
845
- }
846
-
847
- return w;
848
- }
849
-
850
- /*
851
- * Given a user description, return a description that will select the
852
- * font either from the system or @font-face
853
- */
854
-
855
- PangoFontDescription *
856
- Canvas::ResolveFontDescription(const PangoFontDescription *desc) {
857
- // One of the user-specified families could map to multiple SFNT family names
858
- // if someone registered two different fonts under the same family name.
859
- // https://drafts.csswg.org/css-fonts-3/#font-style-matching
860
- FontFace best;
861
- istringstream families(pango_font_description_get_family(desc));
862
- unordered_set<string> seen_families;
863
- string resolved_families;
864
- bool first = true;
865
-
866
- for (string family; getline(families, family, ','); ) {
867
- string renamed_families;
868
- for (auto& ff : font_face_list) {
869
- string pangofamily = string(pango_font_description_get_family(ff.user_desc));
870
- if (streq_casein(family, pangofamily)) {
871
- const char* sys_desc_family_name = pango_font_description_get_family(ff.sys_desc);
872
- bool unseen = seen_families.find(sys_desc_family_name) == seen_families.end();
873
- bool better = best.user_desc == nullptr || pango_font_description_better_match(desc, best.user_desc, ff.user_desc);
874
-
875
- // Avoid sending duplicate SFNT font names due to a bug in Pango for macOS:
876
- // https://bugzilla.gnome.org/show_bug.cgi?id=762873
877
- if (unseen) {
878
- seen_families.insert(sys_desc_family_name);
879
-
880
- if (better) {
881
- renamed_families = string(sys_desc_family_name) + (renamed_families.size() ? "," : "") + renamed_families;
882
- } else {
883
- renamed_families = renamed_families + (renamed_families.size() ? "," : "") + sys_desc_family_name;
884
- }
885
- }
886
-
887
- if (first && better) best = ff;
888
- }
889
- }
890
-
891
- if (resolved_families.size()) resolved_families += ',';
892
- resolved_families += renamed_families.size() ? renamed_families : family;
893
- first = false;
894
- }
895
-
896
- PangoFontDescription* ret = pango_font_description_copy(best.sys_desc ? best.sys_desc : desc);
897
- pango_font_description_set_family(ret, resolved_families.c_str());
898
-
899
- return ret;
900
- }
901
-
902
- // This returns an approximate value only, suitable for
903
- // Napi::MemoryManagement:: AdjustExternalMemory.
904
- // The formats that don't map to intrinsic types (RGB30, A1) round up.
905
- uint8_t
906
- Canvas::approxBytesPerPixel() {
907
- switch (format) {
908
- case CAIRO_FORMAT_ARGB32:
909
- case CAIRO_FORMAT_RGB24:
910
- return 4;
911
- #ifdef CAIRO_FORMAT_RGB30
912
- case CAIRO_FORMAT_RGB30:
913
- return 3;
914
- #endif
915
- case CAIRO_FORMAT_RGB16_565:
916
- return 2;
917
- case CAIRO_FORMAT_A8:
918
- case CAIRO_FORMAT_A1:
919
- return 1;
920
- default:
921
- return 0;
922
- }
923
- }
924
-
925
- void
926
- Canvas::setFormat(cairo_format_t format) {
927
- if (this->format != format) {
928
- destroySurface();
929
- this->format = format;
930
- }
931
- }
932
-
933
- cairo_format_t
934
- Canvas::getFormat() {
935
- return isImage() ? format : CAIRO_FORMAT_INVALID;
936
- }
937
-
938
- /*
939
- * Re-alloc the surface, destroying the previous.
940
- */
941
-
942
- void
943
- Canvas::resurface(Napi::Object This, uint16_t width, uint16_t height) {
944
- Napi::HandleScope scope(env);
945
- Napi::Value context;
946
-
947
- if (type == CANVAS_TYPE_PDF) {
948
- ensureSurface();
949
- cairo_pdf_surface_set_size(_surface, width, height);
950
- this->width = width;
951
- this->height = height;
952
- } else {
953
- destroySurface();
954
- this->width = width;
955
- this->height = height;
956
- ensureSurface();
957
- if (This.Get("context").UnwrapTo(&context) && context.IsObject()) {
958
- // Reset context
959
- Context2d *context2d = Context2d::Unwrap(context.As<Napi::Object>());
960
- cairo_t *prev = context2d->context();
961
- context2d->setContext(createCairoContext());
962
- context2d->resetState();
963
- cairo_destroy(prev);
964
- }
965
- }
966
- }
967
-
968
- cairo_surface_t *
969
- Canvas::ensureSurface() {
970
- if (_surface) {
971
- return _surface;
972
- }
973
-
974
- assert(!_closure);
975
-
976
- if (type == CANVAS_TYPE_PDF) {
977
- _closure = new PdfSvgClosure(this);
978
- _surface = cairo_pdf_surface_create_for_stream(PdfSvgClosure::writeVec, _closure, width, height);
979
- } else if (type == CANVAS_TYPE_SVG) {
980
- _closure = new PdfSvgClosure(this);
981
- _surface = cairo_svg_surface_create_for_stream(PdfSvgClosure::writeVec, _closure, width, height);
982
- } else {
983
- _surface = cairo_image_surface_create(format, width, height);
984
- Napi::MemoryManagement::AdjustExternalMemory(env, (int64_t)approxBytesPerPixel() * width * height);
985
- }
986
-
987
- assert(_surface);
988
- return _surface;
989
- }
990
-
991
- void
992
- Canvas::destroySurface() {
993
- if (_surface) {
994
- // flush any operations that may use the closure that is freed below
995
- cairo_surface_finish(_surface);
996
- if (type == CANVAS_TYPE_IMAGE) {
997
- Napi::MemoryManagement::AdjustExternalMemory(env, -(int64_t)approxBytesPerPixel() * width * height);
998
- }
999
- cairo_surface_destroy(_surface);
1000
- _surface = nullptr;
1001
- }
1002
- if (_closure) {
1003
- delete _closure;
1004
- _closure = nullptr;
1005
- }
1006
- }
1007
-
1008
- /**
1009
- * Wrapper around cairo_create()
1010
- * (do not call cairo_create directly, call this instead)
1011
- */
1012
- cairo_t*
1013
- Canvas::createCairoContext() {
1014
- cairo_t* ret = cairo_create(ensureSurface());
1015
- cairo_set_line_width(ret, 1); // Cairo defaults to 2
1016
- return ret;
1017
- }
1018
-
1019
- /*
1020
- * Construct an Error from the given cairo status.
1021
- */
1022
-
1023
- Napi::Error
1024
- Canvas::CairoError(cairo_status_t status) {
1025
- return Napi::Error::New(env, cairo_status_to_string(status));
1026
- }